<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/@justeat/feature-management/dist/feature-management.umd.js","node_modules/@takeaway/ui-vanilla/dist/index.js","node_modules/axios/index.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/cancel/Cancel.js","node_modules/axios/lib/cancel/CancelToken.js","node_modules/axios/lib/cancel/isCancel.js","node_modules/axios/lib/core/Axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/buildFullPath.js","node_modules/axios/lib/core/createError.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/core/enhanceError.js","node_modules/axios/lib/core/mergeConfig.js","node_modules/axios/lib/core/settle.js","node_modules/axios/lib/core/transformData.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/normalizeHeaderName.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/utils.js","node_modules/object-assign/index.js","node_modules/process/browser.js","node_modules/prop-types/checkPropTypes.js","node_modules/prop-types/factoryWithThrowingShims.js","node_modules/prop-types/factoryWithTypeCheckers.js","node_modules/prop-types/index.js","node_modules/prop-types/lib/ReactPropTypesSecret.js","node_modules/prop-types/lib/has.js","node_modules/react-is/cjs/react-is.development.js","node_modules/react-is/cjs/react-is.production.min.js","node_modules/react-is/index.js","node_modules/swiper/js/swiper.js","src/js/components/categoryBarComponent.js","src/js/components/kitchenTypeComponent.js","src/js/enums/keyCode.js","src/js/index.js","src/js/lib/helpers.js","src/js/services/featuremanagement.js","src/js/services/mediaquery.service.js"],"names":[],"mappings":"AAAA;;ACAA;AACA;;;;ACDA;AACA;AACA;;ACFA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACxLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AClmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;qjBCv8QA;AACA;;;;AAOA;;;AAHA;;;;AACA;;AACA;;AAEA;;;;;;;;;;AACA;AACA;;IAEqB,W;AAwCnB,uBAAa,IAAb,EAAmB;AAAA;;AAAA;;AAAA,SAvCnB,cAuCmB,GAvCF;AACf,gBAAU,yBADK;AAEf,YAAM,wBAFS;AAGf,uBAAiB,oCAHF;AAIf,yBAAmB,6BAJJ;AAKf,kBAAY,2BALG;AAMf,iBAAW,0BANI;AAOf,aAAO,cAPQ;AAQf,oBAAc,6BARC;AASf,mBAAa,gCATE;AAUf,6BAAuB,4BAVR;AAWf,sBAAgB,wBAXD;AAYf,uBAAiB,mBAZF;AAaf,qBAAe,8BAbA;AAcf,4BAAsB,uBAdP;AAef,gCAA0B;AAfX,KAuCE;AAAA,SArBnB,iBAqBmB,GArBC,SAqBD;AAAA,SAjBnB,UAiBmB,GAjBN;AACX,cAAQ,oBAAU,MAAV,CAAiB;AADd,KAiBM;AAAA,SAbnB,MAamB,GAbV;AACP,oBAAc,SADP;AAEP,6BAAuB,CAFhB;AAGP,qBAAe,EAHR;AAIP,yBAAmB,EAJZ;AAKP,oBAAc,SALP;AAMP,6BAAuB,SANhB;AAOP,iCAA2B,SAPpB;AAQP,oBAAc;AARP,KAaU;;AAAA,SAKnB,IALmB,GAKZ,YAAM;AACX,YAAK,kBAAL,GAA0B,IAAI,oBAAJ,EAA1B;;AAEA,UAAM,cAAc,SAAS,aAAT,OAA2B,MAAK,cAAL,CAAoB,cAA/C,CAApB;;AAEA,UAAI,WAAJ,EAAiB;AACf,cAAK,aAAL,GAAqB,KAAK,KAAL,CAAW,YAAY,OAAZ,CAAoB,YAApB,IAAoC,IAA/C,CAArB;AACA,cAAK,MAAL,CAAY,aAAZ,GAA4B,KAAK,KAAL,CAAW,YAAY,OAAZ,CAAoB,aAApB,IAAqC,IAAhD,CAA5B;AACA,cAAK,MAAL,CAAY,YAAZ,GAA2B,YAAY,OAAZ,CAAoB,YAApB,IAAoC,EAA/D;AACA;AACA,YAAI,CAAC,aAAa,MAAK,iBAAlB,CAAL,EAA2C;AACzC,cAAM,WAAW,KAAK,KAAL,CAAW,YAAY,OAAZ,CAAoB,gBAApB,QAAX,EAAyD,QAAzD,IAAqE,EAAtF;AACA,gBAAK,MAAL,CAAY,yBAAZ,GAAwC,MAAK,iBAAL,CAAuB,QAAvB,CAAxC;AACA,cAAI,MAAK,MAAL,CAAY,yBAAZ,KAA0C,IAA9C,EAAoD;AAClD,0BAAc,MAAK,iBAAnB,EAAsC,MAAK,MAAL,CAAY,yBAAZ,CAAsC,UAA5E;AACD;AACF;AACF;;AAED;AACA;AACA,UAAI,MAAK,KAAL,CAAW,MAAX,CAAkB,UAAlB,CAA6B,MAAjC,EAAyC;AACvC;AACA,cAAK,KAAL,CAAW,MAAX,CAAkB,UAAlB,CAA6B,OAA7B,CAAqC,eAArC;AACA;AACA,cAAK,KAAL,CAAW,MAAX,CAAkB,UAAlB,CAA6B,MAA7B,CAAoC,gBAApC,CACE,OADF,EAEE,wBAAgB;AACd,uBAAa,cAAb;AACA,gBAAK,YAAL;AACD,SALH;AAOD;;AAED;AACA;AACA,UAAI,MAAK,KAAL,CAAW,MAAX,CAAkB,UAAlB,CAA6B,MAAjC,EAAyC;AACvC;AACA,cAAK,KAAL,CAAW,MAAX,CAAkB,UAAlB,CAA6B,OAA7B,CAAqC,WAArC;AACA;AACA,cAAK,KAAL,CAAW,MAAX,CAAkB,UAAlB,CAA6B,MAA7B,CAAoC,gBAApC,CACE,OADF,EAEE,wBAAgB;AACd,uBAAa,cAAb;AACA,gBAAK,UAAL;AACD,SALH;AAOD;;AAED,YAAK,KAAL,CAAW,MAAX,CAAkB,EAAlB,CAAqB,QAArB,EAA+B,YAAM;AACnC,cAAK,MAAL;AACD,OAFD;;AAIA,YAAK,MAAL;;AAEA;AACA,iCAAa;AAAA,eAAM,MAAK,KAAL,CAAW,MAAX,CAAkB,MAAlB,CAAyB,aAAzB,EAAN;AAAA,OAAb;AACD,KA9DkB;;AAAA,SA4EnB,qBA5EmB,GA4EK,YAAM;AAC5B,UAAI,qBAAqB,CAAzB;AACA,UAAI,MAAK,kBAAL,CAAwB,SAAxB,CAAkC,WAAlC,CAAJ,EAAoD;AAClD,6BAAqB,EAArB;AACD,OAFD,MAEO,IAAI,MAAK,kBAAL,CAAwB,SAAxB,CAAkC,mBAAlC,CAAJ,EAA4D;AACjE,6BAAqB,CAArB;AACD;AACD,aAAO,kBAAP;AACD,KApFkB;;AAAA,SAsFnB,MAtFmB,GAsFV,YAAM;AACb,UAAM,wBAAwB,MAAK,qBAAL,EAA9B;AACA,UAAM,aAAa,MAAK,MAAL,CAAY,aAAZ,CAA0B,KAA1B,CAAgC,CAAhC,EAAmC,qBAAnC,CAAnB;AACA,UAAM,4BAA4B,MAAK,MAAL,CAAY,yBAA9C;;AAEA;AACA,UACE,0BAA0B,MAAK,MAAL,CAAY,qBAAtC,IACA,8BAA8B,SAFhC,EAGE;AACA;AACA,cAAK,KAAL,CAAW,MAAX,CAAkB,GAAlB,CAAsB,CAAtB,EAAyB,SAAzB,CAAmC,MAAnC,CAA0C,SAA1C;;AAEA;AACA,YAAI,0BAA0B,MAAK,MAAL,CAAY,qBAA1C,EAAiE;AAC/D,gBAAK,MAAL,CAAY,qBAAZ,GAAoC,qBAApC;AACA,gBAAK,KAAL,CAAW,MAAX,CAAkB,eAAlB;;AAEA,gBAAK,MAAL,CAAY,iBAAZ,GAAgC,EAAhC;;AAEA,gBAAK,kBAAL;;AAEA,gBAAK,oBAAL,CAA0B,UAA1B;AACD;;AAED;AACA,YAAI,8BAA8B,SAAlC,EAA6C;AAC3C,gBAAK,6CAAL,CAAmD,yBAAnD;AACD,SAFD,MAEO;AACL;AACA,gBAAK,eAAL;AACD;;AAED;AACA,YAAI,MAAK,MAAL,CAAY,aAAZ,CAA0B,MAA1B,GAAmC,qBAAvC,EAA8D;AAC5D,gBAAK,iBAAL;AACD;;AAED;AACA,cAAK,KAAL,CAAW,MAAX,CAAkB,GAAlB,CAAsB,CAAtB,EAAyB,SAAzB,CAAmC,GAAnC,CAAuC,SAAvC;;AAEA,cAAK,MAAL;AACD;;AAED,YAAK,oBAAL;;AAEA,YAAK,oBAAL;AACD,KArIkB;;AAAA,SAwPnB,eAxPmB,GAwPD;AAAA,6CAED,MAAK,iBAFJ,kIAQV,MAAK,cAAL,CAAoB,KARV,kBASV,MAAK,cAAL,CAAoB,UATV,kBAUV,MAAK,cAAL,CAAoB,aAVV,+BAYN,MAAK,MAAL,CAAY,YAZN,oDAauB,MAAK,aAAL,CAAmB,aAb1C;AAAA,KAxPC;;AAAA,SA2QnB,oBA3QmB,GA2QI;AAAA,UAAG,QAAH,QAAG,QAAH;AAAA,6CAEN,MAAK,iBAFC,6BAGL,SAAS,UAHJ,4BAIN,SAAS,IAJH,4EAQf,MAAK,cAAL,CAAoB,KARL,kBASf,MAAK,cAAL,CAAoB,QATL,kBAUf,MAAK,cAAL,CAAoB,WAVL,+BAYX,SAAS,IAZE,sBAaZ,SAAS,OAbG,4DAemB,SAAS,YAf5B;AAAA,KA3QJ;;AAAA,SAiSnB,cAjSmB,GAiSF;AAAA,mDAGT,MAAK,cAAL,CAAoB,KAHX,kBAIT,MAAK,cAAL,CAAoB,SAJX,kBAKT,MAAK,cAAL,CAAoB,YALX,8BAON,MAAK,aAAL,CAAmB,YAPb,4DASyB,MAAK,aAAL,CAAmB,YAT5C;AAAA,KAjSE;;AAAA,SAiTnB,WAjTmB,GAiTL,YAAM;AAClB,UAAI,YAAY,MAAK,KAAL,CAAW,MAAX,CAAkB,WAAlB,GAAgC,CAAhD;AACA,UAAI,aAAa,MAAK,KAAL,CAAW,MAAX,CAAkB,MAAlB,CAAyB,MAA1C,EAAkD;AAChD,cAAK,KAAL,CAAW,MAAX,CAAkB,OAAlB,CAA0B,SAA1B;AACD,OAFD,MAEO;AACL,cAAK,UAAL;AACD;AACF,KAxTkB;;AAAA,SA6TnB,eA7TmB,GA6TD,YAAM;AACtB,UAAI,gBAAgB,MAAK,KAAL,CAAW,MAAX,CAAkB,WAAlB,GAAgC,CAApD;AACA,UAAI,iBAAiB,CAArB,EAAwB;AACtB,cAAK,KAAL,CAAW,MAAX,CAAkB,OAAlB,CAA0B,aAA1B;AACD,OAFD,MAEO;AACL,cAAK,YAAL;AACD;AACF,KApUkB;;AAAA,SAyUnB,YAzUmB,GAyUJ,YAAM;AACnB,YAAK,KAAL,CAAW,MAAX,CAAkB,OAAlB,CAA0B,CAA1B;AACD,KA3UkB;;AAAA,SAgVnB,UAhVmB,GAgVN,YAAM;AACjB,YAAK,KAAL,CAAW,MAAX,CAAkB,OAAlB,CAA0B,MAAK,KAAL,CAAW,MAAX,CAAkB,MAAlB,CAAyB,MAAnD;AACD,KAlVkB;;AAAA,SAoVnB,oBApVmB,GAoVI,YAAM;AAC3B,UAAM,kBAAkB,6BACnB,SAAS,gBAAT,OAA8B,MAAK,cAAL,CAAoB,cAAlD,UAAqE,MAAK,cAAL,CAAoB,KAAzF,CADmB,GAEtB,SAFsB,CAEZ,UAAC,QAAD;AAAA,eAAc,SAAS,SAAT,CAAmB,QAAnB,MAA+B,MAAK,cAAL,CAAoB,YAAnD,CAAd;AAAA,OAFY,CAAxB;;AAIA,UAAI,kBAAkB,CAAtB,EAAyB;AACvB,cAAK,KAAL,CAAW,MAAX,CAAkB,WAAlB,CAA8B,eAA9B;AACD;AACF,KA5VkB;;AAAA,SA8VnB,kBA9VmB,GA8VE,YAAM;AACzB,UAAM,oBAAoB,6BACrB,SAAS,gBAAT,OAA8B,MAAK,cAAL,CAAoB,cAAlD,UAAqE,MAAK,cAAL,CAAoB,KAAzF,cAAuG,MAAK,cAAL,CAAoB,YAA3H,OADqB,GAExB,MAFF;;AAIA,UAAI,iBAAJ,EAAuB;AACrB,cAAK,KAAL,CAAW,MAAX,CAAkB,WAAlB,CAA8B,oBAAoB,CAAlD;AACA,cAAK,MAAL,CAAY,qBAAZ,GAAoC,SAApC;AACD;AACF,KAvWkB;;AAAA,SAyWnB,iBAzWmB,GAyWC,UAAC,YAAD;AAAA,aAAkB,MAAK,MAAL,CAAY,aAAZ,CAA0B,IAA1B,CACpC;AAAA,YAAG,YAAH,SAAG,YAAH;AAAA,eAAsB,iBAAiB,YAAvC;AAAA,OADoC,KAEjC,IAFe;AAAA,KAzWD;;AAAA,SA6WnB,iBA7WmB,GA6WC,UAAC,YAAD;AAAA,aAAkB,MAAK,MAAL,CAAY,aAAZ,CAA0B,IAA1B,CACpC;AAAA,YAAG,MAAH,SAAG,MAAH;AAAA,eAAgB,WAAW,YAA3B;AAAA,OADoC,KACQ,IAD1B;AAAA,KA7WD;;AAAA,SAgXnB,eAhXmB,GAgXD,UAAC,UAAD;AAAA,aAAgB,MAAK,MAAL,CAAY,aAAZ,CAA0B,IAA1B,CAChC;AAAA,eAAY,SAAS,UAAT,KAAwB,UAApC;AAAA,OADgC,KAE7B,IAFa;AAAA,KAhXC;;AAAA,SAoXnB,mBApXmB,GAoXG,YAAM;AAC1B,aAAO,MAAK,MAAL,CAAY,aAAZ,CAA0B,GAA1B,CAA8B,UAAC,QAAD;AAAA,eAAc,SAAS,YAAvB;AAAA,OAA9B,CAAP;AACD,KAtXkB;;AAAA,SAwXnB,YAxXmB,GAwXJ,YAAM;AACnB;AACA,YAAK,KAAL,GAAa,IAAI,gBAAJ,CAAU;AACrB,mHAEwC,MAAK,aAAL,CAAmB,aAF3D,kCADqB;AAMrB,qBAAa,EANQ;AAOrB,sBAAc,MAAK,iBAPE;AAQrB,uBAAe,yBAAM;AACnB,gBAAK,oBAAL,CAA0B;AACxB,0BAAc,gBAAgB,EAAE,MAAM,MAAK,MAAL,CAAY,YAApB,EAAhB,CADU;AAExB,kCAAuB,OAAO,kBAAP,KAA8B,UAA/B,GAA6C,oBAA7C,GAAoE;AAFlE,WAA1B;AAID;AAboB,OAAV,CAAb;AAeA,YAAK,KAAL,CAAW,MAAX;AACA,YAAK,mCAAL;AACD,KA3YkB;;AAAA,SA6YnB,iBA7YmB,GA6YC,YAAM;AAAA,2BACoD,MAAK,cADzD;AAAA,UAChB,wBADgB,kBAChB,wBADgB;AAAA,UACU,eADV,kBACU,eADV;AAAA,UAC2B,oBAD3B,kBAC2B,oBAD3B;;AAExB,UAAI,oBAAJ;AACA,UAAM,gBAAgB,6BAAI,SAAS,gBAAT,OAA8B,wBAA9B,UAA2D,oBAA3D,CAAJ,GAAwF,GAAxF,CACpB;AAAA,eAAqB,kBAAkB,SAAlB,CAA4B,IAA5B,EAArB;AAAA,OADoB,CAAtB;;AAIA,UAAM,iBAAiB,MAAK,KAAL,CAAW,cAAX,EAAvB;AACA,UAAM,WAAW,IAAI,oBAAJ,CAAc;AAC7B,oBAAY,cADiB;AAE7B,mBAAW,MAAK,mBAAL,EAFkB;AAG7B,yBAAiB,aAHY;AAI7B,uBAAe,MAAK,aAAL,CAAmB,aAJL;AAK7B,0BAAkB,iCAAgB;AAAA;AAAA,cAAd,QAAc;;AAChC,cAAM,mBAAmB,MAAK,iBAAL,CAAuB,QAAvB,CAAzB;;AAEA,gBAAK,+BAAL,CAAqC;AACnC,2BAAgB,qBAAqB,IAAtB,GACX,CADW,GAEX,OAAO,iBAAiB,UAAxB,CAH+B;AAInC,iCAAqB,OAJc;AAKnC,iCAAqB;AALc,WAArC;;AAQA,cACE,qBAAqB,IAArB,IACE,MAAK,MAAL,CAAY,qBAAZ,KAAsC,gBAAtC,IACA,cAAc,QAAd,CAAuB,QAAvB,CAHJ,EAKE;AACA;AACA,kBAAK,MAAL,CAAY,yBAAZ,GAAwC,IAAxC;;AAEA,0BAAc,MAAK,iBAAnB,EAAsC,OAAtC;AACD,WAVD,MAUO;AACL;AACA,kBAAK,MAAL,CAAY,yBAAZ,GAAwC,gBAAxC;;AAEA,0BAAc,MAAK,iBAAnB,EAAsC,iBAAiB,UAAvD;AACD;;AAED,gBAAK,MAAL;;AAEA;AACA,qBAAW,YAAM;AACf,kBAAK,KAAL,CAAW,UAAX;AACD,WAFD,EAEG,GAFH;AAGD,SAvC4B;AAwC7B,uBAAe,MAAK,aAAL,CAAmB,gBAxCL;AAyC7B,kBAAU,WAzCmB;AA0C7B,uBAAe;AA1Cc,OAAd,CAAjB;AA4CA,eAAS,MAAT;AACA;AACA,qBAAe,aAAf,OAAiC,MAAK,cAAL,CAAoB,iBAArD,EAA0E,WAA1E,GAAwF,MAAK,aAAL,CAAmB,WAA3G;;AAEA,eAAS,gBAAT,OAA8B,eAA9B,EAAiD,OAAjD,CAAyD,UAAC,UAAD,EAAgB;AACvE,YAAI,mBAAmB,KAAvB;AACA,YAAM,YAAY,IAAI,oBAAJ,CAAc;AAC9B,sBAAY,UADkB;AAE9B,2BAAiB,MAAK,aAAL,CAAmB,gBAFN;AAG9B,0BAAgB,wBAAC,WAAD,EAAiB;AAC/B,qBAAS,WAAT,CAAqB,WAArB;AACA,gBAAI,WAAJ,EAAiB;AACf,oBAAK,MAAL,CAAY,YAAZ,GAA2B,WAA3B;;AAEA,kBAAI,YAAY,MAAZ,KAAuB,CAAvB,IAA4B,CAAC,gBAAjC,EAAmD;AACjD,mCAAmB,IAAnB;AACA,sBAAK,uBAAL;AACD;AACD,kBAAI,CAAC,SAAS,iBAAT,EAAL,EAAmC;AACjC,sBAAK,wBAAL,CAA8B;AAC5B,gCAAc,gBAAgB,EAAE,MAAM,WAAR,EAAhB;AADc,iBAA9B;AAGD;AACF,aAZD,MAYO;AACL,kBAAI,MAAK,MAAL,CAAY,YAAZ,IAA4B,MAAK,MAAL,CAAY,YAAZ,CAAyB,MAAzB,GAAkC,CAAlE,EAAqE;AACnE,sBAAK,qBAAL;AACD;AACD,oBAAK,MAAL,CAAY,YAAZ,GAA2B,SAA3B;AACA,iCAAmB,KAAnB;AACD;AACF,WAxB6B;AAyB9B,wBAAc,EAzBgB;AA0B9B,oBAAU;AA1BoB,SAAd,CAAlB;AA4BA,kBAAU,MAAV;AACA,iBAAS,aAAT;AACA,sBAAc;AAAA,iBAAM,UAAU,SAAV,CAAoB,EAAE,UAAU,EAAZ,EAApB,CAAN;AAAA,SAAd;AACD,OAjCD;AAkCD,KAvekB;;AAAA,SA4enB,0BA5emB,GA4eU,YAAM;AAAA,UACzB,UADyB,GACV,MAAK,KAAL,CAAW,MADD,CACzB,UADyB;;;AAGjC,UAAM,iBAAiB,WAAW,UAAX,EAAvB;;AAEA,UAAI,eAAe,CAAnB;;AAEA,iBAAW,IAAX,CAAgB,eAAhB,EAAiC,IAAjC,CAAsC,YAAY;AAAE,wBAAgB,KAAK,WAArB;AAAkC,OAAtF;;AAEA,aAAO,gBAAgB,cAAvB;AACD,KAtfkB;;AAAA,SA2fnB,eA3fmB,GA2fD,YAAM;AACtB,UAAI,MAAK,0BAAL,OAAsC,IAA1C,EAAgD;AAC9C,cAAK,cAAL;AACD,OAFD,MAEO;AACL,cAAK,aAAL;AACD;AACF,KAjgBkB;;AAAA,SAsgBnB,aAtgBmB,GAsgBH,YAAM;AAAA,0BACwB,MAAK,KAAL,CAAW,MADnC;AAAA,UACZ,GADY,iBACZ,GADY;AAAA,UACG,cADH,iBACP,MADO,CACG,cADH;;AAEpB,UAAI,WAAJ,CAAgB,cAAhB;AACD,KAzgBkB;;AAAA,SA8gBnB,cA9gBmB,GA8gBF,YAAM;AAAA,2BACuB,MAAK,KAAL,CAAW,MADlC;AAAA,UACb,GADa,kBACb,GADa;AAAA,UACE,cADF,kBACR,MADQ,CACE,cADF;;AAErB,UAAI,QAAJ,CAAa,cAAb;AACD,KAjhBkB;;AAAA,SAuhBnB,wBAvhBmB,GAuhBQ;AAAA,UAAG,YAAH,SAAG,YAAH;AAAA,aAAsB,gBAAgB,IAAhB,CAAqB;AACpE,mBAAW,oBADyD;AAEpE,mBAAW;AACT,oCADS;AAET,sBAAY;AAFH;AAFyD,OAArB,CAAtB;AAAA,KAvhBR;;AAAA,SA+hBnB,oBA/hBmB,GA+hBI;AAAA,UAAG,YAAH,SAAG,YAAH;AAAA,UAAiB,oBAAjB,SAAiB,oBAAjB;AAAA,aAA4C,gBAAgB,IAAhB,CAAqB;AACtF,mBAAW,6BAD2E;AAEtF,mBAAW;AACT,oCADS;AAET;AAFS;AAF2E,OAArB,CAA5C;AAAA,KA/hBJ;;AAAA,SAuiBnB,uBAviBmB,GAuiBO;AAAA,aAAM,gBAAgB,IAAhB,CAAqB;AACnD,mBAAW,qBADwC;AAEnD,mBAAW;AACT,sBAAY;AADH;AAFwC,OAArB,CAAN;AAAA,KAviBP;;AAAA,SA8iBnB,qBA9iBmB,GA8iBK;AAAA,aAAM,gBAAgB,IAAhB,CAAqB;AACjD,mBAAW,mBADsC;AAEjD,mBAAW;AACT,sBAAY;AADH;AAFsC,OAArB,CAAN;AAAA,KA9iBL;;AAAA,SAqjBnB,oBArjBmB,GAqjBI,YAAM;AAC3B,UAAM,mBAAmB,SAAS,aAAT,OAA2B,MAAK,cAAL,CAAoB,aAA/C,CAAzB;AACA,UAAI,gBAAJ,EAAsB;AACpB,yBAAiB,gBAAjB,CAAkC,OAAlC,EAA2C,YAAM;AAC/C,gBAAK,+BAAL,CAAqC;AACnC,2BAAe,CADoB;AAEnC,iCAAqB,KAFc;AAGnC,iCAAqB;AAHc,WAArC;AAKD,SAND;AAOD;;AAED,UAAM,sBAAsB,SAAS,gBAAT,OAA8B,MAAK,cAAL,CAAoB,WAAlD,CAA5B;AACA,UAAI,oBAAoB,MAApB,GAA6B,CAAjC,EAAoC;AAClC,4BAAoB,OAApB,CAA4B,UAAC,OAAD,EAAU,KAAV;AAAA,iBAAoB,QAAQ,gBAAR,CAAyB,OAAzB,EAAkC,YAAM;AACtF,kBAAK,+BAAL,CAAqC;AACnC,6BAAe,OAAO,QAAQ,OAAR,CAAgB,KAAvB,CADoB;AAEnC,mCAAqB,KAFc;AAGnC,mCAAqB,QAAQ;AAHM,aAArC;AAKD,WAN+C,CAApB;AAAA,SAA5B;AAOD;AACF,KA3kBkB;;AAAA,SA6kBnB,+BA7kBmB,GA6kBe,iBAI5B;AAAA,UAHJ,aAGI,SAHJ,aAGI;AAAA,UAFJ,mBAEI,SAFJ,mBAEI;AAAA,UADJ,mBACI,SADJ,mBACI;;AAAA,iCACgC,OAAO,GAAP,CAAW,QAAX,EADhC;AAAA,UACI,uBADJ,wBACI,uBADJ;;AAEJ,UAAI,4BAA4B,aAAhC,EAA+C;AAC7C,eAAO,GAAP,CAAW,QAAX,CAAoB;AAClB,mCAAyB;AADP,SAApB;AAGA,YAAM,iBAAiB,SAAjB,cAAiB,GAAM;AAC3B,0BAAgB,IAAhB,CAAqB;AACnB,uBAAW,wBADQ;AAEnB,uBAAW;AACT,0CADS;AAET,sDAFS;AAGT,sDAHS;AAIT,oCAAuB,OAAO,kBAAP,KAA8B,UAA/B,GAA6C,oBAA7C,GAAoE;AAJjF;AAFQ,WAArB;AASA;AACA,iBAAO,mBAAP,CAA2B,cAAc,mCAAzC,EAA8E,cAA9E;AACD,SAZD;AAaA,eAAO,gBAAP,CAAwB,cAAc,mCAAtC,EAA2E,cAA3E;AACD;AACF,KAtmBkB;;AAAA,SAwmBnB,mCAxmBmB,GAwmBmB,YAAM;AAC1C,sBAAgB,IAAhB,CAAqB;AACnB,mBAAW;AADQ,OAArB;AAGD,KA5mBkB;;AACjB,iCAAe,KAAK,UAApB,EAAgC,IAAhC,EAAsC,MAAtC,EAA8C,YAA9C;AACA,SAAK,KAAL,GAAa,OAAO,MAAP,CAAc,IAAd,CAAb;AACD;;;;;;AA6DD;;;6BAGU;AACR,WAAK,eAAL;AACA,WAAK,KAAL,CAAW,MAAX,CAAkB,UAAlB,CAA6B,MAA7B;AACA,WAAK,KAAL,CAAW,MAAX,CAAkB,MAAlB;AACD;;AAED;;;;;;2CA8DwB;AACtB,UAAI,KAAK,MAAL,CAAY,YAAZ,KAA6B,SAAjC,EAA4C;AAC1C,aAAK,KAAL,CAAW,MAAX,CAAkB,OAAlB,CAA0B,KAAK,MAAL,CAAY,YAAtC;AACA,aAAK,MAAL,CAAY,YAAZ,GAA2B,SAA3B;AACD;AACF;;;wCAEoB;AACnB,UAAI,YAAY,SAAS,aAAT,OAA2B,KAAK,cAAL,CAAoB,YAA/C,CAAhB;AACA,UAAI,CAAC,SAAL,EAAgB;AACd,aAAK,KAAL,CAAW,MAAX,CAAkB,WAAlB,CAA8B,KAAK,cAAL,EAA9B;AACA,oBAAY,SAAS,aAAT,OAA2B,KAAK,cAAL,CAAoB,YAA/C,CAAZ;AACA,kBAAU,gBAAV,CAA2B,OAA3B,EAAoC,KAAK,YAAzC;AACD;AACF;;;yCAEqB;AACpB,WAAK,KAAL,CAAW,MAAX,CAAkB,WAAlB,CAA8B,KAAK,eAAL,EAA9B;AACD;;;yCAEqB,U,EAAY;AAAA;;AAChC,iBAAW,OAAX,CAAmB,UAAC,QAAD,EAAc;AAC/B,eAAK,KAAL,CAAW,MAAX,CAAkB,WAAlB,CAA8B,OAAK,oBAAL,CAA0B,EAAE,kBAAF,EAA1B,CAA9B;AACA,eAAK,MAAL,CAAY,iBAAZ,CAA8B,IAA9B,CAAmC,QAAnC;AACD,OAHD;AAID;;;sCAEkB;AACjB,UAAI,mBAAmB,OAAO,aAAa,KAAK,iBAAlB,CAAP,CAAvB;AACA,UAAI,MAAM,gBAAN,CAAJ,EAA6B;AAC3B,2BAAmB,CAAnB;AACD;;AAED,UAAM,iBAAiB,KAAK,eAAL,CAAqB,gBAArB,CAAvB;;AAEA,UAAI,mBAAmB,IAAvB,EAA6B;AAC3B,YAAI,CAAC,KAAK,MAAL,CAAY,iBAAZ,CAA8B,QAA9B,CAAuC,cAAvC,CAAL,EAA6D;AAC3D,eAAK,MAAL,CAAY,qBAAZ,GAAoC,cAApC;AACA,eAAK,KAAL,CAAW,MAAX,CAAkB,WAAlB,CAA8B,KAAK,oBAAL,CAA0B,EAAE,UAAU,cAAZ,EAA1B,CAA9B;AACD;AACD,aAAK,cAAL,CAAoB,cAApB;AACD,OAND,MAMO;AACL;AACA,aAAK,cAAL;AACD;AACF;;;kEAE8C,yB,EAA2B;AACxE;AACA,UAAM,wBAAwB,KAAK,MAAL,CAAY,qBAA1C;;AAEA,UAAI,8BAA8B,IAAlC,EAAwC;AACtC;AACA,aAAK,cAAL;AACD,OAHD,MAGO,IAAI,0BAA0B,SAA9B,EAAyC;AAC9C;AACA,YAAI,CAAC,KAAK,MAAL,CAAY,iBAAZ,CAA8B,QAA9B,CAAuC,yBAAvC,CAAL,EAAwE;AACtE,eAAK,oBAAL;AACA,eAAK,KAAL,CAAW,MAAX,CAAkB,WAAlB,CAA8B,KAAK,oBAAL,CAA0B,EAAE,UAAU,yBAAZ,EAA1B,CAA9B;AACD;AACD,aAAK,cAAL,CAAoB,yBAApB;AACD,OAPM,MAOA,IAAI,0BAA0B,yBAA9B,EAAyD;AAC9D;AACA,aAAK,cAAL,CAAoB,qBAApB;AACD,OAHM,MAGA;AACL;AACA,YAAI,CAAC,KAAK,MAAL,CAAY,iBAAZ,CAA8B,QAA9B,CAAuC,yBAAvC,CAAL,EAAwE;AACtE,eAAK,oBAAL;AACA,eAAK,kBAAL;AACA,eAAK,KAAL,CAAW,MAAX,CAAkB,WAAlB,CAA8B,KAAK,oBAAL,CAA0B,EAAE,UAAU,yBAAZ,EAA1B,CAA9B;AACD;AACD,aAAK,cAAL,CAAoB,yBAApB;AACD;AACD,WAAK,MAAL,CAAY,yBAAZ,GAAwC,SAAxC;AACD;;;qCAEwC;AAAA,UAAzB,gBAAyB,uEAAN,IAAM;;AACvC,UAAM,cAAc,SAAS,aAAT,OAA2B,KAAK,cAAL,CAAoB,cAA/C,CAApB;AACA,UAAM,oBAAoB,YAAY,aAAZ,OAA8B,KAAK,cAAL,CAAoB,oBAAlD,CAA1B;AACA,UAAI,0BAAJ;AACA,UAAI,qBAAJ;;AAEA;AACA,UAAI,iBAAJ,EAAuB;AACrB,0BAAkB,SAAlB,CAA4B,MAA5B,CAAmC,KAAK,cAAL,CAAoB,oBAAvD;AACD;;AAED,UAAI,qBAAqB,IAAzB,EAA+B;AAC7B;AACA,4BAAoB,YAAY,aAAZ,OAA8B,KAAK,cAAL,CAAoB,aAAlD,CAApB;AACA,uBAAe,CAAf;AACD,OAJD,MAIO;AACL,4BAAoB,YAAY,aAAZ,mBAA0C,iBAAiB,UAA3D,QAApB;AACA,uBAAe,KAAK,MAAL,CAAY,iBAAZ,CAA8B,SAA9B,CAAwC,UAAC,QAAD;AAAA,iBAAc,SAAS,UAAT,KAAwB,OAAO,iBAAiB,UAAxB,CAAtC;AAAA,SAAxC,CAAf;;AAEA,YAAI,CAAC,KAAK,MAAL,CAAY,iBAAZ,CAA8B,QAA9B,CAAuC,gBAAvC,CAAL,EAA+D;AAC7D,eAAK,MAAL,CAAY,qBAAZ,GAAoC,gBAApC;AACA,yBAAe,KAAK,MAAL,CAAY,iBAAZ,CAA8B,MAA7C;AACD;AACF;;AAED,UAAI,iBAAJ,EAAuB;AACrB,0BAAkB,SAAlB,CAA4B,GAA5B,CAAgC,KAAK,cAAL,CAAoB,oBAApD;AACD;;AAED,UAAI,OAAO,YAAP,KAAwB,CAA5B,EAA+B;AAC7B,aAAK,MAAL,CAAY,YAAZ,GAA2B,YAA3B;AACD;AACF;;AAED;;;;;AAmBA;;;;;AAsBA;;;;;AAgBA;;;;;AAYA;;;;;AAYA;;;;;AAOA;;;;;AA4JA;;;;;AAeA;;;;;AAWA;;;;;AAQA;;;;;AAQA;;;;;;;;;kBA3jBmB,W;;;;;;;ACPrB;;;;AACA;;;;;;0JAPA;;;;;;IASqB,U,GAKnB,oBAAa,IAAb,EAAmB;AAAA;;AAAA;;AAAA,OAJnB,UAImB,GAJN;AACX,YAAQ,oBAAU,MAAV,CAAiB;AADd,GAIM;;AAAA,OAKnB,IALmB,GAKZ,YAAM;AACX,QAAI,MAAK,KAAL,CAAW,MAAX,CAAkB,UAAlB,CAA6B,MAAjC,EAAyC;AACvC;AACA,YAAK,KAAL,CAAW,MAAX,CAAkB,UAAlB,CAA6B,OAA7B,CAAqC,WAArC;AACA;AACA,YAAK,KAAL,CAAW,MAAX,CAAkB,UAAlB,CAA6B,MAA7B,CAAoC,gBAApC,CACE,OADF,EAEE,wBAAgB;AACd,qBAAa,cAAb;AACA,cAAK,SAAL;AACD,OALH;AAOD;;AAED,QAAI,MAAK,KAAL,CAAW,MAAX,CAAkB,UAAlB,CAA6B,MAAjC,EAAyC;AACvC;AACA,YAAK,KAAL,CAAW,MAAX,CAAkB,UAAlB,CAA6B,OAA7B,CAAqC,eAArC;AACA;AACA,YAAK,KAAL,CAAW,MAAX,CAAkB,UAAlB,CAA6B,MAA7B,CAAoC,gBAApC,CACE,OADF,EAEE,wBAAgB;AACd,qBAAa,cAAb;AACA,cAAK,aAAL;AACD,OALH;AAOD;AACD;AACA,UAAK,KAAL,CAAW,MAAX,CAAkB,GAAlB,CAAsB,CAAtB,EAAyB,SAAzB,CAAmC,GAAnC,CAAuC,SAAvC;AACA,UAAK,KAAL,CAAW,MAAX,CAAkB,EAAlB,CAAqB,eAArB,EAAsC,YAAM;AAC1C,UAAI,CAAC,MAAK,KAAL,CAAW,MAAX,CAAkB,KAAvB,EAA8B;AAC5B,cAAK,KAAL,CAAW,MAAX,CAAkB,cAAlB;AACD,OAFD,MAEO;AACL,cAAK,KAAL,CAAW,MAAX,CAAkB,OAAlB,CACE,MAAK,KAAL,CAAW,MAAX,CAAkB,QAAlB,CAA2B,MAA3B,GAAoC,CADtC;AAGD;AACF,KARD;;AAUA,UAAK,KAAL,CAAW,MAAX,CAAkB,EAAlB,CAAqB,QAArB,EAA+B,YAAM;AACnC,YAAK,KAAL,CAAW,MAAX,CAAkB,MAAlB;AACD,KAFD;;AAIA,UAAK,KAAL,CAAW,MAAX,CAAkB,UAAlB,CAA6B,MAA7B;AACA,UAAK,KAAL,CAAW,MAAX,CAAkB,MAAlB;AACD,GAjDkB;;AAAA,OAsDnB,SAtDmB,GAsDP,YAAM;AAChB;AACA;AAFgB,wBAG0D,MAAK,KAAL,CAAW,MAHrE;AAAA,QAGR,UAHQ,iBAGR,UAHQ;AAAA,QAGI,WAHJ,iBAGI,WAHJ;AAAA,QAGiB,UAHjB,iBAGiB,UAHjB;AAAA,QAGuC,YAHvC,iBAG6B,MAH7B,CAGuC,YAHvC;AAIhB;;AACA,QAAM,cAAc,WAAW,WAAX,IAA0B,WAAW,UAAX,EAA9C;AACA;AACA,QAAM,aAAa,WAAW,SAAX,CAAqB,UAAC,QAAD;AAAA,aAAc,WAAW,YAAX,IAA2B,WAAzC;AAAA,KAArB,CAAnB;AACA,QAAM,YAAY,eAAe,CAAC,CAAhB,GACd,WAAW,MAAX,GAAoB,CADN,CACQ;AADR,MAEd,aAAa,CAFjB,CARgB,CAUG;AACnB,UAAK,KAAL,CAAW,MAAX,CAAkB,OAAlB,CAA0B,SAA1B;AACD,GAlEkB;;AAAA,OAuEnB,aAvEmB,GAuEH,YAAM;AACpB;AACA;AAFoB,yBAGsD,MAAK,KAAL,CAAW,MAHjE;AAAA,QAGZ,UAHY,kBAGZ,UAHY;AAAA,QAGA,UAHA,kBAGA,UAHA;AAAA,QAGY,WAHZ,kBAGY,WAHZ;AAAA,QAGmC,YAHnC,kBAGyB,MAHzB,CAGmC,YAHnC;;AAKpB;;AACA,QAAM,iBAAiB,WAAW,UAAX,EAAvB;AACA;AACA;AACA,QAAI,gBAAgB,6BAAI,UAAJ,GAAgB,SAAhB,CAA0B,UAAC,QAAD,EAAc;AAC1D,UAAI,QAAQ,WAAZ;AACA,aAAO,YAAa,WAAW,QAAQ,CAAnB,IAAwB,YAAxB,GAAuC,cAA3D;AACD,KAHmB,CAApB;AAIA;AACA,UAAK,KAAL,CAAW,MAAX,CAAkB,OAAlB,CAA0B,aAA1B;AACD,GAtFkB;;AACjB,+BAAe,KAAK,UAApB,EAAgC,IAAhC,EAAsC,MAAtC,EAA8C,YAA9C;AACA,OAAK,KAAL,GAAa,OAAO,MAAP,CAAc,IAAd,CAAb;AACD;;AAgDD;;;;;AAiBA;;;;;kBAzEmB,U;;;;;;ACTrB,IAAM,UAAU;AACd,QAAM,EADQ;AAEd,SAAO,EAFO;AAGd,UAAQ,EAHM;AAId,SAAO,EAJO;AAKd,SAAO,EALO;AAMd,OAAK,CANS;AAOd,MAAI;AAPU,CAAhB;;kBAUe,O;;;;;ACVf;;AACA;;;;AACA;;;;AACA;;;;AACA;;AACA;;;;;;IAGM,G;;;SACF,U,GAAa,E;;;AAGjB,oBAAM,YAAM;AACR,WAAO,GAAP,GAAa,IAAI,GAAJ,EAAb;AACA,QAAM,gBAAgB,8BAAgB,eAAhB,CAAtB;AACA,QAAG,iBAAiB,MAApB,EAA2B;AACvB,YAAM,QAAQ,IAAI,wBAAJ,EAAd;AACA,cAAM,IAAN;AACH;;AAED,MAAE,EAAF,CAAK,YAAL,GAAoB,YAAY;AAC5B,YAAM,aAAa,EAAE,IAAF,EAAQ,MAAR,GAAiB,GAApC;AACA,YAAM,gBAAgB,aAAa,EAAE,IAAF,EAAQ,WAAR,EAAnC;AACA,YAAM,cAAc,EAAE,MAAF,EAAU,SAAV,EAApB;AACA,YAAM,iBAAiB,cAAc,EAAE,MAAF,EAAU,MAAV,EAArC;AACA,YAAM,WAAW,EAAE,8BAAF,CAAjB;AACA,YAAM,iBAAiB,SAAS,MAAT,GAAkB,CAAlB,GAAsB,SAAS,WAAT,EAAtB,GAA+C,CAAtE;AACA,YAAM,cAAc,EAAE,WAAF,CAApB;AACA,YAAM,oBAAoB,YAAY,MAAZ,GAAqB,CAArB,GAAyB,YAAY,WAAZ,EAAzB,GAAqD,CAA/E;AACA,eAAO,gBAAiB,cAAc,cAAd,GAA+B,iBAAhD,IAAsE,aAAa,cAA1F;AACH,KAVD;;AAYA,QAAM,2BAA2B,IAAI,gBAAJ,CAAW,YAAX,EAAyB;AACtD,uBAAe,MADuC;AAEtD,kBAAU,IAF4C;AAGtD,cAAM,KAHgD;AAItD,uBAAe,IAJuC;AAKtD,oBAAY;AACR,oBAAQ;AADA;AAL0C,KAAzB,CAAjC;;AAUA,QAAM,qBAAqB,yCAA3B;AACA,QAAI,SAAS,aAAT,CAAuB,kBAAvB,CAAJ,EAAgD;;AAE5C,YAAM,SAAiB,IAAI,gBAAJ,CAAW,kBAAX,EAA+B;AAClD,2BAAe,MADmC;AAElD,sBAAU,IAFwC;AAGlD,mBAAO,IAH2C;AAIlD,kBAAM,KAJ4C;AAKlD,iCAAqB,IAL6B;AAMlD,2BAAe,IANmC;AAOlD,wBAAY;AACR,wBAAQ,qBADA;AAER,wBAAQ;AAFA;AAPsC,SAA/B,CAAvB;AAYA,eAAO,QAAP,CAAgB,OAAO,QAAP,CAAgB,MAAhB,GAAyB,CAAzC,IAA8C,OAAO,UAAP,CAAkB,OAAO,UAAP,CAAkB,MAAlB,GAA2B,CAA7C,CAA9C;AACA,eAAO,GAAP,CAAW,UAAX,CAAsB,UAAtB,GAAmC,IAAI,8BAAJ,CAAe;AAC9C,oBAAQ;AADsC,SAAf,CAAnC;AAGA,eAAO,GAAP,CAAW,UAAX,CAAsB,UAAtB,CAAiC,IAAjC;AACH;;AAGD,MAAE,QAAF,EAAY,MAAZ,CAAmB,YAAM;AACrB;AACA;AACH,KAHD;;AAKA,QAAM,kBAAkB,SAAS,aAAT,CAAuB,oBAAvB,CAAxB;AACA,QAAM,wBAAwB,SAAS,aAAT,CAAuB,8BAAvB,CAA9B;AACA,QAAM,wBAAwB,SAAS,aAAT,CAAuB,OAAvB,CAA9B;AACA,QAAM,iBAAiB,oBAAvB;;AAEA,aAAS,gBAAT,GAA6B;AACzB,YAAI,yBAAyB,qBAAzB,IAAkD,eAAtD,EAAuE;AACnE,gBAAM,cAAc,SAAS,aAAT,CAAuB,WAAvB,CAApB,CADmE,CACX;AACxD,gBAAM,UAAU,cAAc,YAAY,qBAAZ,GAAoC,MAAlD,GAA2D,CAA3E;AACA,gBAAI,sBAAsB,qBAAtB,GAA8C,GAA9C,IAAqD,OAAzD,EAAkE;AAC9D,sCAAsB,SAAtB,CAAgC,GAAhC,CAAoC,cAApC;AACH,aAFD,MAEO;AACH,sCAAsB,SAAtB,CAAgC,MAAhC,CAAuC,cAAvC;AACH;AACJ;AACJ;;AAED,aAAS,gBAAT,GAA6B;AACzB;AACA,YAAI,wBAAJ;AACA,UAAE,wBAAF,EAA4B,IAA5B,CAAiC,YAAY;AACzC,gBAAI,EAAE,IAAF,EAAQ,YAAR,EAAJ,EAA4B;AACxB,oBAAI,oBAAoB,SAApB,IAAiC,EAAE,IAAF,EAAQ,QAAR,GAAmB,GAAnB,GAAyB,EAAE,eAAF,EAAmB,QAAnB,GAA8B,GAA5F,EAAiG;AAC7F,sCAAkB,IAAlB;AACH;AACJ;AACJ,SAND;;AAQA;AACA,YAAI,QAAQ,EAAE,eAAF,EAAmB,IAAnB,CAAwB,WAAxB,CAAZ;AACA,YAAI,OAAO,KAAP,KAAiB,WAArB,EAAkC;AAC9B,gBAAI,yBAAyB,MAAzB,IAAmC,yBAAyB,MAAzB,CAAgC,MAAvE,EAA+E;AAC3E,yCAAyB,OAAzB,CAAiC,CAAjC;AACA,kBAAE,eAAF,EAAmB,WAAnB,CAA+B,cAA/B;AACA,kBAAE,+BAAF,EAAmC,QAAnC,CAA4C,cAA5C;AACH;AACJ,SAND,MAMO;AACH,gBAAI,MAAM,EAAE,cAAc,KAAd,GAAsB,IAAxB,CAAV;;AAEA,qCAAyB,OAAzB,CAAiC,IAAI,KAAJ,EAAjC;AACA,cAAE,eAAF,EAAmB,WAAnB,CAA+B,cAA/B;AACA,gBAAI,QAAJ,CAAa,cAAb;AACH;AACJ;;AAGD,QAAM,mBAAmB,SAAnB,gBAAmB,CAAC,cAAD,EAAoB;AACzC,YAAI,cAAJ,EAAoB;AAChB,gBAAM,iBAAiB,eAAe,qBAAf,EAAvB;AACA,gBAAM,YAAY,kBAAkB,gBAAgB,qBAAhB,GAAwC,MAA1D,GAAmE,CAArF;AACA;AACA;AACA,gBAAM,kBAAkB,OAAO,OAAP,GAAiB,OAAO,WAAhD,CALgB,CAK4C;AAC5D,gBAAM,eAAe,kBAAkB,eAAe,GAAjC,GAAuC,SAA5D;AACA,oBAAQ,GAAR,CAAY,iBAAiB,YAAjB,GAAgC,GAA5C;AACA,oBAAQ,GAAR,CAAY,YAAZ;AACA,mBAAO,QAAP,CAAgB,CAAhB,EAAmB,YAAnB,EATgB,CASiB;AACpC;AACJ,KAZD;;AAcA;AACA,QAAM,cAAc,SAAS,gBAAT,CAA0B,mCAA1B,CAApB;AACA,SAAK,IAAI,CAAT,IAAc,WAAd,EAA2B;AACvB,YAAM,aAAa,YAAY,CAAZ,CAAnB;AACA,YAAI,QAAO,UAAP,yCAAO,UAAP,OAAsB,QAA1B,EAAoC;AAChC,uBAAW,gBAAX,CAA4B,OAA5B,EAAqC,YAAY;AAC7C,oBAAM,aAAa,KAAK,OAAL,CAAa,QAAhC;AACA,oBAAI,UAAJ,EAAgB;AACZ,wBAAI,YAAY,IAAhB;AACA,wBAAI,eAAe,GAAnB,EAAwB;AAAE;AACtB,oCAAY,SAAS,cAAT,CAAwB,UAAxB,CAAZ;AACH;AACD,wBAAI,CAAC,SAAL,EAAgB;AAAE;AACd,oCAAY,SAAS,aAAT,CAAuB,4BAAvB,CAAZ;AACA,4BAAI,CAAC,SAAL,EAAgB;AAAE;AACd,wCAAY,SAAS,aAAT,CAAuB,gBAAvB,CAAZ;AACH;AACJ;AACD,qCAAiB,SAAjB;AACA,4BAAQ,YAAR,CAAqB,IAArB,EAA2B,IAA3B,EAAiC,EAAE,IAAF,EAAQ,IAAR,CAAa,MAAb,CAAjC;AACH;AACJ,aAhBD;AAiBH;AACJ;;AAED;;;;;AAKA,WAAO,SAAP,GAAmB,OAAO,SAAP,IAAoB,EAAvC;AACA,aAAS,IAAT,GAAiB;AAAE,kBAAU,IAAV,CAAe,SAAf;AAA2B;;AAE9C,QAAI,2BAA2B,KAA/B;AACA,QAAI,8BAAJ;;AAEA,QAAM,uBAAuB,SAAvB,oBAAuB,CAAC,QAAD,EAAc;;AAEvC,YAAI,CAAC,wBAAL,EAA+B;AAC3B,oCAAwB,QAAxB;AACH;AACJ,KALD;;AAOA,QAAI,6BAA6B,KAAjC;AACA,QAAI,gCAAJ;AACA,QAAM,yBAAyB,SAAzB,sBAAyB,CAAC,QAAD,EAAc;AACzC,YAAI,CAAC,QAAL,EAAe;AACf,YAAI,CAAC,0BAAL,EAAiC;AAC7B,sCAA0B,QAA1B;AACH;;AAED,YAAM,aAAa,aAAa,MAAhC;;AAEA,aAAK,SAAL,EAAgB,QAAhB,EAA0B;AACxB,0BAAc,aAAa,SAAb,GAAyB,QADf;AAExB,gCAAoB,aAAa,SAAb,GAAyB,QAFrB;AAGxB,wBAAY,aAAa,SAAb,GAAyB,QAHb;AAIxB,+BAAmB,aAAa,SAAb,GAAyB;AAJpB,SAA1B;AAMA,eAAO,SAAP,CAAiB,IAAjB,CAAsB,EAAE,OAAO,UAAT,EAAtB;AACH,KAfD;;AAiBA;;;AAGA,QAAI,+BAA+B,KAAnC;AACA,QAAM,+BAA+B,SAA/B,4BAA+B,CAAC,aAAD,EAAmB;AACpD,YAAI,CAAC,4BAAL,EAAmC;AAC/B,mBAD+B,CACxB;AACV;AACD,YAAM,aAAa,kBAAkB,MAArC;AACA,aAAK,SAAL,EAAgB,QAAhB,EAA0B;AACxB,0BAAc,aAAa,SAAb,GAAyB,QADf;AAExB,gCAAoB,aAAa,SAAb,GAAyB,QAFrB;AAGxB,wBAAY,aAAa,SAAb,GAAyB,QAHb;AAIxB,+BAAmB,aAAa,SAAb,GAAyB;AAJpB,SAA1B;AAMA,eAAO,SAAP,CAAiB,IAAjB,CAAsB,EAAE,OAAO,UAAT,EAAtB;AACH,KAZD;;AAcA,QAAI,iCAAiC,KAArC;AACA,QAAM,iCAAiC,SAAjC,8BAAiC,CAAC,aAAD,EAAmB;AACtD,YAAI,CAAC,8BAAL,EAAqC;AACjC;AACH;AACD,YAAM,aAAa,kBAAkB,MAArC;AACA,aAAK,SAAL,EAAgB,QAAhB,EAA0B;AACxB,0BAAc,aAAa,SAAb,GAAyB,QADf;AAExB,gCAAoB,aAAa,SAAb,GAAyB,QAFrB;AAGxB,wBAAY,aAAa,SAAb,GAAyB,QAHb;AAIxB,+BAAmB,aAAa,SAAb,GAAyB;AAJpB,SAA1B;AAMA,eAAO,SAAP,CAAiB,IAAjB,CAAsB,EAAE,OAAO,UAAT,EAAtB;AACH,KAZD;;AAcA,QAAM,2BAA2B,SAAS,aAAT,CAAuB,+BAAvB,CAAjC;AACA,QACI,4BACA,OAAO,qBAAP,KAAiC,WAFrC,EAGE;AACE;AACA,YAAI,yBAAJ,CAAmB;AACf,wBAAY,wBADG;AAEf,kBAAM,qBAFS,EAEc;AAC7B,2BAAe,kBAAO,aAHP;AAIf,4BAAgB;AAJD,SAAnB;AAMA,uCAA+B,IAA/B;AACH;;AAED,QAAM,mCAAmC,SAAS,aAAT,CAAuB,+BAAvB,CAAzC;AACA,QAAI,oCAAJ;AACA,QAAI,oCACA,OAAO,8BAAP,KAA0C,WAD9C,EAC2D;AACvD,yCAAiC,gBAAjC,CAAkD,OAAlD,EAA2D,UAAC,KAAD,EAAkB;AACzE,kBAAM,cAAN;;AAEA,gBAAI,CAAC,2BAAL,EAAkC;AAC9B,8CAA8B,IAAI,iCAAJ,CAA2B;AACrD,+BAAW,CAAC,aAAD,CAD0C;AAErD;AACA,4HAAkG,+BAA+B,WAAjI,gBAHqD;AAIrD,oCAAgB,8BAJqC;AAKrD,uCAAmB,+BAA+B,aALG;AAMrD,6BAAS;AACL,uCAAe,+BAA+B,iBADzC;AAEL,0CAAkB,+BAA+B;AAF5C,qBAN4C;AAUrD,8BAAU,CACN;AACI,mCAAW,GADf;AAEI,6CAAqB,KAFzB;AAGI,sCAAc,IAHlB;AAII,4CAAoB,+BAA+B,uBAJvD;AAKI,sCAAc,+BAA+B;AALjD,qBADM,EAQN;AACI,mCAAW,GADf;AAEI,sCAAc,+BAA+B,iBAFjD;AAGI,6CAAqB,IAHzB;AAII,4CAAoB,+BAA+B;AAJvD,qBARM,EAcN;AACI,mCAAW,GADf;AAEI,sCAAc,+BAA+B,iBAFjD;AAGI,6CAAqB,IAHzB;AAII,4CAAoB,+BAA+B;AAJvD,qBAdM,EAoBN;AACI,mCAAW,GADf;AAEI,sCAAc,+BAA+B,iBAFjD;AAGI,6CAAqB,IAHzB;AAII,4CAAoB,+BAA+B;AAJvD,qBApBM;AAV2C,iBAA3B,CAA9B;AAsCH;;AAED,gBAAI,2BAAJ,EAAiC;AAC7B,iDAAiC,IAAjC;AACA,4CAA4B,MAA5B;AACH;AACJ,SAhDD;AAiDH;;AAED;;;;;;AAMI;AACJ,QAAM,YAAY,KAAK,EAAL,KAAY,GAA9B;;AAEA,QAAI,CAAC,SAAL,EAAgB;AACZ,YAAM,uBAAuB,SAAS,aAAT,CAAuB,YAAvB,CAA7B;;AAEA,YAAI,oBAAJ,EAA0B;AACtB,gBAAM,aAAa,IAAI,qBAAJ,CAAe;AAC9B,4BAAY,oBADkB;AAE9B,6BAAa,qBAAqB,YAArB,CAAkC,mBAAlC,CAFiB;AAG9B,qBAAK,qBAAqB,YAArB,CAAkC,UAAlC,CAHyB;AAI9B,yBAAS,qBAAqB,YAArB,CAAkC,eAAlC,CAJqB;AAK9B,4BAAY,qBAAqB,YAArB,CAAkC,kBAAlC,CALkB;AAM9B,mCAAmB,IANW;AAO9B,wCAAwB,qBAAqB,YAArB,CAAkC,+BAAlC,CAPM;AAQ9B,gCAAgB,qBAAqB,YAArB,CAAkC,uBAAlC,CARc;AAS9B,4CAA4B,qBAAqB,YAArB,CAAkC,oCAAlC,CATE;AAU9B,gCAAgB;AAVc,aAAf,CAAnB;AAYA,mBAAO,GAAP,CAAW,UAAX,CAAsB,UAAtB,GAAmC,UAAnC;AACA,uCAA2B,IAA3B;AACH;AACJ,KAnBD,MAmBO;AACH,YAAM,+BAA+B,SAAS,aAAT,CAAuB,qBAAvB,CAArC;AACA,YAAI,eAAe,gCAAgC,6BAA6B,YAA7B,CAA0C,sCAA1C,CAAhC,GACb,6BAA6B,YAA7B,CAA0C,sCAA1C,CADa,GACuE,EAD1F;AAEA,YAAI,iBAAiB,gCAAgC,6BAA6B,YAA7B,CAA0C,wCAA1C,CAAhC,GACf,6BAA6B,YAA7B,CAA0C,wCAA1C,CADe,GACuE,EAD5F;AAEA;AACA,YAAI,CAAC,YAAL,EAAmB;AACf,2BAAe,EAAf;AACH;;AAED,YAAI,CAAC,cAAL,EAAqB;AACjB,6BAAiB,EAAjB;AACH;;AAED,YAAI,4BAAJ,EAAkC;AAC9B,gBAAM,qBAAqB,IAAI,6BAAJ,CAAuB;AAC9C,4BAAY,4BADkC;AAE9C,kCAAkB,6BAA6B,YAA7B,CAA0C,uBAA1C,CAF4B;AAG9C,kCAAkB;AACd,qCAAiB;AACb,qCAAa,6BAA6B,YAA7B,CAA0C,0BAA1C,CADA;AAEb,oCAAY,6BAA6B,YAA7B,CAA0C,uCAA1C,CAFC;AAGb,qCAAa,6BAA6B,YAA7B,CAA0C,6BAA1C,CAHA;AAIb,gDAAwB,6BAA6B,YAA7B,CAA0C,6CAA1C,CAJX;AAKb,oDAA4B,6BAA6B,YAA7B,CAA0C,6CAA1C,CALf;AAMb,wCAAgB,6BAA6B,YAA7B,CAA0C,uCAA1C,CANH;AAOb,qCAAa,6BAA6B,YAA7B,CAA0C,2BAA1C,CAPA;AAQb,uCAAe;AACX,kIAAgG,YAAhG,gBADW;AAEX,sCAAU,2BAFC;AAGX,0CAAc,uBAHH;AAIX,4CAAgB,yBAJL;AAKX,+CAAmB,6BAA6B,YAA7B,CAA0C,wCAA1C,CALR;AAMX,6CAAiB,6BAA6B,YAA7B,CAA0C,mDAA1C,CANN;AAOX,gDAAoB,6BAA6B,YAA7B,CAA0C,sDAA1C,CAPT;AAQX,sCAAU,CACN;AACI,2CAAW,GADf;AAEI,8CAAc,6BAA6B,YAA7B,CAA0C,gCAA1C,CAFlB;AAGI,qDAAqB,KAHzB;AAII,8CAAc,IAJlB;AAKI,oDAAoB,6BAA6B,YAA7B,CAA0C,sCAA1C;AALxB,6BADM,EAQN;AACI,2CAAW,GADf;AAEI,8CAAc,6BAA6B,YAA7B,CAA0C,gCAA1C,CAFlB;AAGI,qDAAqB,IAHzB;AAII,8CAAc,KAJlB;AAKI,oDAAoB,6BAA6B,YAA7B,CAA0C,sCAA1C;AALxB,6BARM,EAeN;AACI,2CAAW,GADf;AAEI,8CAAc,6BAA6B,YAA7B,CAA0C,gCAA1C,CAFlB;AAGI,qDAAqB,IAHzB;AAII,8CAAc,KAJlB;AAKI,oDAAoB,6BAA6B,YAA7B,CAA0C,sCAA1C;AALxB,6BAfM,EAsBN;AACI,2CAAW,GADf;AAEI,8CAAc,6BAA6B,YAA7B,CAA0C,gCAA1C,CAFlB;AAGI,qDAAqB,IAHzB;AAII,8CAAc,KAJlB;AAKI,oDAAoB,6BAA6B,YAA7B,CAA0C,sCAA1C;AALxB,6BAtBM;AARC;AARF,qBADH;AAiDd,uCAAmB;AACf,qCAAa,6BAA6B,YAA7B,CAA0C,4BAA1C,CADE;AAEf,oCAAY,6BAA6B,YAA7B,CAA0C,yCAA1C,CAFG;AAGf,qCAAa,6BAA6B,YAA7B,CAA0C,+BAA1C,CAHE;AAIf,gDAAwB,6BAA6B,YAA7B,CAA0C,+CAA1C,CAJT;AAKf,oDAA4B,6BAA6B,YAA7B,CAA0C,+CAA1C,CALb;AAMf,wCAAgB,6BAA6B,YAA7B,CAA0C,yCAA1C,CAND;AAOf,qCAAa,6BAA6B,YAA7B,CAA0C,6BAA1C,CAPE;AAQf,uCAAe;AACX,kIAAgG,cAAhG,gBADW;AAEX,sCAAU,2BAFC;AAGX,0CAAc,uBAHH;AAIX,4CAAgB,yBAJL;AAKX,+CAAmB,6BAA6B,YAA7B,CAA0C,0CAA1C,CALR;AAMX,6CAAiB,6BAA6B,YAA7B,CAA0C,qDAA1C,CANN;AAOX,gDAAoB,6BAA6B,YAA7B,CAA0C,wDAA1C,CAPT;AAQX,sCAAU,CACN;AACI,2CAAW,GADf;AAEI,8CAAc,6BAA6B,YAA7B,CAA0C,kCAA1C,CAFlB;AAGI,qDAAqB,KAHzB;AAII,8CAAc,IAJlB;AAKI,oDAAoB,6BAA6B,YAA7B,CAA0C,wCAA1C;AALxB,6BADM,EAQN;AACI,2CAAW,GADf;AAEI,8CAAc,6BAA6B,YAA7B,CAA0C,kCAA1C,CAFlB;AAGI,qDAAqB,IAHzB;AAII,8CAAc,KAJlB;AAKI,oDAAoB,6BAA6B,YAA7B,CAA0C,wCAA1C;AALxB,6BARM,EAeN;AACI,2CAAW,GADf;AAEI,8CAAc,6BAA6B,YAA7B,CAA0C,kCAA1C,CAFlB;AAGI,qDAAqB,IAHzB;AAII,8CAAc,KAJlB;AAKI,oDAAoB,6BAA6B,YAA7B,CAA0C,wCAA1C;AALxB,6BAfM,EAsBN;AACI,2CAAW,GADf;AAEI,8CAAc,6BAA6B,YAA7B,CAA0C,kCAA1C,CAFlB;AAGI,qDAAqB,IAHzB;AAII,8CAAc,KAJlB;AAKI,oDAAoB,6BAA6B,YAA7B,CAA0C,wCAA1C;AALxB,6BAtBM;AARC;AARA;AAjDL,iBAH4B;AAqG9C,gCAAgB;AArG8B,aAAvB,CAA3B;AAuGA,mBAAO,GAAP,CAAW,UAAX,CAAsB,kBAAtB,GAA2C,kBAA3C;AACA,yCAA6B,IAA7B;AACH;AACJ;;AAED,QAAM,aAAa,SAAS,aAAT,CAAuB,YAAvB,CAAnB;AACA,QAAI,sBAAsB,WAA1B,EAAuC;AACrC,mBAAW,gBAAX,CAA4B,OAA5B,EAAqC,YAAY;AAC/C,gBAAM,QAAQ,IAAI,wBAAJ,EAAd;AACA,kBAAM,IAAN;AACD,SAHD;AAID;AACJ,CA1bD;;;;;;;QCagB,c,GAAA,c;QAWA,U,GAAA,U;QAIA,W,GAAA,W;QAeA,c,GAAA,c;QAWA,kB,GAAA,kB;QAiBA,e,GAAA,e;QAqCA,K,GAAA,K;QAYA,Y,GAAA,Y;QASA,oB,GAAA,oB;QA8CA,Y,GAAA,Y;QAOA,Y,GAAA,Y;;AAlMhB;;;;AACA;;;;;;AAEA;;;AAGA;;;;;;;;;;;;;;;;;;;AAmBO,SAAS,cAAT,CAAyB,SAAzB,EAAoC,MAApC,EAA4C,QAA5C,EAAsD,aAAtD,EAA2F;AAAA,MAAtB,QAAsB,uEAAX,SAAW;;AAChG,MAAM,IAAI,QAAQ,KAAlB;AACA,UAAQ,KAAR,GAAgB,eAAO;AAAE,UAAM,IAAI,KAAJ,CAAU,GAAV,CAAN;AAAsB,GAA/C;AACA;AACA;AACA,sBAAU,iBAAV;AACA,sBAAU,cAAV,CAAyB,SAAzB,EAAoC,MAApC,EAA4C,QAA5C,EAAsD,aAAtD,EAAqE,QAArE;AACA,UAAQ,KAAR,GAAgB,CAAhB;AACD;;AAGM,SAAS,UAAT,CAAqB,GAArB,EAA0B;AAC/B,SAAO,OAAO,IAAP,CAAY,GAAZ,EAAiB,MAAjB,KAA4B,CAA5B,IAAiC,IAAI,WAAJ,KAAoB,MAA5D;AACD;;AAEM,SAAS,WAAT,GAAwB;AAC7B,MAAM,YAAY,UAAU,SAAV,IAAuB,UAAU,MAAjC,IAA2C,OAAO,KAApE;AACA,SAAO;AACL,eAAW;AAAA,aAAM,YAAW,IAAX,CAAgB,SAAhB;AAAN;AAAA,KADN;AAEL,WAAO;AAAA,aAAM,oBAAmB,IAAnB,CAAwB,SAAxB,KAAsC,CAAC,OAAO;AAApD;AAAA,KAFF,CAE+D;AAF/D,GAAP;AAID;;AAED;;;;;;;AAOO,SAAS,cAAT,CAAyB,OAAzB,EAAkC,QAAlC,EAA4C,MAA5C,EAAoD;AACzD,MAAM,OAAQ,EAAD,CAAK,QAAL,CAAc,IAAd,CAAmB,MAAnB,EAA2B,KAA3B,CAAiC,GAAjC,EAAsC,CAAtC,EAAyC,KAAzC,CAA+C,CAA/C,EAAkD,CAAC,CAAnD,CAAb;AACA,QAAM,IAAI,SAAJ,YAAuB,OAAvB,0BAAmD,QAAnD,YAAkE,IAAlE,aAAN;AACD;;AAED;;;;;;AAMO,SAAS,kBAAT,CAA6B,GAA7B,EAAkC,YAAlC,EAAgD;AACrD,MAAM,cAAc,aAAa,MAAb,CAAoB;AAAA,WAAQ,CAAC,IAAI,cAAJ,CAAmB,IAAnB,CAAT;AAAA,GAApB,CAApB;;AAEA,MAAI,YAAY,MAAhB,EAAwB;AACtB,UAAM,IAAI,KAAJ,qCAA4C,YAAY,IAAZ,CAAiB,MAAjB,CAA5C,QAAN;AACD;AACF;;AAED;;;;;;;;;AASO,SAAS,eAAT,CAA0B,KAA1B,EAAiC,OAAjC,EAA0C;AAC/C,MAAM,KAAK,SAAS,aAAT,CAAuB,UAAvB,CAAX;AACA,KAAG,KAAH,GAAW,KAAX;AACA,KAAG,YAAH,CAAgB,UAAhB,EAA4B,EAA5B;AACA,KAAG,KAAH,CAAS,QAAT,GAAoB,UAApB;AACA,KAAG,KAAH,CAAS,IAAT,GAAgB,UAAhB;AACA,MAAI,eAAe,SAAS,IAA5B;AACA;AACA,MAAI,WAAW,OAAO,QAAQ,WAAf,KAA+B,UAA9C,EAA0D;AACxD,mBAAe,OAAf;AACD;AACD,eAAa,WAAb,CAAyB,EAAzB;AACA,MAAM,WACJ,SAAS,YAAT,GAAwB,UAAxB,GAAqC,CAArC,GACI,SAAS,YAAT,GAAwB,UAAxB,CAAmC,CAAnC,CADJ,GAEI,KAHN;;AAKA,MAAI,cAAc,KAAd,EAAJ,EAA2B;AACzB;AACA;AACA,OAAG,iBAAH,CAAqB,CAArB,EAAwB,MAAxB;AACD,GAJD,MAIO;AACL,OAAG,MAAH;AACD;;AAED,WAAS,WAAT,CAAqB,MAArB;AACA,eAAa,WAAb,CAAyB,EAAzB;AACA,MAAI,QAAJ,EAAc;AACZ,aAAS,YAAT,GAAwB,eAAxB;AACA,aAAS,YAAT,GAAwB,QAAxB,CAAiC,QAAjC;AACD;AACF;;AAED;;;;AAIO,SAAS,KAAT,CAAgB,EAAhB,EAAoB;AACzB,MAAI,SAAS,UAAT,KAAwB,SAA5B,EAAuC;AACrC;AACD,GAFD,MAEO;AACL,aAAS,gBAAT,CAA0B,kBAA1B,EAA8C,EAA9C;AACD;AACF;;AAED;;;;AAIO,SAAS,YAAT,CAAuB,EAAvB,EAA2B;AAChC,SAAO,gBAAP,CAAwB,MAAxB,EAAgC,EAAhC;AACD;;AAED;;;;;AAKO,SAAS,oBAAT,OAAiD;AAAA,MAAhB,YAAgB,QAAhB,YAAgB;;AACtD,MAAI,aAAa,aAAb,CAA2B,kBAA3B,CAAJ,EAAoD;AAClD;AACD;AACD,MAAI,oBAAoB,MAAM,IAAN,CAAW,aAAa,gBAAb,+QAAX,EASpB,MAToB,CASb,mBAAW;AACpB,WAAO,QAAQ,WAAR,GAAsB,CAAtB,IAA2B,QAAQ,YAAR,GAAuB,CAAzD;AACD,GAXuB,CAAxB;;AAaA,sBAAoB,kBAAkB,MAAlB,CAAyB,mBAAW;AACtD;AACA,QAAI,QAAQ,WAAR,GAAsB,CAAtB,IAA2B,QAAQ,YAAR,GAAuB,CAAtD,EAAyD;AACvD,aAAO,IAAP;AACD;AACF,GALmB,CAApB;;AAOA,MAAM,uBAAuB,kBAAkB,kBAAkB,MAAlB,GAA2B,CAA7C,CAA7B;AACA,MAAM,wBAAwB,kBAAkB,CAAlB,CAA9B;;AAEA,uBAAqB,gBAArB,CAAsC,SAAtC,EAAiD,UAAC,KAAD,EAAW;AAC1D,QAAI,MAAM,OAAN,KAAkB,kBAAQ,GAA1B,IAAiC,CAAC,MAAM,QAA5C,EAAsD;AACpD,YAAM,cAAN;AACA,YAAM,eAAN;AACA,4BAAsB,KAAtB;AACD;AACF,GAND;;AAQA,wBAAsB,gBAAtB,CAAuC,SAAvC,EAAkD,UAAC,KAAD,EAAW;AAC3D,QAAI,MAAM,OAAN,KAAkB,kBAAQ,GAA1B,IAAiC,MAAM,QAA3C,EAAqD;AACnD,YAAM,cAAN;AACA,YAAM,eAAN;AACA,2BAAqB,KAArB;AACD;AACF,GAND;;AAQA,wBAAsB,KAAtB;AACD;;AAEM,SAAS,YAAT,GAAyB;AAC9B,SAAO,uCAAuC,OAAvC,CAA+C,OAA/C,EAAwD,UAAC,CAAD,EAAO;AACpE,QAAM,IAAI,KAAK,MAAL,KAAgB,EAAhB,GAAqB,CAA/B,CAAkC,IAAM,IAAI,MAAM,GAAN,GAAY,CAAZ,GAAiB,IAAI,GAAJ,GAAU,GAArC;AAClC,WAAO,EAAE,QAAF,CAAW,EAAX,CAAP;AACD,GAHM,CAAP;AAID;;AAEM,SAAS,YAAT,CAAuB,GAAvB,EAA4B;AACjC,MAAI;AACF,SAAK,KAAL,CAAW,GAAX;AACD,GAFD,CAEE,OAAO,CAAP,EAAU;AACV,YAAQ,KAAR,CAAc,wBAAd;AACA,WAAO,KAAP;AACD;AACD,SAAO,IAAP;AACD;;AAED;;;;;;;;;AASO,IAAM,0DAAyB,SAAzB,sBAAyB,CAAC,SAAD,EAAe;AACnD,SAAO,UAAU,GAAV,CAAc;AAAA,WAAY,SAAS,aAAT,CAAuB,QAAvB,CAAZ;AAAA,GAAd,CAAP;AACD,CAFM;;AAIP;;;;AAIO,IAAM,4CAAkB,SAAlB,eAAkB,CAAC,IAAD,EAAU;AACvC,MAAI,CAAC,IAAD,IAAS,OAAO,IAAP,KAAgB,QAA7B,EAAuC;AACnC,WAAO,IAAP;AACH;;AAED,MAAI;AACA,QAAM,cAAc,SAAS,MAAT,CACf,KADe,CACT,GADS,EAEf,GAFe,CAEX;AAAA,aAAU,OAAO,IAAP,EAAV;AAAA,KAFW,EAGf,IAHe,CAGV;AAAA,aAAU,OAAO,UAAP,CAAqB,IAArB,OAAV;AAAA,KAHU,CAApB;;AAKA,WAAO,cAAc,YAAY,SAAZ,CAAsB,KAAK,MAAL,GAAc,CAApC,CAAd,GAAuD,IAA9D;AACH,GAPD,CAOE,OAAM,KAAN,EAAa;AACb,YAAQ,GAAR,CAAY,sBAAZ,EAAoC,KAApC;AACE,WAAO,IAAP;AACH;AACF,CAhBM;;;;;;;;;;;AC5NP;;;;AACA;;;;;;;;AAEA,IAAM,eAAe,KAAK,IAA1B;AACA,IAAM,cAAc,IAApB;;IAEM,Q;;;;;;;yBACC,O,EAAS,I,EAAoB;AAAA,UAAd,OAAc,uEAAJ,EAAI;;AAChC,cAAQ,IAAR,CAAa,SAAb,EAAwB,OAAxB,EAAiC,IAAjC,EAAuC,OAAvC;AACD;;;yBAEI,O,EAAS,I,EAAoB;AAAA,UAAd,OAAc,uEAAJ,EAAI;;AAChC,cAAQ,IAAR,CAAa,SAAb,EAAwB,OAAxB,EAAiC,IAAjC,EAAuC,OAAvC;AACD;;;0BAEK,O,EAAS,S,EAAW,I,EAAoB;AAAA,UAAd,OAAc,uEAAJ,EAAI;;AAC5C,cAAQ,KAAR,CAAc,SAAd,EAAyB,OAAzB,EAAkC,SAAlC,EAA6C,IAA7C,EAAmD,OAAnD;AACD;;;;;;IAGU,K,WAAA,K;AACX,mBAAc;AAAA;;AACZ,SAAK,OAAL,GAAe,IAAf;AACD;;;;2BAGM;AACL,UAAM,SACN;AACE,mBAAW,eADb;AAEE,aAAK;AACH,gBAAM,0CADH;AAEH,iBAAO,eAFJ;AAGH,uBAAa,QAAQ,GAAR,CAAY,QAAZ,IAAwB,aAHlC;AAIH,eAAK,EAJF;AAKH,gBAAM,IALH;AAMH,wBAAc,YANX,CAMyB;AANzB,SAFP;AAUE,uBAAe,yBAAM;AACnB,iBAAO,EAAE,YAAY,OAAd,EAAuB,QAAQ,KAA/B,EAAP;AACD,SAZH;AAaE,iBAAS,iBAAC,GAAD,EAAM,OAAN,EAAkB;AACzB,iBAAO,SAAP,GAAmB,OAAO,SAAP,IAAoB,EAAvC;AACA,iBAAO,SAAP,CAAiB,IAAjB,CAAsB;AACpB,mBAAO,mBADa;AAEpB,sBAAU;AACN,yBAAW;AACP,oCAAoB,OADb;AAEP,gCAAgB;AAFT;AADL;AAFU,WAAtB;AASD;AAxBH,OADA;;AA4BA,aAAO,GAAP,GAAa,IAAI,QAAJ,EAAb;AACA,UAAM,aAAa,gBAAM,MAAN,CAAa;AAC9B,iBAAS;AADqB,OAAb,CAAnB;;AAIJ,UAAM,UAAU,iCAAgC,MAAhC,EAAwC,UAAxC,CAAhB;AACA,UAAM,OAAO,IAAb;AACA,cAAQ,WAAR,GACK,IADL,CACU,YAAM;AACR,aAAK,OAAL,GAAe,OAAf;AACA,aAAK,OAAL,CAAa,eAAb,CAA6B,0BAA7B;AACA,eAAO,IAAP;AACH,OALL,EAMK,KANL,CAMW,iBAAS;AACZ,eAAO,GAAP,CAAW,KAAX,CAAiB,0BAAjB,EAA6C,KAA7C;AACH,OARL;AASG;;;;;;;;;;;;;;;;;ACxEH;;;;;;;AAOA;AACA;AACA,IAAM,cAAc;AAClB,YAAU,GADQ;AAElB,qBAAmB,GAFD;AAGlB,sBAAoB,IAHF;AAIlB,aAAW;AAJO,CAApB;;IAMqB,iB;;;;;;;;AACnB;;;;;;8BAMW,K,EAAO,K,EAAO;AACvB,UAAM,QAAQ,EAAd;AACA,UAAI,KAAJ,EAAW;AACT,cAAM,IAAN,CAAW,KAAX;AACD;AACD,UAAI,KAAJ,EAAW;AACT,cAAM,IAAN,CAAW,KAAX;AACD;AACD,UAAI,MAAM,MAAV,EAAkB;AAChB,eAAO,MAAM,KAAN,CAAY,gBAAQ;AACzB,cAAM,WAAW,KAAK,OAAL,CAAa,SAAb,EAAwB,EAAxB,CAAjB;AACA,cAAI,aAAa,YAAY,KAAK,OAAL,CAAa,QAAb,EAAuB,EAAvB,CAAZ,CAAjB;AACA,cAAI,CAAC,UAAL,EAAiB;AACf,kBAAM,IAAI,KAAJ,CAAU,oBAAV,CAAN;AACD;AACD,kBAAQ,QAAR;AACE,iBAAK,GAAL;AACE,qBAAO,OAAO,UAAP,IAAsB,aAAa,CAA1C;AACF,iBAAK,IAAL;AACE,qBAAO,OAAO,UAAP,IAAqB,UAA5B;AACF,iBAAK,GAAL;AACE,qBAAO,OAAO,UAAP,IAAsB,aAAa,CAA1C;AACF,iBAAK,IAAL;AACE,qBAAO,OAAO,UAAP,IAAqB,UAA5B;AACF;AACE,oBAAM,IAAI,KAAJ,CAAU,oBAAV,CAAN;AAVJ;AAYD,SAlBM,CAAP;AAmBD;AACF;;;;;;kBApCkB,iB","file":"app.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&amp;&amp;require;if(!f&amp;&amp;c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&amp;&amp;require,i=0;i&lt;t.length;i++)o(t[i]);return o}return r})()","var __accessCheck=(e,t,n)=&gt;{if(!t.has(e))throw TypeError(\"Cannot \"+n)},__privateGet=(e,t,n)=&gt;(__accessCheck(e,t,\"read from private field\"),n?n.call(e):t.get(e)),__privateAdd=(e,t,n)=&gt;{if(t.has(e))throw TypeError(\"Cannot add the same private member more than once\");t instanceof WeakSet?t.add(e):t.set(e,n)},__privateSet=(e,t,n,r)=&gt;(__accessCheck(e,t,\"write to private field\"),r?r.call(e,n):t.set(e,n),n),__privateMethod=(e,t,n)=&gt;(__accessCheck(e,t,\"access private method\"),n),__async=(e,t,n)=&gt;new Promise(((r,o)=&gt;{var i=e=&gt;{try{a(n.next(e))}catch(t){o(t)}},s=e=&gt;{try{a(n.throw(e))}catch(t){o(t)}},a=e=&gt;e.done?r(e.value):Promise.resolve(e.value).then(i,s);a((n=n.apply(e,t)).next())}));!function(e,t){\"object\"==typeof exports&amp;&amp;\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&amp;&amp;define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self)[\"feature-management\"]=t()}(this,(function(){var e,t,n,r,o,i,s=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{};function a(e){if(e.__esModule)return e;var t=Object.defineProperty({},\"__esModule\",{value:!0});return Object.keys(e).forEach((function(n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})})),t}var u={exports:{}},c=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r&lt;n.length;r++)n[r]=arguments[r];return e.apply(t,n)}},f=c,l=Object.prototype.toString;function h(e){return Array.isArray(e)}function p(e){return void 0===e}function d(e){return\"[object ArrayBuffer]\"===l.call(e)}function g(e){return null!==e&amp;&amp;\"object\"==typeof e}function y(e){if(\"[object Object]\"!==l.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function m(e){return\"[object Function]\"===l.call(e)}function v(e,t){if(null!=e)if(\"object\"!=typeof e&amp;&amp;(e=[e]),h(e))for(var n=0,r=e.length;n&lt;r;n++)t.call(null,e[n],n,e);else for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&amp;&amp;t.call(null,e[o],o,e)}var w={isArray:h,isArrayBuffer:d,isBuffer:function(e){return null!==e&amp;&amp;!p(e)&amp;&amp;null!==e.constructor&amp;&amp;!p(e.constructor)&amp;&amp;\"function\"==typeof e.constructor.isBuffer&amp;&amp;e.constructor.isBuffer(e)},isFormData:function(e){return\"[object FormData]\"===l.call(e)},isArrayBufferView:function(e){return\"undefined\"!=typeof ArrayBuffer&amp;&amp;ArrayBuffer.isView?ArrayBuffer.isView(e):e&amp;&amp;e.buffer&amp;&amp;d(e.buffer)},isString:function(e){return\"string\"==typeof e},isNumber:function(e){return\"number\"==typeof e},isObject:g,isPlainObject:y,isUndefined:p,isDate:function(e){return\"[object Date]\"===l.call(e)},isFile:function(e){return\"[object File]\"===l.call(e)},isBlob:function(e){return\"[object Blob]\"===l.call(e)},isFunction:m,isStream:function(e){return g(e)&amp;&amp;m(e.pipe)},isURLSearchParams:function(e){return\"[object URLSearchParams]\"===l.call(e)},isStandardBrowserEnv:function(){return(\"undefined\"==typeof navigator||\"ReactNative\"!==navigator.product&amp;&amp;\"NativeScript\"!==navigator.product&amp;&amp;\"NS\"!==navigator.product)&amp;&amp;(\"undefined\"!=typeof window&amp;&amp;\"undefined\"!=typeof document)},forEach:v,merge:function e(){var t={};function n(n,r){y(t[r])&amp;&amp;y(n)?t[r]=e(t[r],n):y(n)?t[r]=e({},n):h(n)?t[r]=n.slice():t[r]=n}for(var r=0,o=arguments.length;r&lt;o;r++)v(arguments[r],n);return t},extend:function(e,t,n){return v(t,(function(t,r){e[r]=n&amp;&amp;\"function\"==typeof t?f(t,n):t})),e},trim:function(e){return e.trim?e.trim():e.replace(/^\\s+|\\s+$/g,\"\")},stripBOM:function(e){return 65279===e.charCodeAt(0)&amp;&amp;(e=e.slice(1)),e}},b=w;function _(e){return encodeURIComponent(e).replace(/%3A/gi,\":\").replace(/%24/g,\"$\").replace(/%2C/gi,\",\").replace(/%20/g,\"+\").replace(/%5B/gi,\"[\").replace(/%5D/gi,\"]\")}var x=function(e,t,n){if(!t)return e;var r;if(n)r=n(t);else if(b.isURLSearchParams(t))r=t.toString();else{var o=[];b.forEach(t,(function(e,t){null!=e&amp;&amp;(b.isArray(e)?t+=\"[]\":e=[e],b.forEach(e,(function(e){b.isDate(e)?e=e.toISOString():b.isObject(e)&amp;&amp;(e=JSON.stringify(e)),o.push(_(t)+\"=\"+_(e))})))})),r=o.join(\"&amp;\")}if(r){var i=e.indexOf(\"#\");-1!==i&amp;&amp;(e=e.slice(0,i)),e+=(-1===e.indexOf(\"?\")?\"?\":\"&amp;\")+r}return e},E=w;function S(){this.handlers=[]}S.prototype.use=function(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&amp;&amp;n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},S.prototype.eject=function(e){this.handlers[e]&amp;&amp;(this.handlers[e]=null)},S.prototype.forEach=function(e){E.forEach(this.handlers,(function(t){null!==t&amp;&amp;e(t)}))};var C=S,O=w,k=function(e,t,n,r,o){return e.config=t,n&amp;&amp;(e.code=n),e.request=r,e.response=o,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&amp;&amp;this.response.status?this.response.status:null}},e},j=k,A=function(e,t,n,r,o){var i=new Error(e);return j(i,t,n,r,o)},B=A,T=w,P=T.isStandardBrowserEnv()?{write:function(e,t,n,r,o,i){var s=[];s.push(e+\"=\"+encodeURIComponent(t)),T.isNumber(n)&amp;&amp;s.push(\"expires=\"+new Date(n).toGMTString()),T.isString(r)&amp;&amp;s.push(\"path=\"+r),T.isString(o)&amp;&amp;s.push(\"domain=\"+o),!0===i&amp;&amp;s.push(\"secure\"),document.cookie=s.join(\"; \")},read:function(e){var t=document.cookie.match(new RegExp(\"(^|;\\\\s*)(\"+e+\")=([^;]*)\"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,\"\",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}},N=function(e){return/^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(e)},U=function(e,t){return t?e.replace(/\\/+$/,\"\")+\"/\"+t.replace(/^\\/+/,\"\"):e},R=w,L=[\"age\",\"authorization\",\"content-length\",\"content-type\",\"etag\",\"expires\",\"from\",\"host\",\"if-modified-since\",\"if-unmodified-since\",\"last-modified\",\"location\",\"max-forwards\",\"proxy-authorization\",\"referer\",\"retry-after\",\"user-agent\"],I=w,$=I.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement(\"a\");function r(e){var r=e;return t&amp;&amp;(n.setAttribute(\"href\",r),r=n.href),n.setAttribute(\"href\",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,\"\"):\"\",host:n.host,search:n.search?n.search.replace(/^\\?/,\"\"):\"\",hash:n.hash?n.hash.replace(/^#/,\"\"):\"\",hostname:n.hostname,port:n.port,pathname:\"/\"===n.pathname.charAt(0)?n.pathname:\"/\"+n.pathname}}return e=r(window.location.href),function(t){var n=I.isString(t)?r(t):t;return n.protocol===e.protocol&amp;&amp;n.host===e.host}}():function(){return!0};function M(e){this.message=e}M.prototype.toString=function(){return\"Cancel\"+(this.message?\": \"+this.message:\"\")},M.prototype.__CANCEL__=!0;var F=M,V=w,q=function(e,t,n){var r=n.config.validateStatus;n.status&amp;&amp;r&amp;&amp;!r(n.status)?t(B(\"Request failed with status code \"+n.status,n.config,null,n.request,n)):e(n)},D=P,H=x,z=function(e,t){return e&amp;&amp;!N(t)?U(e,t):t},W=function(e){var t,n,r,o={};return e?(R.forEach(e.split(\"\\n\"),(function(e){if(r=e.indexOf(\":\"),t=R.trim(e.substr(0,r)).toLowerCase(),n=R.trim(e.substr(r+1)),t){if(o[t]&amp;&amp;L.indexOf(t)&gt;=0)return;o[t]=\"set-cookie\"===t?(o[t]?o[t]:[]).concat([n]):o[t]?o[t]+\", \"+n:n}})),o):o},J=$,G=A,K=ie,X=F,Q=function(e){return new Promise((function(t,n){var r,o=e.data,i=e.headers,s=e.responseType;function a(){e.cancelToken&amp;&amp;e.cancelToken.unsubscribe(r),e.signal&amp;&amp;e.signal.removeEventListener(\"abort\",r)}V.isFormData(o)&amp;&amp;delete i[\"Content-Type\"];var u=new XMLHttpRequest;if(e.auth){var c=e.auth.username||\"\",f=e.auth.password?unescape(encodeURIComponent(e.auth.password)):\"\";i.Authorization=\"Basic \"+btoa(c+\":\"+f)}var l=z(e.baseURL,e.url);function h(){if(u){var r=\"getAllResponseHeaders\"in u?W(u.getAllResponseHeaders()):null,o={data:s&amp;&amp;\"text\"!==s&amp;&amp;\"json\"!==s?u.response:u.responseText,status:u.status,statusText:u.statusText,headers:r,config:e,request:u};q((function(e){t(e),a()}),(function(e){n(e),a()}),o),u=null}}if(u.open(e.method.toUpperCase(),H(l,e.params,e.paramsSerializer),!0),u.timeout=e.timeout,\"onloadend\"in u?u.onloadend=h:u.onreadystatechange=function(){u&amp;&amp;4===u.readyState&amp;&amp;(0!==u.status||u.responseURL&amp;&amp;0===u.responseURL.indexOf(\"file:\"))&amp;&amp;setTimeout(h)},u.onabort=function(){u&amp;&amp;(n(G(\"Request aborted\",e,\"ECONNABORTED\",u)),u=null)},u.onerror=function(){n(G(\"Network Error\",e,null,u)),u=null},u.ontimeout=function(){var t=e.timeout?\"timeout of \"+e.timeout+\"ms exceeded\":\"timeout exceeded\",r=e.transitional||K.transitional;e.timeoutErrorMessage&amp;&amp;(t=e.timeoutErrorMessage),n(G(t,e,r.clarifyTimeoutError?\"ETIMEDOUT\":\"ECONNABORTED\",u)),u=null},V.isStandardBrowserEnv()){var p=(e.withCredentials||J(l))&amp;&amp;e.xsrfCookieName?D.read(e.xsrfCookieName):void 0;p&amp;&amp;(i[e.xsrfHeaderName]=p)}\"setRequestHeader\"in u&amp;&amp;V.forEach(i,(function(e,t){void 0===o&amp;&amp;\"content-type\"===t.toLowerCase()?delete i[t]:u.setRequestHeader(t,e)})),V.isUndefined(e.withCredentials)||(u.withCredentials=!!e.withCredentials),s&amp;&amp;\"json\"!==s&amp;&amp;(u.responseType=e.responseType),\"function\"==typeof e.onDownloadProgress&amp;&amp;u.addEventListener(\"progress\",e.onDownloadProgress),\"function\"==typeof e.onUploadProgress&amp;&amp;u.upload&amp;&amp;u.upload.addEventListener(\"progress\",e.onUploadProgress),(e.cancelToken||e.signal)&amp;&amp;(r=function(e){u&amp;&amp;(n(!e||e&amp;&amp;e.type?new X(\"canceled\"):e),u.abort(),u=null)},e.cancelToken&amp;&amp;e.cancelToken.subscribe(r),e.signal&amp;&amp;(e.signal.aborted?r():e.signal.addEventListener(\"abort\",r))),o||(o=null),u.send(o)}))},Y=w,Z=function(e,t){O.forEach(e,(function(n,r){r!==t&amp;&amp;r.toUpperCase()===t.toUpperCase()&amp;&amp;(e[t]=n,delete e[r])}))},ee=k,te={\"Content-Type\":\"application/x-www-form-urlencoded\"};function ne(e,t){!Y.isUndefined(e)&amp;&amp;Y.isUndefined(e[\"Content-Type\"])&amp;&amp;(e[\"Content-Type\"]=t)}var re,oe={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:((\"undefined\"!=typeof XMLHttpRequest||\"undefined\"!=typeof process&amp;&amp;\"[object process]\"===Object.prototype.toString.call(process))&amp;&amp;(re=Q),re),transformRequest:[function(e,t){return Z(t,\"Accept\"),Z(t,\"Content-Type\"),Y.isFormData(e)||Y.isArrayBuffer(e)||Y.isBuffer(e)||Y.isStream(e)||Y.isFile(e)||Y.isBlob(e)?e:Y.isArrayBufferView(e)?e.buffer:Y.isURLSearchParams(e)?(ne(t,\"application/x-www-form-urlencoded;charset=utf-8\"),e.toString()):Y.isObject(e)||t&amp;&amp;\"application/json\"===t[\"Content-Type\"]?(ne(t,\"application/json\"),function(e,t,n){if(Y.isString(e))try{return(t||JSON.parse)(e),Y.trim(e)}catch(r){if(\"SyntaxError\"!==r.name)throw r}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||oe.transitional,n=t&amp;&amp;t.silentJSONParsing,r=t&amp;&amp;t.forcedJSONParsing,o=!n&amp;&amp;\"json\"===this.responseType;if(o||r&amp;&amp;Y.isString(e)&amp;&amp;e.length)try{return JSON.parse(e)}catch(i){if(o){if(\"SyntaxError\"===i.name)throw ee(i,this,\"E_JSON_PARSE\");throw i}}return e}],timeout:0,xsrfCookieName:\"XSRF-TOKEN\",xsrfHeaderName:\"X-XSRF-TOKEN\",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(e){return e&gt;=200&amp;&amp;e&lt;300},headers:{common:{Accept:\"application/json, text/plain, */*\"}}};Y.forEach([\"delete\",\"get\",\"head\"],(function(e){oe.headers[e]={}})),Y.forEach([\"post\",\"put\",\"patch\"],(function(e){oe.headers[e]=Y.merge(te)}));var ie=oe,se=w,ae=ie,ue=function(e){return!(!e||!e.__CANCEL__)},ce=w,fe=function(e,t,n){var r=this||ae;return se.forEach(n,(function(n){e=n.call(r,e,t)})),e},le=ue,he=ie,pe=F;function de(e){if(e.cancelToken&amp;&amp;e.cancelToken.throwIfRequested(),e.signal&amp;&amp;e.signal.aborted)throw new pe(\"canceled\")}var ge=w,ye=function(e,t){t=t||{};var n={};function r(e,t){return ge.isPlainObject(e)&amp;&amp;ge.isPlainObject(t)?ge.merge(e,t):ge.isPlainObject(t)?ge.merge({},t):ge.isArray(t)?t.slice():t}function o(n){return ge.isUndefined(t[n])?ge.isUndefined(e[n])?void 0:r(void 0,e[n]):r(e[n],t[n])}function i(e){if(!ge.isUndefined(t[e]))return r(void 0,t[e])}function s(n){return ge.isUndefined(t[n])?ge.isUndefined(e[n])?void 0:r(void 0,e[n]):r(void 0,t[n])}function a(n){return n in t?r(e[n],t[n]):n in e?r(void 0,e[n]):void 0}var u={url:i,method:i,data:i,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:a};return ge.forEach(Object.keys(e).concat(Object.keys(t)),(function(e){var t=u[e]||o,r=t(e);ge.isUndefined(r)&amp;&amp;t!==a||(n[e]=r)})),n},me=\"0.25.0\",ve=me,we={};[\"object\",\"boolean\",\"number\",\"function\",\"string\",\"symbol\"].forEach((function(e,t){we[e]=function(n){return typeof n===e||\"a\"+(t&lt;1?\"n \":\" \")+e}}));var be={};we.transitional=function(e,t,n){function r(e,t){return\"[Axios v\"+ve+\"] Transitional option '\"+e+\"'\"+t+(n?\". \"+n:\"\")}return function(n,o,i){if(!1===e)throw new Error(r(o,\" has been removed\"+(t?\" in \"+t:\"\")));return t&amp;&amp;!be[o]&amp;&amp;(be[o]=!0,console.warn(r(o,\" has been deprecated since v\"+t+\" and will be removed in the near future\"))),!e||e(n,o,i)}};var _e=w,xe=x,Ee=C,Se=function(e){return de(e),e.headers=e.headers||{},e.data=fe.call(e,e.data,e.headers,e.transformRequest),e.headers=ce.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),ce.forEach([\"delete\",\"get\",\"head\",\"post\",\"put\",\"patch\",\"common\"],(function(t){delete e.headers[t]})),(e.adapter||he.adapter)(e).then((function(t){return de(e),t.data=fe.call(e,t.data,t.headers,e.transformResponse),t}),(function(t){return le(t)||(de(e),t&amp;&amp;t.response&amp;&amp;(t.response.data=fe.call(e,t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))},Ce=ye,Oe={assertOptions:function(e,t,n){if(\"object\"!=typeof e)throw new TypeError(\"options must be an object\");for(var r=Object.keys(e),o=r.length;o-- &gt;0;){var i=r[o],s=t[i];if(s){var a=e[i],u=void 0===a||s(a,i,e);if(!0!==u)throw new TypeError(\"option \"+i+\" must be \"+u)}else if(!0!==n)throw Error(\"Unknown option \"+i)}},validators:we},ke=Oe.validators;function je(e){this.defaults=e,this.interceptors={request:new Ee,response:new Ee}}je.prototype.request=function(e,t){if(\"string\"==typeof e?(t=t||{}).url=e:t=e||{},!t.url)throw new Error(\"Provided config url is not valid\");(t=Ce(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method=\"get\";var n=t.transitional;void 0!==n&amp;&amp;Oe.assertOptions(n,{silentJSONParsing:ke.transitional(ke.boolean),forcedJSONParsing:ke.transitional(ke.boolean),clarifyTimeoutError:ke.transitional(ke.boolean)},!1);var r=[],o=!0;this.interceptors.request.forEach((function(e){\"function\"==typeof e.runWhen&amp;&amp;!1===e.runWhen(t)||(o=o&amp;&amp;e.synchronous,r.unshift(e.fulfilled,e.rejected))}));var i,s=[];if(this.interceptors.response.forEach((function(e){s.push(e.fulfilled,e.rejected)})),!o){var a=[Se,void 0];for(Array.prototype.unshift.apply(a,r),a=a.concat(s),i=Promise.resolve(t);a.length;)i=i.then(a.shift(),a.shift());return i}for(var u=t;r.length;){var c=r.shift(),f=r.shift();try{u=c(u)}catch(l){f(l);break}}try{i=Se(u)}catch(l){return Promise.reject(l)}for(;s.length;)i=i.then(s.shift(),s.shift());return i},je.prototype.getUri=function(e){if(!e.url)throw new Error(\"Provided config url is not valid\");return e=Ce(this.defaults,e),xe(e.url,e.params,e.paramsSerializer).replace(/^\\?/,\"\")},_e.forEach([\"delete\",\"get\",\"head\",\"options\"],(function(e){je.prototype[e]=function(t,n){return this.request(Ce(n||{},{method:e,url:t,data:(n||{}).data}))}})),_e.forEach([\"post\",\"put\",\"patch\"],(function(e){je.prototype[e]=function(t,n,r){return this.request(Ce(r||{},{method:e,url:t,data:n}))}}));var Ae=je,Be=F;function Te(e){if(\"function\"!=typeof e)throw new TypeError(\"executor must be a function.\");var t;this.promise=new Promise((function(e){t=e}));var n=this;this.promise.then((function(e){if(n._listeners){var t,r=n._listeners.length;for(t=0;t&lt;r;t++)n._listeners[t](e);n._listeners=null}})),this.promise.then=function(e){var t,r=new Promise((function(e){n.subscribe(e),t=e})).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e((function(e){n.reason||(n.reason=new Be(e),t(n.reason))}))}Te.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},Te.prototype.subscribe=function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]},Te.prototype.unsubscribe=function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&amp;&amp;this._listeners.splice(t,1)}},Te.source=function(){var e;return{token:new Te((function(t){e=t})),cancel:e}};var Pe=Te,Ne=w,Ue=w,Re=c,Le=Ae,Ie=ye;var $e=function e(t){var n=new Le(t),r=Re(Le.prototype.request,n);return Ue.extend(r,Le.prototype,n),Ue.extend(r,n),r.create=function(n){return e(Ie(t,n))},r}(ie);$e.Axios=Le,$e.Cancel=F,$e.CancelToken=Pe,$e.isCancel=ue,$e.VERSION=me,$e.all=function(e){return Promise.all(e)},$e.spread=function(e){return function(t){return e.apply(null,t)}},$e.isAxiosError=function(e){return Ne.isObject(e)&amp;&amp;!0===e.isAxiosError},u.exports=$e,u.exports.default=$e;var Me=u.exports;const Fe={logError(e){console&amp;&amp;console.error&amp;&amp;console.error(e)},logWarn(e){console&amp;&amp;console.warn&amp;&amp;console.warn(e)},logInfo(e){console&amp;&amp;console.info&amp;&amp;console.info(e)}};let Ve={},qe=null,De=null;function He(e,t){if(e){const n=\"string\"==typeof e?JSON.parse(e):e;return qe&amp;&amp;qe&gt;=n.createdAt?{}:(qe=n.createdAt,qe?(Fe.logInfo(`Loading new feature config - created at: ${qe}`),Ve={},n.features.forEach((e=&gt;{Ve[e.key]=e})),\"function\"==typeof t&amp;&amp;t(),n):{})}return{}}function ze(){return null}function We(e,t){switch(e.property){case\"Country\":return t.country;case\"AppVersion\":return t.appVersion;default:throw new Error(`Unexpected restriction property: ${e.property}`)}}function Je(e,t,n){const r=We(t,n);switch(t.property){case\"Country\":return e.toLowerCase()===r.toLowerCase();case\"AppVersion\":return e===r;default:throw new Error(\"Unexpected restriction property: \",t.property)}}function Ge(e,t,n){switch(n.property){case\"AppVersion\":return 1===function(e,t){const n=e.split(\".\").map((e=&gt;parseInt(e))),r=t.split(\".\").map((e=&gt;parseInt(e)));let o=0;for(;;){if(o&gt;=n.length)return o&gt;=r.length?0:-1;if(o&gt;=r.length)return 1;if(n[o]&gt;r[o])return 1;if(r[o]&gt;n[o])return-1;o++}}(e,t);default:throw new Error(\"Property is not comparable: \",n.property)}}function Ke(e,t,n){const r=We(t,n),o=t[e];switch(e){case\"gt\":return Ge(r,o,t);case\"gte\":return Ge(r,o,t)||Je(o,t,n);case\"lt\":return Ge(o,r,t);case\"lte\":return Ge(o,r,t)||Je(o,t,n);default:return!1}}function Xe(e,t){try{return function(e){const t=[\"and\",\"or\",\"eq\",\"neq\",\"in\",\"nin\",\"gt\",\"gte\",\"lt\",\"lte\"].filter((t=&gt;e[t]));if(t.length&gt;1)throw new Error(`${t.length} operators specified`,t)}(e),e.and?e.and.every((e=&gt;Xe(e,t))):e.or?e.or.some((e=&gt;Xe(e,t))):e.eq?Je(e.eq,e,t):e.neq?!Je(e.neq,e,t):e.in?e.in.some((n=&gt;Je(n,e,t))):e.nin?e.nin.every((n=&gt;!Je(n,e,t))):e.gt?Ke(\"gt\",e,t):e.gte?Ke(\"gte\",e,t):e.lt?Ke(\"lt\",e,t):!e.lte||Ke(\"lte\",e,t)}catch(n){return Fe.logWarn(n.message,null,{error:n}),!1}}var Qe,Ye={exports:{}},Ze={exports:{}},et=a(Object.freeze({__proto__:null,[Symbol.toStringTag]:\"Module\",default:{}}));Ze.exports=Qe=Qe||function(e,t){var n;if(\"undefined\"!=typeof window&amp;&amp;window.crypto&amp;&amp;(n=window.crypto),\"undefined\"!=typeof self&amp;&amp;self.crypto&amp;&amp;(n=self.crypto),\"undefined\"!=typeof globalThis&amp;&amp;globalThis.crypto&amp;&amp;(n=globalThis.crypto),!n&amp;&amp;\"undefined\"!=typeof window&amp;&amp;window.msCrypto&amp;&amp;(n=window.msCrypto),!n&amp;&amp;void 0!==s&amp;&amp;s.crypto&amp;&amp;(n=s.crypto),!n)try{n=et}catch(y){}var r=function(){if(n){if(\"function\"==typeof n.getRandomValues)try{return n.getRandomValues(new Uint32Array(1))[0]}catch(y){}if(\"function\"==typeof n.randomBytes)try{return n.randomBytes(4).readInt32LE()}catch(y){}}throw new Error(\"Native crypto module could not be used to get secure random number.\")},o=Object.create||function(){function e(){}return function(t){var n;return e.prototype=t,n=new e,e.prototype=null,n}}(),i={},a=i.lib={},u=a.Base={extend:function(e){var t=o(this);return e&amp;&amp;t.mixIn(e),t.hasOwnProperty(\"init\")&amp;&amp;this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&amp;&amp;(this[t]=e[t]);e.hasOwnProperty(\"toString\")&amp;&amp;(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},c=a.WordArray=u.extend({init:function(e,n){e=this.words=e||[],this.sigBytes=n!=t?n:4*e.length},toString:function(e){return(e||l).stringify(this)},concat:function(e){var t=this.words,n=e.words,r=this.sigBytes,o=e.sigBytes;if(this.clamp(),r%4)for(var i=0;i&lt;o;i++){var s=n[i&gt;&gt;&gt;2]&gt;&gt;&gt;24-i%4*8&amp;255;t[r+i&gt;&gt;&gt;2]|=s&lt;&lt;24-(r+i)%4*8}else for(var a=0;a&lt;o;a+=4)t[r+a&gt;&gt;&gt;2]=n[a&gt;&gt;&gt;2];return this.sigBytes+=o,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n&gt;&gt;&gt;2]&amp;=4294967295&lt;&lt;32-n%4*8,t.length=e.ceil(n/4)},clone:function(){var e=u.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t=[],n=0;n&lt;e;n+=4)t.push(r());return new c.init(t,e)}}),f=i.enc={},l=f.Hex={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],o=0;o&lt;n;o++){var i=t[o&gt;&gt;&gt;2]&gt;&gt;&gt;24-o%4*8&amp;255;r.push((i&gt;&gt;&gt;4).toString(16)),r.push((15&amp;i).toString(16))}return r.join(\"\")},parse:function(e){for(var t=e.length,n=[],r=0;r&lt;t;r+=2)n[r&gt;&gt;&gt;3]|=parseInt(e.substr(r,2),16)&lt;&lt;24-r%8*4;return new c.init(n,t/2)}},h=f.Latin1={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],o=0;o&lt;n;o++){var i=t[o&gt;&gt;&gt;2]&gt;&gt;&gt;24-o%4*8&amp;255;r.push(String.fromCharCode(i))}return r.join(\"\")},parse:function(e){for(var t=e.length,n=[],r=0;r&lt;t;r++)n[r&gt;&gt;&gt;2]|=(255&amp;e.charCodeAt(r))&lt;&lt;24-r%4*8;return new c.init(n,t)}},p=f.Utf8={stringify:function(e){try{return decodeURIComponent(escape(h.stringify(e)))}catch(t){throw new Error(\"Malformed UTF-8 data\")}},parse:function(e){return h.parse(unescape(encodeURIComponent(e)))}},d=a.BufferedBlockAlgorithm=u.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(e){\"string\"==typeof e&amp;&amp;(e=p.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n,r=this._data,o=r.words,i=r.sigBytes,s=this.blockSize,a=i/(4*s),u=(a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0))*s,f=e.min(4*u,i);if(u){for(var l=0;l&lt;u;l+=s)this._doProcessBlock(o,l);n=o.splice(0,u),r.sigBytes-=f}return new c.init(n,f)},clone:function(){var e=u.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0});a.Hasher=d.extend({cfg:u.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){d.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){return e&amp;&amp;this._append(e),this._doFinalize()},blockSize:16,_createHelper:function(e){return function(t,n){return new e.init(n).finalize(t)}},_createHmacHelper:function(e){return function(t,n){return new g.HMAC.init(e,n).finalize(t)}}});var g=i.algo={};return i}(Math);var tt=Ze.exports;!function(e,t){e.exports=function(e){return function(t){var n=e,r=n.lib,o=r.WordArray,i=r.Hasher,s=n.algo,a=[];!function(){for(var e=0;e&lt;64;e++)a[e]=4294967296*t.abs(t.sin(e+1))|0}();var u=s.MD5=i.extend({_doReset:function(){this._hash=new o.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,t){for(var n=0;n&lt;16;n++){var r=t+n,o=e[r];e[r]=16711935&amp;(o&lt;&lt;8|o&gt;&gt;&gt;24)|4278255360&amp;(o&lt;&lt;24|o&gt;&gt;&gt;8)}var i=this._hash.words,s=e[t+0],u=e[t+1],p=e[t+2],d=e[t+3],g=e[t+4],y=e[t+5],m=e[t+6],v=e[t+7],w=e[t+8],b=e[t+9],_=e[t+10],x=e[t+11],E=e[t+12],S=e[t+13],C=e[t+14],O=e[t+15],k=i[0],j=i[1],A=i[2],B=i[3];k=c(k,j,A,B,s,7,a[0]),B=c(B,k,j,A,u,12,a[1]),A=c(A,B,k,j,p,17,a[2]),j=c(j,A,B,k,d,22,a[3]),k=c(k,j,A,B,g,7,a[4]),B=c(B,k,j,A,y,12,a[5]),A=c(A,B,k,j,m,17,a[6]),j=c(j,A,B,k,v,22,a[7]),k=c(k,j,A,B,w,7,a[8]),B=c(B,k,j,A,b,12,a[9]),A=c(A,B,k,j,_,17,a[10]),j=c(j,A,B,k,x,22,a[11]),k=c(k,j,A,B,E,7,a[12]),B=c(B,k,j,A,S,12,a[13]),A=c(A,B,k,j,C,17,a[14]),k=f(k,j=c(j,A,B,k,O,22,a[15]),A,B,u,5,a[16]),B=f(B,k,j,A,m,9,a[17]),A=f(A,B,k,j,x,14,a[18]),j=f(j,A,B,k,s,20,a[19]),k=f(k,j,A,B,y,5,a[20]),B=f(B,k,j,A,_,9,a[21]),A=f(A,B,k,j,O,14,a[22]),j=f(j,A,B,k,g,20,a[23]),k=f(k,j,A,B,b,5,a[24]),B=f(B,k,j,A,C,9,a[25]),A=f(A,B,k,j,d,14,a[26]),j=f(j,A,B,k,w,20,a[27]),k=f(k,j,A,B,S,5,a[28]),B=f(B,k,j,A,p,9,a[29]),A=f(A,B,k,j,v,14,a[30]),k=l(k,j=f(j,A,B,k,E,20,a[31]),A,B,y,4,a[32]),B=l(B,k,j,A,w,11,a[33]),A=l(A,B,k,j,x,16,a[34]),j=l(j,A,B,k,C,23,a[35]),k=l(k,j,A,B,u,4,a[36]),B=l(B,k,j,A,g,11,a[37]),A=l(A,B,k,j,v,16,a[38]),j=l(j,A,B,k,_,23,a[39]),k=l(k,j,A,B,S,4,a[40]),B=l(B,k,j,A,s,11,a[41]),A=l(A,B,k,j,d,16,a[42]),j=l(j,A,B,k,m,23,a[43]),k=l(k,j,A,B,b,4,a[44]),B=l(B,k,j,A,E,11,a[45]),A=l(A,B,k,j,O,16,a[46]),k=h(k,j=l(j,A,B,k,p,23,a[47]),A,B,s,6,a[48]),B=h(B,k,j,A,v,10,a[49]),A=h(A,B,k,j,C,15,a[50]),j=h(j,A,B,k,y,21,a[51]),k=h(k,j,A,B,E,6,a[52]),B=h(B,k,j,A,d,10,a[53]),A=h(A,B,k,j,_,15,a[54]),j=h(j,A,B,k,u,21,a[55]),k=h(k,j,A,B,w,6,a[56]),B=h(B,k,j,A,O,10,a[57]),A=h(A,B,k,j,m,15,a[58]),j=h(j,A,B,k,S,21,a[59]),k=h(k,j,A,B,g,6,a[60]),B=h(B,k,j,A,x,10,a[61]),A=h(A,B,k,j,p,15,a[62]),j=h(j,A,B,k,b,21,a[63]),i[0]=i[0]+k|0,i[1]=i[1]+j|0,i[2]=i[2]+A|0,i[3]=i[3]+B|0},_doFinalize:function(){var e=this._data,n=e.words,r=8*this._nDataBytes,o=8*e.sigBytes;n[o&gt;&gt;&gt;5]|=128&lt;&lt;24-o%32;var i=t.floor(r/4294967296),s=r;n[15+(o+64&gt;&gt;&gt;9&lt;&lt;4)]=16711935&amp;(i&lt;&lt;8|i&gt;&gt;&gt;24)|4278255360&amp;(i&lt;&lt;24|i&gt;&gt;&gt;8),n[14+(o+64&gt;&gt;&gt;9&lt;&lt;4)]=16711935&amp;(s&lt;&lt;8|s&gt;&gt;&gt;24)|4278255360&amp;(s&lt;&lt;24|s&gt;&gt;&gt;8),e.sigBytes=4*(n.length+1),this._process();for(var a=this._hash,u=a.words,c=0;c&lt;4;c++){var f=u[c];u[c]=16711935&amp;(f&lt;&lt;8|f&gt;&gt;&gt;24)|4278255360&amp;(f&lt;&lt;24|f&gt;&gt;&gt;8)}return a},clone:function(){var e=i.clone.call(this);return e._hash=this._hash.clone(),e}});function c(e,t,n,r,o,i,s){var a=e+(t&amp;n|~t&amp;r)+o+s;return(a&lt;&lt;i|a&gt;&gt;&gt;32-i)+t}function f(e,t,n,r,o,i,s){var a=e+(t&amp;r|n&amp;~r)+o+s;return(a&lt;&lt;i|a&gt;&gt;&gt;32-i)+t}function l(e,t,n,r,o,i,s){var a=e+(t^n^r)+o+s;return(a&lt;&lt;i|a&gt;&gt;&gt;32-i)+t}function h(e,t,n,r,o,i,s){var a=e+(n^(t|~r))+o+s;return(a&lt;&lt;i|a&gt;&gt;&gt;32-i)+t}n.MD5=i._createHelper(u),n.HmacMD5=i._createHmacHelper(u)}(Math),e.MD5}(Ze.exports)}(Ye);var nt=Ye.exports;function rt(e,t){const n=[];return t&gt;0&amp;&amp;n.push(e&gt;&gt;&gt;24),t&gt;1&amp;&amp;n.push(e&gt;&gt;&gt;16&amp;255),t&gt;2&amp;&amp;n.push(e&gt;&gt;&gt;8&amp;255),t&gt;3&amp;&amp;n.push(255&amp;e),n}function ot(e,t){let n=e,r=t;Object.prototype.hasOwnProperty.call(n,\"sigBytes\")&amp;&amp;Object.prototype.hasOwnProperty.call(n,\"words\")&amp;&amp;(r=n.sigBytes,n=n.words);const o=[];let i,s=0;for(;r&gt;0;)i=rt(n[s],Math.min(4,r)),r-=i.length,o.push(i),s++;return[].concat.apply([],o)}function it(e){const t=ot(nt(e));return((t[1]&lt;&lt;8)+t[0])/65535}function st(e){const t=tt.enc.Utf8.parse(e),n=it(t),r=ot(t);r[0]^=1;return{audienceFraction:n,variantFraction:it(function(e){const t=[];for(let n=0;n&lt;e.length;n++)t[n/4|0]|=e[n]&lt;&lt;24-8*n;return tt.lib.WordArray.create(t,e.length)}(r))}}function at(e,t){const n=function(e,t){return e.rules.find((e=&gt;Xe(e.restrictions,t)))||null}(e,t);if(!n)return null;const{audienceFraction:r,variantFraction:o}=st(e.prefix+function(e,t){switch(e.bucketBy){case\"AnonUserId\":return t.anonUserId;default:throw new Error(\"Unexpected bucketBy \",e.bucketBy)}}(e,t));if(n.audienceFraction&lt;r)return null;return function(e,t){if(t&gt;1)throw new Error(`Variant fraction was ${t} but shouldn't be &gt; 1`);let n=0;e.variants.forEach((e=&gt;{n+=e.weight}));let r=0;const o=e.variants.find((e=&gt;(r+=e.weight/n,r&gt;=t)));if(o)return o;throw new Error(\"No matching variant found.\")}(n,o)}class ut{constructor(e){this.featureManagementInstance=e}peekExperiments(){const e=Ve;let t=[];return Object.keys(e).sort().forEach((e=&gt;{const n=e.replace(`${this.featureManagementInstance._keyPrefix}::`,\"\");t=[...t,{key:e,value:this.featureManagementInstance.getValue(n,!1)}]})),t}}const ct=\"boolean\",ft=\"number\",lt=\"string\",ht=\"bool\",pt=\"int\";class dt{constructor(n){__privateAdd(this,t),__privateAdd(this,r),__privateAdd(this,e,void 0);try{__privateSet(this,e,new URL(n))}catch(o){Fe.logWarn(`[FeatureOverride] Invalid URL string '${n}'. Check your settings for the plugin`,{error:o})}}getOverride(i,s){if(!__privateGet(this,e))return null;const a=__privateGet(this,e).searchParams.get(`jet-fm-${i}`);if(!a)return null;try{let e;switch(s){case ht:e=__privateMethod(this,t,n).call(this,a);break;case pt:e=__privateMethod(this,r,o).call(this,a);break;default:e=a}return console.log(`[FeatureOverride] The Feature '${i}' has been overridden with the value '${e}'`),e}catch(u){return console.log(`[FeatureOverride] The Feature '${i}' has an override value '${a}' but cannot be casted to '${s}' [Error: '${u.message}']`),null}}}e=new WeakMap,t=new WeakSet,n=function(e){if(\"true\"===e.toLowerCase())return!0;if(\"false\"===e.toLowerCase())return!1;throw new Error(\"Cast error: Not a boolean\")},r=new WeakSet,o=function(e){const t=Number(e);if(isNaN(t))throw new Error(\"Cast error: Not a number\");return t};const gt=(e,t,n)=&gt;{Fe.logInfo(`${e.name}: ${t} =&gt; ${n}`)};class yt{constructor(e,t){__privateAdd(this,i,void 0),this._keyPrefix=e.keyPrefix,this._onTrack=e.onTrack,this._onUpdated=e.onUpdated,this._cdn=e.cdn,this._httpClient=t,this.getContext=e.contextGetter,this.observer=new ut(this),__privateSet(this,i,e.urlString?new dt(e.urlString):null)}createFullKey(e){return e.includes(\"::\")?e:this._keyPrefix?`${this._keyPrefix}::${e}`:e}getValue(e,t=!0){try{const r=(n=this.createFullKey(e),Ve[n]);if(!r)return null;const o=__privateGet(this,i)?__privateGet(this,i).getOverride(e,r.valueType):null;if(null!==o)return o;const s=this.getContext();if(!s)return Fe.logError(\"Unable to provide feature values as no context was provided. Check your settings for the plugin\"),null;const a=function(e,t){if(!e.evaluationLogic)return null;switch(e.evaluationLogic.type){case\"IdHash\":return at(e.evaluationLogic.detail,t);default:return null}}(r,s);if(a)return t&amp;&amp;a.experimentKey&amp;&amp;a.experimentVariant&amp;&amp;function(e,t){if(!e.experimentKey||!e.experimentVariant)return;const n=e.experimentKey,r=e.experimentVariant;if(\"function\"==typeof t){Fe.logInfo(`Tracking experiment - key: ${n}, variant: ${r}`);try{t(n,r)}catch(o){Fe.logError(\"An exception occurred while trying to send an experiment event\",{error:o})}}else Fe.logWarn(`Experiment will not be tracked as no \\`onTrack\\` callback was provided (key: ${n}, variant: ${r})`)}(a,this._onTrack),a.value;return function(e,t){const n=e.defaultValueRules.find((e=&gt;Xe(e.restrictions,t)));return n?n.value:null}(r,s)}catch(r){return Fe.logError(r.message,{error:r}),null}var n}getBooleanValue(e){const t=this.getValue(e);return typeof t===ct?(gt(this.getBooleanValue,e,t),t):null}getIntegerValue(e){const t=this.getValue(e);return typeof t===ft?(gt(this.getIntegerValue,e,t),t):null}getStringValue(e){const t=this.getValue(e);return typeof t===lt?(gt(this.getStringValue,e,t),t):null}loadFromCdn(){if(this._cdn)return function(e,t){return __async(this,arguments,(function*(e,t,n=Me.create()){const r=e.key?`-${e.key}`:\"\",o=`${e.host||\"https://features.api.justeattakeaway.com\"}/config/v1/${e.scope}/${e.environment}${r}`;function i(){return __async(this,null,(function*(){const e=yield n.get(o);return He(e.data,t),e.data}))}const s=yield i();return clearInterval(De),e.poll&amp;&amp;(De=setInterval((()=&gt;__async(this,null,(function*(){yield i()}))),e.pollInterval||3e4)),s}))}(this._cdn,this._onUpdated,this._httpClient);throw new Error(\"Must provide CDN settings for CDN load to work correctly\")}updateConfig(e){He(e)}}i=new WeakMap;let mt=null;function vt(e,t){return mt&amp;&amp;!0!==e.reinitialise||(e.logger&amp;&amp;(n=e.logger,Object.assign(Fe,n)),e.initialConfigAsJson&amp;&amp;He(e.initialConfigAsJson),e.contextGetter||(e.contextGetter=ze),mt=new yt(e,t)),mt;var n}return function(e,t){return vt(e,t)}}));\n","/*! For license information please see index.js.LICENSE */\n!function(root,factory){if(\"object\"==typeof exports&amp;&amp;\"object\"==typeof module)module.exports=factory();else if(\"function\"==typeof define&amp;&amp;define.amd)define([],factory);else{var a=factory();for(var i in a)(\"object\"==typeof exports?exports:root)[i]=a[i]}}(window,(function(){return function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}return __webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){\"undefined\"!=typeof Symbol&amp;&amp;Symbol.toStringTag&amp;&amp;Object.defineProperty(exports,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(exports,\"__esModule\",{value:!0})},__webpack_require__.t=function(value,mode){if(1&amp;mode&amp;&amp;(value=__webpack_require__(value)),8&amp;mode)return value;if(4&amp;mode&amp;&amp;\"object\"==typeof value&amp;&amp;value&amp;&amp;value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,\"default\",{enumerable:!0,value:value}),2&amp;mode&amp;&amp;\"string\"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&amp;&amp;module.__esModule?function(){return module.default}:function(){return module};return __webpack_require__.d(getter,\"a\",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p=\"\",__webpack_require__(__webpack_require__.s=187)}([function(module,exports,__webpack_require__){(function(module){module.exports=function(){\"use strict\";var hookCallback,some;function hooks(){return hookCallback.apply(null,arguments)}function isArray(input){return input instanceof Array||\"[object Array]\"===Object.prototype.toString.call(input)}function isObject(input){return null!=input&amp;&amp;\"[object Object]\"===Object.prototype.toString.call(input)}function hasOwnProp(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function isObjectEmpty(obj){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(obj).length;var k;for(k in obj)if(hasOwnProp(obj,k))return!1;return!0}function isUndefined(input){return void 0===input}function isNumber(input){return\"number\"==typeof input||\"[object Number]\"===Object.prototype.toString.call(input)}function isDate(input){return input instanceof Date||\"[object Date]\"===Object.prototype.toString.call(input)}function map(arr,fn){var i,res=[];for(i=0;i&lt;arr.length;++i)res.push(fn(arr[i],i));return res}function extend(a,b){for(var i in b)hasOwnProp(b,i)&amp;&amp;(a[i]=b[i]);return hasOwnProp(b,\"toString\")&amp;&amp;(a.toString=b.toString),hasOwnProp(b,\"valueOf\")&amp;&amp;(a.valueOf=b.valueOf),a}function createUTC(input,format,locale,strict){return createLocalOrUTC(input,format,locale,strict,!0).utc()}function getParsingFlags(m){return null==m._pf&amp;&amp;(m._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),m._pf}function isValid(m){if(null==m._isValid){var flags=getParsingFlags(m),parsedParts=some.call(flags.parsedDateParts,(function(i){return null!=i})),isNowValid=!isNaN(m._d.getTime())&amp;&amp;flags.overflow&lt;0&amp;&amp;!flags.empty&amp;&amp;!flags.invalidEra&amp;&amp;!flags.invalidMonth&amp;&amp;!flags.invalidWeekday&amp;&amp;!flags.weekdayMismatch&amp;&amp;!flags.nullInput&amp;&amp;!flags.invalidFormat&amp;&amp;!flags.userInvalidated&amp;&amp;(!flags.meridiem||flags.meridiem&amp;&amp;parsedParts);if(m._strict&amp;&amp;(isNowValid=isNowValid&amp;&amp;0===flags.charsLeftOver&amp;&amp;0===flags.unusedTokens.length&amp;&amp;void 0===flags.bigHour),null!=Object.isFrozen&amp;&amp;Object.isFrozen(m))return isNowValid;m._isValid=isNowValid}return m._isValid}function createInvalid(flags){var m=createUTC(NaN);return null!=flags?extend(getParsingFlags(m),flags):getParsingFlags(m).userInvalidated=!0,m}some=Array.prototype.some?Array.prototype.some:function(fun){var i,t=Object(this),len=t.length&gt;&gt;&gt;0;for(i=0;i&lt;len;i++)if(i in t&amp;&amp;fun.call(this,t[i],i,t))return!0;return!1};var momentProperties=hooks.momentProperties=[],updateInProgress=!1;function copyConfig(to,from){var i,prop,val;if(isUndefined(from._isAMomentObject)||(to._isAMomentObject=from._isAMomentObject),isUndefined(from._i)||(to._i=from._i),isUndefined(from._f)||(to._f=from._f),isUndefined(from._l)||(to._l=from._l),isUndefined(from._strict)||(to._strict=from._strict),isUndefined(from._tzm)||(to._tzm=from._tzm),isUndefined(from._isUTC)||(to._isUTC=from._isUTC),isUndefined(from._offset)||(to._offset=from._offset),isUndefined(from._pf)||(to._pf=getParsingFlags(from)),isUndefined(from._locale)||(to._locale=from._locale),momentProperties.length&gt;0)for(i=0;i&lt;momentProperties.length;i++)isUndefined(val=from[prop=momentProperties[i]])||(to[prop]=val);return to}function Moment(config){copyConfig(this,config),this._d=new Date(null!=config._d?config._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===updateInProgress&amp;&amp;(updateInProgress=!0,hooks.updateOffset(this),updateInProgress=!1)}function isMoment(obj){return obj instanceof Moment||null!=obj&amp;&amp;null!=obj._isAMomentObject}function warn(msg){!1===hooks.suppressDeprecationWarnings&amp;&amp;\"undefined\"!=typeof console&amp;&amp;console.warn&amp;&amp;console.warn(\"Deprecation warning: \"+msg)}function deprecate(msg,fn){var firstTime=!0;return extend((function(){if(null!=hooks.deprecationHandler&amp;&amp;hooks.deprecationHandler(null,msg),firstTime){var arg,i,key,args=[];for(i=0;i&lt;arguments.length;i++){if(arg=\"\",\"object\"==typeof arguments[i]){for(key in arg+=\"\\n[\"+i+\"] \",arguments[0])hasOwnProp(arguments[0],key)&amp;&amp;(arg+=key+\": \"+arguments[0][key]+\", \");arg=arg.slice(0,-2)}else arg=arguments[i];args.push(arg)}warn(msg+\"\\nArguments: \"+Array.prototype.slice.call(args).join(\"\")+\"\\n\"+(new Error).stack),firstTime=!1}return fn.apply(this,arguments)}),fn)}var keys,deprecations={};function deprecateSimple(name,msg){null!=hooks.deprecationHandler&amp;&amp;hooks.deprecationHandler(name,msg),deprecations[name]||(warn(msg),deprecations[name]=!0)}function isFunction(input){return\"undefined\"!=typeof Function&amp;&amp;input instanceof Function||\"[object Function]\"===Object.prototype.toString.call(input)}function mergeConfigs(parentConfig,childConfig){var prop,res=extend({},parentConfig);for(prop in childConfig)hasOwnProp(childConfig,prop)&amp;&amp;(isObject(parentConfig[prop])&amp;&amp;isObject(childConfig[prop])?(res[prop]={},extend(res[prop],parentConfig[prop]),extend(res[prop],childConfig[prop])):null!=childConfig[prop]?res[prop]=childConfig[prop]:delete res[prop]);for(prop in parentConfig)hasOwnProp(parentConfig,prop)&amp;&amp;!hasOwnProp(childConfig,prop)&amp;&amp;isObject(parentConfig[prop])&amp;&amp;(res[prop]=extend({},res[prop]));return res}function Locale(config){null!=config&amp;&amp;this.set(config)}function zeroFill(number,targetLength,forceSign){var absNumber=\"\"+Math.abs(number),zerosToFill=targetLength-absNumber.length;return(number&gt;=0?forceSign?\"+\":\"\":\"-\")+Math.pow(10,Math.max(0,zerosToFill)).toString().substr(1)+absNumber}hooks.suppressDeprecationWarnings=!1,hooks.deprecationHandler=null,keys=Object.keys?Object.keys:function(obj){var i,res=[];for(i in obj)hasOwnProp(obj,i)&amp;&amp;res.push(i);return res};var formattingTokens=/(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,localFormattingTokens=/(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,formatFunctions={},formatTokenFunctions={};function addFormatToken(token,padded,ordinal,callback){var func=callback;\"string\"==typeof callback&amp;&amp;(func=function(){return this[callback]()}),token&amp;&amp;(formatTokenFunctions[token]=func),padded&amp;&amp;(formatTokenFunctions[padded[0]]=function(){return zeroFill(func.apply(this,arguments),padded[1],padded[2])}),ordinal&amp;&amp;(formatTokenFunctions[ordinal]=function(){return this.localeData().ordinal(func.apply(this,arguments),token)})}function formatMoment(m,format){return m.isValid()?(format=expandFormat(format,m.localeData()),formatFunctions[format]=formatFunctions[format]||function(format){var i,length,input,array=format.match(formattingTokens);for(i=0,length=array.length;i&lt;length;i++)formatTokenFunctions[array[i]]?array[i]=formatTokenFunctions[array[i]]:array[i]=(input=array[i]).match(/\\[[\\s\\S]/)?input.replace(/^\\[|\\]$/g,\"\"):input.replace(/\\\\/g,\"\");return function(mom){var i,output=\"\";for(i=0;i&lt;length;i++)output+=isFunction(array[i])?array[i].call(mom,format):array[i];return output}}(format),formatFunctions[format](m)):m.localeData().invalidDate()}function expandFormat(format,locale){var i=5;function replaceLongDateFormatTokens(input){return locale.longDateFormat(input)||input}for(localFormattingTokens.lastIndex=0;i&gt;=0&amp;&amp;localFormattingTokens.test(format);)format=format.replace(localFormattingTokens,replaceLongDateFormatTokens),localFormattingTokens.lastIndex=0,i-=1;return format}var aliases={};function addUnitAlias(unit,shorthand){var lowerCase=unit.toLowerCase();aliases[lowerCase]=aliases[lowerCase+\"s\"]=aliases[shorthand]=unit}function normalizeUnits(units){return\"string\"==typeof units?aliases[units]||aliases[units.toLowerCase()]:void 0}function normalizeObjectUnits(inputObject){var normalizedProp,prop,normalizedInput={};for(prop in inputObject)hasOwnProp(inputObject,prop)&amp;&amp;(normalizedProp=normalizeUnits(prop))&amp;&amp;(normalizedInput[normalizedProp]=inputObject[prop]);return normalizedInput}var priorities={};function addUnitPriority(unit,priority){priorities[unit]=priority}function isLeapYear(year){return year%4==0&amp;&amp;year%100!=0||year%400==0}function absFloor(number){return number&lt;0?Math.ceil(number)||0:Math.floor(number)}function toInt(argumentForCoercion){var coercedNumber=+argumentForCoercion,value=0;return 0!==coercedNumber&amp;&amp;isFinite(coercedNumber)&amp;&amp;(value=absFloor(coercedNumber)),value}function makeGetSet(unit,keepTime){return function(value){return null!=value?(set$1(this,unit,value),hooks.updateOffset(this,keepTime),this):get(this,unit)}}function get(mom,unit){return mom.isValid()?mom._d[\"get\"+(mom._isUTC?\"UTC\":\"\")+unit]():NaN}function set$1(mom,unit,value){mom.isValid()&amp;&amp;!isNaN(value)&amp;&amp;(\"FullYear\"===unit&amp;&amp;isLeapYear(mom.year())&amp;&amp;1===mom.month()&amp;&amp;29===mom.date()?(value=toInt(value),mom._d[\"set\"+(mom._isUTC?\"UTC\":\"\")+unit](value,mom.month(),daysInMonth(value,mom.month()))):mom._d[\"set\"+(mom._isUTC?\"UTC\":\"\")+unit](value))}var regexes,match1=/\\d/,match2=/\\d\\d/,match3=/\\d{3}/,match4=/\\d{4}/,match6=/[+-]?\\d{6}/,match1to2=/\\d\\d?/,match3to4=/\\d\\d\\d\\d?/,match5to6=/\\d\\d\\d\\d\\d\\d?/,match1to3=/\\d{1,3}/,match1to4=/\\d{1,4}/,match1to6=/[+-]?\\d{1,6}/,matchUnsigned=/\\d+/,matchSigned=/[+-]?\\d+/,matchOffset=/Z|[+-]\\d\\d:?\\d\\d/gi,matchShortOffset=/Z|[+-]\\d\\d(?::?\\d\\d)?/gi,matchWord=/[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;function addRegexToken(token,regex,strictRegex){regexes[token]=isFunction(regex)?regex:function(isStrict,localeData){return isStrict&amp;&amp;strictRegex?strictRegex:regex}}function getParseRegexForToken(token,config){return hasOwnProp(regexes,token)?regexes[token](config._strict,config._locale):new RegExp(regexEscape(token.replace(\"\\\\\",\"\").replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,(function(matched,p1,p2,p3,p4){return p1||p2||p3||p4}))))}function regexEscape(s){return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&amp;\")}regexes={};var indexOf,tokens={};function addParseToken(token,callback){var i,func=callback;for(\"string\"==typeof token&amp;&amp;(token=[token]),isNumber(callback)&amp;&amp;(func=function(input,array){array[callback]=toInt(input)}),i=0;i&lt;token.length;i++)tokens[token[i]]=func}function addWeekParseToken(token,callback){addParseToken(token,(function(input,array,config,token){config._w=config._w||{},callback(input,config._w,config,token)}))}function addTimeToArrayFromToken(token,input,config){null!=input&amp;&amp;hasOwnProp(tokens,token)&amp;&amp;tokens[token](input,config._a,config,token)}function daysInMonth(year,month){if(isNaN(year)||isNaN(month))return NaN;var x,modMonth=(month%(x=12)+x)%x;return year+=(month-modMonth)/12,1===modMonth?isLeapYear(year)?29:28:31-modMonth%7%2}indexOf=Array.prototype.indexOf?Array.prototype.indexOf:function(o){var i;for(i=0;i&lt;this.length;++i)if(this[i]===o)return i;return-1},addFormatToken(\"M\",[\"MM\",2],\"Mo\",(function(){return this.month()+1})),addFormatToken(\"MMM\",0,0,(function(format){return this.localeData().monthsShort(this,format)})),addFormatToken(\"MMMM\",0,0,(function(format){return this.localeData().months(this,format)})),addUnitAlias(\"month\",\"M\"),addUnitPriority(\"month\",8),addRegexToken(\"M\",match1to2),addRegexToken(\"MM\",match1to2,match2),addRegexToken(\"MMM\",(function(isStrict,locale){return locale.monthsShortRegex(isStrict)})),addRegexToken(\"MMMM\",(function(isStrict,locale){return locale.monthsRegex(isStrict)})),addParseToken([\"M\",\"MM\"],(function(input,array){array[1]=toInt(input)-1})),addParseToken([\"MMM\",\"MMMM\"],(function(input,array,config,token){var month=config._locale.monthsParse(input,token,config._strict);null!=month?array[1]=month:getParsingFlags(config).invalidMonth=input}));var defaultLocaleMonths=\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),defaultLocaleMonthsShort=\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),MONTHS_IN_FORMAT=/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,defaultMonthsShortRegex=matchWord,defaultMonthsRegex=matchWord;function handleStrictParse(monthName,format,strict){var i,ii,mom,llc=monthName.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],i=0;i&lt;12;++i)mom=createUTC([2e3,i]),this._shortMonthsParse[i]=this.monthsShort(mom,\"\").toLocaleLowerCase(),this._longMonthsParse[i]=this.months(mom,\"\").toLocaleLowerCase();return strict?\"MMM\"===format?-1!==(ii=indexOf.call(this._shortMonthsParse,llc))?ii:null:-1!==(ii=indexOf.call(this._longMonthsParse,llc))?ii:null:\"MMM\"===format?-1!==(ii=indexOf.call(this._shortMonthsParse,llc))?ii:-1!==(ii=indexOf.call(this._longMonthsParse,llc))?ii:null:-1!==(ii=indexOf.call(this._longMonthsParse,llc))?ii:-1!==(ii=indexOf.call(this._shortMonthsParse,llc))?ii:null}function setMonth(mom,value){var dayOfMonth;if(!mom.isValid())return mom;if(\"string\"==typeof value)if(/^\\d+$/.test(value))value=toInt(value);else if(!isNumber(value=mom.localeData().monthsParse(value)))return mom;return dayOfMonth=Math.min(mom.date(),daysInMonth(mom.year(),value)),mom._d[\"set\"+(mom._isUTC?\"UTC\":\"\")+\"Month\"](value,dayOfMonth),mom}function getSetMonth(value){return null!=value?(setMonth(this,value),hooks.updateOffset(this,!0),this):get(this,\"Month\")}function computeMonthsParse(){function cmpLenRev(a,b){return b.length-a.length}var i,mom,shortPieces=[],longPieces=[],mixedPieces=[];for(i=0;i&lt;12;i++)mom=createUTC([2e3,i]),shortPieces.push(this.monthsShort(mom,\"\")),longPieces.push(this.months(mom,\"\")),mixedPieces.push(this.months(mom,\"\")),mixedPieces.push(this.monthsShort(mom,\"\"));for(shortPieces.sort(cmpLenRev),longPieces.sort(cmpLenRev),mixedPieces.sort(cmpLenRev),i=0;i&lt;12;i++)shortPieces[i]=regexEscape(shortPieces[i]),longPieces[i]=regexEscape(longPieces[i]);for(i=0;i&lt;24;i++)mixedPieces[i]=regexEscape(mixedPieces[i]);this._monthsRegex=new RegExp(\"^(\"+mixedPieces.join(\"|\")+\")\",\"i\"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp(\"^(\"+longPieces.join(\"|\")+\")\",\"i\"),this._monthsShortStrictRegex=new RegExp(\"^(\"+shortPieces.join(\"|\")+\")\",\"i\")}function daysInYear(year){return isLeapYear(year)?366:365}addFormatToken(\"Y\",0,0,(function(){var y=this.year();return y&lt;=9999?zeroFill(y,4):\"+\"+y})),addFormatToken(0,[\"YY\",2],0,(function(){return this.year()%100})),addFormatToken(0,[\"YYYY\",4],0,\"year\"),addFormatToken(0,[\"YYYYY\",5],0,\"year\"),addFormatToken(0,[\"YYYYYY\",6,!0],0,\"year\"),addUnitAlias(\"year\",\"y\"),addUnitPriority(\"year\",1),addRegexToken(\"Y\",matchSigned),addRegexToken(\"YY\",match1to2,match2),addRegexToken(\"YYYY\",match1to4,match4),addRegexToken(\"YYYYY\",match1to6,match6),addRegexToken(\"YYYYYY\",match1to6,match6),addParseToken([\"YYYYY\",\"YYYYYY\"],0),addParseToken(\"YYYY\",(function(input,array){array[0]=2===input.length?hooks.parseTwoDigitYear(input):toInt(input)})),addParseToken(\"YY\",(function(input,array){array[0]=hooks.parseTwoDigitYear(input)})),addParseToken(\"Y\",(function(input,array){array[0]=parseInt(input,10)})),hooks.parseTwoDigitYear=function(input){return toInt(input)+(toInt(input)&gt;68?1900:2e3)};var getSetYear=makeGetSet(\"FullYear\",!0);function createDate(y,m,d,h,M,s,ms){var date;return y&lt;100&amp;&amp;y&gt;=0?(date=new Date(y+400,m,d,h,M,s,ms),isFinite(date.getFullYear())&amp;&amp;date.setFullYear(y)):date=new Date(y,m,d,h,M,s,ms),date}function createUTCDate(y){var date,args;return y&lt;100&amp;&amp;y&gt;=0?((args=Array.prototype.slice.call(arguments))[0]=y+400,date=new Date(Date.UTC.apply(null,args)),isFinite(date.getUTCFullYear())&amp;&amp;date.setUTCFullYear(y)):date=new Date(Date.UTC.apply(null,arguments)),date}function firstWeekOffset(year,dow,doy){var fwd=7+dow-doy;return-(7+createUTCDate(year,0,fwd).getUTCDay()-dow)%7+fwd-1}function dayOfYearFromWeeks(year,week,weekday,dow,doy){var resYear,resDayOfYear,dayOfYear=1+7*(week-1)+(7+weekday-dow)%7+firstWeekOffset(year,dow,doy);return dayOfYear&lt;=0?resDayOfYear=daysInYear(resYear=year-1)+dayOfYear:dayOfYear&gt;daysInYear(year)?(resYear=year+1,resDayOfYear=dayOfYear-daysInYear(year)):(resYear=year,resDayOfYear=dayOfYear),{year:resYear,dayOfYear:resDayOfYear}}function weekOfYear(mom,dow,doy){var resWeek,resYear,weekOffset=firstWeekOffset(mom.year(),dow,doy),week=Math.floor((mom.dayOfYear()-weekOffset-1)/7)+1;return week&lt;1?resWeek=week+weeksInYear(resYear=mom.year()-1,dow,doy):week&gt;weeksInYear(mom.year(),dow,doy)?(resWeek=week-weeksInYear(mom.year(),dow,doy),resYear=mom.year()+1):(resYear=mom.year(),resWeek=week),{week:resWeek,year:resYear}}function weeksInYear(year,dow,doy){var weekOffset=firstWeekOffset(year,dow,doy),weekOffsetNext=firstWeekOffset(year+1,dow,doy);return(daysInYear(year)-weekOffset+weekOffsetNext)/7}function shiftWeekdays(ws,n){return ws.slice(n,7).concat(ws.slice(0,n))}addFormatToken(\"w\",[\"ww\",2],\"wo\",\"week\"),addFormatToken(\"W\",[\"WW\",2],\"Wo\",\"isoWeek\"),addUnitAlias(\"week\",\"w\"),addUnitAlias(\"isoWeek\",\"W\"),addUnitPriority(\"week\",5),addUnitPriority(\"isoWeek\",5),addRegexToken(\"w\",match1to2),addRegexToken(\"ww\",match1to2,match2),addRegexToken(\"W\",match1to2),addRegexToken(\"WW\",match1to2,match2),addWeekParseToken([\"w\",\"ww\",\"W\",\"WW\"],(function(input,week,config,token){week[token.substr(0,1)]=toInt(input)})),addFormatToken(\"d\",0,\"do\",\"day\"),addFormatToken(\"dd\",0,0,(function(format){return this.localeData().weekdaysMin(this,format)})),addFormatToken(\"ddd\",0,0,(function(format){return this.localeData().weekdaysShort(this,format)})),addFormatToken(\"dddd\",0,0,(function(format){return this.localeData().weekdays(this,format)})),addFormatToken(\"e\",0,0,\"weekday\"),addFormatToken(\"E\",0,0,\"isoWeekday\"),addUnitAlias(\"day\",\"d\"),addUnitAlias(\"weekday\",\"e\"),addUnitAlias(\"isoWeekday\",\"E\"),addUnitPriority(\"day\",11),addUnitPriority(\"weekday\",11),addUnitPriority(\"isoWeekday\",11),addRegexToken(\"d\",match1to2),addRegexToken(\"e\",match1to2),addRegexToken(\"E\",match1to2),addRegexToken(\"dd\",(function(isStrict,locale){return locale.weekdaysMinRegex(isStrict)})),addRegexToken(\"ddd\",(function(isStrict,locale){return locale.weekdaysShortRegex(isStrict)})),addRegexToken(\"dddd\",(function(isStrict,locale){return locale.weekdaysRegex(isStrict)})),addWeekParseToken([\"dd\",\"ddd\",\"dddd\"],(function(input,week,config,token){var weekday=config._locale.weekdaysParse(input,token,config._strict);null!=weekday?week.d=weekday:getParsingFlags(config).invalidWeekday=input})),addWeekParseToken([\"d\",\"e\",\"E\"],(function(input,week,config,token){week[token]=toInt(input)}));var defaultLocaleWeekdays=\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),defaultLocaleWeekdaysShort=\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),defaultLocaleWeekdaysMin=\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),defaultWeekdaysRegex=matchWord,defaultWeekdaysShortRegex=matchWord,defaultWeekdaysMinRegex=matchWord;function handleStrictParse$1(weekdayName,format,strict){var i,ii,mom,llc=weekdayName.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],i=0;i&lt;7;++i)mom=createUTC([2e3,1]).day(i),this._minWeekdaysParse[i]=this.weekdaysMin(mom,\"\").toLocaleLowerCase(),this._shortWeekdaysParse[i]=this.weekdaysShort(mom,\"\").toLocaleLowerCase(),this._weekdaysParse[i]=this.weekdays(mom,\"\").toLocaleLowerCase();return strict?\"dddd\"===format?-1!==(ii=indexOf.call(this._weekdaysParse,llc))?ii:null:\"ddd\"===format?-1!==(ii=indexOf.call(this._shortWeekdaysParse,llc))?ii:null:-1!==(ii=indexOf.call(this._minWeekdaysParse,llc))?ii:null:\"dddd\"===format?-1!==(ii=indexOf.call(this._weekdaysParse,llc))?ii:-1!==(ii=indexOf.call(this._shortWeekdaysParse,llc))?ii:-1!==(ii=indexOf.call(this._minWeekdaysParse,llc))?ii:null:\"ddd\"===format?-1!==(ii=indexOf.call(this._shortWeekdaysParse,llc))?ii:-1!==(ii=indexOf.call(this._weekdaysParse,llc))?ii:-1!==(ii=indexOf.call(this._minWeekdaysParse,llc))?ii:null:-1!==(ii=indexOf.call(this._minWeekdaysParse,llc))?ii:-1!==(ii=indexOf.call(this._weekdaysParse,llc))?ii:-1!==(ii=indexOf.call(this._shortWeekdaysParse,llc))?ii:null}function computeWeekdaysParse(){function cmpLenRev(a,b){return b.length-a.length}var i,mom,minp,shortp,longp,minPieces=[],shortPieces=[],longPieces=[],mixedPieces=[];for(i=0;i&lt;7;i++)mom=createUTC([2e3,1]).day(i),minp=regexEscape(this.weekdaysMin(mom,\"\")),shortp=regexEscape(this.weekdaysShort(mom,\"\")),longp=regexEscape(this.weekdays(mom,\"\")),minPieces.push(minp),shortPieces.push(shortp),longPieces.push(longp),mixedPieces.push(minp),mixedPieces.push(shortp),mixedPieces.push(longp);minPieces.sort(cmpLenRev),shortPieces.sort(cmpLenRev),longPieces.sort(cmpLenRev),mixedPieces.sort(cmpLenRev),this._weekdaysRegex=new RegExp(\"^(\"+mixedPieces.join(\"|\")+\")\",\"i\"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp(\"^(\"+longPieces.join(\"|\")+\")\",\"i\"),this._weekdaysShortStrictRegex=new RegExp(\"^(\"+shortPieces.join(\"|\")+\")\",\"i\"),this._weekdaysMinStrictRegex=new RegExp(\"^(\"+minPieces.join(\"|\")+\")\",\"i\")}function hFormat(){return this.hours()%12||12}function meridiem(token,lowercase){addFormatToken(token,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),lowercase)}))}function matchMeridiem(isStrict,locale){return locale._meridiemParse}addFormatToken(\"H\",[\"HH\",2],0,\"hour\"),addFormatToken(\"h\",[\"hh\",2],0,hFormat),addFormatToken(\"k\",[\"kk\",2],0,(function(){return this.hours()||24})),addFormatToken(\"hmm\",0,0,(function(){return\"\"+hFormat.apply(this)+zeroFill(this.minutes(),2)})),addFormatToken(\"hmmss\",0,0,(function(){return\"\"+hFormat.apply(this)+zeroFill(this.minutes(),2)+zeroFill(this.seconds(),2)})),addFormatToken(\"Hmm\",0,0,(function(){return\"\"+this.hours()+zeroFill(this.minutes(),2)})),addFormatToken(\"Hmmss\",0,0,(function(){return\"\"+this.hours()+zeroFill(this.minutes(),2)+zeroFill(this.seconds(),2)})),meridiem(\"a\",!0),meridiem(\"A\",!1),addUnitAlias(\"hour\",\"h\"),addUnitPriority(\"hour\",13),addRegexToken(\"a\",matchMeridiem),addRegexToken(\"A\",matchMeridiem),addRegexToken(\"H\",match1to2),addRegexToken(\"h\",match1to2),addRegexToken(\"k\",match1to2),addRegexToken(\"HH\",match1to2,match2),addRegexToken(\"hh\",match1to2,match2),addRegexToken(\"kk\",match1to2,match2),addRegexToken(\"hmm\",match3to4),addRegexToken(\"hmmss\",match5to6),addRegexToken(\"Hmm\",match3to4),addRegexToken(\"Hmmss\",match5to6),addParseToken([\"H\",\"HH\"],3),addParseToken([\"k\",\"kk\"],(function(input,array,config){var kInput=toInt(input);array[3]=24===kInput?0:kInput})),addParseToken([\"a\",\"A\"],(function(input,array,config){config._isPm=config._locale.isPM(input),config._meridiem=input})),addParseToken([\"h\",\"hh\"],(function(input,array,config){array[3]=toInt(input),getParsingFlags(config).bigHour=!0})),addParseToken(\"hmm\",(function(input,array,config){var pos=input.length-2;array[3]=toInt(input.substr(0,pos)),array[4]=toInt(input.substr(pos)),getParsingFlags(config).bigHour=!0})),addParseToken(\"hmmss\",(function(input,array,config){var pos1=input.length-4,pos2=input.length-2;array[3]=toInt(input.substr(0,pos1)),array[4]=toInt(input.substr(pos1,2)),array[5]=toInt(input.substr(pos2)),getParsingFlags(config).bigHour=!0})),addParseToken(\"Hmm\",(function(input,array,config){var pos=input.length-2;array[3]=toInt(input.substr(0,pos)),array[4]=toInt(input.substr(pos))})),addParseToken(\"Hmmss\",(function(input,array,config){var pos1=input.length-4,pos2=input.length-2;array[3]=toInt(input.substr(0,pos1)),array[4]=toInt(input.substr(pos1,2)),array[5]=toInt(input.substr(pos2))}));var globalLocale,getSetHour=makeGetSet(\"Hours\",!0),baseConfig={calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},longDateFormat:{LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},invalidDate:\"Invalid date\",ordinal:\"%d\",dayOfMonthOrdinalParse:/\\d{1,2}/,relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",w:\"a week\",ww:\"%d weeks\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},months:defaultLocaleMonths,monthsShort:defaultLocaleMonthsShort,week:{dow:0,doy:6},weekdays:defaultLocaleWeekdays,weekdaysMin:defaultLocaleWeekdaysMin,weekdaysShort:defaultLocaleWeekdaysShort,meridiemParse:/[ap]\\.?m?\\.?/i},locales={},localeFamilies={};function commonPrefix(arr1,arr2){var i,minl=Math.min(arr1.length,arr2.length);for(i=0;i&lt;minl;i+=1)if(arr1[i]!==arr2[i])return i;return minl}function normalizeLocale(key){return key?key.toLowerCase().replace(\"_\",\"-\"):key}function loadLocale(name){var oldLocale=null;if(void 0===locales[name]&amp;&amp;void 0!==module&amp;&amp;module&amp;&amp;module.exports)try{oldLocale=globalLocale._abbr,__webpack_require__(157)(\"./\"+name),getSetGlobalLocale(oldLocale)}catch(e){locales[name]=null}return locales[name]}function getSetGlobalLocale(key,values){var data;return key&amp;&amp;((data=isUndefined(values)?getLocale(key):defineLocale(key,values))?globalLocale=data:\"undefined\"!=typeof console&amp;&amp;console.warn&amp;&amp;console.warn(\"Locale \"+key+\" not found. Did you forget to load it?\")),globalLocale._abbr}function defineLocale(name,config){if(null!==config){var locale,parentConfig=baseConfig;if(config.abbr=name,null!=locales[name])deprecateSimple(\"defineLocaleOverride\",\"use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info.\"),parentConfig=locales[name]._config;else if(null!=config.parentLocale)if(null!=locales[config.parentLocale])parentConfig=locales[config.parentLocale]._config;else{if(null==(locale=loadLocale(config.parentLocale)))return localeFamilies[config.parentLocale]||(localeFamilies[config.parentLocale]=[]),localeFamilies[config.parentLocale].push({name:name,config:config}),null;parentConfig=locale._config}return locales[name]=new Locale(mergeConfigs(parentConfig,config)),localeFamilies[name]&amp;&amp;localeFamilies[name].forEach((function(x){defineLocale(x.name,x.config)})),getSetGlobalLocale(name),locales[name]}return delete locales[name],null}function getLocale(key){var locale;if(key&amp;&amp;key._locale&amp;&amp;key._locale._abbr&amp;&amp;(key=key._locale._abbr),!key)return globalLocale;if(!isArray(key)){if(locale=loadLocale(key))return locale;key=[key]}return function(names){for(var j,next,locale,split,i=0;i&lt;names.length;){for(j=(split=normalizeLocale(names[i]).split(\"-\")).length,next=(next=normalizeLocale(names[i+1]))?next.split(\"-\"):null;j&gt;0;){if(locale=loadLocale(split.slice(0,j).join(\"-\")))return locale;if(next&amp;&amp;next.length&gt;=j&amp;&amp;commonPrefix(split,next)&gt;=j-1)break;j--}i++}return globalLocale}(key)}function checkOverflow(m){var overflow,a=m._a;return a&amp;&amp;-2===getParsingFlags(m).overflow&amp;&amp;(overflow=a[1]&lt;0||a[1]&gt;11?1:a[2]&lt;1||a[2]&gt;daysInMonth(a[0],a[1])?2:a[3]&lt;0||a[3]&gt;24||24===a[3]&amp;&amp;(0!==a[4]||0!==a[5]||0!==a[6])?3:a[4]&lt;0||a[4]&gt;59?4:a[5]&lt;0||a[5]&gt;59?5:a[6]&lt;0||a[6]&gt;999?6:-1,getParsingFlags(m)._overflowDayOfYear&amp;&amp;(overflow&lt;0||overflow&gt;2)&amp;&amp;(overflow=2),getParsingFlags(m)._overflowWeeks&amp;&amp;-1===overflow&amp;&amp;(overflow=7),getParsingFlags(m)._overflowWeekday&amp;&amp;-1===overflow&amp;&amp;(overflow=8),getParsingFlags(m).overflow=overflow),m}var extendedIsoRegex=/^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,basicIsoRegex=/^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,tzRegex=/Z|[+-]\\d\\d(?::?\\d\\d)?/,isoDates=[[\"YYYYYY-MM-DD\",/[+-]\\d{6}-\\d\\d-\\d\\d/],[\"YYYY-MM-DD\",/\\d{4}-\\d\\d-\\d\\d/],[\"GGGG-[W]WW-E\",/\\d{4}-W\\d\\d-\\d/],[\"GGGG-[W]WW\",/\\d{4}-W\\d\\d/,!1],[\"YYYY-DDD\",/\\d{4}-\\d{3}/],[\"YYYY-MM\",/\\d{4}-\\d\\d/,!1],[\"YYYYYYMMDD\",/[+-]\\d{10}/],[\"YYYYMMDD\",/\\d{8}/],[\"GGGG[W]WWE\",/\\d{4}W\\d{3}/],[\"GGGG[W]WW\",/\\d{4}W\\d{2}/,!1],[\"YYYYDDD\",/\\d{7}/],[\"YYYYMM\",/\\d{6}/,!1],[\"YYYY\",/\\d{4}/,!1]],isoTimes=[[\"HH:mm:ss.SSSS\",/\\d\\d:\\d\\d:\\d\\d\\.\\d+/],[\"HH:mm:ss,SSSS\",/\\d\\d:\\d\\d:\\d\\d,\\d+/],[\"HH:mm:ss\",/\\d\\d:\\d\\d:\\d\\d/],[\"HH:mm\",/\\d\\d:\\d\\d/],[\"HHmmss.SSSS\",/\\d\\d\\d\\d\\d\\d\\.\\d+/],[\"HHmmss,SSSS\",/\\d\\d\\d\\d\\d\\d,\\d+/],[\"HHmmss\",/\\d\\d\\d\\d\\d\\d/],[\"HHmm\",/\\d\\d\\d\\d/],[\"HH\",/\\d\\d/]],aspNetJsonRegex=/^\\/?Date\\((-?\\d+)/i,rfc2822=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,obsOffsets={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function configFromISO(config){var i,l,allowTime,dateFormat,timeFormat,tzFormat,string=config._i,match=extendedIsoRegex.exec(string)||basicIsoRegex.exec(string);if(match){for(getParsingFlags(config).iso=!0,i=0,l=isoDates.length;i&lt;l;i++)if(isoDates[i][1].exec(match[1])){dateFormat=isoDates[i][0],allowTime=!1!==isoDates[i][2];break}if(null==dateFormat)return void(config._isValid=!1);if(match[3]){for(i=0,l=isoTimes.length;i&lt;l;i++)if(isoTimes[i][1].exec(match[3])){timeFormat=(match[2]||\" \")+isoTimes[i][0];break}if(null==timeFormat)return void(config._isValid=!1)}if(!allowTime&amp;&amp;null!=timeFormat)return void(config._isValid=!1);if(match[4]){if(!tzRegex.exec(match[4]))return void(config._isValid=!1);tzFormat=\"Z\"}config._f=dateFormat+(timeFormat||\"\")+(tzFormat||\"\"),configFromStringAndFormat(config)}else config._isValid=!1}function untruncateYear(yearStr){var year=parseInt(yearStr,10);return year&lt;=49?2e3+year:year&lt;=999?1900+year:year}function configFromRFC2822(config){var parsedArray,yearStr,monthStr,dayStr,hourStr,minuteStr,secondStr,result,match=rfc2822.exec(config._i.replace(/\\([^)]*\\)|[\\n\\t]/g,\" \").replace(/(\\s\\s+)/g,\" \").replace(/^\\s\\s*/,\"\").replace(/\\s\\s*$/,\"\"));if(match){if(yearStr=match[4],monthStr=match[3],dayStr=match[2],hourStr=match[5],minuteStr=match[6],secondStr=match[7],result=[untruncateYear(yearStr),defaultLocaleMonthsShort.indexOf(monthStr),parseInt(dayStr,10),parseInt(hourStr,10),parseInt(minuteStr,10)],secondStr&amp;&amp;result.push(parseInt(secondStr,10)),parsedArray=result,!function(weekdayStr,parsedInput,config){return!weekdayStr||defaultLocaleWeekdaysShort.indexOf(weekdayStr)===new Date(parsedInput[0],parsedInput[1],parsedInput[2]).getDay()||(getParsingFlags(config).weekdayMismatch=!0,config._isValid=!1,!1)}(match[1],parsedArray,config))return;config._a=parsedArray,config._tzm=function(obsOffset,militaryOffset,numOffset){if(obsOffset)return obsOffsets[obsOffset];if(militaryOffset)return 0;var hm=parseInt(numOffset,10),m=hm%100;return(hm-m)/100*60+m}(match[8],match[9],match[10]),config._d=createUTCDate.apply(null,config._a),config._d.setUTCMinutes(config._d.getUTCMinutes()-config._tzm),getParsingFlags(config).rfc2822=!0}else config._isValid=!1}function defaults(a,b,c){return null!=a?a:null!=b?b:c}function configFromArray(config){var i,date,currentDate,expectedWeekday,yearToUse,input=[];if(!config._d){for(currentDate=function(config){var nowValue=new Date(hooks.now());return config._useUTC?[nowValue.getUTCFullYear(),nowValue.getUTCMonth(),nowValue.getUTCDate()]:[nowValue.getFullYear(),nowValue.getMonth(),nowValue.getDate()]}(config),config._w&amp;&amp;null==config._a[2]&amp;&amp;null==config._a[1]&amp;&amp;function(config){var w,weekYear,week,weekday,dow,doy,temp,weekdayOverflow,curWeek;null!=(w=config._w).GG||null!=w.W||null!=w.E?(dow=1,doy=4,weekYear=defaults(w.GG,config._a[0],weekOfYear(createLocal(),1,4).year),week=defaults(w.W,1),((weekday=defaults(w.E,1))&lt;1||weekday&gt;7)&amp;&amp;(weekdayOverflow=!0)):(dow=config._locale._week.dow,doy=config._locale._week.doy,curWeek=weekOfYear(createLocal(),dow,doy),weekYear=defaults(w.gg,config._a[0],curWeek.year),week=defaults(w.w,curWeek.week),null!=w.d?((weekday=w.d)&lt;0||weekday&gt;6)&amp;&amp;(weekdayOverflow=!0):null!=w.e?(weekday=w.e+dow,(w.e&lt;0||w.e&gt;6)&amp;&amp;(weekdayOverflow=!0)):weekday=dow),week&lt;1||week&gt;weeksInYear(weekYear,dow,doy)?getParsingFlags(config)._overflowWeeks=!0:null!=weekdayOverflow?getParsingFlags(config)._overflowWeekday=!0:(temp=dayOfYearFromWeeks(weekYear,week,weekday,dow,doy),config._a[0]=temp.year,config._dayOfYear=temp.dayOfYear)}(config),null!=config._dayOfYear&amp;&amp;(yearToUse=defaults(config._a[0],currentDate[0]),(config._dayOfYear&gt;daysInYear(yearToUse)||0===config._dayOfYear)&amp;&amp;(getParsingFlags(config)._overflowDayOfYear=!0),date=createUTCDate(yearToUse,0,config._dayOfYear),config._a[1]=date.getUTCMonth(),config._a[2]=date.getUTCDate()),i=0;i&lt;3&amp;&amp;null==config._a[i];++i)config._a[i]=input[i]=currentDate[i];for(;i&lt;7;i++)config._a[i]=input[i]=null==config._a[i]?2===i?1:0:config._a[i];24===config._a[3]&amp;&amp;0===config._a[4]&amp;&amp;0===config._a[5]&amp;&amp;0===config._a[6]&amp;&amp;(config._nextDay=!0,config._a[3]=0),config._d=(config._useUTC?createUTCDate:createDate).apply(null,input),expectedWeekday=config._useUTC?config._d.getUTCDay():config._d.getDay(),null!=config._tzm&amp;&amp;config._d.setUTCMinutes(config._d.getUTCMinutes()-config._tzm),config._nextDay&amp;&amp;(config._a[3]=24),config._w&amp;&amp;void 0!==config._w.d&amp;&amp;config._w.d!==expectedWeekday&amp;&amp;(getParsingFlags(config).weekdayMismatch=!0)}}function configFromStringAndFormat(config){if(config._f!==hooks.ISO_8601)if(config._f!==hooks.RFC_2822){config._a=[],getParsingFlags(config).empty=!0;var i,parsedInput,tokens,token,skipped,era,string=\"\"+config._i,stringLength=string.length,totalParsedInputLength=0;for(tokens=expandFormat(config._f,config._locale).match(formattingTokens)||[],i=0;i&lt;tokens.length;i++)token=tokens[i],(parsedInput=(string.match(getParseRegexForToken(token,config))||[])[0])&amp;&amp;((skipped=string.substr(0,string.indexOf(parsedInput))).length&gt;0&amp;&amp;getParsingFlags(config).unusedInput.push(skipped),string=string.slice(string.indexOf(parsedInput)+parsedInput.length),totalParsedInputLength+=parsedInput.length),formatTokenFunctions[token]?(parsedInput?getParsingFlags(config).empty=!1:getParsingFlags(config).unusedTokens.push(token),addTimeToArrayFromToken(token,parsedInput,config)):config._strict&amp;&amp;!parsedInput&amp;&amp;getParsingFlags(config).unusedTokens.push(token);getParsingFlags(config).charsLeftOver=stringLength-totalParsedInputLength,string.length&gt;0&amp;&amp;getParsingFlags(config).unusedInput.push(string),config._a[3]&lt;=12&amp;&amp;!0===getParsingFlags(config).bigHour&amp;&amp;config._a[3]&gt;0&amp;&amp;(getParsingFlags(config).bigHour=void 0),getParsingFlags(config).parsedDateParts=config._a.slice(0),getParsingFlags(config).meridiem=config._meridiem,config._a[3]=function(locale,hour,meridiem){var isPm;return null==meridiem?hour:null!=locale.meridiemHour?locale.meridiemHour(hour,meridiem):null!=locale.isPM?((isPm=locale.isPM(meridiem))&amp;&amp;hour&lt;12&amp;&amp;(hour+=12),isPm||12!==hour||(hour=0),hour):hour}(config._locale,config._a[3],config._meridiem),null!==(era=getParsingFlags(config).era)&amp;&amp;(config._a[0]=config._locale.erasConvertYear(era,config._a[0])),configFromArray(config),checkOverflow(config)}else configFromRFC2822(config);else configFromISO(config)}function prepareConfig(config){var input=config._i,format=config._f;return config._locale=config._locale||getLocale(config._l),null===input||void 0===format&amp;&amp;\"\"===input?createInvalid({nullInput:!0}):(\"string\"==typeof input&amp;&amp;(config._i=input=config._locale.preparse(input)),isMoment(input)?new Moment(checkOverflow(input)):(isDate(input)?config._d=input:isArray(format)?function(config){var tempConfig,bestMoment,scoreToBeat,i,currentScore,validFormatFound,bestFormatIsValid=!1;if(0===config._f.length)return getParsingFlags(config).invalidFormat=!0,void(config._d=new Date(NaN));for(i=0;i&lt;config._f.length;i++)currentScore=0,validFormatFound=!1,tempConfig=copyConfig({},config),null!=config._useUTC&amp;&amp;(tempConfig._useUTC=config._useUTC),tempConfig._f=config._f[i],configFromStringAndFormat(tempConfig),isValid(tempConfig)&amp;&amp;(validFormatFound=!0),currentScore+=getParsingFlags(tempConfig).charsLeftOver,currentScore+=10*getParsingFlags(tempConfig).unusedTokens.length,getParsingFlags(tempConfig).score=currentScore,bestFormatIsValid?currentScore&lt;scoreToBeat&amp;&amp;(scoreToBeat=currentScore,bestMoment=tempConfig):(null==scoreToBeat||currentScore&lt;scoreToBeat||validFormatFound)&amp;&amp;(scoreToBeat=currentScore,bestMoment=tempConfig,validFormatFound&amp;&amp;(bestFormatIsValid=!0));extend(config,bestMoment||tempConfig)}(config):format?configFromStringAndFormat(config):function(config){var input=config._i;isUndefined(input)?config._d=new Date(hooks.now()):isDate(input)?config._d=new Date(input.valueOf()):\"string\"==typeof input?function(config){var matched=aspNetJsonRegex.exec(config._i);null===matched?(configFromISO(config),!1===config._isValid&amp;&amp;(delete config._isValid,configFromRFC2822(config),!1===config._isValid&amp;&amp;(delete config._isValid,config._strict?config._isValid=!1:hooks.createFromInputFallback(config)))):config._d=new Date(+matched[1])}(config):isArray(input)?(config._a=map(input.slice(0),(function(obj){return parseInt(obj,10)})),configFromArray(config)):isObject(input)?function(config){if(!config._d){var i=normalizeObjectUnits(config._i),dayOrDate=void 0===i.day?i.date:i.day;config._a=map([i.year,i.month,dayOrDate,i.hour,i.minute,i.second,i.millisecond],(function(obj){return obj&amp;&amp;parseInt(obj,10)})),configFromArray(config)}}(config):isNumber(input)?config._d=new Date(input):hooks.createFromInputFallback(config)}(config),isValid(config)||(config._d=null),config))}function createLocalOrUTC(input,format,locale,strict,isUTC){var res,c={};return!0!==format&amp;&amp;!1!==format||(strict=format,format=void 0),!0!==locale&amp;&amp;!1!==locale||(strict=locale,locale=void 0),(isObject(input)&amp;&amp;isObjectEmpty(input)||isArray(input)&amp;&amp;0===input.length)&amp;&amp;(input=void 0),c._isAMomentObject=!0,c._useUTC=c._isUTC=isUTC,c._l=locale,c._i=input,c._f=format,c._strict=strict,(res=new Moment(checkOverflow(prepareConfig(c))))._nextDay&amp;&amp;(res.add(1,\"d\"),res._nextDay=void 0),res}function createLocal(input,format,locale,strict){return createLocalOrUTC(input,format,locale,strict,!1)}hooks.createFromInputFallback=deprecate(\"value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.\",(function(config){config._d=new Date(config._i+(config._useUTC?\" UTC\":\"\"))})),hooks.ISO_8601=function(){},hooks.RFC_2822=function(){};var prototypeMin=deprecate(\"moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/\",(function(){var other=createLocal.apply(null,arguments);return this.isValid()&amp;&amp;other.isValid()?other&lt;this?this:other:createInvalid()})),prototypeMax=deprecate(\"moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/\",(function(){var other=createLocal.apply(null,arguments);return this.isValid()&amp;&amp;other.isValid()?other&gt;this?this:other:createInvalid()}));function pickBy(fn,moments){var res,i;if(1===moments.length&amp;&amp;isArray(moments[0])&amp;&amp;(moments=moments[0]),!moments.length)return createLocal();for(res=moments[0],i=1;i&lt;moments.length;++i)moments[i].isValid()&amp;&amp;!moments[i][fn](res)||(res=moments[i]);return res}var ordering=[\"year\",\"quarter\",\"month\",\"week\",\"day\",\"hour\",\"minute\",\"second\",\"millisecond\"];function Duration(duration){var normalizedInput=normalizeObjectUnits(duration),years=normalizedInput.year||0,quarters=normalizedInput.quarter||0,months=normalizedInput.month||0,weeks=normalizedInput.week||normalizedInput.isoWeek||0,days=normalizedInput.day||0,hours=normalizedInput.hour||0,minutes=normalizedInput.minute||0,seconds=normalizedInput.second||0,milliseconds=normalizedInput.millisecond||0;this._isValid=function(m){var key,i,unitHasDecimal=!1;for(key in m)if(hasOwnProp(m,key)&amp;&amp;(-1===indexOf.call(ordering,key)||null!=m[key]&amp;&amp;isNaN(m[key])))return!1;for(i=0;i&lt;ordering.length;++i)if(m[ordering[i]]){if(unitHasDecimal)return!1;parseFloat(m[ordering[i]])!==toInt(m[ordering[i]])&amp;&amp;(unitHasDecimal=!0)}return!0}(normalizedInput),this._milliseconds=+milliseconds+1e3*seconds+6e4*minutes+1e3*hours*60*60,this._days=+days+7*weeks,this._months=+months+3*quarters+12*years,this._data={},this._locale=getLocale(),this._bubble()}function isDuration(obj){return obj instanceof Duration}function absRound(number){return number&lt;0?-1*Math.round(-1*number):Math.round(number)}function offset(token,separator){addFormatToken(token,0,0,(function(){var offset=this.utcOffset(),sign=\"+\";return offset&lt;0&amp;&amp;(offset=-offset,sign=\"-\"),sign+zeroFill(~~(offset/60),2)+separator+zeroFill(~~offset%60,2)}))}offset(\"Z\",\":\"),offset(\"ZZ\",\"\"),addRegexToken(\"Z\",matchShortOffset),addRegexToken(\"ZZ\",matchShortOffset),addParseToken([\"Z\",\"ZZ\"],(function(input,array,config){config._useUTC=!0,config._tzm=offsetFromString(matchShortOffset,input)}));var chunkOffset=/([\\+\\-]|\\d\\d)/gi;function offsetFromString(matcher,string){var parts,minutes,matches=(string||\"\").match(matcher);return null===matches?null:0===(minutes=60*(parts=((matches[matches.length-1]||[])+\"\").match(chunkOffset)||[\"-\",0,0])[1]+toInt(parts[2]))?0:\"+\"===parts[0]?minutes:-minutes}function cloneWithOffset(input,model){var res,diff;return model._isUTC?(res=model.clone(),diff=(isMoment(input)||isDate(input)?input.valueOf():createLocal(input).valueOf())-res.valueOf(),res._d.setTime(res._d.valueOf()+diff),hooks.updateOffset(res,!1),res):createLocal(input).local()}function getDateOffset(m){return-Math.round(m._d.getTimezoneOffset())}function isUtc(){return!!this.isValid()&amp;&amp;this._isUTC&amp;&amp;0===this._offset}hooks.updateOffset=function(){};var aspNetRegex=/^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,isoRegex=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function createDuration(input,key){var sign,ret,diffRes,base,other,res,duration=input,match=null;return isDuration(input)?duration={ms:input._milliseconds,d:input._days,M:input._months}:isNumber(input)||!isNaN(+input)?(duration={},key?duration[key]=+input:duration.milliseconds=+input):(match=aspNetRegex.exec(input))?(sign=\"-\"===match[1]?-1:1,duration={y:0,d:toInt(match[2])*sign,h:toInt(match[3])*sign,m:toInt(match[4])*sign,s:toInt(match[5])*sign,ms:toInt(absRound(1e3*match[6]))*sign}):(match=isoRegex.exec(input))?(sign=\"-\"===match[1]?-1:1,duration={y:parseIso(match[2],sign),M:parseIso(match[3],sign),w:parseIso(match[4],sign),d:parseIso(match[5],sign),h:parseIso(match[6],sign),m:parseIso(match[7],sign),s:parseIso(match[8],sign)}):null==duration?duration={}:\"object\"==typeof duration&amp;&amp;(\"from\"in duration||\"to\"in duration)&amp;&amp;(base=createLocal(duration.from),other=createLocal(duration.to),diffRes=base.isValid()&amp;&amp;other.isValid()?(other=cloneWithOffset(other,base),base.isBefore(other)?res=positiveMomentsDifference(base,other):((res=positiveMomentsDifference(other,base)).milliseconds=-res.milliseconds,res.months=-res.months),res):{milliseconds:0,months:0},(duration={}).ms=diffRes.milliseconds,duration.M=diffRes.months),ret=new Duration(duration),isDuration(input)&amp;&amp;hasOwnProp(input,\"_locale\")&amp;&amp;(ret._locale=input._locale),isDuration(input)&amp;&amp;hasOwnProp(input,\"_isValid\")&amp;&amp;(ret._isValid=input._isValid),ret}function parseIso(inp,sign){var res=inp&amp;&amp;parseFloat(inp.replace(\",\",\".\"));return(isNaN(res)?0:res)*sign}function positiveMomentsDifference(base,other){var res={};return res.months=other.month()-base.month()+12*(other.year()-base.year()),base.clone().add(res.months,\"M\").isAfter(other)&amp;&amp;--res.months,res.milliseconds=+other-+base.clone().add(res.months,\"M\"),res}function createAdder(direction,name){return function(val,period){var tmp;return null===period||isNaN(+period)||(deprecateSimple(name,\"moment().\"+name+\"(period, number) is deprecated. Please use moment().\"+name+\"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.\"),tmp=val,val=period,period=tmp),addSubtract(this,createDuration(val,period),direction),this}}function addSubtract(mom,duration,isAdding,updateOffset){var milliseconds=duration._milliseconds,days=absRound(duration._days),months=absRound(duration._months);mom.isValid()&amp;&amp;(updateOffset=null==updateOffset||updateOffset,months&amp;&amp;setMonth(mom,get(mom,\"Month\")+months*isAdding),days&amp;&amp;set$1(mom,\"Date\",get(mom,\"Date\")+days*isAdding),milliseconds&amp;&amp;mom._d.setTime(mom._d.valueOf()+milliseconds*isAdding),updateOffset&amp;&amp;hooks.updateOffset(mom,days||months))}createDuration.fn=Duration.prototype,createDuration.invalid=function(){return createDuration(NaN)};var add=createAdder(1,\"add\"),subtract=createAdder(-1,\"subtract\");function isString(input){return\"string\"==typeof input||input instanceof String}function isMomentInput(input){return isMoment(input)||isDate(input)||isString(input)||isNumber(input)||function(input){var arrayTest=isArray(input),dataTypeTest=!1;return arrayTest&amp;&amp;(dataTypeTest=0===input.filter((function(item){return!isNumber(item)&amp;&amp;isString(input)})).length),arrayTest&amp;&amp;dataTypeTest}(input)||function(input){var i,property,objectTest=isObject(input)&amp;&amp;!isObjectEmpty(input),propertyTest=!1,properties=[\"years\",\"year\",\"y\",\"months\",\"month\",\"M\",\"days\",\"day\",\"d\",\"dates\",\"date\",\"D\",\"hours\",\"hour\",\"h\",\"minutes\",\"minute\",\"m\",\"seconds\",\"second\",\"s\",\"milliseconds\",\"millisecond\",\"ms\"];for(i=0;i&lt;properties.length;i+=1)property=properties[i],propertyTest=propertyTest||hasOwnProp(input,property);return objectTest&amp;&amp;propertyTest}(input)||null==input}function isCalendarSpec(input){var i,objectTest=isObject(input)&amp;&amp;!isObjectEmpty(input),propertyTest=!1,properties=[\"sameDay\",\"nextDay\",\"lastDay\",\"nextWeek\",\"lastWeek\",\"sameElse\"];for(i=0;i&lt;properties.length;i+=1)propertyTest=propertyTest||hasOwnProp(input,properties[i]);return objectTest&amp;&amp;propertyTest}function monthDiff(a,b){if(a.date()&lt;b.date())return-monthDiff(b,a);var wholeMonthDiff=12*(b.year()-a.year())+(b.month()-a.month()),anchor=a.clone().add(wholeMonthDiff,\"months\");return-(wholeMonthDiff+(b-anchor&lt;0?(b-anchor)/(anchor-a.clone().add(wholeMonthDiff-1,\"months\")):(b-anchor)/(a.clone().add(wholeMonthDiff+1,\"months\")-anchor)))||0}function locale(key){var newLocaleData;return void 0===key?this._locale._abbr:(null!=(newLocaleData=getLocale(key))&amp;&amp;(this._locale=newLocaleData),this)}hooks.defaultFormat=\"YYYY-MM-DDTHH:mm:ssZ\",hooks.defaultFormatUtc=\"YYYY-MM-DDTHH:mm:ss[Z]\";var lang=deprecate(\"moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.\",(function(key){return void 0===key?this.localeData():this.locale(key)}));function localeData(){return this._locale}function mod$1(dividend,divisor){return(dividend%divisor+divisor)%divisor}function localStartOfDate(y,m,d){return y&lt;100&amp;&amp;y&gt;=0?new Date(y+400,m,d)-126227808e5:new Date(y,m,d).valueOf()}function utcStartOfDate(y,m,d){return y&lt;100&amp;&amp;y&gt;=0?Date.UTC(y+400,m,d)-126227808e5:Date.UTC(y,m,d)}function matchEraAbbr(isStrict,locale){return locale.erasAbbrRegex(isStrict)}function computeErasParse(){var i,l,abbrPieces=[],namePieces=[],narrowPieces=[],mixedPieces=[],eras=this.eras();for(i=0,l=eras.length;i&lt;l;++i)namePieces.push(regexEscape(eras[i].name)),abbrPieces.push(regexEscape(eras[i].abbr)),narrowPieces.push(regexEscape(eras[i].narrow)),mixedPieces.push(regexEscape(eras[i].name)),mixedPieces.push(regexEscape(eras[i].abbr)),mixedPieces.push(regexEscape(eras[i].narrow));this._erasRegex=new RegExp(\"^(\"+mixedPieces.join(\"|\")+\")\",\"i\"),this._erasNameRegex=new RegExp(\"^(\"+namePieces.join(\"|\")+\")\",\"i\"),this._erasAbbrRegex=new RegExp(\"^(\"+abbrPieces.join(\"|\")+\")\",\"i\"),this._erasNarrowRegex=new RegExp(\"^(\"+narrowPieces.join(\"|\")+\")\",\"i\")}function addWeekYearFormatToken(token,getter){addFormatToken(0,[token,token.length],0,getter)}function getSetWeekYearHelper(input,week,weekday,dow,doy){var weeksTarget;return null==input?weekOfYear(this,dow,doy).year:(week&gt;(weeksTarget=weeksInYear(input,dow,doy))&amp;&amp;(week=weeksTarget),setWeekAll.call(this,input,week,weekday,dow,doy))}function setWeekAll(weekYear,week,weekday,dow,doy){var dayOfYearData=dayOfYearFromWeeks(weekYear,week,weekday,dow,doy),date=createUTCDate(dayOfYearData.year,0,dayOfYearData.dayOfYear);return this.year(date.getUTCFullYear()),this.month(date.getUTCMonth()),this.date(date.getUTCDate()),this}addFormatToken(\"N\",0,0,\"eraAbbr\"),addFormatToken(\"NN\",0,0,\"eraAbbr\"),addFormatToken(\"NNN\",0,0,\"eraAbbr\"),addFormatToken(\"NNNN\",0,0,\"eraName\"),addFormatToken(\"NNNNN\",0,0,\"eraNarrow\"),addFormatToken(\"y\",[\"y\",1],\"yo\",\"eraYear\"),addFormatToken(\"y\",[\"yy\",2],0,\"eraYear\"),addFormatToken(\"y\",[\"yyy\",3],0,\"eraYear\"),addFormatToken(\"y\",[\"yyyy\",4],0,\"eraYear\"),addRegexToken(\"N\",matchEraAbbr),addRegexToken(\"NN\",matchEraAbbr),addRegexToken(\"NNN\",matchEraAbbr),addRegexToken(\"NNNN\",(function(isStrict,locale){return locale.erasNameRegex(isStrict)})),addRegexToken(\"NNNNN\",(function(isStrict,locale){return locale.erasNarrowRegex(isStrict)})),addParseToken([\"N\",\"NN\",\"NNN\",\"NNNN\",\"NNNNN\"],(function(input,array,config,token){var era=config._locale.erasParse(input,token,config._strict);era?getParsingFlags(config).era=era:getParsingFlags(config).invalidEra=input})),addRegexToken(\"y\",matchUnsigned),addRegexToken(\"yy\",matchUnsigned),addRegexToken(\"yyy\",matchUnsigned),addRegexToken(\"yyyy\",matchUnsigned),addRegexToken(\"yo\",(function(isStrict,locale){return locale._eraYearOrdinalRegex||matchUnsigned})),addParseToken([\"y\",\"yy\",\"yyy\",\"yyyy\"],0),addParseToken([\"yo\"],(function(input,array,config,token){var match;config._locale._eraYearOrdinalRegex&amp;&amp;(match=input.match(config._locale._eraYearOrdinalRegex)),config._locale.eraYearOrdinalParse?array[0]=config._locale.eraYearOrdinalParse(input,match):array[0]=parseInt(input,10)})),addFormatToken(0,[\"gg\",2],0,(function(){return this.weekYear()%100})),addFormatToken(0,[\"GG\",2],0,(function(){return this.isoWeekYear()%100})),addWeekYearFormatToken(\"gggg\",\"weekYear\"),addWeekYearFormatToken(\"ggggg\",\"weekYear\"),addWeekYearFormatToken(\"GGGG\",\"isoWeekYear\"),addWeekYearFormatToken(\"GGGGG\",\"isoWeekYear\"),addUnitAlias(\"weekYear\",\"gg\"),addUnitAlias(\"isoWeekYear\",\"GG\"),addUnitPriority(\"weekYear\",1),addUnitPriority(\"isoWeekYear\",1),addRegexToken(\"G\",matchSigned),addRegexToken(\"g\",matchSigned),addRegexToken(\"GG\",match1to2,match2),addRegexToken(\"gg\",match1to2,match2),addRegexToken(\"GGGG\",match1to4,match4),addRegexToken(\"gggg\",match1to4,match4),addRegexToken(\"GGGGG\",match1to6,match6),addRegexToken(\"ggggg\",match1to6,match6),addWeekParseToken([\"gggg\",\"ggggg\",\"GGGG\",\"GGGGG\"],(function(input,week,config,token){week[token.substr(0,2)]=toInt(input)})),addWeekParseToken([\"gg\",\"GG\"],(function(input,week,config,token){week[token]=hooks.parseTwoDigitYear(input)})),addFormatToken(\"Q\",0,\"Qo\",\"quarter\"),addUnitAlias(\"quarter\",\"Q\"),addUnitPriority(\"quarter\",7),addRegexToken(\"Q\",match1),addParseToken(\"Q\",(function(input,array){array[1]=3*(toInt(input)-1)})),addFormatToken(\"D\",[\"DD\",2],\"Do\",\"date\"),addUnitAlias(\"date\",\"D\"),addUnitPriority(\"date\",9),addRegexToken(\"D\",match1to2),addRegexToken(\"DD\",match1to2,match2),addRegexToken(\"Do\",(function(isStrict,locale){return isStrict?locale._dayOfMonthOrdinalParse||locale._ordinalParse:locale._dayOfMonthOrdinalParseLenient})),addParseToken([\"D\",\"DD\"],2),addParseToken(\"Do\",(function(input,array){array[2]=toInt(input.match(match1to2)[0])}));var getSetDayOfMonth=makeGetSet(\"Date\",!0);addFormatToken(\"DDD\",[\"DDDD\",3],\"DDDo\",\"dayOfYear\"),addUnitAlias(\"dayOfYear\",\"DDD\"),addUnitPriority(\"dayOfYear\",4),addRegexToken(\"DDD\",match1to3),addRegexToken(\"DDDD\",match3),addParseToken([\"DDD\",\"DDDD\"],(function(input,array,config){config._dayOfYear=toInt(input)})),addFormatToken(\"m\",[\"mm\",2],0,\"minute\"),addUnitAlias(\"minute\",\"m\"),addUnitPriority(\"minute\",14),addRegexToken(\"m\",match1to2),addRegexToken(\"mm\",match1to2,match2),addParseToken([\"m\",\"mm\"],4);var getSetMinute=makeGetSet(\"Minutes\",!1);addFormatToken(\"s\",[\"ss\",2],0,\"second\"),addUnitAlias(\"second\",\"s\"),addUnitPriority(\"second\",15),addRegexToken(\"s\",match1to2),addRegexToken(\"ss\",match1to2,match2),addParseToken([\"s\",\"ss\"],5);var token,getSetMillisecond,getSetSecond=makeGetSet(\"Seconds\",!1);for(addFormatToken(\"S\",0,0,(function(){return~~(this.millisecond()/100)})),addFormatToken(0,[\"SS\",2],0,(function(){return~~(this.millisecond()/10)})),addFormatToken(0,[\"SSS\",3],0,\"millisecond\"),addFormatToken(0,[\"SSSS\",4],0,(function(){return 10*this.millisecond()})),addFormatToken(0,[\"SSSSS\",5],0,(function(){return 100*this.millisecond()})),addFormatToken(0,[\"SSSSSS\",6],0,(function(){return 1e3*this.millisecond()})),addFormatToken(0,[\"SSSSSSS\",7],0,(function(){return 1e4*this.millisecond()})),addFormatToken(0,[\"SSSSSSSS\",8],0,(function(){return 1e5*this.millisecond()})),addFormatToken(0,[\"SSSSSSSSS\",9],0,(function(){return 1e6*this.millisecond()})),addUnitAlias(\"millisecond\",\"ms\"),addUnitPriority(\"millisecond\",16),addRegexToken(\"S\",match1to3,match1),addRegexToken(\"SS\",match1to3,match2),addRegexToken(\"SSS\",match1to3,match3),token=\"SSSS\";token.length&lt;=9;token+=\"S\")addRegexToken(token,matchUnsigned);function parseMs(input,array){array[6]=toInt(1e3*(\"0.\"+input))}for(token=\"S\";token.length&lt;=9;token+=\"S\")addParseToken(token,parseMs);getSetMillisecond=makeGetSet(\"Milliseconds\",!1),addFormatToken(\"z\",0,0,\"zoneAbbr\"),addFormatToken(\"zz\",0,0,\"zoneName\");var proto=Moment.prototype;function preParsePostFormat(string){return string}proto.add=add,proto.calendar=function(time,formats){1===arguments.length&amp;&amp;(arguments[0]?isMomentInput(arguments[0])?(time=arguments[0],formats=void 0):isCalendarSpec(arguments[0])&amp;&amp;(formats=arguments[0],time=void 0):(time=void 0,formats=void 0));var now=time||createLocal(),sod=cloneWithOffset(now,this).startOf(\"day\"),format=hooks.calendarFormat(this,sod)||\"sameElse\",output=formats&amp;&amp;(isFunction(formats[format])?formats[format].call(this,now):formats[format]);return this.format(output||this.localeData().calendar(format,this,createLocal(now)))},proto.clone=function(){return new Moment(this)},proto.diff=function(input,units,asFloat){var that,zoneDelta,output;if(!this.isValid())return NaN;if(!(that=cloneWithOffset(input,this)).isValid())return NaN;switch(zoneDelta=6e4*(that.utcOffset()-this.utcOffset()),units=normalizeUnits(units)){case\"year\":output=monthDiff(this,that)/12;break;case\"month\":output=monthDiff(this,that);break;case\"quarter\":output=monthDiff(this,that)/3;break;case\"second\":output=(this-that)/1e3;break;case\"minute\":output=(this-that)/6e4;break;case\"hour\":output=(this-that)/36e5;break;case\"day\":output=(this-that-zoneDelta)/864e5;break;case\"week\":output=(this-that-zoneDelta)/6048e5;break;default:output=this-that}return asFloat?output:absFloor(output)},proto.endOf=function(units){var time,startOfDate;if(void 0===(units=normalizeUnits(units))||\"millisecond\"===units||!this.isValid())return this;switch(startOfDate=this._isUTC?utcStartOfDate:localStartOfDate,units){case\"year\":time=startOfDate(this.year()+1,0,1)-1;break;case\"quarter\":time=startOfDate(this.year(),this.month()-this.month()%3+3,1)-1;break;case\"month\":time=startOfDate(this.year(),this.month()+1,1)-1;break;case\"week\":time=startOfDate(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case\"isoWeek\":time=startOfDate(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case\"day\":case\"date\":time=startOfDate(this.year(),this.month(),this.date()+1)-1;break;case\"hour\":time=this._d.valueOf(),time+=36e5-mod$1(time+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case\"minute\":time=this._d.valueOf(),time+=6e4-mod$1(time,6e4)-1;break;case\"second\":time=this._d.valueOf(),time+=1e3-mod$1(time,1e3)-1}return this._d.setTime(time),hooks.updateOffset(this,!0),this},proto.format=function(inputString){inputString||(inputString=this.isUtc()?hooks.defaultFormatUtc:hooks.defaultFormat);var output=formatMoment(this,inputString);return this.localeData().postformat(output)},proto.from=function(time,withoutSuffix){return this.isValid()&amp;&amp;(isMoment(time)&amp;&amp;time.isValid()||createLocal(time).isValid())?createDuration({to:this,from:time}).locale(this.locale()).humanize(!withoutSuffix):this.localeData().invalidDate()},proto.fromNow=function(withoutSuffix){return this.from(createLocal(),withoutSuffix)},proto.to=function(time,withoutSuffix){return this.isValid()&amp;&amp;(isMoment(time)&amp;&amp;time.isValid()||createLocal(time).isValid())?createDuration({from:this,to:time}).locale(this.locale()).humanize(!withoutSuffix):this.localeData().invalidDate()},proto.toNow=function(withoutSuffix){return this.to(createLocal(),withoutSuffix)},proto.get=function(units){return isFunction(this[units=normalizeUnits(units)])?this[units]():this},proto.invalidAt=function(){return getParsingFlags(this).overflow},proto.isAfter=function(input,units){var localInput=isMoment(input)?input:createLocal(input);return!(!this.isValid()||!localInput.isValid())&amp;&amp;(\"millisecond\"===(units=normalizeUnits(units)||\"millisecond\")?this.valueOf()&gt;localInput.valueOf():localInput.valueOf()&lt;this.clone().startOf(units).valueOf())},proto.isBefore=function(input,units){var localInput=isMoment(input)?input:createLocal(input);return!(!this.isValid()||!localInput.isValid())&amp;&amp;(\"millisecond\"===(units=normalizeUnits(units)||\"millisecond\")?this.valueOf()&lt;localInput.valueOf():this.clone().endOf(units).valueOf()&lt;localInput.valueOf())},proto.isBetween=function(from,to,units,inclusivity){var localFrom=isMoment(from)?from:createLocal(from),localTo=isMoment(to)?to:createLocal(to);return!!(this.isValid()&amp;&amp;localFrom.isValid()&amp;&amp;localTo.isValid())&amp;&amp;((\"(\"===(inclusivity=inclusivity||\"()\")[0]?this.isAfter(localFrom,units):!this.isBefore(localFrom,units))&amp;&amp;(\")\"===inclusivity[1]?this.isBefore(localTo,units):!this.isAfter(localTo,units)))},proto.isSame=function(input,units){var inputMs,localInput=isMoment(input)?input:createLocal(input);return!(!this.isValid()||!localInput.isValid())&amp;&amp;(\"millisecond\"===(units=normalizeUnits(units)||\"millisecond\")?this.valueOf()===localInput.valueOf():(inputMs=localInput.valueOf(),this.clone().startOf(units).valueOf()&lt;=inputMs&amp;&amp;inputMs&lt;=this.clone().endOf(units).valueOf()))},proto.isSameOrAfter=function(input,units){return this.isSame(input,units)||this.isAfter(input,units)},proto.isSameOrBefore=function(input,units){return this.isSame(input,units)||this.isBefore(input,units)},proto.isValid=function(){return isValid(this)},proto.lang=lang,proto.locale=locale,proto.localeData=localeData,proto.max=prototypeMax,proto.min=prototypeMin,proto.parsingFlags=function(){return extend({},getParsingFlags(this))},proto.set=function(units,value){if(\"object\"==typeof units){var i,prioritized=function(unitsObj){var u,units=[];for(u in unitsObj)hasOwnProp(unitsObj,u)&amp;&amp;units.push({unit:u,priority:priorities[u]});return units.sort((function(a,b){return a.priority-b.priority})),units}(units=normalizeObjectUnits(units));for(i=0;i&lt;prioritized.length;i++)this[prioritized[i].unit](units[prioritized[i].unit])}else if(isFunction(this[units=normalizeUnits(units)]))return this[units](value);return this},proto.startOf=function(units){var time,startOfDate;if(void 0===(units=normalizeUnits(units))||\"millisecond\"===units||!this.isValid())return this;switch(startOfDate=this._isUTC?utcStartOfDate:localStartOfDate,units){case\"year\":time=startOfDate(this.year(),0,1);break;case\"quarter\":time=startOfDate(this.year(),this.month()-this.month()%3,1);break;case\"month\":time=startOfDate(this.year(),this.month(),1);break;case\"week\":time=startOfDate(this.year(),this.month(),this.date()-this.weekday());break;case\"isoWeek\":time=startOfDate(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case\"day\":case\"date\":time=startOfDate(this.year(),this.month(),this.date());break;case\"hour\":time=this._d.valueOf(),time-=mod$1(time+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case\"minute\":time=this._d.valueOf(),time-=mod$1(time,6e4);break;case\"second\":time=this._d.valueOf(),time-=mod$1(time,1e3)}return this._d.setTime(time),hooks.updateOffset(this,!0),this},proto.subtract=subtract,proto.toArray=function(){var m=this;return[m.year(),m.month(),m.date(),m.hour(),m.minute(),m.second(),m.millisecond()]},proto.toObject=function(){var m=this;return{years:m.year(),months:m.month(),date:m.date(),hours:m.hours(),minutes:m.minutes(),seconds:m.seconds(),milliseconds:m.milliseconds()}},proto.toDate=function(){return new Date(this.valueOf())},proto.toISOString=function(keepOffset){if(!this.isValid())return null;var utc=!0!==keepOffset,m=utc?this.clone().utc():this;return m.year()&lt;0||m.year()&gt;9999?formatMoment(m,utc?\"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ\"):isFunction(Date.prototype.toISOString)?utc?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace(\"Z\",formatMoment(m,\"Z\")):formatMoment(m,utc?\"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYY-MM-DD[T]HH:mm:ss.SSSZ\")},proto.inspect=function(){if(!this.isValid())return\"moment.invalid(/* \"+this._i+\" */)\";var prefix,year,suffix,func=\"moment\",zone=\"\";return this.isLocal()||(func=0===this.utcOffset()?\"moment.utc\":\"moment.parseZone\",zone=\"Z\"),prefix=\"[\"+func+'(\"]',year=0&lt;=this.year()&amp;&amp;this.year()&lt;=9999?\"YYYY\":\"YYYYYY\",suffix=zone+'[\")]',this.format(prefix+year+\"-MM-DD[T]HH:mm:ss.SSS\"+suffix)},\"undefined\"!=typeof Symbol&amp;&amp;null!=Symbol.for&amp;&amp;(proto[Symbol.for(\"nodejs.util.inspect.custom\")]=function(){return\"Moment&lt;\"+this.format()+\"&gt;\"}),proto.toJSON=function(){return this.isValid()?this.toISOString():null},proto.toString=function(){return this.clone().locale(\"en\").format(\"ddd MMM DD YYYY HH:mm:ss [GMT]ZZ\")},proto.unix=function(){return Math.floor(this.valueOf()/1e3)},proto.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},proto.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},proto.eraName=function(){var i,l,val,eras=this.localeData().eras();for(i=0,l=eras.length;i&lt;l;++i){if(val=this.clone().startOf(\"day\").valueOf(),eras[i].since&lt;=val&amp;&amp;val&lt;=eras[i].until)return eras[i].name;if(eras[i].until&lt;=val&amp;&amp;val&lt;=eras[i].since)return eras[i].name}return\"\"},proto.eraNarrow=function(){var i,l,val,eras=this.localeData().eras();for(i=0,l=eras.length;i&lt;l;++i){if(val=this.clone().startOf(\"day\").valueOf(),eras[i].since&lt;=val&amp;&amp;val&lt;=eras[i].until)return eras[i].narrow;if(eras[i].until&lt;=val&amp;&amp;val&lt;=eras[i].since)return eras[i].narrow}return\"\"},proto.eraAbbr=function(){var i,l,val,eras=this.localeData().eras();for(i=0,l=eras.length;i&lt;l;++i){if(val=this.clone().startOf(\"day\").valueOf(),eras[i].since&lt;=val&amp;&amp;val&lt;=eras[i].until)return eras[i].abbr;if(eras[i].until&lt;=val&amp;&amp;val&lt;=eras[i].since)return eras[i].abbr}return\"\"},proto.eraYear=function(){var i,l,dir,val,eras=this.localeData().eras();for(i=0,l=eras.length;i&lt;l;++i)if(dir=eras[i].since&lt;=eras[i].until?1:-1,val=this.clone().startOf(\"day\").valueOf(),eras[i].since&lt;=val&amp;&amp;val&lt;=eras[i].until||eras[i].until&lt;=val&amp;&amp;val&lt;=eras[i].since)return(this.year()-hooks(eras[i].since).year())*dir+eras[i].offset;return this.year()},proto.year=getSetYear,proto.isLeapYear=function(){return isLeapYear(this.year())},proto.weekYear=function(input){return getSetWeekYearHelper.call(this,input,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},proto.isoWeekYear=function(input){return getSetWeekYearHelper.call(this,input,this.isoWeek(),this.isoWeekday(),1,4)},proto.quarter=proto.quarters=function(input){return null==input?Math.ceil((this.month()+1)/3):this.month(3*(input-1)+this.month()%3)},proto.month=getSetMonth,proto.daysInMonth=function(){return daysInMonth(this.year(),this.month())},proto.week=proto.weeks=function(input){var week=this.localeData().week(this);return null==input?week:this.add(7*(input-week),\"d\")},proto.isoWeek=proto.isoWeeks=function(input){var week=weekOfYear(this,1,4).week;return null==input?week:this.add(7*(input-week),\"d\")},proto.weeksInYear=function(){var weekInfo=this.localeData()._week;return weeksInYear(this.year(),weekInfo.dow,weekInfo.doy)},proto.weeksInWeekYear=function(){var weekInfo=this.localeData()._week;return weeksInYear(this.weekYear(),weekInfo.dow,weekInfo.doy)},proto.isoWeeksInYear=function(){return weeksInYear(this.year(),1,4)},proto.isoWeeksInISOWeekYear=function(){return weeksInYear(this.isoWeekYear(),1,4)},proto.date=getSetDayOfMonth,proto.day=proto.days=function(input){if(!this.isValid())return null!=input?this:NaN;var day=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=input?(input=function(input,locale){return\"string\"!=typeof input?input:isNaN(input)?\"number\"==typeof(input=locale.weekdaysParse(input))?input:null:parseInt(input,10)}(input,this.localeData()),this.add(input-day,\"d\")):day},proto.weekday=function(input){if(!this.isValid())return null!=input?this:NaN;var weekday=(this.day()+7-this.localeData()._week.dow)%7;return null==input?weekday:this.add(input-weekday,\"d\")},proto.isoWeekday=function(input){if(!this.isValid())return null!=input?this:NaN;if(null!=input){var weekday=function(input,locale){return\"string\"==typeof input?locale.weekdaysParse(input)%7||7:isNaN(input)?null:input}(input,this.localeData());return this.day(this.day()%7?weekday:weekday-7)}return this.day()||7},proto.dayOfYear=function(input){var dayOfYear=Math.round((this.clone().startOf(\"day\")-this.clone().startOf(\"year\"))/864e5)+1;return null==input?dayOfYear:this.add(input-dayOfYear,\"d\")},proto.hour=proto.hours=getSetHour,proto.minute=proto.minutes=getSetMinute,proto.second=proto.seconds=getSetSecond,proto.millisecond=proto.milliseconds=getSetMillisecond,proto.utcOffset=function(input,keepLocalTime,keepMinutes){var localAdjust,offset=this._offset||0;if(!this.isValid())return null!=input?this:NaN;if(null!=input){if(\"string\"==typeof input){if(null===(input=offsetFromString(matchShortOffset,input)))return this}else Math.abs(input)&lt;16&amp;&amp;!keepMinutes&amp;&amp;(input*=60);return!this._isUTC&amp;&amp;keepLocalTime&amp;&amp;(localAdjust=getDateOffset(this)),this._offset=input,this._isUTC=!0,null!=localAdjust&amp;&amp;this.add(localAdjust,\"m\"),offset!==input&amp;&amp;(!keepLocalTime||this._changeInProgress?addSubtract(this,createDuration(input-offset,\"m\"),1,!1):this._changeInProgress||(this._changeInProgress=!0,hooks.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?offset:getDateOffset(this)},proto.utc=function(keepLocalTime){return this.utcOffset(0,keepLocalTime)},proto.local=function(keepLocalTime){return this._isUTC&amp;&amp;(this.utcOffset(0,keepLocalTime),this._isUTC=!1,keepLocalTime&amp;&amp;this.subtract(getDateOffset(this),\"m\")),this},proto.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if(\"string\"==typeof this._i){var tZone=offsetFromString(matchOffset,this._i);null!=tZone?this.utcOffset(tZone):this.utcOffset(0,!0)}return this},proto.hasAlignedHourOffset=function(input){return!!this.isValid()&amp;&amp;(input=input?createLocal(input).utcOffset():0,(this.utcOffset()-input)%60==0)},proto.isDST=function(){return this.utcOffset()&gt;this.clone().month(0).utcOffset()||this.utcOffset()&gt;this.clone().month(5).utcOffset()},proto.isLocal=function(){return!!this.isValid()&amp;&amp;!this._isUTC},proto.isUtcOffset=function(){return!!this.isValid()&amp;&amp;this._isUTC},proto.isUtc=isUtc,proto.isUTC=isUtc,proto.zoneAbbr=function(){return this._isUTC?\"UTC\":\"\"},proto.zoneName=function(){return this._isUTC?\"Coordinated Universal Time\":\"\"},proto.dates=deprecate(\"dates accessor is deprecated. Use date instead.\",getSetDayOfMonth),proto.months=deprecate(\"months accessor is deprecated. Use month instead\",getSetMonth),proto.years=deprecate(\"years accessor is deprecated. Use year instead\",getSetYear),proto.zone=deprecate(\"moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/\",(function(input,keepLocalTime){return null!=input?(\"string\"!=typeof input&amp;&amp;(input=-input),this.utcOffset(input,keepLocalTime),this):-this.utcOffset()})),proto.isDSTShifted=deprecate(\"isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information\",(function(){if(!isUndefined(this._isDSTShifted))return this._isDSTShifted;var other,c={};return copyConfig(c,this),(c=prepareConfig(c))._a?(other=c._isUTC?createUTC(c._a):createLocal(c._a),this._isDSTShifted=this.isValid()&amp;&amp;function(array1,array2,dontConvert){var i,len=Math.min(array1.length,array2.length),lengthDiff=Math.abs(array1.length-array2.length),diffs=0;for(i=0;i&lt;len;i++)(dontConvert&amp;&amp;array1[i]!==array2[i]||!dontConvert&amp;&amp;toInt(array1[i])!==toInt(array2[i]))&amp;&amp;diffs++;return diffs+lengthDiff}(c._a,other.toArray())&gt;0):this._isDSTShifted=!1,this._isDSTShifted}));var proto$1=Locale.prototype;function get$1(format,index,field,setter){var locale=getLocale(),utc=createUTC().set(setter,index);return locale[field](utc,format)}function listMonthsImpl(format,index,field){if(isNumber(format)&amp;&amp;(index=format,format=void 0),format=format||\"\",null!=index)return get$1(format,index,field,\"month\");var i,out=[];for(i=0;i&lt;12;i++)out[i]=get$1(format,i,field,\"month\");return out}function listWeekdaysImpl(localeSorted,format,index,field){\"boolean\"==typeof localeSorted?(isNumber(format)&amp;&amp;(index=format,format=void 0),format=format||\"\"):(index=format=localeSorted,localeSorted=!1,isNumber(format)&amp;&amp;(index=format,format=void 0),format=format||\"\");var i,locale=getLocale(),shift=localeSorted?locale._week.dow:0,out=[];if(null!=index)return get$1(format,(index+shift)%7,field,\"day\");for(i=0;i&lt;7;i++)out[i]=get$1(format,(i+shift)%7,field,\"day\");return out}proto$1.calendar=function(key,mom,now){var output=this._calendar[key]||this._calendar.sameElse;return isFunction(output)?output.call(mom,now):output},proto$1.longDateFormat=function(key){var format=this._longDateFormat[key],formatUpper=this._longDateFormat[key.toUpperCase()];return format||!formatUpper?format:(this._longDateFormat[key]=formatUpper.match(formattingTokens).map((function(tok){return\"MMMM\"===tok||\"MM\"===tok||\"DD\"===tok||\"dddd\"===tok?tok.slice(1):tok})).join(\"\"),this._longDateFormat[key])},proto$1.invalidDate=function(){return this._invalidDate},proto$1.ordinal=function(number){return this._ordinal.replace(\"%d\",number)},proto$1.preparse=preParsePostFormat,proto$1.postformat=preParsePostFormat,proto$1.relativeTime=function(number,withoutSuffix,string,isFuture){var output=this._relativeTime[string];return isFunction(output)?output(number,withoutSuffix,string,isFuture):output.replace(/%d/i,number)},proto$1.pastFuture=function(diff,output){var format=this._relativeTime[diff&gt;0?\"future\":\"past\"];return isFunction(format)?format(output):format.replace(/%s/i,output)},proto$1.set=function(config){var prop,i;for(i in config)hasOwnProp(config,i)&amp;&amp;(isFunction(prop=config[i])?this[i]=prop:this[\"_\"+i]=prop);this._config=config,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+\"|\"+/\\d{1,2}/.source)},proto$1.eras=function(m,format){var i,l,date,eras=this._eras||getLocale(\"en\")._eras;for(i=0,l=eras.length;i&lt;l;++i){switch(typeof eras[i].since){case\"string\":date=hooks(eras[i].since).startOf(\"day\"),eras[i].since=date.valueOf()}switch(typeof eras[i].until){case\"undefined\":eras[i].until=1/0;break;case\"string\":date=hooks(eras[i].until).startOf(\"day\").valueOf(),eras[i].until=date.valueOf()}}return eras},proto$1.erasParse=function(eraName,format,strict){var i,l,name,abbr,narrow,eras=this.eras();for(eraName=eraName.toUpperCase(),i=0,l=eras.length;i&lt;l;++i)if(name=eras[i].name.toUpperCase(),abbr=eras[i].abbr.toUpperCase(),narrow=eras[i].narrow.toUpperCase(),strict)switch(format){case\"N\":case\"NN\":case\"NNN\":if(abbr===eraName)return eras[i];break;case\"NNNN\":if(name===eraName)return eras[i];break;case\"NNNNN\":if(narrow===eraName)return eras[i]}else if([name,abbr,narrow].indexOf(eraName)&gt;=0)return eras[i]},proto$1.erasConvertYear=function(era,year){var dir=era.since&lt;=era.until?1:-1;return void 0===year?hooks(era.since).year():hooks(era.since).year()+(year-era.offset)*dir},proto$1.erasAbbrRegex=function(isStrict){return hasOwnProp(this,\"_erasAbbrRegex\")||computeErasParse.call(this),isStrict?this._erasAbbrRegex:this._erasRegex},proto$1.erasNameRegex=function(isStrict){return hasOwnProp(this,\"_erasNameRegex\")||computeErasParse.call(this),isStrict?this._erasNameRegex:this._erasRegex},proto$1.erasNarrowRegex=function(isStrict){return hasOwnProp(this,\"_erasNarrowRegex\")||computeErasParse.call(this),isStrict?this._erasNarrowRegex:this._erasRegex},proto$1.months=function(m,format){return m?isArray(this._months)?this._months[m.month()]:this._months[(this._months.isFormat||MONTHS_IN_FORMAT).test(format)?\"format\":\"standalone\"][m.month()]:isArray(this._months)?this._months:this._months.standalone},proto$1.monthsShort=function(m,format){return m?isArray(this._monthsShort)?this._monthsShort[m.month()]:this._monthsShort[MONTHS_IN_FORMAT.test(format)?\"format\":\"standalone\"][m.month()]:isArray(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},proto$1.monthsParse=function(monthName,format,strict){var i,mom,regex;if(this._monthsParseExact)return handleStrictParse.call(this,monthName,format,strict);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),i=0;i&lt;12;i++){if(mom=createUTC([2e3,i]),strict&amp;&amp;!this._longMonthsParse[i]&amp;&amp;(this._longMonthsParse[i]=new RegExp(\"^\"+this.months(mom,\"\").replace(\".\",\"\")+\"$\",\"i\"),this._shortMonthsParse[i]=new RegExp(\"^\"+this.monthsShort(mom,\"\").replace(\".\",\"\")+\"$\",\"i\")),strict||this._monthsParse[i]||(regex=\"^\"+this.months(mom,\"\")+\"|^\"+this.monthsShort(mom,\"\"),this._monthsParse[i]=new RegExp(regex.replace(\".\",\"\"),\"i\")),strict&amp;&amp;\"MMMM\"===format&amp;&amp;this._longMonthsParse[i].test(monthName))return i;if(strict&amp;&amp;\"MMM\"===format&amp;&amp;this._shortMonthsParse[i].test(monthName))return i;if(!strict&amp;&amp;this._monthsParse[i].test(monthName))return i}},proto$1.monthsRegex=function(isStrict){return this._monthsParseExact?(hasOwnProp(this,\"_monthsRegex\")||computeMonthsParse.call(this),isStrict?this._monthsStrictRegex:this._monthsRegex):(hasOwnProp(this,\"_monthsRegex\")||(this._monthsRegex=defaultMonthsRegex),this._monthsStrictRegex&amp;&amp;isStrict?this._monthsStrictRegex:this._monthsRegex)},proto$1.monthsShortRegex=function(isStrict){return this._monthsParseExact?(hasOwnProp(this,\"_monthsRegex\")||computeMonthsParse.call(this),isStrict?this._monthsShortStrictRegex:this._monthsShortRegex):(hasOwnProp(this,\"_monthsShortRegex\")||(this._monthsShortRegex=defaultMonthsShortRegex),this._monthsShortStrictRegex&amp;&amp;isStrict?this._monthsShortStrictRegex:this._monthsShortRegex)},proto$1.week=function(mom){return weekOfYear(mom,this._week.dow,this._week.doy).week},proto$1.firstDayOfYear=function(){return this._week.doy},proto$1.firstDayOfWeek=function(){return this._week.dow},proto$1.weekdays=function(m,format){var weekdays=isArray(this._weekdays)?this._weekdays:this._weekdays[m&amp;&amp;!0!==m&amp;&amp;this._weekdays.isFormat.test(format)?\"format\":\"standalone\"];return!0===m?shiftWeekdays(weekdays,this._week.dow):m?weekdays[m.day()]:weekdays},proto$1.weekdaysMin=function(m){return!0===m?shiftWeekdays(this._weekdaysMin,this._week.dow):m?this._weekdaysMin[m.day()]:this._weekdaysMin},proto$1.weekdaysShort=function(m){return!0===m?shiftWeekdays(this._weekdaysShort,this._week.dow):m?this._weekdaysShort[m.day()]:this._weekdaysShort},proto$1.weekdaysParse=function(weekdayName,format,strict){var i,mom,regex;if(this._weekdaysParseExact)return handleStrictParse$1.call(this,weekdayName,format,strict);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),i=0;i&lt;7;i++){if(mom=createUTC([2e3,1]).day(i),strict&amp;&amp;!this._fullWeekdaysParse[i]&amp;&amp;(this._fullWeekdaysParse[i]=new RegExp(\"^\"+this.weekdays(mom,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._shortWeekdaysParse[i]=new RegExp(\"^\"+this.weekdaysShort(mom,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._minWeekdaysParse[i]=new RegExp(\"^\"+this.weekdaysMin(mom,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\")),this._weekdaysParse[i]||(regex=\"^\"+this.weekdays(mom,\"\")+\"|^\"+this.weekdaysShort(mom,\"\")+\"|^\"+this.weekdaysMin(mom,\"\"),this._weekdaysParse[i]=new RegExp(regex.replace(\".\",\"\"),\"i\")),strict&amp;&amp;\"dddd\"===format&amp;&amp;this._fullWeekdaysParse[i].test(weekdayName))return i;if(strict&amp;&amp;\"ddd\"===format&amp;&amp;this._shortWeekdaysParse[i].test(weekdayName))return i;if(strict&amp;&amp;\"dd\"===format&amp;&amp;this._minWeekdaysParse[i].test(weekdayName))return i;if(!strict&amp;&amp;this._weekdaysParse[i].test(weekdayName))return i}},proto$1.weekdaysRegex=function(isStrict){return this._weekdaysParseExact?(hasOwnProp(this,\"_weekdaysRegex\")||computeWeekdaysParse.call(this),isStrict?this._weekdaysStrictRegex:this._weekdaysRegex):(hasOwnProp(this,\"_weekdaysRegex\")||(this._weekdaysRegex=defaultWeekdaysRegex),this._weekdaysStrictRegex&amp;&amp;isStrict?this._weekdaysStrictRegex:this._weekdaysRegex)},proto$1.weekdaysShortRegex=function(isStrict){return this._weekdaysParseExact?(hasOwnProp(this,\"_weekdaysRegex\")||computeWeekdaysParse.call(this),isStrict?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(hasOwnProp(this,\"_weekdaysShortRegex\")||(this._weekdaysShortRegex=defaultWeekdaysShortRegex),this._weekdaysShortStrictRegex&amp;&amp;isStrict?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},proto$1.weekdaysMinRegex=function(isStrict){return this._weekdaysParseExact?(hasOwnProp(this,\"_weekdaysRegex\")||computeWeekdaysParse.call(this),isStrict?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(hasOwnProp(this,\"_weekdaysMinRegex\")||(this._weekdaysMinRegex=defaultWeekdaysMinRegex),this._weekdaysMinStrictRegex&amp;&amp;isStrict?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},proto$1.isPM=function(input){return\"p\"===(input+\"\").toLowerCase().charAt(0)},proto$1.meridiem=function(hours,minutes,isLower){return hours&gt;11?isLower?\"pm\":\"PM\":isLower?\"am\":\"AM\"},getSetGlobalLocale(\"en\",{eras:[{since:\"0001-01-01\",until:1/0,offset:1,name:\"Anno Domini\",narrow:\"AD\",abbr:\"AD\"},{since:\"0000-12-31\",until:-1/0,offset:1,name:\"Before Christ\",narrow:\"BC\",abbr:\"BC\"}],dayOfMonthOrdinalParse:/\\d{1,2}(th|st|nd|rd)/,ordinal:function(number){var b=number%10;return number+(1===toInt(number%100/10)?\"th\":1===b?\"st\":2===b?\"nd\":3===b?\"rd\":\"th\")}}),hooks.lang=deprecate(\"moment.lang is deprecated. Use moment.locale instead.\",getSetGlobalLocale),hooks.langData=deprecate(\"moment.langData is deprecated. Use moment.localeData instead.\",getLocale);var mathAbs=Math.abs;function addSubtract$1(duration,input,value,direction){var other=createDuration(input,value);return duration._milliseconds+=direction*other._milliseconds,duration._days+=direction*other._days,duration._months+=direction*other._months,duration._bubble()}function absCeil(number){return number&lt;0?Math.floor(number):Math.ceil(number)}function daysToMonths(days){return 4800*days/146097}function monthsToDays(months){return 146097*months/4800}function makeAs(alias){return function(){return this.as(alias)}}var asMilliseconds=makeAs(\"ms\"),asSeconds=makeAs(\"s\"),asMinutes=makeAs(\"m\"),asHours=makeAs(\"h\"),asDays=makeAs(\"d\"),asWeeks=makeAs(\"w\"),asMonths=makeAs(\"M\"),asQuarters=makeAs(\"Q\"),asYears=makeAs(\"y\");function makeGetter(name){return function(){return this.isValid()?this._data[name]:NaN}}var milliseconds=makeGetter(\"milliseconds\"),seconds=makeGetter(\"seconds\"),minutes=makeGetter(\"minutes\"),hours=makeGetter(\"hours\"),days=makeGetter(\"days\"),months=makeGetter(\"months\"),years=makeGetter(\"years\"),round=Math.round,thresholds={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function substituteTimeAgo(string,number,withoutSuffix,isFuture,locale){return locale.relativeTime(number||1,!!withoutSuffix,string,isFuture)}var abs$1=Math.abs;function sign(x){return(x&gt;0)-(x&lt;0)||+x}function toISOString$1(){if(!this.isValid())return this.localeData().invalidDate();var minutes,hours,years,s,totalSign,ymSign,daysSign,hmsSign,seconds=abs$1(this._milliseconds)/1e3,days=abs$1(this._days),months=abs$1(this._months),total=this.asSeconds();return total?(minutes=absFloor(seconds/60),hours=absFloor(minutes/60),seconds%=60,minutes%=60,years=absFloor(months/12),months%=12,s=seconds?seconds.toFixed(3).replace(/\\.?0+$/,\"\"):\"\",totalSign=total&lt;0?\"-\":\"\",ymSign=sign(this._months)!==sign(total)?\"-\":\"\",daysSign=sign(this._days)!==sign(total)?\"-\":\"\",hmsSign=sign(this._milliseconds)!==sign(total)?\"-\":\"\",totalSign+\"P\"+(years?ymSign+years+\"Y\":\"\")+(months?ymSign+months+\"M\":\"\")+(days?daysSign+days+\"D\":\"\")+(hours||minutes||seconds?\"T\":\"\")+(hours?hmsSign+hours+\"H\":\"\")+(minutes?hmsSign+minutes+\"M\":\"\")+(seconds?hmsSign+s+\"S\":\"\")):\"P0D\"}var proto$2=Duration.prototype;return proto$2.isValid=function(){return this._isValid},proto$2.abs=function(){var data=this._data;return this._milliseconds=mathAbs(this._milliseconds),this._days=mathAbs(this._days),this._months=mathAbs(this._months),data.milliseconds=mathAbs(data.milliseconds),data.seconds=mathAbs(data.seconds),data.minutes=mathAbs(data.minutes),data.hours=mathAbs(data.hours),data.months=mathAbs(data.months),data.years=mathAbs(data.years),this},proto$2.add=function(input,value){return addSubtract$1(this,input,value,1)},proto$2.subtract=function(input,value){return addSubtract$1(this,input,value,-1)},proto$2.as=function(units){if(!this.isValid())return NaN;var days,months,milliseconds=this._milliseconds;if(\"month\"===(units=normalizeUnits(units))||\"quarter\"===units||\"year\"===units)switch(days=this._days+milliseconds/864e5,months=this._months+daysToMonths(days),units){case\"month\":return months;case\"quarter\":return months/3;case\"year\":return months/12}else switch(days=this._days+Math.round(monthsToDays(this._months)),units){case\"week\":return days/7+milliseconds/6048e5;case\"day\":return days+milliseconds/864e5;case\"hour\":return 24*days+milliseconds/36e5;case\"minute\":return 1440*days+milliseconds/6e4;case\"second\":return 86400*days+milliseconds/1e3;case\"millisecond\":return Math.floor(864e5*days)+milliseconds;default:throw new Error(\"Unknown unit \"+units)}},proto$2.asMilliseconds=asMilliseconds,proto$2.asSeconds=asSeconds,proto$2.asMinutes=asMinutes,proto$2.asHours=asHours,proto$2.asDays=asDays,proto$2.asWeeks=asWeeks,proto$2.asMonths=asMonths,proto$2.asQuarters=asQuarters,proto$2.asYears=asYears,proto$2.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*toInt(this._months/12):NaN},proto$2._bubble=function(){var seconds,minutes,hours,years,monthsFromDays,milliseconds=this._milliseconds,days=this._days,months=this._months,data=this._data;return milliseconds&gt;=0&amp;&amp;days&gt;=0&amp;&amp;months&gt;=0||milliseconds&lt;=0&amp;&amp;days&lt;=0&amp;&amp;months&lt;=0||(milliseconds+=864e5*absCeil(monthsToDays(months)+days),days=0,months=0),data.milliseconds=milliseconds%1e3,seconds=absFloor(milliseconds/1e3),data.seconds=seconds%60,minutes=absFloor(seconds/60),data.minutes=minutes%60,hours=absFloor(minutes/60),data.hours=hours%24,days+=absFloor(hours/24),monthsFromDays=absFloor(daysToMonths(days)),months+=monthsFromDays,days-=absCeil(monthsToDays(monthsFromDays)),years=absFloor(months/12),months%=12,data.days=days,data.months=months,data.years=years,this},proto$2.clone=function(){return createDuration(this)},proto$2.get=function(units){return units=normalizeUnits(units),this.isValid()?this[units+\"s\"]():NaN},proto$2.milliseconds=milliseconds,proto$2.seconds=seconds,proto$2.minutes=minutes,proto$2.hours=hours,proto$2.days=days,proto$2.weeks=function(){return absFloor(this.days()/7)},proto$2.months=months,proto$2.years=years,proto$2.humanize=function(argWithSuffix,argThresholds){if(!this.isValid())return this.localeData().invalidDate();var locale,output,withSuffix=!1,th=thresholds;return\"object\"==typeof argWithSuffix&amp;&amp;(argThresholds=argWithSuffix,argWithSuffix=!1),\"boolean\"==typeof argWithSuffix&amp;&amp;(withSuffix=argWithSuffix),\"object\"==typeof argThresholds&amp;&amp;(th=Object.assign({},thresholds,argThresholds),null!=argThresholds.s&amp;&amp;null==argThresholds.ss&amp;&amp;(th.ss=argThresholds.s-1)),locale=this.localeData(),output=function(posNegDuration,withoutSuffix,thresholds,locale){var duration=createDuration(posNegDuration).abs(),seconds=round(duration.as(\"s\")),minutes=round(duration.as(\"m\")),hours=round(duration.as(\"h\")),days=round(duration.as(\"d\")),months=round(duration.as(\"M\")),weeks=round(duration.as(\"w\")),years=round(duration.as(\"y\")),a=seconds&lt;=thresholds.ss&amp;&amp;[\"s\",seconds]||seconds&lt;thresholds.s&amp;&amp;[\"ss\",seconds]||minutes&lt;=1&amp;&amp;[\"m\"]||minutes&lt;thresholds.m&amp;&amp;[\"mm\",minutes]||hours&lt;=1&amp;&amp;[\"h\"]||hours&lt;thresholds.h&amp;&amp;[\"hh\",hours]||days&lt;=1&amp;&amp;[\"d\"]||days&lt;thresholds.d&amp;&amp;[\"dd\",days];return null!=thresholds.w&amp;&amp;(a=a||weeks&lt;=1&amp;&amp;[\"w\"]||weeks&lt;thresholds.w&amp;&amp;[\"ww\",weeks]),(a=a||months&lt;=1&amp;&amp;[\"M\"]||months&lt;thresholds.M&amp;&amp;[\"MM\",months]||years&lt;=1&amp;&amp;[\"y\"]||[\"yy\",years])[2]=withoutSuffix,a[3]=+posNegDuration&gt;0,a[4]=locale,substituteTimeAgo.apply(null,a)}(this,!withSuffix,th,locale),withSuffix&amp;&amp;(output=locale.pastFuture(+this,output)),locale.postformat(output)},proto$2.toISOString=toISOString$1,proto$2.toString=toISOString$1,proto$2.toJSON=toISOString$1,proto$2.locale=locale,proto$2.localeData=localeData,proto$2.toIsoString=deprecate(\"toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)\",toISOString$1),proto$2.lang=lang,addFormatToken(\"X\",0,0,\"unix\"),addFormatToken(\"x\",0,0,\"valueOf\"),addRegexToken(\"x\",matchSigned),addRegexToken(\"X\",/[+-]?\\d+(\\.\\d{1,3})?/),addParseToken(\"X\",(function(input,array,config){config._d=new Date(1e3*parseFloat(input))})),addParseToken(\"x\",(function(input,array,config){config._d=new Date(toInt(input))})),hooks.version=\"2.29.1\",hookCallback=createLocal,hooks.fn=proto,hooks.min=function(){var args=[].slice.call(arguments,0);return pickBy(\"isBefore\",args)},hooks.max=function(){var args=[].slice.call(arguments,0);return pickBy(\"isAfter\",args)},hooks.now=function(){return Date.now?Date.now():+new Date},hooks.utc=createUTC,hooks.unix=function(input){return createLocal(1e3*input)},hooks.months=function(format,index){return listMonthsImpl(format,index,\"months\")},hooks.isDate=isDate,hooks.locale=getSetGlobalLocale,hooks.invalid=createInvalid,hooks.duration=createDuration,hooks.isMoment=isMoment,hooks.weekdays=function(localeSorted,format,index){return listWeekdaysImpl(localeSorted,format,index,\"weekdays\")},hooks.parseZone=function(){return createLocal.apply(null,arguments).parseZone()},hooks.localeData=getLocale,hooks.isDuration=isDuration,hooks.monthsShort=function(format,index){return listMonthsImpl(format,index,\"monthsShort\")},hooks.weekdaysMin=function(localeSorted,format,index){return listWeekdaysImpl(localeSorted,format,index,\"weekdaysMin\")},hooks.defineLocale=defineLocale,hooks.updateLocale=function(name,config){if(null!=config){var locale,tmpLocale,parentConfig=baseConfig;null!=locales[name]&amp;&amp;null!=locales[name].parentLocale?locales[name].set(mergeConfigs(locales[name]._config,config)):(null!=(tmpLocale=loadLocale(name))&amp;&amp;(parentConfig=tmpLocale._config),config=mergeConfigs(parentConfig,config),null==tmpLocale&amp;&amp;(config.abbr=name),(locale=new Locale(config)).parentLocale=locales[name],locales[name]=locale),getSetGlobalLocale(name)}else null!=locales[name]&amp;&amp;(null!=locales[name].parentLocale?(locales[name]=locales[name].parentLocale,name===getSetGlobalLocale()&amp;&amp;getSetGlobalLocale(name)):null!=locales[name]&amp;&amp;delete locales[name]);return locales[name]},hooks.locales=function(){return keys(locales)},hooks.weekdaysShort=function(localeSorted,format,index){return listWeekdaysImpl(localeSorted,format,index,\"weekdaysShort\")},hooks.normalizeUnits=normalizeUnits,hooks.relativeTimeRounding=function(roundingFunction){return void 0===roundingFunction?round:\"function\"==typeof roundingFunction&amp;&amp;(round=roundingFunction,!0)},hooks.relativeTimeThreshold=function(threshold,limit){return void 0!==thresholds[threshold]&amp;&amp;(void 0===limit?thresholds[threshold]:(thresholds[threshold]=limit,\"s\"===threshold&amp;&amp;(thresholds.ss=limit-1),!0))},hooks.calendarFormat=function(myMoment,now){var diff=myMoment.diff(now,\"days\",!0);return diff&lt;-6?\"sameElse\":diff&lt;-1?\"lastWeek\":diff&lt;0?\"lastDay\":diff&lt;1?\"sameDay\":diff&lt;2?\"nextDay\":diff&lt;7?\"nextWeek\":\"sameElse\"},hooks.prototype=proto,hooks.HTML5_FMT={DATETIME_LOCAL:\"YYYY-MM-DDTHH:mm\",DATETIME_LOCAL_SECONDS:\"YYYY-MM-DDTHH:mm:ss\",DATETIME_LOCAL_MS:\"YYYY-MM-DDTHH:mm:ss.SSS\",DATE:\"YYYY-MM-DD\",TIME:\"HH:mm\",TIME_SECONDS:\"HH:mm:ss\",TIME_MS:\"HH:mm:ss.SSS\",WEEK:\"GGGG-[W]WW\",MONTH:\"YYYY-MM\"},hooks}()}).call(this,__webpack_require__(156)(module))},function(module,exports,__webpack_require__){module.exports=__webpack_require__(176)()},function(module,exports,__webpack_require__){\"use strict\";var memo,isOldIE=function(){return void 0===memo&amp;&amp;(memo=Boolean(window&amp;&amp;document&amp;&amp;document.all&amp;&amp;!window.atob)),memo},getTarget=function(){var memo={};return function(target){if(void 0===memo[target]){var styleTarget=document.querySelector(target);if(window.HTMLIFrameElement&amp;&amp;styleTarget instanceof window.HTMLIFrameElement)try{styleTarget=styleTarget.contentDocument.head}catch(e){styleTarget=null}memo[target]=styleTarget}return memo[target]}}(),stylesInDom=[];function getIndexByIdentifier(identifier){for(var result=-1,i=0;i&lt;stylesInDom.length;i++)if(stylesInDom[i].identifier===identifier){result=i;break}return result}function modulesToDom(list,options){for(var idCountMap={},identifiers=[],i=0;i&lt;list.length;i++){var item=list[i],id=options.base?item[0]+options.base:item[0],count=idCountMap[id]||0,identifier=\"\".concat(id,\" \").concat(count);idCountMap[id]=count+1;var index=getIndexByIdentifier(identifier),obj={css:item[1],media:item[2],sourceMap:item[3]};-1!==index?(stylesInDom[index].references++,stylesInDom[index].updater(obj)):stylesInDom.push({identifier:identifier,updater:addStyle(obj,options),references:1}),identifiers.push(identifier)}return identifiers}function insertStyleElement(options){var style=document.createElement(\"style\"),attributes=options.attributes||{};if(void 0===attributes.nonce){var nonce=__webpack_require__.nc;nonce&amp;&amp;(attributes.nonce=nonce)}if(Object.keys(attributes).forEach((function(key){style.setAttribute(key,attributes[key])})),\"function\"==typeof options.insert)options.insert(style);else{var target=getTarget(options.insert||\"head\");if(!target)throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");target.appendChild(style)}return style}var textStore,replaceText=(textStore=[],function(index,replacement){return textStore[index]=replacement,textStore.filter(Boolean).join(\"\\n\")});function applyToSingletonTag(style,index,remove,obj){var css=remove?\"\":obj.media?\"@media \".concat(obj.media,\" {\").concat(obj.css,\"}\"):obj.css;if(style.styleSheet)style.styleSheet.cssText=replaceText(index,css);else{var cssNode=document.createTextNode(css),childNodes=style.childNodes;childNodes[index]&amp;&amp;style.removeChild(childNodes[index]),childNodes.length?style.insertBefore(cssNode,childNodes[index]):style.appendChild(cssNode)}}function applyToTag(style,options,obj){var css=obj.css,media=obj.media,sourceMap=obj.sourceMap;if(media?style.setAttribute(\"media\",media):style.removeAttribute(\"media\"),sourceMap&amp;&amp;btoa&amp;&amp;(css+=\"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))),\" */\")),style.styleSheet)style.styleSheet.cssText=css;else{for(;style.firstChild;)style.removeChild(style.firstChild);style.appendChild(document.createTextNode(css))}}var singleton=null,singletonCounter=0;function addStyle(obj,options){var style,update,remove;if(options.singleton){var styleIndex=singletonCounter++;style=singleton||(singleton=insertStyleElement(options)),update=applyToSingletonTag.bind(null,style,styleIndex,!1),remove=applyToSingletonTag.bind(null,style,styleIndex,!0)}else style=insertStyleElement(options),update=applyToTag.bind(null,style,options),remove=function(){!function(style){if(null===style.parentNode)return!1;style.parentNode.removeChild(style)}(style)};return update(obj),function(newObj){if(newObj){if(newObj.css===obj.css&amp;&amp;newObj.media===obj.media&amp;&amp;newObj.sourceMap===obj.sourceMap)return;update(obj=newObj)}else remove()}}module.exports=function(list,options){(options=options||{}).singleton||\"boolean\"==typeof options.singleton||(options.singleton=isOldIE());var lastIdentifiers=modulesToDom(list=list||[],options);return function(newList){if(newList=newList||[],\"[object Array]\"===Object.prototype.toString.call(newList)){for(var i=0;i&lt;lastIdentifiers.length;i++){var index=getIndexByIdentifier(lastIdentifiers[i]);stylesInDom[index].references--}for(var newLastIdentifiers=modulesToDom(newList,options),_i=0;_i&lt;lastIdentifiers.length;_i++){var _index=getIndexByIdentifier(lastIdentifiers[_i]);0===stylesInDom[_index].references&amp;&amp;(stylesInDom[_index].updater(),stylesInDom.splice(_index,1))}lastIdentifiers=newLastIdentifiers}}}},function(module,exports,__webpack_require__){\"use strict\";module.exports=function(useSourceMap){var list=[];return list.toString=function(){return this.map((function(item){var content=function(item,useSourceMap){var content=item[1]||\"\",cssMapping=item[3];if(!cssMapping)return content;if(useSourceMap&amp;&amp;\"function\"==typeof btoa){var sourceMapping=(sourceMap=cssMapping,base64=btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))),data=\"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64),\"/*# \".concat(data,\" */\")),sourceURLs=cssMapping.sources.map((function(source){return\"/*# sourceURL=\".concat(cssMapping.sourceRoot||\"\").concat(source,\" */\")}));return[content].concat(sourceURLs).concat([sourceMapping]).join(\"\\n\")}var sourceMap,base64,data;return[content].join(\"\\n\")}(item,useSourceMap);return item[2]?\"@media \".concat(item[2],\" {\").concat(content,\"}\"):content})).join(\"\")},list.i=function(modules,mediaQuery,dedupe){\"string\"==typeof modules&amp;&amp;(modules=[[null,modules,\"\"]]);var alreadyImportedModules={};if(dedupe)for(var i=0;i&lt;this.length;i++){var id=this[i][0];null!=id&amp;&amp;(alreadyImportedModules[id]=!0)}for(var _i=0;_i&lt;modules.length;_i++){var item=[].concat(modules[_i]);dedupe&amp;&amp;alreadyImportedModules[item[0]]||(mediaQuery&amp;&amp;(item[2]?item[2]=\"\".concat(mediaQuery,\" and \").concat(item[2]):item[2]=mediaQuery),list.push(item))}},list}},function(module,exports,__webpack_require__){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_RESULT__;!function(factory){if(void 0===(__WEBPACK_AMD_DEFINE_RESULT__=\"function\"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=factory)?__WEBPACK_AMD_DEFINE_FACTORY__.call(exports,__webpack_require__,exports,module):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__),!0,module.exports=factory(),!!0){var OldCookies=window.Cookies,api=window.Cookies=factory();api.noConflict=function(){return window.Cookies=OldCookies,api}}}((function(){function extend(){for(var i=0,result={};i&lt;arguments.length;i++){var attributes=arguments[i];for(var key in attributes)result[key]=attributes[key]}return result}function decode(s){return s.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function init(converter){function api(){}function set(key,value,attributes){if(\"undefined\"!=typeof document){\"number\"==typeof(attributes=extend({path:\"/\"},api.defaults,attributes)).expires&amp;&amp;(attributes.expires=new Date(1*new Date+864e5*attributes.expires)),attributes.expires=attributes.expires?attributes.expires.toUTCString():\"\";try{var result=JSON.stringify(value);/^[\\{\\[]/.test(result)&amp;&amp;(value=result)}catch(e){}value=converter.write?converter.write(value,key):encodeURIComponent(String(value)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),key=encodeURIComponent(String(key)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var stringifiedAttributes=\"\";for(var attributeName in attributes)attributes[attributeName]&amp;&amp;(stringifiedAttributes+=\"; \"+attributeName,!0!==attributes[attributeName]&amp;&amp;(stringifiedAttributes+=\"=\"+attributes[attributeName].split(\";\")[0]));return document.cookie=key+\"=\"+value+stringifiedAttributes}}function get(key,json){if(\"undefined\"!=typeof document){for(var jar={},cookies=document.cookie?document.cookie.split(\"; \"):[],i=0;i&lt;cookies.length;i++){var parts=cookies[i].split(\"=\"),cookie=parts.slice(1).join(\"=\");json||'\"'!==cookie.charAt(0)||(cookie=cookie.slice(1,-1));try{var name=decode(parts[0]);if(cookie=(converter.read||converter)(cookie,name)||decode(cookie),json)try{cookie=JSON.parse(cookie)}catch(e){}if(jar[name]=cookie,key===name)break}catch(e){}}return key?jar[key]:jar}}return api.set=set,api.get=function(key){return get(key,!1)},api.getJSON=function(key){return get(key,!0)},api.remove=function(key,attributes){set(key,\"\",extend(attributes,{expires:-1}))},api.defaults={},api.withConverter=init,api}((function(){}))}))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"af\",{months:\"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember\".split(\"_\"),monthsShort:\"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des\".split(\"_\"),weekdays:\"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag\".split(\"_\"),weekdaysShort:\"Son_Maa_Din_Woe_Don_Vry_Sat\".split(\"_\"),weekdaysMin:\"So_Ma_Di_Wo_Do_Vr_Sa\".split(\"_\"),meridiemParse:/vm|nm/i,isPM:function(input){return/^nm$/i.test(input)},meridiem:function(hours,minutes,isLower){return hours&lt;12?isLower?\"vm\":\"VM\":isLower?\"nm\":\"NM\"},longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Vandag om] LT\",nextDay:\"[MÃ´re om] LT\",nextWeek:\"dddd [om] LT\",lastDay:\"[Gister om] LT\",lastWeek:\"[Laas] dddd [om] LT\",sameElse:\"L\"},relativeTime:{future:\"oor %s\",past:\"%s gelede\",s:\"'n paar sekondes\",ss:\"%d sekondes\",m:\"'n minuut\",mm:\"%d minute\",h:\"'n uur\",hh:\"%d ure\",d:\"'n dag\",dd:\"%d dae\",M:\"'n maand\",MM:\"%d maande\",y:\"'n jaar\",yy:\"%d jaar\"},dayOfMonthOrdinalParse:/\\d{1,2}(ste|de)/,ordinal:function(number){return number+(1===number||8===number||number&gt;=20?\"ste\":\"de\")},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var symbolMap={1:\"Ù¡\",2:\"Ù¢\",3:\"Ù£\",4:\"Ù¤\",5:\"Ù¥\",6:\"Ù¦\",7:\"Ù§\",8:\"Ù¨\",9:\"Ù©\",0:\"Ù&nbsp;\"},numberMap={\"Ù¡\":\"1\",\"Ù¢\":\"2\",\"Ù£\":\"3\",\"Ù¤\":\"4\",\"Ù¥\":\"5\",\"Ù¦\":\"6\",\"Ù§\":\"7\",\"Ù¨\":\"8\",\"Ù©\":\"9\",\"Ù&nbsp;\":\"0\"},pluralForm=function(n){return 0===n?0:1===n?1:2===n?2:n%100&gt;=3&amp;&amp;n%100&lt;=10?3:n%100&gt;=11?4:5},plurals={s:[\"Ø£Ù‚Ù„ Ù…Ù† Ø«Ø§Ù†ÙŠØ©\",\"Ø«Ø§Ù†ÙŠØ© ÙˆØ§Ø­Ø¯Ø©\",[\"Ø«Ø§Ù†ÙŠØªØ§Ù†\",\"Ø«Ø§Ù†ÙŠØªÙŠÙ†\"],\"%d Ø«ÙˆØ§Ù†\",\"%d Ø«Ø§Ù†ÙŠØ©\",\"%d Ø«Ø§Ù†ÙŠØ©\"],m:[\"Ø£Ù‚Ù„ Ù…Ù† Ø¯Ù‚ÙŠÙ‚Ø©\",\"Ø¯Ù‚ÙŠÙ‚Ø© ÙˆØ§Ø­Ø¯Ø©\",[\"Ø¯Ù‚ÙŠÙ‚ØªØ§Ù†\",\"Ø¯Ù‚ÙŠÙ‚ØªÙŠÙ†\"],\"%d Ø¯Ù‚Ø§Ø¦Ù‚\",\"%d Ø¯Ù‚ÙŠÙ‚Ø©\",\"%d Ø¯Ù‚ÙŠÙ‚Ø©\"],h:[\"Ø£Ù‚Ù„ Ù…Ù† Ø³Ø§Ø¹Ø©\",\"Ø³Ø§Ø¹Ø© ÙˆØ§Ø­Ø¯Ø©\",[\"Ø³Ø§Ø¹ØªØ§Ù†\",\"Ø³Ø§Ø¹ØªÙŠÙ†\"],\"%d Ø³Ø§Ø¹Ø§Øª\",\"%d Ø³Ø§Ø¹Ø©\",\"%d Ø³Ø§Ø¹Ø©\"],d:[\"Ø£Ù‚Ù„ Ù…Ù† ÙŠÙˆÙ…\",\"ÙŠÙˆÙ… ÙˆØ§Ø­Ø¯\",[\"ÙŠÙˆÙ…Ø§Ù†\",\"ÙŠÙˆÙ…ÙŠÙ†\"],\"%d Ø£ÙŠØ§Ù…\",\"%d ÙŠÙˆÙ…Ù‹Ø§\",\"%d ÙŠÙˆÙ…\"],M:[\"Ø£Ù‚Ù„ Ù…Ù† Ø´Ù‡Ø±\",\"Ø´Ù‡Ø± ÙˆØ§Ø­Ø¯\",[\"Ø´Ù‡Ø±Ø§Ù†\",\"Ø´Ù‡Ø±ÙŠÙ†\"],\"%d Ø£Ø´Ù‡Ø±\",\"%d Ø´Ù‡Ø±Ø§\",\"%d Ø´Ù‡Ø±\"],y:[\"Ø£Ù‚Ù„ Ù…Ù† Ø¹Ø§Ù…\",\"Ø¹Ø§Ù… ÙˆØ§Ø­Ø¯\",[\"Ø¹Ø§Ù…Ø§Ù†\",\"Ø¹Ø§Ù…ÙŠÙ†\"],\"%d Ø£Ø¹ÙˆØ§Ù…\",\"%d Ø¹Ø§Ù…Ù‹Ø§\",\"%d Ø¹Ø§Ù…\"]},pluralize=function(u){return function(number,withoutSuffix,string,isFuture){var f=pluralForm(number),str=plurals[u][pluralForm(number)];return 2===f&amp;&amp;(str=str[withoutSuffix?0:1]),str.replace(/%d/i,number)}},months=[\"ÙŠÙ†Ø§ÙŠØ±\",\"ÙØ¨Ø±Ø§ÙŠØ±\",\"Ù…Ø§Ø±Ø³\",\"Ø£Ø¨Ø±ÙŠÙ„\",\"Ù…Ø§ÙŠÙˆ\",\"ÙŠÙˆÙ†ÙŠÙˆ\",\"ÙŠÙˆÙ„ÙŠÙˆ\",\"Ø£ØºØ³Ø·Ø³\",\"Ø³Ø¨ØªÙ…Ø¨Ø±\",\"Ø£ÙƒØªÙˆØ¨Ø±\",\"Ù†ÙˆÙÙ…Ø¨Ø±\",\"Ø¯ÙŠØ³Ù…Ø¨Ø±\"];moment.defineLocale(\"ar\",{months:months,monthsShort:months,weekdays:\"Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª\".split(\"_\"),weekdaysShort:\"Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª\".split(\"_\"),weekdaysMin:\"Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"D/â€M/â€YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/Øµ|Ù…/,isPM:function(input){return\"Ù…\"===input},meridiem:function(hour,minute,isLower){return hour&lt;12?\"Øµ\":\"Ù…\"},calendar:{sameDay:\"[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextDay:\"[ØºØ¯Ù‹Ø§ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextWeek:\"dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastDay:\"[Ø£Ù…Ø³ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastWeek:\"dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",sameElse:\"L\"},relativeTime:{future:\"Ø¨Ø¹Ø¯ %s\",past:\"Ù…Ù†Ø° %s\",s:pluralize(\"s\"),ss:pluralize(\"s\"),m:pluralize(\"m\"),mm:pluralize(\"m\"),h:pluralize(\"h\"),hh:pluralize(\"h\"),d:pluralize(\"d\"),dd:pluralize(\"d\"),M:pluralize(\"M\"),MM:pluralize(\"M\"),y:pluralize(\"y\"),yy:pluralize(\"y\")},preparse:function(string){return string.replace(/[Ù¡Ù¢Ù£Ù¤Ù¥Ù¦Ù§Ù¨Ù©Ù&nbsp;]/g,(function(match){return numberMap[match]})).replace(/ØŒ/g,\",\")},postformat:function(string){return string.replace(/\\d/g,(function(match){return symbolMap[match]})).replace(/,/g,\"ØŒ\")},week:{dow:6,doy:12}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var pluralForm=function(n){return 0===n?0:1===n?1:2===n?2:n%100&gt;=3&amp;&amp;n%100&lt;=10?3:n%100&gt;=11?4:5},plurals={s:[\"Ø£Ù‚Ù„ Ù…Ù† Ø«Ø§Ù†ÙŠØ©\",\"Ø«Ø§Ù†ÙŠØ© ÙˆØ§Ø­Ø¯Ø©\",[\"Ø«Ø§Ù†ÙŠØªØ§Ù†\",\"Ø«Ø§Ù†ÙŠØªÙŠÙ†\"],\"%d Ø«ÙˆØ§Ù†\",\"%d Ø«Ø§Ù†ÙŠØ©\",\"%d Ø«Ø§Ù†ÙŠØ©\"],m:[\"Ø£Ù‚Ù„ Ù…Ù† Ø¯Ù‚ÙŠÙ‚Ø©\",\"Ø¯Ù‚ÙŠÙ‚Ø© ÙˆØ§Ø­Ø¯Ø©\",[\"Ø¯Ù‚ÙŠÙ‚ØªØ§Ù†\",\"Ø¯Ù‚ÙŠÙ‚ØªÙŠÙ†\"],\"%d Ø¯Ù‚Ø§Ø¦Ù‚\",\"%d Ø¯Ù‚ÙŠÙ‚Ø©\",\"%d Ø¯Ù‚ÙŠÙ‚Ø©\"],h:[\"Ø£Ù‚Ù„ Ù…Ù† Ø³Ø§Ø¹Ø©\",\"Ø³Ø§Ø¹Ø© ÙˆØ§Ø­Ø¯Ø©\",[\"Ø³Ø§Ø¹ØªØ§Ù†\",\"Ø³Ø§Ø¹ØªÙŠÙ†\"],\"%d Ø³Ø§Ø¹Ø§Øª\",\"%d Ø³Ø§Ø¹Ø©\",\"%d Ø³Ø§Ø¹Ø©\"],d:[\"Ø£Ù‚Ù„ Ù…Ù† ÙŠÙˆÙ…\",\"ÙŠÙˆÙ… ÙˆØ§Ø­Ø¯\",[\"ÙŠÙˆÙ…Ø§Ù†\",\"ÙŠÙˆÙ…ÙŠÙ†\"],\"%d Ø£ÙŠØ§Ù…\",\"%d ÙŠÙˆÙ…Ù‹Ø§\",\"%d ÙŠÙˆÙ…\"],M:[\"Ø£Ù‚Ù„ Ù…Ù† Ø´Ù‡Ø±\",\"Ø´Ù‡Ø± ÙˆØ§Ø­Ø¯\",[\"Ø´Ù‡Ø±Ø§Ù†\",\"Ø´Ù‡Ø±ÙŠÙ†\"],\"%d Ø£Ø´Ù‡Ø±\",\"%d Ø´Ù‡Ø±Ø§\",\"%d Ø´Ù‡Ø±\"],y:[\"Ø£Ù‚Ù„ Ù…Ù† Ø¹Ø§Ù…\",\"Ø¹Ø§Ù… ÙˆØ§Ø­Ø¯\",[\"Ø¹Ø§Ù…Ø§Ù†\",\"Ø¹Ø§Ù…ÙŠÙ†\"],\"%d Ø£Ø¹ÙˆØ§Ù…\",\"%d Ø¹Ø§Ù…Ù‹Ø§\",\"%d Ø¹Ø§Ù…\"]},pluralize=function(u){return function(number,withoutSuffix,string,isFuture){var f=pluralForm(number),str=plurals[u][pluralForm(number)];return 2===f&amp;&amp;(str=str[withoutSuffix?0:1]),str.replace(/%d/i,number)}},months=[\"Ø¬Ø§Ù†ÙÙŠ\",\"ÙÙŠÙØ±ÙŠ\",\"Ù…Ø§Ø±Ø³\",\"Ø£ÙØ±ÙŠÙ„\",\"Ù…Ø§ÙŠ\",\"Ø¬ÙˆØ§Ù†\",\"Ø¬ÙˆÙŠÙ„ÙŠØ©\",\"Ø£ÙˆØª\",\"Ø³Ø¨ØªÙ…Ø¨Ø±\",\"Ø£ÙƒØªÙˆØ¨Ø±\",\"Ù†ÙˆÙÙ…Ø¨Ø±\",\"Ø¯ÙŠØ³Ù…Ø¨Ø±\"];moment.defineLocale(\"ar-dz\",{months:months,monthsShort:months,weekdays:\"Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª\".split(\"_\"),weekdaysShort:\"Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª\".split(\"_\"),weekdaysMin:\"Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"D/â€M/â€YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/Øµ|Ù…/,isPM:function(input){return\"Ù…\"===input},meridiem:function(hour,minute,isLower){return hour&lt;12?\"Øµ\":\"Ù…\"},calendar:{sameDay:\"[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextDay:\"[ØºØ¯Ù‹Ø§ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextWeek:\"dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastDay:\"[Ø£Ù…Ø³ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastWeek:\"dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",sameElse:\"L\"},relativeTime:{future:\"Ø¨Ø¹Ø¯ %s\",past:\"Ù…Ù†Ø° %s\",s:pluralize(\"s\"),ss:pluralize(\"s\"),m:pluralize(\"m\"),mm:pluralize(\"m\"),h:pluralize(\"h\"),hh:pluralize(\"h\"),d:pluralize(\"d\"),dd:pluralize(\"d\"),M:pluralize(\"M\"),MM:pluralize(\"M\"),y:pluralize(\"y\"),yy:pluralize(\"y\")},postformat:function(string){return string.replace(/,/g,\"ØŒ\")},week:{dow:0,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"ar-kw\",{months:\"ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±\".split(\"_\"),monthsShort:\"ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±\".split(\"_\"),weekdays:\"Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥ØªÙ†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª\".split(\"_\"),weekdaysShort:\"Ø§Ø­Ø¯_Ø§ØªÙ†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª\".split(\"_\"),weekdaysMin:\"Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextDay:\"[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextWeek:\"dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastDay:\"[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastWeek:\"dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",sameElse:\"L\"},relativeTime:{future:\"ÙÙŠ %s\",past:\"Ù…Ù†Ø° %s\",s:\"Ø«ÙˆØ§Ù†\",ss:\"%d Ø«Ø§Ù†ÙŠØ©\",m:\"Ø¯Ù‚ÙŠÙ‚Ø©\",mm:\"%d Ø¯Ù‚Ø§Ø¦Ù‚\",h:\"Ø³Ø§Ø¹Ø©\",hh:\"%d Ø³Ø§Ø¹Ø§Øª\",d:\"ÙŠÙˆÙ…\",dd:\"%d Ø£ÙŠØ§Ù…\",M:\"Ø´Ù‡Ø±\",MM:\"%d Ø£Ø´Ù‡Ø±\",y:\"Ø³Ù†Ø©\",yy:\"%d Ø³Ù†ÙˆØ§Øª\"},week:{dow:0,doy:12}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var symbolMap={1:\"1\",2:\"2\",3:\"3\",4:\"4\",5:\"5\",6:\"6\",7:\"7\",8:\"8\",9:\"9\",0:\"0\"},pluralForm=function(n){return 0===n?0:1===n?1:2===n?2:n%100&gt;=3&amp;&amp;n%100&lt;=10?3:n%100&gt;=11?4:5},plurals={s:[\"Ø£Ù‚Ù„ Ù…Ù† Ø«Ø§Ù†ÙŠØ©\",\"Ø«Ø§Ù†ÙŠØ© ÙˆØ§Ø­Ø¯Ø©\",[\"Ø«Ø§Ù†ÙŠØªØ§Ù†\",\"Ø«Ø§Ù†ÙŠØªÙŠÙ†\"],\"%d Ø«ÙˆØ§Ù†\",\"%d Ø«Ø§Ù†ÙŠØ©\",\"%d Ø«Ø§Ù†ÙŠØ©\"],m:[\"Ø£Ù‚Ù„ Ù…Ù† Ø¯Ù‚ÙŠÙ‚Ø©\",\"Ø¯Ù‚ÙŠÙ‚Ø© ÙˆØ§Ø­Ø¯Ø©\",[\"Ø¯Ù‚ÙŠÙ‚ØªØ§Ù†\",\"Ø¯Ù‚ÙŠÙ‚ØªÙŠÙ†\"],\"%d Ø¯Ù‚Ø§Ø¦Ù‚\",\"%d Ø¯Ù‚ÙŠÙ‚Ø©\",\"%d Ø¯Ù‚ÙŠÙ‚Ø©\"],h:[\"Ø£Ù‚Ù„ Ù…Ù† Ø³Ø§Ø¹Ø©\",\"Ø³Ø§Ø¹Ø© ÙˆØ§Ø­Ø¯Ø©\",[\"Ø³Ø§Ø¹ØªØ§Ù†\",\"Ø³Ø§Ø¹ØªÙŠÙ†\"],\"%d Ø³Ø§Ø¹Ø§Øª\",\"%d Ø³Ø§Ø¹Ø©\",\"%d Ø³Ø§Ø¹Ø©\"],d:[\"Ø£Ù‚Ù„ Ù…Ù† ÙŠÙˆÙ…\",\"ÙŠÙˆÙ… ÙˆØ§Ø­Ø¯\",[\"ÙŠÙˆÙ…Ø§Ù†\",\"ÙŠÙˆÙ…ÙŠÙ†\"],\"%d Ø£ÙŠØ§Ù…\",\"%d ÙŠÙˆÙ…Ù‹Ø§\",\"%d ÙŠÙˆÙ…\"],M:[\"Ø£Ù‚Ù„ Ù…Ù† Ø´Ù‡Ø±\",\"Ø´Ù‡Ø± ÙˆØ§Ø­Ø¯\",[\"Ø´Ù‡Ø±Ø§Ù†\",\"Ø´Ù‡Ø±ÙŠÙ†\"],\"%d Ø£Ø´Ù‡Ø±\",\"%d Ø´Ù‡Ø±Ø§\",\"%d Ø´Ù‡Ø±\"],y:[\"Ø£Ù‚Ù„ Ù…Ù† Ø¹Ø§Ù…\",\"Ø¹Ø§Ù… ÙˆØ§Ø­Ø¯\",[\"Ø¹Ø§Ù…Ø§Ù†\",\"Ø¹Ø§Ù…ÙŠÙ†\"],\"%d Ø£Ø¹ÙˆØ§Ù…\",\"%d Ø¹Ø§Ù…Ù‹Ø§\",\"%d Ø¹Ø§Ù…\"]},pluralize=function(u){return function(number,withoutSuffix,string,isFuture){var f=pluralForm(number),str=plurals[u][pluralForm(number)];return 2===f&amp;&amp;(str=str[withoutSuffix?0:1]),str.replace(/%d/i,number)}},months=[\"ÙŠÙ†Ø§ÙŠØ±\",\"ÙØ¨Ø±Ø§ÙŠØ±\",\"Ù…Ø§Ø±Ø³\",\"Ø£Ø¨Ø±ÙŠÙ„\",\"Ù…Ø§ÙŠÙˆ\",\"ÙŠÙˆÙ†ÙŠÙˆ\",\"ÙŠÙˆÙ„ÙŠÙˆ\",\"Ø£ØºØ³Ø·Ø³\",\"Ø³Ø¨ØªÙ…Ø¨Ø±\",\"Ø£ÙƒØªÙˆØ¨Ø±\",\"Ù†ÙˆÙÙ…Ø¨Ø±\",\"Ø¯ÙŠØ³Ù…Ø¨Ø±\"];moment.defineLocale(\"ar-ly\",{months:months,monthsShort:months,weekdays:\"Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª\".split(\"_\"),weekdaysShort:\"Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª\".split(\"_\"),weekdaysMin:\"Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"D/â€M/â€YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/Øµ|Ù…/,isPM:function(input){return\"Ù…\"===input},meridiem:function(hour,minute,isLower){return hour&lt;12?\"Øµ\":\"Ù…\"},calendar:{sameDay:\"[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextDay:\"[ØºØ¯Ù‹Ø§ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextWeek:\"dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastDay:\"[Ø£Ù…Ø³ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastWeek:\"dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",sameElse:\"L\"},relativeTime:{future:\"Ø¨Ø¹Ø¯ %s\",past:\"Ù…Ù†Ø° %s\",s:pluralize(\"s\"),ss:pluralize(\"s\"),m:pluralize(\"m\"),mm:pluralize(\"m\"),h:pluralize(\"h\"),hh:pluralize(\"h\"),d:pluralize(\"d\"),dd:pluralize(\"d\"),M:pluralize(\"M\"),MM:pluralize(\"M\"),y:pluralize(\"y\"),yy:pluralize(\"y\")},preparse:function(string){return string.replace(/ØŒ/g,\",\")},postformat:function(string){return string.replace(/\\d/g,(function(match){return symbolMap[match]})).replace(/,/g,\"ØŒ\")},week:{dow:6,doy:12}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"ar-ma\",{months:\"ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±\".split(\"_\"),monthsShort:\"ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±\".split(\"_\"),weekdays:\"Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª\".split(\"_\"),weekdaysShort:\"Ø§Ø­Ø¯_Ø§Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª\".split(\"_\"),weekdaysMin:\"Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextDay:\"[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextWeek:\"dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastDay:\"[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastWeek:\"dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",sameElse:\"L\"},relativeTime:{future:\"ÙÙŠ %s\",past:\"Ù…Ù†Ø° %s\",s:\"Ø«ÙˆØ§Ù†\",ss:\"%d Ø«Ø§Ù†ÙŠØ©\",m:\"Ø¯Ù‚ÙŠÙ‚Ø©\",mm:\"%d Ø¯Ù‚Ø§Ø¦Ù‚\",h:\"Ø³Ø§Ø¹Ø©\",hh:\"%d Ø³Ø§Ø¹Ø§Øª\",d:\"ÙŠÙˆÙ…\",dd:\"%d Ø£ÙŠØ§Ù…\",M:\"Ø´Ù‡Ø±\",MM:\"%d Ø£Ø´Ù‡Ø±\",y:\"Ø³Ù†Ø©\",yy:\"%d Ø³Ù†ÙˆØ§Øª\"},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var symbolMap={1:\"Ù¡\",2:\"Ù¢\",3:\"Ù£\",4:\"Ù¤\",5:\"Ù¥\",6:\"Ù¦\",7:\"Ù§\",8:\"Ù¨\",9:\"Ù©\",0:\"Ù&nbsp;\"},numberMap={\"Ù¡\":\"1\",\"Ù¢\":\"2\",\"Ù£\":\"3\",\"Ù¤\":\"4\",\"Ù¥\":\"5\",\"Ù¦\":\"6\",\"Ù§\":\"7\",\"Ù¨\":\"8\",\"Ù©\":\"9\",\"Ù&nbsp;\":\"0\"};moment.defineLocale(\"ar-sa\",{months:\"ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠÙˆ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆ_Ø£ØºØ³Ø·Ø³_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±\".split(\"_\"),monthsShort:\"ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠÙˆ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆ_Ø£ØºØ³Ø·Ø³_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±\".split(\"_\"),weekdays:\"Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª\".split(\"_\"),weekdaysShort:\"Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª\".split(\"_\"),weekdaysMin:\"Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/Øµ|Ù…/,isPM:function(input){return\"Ù…\"===input},meridiem:function(hour,minute,isLower){return hour&lt;12?\"Øµ\":\"Ù…\"},calendar:{sameDay:\"[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextDay:\"[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextWeek:\"dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastDay:\"[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastWeek:\"dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",sameElse:\"L\"},relativeTime:{future:\"ÙÙŠ %s\",past:\"Ù…Ù†Ø° %s\",s:\"Ø«ÙˆØ§Ù†\",ss:\"%d Ø«Ø§Ù†ÙŠØ©\",m:\"Ø¯Ù‚ÙŠÙ‚Ø©\",mm:\"%d Ø¯Ù‚Ø§Ø¦Ù‚\",h:\"Ø³Ø§Ø¹Ø©\",hh:\"%d Ø³Ø§Ø¹Ø§Øª\",d:\"ÙŠÙˆÙ…\",dd:\"%d Ø£ÙŠØ§Ù…\",M:\"Ø´Ù‡Ø±\",MM:\"%d Ø£Ø´Ù‡Ø±\",y:\"Ø³Ù†Ø©\",yy:\"%d Ø³Ù†ÙˆØ§Øª\"},preparse:function(string){return string.replace(/[Ù¡Ù¢Ù£Ù¤Ù¥Ù¦Ù§Ù¨Ù©Ù&nbsp;]/g,(function(match){return numberMap[match]})).replace(/ØŒ/g,\",\")},postformat:function(string){return string.replace(/\\d/g,(function(match){return symbolMap[match]})).replace(/,/g,\"ØŒ\")},week:{dow:0,doy:6}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"ar-tn\",{months:\"Ø¬Ø§Ù†ÙÙŠ_ÙÙŠÙØ±ÙŠ_Ù…Ø§Ø±Ø³_Ø£ÙØ±ÙŠÙ„_Ù…Ø§ÙŠ_Ø¬ÙˆØ§Ù†_Ø¬ÙˆÙŠÙ„ÙŠØ©_Ø£ÙˆØª_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±\".split(\"_\"),monthsShort:\"Ø¬Ø§Ù†ÙÙŠ_ÙÙŠÙØ±ÙŠ_Ù…Ø§Ø±Ø³_Ø£ÙØ±ÙŠÙ„_Ù…Ø§ÙŠ_Ø¬ÙˆØ§Ù†_Ø¬ÙˆÙŠÙ„ÙŠØ©_Ø£ÙˆØª_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±\".split(\"_\"),weekdays:\"Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª\".split(\"_\"),weekdaysShort:\"Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª\".split(\"_\"),weekdaysMin:\"Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextDay:\"[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextWeek:\"dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastDay:\"[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastWeek:\"dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",sameElse:\"L\"},relativeTime:{future:\"ÙÙŠ %s\",past:\"Ù…Ù†Ø° %s\",s:\"Ø«ÙˆØ§Ù†\",ss:\"%d Ø«Ø§Ù†ÙŠØ©\",m:\"Ø¯Ù‚ÙŠÙ‚Ø©\",mm:\"%d Ø¯Ù‚Ø§Ø¦Ù‚\",h:\"Ø³Ø§Ø¹Ø©\",hh:\"%d Ø³Ø§Ø¹Ø§Øª\",d:\"ÙŠÙˆÙ…\",dd:\"%d Ø£ÙŠØ§Ù…\",M:\"Ø´Ù‡Ø±\",MM:\"%d Ø£Ø´Ù‡Ø±\",y:\"Ø³Ù†Ø©\",yy:\"%d Ø³Ù†ÙˆØ§Øª\"},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var suffixes={1:\"-inci\",5:\"-inci\",8:\"-inci\",70:\"-inci\",80:\"-inci\",2:\"-nci\",7:\"-nci\",20:\"-nci\",50:\"-nci\",3:\"-Ã¼ncÃ¼\",4:\"-Ã¼ncÃ¼\",100:\"-Ã¼ncÃ¼\",6:\"-ncÄ±\",9:\"-uncu\",10:\"-uncu\",30:\"-uncu\",60:\"-Ä±ncÄ±\",90:\"-Ä±ncÄ±\"};moment.defineLocale(\"az\",{months:\"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr\".split(\"_\"),monthsShort:\"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek\".split(\"_\"),weekdays:\"Bazar_Bazar ertÉ™si_Ã‡É™rÅŸÉ™nbÉ™ axÅŸamÄ±_Ã‡É™rÅŸÉ™nbÉ™_CÃ¼mÉ™ axÅŸamÄ±_CÃ¼mÉ™_ÅžÉ™nbÉ™\".split(\"_\"),weekdaysShort:\"Baz_BzE_Ã‡Ax_Ã‡É™r_CAx_CÃ¼m_ÅžÉ™n\".split(\"_\"),weekdaysMin:\"Bz_BE_Ã‡A_Ã‡É™_CA_CÃ¼_ÅžÉ™\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[bugÃ¼n saat] LT\",nextDay:\"[sabah saat] LT\",nextWeek:\"[gÉ™lÉ™n hÉ™ftÉ™] dddd [saat] LT\",lastDay:\"[dÃ¼nÉ™n] LT\",lastWeek:\"[keÃ§É™n hÉ™ftÉ™] dddd [saat] LT\",sameElse:\"L\"},relativeTime:{future:\"%s sonra\",past:\"%s É™vvÉ™l\",s:\"bir neÃ§É™ saniyÉ™\",ss:\"%d saniyÉ™\",m:\"bir dÉ™qiqÉ™\",mm:\"%d dÉ™qiqÉ™\",h:\"bir saat\",hh:\"%d saat\",d:\"bir gÃ¼n\",dd:\"%d gÃ¼n\",M:\"bir ay\",MM:\"%d ay\",y:\"bir il\",yy:\"%d il\"},meridiemParse:/gecÉ™|sÉ™hÉ™r|gÃ¼ndÃ¼z|axÅŸam/,isPM:function(input){return/^(gÃ¼ndÃ¼z|axÅŸam)$/.test(input)},meridiem:function(hour,minute,isLower){return hour&lt;4?\"gecÉ™\":hour&lt;12?\"sÉ™hÉ™r\":hour&lt;17?\"gÃ¼ndÃ¼z\":\"axÅŸam\"},dayOfMonthOrdinalParse:/\\d{1,2}-(Ä±ncÄ±|inci|nci|Ã¼ncÃ¼|ncÄ±|uncu)/,ordinal:function(number){if(0===number)return number+\"-Ä±ncÄ±\";var a=number%10;return number+(suffixes[a]||suffixes[number%100-a]||suffixes[number&gt;=100?100:null])},week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";function relativeTimeWithPlural(number,withoutSuffix,key){var num,forms;return\"m\"===key?withoutSuffix?\"Ñ…Ð²Ñ–Ð»Ñ–Ð½Ð°\":\"Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñƒ\":\"h\"===key?withoutSuffix?\"Ð³Ð°Ð´Ð·Ñ–Ð½Ð°\":\"Ð³Ð°Ð´Ð·Ñ–Ð½Ñƒ\":number+\" \"+(num=+number,forms={ss:withoutSuffix?\"ÑÐµÐºÑƒÐ½Ð´Ð°_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´\":\"ÑÐµÐºÑƒÐ½Ð´Ñƒ_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´\",mm:withoutSuffix?\"Ñ…Ð²Ñ–Ð»Ñ–Ð½Ð°_Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñ‹_Ñ…Ð²Ñ–Ð»Ñ–Ð½\":\"Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñƒ_Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñ‹_Ñ…Ð²Ñ–Ð»Ñ–Ð½\",hh:withoutSuffix?\"Ð³Ð°Ð´Ð·Ñ–Ð½Ð°_Ð³Ð°Ð´Ð·Ñ–Ð½Ñ‹_Ð³Ð°Ð´Ð·Ñ–Ð½\":\"Ð³Ð°Ð´Ð·Ñ–Ð½Ñƒ_Ð³Ð°Ð´Ð·Ñ–Ð½Ñ‹_Ð³Ð°Ð´Ð·Ñ–Ð½\",dd:\"Ð´Ð·ÐµÐ½ÑŒ_Ð´Ð½Ñ–_Ð´Ð·Ñ‘Ð½\",MM:\"Ð¼ÐµÑÑÑ†_Ð¼ÐµÑÑÑ†Ñ‹_Ð¼ÐµÑÑÑ†Ð°Ñž\",yy:\"Ð³Ð¾Ð´_Ð³Ð°Ð´Ñ‹_Ð³Ð°Ð´Ð¾Ñž\"}[key].split(\"_\"),num%10==1&amp;&amp;num%100!=11?forms[0]:num%10&gt;=2&amp;&amp;num%10&lt;=4&amp;&amp;(num%100&lt;10||num%100&gt;=20)?forms[1]:forms[2])}moment.defineLocale(\"be\",{months:{format:\"ÑÑ‚ÑƒÐ´Ð·ÐµÐ½Ñ_Ð»ÑŽÑ‚Ð°Ð³Ð°_ÑÐ°ÐºÐ°Ð²Ñ–ÐºÐ°_ÐºÑ€Ð°ÑÐ°Ð²Ñ–ÐºÐ°_Ñ‚Ñ€Ð°ÑžÐ½Ñ_Ñ‡ÑÑ€Ð²ÐµÐ½Ñ_Ð»Ñ–Ð¿ÐµÐ½Ñ_Ð¶Ð½Ñ–ÑžÐ½Ñ_Ð²ÐµÑ€Ð°ÑÐ½Ñ_ÐºÐ°ÑÑ‚Ñ€Ñ‹Ñ‡Ð½Ñ–ÐºÐ°_Ð»Ñ–ÑÑ‚Ð°Ð¿Ð°Ð´Ð°_ÑÐ½ÐµÐ¶Ð½Ñ\".split(\"_\"),standalone:\"ÑÑ‚ÑƒÐ´Ð·ÐµÐ½ÑŒ_Ð»ÑŽÑ‚Ñ‹_ÑÐ°ÐºÐ°Ð²Ñ–Ðº_ÐºÑ€Ð°ÑÐ°Ð²Ñ–Ðº_Ñ‚Ñ€Ð°Ð²ÐµÐ½ÑŒ_Ñ‡ÑÑ€Ð²ÐµÐ½ÑŒ_Ð»Ñ–Ð¿ÐµÐ½ÑŒ_Ð¶Ð½Ñ–Ð²ÐµÐ½ÑŒ_Ð²ÐµÑ€Ð°ÑÐµÐ½ÑŒ_ÐºÐ°ÑÑ‚Ñ€Ñ‹Ñ‡Ð½Ñ–Ðº_Ð»Ñ–ÑÑ‚Ð°Ð¿Ð°Ð´_ÑÐ½ÐµÐ¶Ð°Ð½ÑŒ\".split(\"_\")},monthsShort:\"ÑÑ‚ÑƒÐ´_Ð»ÑŽÑ‚_ÑÐ°Ðº_ÐºÑ€Ð°Ñ_Ñ‚Ñ€Ð°Ð²_Ñ‡ÑÑ€Ð²_Ð»Ñ–Ð¿_Ð¶Ð½Ñ–Ð²_Ð²ÐµÑ€_ÐºÐ°ÑÑ‚_Ð»Ñ–ÑÑ‚_ÑÐ½ÐµÐ¶\".split(\"_\"),weekdays:{format:\"Ð½ÑÐ´Ð·ÐµÐ»ÑŽ_Ð¿Ð°Ð½ÑÐ´Ð·ÐµÐ»Ð°Ðº_Ð°ÑžÑ‚Ð¾Ñ€Ð°Ðº_ÑÐµÑ€Ð°Ð´Ñƒ_Ñ‡Ð°Ñ†Ð²ÐµÑ€_Ð¿ÑÑ‚Ð½Ñ–Ñ†Ñƒ_ÑÑƒÐ±Ð¾Ñ‚Ñƒ\".split(\"_\"),standalone:\"Ð½ÑÐ´Ð·ÐµÐ»Ñ_Ð¿Ð°Ð½ÑÐ´Ð·ÐµÐ»Ð°Ðº_Ð°ÑžÑ‚Ð¾Ñ€Ð°Ðº_ÑÐµÑ€Ð°Ð´Ð°_Ñ‡Ð°Ñ†Ð²ÐµÑ€_Ð¿ÑÑ‚Ð½Ñ–Ñ†Ð°_ÑÑƒÐ±Ð¾Ñ‚Ð°\".split(\"_\"),isFormat:/\\[ ?[Ð£ÑƒÑž] ?(?:Ð¼Ñ–Ð½ÑƒÐ»ÑƒÑŽ|Ð½Ð°ÑÑ‚ÑƒÐ¿Ð½ÑƒÑŽ)? ?\\] ?dddd/},weekdaysShort:\"Ð½Ð´_Ð¿Ð½_Ð°Ñ‚_ÑÑ€_Ñ‡Ñ†_Ð¿Ñ‚_ÑÐ±\".split(\"_\"),weekdaysMin:\"Ð½Ð´_Ð¿Ð½_Ð°Ñ‚_ÑÑ€_Ñ‡Ñ†_Ð¿Ñ‚_ÑÐ±\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY Ð³.\",LLL:\"D MMMM YYYY Ð³., HH:mm\",LLLL:\"dddd, D MMMM YYYY Ð³., HH:mm\"},calendar:{sameDay:\"[Ð¡Ñ‘Ð½Ð½Ñ Ñž] LT\",nextDay:\"[Ð—Ð°ÑžÑ‚Ñ€Ð° Ñž] LT\",lastDay:\"[Ð£Ñ‡Ð¾Ñ€Ð° Ñž] LT\",nextWeek:function(){return\"[Ð£] dddd [Ñž] LT\"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return\"[Ð£ Ð¼Ñ–Ð½ÑƒÐ»ÑƒÑŽ] dddd [Ñž] LT\";case 1:case 2:case 4:return\"[Ð£ Ð¼Ñ–Ð½ÑƒÐ»Ñ‹] dddd [Ñž] LT\"}},sameElse:\"L\"},relativeTime:{future:\"Ð¿Ñ€Ð°Ð· %s\",past:\"%s Ñ‚Ð°Ð¼Ñƒ\",s:\"Ð½ÐµÐºÐ°Ð»ÑŒÐºÑ– ÑÐµÐºÑƒÐ½Ð´\",m:relativeTimeWithPlural,mm:relativeTimeWithPlural,h:relativeTimeWithPlural,hh:relativeTimeWithPlural,d:\"Ð´Ð·ÐµÐ½ÑŒ\",dd:relativeTimeWithPlural,M:\"Ð¼ÐµÑÑÑ†\",MM:relativeTimeWithPlural,y:\"Ð³Ð¾Ð´\",yy:relativeTimeWithPlural},meridiemParse:/Ð½Ð¾Ñ‡Ñ‹|Ñ€Ð°Ð½Ñ–Ñ†Ñ‹|Ð´Ð½Ñ|Ð²ÐµÑ‡Ð°Ñ€Ð°/,isPM:function(input){return/^(Ð´Ð½Ñ|Ð²ÐµÑ‡Ð°Ñ€Ð°)$/.test(input)},meridiem:function(hour,minute,isLower){return hour&lt;4?\"Ð½Ð¾Ñ‡Ñ‹\":hour&lt;12?\"Ñ€Ð°Ð½Ñ–Ñ†Ñ‹\":hour&lt;17?\"Ð´Ð½Ñ\":\"Ð²ÐµÑ‡Ð°Ñ€Ð°\"},dayOfMonthOrdinalParse:/\\d{1,2}-(Ñ–|Ñ‹|Ð³Ð°)/,ordinal:function(number,period){switch(period){case\"M\":case\"d\":case\"DDD\":case\"w\":case\"W\":return number%10!=2&amp;&amp;number%10!=3||number%100==12||number%100==13?number+\"-Ñ‹\":number+\"-Ñ–\";case\"D\":return number+\"-Ð³Ð°\";default:return number}},week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"bg\",{months:\"ÑÐ½ÑƒÐ°Ñ€Ð¸_Ñ„ÐµÐ²Ñ€ÑƒÐ°Ñ€Ð¸_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€Ð¸Ð»_Ð¼Ð°Ð¹_ÑŽÐ½Ð¸_ÑŽÐ»Ð¸_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ¿Ñ‚ÐµÐ¼Ð²Ñ€Ð¸_Ð¾ÐºÑ‚Ð¾Ð¼Ð²Ñ€Ð¸_Ð½Ð¾ÐµÐ¼Ð²Ñ€Ð¸_Ð´ÐµÐºÐµÐ¼Ð²Ñ€Ð¸\".split(\"_\"),monthsShort:\"ÑÐ½Ñƒ_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_ÑŽÐ½Ð¸_ÑŽÐ»Ð¸_Ð°Ð²Ð³_ÑÐµÐ¿_Ð¾ÐºÑ‚_Ð½Ð¾Ðµ_Ð´ÐµÐº\".split(\"_\"),weekdays:\"Ð½ÐµÐ´ÐµÐ»Ñ_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»Ð½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÑÐ´Ð°_Ñ‡ÐµÑ‚Ð²ÑŠÑ€Ñ‚ÑŠÐº_Ð¿ÐµÑ‚ÑŠÐº_ÑÑŠÐ±Ð¾Ñ‚Ð°\".split(\"_\"),weekdaysShort:\"Ð½ÐµÐ´_Ð¿Ð¾Ð½_Ð²Ñ‚Ð¾_ÑÑ€Ñ_Ñ‡ÐµÑ‚_Ð¿ÐµÑ‚_ÑÑŠÐ±\".split(\"_\"),weekdaysMin:\"Ð½Ð´_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"D.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY H:mm\",LLLL:\"dddd, D MMMM YYYY H:mm\"},calendar:{sameDay:\"[Ð”Ð½ÐµÑ Ð²] LT\",nextDay:\"[Ð£Ñ‚Ñ€Ðµ Ð²] LT\",nextWeek:\"dddd [Ð²] LT\",lastDay:\"[Ð’Ñ‡ÐµÑ€Ð° Ð²] LT\",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return\"[ÐœÐ¸Ð½Ð°Ð»Ð°Ñ‚Ð°] dddd [Ð²] LT\";case 1:case 2:case 4:case 5:return\"[ÐœÐ¸Ð½Ð°Ð»Ð¸Ñ] dddd [Ð²] LT\"}},sameElse:\"L\"},relativeTime:{future:\"ÑÐ»ÐµÐ´ %s\",past:\"Ð¿Ñ€ÐµÐ´Ð¸ %s\",s:\"Ð½ÑÐºÐ¾Ð»ÐºÐ¾ ÑÐµÐºÑƒÐ½Ð´Ð¸\",ss:\"%d ÑÐµÐºÑƒÐ½Ð´Ð¸\",m:\"Ð¼Ð¸Ð½ÑƒÑ‚Ð°\",mm:\"%d Ð¼Ð¸Ð½ÑƒÑ‚Ð¸\",h:\"Ñ‡Ð°Ñ\",hh:\"%d Ñ‡Ð°ÑÐ°\",d:\"Ð´ÐµÐ½\",dd:\"%d Ð´ÐµÐ½Ð°\",w:\"ÑÐµÐ´Ð¼Ð¸Ñ†Ð°\",ww:\"%d ÑÐµÐ´Ð¼Ð¸Ñ†Ð¸\",M:\"Ð¼ÐµÑÐµÑ†\",MM:\"%d Ð¼ÐµÑÐµÑ†Ð°\",y:\"Ð³Ð¾Ð´Ð¸Ð½Ð°\",yy:\"%d Ð³Ð¾Ð´Ð¸Ð½Ð¸\"},dayOfMonthOrdinalParse:/\\d{1,2}-(ÐµÐ²|ÐµÐ½|Ñ‚Ð¸|Ð²Ð¸|Ñ€Ð¸|Ð¼Ð¸)/,ordinal:function(number){var lastDigit=number%10,last2Digits=number%100;return 0===number?number+\"-ÐµÐ²\":0===last2Digits?number+\"-ÐµÐ½\":last2Digits&gt;10&amp;&amp;last2Digits&lt;20?number+\"-Ñ‚Ð¸\":1===lastDigit?number+\"-Ð²Ð¸\":2===lastDigit?number+\"-Ñ€Ð¸\":7===lastDigit||8===lastDigit?number+\"-Ð¼Ð¸\":number+\"-Ñ‚Ð¸\"},week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"bm\",{months:\"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_MÉ›kalo_ZuwÉ›nkalo_Zuluyekalo_Utikalo_SÉ›tanburukalo_É”kutÉ”burukalo_Nowanburukalo_Desanburukalo\".split(\"_\"),monthsShort:\"Zan_Few_Mar_Awi_MÉ›_Zuw_Zul_Uti_SÉ›t_É”ku_Now_Des\".split(\"_\"),weekdays:\"Kari_NtÉ›nÉ›n_Tarata_Araba_Alamisa_Juma_Sibiri\".split(\"_\"),weekdaysShort:\"Kar_NtÉ›_Tar_Ara_Ala_Jum_Sib\".split(\"_\"),weekdaysMin:\"Ka_Nt_Ta_Ar_Al_Ju_Si\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"MMMM [tile] D [san] YYYY\",LLL:\"MMMM [tile] D [san] YYYY [lÉ›rÉ›] HH:mm\",LLLL:\"dddd MMMM [tile] D [san] YYYY [lÉ›rÉ›] HH:mm\"},calendar:{sameDay:\"[Bi lÉ›rÉ›] LT\",nextDay:\"[Sini lÉ›rÉ›] LT\",nextWeek:\"dddd [don lÉ›rÉ›] LT\",lastDay:\"[Kunu lÉ›rÉ›] LT\",lastWeek:\"dddd [tÉ›mÉ›nen lÉ›rÉ›] LT\",sameElse:\"L\"},relativeTime:{future:\"%s kÉ”nÉ”\",past:\"a bÉ› %s bÉ”\",s:\"sanga dama dama\",ss:\"sekondi %d\",m:\"miniti kelen\",mm:\"miniti %d\",h:\"lÉ›rÉ› kelen\",hh:\"lÉ›rÉ› %d\",d:\"tile kelen\",dd:\"tile %d\",M:\"kalo kelen\",MM:\"kalo %d\",y:\"san kelen\",yy:\"san %d\"},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var symbolMap={1:\"à§§\",2:\"à§¨\",3:\"à§©\",4:\"à§ª\",5:\"à§«\",6:\"à§¬\",7:\"à§­\",8:\"à§®\",9:\"à§¯\",0:\"à§¦\"},numberMap={\"à§§\":\"1\",\"à§¨\":\"2\",\"à§©\":\"3\",\"à§ª\":\"4\",\"à§«\":\"5\",\"à§¬\":\"6\",\"à§­\":\"7\",\"à§®\":\"8\",\"à§¯\":\"9\",\"à§¦\":\"0\"};moment.defineLocale(\"bn\",{months:\"à¦œà¦¾à¦¨à§à§Ÿà¦¾à¦°à¦¿_à¦«à§‡à¦¬à§à¦°à§à§Ÿà¦¾à¦°à¦¿_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿà§‡à¦®à§à¦¬à¦°_à¦…à¦•à§à¦Ÿà§‹à¦¬à¦°_à¦¨à¦­à§‡à¦®à§à¦¬à¦°_à¦¡à¦¿à¦¸à§‡à¦®à§à¦¬à¦°\".split(\"_\"),monthsShort:\"à¦œà¦¾à¦¨à§_à¦«à§‡à¦¬à§à¦°à§_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿ_à¦…à¦•à§à¦Ÿà§‹_à¦¨à¦­à§‡_à¦¡à¦¿à¦¸à§‡\".split(\"_\"),weekdays:\"à¦°à¦¬à¦¿à¦¬à¦¾à¦°_à¦¸à§‹à¦®à¦¬à¦¾à¦°_à¦®à¦™à§à¦—à¦²à¦¬à¦¾à¦°_à¦¬à§à¦§à¦¬à¦¾à¦°_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿à¦¬à¦¾à¦°_à¦¶à§à¦•à§à¦°à¦¬à¦¾à¦°_à¦¶à¦¨à¦¿à¦¬à¦¾à¦°\".split(\"_\"),weekdaysShort:\"à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿\".split(\"_\"),weekdaysMin:\"à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿\".split(\"_\"),longDateFormat:{LT:\"A h:mm à¦¸à¦®à§Ÿ\",LTS:\"A h:mm:ss à¦¸à¦®à§Ÿ\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ\",LLLL:\"dddd, D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ\"},calendar:{sameDay:\"[à¦†à¦œ] LT\",nextDay:\"[à¦†à¦—à¦¾à¦®à§€à¦•à¦¾à¦²] LT\",nextWeek:\"dddd, LT\",lastDay:\"[à¦—à¦¤à¦•à¦¾à¦²] LT\",lastWeek:\"[à¦—à¦¤] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s à¦ªà¦°à§‡\",past:\"%s à¦†à¦—à§‡\",s:\"à¦•à§Ÿà§‡à¦• à¦¸à§‡à¦•à§‡à¦¨à§à¦¡\",ss:\"%d à¦¸à§‡à¦•à§‡à¦¨à§à¦¡\",m:\"à¦à¦• à¦®à¦¿à¦¨à¦¿à¦Ÿ\",mm:\"%d à¦®à¦¿à¦¨à¦¿à¦Ÿ\",h:\"à¦à¦• à¦˜à¦¨à§à¦Ÿà¦¾\",hh:\"%d à¦˜à¦¨à§à¦Ÿà¦¾\",d:\"à¦à¦• à¦¦à¦¿à¦¨\",dd:\"%d à¦¦à¦¿à¦¨\",M:\"à¦à¦• à¦®à¦¾à¦¸\",MM:\"%d à¦®à¦¾à¦¸\",y:\"à¦à¦• à¦¬à¦›à¦°\",yy:\"%d à¦¬à¦›à¦°\"},preparse:function(string){return string.replace(/[à§§à§¨à§©à§ªà§«à§¬à§­à§®à§¯à§¦]/g,(function(match){return numberMap[match]}))},postformat:function(string){return string.replace(/\\d/g,(function(match){return symbolMap[match]}))},meridiemParse:/à¦°à¦¾à¦¤|à¦¸à¦•à¦¾à¦²|à¦¦à§à¦ªà§à¦°|à¦¬à¦¿à¦•à¦¾à¦²|à¦°à¦¾à¦¤/,meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"à¦°à¦¾à¦¤\"===meridiem&amp;&amp;hour&gt;=4||\"à¦¦à§à¦ªà§à¦°\"===meridiem&amp;&amp;hour&lt;5||\"à¦¬à¦¿à¦•à¦¾à¦²\"===meridiem?hour+12:hour},meridiem:function(hour,minute,isLower){return hour&lt;4?\"à¦°à¦¾à¦¤\":hour&lt;10?\"à¦¸à¦•à¦¾à¦²\":hour&lt;17?\"à¦¦à§à¦ªà§à¦°\":hour&lt;20?\"à¦¬à¦¿à¦•à¦¾à¦²\":\"à¦°à¦¾à¦¤\"},week:{dow:0,doy:6}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var symbolMap={1:\"à§§\",2:\"à§¨\",3:\"à§©\",4:\"à§ª\",5:\"à§«\",6:\"à§¬\",7:\"à§­\",8:\"à§®\",9:\"à§¯\",0:\"à§¦\"},numberMap={\"à§§\":\"1\",\"à§¨\":\"2\",\"à§©\":\"3\",\"à§ª\":\"4\",\"à§«\":\"5\",\"à§¬\":\"6\",\"à§­\":\"7\",\"à§®\":\"8\",\"à§¯\":\"9\",\"à§¦\":\"0\"};moment.defineLocale(\"bn-bd\",{months:\"à¦œà¦¾à¦¨à§à§Ÿà¦¾à¦°à¦¿_à¦«à§‡à¦¬à§à¦°à§à§Ÿà¦¾à¦°à¦¿_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿà§‡à¦®à§à¦¬à¦°_à¦…à¦•à§à¦Ÿà§‹à¦¬à¦°_à¦¨à¦­à§‡à¦®à§à¦¬à¦°_à¦¡à¦¿à¦¸à§‡à¦®à§à¦¬à¦°\".split(\"_\"),monthsShort:\"à¦œà¦¾à¦¨à§_à¦«à§‡à¦¬à§à¦°à§_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿ_à¦…à¦•à§à¦Ÿà§‹_à¦¨à¦­à§‡_à¦¡à¦¿à¦¸à§‡\".split(\"_\"),weekdays:\"à¦°à¦¬à¦¿à¦¬à¦¾à¦°_à¦¸à§‹à¦®à¦¬à¦¾à¦°_à¦®à¦™à§à¦—à¦²à¦¬à¦¾à¦°_à¦¬à§à¦§à¦¬à¦¾à¦°_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿à¦¬à¦¾à¦°_à¦¶à§à¦•à§à¦°à¦¬à¦¾à¦°_à¦¶à¦¨à¦¿à¦¬à¦¾à¦°\".split(\"_\"),weekdaysShort:\"à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿\".split(\"_\"),weekdaysMin:\"à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿\".split(\"_\"),longDateFormat:{LT:\"A h:mm à¦¸à¦®à§Ÿ\",LTS:\"A h:mm:ss à¦¸à¦®à§Ÿ\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ\",LLLL:\"dddd, D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ\"},calendar:{sameDay:\"[à¦†à¦œ] LT\",nextDay:\"[à¦†à¦—à¦¾à¦®à§€à¦•à¦¾à¦²] LT\",nextWeek:\"dddd, LT\",lastDay:\"[à¦—à¦¤à¦•à¦¾à¦²] LT\",lastWeek:\"[à¦—à¦¤] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s à¦ªà¦°à§‡\",past:\"%s à¦†à¦—à§‡\",s:\"à¦•à§Ÿà§‡à¦• à¦¸à§‡à¦•à§‡à¦¨à§à¦¡\",ss:\"%d à¦¸à§‡à¦•à§‡à¦¨à§à¦¡\",m:\"à¦à¦• à¦®à¦¿à¦¨à¦¿à¦Ÿ\",mm:\"%d à¦®à¦¿à¦¨à¦¿à¦Ÿ\",h:\"à¦à¦• à¦˜à¦¨à§à¦Ÿà¦¾\",hh:\"%d à¦˜à¦¨à§à¦Ÿà¦¾\",d:\"à¦à¦• à¦¦à¦¿à¦¨\",dd:\"%d à¦¦à¦¿à¦¨\",M:\"à¦à¦• à¦®à¦¾à¦¸\",MM:\"%d à¦®à¦¾à¦¸\",y:\"à¦à¦• à¦¬à¦›à¦°\",yy:\"%d à¦¬à¦›à¦°\"},preparse:function(string){return string.replace(/[à§§à§¨à§©à§ªà§«à§¬à§­à§®à§¯à§¦]/g,(function(match){return numberMap[match]}))},postformat:function(string){return string.replace(/\\d/g,(function(match){return symbolMap[match]}))},meridiemParse:/à¦°à¦¾à¦¤|à¦­à§‹à¦°|à¦¸à¦•à¦¾à¦²|à¦¦à§à¦ªà§à¦°|à¦¬à¦¿à¦•à¦¾à¦²|à¦¸à¦¨à§à¦§à§à¦¯à¦¾|à¦°à¦¾à¦¤/,meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"à¦°à¦¾à¦¤\"===meridiem?hour&lt;4?hour:hour+12:\"à¦­à§‹à¦°\"===meridiem?hour:\"à¦¸à¦•à¦¾à¦²\"===meridiem?hour:\"à¦¦à§à¦ªà§à¦°\"===meridiem?hour&gt;=3?hour:hour+12:\"à¦¬à¦¿à¦•à¦¾à¦²\"===meridiem?hour+12:\"à¦¸à¦¨à§à¦§à§à¦¯à¦¾\"===meridiem?hour+12:void 0},meridiem:function(hour,minute,isLower){return hour&lt;4?\"à¦°à¦¾à¦¤\":hour&lt;6?\"à¦­à§‹à¦°\":hour&lt;12?\"à¦¸à¦•à¦¾à¦²\":hour&lt;15?\"à¦¦à§à¦ªà§à¦°\":hour&lt;18?\"à¦¬à¦¿à¦•à¦¾à¦²\":hour&lt;20?\"à¦¸à¦¨à§à¦§à§à¦¯à¦¾\":\"à¦°à¦¾à¦¤\"},week:{dow:0,doy:6}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var symbolMap={1:\"à¼¡\",2:\"à¼¢\",3:\"à¼£\",4:\"à¼¤\",5:\"à¼¥\",6:\"à¼¦\",7:\"à¼§\",8:\"à¼¨\",9:\"à¼©\",0:\"à¼&nbsp;\"},numberMap={\"à¼¡\":\"1\",\"à¼¢\":\"2\",\"à¼£\":\"3\",\"à¼¤\":\"4\",\"à¼¥\":\"5\",\"à¼¦\":\"6\",\"à¼§\":\"7\",\"à¼¨\":\"8\",\"à¼©\":\"9\",\"à¼&nbsp;\":\"0\"};moment.defineLocale(\"bo\",{months:\"à½Ÿà¾³à¼‹à½–à¼‹à½‘à½„à¼‹à½”à½¼_à½Ÿà¾³à¼‹à½–à¼‹à½‚à½‰à½²à½¦à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½‚à½¦à½´à½˜à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½žà½²à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½£à¾”à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½‘à¾²à½´à½‚à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½‘à½´à½“à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½¢à¾’à¾±à½‘à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½‘à½‚à½´à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½…à½´à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½…à½´à¼‹à½‚à½…à½²à½‚à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½…à½´à¼‹à½‚à½‰à½²à½¦à¼‹à½”\".split(\"_\"),monthsShort:\"à½Ÿà¾³à¼‹1_à½Ÿà¾³à¼‹2_à½Ÿà¾³à¼‹3_à½Ÿà¾³à¼‹4_à½Ÿà¾³à¼‹5_à½Ÿà¾³à¼‹6_à½Ÿà¾³à¼‹7_à½Ÿà¾³à¼‹8_à½Ÿà¾³à¼‹9_à½Ÿà¾³à¼‹10_à½Ÿà¾³à¼‹11_à½Ÿà¾³à¼‹12\".split(\"_\"),monthsShortRegex:/^(à½Ÿà¾³à¼‹\\d{1,2})/,monthsParseExact:!0,weekdays:\"à½‚à½Ÿà½&nbsp;à¼‹à½‰à½²à¼‹à½˜à¼‹_à½‚à½Ÿà½&nbsp;à¼‹à½Ÿà¾³à¼‹à½–à¼‹_à½‚à½Ÿà½&nbsp;à¼‹à½˜à½²à½‚à¼‹à½‘à½˜à½¢à¼‹_à½‚à½Ÿà½&nbsp;à¼‹à½£à¾·à½‚à¼‹à½”à¼‹_à½‚à½Ÿà½&nbsp;à¼‹à½•à½´à½¢à¼‹à½–à½´_à½‚à½Ÿà½&nbsp;à¼‹à½”à¼‹à½¦à½„à½¦à¼‹_à½‚à½Ÿà½&nbsp;à¼‹à½¦à¾¤à½ºà½“à¼‹à½”à¼‹\".split(\"_\"),weekdaysShort:\"à½‰à½²à¼‹à½˜à¼‹_à½Ÿà¾³à¼‹à½–à¼‹_à½˜à½²à½‚à¼‹à½‘à½˜à½¢à¼‹_à½£à¾·à½‚à¼‹à½”à¼‹_à½•à½´à½¢à¼‹à½–à½´_à½”à¼‹à½¦à½„à½¦à¼‹_à½¦à¾¤à½ºà½“à¼‹à½”à¼‹\".split(\"_\"),weekdaysMin:\"à½‰à½²_à½Ÿà¾³_à½˜à½²à½‚_à½£à¾·à½‚_à½•à½´à½¢_à½¦à½„à½¦_à½¦à¾¤à½ºà½“\".split(\"_\"),longDateFormat:{LT:\"A h:mm\",LTS:\"A h:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm\",LLLL:\"dddd, D MMMM YYYY, A h:mm\"},calendar:{sameDay:\"[à½‘à½²à¼‹à½¢à½²à½„] LT\",nextDay:\"[à½¦à½„à¼‹à½‰à½²à½“] LT\",nextWeek:\"[à½–à½‘à½´à½“à¼‹à½•à¾²à½‚à¼‹à½¢à¾—à½ºà½¦à¼‹à½˜], LT\",lastDay:\"[à½à¼‹à½¦à½„] LT\",lastWeek:\"[à½–à½‘à½´à½“à¼‹à½•à¾²à½‚à¼‹à½˜à½à½&nbsp;à¼‹à½˜] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s à½£à¼‹\",past:\"%s à½¦à¾”à½“à¼‹à½£\",s:\"à½£à½˜à¼‹à½¦à½„\",ss:\"%d à½¦à¾à½¢à¼‹à½†à¼\",m:\"à½¦à¾à½¢à¼‹à½˜à¼‹à½‚à½…à½²à½‚\",mm:\"%d à½¦à¾à½¢à¼‹à½˜\",h:\"à½†à½´à¼‹à½šà½¼à½‘à¼‹à½‚à½…à½²à½‚\",hh:\"%d à½†à½´à¼‹à½šà½¼à½‘\",d:\"à½‰à½²à½“à¼‹à½‚à½…à½²à½‚\",dd:\"%d à½‰à½²à½“à¼‹\",M:\"à½Ÿà¾³à¼‹à½–à¼‹à½‚à½…à½²à½‚\",MM:\"%d à½Ÿà¾³à¼‹à½–\",y:\"à½£à½¼à¼‹à½‚à½…à½²à½‚\",yy:\"%d à½£à½¼\"},preparse:function(string){return string.replace(/[à¼¡à¼¢à¼£à¼¤à¼¥à¼¦à¼§à¼¨à¼©à¼&nbsp;]/g,(function(match){return numberMap[match]}))},postformat:function(string){return string.replace(/\\d/g,(function(match){return symbolMap[match]}))},meridiemParse:/à½˜à½šà½“à¼‹à½˜à½¼|à½žà½¼à½‚à½¦à¼‹à½€à½¦|à½‰à½²à½“à¼‹à½‚à½´à½„|à½‘à½‚à½¼à½„à¼‹à½‘à½‚|à½˜à½šà½“à¼‹à½˜à½¼/,meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"à½˜à½šà½“à¼‹à½˜à½¼\"===meridiem&amp;&amp;hour&gt;=4||\"à½‰à½²à½“à¼‹à½‚à½´à½„\"===meridiem&amp;&amp;hour&lt;5||\"à½‘à½‚à½¼à½„à¼‹à½‘à½‚\"===meridiem?hour+12:hour},meridiem:function(hour,minute,isLower){return hour&lt;4?\"à½˜à½šà½“à¼‹à½˜à½¼\":hour&lt;10?\"à½žà½¼à½‚à½¦à¼‹à½€à½¦\":hour&lt;17?\"à½‰à½²à½“à¼‹à½‚à½´à½„\":hour&lt;20?\"à½‘à½‚à½¼à½„à¼‹à½‘à½‚\":\"à½˜à½šà½“à¼‹à½˜à½¼\"},week:{dow:0,doy:6}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";function relativeTimeWithMutation(number,withoutSuffix,key){return number+\" \"+function(text,number){return 2===number?function(text){var mutationTable={m:\"v\",b:\"v\",d:\"z\"};return void 0===mutationTable[text.charAt(0)]?text:mutationTable[text.charAt(0)]+text.substring(1)}(text):text}({mm:\"munutenn\",MM:\"miz\",dd:\"devezh\"}[key],number)}var monthsParse=[/^gen/i,/^c[Ê¼\\']hwe/i,/^meu/i,/^ebr/i,/^mae/i,/^(mez|eve)/i,/^gou/i,/^eos/i,/^gwe/i,/^her/i,/^du/i,/^ker/i],monthsRegex=/^(genver|c[Ê¼\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[Ê¼\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,minWeekdaysParse=[/^Su/i,/^Lu/i,/^Me([^r]|$)/i,/^Mer/i,/^Ya/i,/^Gw/i,/^Sa/i];moment.defineLocale(\"br\",{months:\"Genver_CÊ¼hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu\".split(\"_\"),monthsShort:\"Gen_CÊ¼hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker\".split(\"_\"),weekdays:\"Sul_Lun_Meurzh_MercÊ¼her_Yaou_Gwener_Sadorn\".split(\"_\"),weekdaysShort:\"Sul_Lun_Meu_Mer_Yao_Gwe_Sad\".split(\"_\"),weekdaysMin:\"Su_Lu_Me_Mer_Ya_Gw_Sa\".split(\"_\"),weekdaysParse:minWeekdaysParse,fullWeekdaysParse:[/^sul/i,/^lun/i,/^meurzh/i,/^merc[Ê¼\\']her/i,/^yaou/i,/^gwener/i,/^sadorn/i],shortWeekdaysParse:[/^Sul/i,/^Lun/i,/^Meu/i,/^Mer/i,/^Yao/i,/^Gwe/i,/^Sad/i],minWeekdaysParse:minWeekdaysParse,monthsRegex:monthsRegex,monthsShortRegex:monthsRegex,monthsStrictRegex:/^(genver|c[Ê¼\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,monthsShortStrictRegex:/^(gen|c[Ê¼\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,monthsParse:monthsParse,longMonthsParse:monthsParse,shortMonthsParse:monthsParse,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [a viz] MMMM YYYY\",LLL:\"D [a viz] MMMM YYYY HH:mm\",LLLL:\"dddd, D [a viz] MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Hiziv da] LT\",nextDay:\"[WarcÊ¼hoazh da] LT\",nextWeek:\"dddd [da] LT\",lastDay:\"[DecÊ¼h da] LT\",lastWeek:\"dddd [paset da] LT\",sameElse:\"L\"},relativeTime:{future:\"a-benn %s\",past:\"%s Ê¼zo\",s:\"un nebeud segondennoÃ¹\",ss:\"%d eilenn\",m:\"ur vunutenn\",mm:relativeTimeWithMutation,h:\"un eur\",hh:\"%d eur\",d:\"un devezh\",dd:relativeTimeWithMutation,M:\"ur miz\",MM:relativeTimeWithMutation,y:\"ur bloaz\",yy:function(number){switch(function lastNumber(number){return number&gt;9?lastNumber(number%10):number}(number)){case 1:case 3:case 4:case 5:case 9:return number+\" bloaz\";default:return number+\" vloaz\"}}},dayOfMonthOrdinalParse:/\\d{1,2}(aÃ±|vet)/,ordinal:function(number){return number+(1===number?\"aÃ±\":\"vet\")},week:{dow:1,doy:4},meridiemParse:/a.m.|g.m./,isPM:function(token){return\"g.m.\"===token},meridiem:function(hour,minute,isLower){return hour&lt;12?\"a.m.\":\"g.m.\"}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";function translate(number,withoutSuffix,key){var result=number+\" \";switch(key){case\"ss\":return result+=1===number?\"sekunda\":2===number||3===number||4===number?\"sekunde\":\"sekundi\";case\"m\":return withoutSuffix?\"jedna minuta\":\"jedne minute\";case\"mm\":return result+=1===number?\"minuta\":2===number||3===number||4===number?\"minute\":\"minuta\";case\"h\":return withoutSuffix?\"jedan sat\":\"jednog sata\";case\"hh\":return result+=1===number?\"sat\":2===number||3===number||4===number?\"sata\":\"sati\";case\"dd\":return result+=1===number?\"dan\":\"dana\";case\"MM\":return result+=1===number?\"mjesec\":2===number||3===number||4===number?\"mjeseca\":\"mjeseci\";case\"yy\":return result+=1===number?\"godina\":2===number||3===number||4===number?\"godine\":\"godina\"}}moment.defineLocale(\"bs\",{months:\"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar\".split(\"_\"),monthsShort:\"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota\".split(\"_\"),weekdaysShort:\"ned._pon._uto._sri._Äet._pet._sub.\".split(\"_\"),weekdaysMin:\"ne_po_ut_sr_Äe_pe_su\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[danas u] LT\",nextDay:\"[sutra u] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[u] [nedjelju] [u] LT\";case 3:return\"[u] [srijedu] [u] LT\";case 6:return\"[u] [subotu] [u] LT\";case 1:case 2:case 4:case 5:return\"[u] dddd [u] LT\"}},lastDay:\"[juÄer u] LT\",lastWeek:function(){switch(this.day()){case 0:case 3:return\"[proÅ¡lu] dddd [u] LT\";case 6:return\"[proÅ¡le] [subote] [u] LT\";case 1:case 2:case 4:case 5:return\"[proÅ¡li] dddd [u] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"prije %s\",s:\"par sekundi\",ss:translate,m:translate,mm:translate,h:translate,hh:translate,d:\"dan\",dd:translate,M:\"mjesec\",MM:translate,y:\"godinu\",yy:translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"ca\",{months:{standalone:\"gener_febrer_marÃ§_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre\".split(\"_\"),format:\"de gener_de febrer_de marÃ§_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre\".split(\"_\"),isFormat:/D[oD]?(\\s)+MMMM/},monthsShort:\"gen._febr._marÃ§_abr._maig_juny_jul._ag._set._oct._nov._des.\".split(\"_\"),monthsParseExact:!0,weekdays:\"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte\".split(\"_\"),weekdaysShort:\"dg._dl._dt._dc._dj._dv._ds.\".split(\"_\"),weekdaysMin:\"dg_dl_dt_dc_dj_dv_ds\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM [de] YYYY\",ll:\"D MMM YYYY\",LLL:\"D MMMM [de] YYYY [a les] H:mm\",lll:\"D MMM YYYY, H:mm\",LLLL:\"dddd D MMMM [de] YYYY [a les] H:mm\",llll:\"ddd D MMM YYYY, H:mm\"},calendar:{sameDay:function(){return\"[avui a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},nextDay:function(){return\"[demÃ&nbsp; a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},nextWeek:function(){return\"dddd [a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},lastDay:function(){return\"[ahir a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [passat a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"d'aquÃ­ %s\",past:\"fa %s\",s:\"uns segons\",ss:\"%d segons\",m:\"un minut\",mm:\"%d minuts\",h:\"una hora\",hh:\"%d hores\",d:\"un dia\",dd:\"%d dies\",M:\"un mes\",MM:\"%d mesos\",y:\"un any\",yy:\"%d anys\"},dayOfMonthOrdinalParse:/\\d{1,2}(r|n|t|Ã¨|a)/,ordinal:function(number,period){var output=1===number?\"r\":2===number?\"n\":3===number?\"r\":4===number?\"t\":\"Ã¨\";return\"w\"!==period&amp;&amp;\"W\"!==period||(output=\"a\"),number+output},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var months=\"leden_Ãºnor_bÅ™ezen_duben_kvÄ›ten_Äerven_Äervenec_srpen_zÃ¡Å™Ã­_Å™Ã­jen_listopad_prosinec\".split(\"_\"),monthsShort=\"led_Ãºno_bÅ™e_dub_kvÄ›_Ävn_Ävc_srp_zÃ¡Å™_Å™Ã­j_lis_pro\".split(\"_\"),monthsParse=[/^led/i,/^Ãºno/i,/^bÅ™e/i,/^dub/i,/^kvÄ›/i,/^(Ävn|Äerven$|Äervna)/i,/^(Ävc|Äervenec|Äervence)/i,/^srp/i,/^zÃ¡Å™/i,/^Å™Ã­j/i,/^lis/i,/^pro/i],monthsRegex=/^(leden|Ãºnor|bÅ™ezen|duben|kvÄ›ten|Äervenec|Äervence|Äerven|Äervna|srpen|zÃ¡Å™Ã­|Å™Ã­jen|listopad|prosinec|led|Ãºno|bÅ™e|dub|kvÄ›|Ävn|Ävc|srp|zÃ¡Å™|Å™Ã­j|lis|pro)/i;function plural(n){return n&gt;1&amp;&amp;n&lt;5&amp;&amp;1!=~~(n/10)}function translate(number,withoutSuffix,key,isFuture){var result=number+\" \";switch(key){case\"s\":return withoutSuffix||isFuture?\"pÃ¡r sekund\":\"pÃ¡r sekundami\";case\"ss\":return withoutSuffix||isFuture?result+(plural(number)?\"sekundy\":\"sekund\"):result+\"sekundami\";case\"m\":return withoutSuffix?\"minuta\":isFuture?\"minutu\":\"minutou\";case\"mm\":return withoutSuffix||isFuture?result+(plural(number)?\"minuty\":\"minut\"):result+\"minutami\";case\"h\":return withoutSuffix?\"hodina\":isFuture?\"hodinu\":\"hodinou\";case\"hh\":return withoutSuffix||isFuture?result+(plural(number)?\"hodiny\":\"hodin\"):result+\"hodinami\";case\"d\":return withoutSuffix||isFuture?\"den\":\"dnem\";case\"dd\":return withoutSuffix||isFuture?result+(plural(number)?\"dny\":\"dnÃ­\"):result+\"dny\";case\"M\":return withoutSuffix||isFuture?\"mÄ›sÃ­c\":\"mÄ›sÃ­cem\";case\"MM\":return withoutSuffix||isFuture?result+(plural(number)?\"mÄ›sÃ­ce\":\"mÄ›sÃ­cÅ¯\"):result+\"mÄ›sÃ­ci\";case\"y\":return withoutSuffix||isFuture?\"rok\":\"rokem\";case\"yy\":return withoutSuffix||isFuture?result+(plural(number)?\"roky\":\"let\"):result+\"lety\"}}moment.defineLocale(\"cs\",{months:months,monthsShort:monthsShort,monthsRegex:monthsRegex,monthsShortRegex:monthsRegex,monthsStrictRegex:/^(leden|ledna|Ãºnora|Ãºnor|bÅ™ezen|bÅ™ezna|duben|dubna|kvÄ›ten|kvÄ›tna|Äervenec|Äervence|Äerven|Äervna|srpen|srpna|zÃ¡Å™Ã­|Å™Ã­jen|Å™Ã­jna|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|Ãºno|bÅ™e|dub|kvÄ›|Ävn|Ävc|srp|zÃ¡Å™|Å™Ã­j|lis|pro)/i,monthsParse:monthsParse,longMonthsParse:monthsParse,shortMonthsParse:monthsParse,weekdays:\"nedÄ›le_pondÄ›lÃ­_ÃºterÃ½_stÅ™eda_Ätvrtek_pÃ¡tek_sobota\".split(\"_\"),weekdaysShort:\"ne_po_Ãºt_st_Ät_pÃ¡_so\".split(\"_\"),weekdaysMin:\"ne_po_Ãºt_st_Ät_pÃ¡_so\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd D. MMMM YYYY H:mm\",l:\"D. M. YYYY\"},calendar:{sameDay:\"[dnes v] LT\",nextDay:\"[zÃ­tra v] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[v nedÄ›li v] LT\";case 1:case 2:return\"[v] dddd [v] LT\";case 3:return\"[ve stÅ™edu v] LT\";case 4:return\"[ve Ätvrtek v] LT\";case 5:return\"[v pÃ¡tek v] LT\";case 6:return\"[v sobotu v] LT\"}},lastDay:\"[vÄera v] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[minulou nedÄ›li v] LT\";case 1:case 2:return\"[minulÃ©] dddd [v] LT\";case 3:return\"[minulou stÅ™edu v] LT\";case 4:case 5:return\"[minulÃ½] dddd [v] LT\";case 6:return\"[minulou sobotu v] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"pÅ™ed %s\",s:translate,ss:translate,m:translate,mm:translate,h:translate,hh:translate,d:translate,dd:translate,M:translate,MM:translate,y:translate,yy:translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"cv\",{months:\"ÐºÓ‘Ñ€Ð»Ð°Ñ‡_Ð½Ð°Ñ€Ó‘Ñ_Ð¿ÑƒÑˆ_Ð°ÐºÐ°_Ð¼Ð°Ð¹_Ò«Ó—Ñ€Ñ‚Ð¼Ðµ_ÑƒÑ‚Ó‘_Ò«ÑƒÑ€Ð»Ð°_Ð°Ð²Ó‘Ð½_ÑŽÐ¿Ð°_Ñ‡Ó³Ðº_Ñ€Ð°ÑˆÑ‚Ð°Ð²\".split(\"_\"),monthsShort:\"ÐºÓ‘Ñ€_Ð½Ð°Ñ€_Ð¿ÑƒÑˆ_Ð°ÐºÐ°_Ð¼Ð°Ð¹_Ò«Ó—Ñ€_ÑƒÑ‚Ó‘_Ò«ÑƒÑ€_Ð°Ð²Ð½_ÑŽÐ¿Ð°_Ñ‡Ó³Ðº_Ñ€Ð°Ñˆ\".split(\"_\"),weekdays:\"Ð²Ñ‹Ñ€ÑÐ°Ñ€Ð½Ð¸ÐºÑƒÐ½_Ñ‚ÑƒÐ½Ñ‚Ð¸ÐºÑƒÐ½_Ñ‹Ñ‚Ð»Ð°Ñ€Ð¸ÐºÑƒÐ½_ÑŽÐ½ÐºÑƒÐ½_ÐºÓ—Ò«Ð½ÐµÑ€Ð½Ð¸ÐºÑƒÐ½_ÑÑ€Ð½ÐµÐºÑƒÐ½_ÑˆÓ‘Ð¼Ð°Ñ‚ÐºÑƒÐ½\".split(\"_\"),weekdaysShort:\"Ð²Ñ‹Ñ€_Ñ‚ÑƒÐ½_Ñ‹Ñ‚Ð»_ÑŽÐ½_ÐºÓ—Ò«_ÑÑ€Ð½_ÑˆÓ‘Ð¼\".split(\"_\"),weekdaysMin:\"Ð²Ñ€_Ñ‚Ð½_Ñ‹Ñ‚_ÑŽÐ½_ÐºÒ«_ÑÑ€_ÑˆÐ¼\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD-MM-YYYY\",LL:\"YYYY [Ò«ÑƒÐ»Ñ…Ð¸] MMMM [ÑƒÐ¹Ó‘Ñ…Ó—Ð½] D[-Ð¼Ó—ÑˆÓ—]\",LLL:\"YYYY [Ò«ÑƒÐ»Ñ…Ð¸] MMMM [ÑƒÐ¹Ó‘Ñ…Ó—Ð½] D[-Ð¼Ó—ÑˆÓ—], HH:mm\",LLLL:\"dddd, YYYY [Ò«ÑƒÐ»Ñ…Ð¸] MMMM [ÑƒÐ¹Ó‘Ñ…Ó—Ð½] D[-Ð¼Ó—ÑˆÓ—], HH:mm\"},calendar:{sameDay:\"[ÐŸÐ°ÑÐ½] LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]\",nextDay:\"[Ð«Ñ€Ð°Ð½] LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]\",lastDay:\"[Ó–Ð½ÐµÑ€] LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]\",nextWeek:\"[ÒªÐ¸Ñ‚ÐµÑ] dddd LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]\",lastWeek:\"[Ð˜Ñ€Ñ‚Ð½Ó—] dddd LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]\",sameElse:\"L\"},relativeTime:{future:function(output){return output+(/ÑÐµÑ…ÐµÑ‚$/i.exec(output)?\"Ñ€ÐµÐ½\":/Ò«ÑƒÐ»$/i.exec(output)?\"Ñ‚Ð°Ð½\":\"Ñ€Ð°Ð½\")},past:\"%s ÐºÐ°ÑÐ»Ð»Ð°\",s:\"Ð¿Ó—Ñ€-Ð¸Ðº Ò«ÐµÐºÐºÑƒÐ½Ñ‚\",ss:\"%d Ò«ÐµÐºÐºÑƒÐ½Ñ‚\",m:\"Ð¿Ó—Ñ€ Ð¼Ð¸Ð½ÑƒÑ‚\",mm:\"%d Ð¼Ð¸Ð½ÑƒÑ‚\",h:\"Ð¿Ó—Ñ€ ÑÐµÑ…ÐµÑ‚\",hh:\"%d ÑÐµÑ…ÐµÑ‚\",d:\"Ð¿Ó—Ñ€ ÐºÑƒÐ½\",dd:\"%d ÐºÑƒÐ½\",M:\"Ð¿Ó—Ñ€ ÑƒÐ¹Ó‘Ñ…\",MM:\"%d ÑƒÐ¹Ó‘Ñ…\",y:\"Ð¿Ó—Ñ€ Ò«ÑƒÐ»\",yy:\"%d Ò«ÑƒÐ»\"},dayOfMonthOrdinalParse:/\\d{1,2}-Ð¼Ó—Ñˆ/,ordinal:\"%d-Ð¼Ó—Ñˆ\",week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"cy\",{months:\"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr\".split(\"_\"),monthsShort:\"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag\".split(\"_\"),weekdays:\"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn\".split(\"_\"),weekdaysShort:\"Sul_Llun_Maw_Mer_Iau_Gwe_Sad\".split(\"_\"),weekdaysMin:\"Su_Ll_Ma_Me_Ia_Gw_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Heddiw am] LT\",nextDay:\"[Yfory am] LT\",nextWeek:\"dddd [am] LT\",lastDay:\"[Ddoe am] LT\",lastWeek:\"dddd [diwethaf am] LT\",sameElse:\"L\"},relativeTime:{future:\"mewn %s\",past:\"%s yn Ã´l\",s:\"ychydig eiliadau\",ss:\"%d eiliad\",m:\"munud\",mm:\"%d munud\",h:\"awr\",hh:\"%d awr\",d:\"diwrnod\",dd:\"%d diwrnod\",M:\"mis\",MM:\"%d mis\",y:\"blwyddyn\",yy:\"%d flynedd\"},dayOfMonthOrdinalParse:/\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(number){var output=\"\";return number&gt;20?output=40===number||50===number||60===number||80===number||100===number?\"fed\":\"ain\":number&gt;0&amp;&amp;(output=[\"\",\"af\",\"il\",\"ydd\",\"ydd\",\"ed\",\"ed\",\"ed\",\"fed\",\"fed\",\"fed\",\"eg\",\"fed\",\"eg\",\"eg\",\"fed\",\"eg\",\"eg\",\"fed\",\"eg\",\"fed\"][number]),number+output},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"da\",{months:\"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),weekdays:\"sÃ¸ndag_mandag_tirsdag_onsdag_torsdag_fredag_lÃ¸rdag\".split(\"_\"),weekdaysShort:\"sÃ¸n_man_tir_ons_tor_fre_lÃ¸r\".split(\"_\"),weekdaysMin:\"sÃ¸_ma_ti_on_to_fr_lÃ¸\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd [d.] D. MMMM YYYY [kl.] HH:mm\"},calendar:{sameDay:\"[i dag kl.] LT\",nextDay:\"[i morgen kl.] LT\",nextWeek:\"pÃ¥ dddd [kl.] LT\",lastDay:\"[i gÃ¥r kl.] LT\",lastWeek:\"[i] dddd[s kl.] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"%s siden\",s:\"fÃ¥ sekunder\",ss:\"%d sekunder\",m:\"et minut\",mm:\"%d minutter\",h:\"en time\",hh:\"%d timer\",d:\"en dag\",dd:\"%d dage\",M:\"en mÃ¥ned\",MM:\"%d mÃ¥neder\",y:\"et Ã¥r\",yy:\"%d Ã¥r\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";function processRelativeTime(number,withoutSuffix,key,isFuture){var format={m:[\"eine Minute\",\"einer Minute\"],h:[\"eine Stunde\",\"einer Stunde\"],d:[\"ein Tag\",\"einem Tag\"],dd:[number+\" Tage\",number+\" Tagen\"],w:[\"eine Woche\",\"einer Woche\"],M:[\"ein Monat\",\"einem Monat\"],MM:[number+\" Monate\",number+\" Monaten\"],y:[\"ein Jahr\",\"einem Jahr\"],yy:[number+\" Jahre\",number+\" Jahren\"]};return withoutSuffix?format[key][0]:format[key][1]}moment.defineLocale(\"de\",{months:\"Januar_Februar_MÃ¤rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jan._Feb._MÃ¤rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\".split(\"_\"),weekdaysShort:\"So._Mo._Di._Mi._Do._Fr._Sa.\".split(\"_\"),weekdaysMin:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd, D. MMMM YYYY HH:mm\"},calendar:{sameDay:\"[heute um] LT [Uhr]\",sameElse:\"L\",nextDay:\"[morgen um] LT [Uhr]\",nextWeek:\"dddd [um] LT [Uhr]\",lastDay:\"[gestern um] LT [Uhr]\",lastWeek:\"[letzten] dddd [um] LT [Uhr]\"},relativeTime:{future:\"in %s\",past:\"vor %s\",s:\"ein paar Sekunden\",ss:\"%d Sekunden\",m:processRelativeTime,mm:\"%d Minuten\",h:processRelativeTime,hh:\"%d Stunden\",d:processRelativeTime,dd:processRelativeTime,w:processRelativeTime,ww:\"%d Wochen\",M:processRelativeTime,MM:processRelativeTime,y:processRelativeTime,yy:processRelativeTime},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";function processRelativeTime(number,withoutSuffix,key,isFuture){var format={m:[\"eine Minute\",\"einer Minute\"],h:[\"eine Stunde\",\"einer Stunde\"],d:[\"ein Tag\",\"einem Tag\"],dd:[number+\" Tage\",number+\" Tagen\"],w:[\"eine Woche\",\"einer Woche\"],M:[\"ein Monat\",\"einem Monat\"],MM:[number+\" Monate\",number+\" Monaten\"],y:[\"ein Jahr\",\"einem Jahr\"],yy:[number+\" Jahre\",number+\" Jahren\"]};return withoutSuffix?format[key][0]:format[key][1]}moment.defineLocale(\"de-at\",{months:\"JÃ¤nner_Februar_MÃ¤rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"JÃ¤n._Feb._MÃ¤rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\".split(\"_\"),weekdaysShort:\"So._Mo._Di._Mi._Do._Fr._Sa.\".split(\"_\"),weekdaysMin:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd, D. MMMM YYYY HH:mm\"},calendar:{sameDay:\"[heute um] LT [Uhr]\",sameElse:\"L\",nextDay:\"[morgen um] LT [Uhr]\",nextWeek:\"dddd [um] LT [Uhr]\",lastDay:\"[gestern um] LT [Uhr]\",lastWeek:\"[letzten] dddd [um] LT [Uhr]\"},relativeTime:{future:\"in %s\",past:\"vor %s\",s:\"ein paar Sekunden\",ss:\"%d Sekunden\",m:processRelativeTime,mm:\"%d Minuten\",h:processRelativeTime,hh:\"%d Stunden\",d:processRelativeTime,dd:processRelativeTime,w:processRelativeTime,ww:\"%d Wochen\",M:processRelativeTime,MM:processRelativeTime,y:processRelativeTime,yy:processRelativeTime},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";function processRelativeTime(number,withoutSuffix,key,isFuture){var format={m:[\"eine Minute\",\"einer Minute\"],h:[\"eine Stunde\",\"einer Stunde\"],d:[\"ein Tag\",\"einem Tag\"],dd:[number+\" Tage\",number+\" Tagen\"],w:[\"eine Woche\",\"einer Woche\"],M:[\"ein Monat\",\"einem Monat\"],MM:[number+\" Monate\",number+\" Monaten\"],y:[\"ein Jahr\",\"einem Jahr\"],yy:[number+\" Jahre\",number+\" Jahren\"]};return withoutSuffix?format[key][0]:format[key][1]}moment.defineLocale(\"de-ch\",{months:\"Januar_Februar_MÃ¤rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jan._Feb._MÃ¤rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\".split(\"_\"),weekdaysShort:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysMin:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd, D. MMMM YYYY HH:mm\"},calendar:{sameDay:\"[heute um] LT [Uhr]\",sameElse:\"L\",nextDay:\"[morgen um] LT [Uhr]\",nextWeek:\"dddd [um] LT [Uhr]\",lastDay:\"[gestern um] LT [Uhr]\",lastWeek:\"[letzten] dddd [um] LT [Uhr]\"},relativeTime:{future:\"in %s\",past:\"vor %s\",s:\"ein paar Sekunden\",ss:\"%d Sekunden\",m:processRelativeTime,mm:\"%d Minuten\",h:processRelativeTime,hh:\"%d Stunden\",d:processRelativeTime,dd:processRelativeTime,w:processRelativeTime,ww:\"%d Wochen\",M:processRelativeTime,MM:processRelativeTime,y:processRelativeTime,yy:processRelativeTime},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var months=[\"Þ–Þ¬Þ‚ÞªÞ‡Þ¦ÞƒÞ©\",\"ÞŠÞ¬Þ„Þ°ÞƒÞªÞ‡Þ¦ÞƒÞ©\",\"Þ‰Þ§ÞƒÞ¨Þ—Þª\",\"Þ‡Þ­Þ•Þ°ÞƒÞ©ÞÞª\",\"Þ‰Þ­\",\"Þ–Þ«Þ‚Þ°\",\"Þ–ÞªÞÞ¦Þ‡Þ¨\",\"Þ‡Þ¯ÞŽÞ¦ÞÞ°Þ“Þª\",\"ÞÞ¬Þ•Þ°Þ“Þ¬Þ‰Þ°Þ„Þ¦ÞƒÞª\",\"Þ‡Þ®Þ†Þ°Þ“Þ¯Þ„Þ¦ÞƒÞª\",\"Þ‚Þ®ÞˆÞ¬Þ‰Þ°Þ„Þ¦ÞƒÞª\",\"Þ‘Þ¨ÞÞ¬Þ‰Þ°Þ„Þ¦ÞƒÞª\"],weekdays=[\"Þ‡Þ§Þ‹Þ¨Þ‡Þ°ÞŒÞ¦\",\"Þ€Þ¯Þ‰Þ¦\",\"Þ‡Þ¦Þ‚Þ°ÞŽÞ§ÞƒÞ¦\",\"Þ„ÞªÞ‹Þ¦\",\"Þ„ÞªÞƒÞ§ÞÞ°ÞŠÞ¦ÞŒÞ¨\",\"Þ€ÞªÞ†ÞªÞƒÞª\",\"Þ€Þ®Þ‚Þ¨Þ€Þ¨ÞƒÞª\"];moment.defineLocale(\"dv\",{months:months,monthsShort:months,weekdays:weekdays,weekdaysShort:weekdays,weekdaysMin:\"Þ‡Þ§Þ‹Þ¨_Þ€Þ¯Þ‰Þ¦_Þ‡Þ¦Þ‚Þ°_Þ„ÞªÞ‹Þ¦_Þ„ÞªÞƒÞ§_Þ€ÞªÞ†Þª_Þ€Þ®Þ‚Þ¨\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"D/M/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/Þ‰Þ†|Þ‰ÞŠ/,isPM:function(input){return\"Þ‰ÞŠ\"===input},meridiem:function(hour,minute,isLower){return hour&lt;12?\"Þ‰Þ†\":\"Þ‰ÞŠ\"},calendar:{sameDay:\"[Þ‰Þ¨Þ‡Þ¦Þ‹Þª] LT\",nextDay:\"[Þ‰Þ§Þ‹Þ¦Þ‰Þ§] LT\",nextWeek:\"dddd LT\",lastDay:\"[Þ‡Þ¨Þ‡Þ°Þ”Þ¬] LT\",lastWeek:\"[ÞŠÞ§Þ‡Þ¨ÞŒÞªÞˆÞ¨] dddd LT\",sameElse:\"L\"},relativeTime:{future:\"ÞŒÞ¬ÞƒÞ­ÞŽÞ¦Þ‡Þ¨ %s\",past:\"Þ†ÞªÞƒÞ¨Þ‚Þ° %s\",s:\"ÞÞ¨Þ†ÞªÞ‚Þ°ÞŒÞªÞ†Þ®Þ…Þ¬Þ‡Þ°\",ss:\"d% ÞÞ¨Þ†ÞªÞ‚Þ°ÞŒÞª\",m:\"Þ‰Þ¨Þ‚Þ¨Þ“Þ¬Þ‡Þ°\",mm:\"Þ‰Þ¨Þ‚Þ¨Þ“Þª %d\",h:\"ÞŽÞ¦Þ‘Þ¨Þ‡Þ¨ÞƒÞ¬Þ‡Þ°\",hh:\"ÞŽÞ¦Þ‘Þ¨Þ‡Þ¨ÞƒÞª %d\",d:\"Þ‹ÞªÞˆÞ¦Þ€Þ¬Þ‡Þ°\",dd:\"Þ‹ÞªÞˆÞ¦ÞÞ° %d\",M:\"Þ‰Þ¦Þ€Þ¬Þ‡Þ°\",MM:\"Þ‰Þ¦ÞÞ° %d\",y:\"Þ‡Þ¦Þ€Þ¦ÞƒÞ¬Þ‡Þ°\",yy:\"Þ‡Þ¦Þ€Þ¦ÞƒÞª %d\"},preparse:function(string){return string.replace(/ØŒ/g,\",\")},postformat:function(string){return string.replace(/,/g,\"ØŒ\")},week:{dow:7,doy:12}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"el\",{monthsNominativeEl:\"Î™Î±Î½Î¿Ï…Î¬ÏÎ¹Î¿Ï‚_Î¦ÎµÎ²ÏÎ¿Ï…Î¬ÏÎ¹Î¿Ï‚_ÎœÎ¬ÏÏ„Î¹Î¿Ï‚_Î‘Ï€ÏÎ¯Î»Î¹Î¿Ï‚_ÎœÎ¬Î¹Î¿Ï‚_Î™Î¿ÏÎ½Î¹Î¿Ï‚_Î™Î¿ÏÎ»Î¹Î¿Ï‚_Î‘ÏÎ³Î¿Ï…ÏƒÏ„Î¿Ï‚_Î£ÎµÏ€Ï„Î­Î¼Î²ÏÎ¹Î¿Ï‚_ÎŸÎºÏ„ÏŽÎ²ÏÎ¹Î¿Ï‚_ÎÎ¿Î­Î¼Î²ÏÎ¹Î¿Ï‚_Î”ÎµÎºÎ­Î¼Î²ÏÎ¹Î¿Ï‚\".split(\"_\"),monthsGenitiveEl:\"Î™Î±Î½Î¿Ï…Î±ÏÎ¯Î¿Ï…_Î¦ÎµÎ²ÏÎ¿Ï…Î±ÏÎ¯Î¿Ï…_ÎœÎ±ÏÏ„Î¯Î¿Ï…_Î‘Ï€ÏÎ¹Î»Î¯Î¿Ï…_ÎœÎ±ÎÎ¿Ï…_Î™Î¿Ï…Î½Î¯Î¿Ï…_Î™Î¿Ï…Î»Î¯Î¿Ï…_Î‘Ï…Î³Î¿ÏÏƒÏ„Î¿Ï…_Î£ÎµÏ€Ï„ÎµÎ¼Î²ÏÎ¯Î¿Ï…_ÎŸÎºÏ„Ï‰Î²ÏÎ¯Î¿Ï…_ÎÎ¿ÎµÎ¼Î²ÏÎ¯Î¿Ï…_Î”ÎµÎºÎµÎ¼Î²ÏÎ¯Î¿Ï…\".split(\"_\"),months:function(momentToFormat,format){return momentToFormat?\"string\"==typeof format&amp;&amp;/D/.test(format.substring(0,format.indexOf(\"MMMM\")))?this._monthsGenitiveEl[momentToFormat.month()]:this._monthsNominativeEl[momentToFormat.month()]:this._monthsNominativeEl},monthsShort:\"Î™Î±Î½_Î¦ÎµÎ²_ÎœÎ±Ï_Î‘Ï€Ï_ÎœÎ±ÏŠ_Î™Î¿Ï…Î½_Î™Î¿Ï…Î»_Î‘Ï…Î³_Î£ÎµÏ€_ÎŸÎºÏ„_ÎÎ¿Îµ_Î”ÎµÎº\".split(\"_\"),weekdays:\"ÎšÏ…ÏÎ¹Î±ÎºÎ®_Î”ÎµÏ…Ï„Î­ÏÎ±_Î¤ÏÎ¯Ï„Î·_Î¤ÎµÏ„Î¬ÏÏ„Î·_Î&nbsp;Î­Î¼Ï€Ï„Î·_Î&nbsp;Î±ÏÎ±ÏƒÎºÎµÏ…Î®_Î£Î¬Î²Î²Î±Ï„Î¿\".split(\"_\"),weekdaysShort:\"ÎšÏ…Ï_Î”ÎµÏ…_Î¤ÏÎ¹_Î¤ÎµÏ„_Î&nbsp;ÎµÎ¼_Î&nbsp;Î±Ï_Î£Î±Î²\".split(\"_\"),weekdaysMin:\"ÎšÏ…_Î”Îµ_Î¤Ï_Î¤Îµ_Î&nbsp;Îµ_Î&nbsp;Î±_Î£Î±\".split(\"_\"),meridiem:function(hours,minutes,isLower){return hours&gt;11?isLower?\"Î¼Î¼\":\"ÎœÎœ\":isLower?\"Ï€Î¼\":\"Î&nbsp;Îœ\"},isPM:function(input){return\"Î¼\"===(input+\"\").toLowerCase()[0]},meridiemParse:/[Î&nbsp;Îœ]\\.?Îœ?\\.?/i,longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendarEl:{sameDay:\"[Î£Î®Î¼ÎµÏÎ± {}] LT\",nextDay:\"[Î‘ÏÏÎ¹Î¿ {}] LT\",nextWeek:\"dddd [{}] LT\",lastDay:\"[Î§Î¸ÎµÏ‚ {}] LT\",lastWeek:function(){switch(this.day()){case 6:return\"[Ï„Î¿ Ï€ÏÎ¿Î·Î³Î¿ÏÎ¼ÎµÎ½Î¿] dddd [{}] LT\";default:return\"[Ï„Î·Î½ Ï€ÏÎ¿Î·Î³Î¿ÏÎ¼ÎµÎ½Î·] dddd [{}] LT\"}},sameElse:\"L\"},calendar:function(key,mom){var input,output=this._calendarEl[key],hours=mom&amp;&amp;mom.hours();return input=output,(\"undefined\"!=typeof Function&amp;&amp;input instanceof Function||\"[object Function]\"===Object.prototype.toString.call(input))&amp;&amp;(output=output.apply(mom)),output.replace(\"{}\",hours%12==1?\"ÏƒÏ„Î·\":\"ÏƒÏ„Î¹Ï‚\")},relativeTime:{future:\"ÏƒÎµ %s\",past:\"%s Ï€ÏÎ¹Î½\",s:\"Î»Î¯Î³Î± Î´ÎµÏ…Ï„ÎµÏÏŒÎ»ÎµÏ€Ï„Î±\",ss:\"%d Î´ÎµÏ…Ï„ÎµÏÏŒÎ»ÎµÏ€Ï„Î±\",m:\"Î­Î½Î± Î»ÎµÏ€Ï„ÏŒ\",mm:\"%d Î»ÎµÏ€Ï„Î¬\",h:\"Î¼Î¯Î± ÏŽÏÎ±\",hh:\"%d ÏŽÏÎµÏ‚\",d:\"Î¼Î¯Î± Î¼Î­ÏÎ±\",dd:\"%d Î¼Î­ÏÎµÏ‚\",M:\"Î­Î½Î±Ï‚ Î¼Î®Î½Î±Ï‚\",MM:\"%d Î¼Î®Î½ÎµÏ‚\",y:\"Î­Î½Î±Ï‚ Ï‡ÏÏŒÎ½Î¿Ï‚\",yy:\"%d Ï‡ÏÏŒÎ½Î¹Î±\"},dayOfMonthOrdinalParse:/\\d{1,2}Î·/,ordinal:\"%dÎ·\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"en-au\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(number){var b=number%10;return number+(1==~~(number%100/10)?\"th\":1===b?\"st\":2===b?\"nd\":3===b?\"rd\":\"th\")},week:{dow:0,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"en-ca\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"YYYY-MM-DD\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(number){var b=number%10;return number+(1==~~(number%100/10)?\"th\":1===b?\"st\":2===b?\"nd\":3===b?\"rd\":\"th\")}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"en-gb\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(number){var b=number%10;return number+(1==~~(number%100/10)?\"th\":1===b?\"st\":2===b?\"nd\":3===b?\"rd\":\"th\")},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"en-ie\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(number){var b=number%10;return number+(1==~~(number%100/10)?\"th\":1===b?\"st\":2===b?\"nd\":3===b?\"rd\":\"th\")},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"en-il\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(number){var b=number%10;return number+(1==~~(number%100/10)?\"th\":1===b?\"st\":2===b?\"nd\":3===b?\"rd\":\"th\")}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"en-in\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(number){var b=number%10;return number+(1==~~(number%100/10)?\"th\":1===b?\"st\":2===b?\"nd\":3===b?\"rd\":\"th\")},week:{dow:0,doy:6}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"en-nz\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(number){var b=number%10;return number+(1==~~(number%100/10)?\"th\":1===b?\"st\":2===b?\"nd\":3===b?\"rd\":\"th\")},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"en-sg\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(number){var b=number%10;return number+(1==~~(number%100/10)?\"th\":1===b?\"st\":2===b?\"nd\":3===b?\"rd\":\"th\")},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"eo\",{months:\"januaro_februaro_marto_aprilo_majo_junio_julio_aÅ­gusto_septembro_oktobro_novembro_decembro\".split(\"_\"),monthsShort:\"jan_feb_mart_apr_maj_jun_jul_aÅ­g_sept_okt_nov_dec\".split(\"_\"),weekdays:\"dimanÄ‰o_lundo_mardo_merkredo_ÄµaÅ­do_vendredo_sabato\".split(\"_\"),weekdaysShort:\"dim_lun_mard_merk_ÄµaÅ­_ven_sab\".split(\"_\"),weekdaysMin:\"di_lu_ma_me_Äµa_ve_sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"[la] D[-an de] MMMM, YYYY\",LLL:\"[la] D[-an de] MMMM, YYYY HH:mm\",LLLL:\"dddd[n], [la] D[-an de] MMMM, YYYY HH:mm\",llll:\"ddd, [la] D[-an de] MMM, YYYY HH:mm\"},meridiemParse:/[ap]\\.t\\.m/i,isPM:function(input){return\"p\"===input.charAt(0).toLowerCase()},meridiem:function(hours,minutes,isLower){return hours&gt;11?isLower?\"p.t.m.\":\"P.T.M.\":isLower?\"a.t.m.\":\"A.T.M.\"},calendar:{sameDay:\"[HodiaÅ­ je] LT\",nextDay:\"[MorgaÅ­ je] LT\",nextWeek:\"dddd[n je] LT\",lastDay:\"[HieraÅ­ je] LT\",lastWeek:\"[pasintan] dddd[n je] LT\",sameElse:\"L\"},relativeTime:{future:\"post %s\",past:\"antaÅ­ %s\",s:\"kelkaj sekundoj\",ss:\"%d sekundoj\",m:\"unu minuto\",mm:\"%d minutoj\",h:\"unu horo\",hh:\"%d horoj\",d:\"unu tago\",dd:\"%d tagoj\",M:\"unu monato\",MM:\"%d monatoj\",y:\"unu jaro\",yy:\"%d jaroj\"},dayOfMonthOrdinalParse:/\\d{1,2}a/,ordinal:\"%da\",week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var monthsShortDot=\"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.\".split(\"_\"),monthsShort=\"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\".split(\"_\"),monthsParse=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],monthsRegex=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;moment.defineLocale(\"es\",{months:\"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\".split(\"_\"),monthsShort:function(m,format){return m?/-MMM-/.test(format)?monthsShort[m.month()]:monthsShortDot[m.month()]:monthsShortDot},monthsRegex:monthsRegex,monthsShortRegex:monthsRegex,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,monthsParse:monthsParse,longMonthsParse:monthsParse,shortMonthsParse:monthsParse,weekdays:\"domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._miÃ©._jue._vie._sÃ¡b.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mi_ju_vi_sÃ¡\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY H:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY H:mm\"},calendar:{sameDay:function(){return\"[hoy a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextDay:function(){return\"[maÃ±ana a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextWeek:function(){return\"dddd [a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastDay:function(){return\"[ayer a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [pasado a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"en %s\",past:\"hace %s\",s:\"unos segundos\",ss:\"%d segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"una hora\",hh:\"%d horas\",d:\"un dÃ­a\",dd:\"%d dÃ­as\",w:\"una semana\",ww:\"%d semanas\",M:\"un mes\",MM:\"%d meses\",y:\"un aÃ±o\",yy:\"%d aÃ±os\"},dayOfMonthOrdinalParse:/\\d{1,2}Âº/,ordinal:\"%dÂº\",week:{dow:1,doy:4},invalidDate:\"Fecha invÃ¡lida\"})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var monthsShortDot=\"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.\".split(\"_\"),monthsShort=\"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\".split(\"_\"),monthsParse=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],monthsRegex=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;moment.defineLocale(\"es-do\",{months:\"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\".split(\"_\"),monthsShort:function(m,format){return m?/-MMM-/.test(format)?monthsShort[m.month()]:monthsShortDot[m.month()]:monthsShortDot},monthsRegex:monthsRegex,monthsShortRegex:monthsRegex,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,monthsParse:monthsParse,longMonthsParse:monthsParse,shortMonthsParse:monthsParse,weekdays:\"domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._miÃ©._jue._vie._sÃ¡b.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mi_ju_vi_sÃ¡\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY h:mm A\",LLLL:\"dddd, D [de] MMMM [de] YYYY h:mm A\"},calendar:{sameDay:function(){return\"[hoy a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextDay:function(){return\"[maÃ±ana a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextWeek:function(){return\"dddd [a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastDay:function(){return\"[ayer a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [pasado a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"en %s\",past:\"hace %s\",s:\"unos segundos\",ss:\"%d segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"una hora\",hh:\"%d horas\",d:\"un dÃ­a\",dd:\"%d dÃ­as\",w:\"una semana\",ww:\"%d semanas\",M:\"un mes\",MM:\"%d meses\",y:\"un aÃ±o\",yy:\"%d aÃ±os\"},dayOfMonthOrdinalParse:/\\d{1,2}Âº/,ordinal:\"%dÂº\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var monthsShortDot=\"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.\".split(\"_\"),monthsShort=\"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\".split(\"_\"),monthsParse=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],monthsRegex=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;moment.defineLocale(\"es-mx\",{months:\"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\".split(\"_\"),monthsShort:function(m,format){return m?/-MMM-/.test(format)?monthsShort[m.month()]:monthsShortDot[m.month()]:monthsShortDot},monthsRegex:monthsRegex,monthsShortRegex:monthsRegex,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,monthsParse:monthsParse,longMonthsParse:monthsParse,shortMonthsParse:monthsParse,weekdays:\"domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._miÃ©._jue._vie._sÃ¡b.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mi_ju_vi_sÃ¡\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY H:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY H:mm\"},calendar:{sameDay:function(){return\"[hoy a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextDay:function(){return\"[maÃ±ana a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextWeek:function(){return\"dddd [a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastDay:function(){return\"[ayer a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [pasado a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"en %s\",past:\"hace %s\",s:\"unos segundos\",ss:\"%d segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"una hora\",hh:\"%d horas\",d:\"un dÃ­a\",dd:\"%d dÃ­as\",w:\"una semana\",ww:\"%d semanas\",M:\"un mes\",MM:\"%d meses\",y:\"un aÃ±o\",yy:\"%d aÃ±os\"},dayOfMonthOrdinalParse:/\\d{1,2}Âº/,ordinal:\"%dÂº\",week:{dow:0,doy:4},invalidDate:\"Fecha invÃ¡lida\"})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var monthsShortDot=\"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.\".split(\"_\"),monthsShort=\"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\".split(\"_\"),monthsParse=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],monthsRegex=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;moment.defineLocale(\"es-us\",{months:\"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\".split(\"_\"),monthsShort:function(m,format){return m?/-MMM-/.test(format)?monthsShort[m.month()]:monthsShortDot[m.month()]:monthsShortDot},monthsRegex:monthsRegex,monthsShortRegex:monthsRegex,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,monthsParse:monthsParse,longMonthsParse:monthsParse,shortMonthsParse:monthsParse,weekdays:\"domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._miÃ©._jue._vie._sÃ¡b.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mi_ju_vi_sÃ¡\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"MM/DD/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY h:mm A\",LLLL:\"dddd, D [de] MMMM [de] YYYY h:mm A\"},calendar:{sameDay:function(){return\"[hoy a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextDay:function(){return\"[maÃ±ana a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextWeek:function(){return\"dddd [a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastDay:function(){return\"[ayer a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [pasado a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"en %s\",past:\"hace %s\",s:\"unos segundos\",ss:\"%d segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"una hora\",hh:\"%d horas\",d:\"un dÃ­a\",dd:\"%d dÃ­as\",w:\"una semana\",ww:\"%d semanas\",M:\"un mes\",MM:\"%d meses\",y:\"un aÃ±o\",yy:\"%d aÃ±os\"},dayOfMonthOrdinalParse:/\\d{1,2}Âº/,ordinal:\"%dÂº\",week:{dow:0,doy:6}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";function processRelativeTime(number,withoutSuffix,key,isFuture){var format={s:[\"mÃµne sekundi\",\"mÃµni sekund\",\"paar sekundit\"],ss:[number+\"sekundi\",number+\"sekundit\"],m:[\"Ã¼he minuti\",\"Ã¼ks minut\"],mm:[number+\" minuti\",number+\" minutit\"],h:[\"Ã¼he tunni\",\"tund aega\",\"Ã¼ks tund\"],hh:[number+\" tunni\",number+\" tundi\"],d:[\"Ã¼he pÃ¤eva\",\"Ã¼ks pÃ¤ev\"],M:[\"kuu aja\",\"kuu aega\",\"Ã¼ks kuu\"],MM:[number+\" kuu\",number+\" kuud\"],y:[\"Ã¼he aasta\",\"aasta\",\"Ã¼ks aasta\"],yy:[number+\" aasta\",number+\" aastat\"]};return withoutSuffix?format[key][2]?format[key][2]:format[key][1]:isFuture?format[key][0]:format[key][1]}moment.defineLocale(\"et\",{months:\"jaanuar_veebruar_mÃ¤rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember\".split(\"_\"),monthsShort:\"jaan_veebr_mÃ¤rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets\".split(\"_\"),weekdays:\"pÃ¼hapÃ¤ev_esmaspÃ¤ev_teisipÃ¤ev_kolmapÃ¤ev_neljapÃ¤ev_reede_laupÃ¤ev\".split(\"_\"),weekdaysShort:\"P_E_T_K_N_R_L\".split(\"_\"),weekdaysMin:\"P_E_T_K_N_R_L\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[TÃ¤na,] LT\",nextDay:\"[Homme,] LT\",nextWeek:\"[JÃ¤rgmine] dddd LT\",lastDay:\"[Eile,] LT\",lastWeek:\"[Eelmine] dddd LT\",sameElse:\"L\"},relativeTime:{future:\"%s pÃ¤rast\",past:\"%s tagasi\",s:processRelativeTime,ss:processRelativeTime,m:processRelativeTime,mm:processRelativeTime,h:processRelativeTime,hh:processRelativeTime,d:processRelativeTime,dd:\"%d pÃ¤eva\",M:processRelativeTime,MM:processRelativeTime,y:processRelativeTime,yy:processRelativeTime},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"eu\",{months:\"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua\".split(\"_\"),monthsShort:\"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.\".split(\"_\"),monthsParseExact:!0,weekdays:\"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata\".split(\"_\"),weekdaysShort:\"ig._al._ar._az._og._ol._lr.\".split(\"_\"),weekdaysMin:\"ig_al_ar_az_og_ol_lr\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"YYYY[ko] MMMM[ren] D[a]\",LLL:\"YYYY[ko] MMMM[ren] D[a] HH:mm\",LLLL:\"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm\",l:\"YYYY-M-D\",ll:\"YYYY[ko] MMM D[a]\",lll:\"YYYY[ko] MMM D[a] HH:mm\",llll:\"ddd, YYYY[ko] MMM D[a] HH:mm\"},calendar:{sameDay:\"[gaur] LT[etan]\",nextDay:\"[bihar] LT[etan]\",nextWeek:\"dddd LT[etan]\",lastDay:\"[atzo] LT[etan]\",lastWeek:\"[aurreko] dddd LT[etan]\",sameElse:\"L\"},relativeTime:{future:\"%s barru\",past:\"duela %s\",s:\"segundo batzuk\",ss:\"%d segundo\",m:\"minutu bat\",mm:\"%d minutu\",h:\"ordu bat\",hh:\"%d ordu\",d:\"egun bat\",dd:\"%d egun\",M:\"hilabete bat\",MM:\"%d hilabete\",y:\"urte bat\",yy:\"%d urte\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var symbolMap={1:\"Û±\",2:\"Û²\",3:\"Û³\",4:\"Û´\",5:\"Ûµ\",6:\"Û¶\",7:\"Û·\",8:\"Û¸\",9:\"Û¹\",0:\"Û°\"},numberMap={\"Û±\":\"1\",\"Û²\":\"2\",\"Û³\":\"3\",\"Û´\":\"4\",\"Ûµ\":\"5\",\"Û¶\":\"6\",\"Û·\":\"7\",\"Û¸\":\"8\",\"Û¹\":\"9\",\"Û°\":\"0\"};moment.defineLocale(\"fa\",{months:\"Ú˜Ø§Ù†ÙˆÛŒÙ‡_ÙÙˆØ±ÛŒÙ‡_Ù…Ø§Ø±Ø³_Ø¢ÙˆØ±ÛŒÙ„_Ù…Ù‡_Ú˜ÙˆØ¦Ù†_Ú˜ÙˆØ¦ÛŒÙ‡_Ø§ÙˆØª_Ø³Ù¾ØªØ§Ù…Ø¨Ø±_Ø§Ú©ØªØ¨Ø±_Ù†ÙˆØ§Ù…Ø¨Ø±_Ø¯Ø³Ø§Ù…Ø¨Ø±\".split(\"_\"),monthsShort:\"Ú˜Ø§Ù†ÙˆÛŒÙ‡_ÙÙˆØ±ÛŒÙ‡_Ù…Ø§Ø±Ø³_Ø¢ÙˆØ±ÛŒÙ„_Ù…Ù‡_Ú˜ÙˆØ¦Ù†_Ú˜ÙˆØ¦ÛŒÙ‡_Ø§ÙˆØª_Ø³Ù¾ØªØ§Ù…Ø¨Ø±_Ø§Ú©ØªØ¨Ø±_Ù†ÙˆØ§Ù…Ø¨Ø±_Ø¯Ø³Ø§Ù…Ø¨Ø±\".split(\"_\"),weekdays:\"ÛŒÚ©â€ŒØ´Ù†Ø¨Ù‡_Ø¯ÙˆØ´Ù†Ø¨Ù‡_Ø³Ù‡â€ŒØ´Ù†Ø¨Ù‡_Ú†Ù‡Ø§Ø±Ø´Ù†Ø¨Ù‡_Ù¾Ù†Ø¬â€ŒØ´Ù†Ø¨Ù‡_Ø¬Ù…Ø¹Ù‡_Ø´Ù†Ø¨Ù‡\".split(\"_\"),weekdaysShort:\"ÛŒÚ©â€ŒØ´Ù†Ø¨Ù‡_Ø¯ÙˆØ´Ù†Ø¨Ù‡_Ø³Ù‡â€ŒØ´Ù†Ø¨Ù‡_Ú†Ù‡Ø§Ø±Ø´Ù†Ø¨Ù‡_Ù¾Ù†Ø¬â€ŒØ´Ù†Ø¨Ù‡_Ø¬Ù…Ø¹Ù‡_Ø´Ù†Ø¨Ù‡\".split(\"_\"),weekdaysMin:\"ÛŒ_Ø¯_Ø³_Ú†_Ù¾_Ø¬_Ø´\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},meridiemParse:/Ù‚Ø¨Ù„ Ø§Ø² Ø¸Ù‡Ø±|Ø¨Ø¹Ø¯ Ø§Ø² Ø¸Ù‡Ø±/,isPM:function(input){return/Ø¨Ø¹Ø¯ Ø§Ø² Ø¸Ù‡Ø±/.test(input)},meridiem:function(hour,minute,isLower){return hour&lt;12?\"Ù‚Ø¨Ù„ Ø§Ø² Ø¸Ù‡Ø±\":\"Ø¨Ø¹Ø¯ Ø§Ø² Ø¸Ù‡Ø±\"},calendar:{sameDay:\"[Ø§Ù…Ø±ÙˆØ² Ø³Ø§Ø¹Øª] LT\",nextDay:\"[ÙØ±Ø¯Ø§ Ø³Ø§Ø¹Øª] LT\",nextWeek:\"dddd [Ø³Ø§Ø¹Øª] LT\",lastDay:\"[Ø¯ÛŒØ±ÙˆØ² Ø³Ø§Ø¹Øª] LT\",lastWeek:\"dddd [Ù¾ÛŒØ´] [Ø³Ø§Ø¹Øª] LT\",sameElse:\"L\"},relativeTime:{future:\"Ø¯Ø± %s\",past:\"%s Ù¾ÛŒØ´\",s:\"Ú†Ù†Ø¯ Ø«Ø§Ù†ÛŒÙ‡\",ss:\"%d Ø«Ø§Ù†ÛŒÙ‡\",m:\"ÛŒÚ© Ø¯Ù‚ÛŒÙ‚Ù‡\",mm:\"%d Ø¯Ù‚ÛŒÙ‚Ù‡\",h:\"ÛŒÚ© Ø³Ø§Ø¹Øª\",hh:\"%d Ø³Ø§Ø¹Øª\",d:\"ÛŒÚ© Ø±ÙˆØ²\",dd:\"%d Ø±ÙˆØ²\",M:\"ÛŒÚ© Ù…Ø§Ù‡\",MM:\"%d Ù…Ø§Ù‡\",y:\"ÛŒÚ© Ø³Ø§Ù„\",yy:\"%d Ø³Ø§Ù„\"},preparse:function(string){return string.replace(/[Û°-Û¹]/g,(function(match){return numberMap[match]})).replace(/ØŒ/g,\",\")},postformat:function(string){return string.replace(/\\d/g,(function(match){return symbolMap[match]})).replace(/,/g,\"ØŒ\")},dayOfMonthOrdinalParse:/\\d{1,2}Ù…/,ordinal:\"%dÙ…\",week:{dow:6,doy:12}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var numbersPast=\"nolla yksi kaksi kolme neljÃ¤ viisi kuusi seitsemÃ¤n kahdeksan yhdeksÃ¤n\".split(\" \"),numbersFuture=[\"nolla\",\"yhden\",\"kahden\",\"kolmen\",\"neljÃ¤n\",\"viiden\",\"kuuden\",numbersPast[7],numbersPast[8],numbersPast[9]];function translate(number,withoutSuffix,key,isFuture){var result=\"\";switch(key){case\"s\":return isFuture?\"muutaman sekunnin\":\"muutama sekunti\";case\"ss\":result=isFuture?\"sekunnin\":\"sekuntia\";break;case\"m\":return isFuture?\"minuutin\":\"minuutti\";case\"mm\":result=isFuture?\"minuutin\":\"minuuttia\";break;case\"h\":return isFuture?\"tunnin\":\"tunti\";case\"hh\":result=isFuture?\"tunnin\":\"tuntia\";break;case\"d\":return isFuture?\"pÃ¤ivÃ¤n\":\"pÃ¤ivÃ¤\";case\"dd\":result=isFuture?\"pÃ¤ivÃ¤n\":\"pÃ¤ivÃ¤Ã¤\";break;case\"M\":return isFuture?\"kuukauden\":\"kuukausi\";case\"MM\":result=isFuture?\"kuukauden\":\"kuukautta\";break;case\"y\":return isFuture?\"vuoden\":\"vuosi\";case\"yy\":result=isFuture?\"vuoden\":\"vuotta\"}return result=function(number,isFuture){return number&lt;10?isFuture?numbersFuture[number]:numbersPast[number]:number}(number,isFuture)+\" \"+result}moment.defineLocale(\"fi\",{months:\"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesÃ¤kuu_heinÃ¤kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu\".split(\"_\"),monthsShort:\"tammi_helmi_maalis_huhti_touko_kesÃ¤_heinÃ¤_elo_syys_loka_marras_joulu\".split(\"_\"),weekdays:\"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai\".split(\"_\"),weekdaysShort:\"su_ma_ti_ke_to_pe_la\".split(\"_\"),weekdaysMin:\"su_ma_ti_ke_to_pe_la\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD.MM.YYYY\",LL:\"Do MMMM[ta] YYYY\",LLL:\"Do MMMM[ta] YYYY, [klo] HH.mm\",LLLL:\"dddd, Do MMMM[ta] YYYY, [klo] HH.mm\",l:\"D.M.YYYY\",ll:\"Do MMM YYYY\",lll:\"Do MMM YYYY, [klo] HH.mm\",llll:\"ddd, Do MMM YYYY, [klo] HH.mm\"},calendar:{sameDay:\"[tÃ¤nÃ¤Ã¤n] [klo] LT\",nextDay:\"[huomenna] [klo] LT\",nextWeek:\"dddd [klo] LT\",lastDay:\"[eilen] [klo] LT\",lastWeek:\"[viime] dddd[na] [klo] LT\",sameElse:\"L\"},relativeTime:{future:\"%s pÃ¤Ã¤stÃ¤\",past:\"%s sitten\",s:translate,ss:translate,m:translate,mm:translate,h:translate,hh:translate,d:translate,dd:translate,M:translate,MM:translate,y:translate,yy:translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"fil\",{months:\"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre\".split(\"_\"),monthsShort:\"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis\".split(\"_\"),weekdays:\"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado\".split(\"_\"),weekdaysShort:\"Lin_Lun_Mar_Miy_Huw_Biy_Sab\".split(\"_\"),weekdaysMin:\"Li_Lu_Ma_Mi_Hu_Bi_Sab\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"MM/D/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY HH:mm\",LLLL:\"dddd, MMMM DD, YYYY HH:mm\"},calendar:{sameDay:\"LT [ngayong araw]\",nextDay:\"[Bukas ng] LT\",nextWeek:\"LT [sa susunod na] dddd\",lastDay:\"LT [kahapon]\",lastWeek:\"LT [noong nakaraang] dddd\",sameElse:\"L\"},relativeTime:{future:\"sa loob ng %s\",past:\"%s ang nakalipas\",s:\"ilang segundo\",ss:\"%d segundo\",m:\"isang minuto\",mm:\"%d minuto\",h:\"isang oras\",hh:\"%d oras\",d:\"isang araw\",dd:\"%d araw\",M:\"isang buwan\",MM:\"%d buwan\",y:\"isang taon\",yy:\"%d taon\"},dayOfMonthOrdinalParse:/\\d{1,2}/,ordinal:function(number){return number},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"fo\",{months:\"januar_februar_mars_aprÃ­l_mai_juni_juli_august_september_oktober_november_desember\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des\".split(\"_\"),weekdays:\"sunnudagur_mÃ¡nadagur_tÃ½sdagur_mikudagur_hÃ³sdagur_frÃ­ggjadagur_leygardagur\".split(\"_\"),weekdaysShort:\"sun_mÃ¡n_tÃ½s_mik_hÃ³s_frÃ­_ley\".split(\"_\"),weekdaysMin:\"su_mÃ¡_tÃ½_mi_hÃ³_fr_le\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D. MMMM, YYYY HH:mm\"},calendar:{sameDay:\"[Ã dag kl.] LT\",nextDay:\"[Ã morgin kl.] LT\",nextWeek:\"dddd [kl.] LT\",lastDay:\"[Ã gjÃ¡r kl.] LT\",lastWeek:\"[sÃ­Ã°stu] dddd [kl] LT\",sameElse:\"L\"},relativeTime:{future:\"um %s\",past:\"%s sÃ­Ã°ani\",s:\"fÃ¡ sekund\",ss:\"%d sekundir\",m:\"ein minuttur\",mm:\"%d minuttir\",h:\"ein tÃ­mi\",hh:\"%d tÃ­mar\",d:\"ein dagur\",dd:\"%d dagar\",M:\"ein mÃ¡naÃ°ur\",MM:\"%d mÃ¡naÃ°ir\",y:\"eitt Ã¡r\",yy:\"%d Ã¡r\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var monthsRegex=/(janv\\.?|fÃ©vr\\.?|mars|avr\\.?|mai|juin|juil\\.?|aoÃ»t|sept\\.?|oct\\.?|nov\\.?|dÃ©c\\.?|janvier|fÃ©vrier|mars|avril|mai|juin|juillet|aoÃ»t|septembre|octobre|novembre|dÃ©cembre)/i,monthsParse=[/^janv/i,/^fÃ©vr/i,/^mars/i,/^avr/i,/^mai/i,/^juin/i,/^juil/i,/^aoÃ»t/i,/^sept/i,/^oct/i,/^nov/i,/^dÃ©c/i];moment.defineLocale(\"fr\",{months:\"janvier_fÃ©vrier_mars_avril_mai_juin_juillet_aoÃ»t_septembre_octobre_novembre_dÃ©cembre\".split(\"_\"),monthsShort:\"janv._fÃ©vr._mars_avr._mai_juin_juil._aoÃ»t_sept._oct._nov._dÃ©c.\".split(\"_\"),monthsRegex:monthsRegex,monthsShortRegex:monthsRegex,monthsStrictRegex:/^(janvier|fÃ©vrier|mars|avril|mai|juin|juillet|aoÃ»t|septembre|octobre|novembre|dÃ©cembre)/i,monthsShortStrictRegex:/(janv\\.?|fÃ©vr\\.?|mars|avr\\.?|mai|juin|juil\\.?|aoÃ»t|sept\\.?|oct\\.?|nov\\.?|dÃ©c\\.?)/i,monthsParse:monthsParse,longMonthsParse:monthsParse,shortMonthsParse:monthsParse,weekdays:\"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi\".split(\"_\"),weekdaysShort:\"dim._lun._mar._mer._jeu._ven._sam.\".split(\"_\"),weekdaysMin:\"di_lu_ma_me_je_ve_sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Aujourdâ€™hui Ã&nbsp;] LT\",nextDay:\"[Demain Ã&nbsp;] LT\",nextWeek:\"dddd [Ã&nbsp;] LT\",lastDay:\"[Hier Ã&nbsp;] LT\",lastWeek:\"dddd [dernier Ã&nbsp;] LT\",sameElse:\"L\"},relativeTime:{future:\"dans %s\",past:\"il y a %s\",s:\"quelques secondes\",ss:\"%d secondes\",m:\"une minute\",mm:\"%d minutes\",h:\"une heure\",hh:\"%d heures\",d:\"un jour\",dd:\"%d jours\",w:\"une semaine\",ww:\"%d semaines\",M:\"un mois\",MM:\"%d mois\",y:\"un an\",yy:\"%d ans\"},dayOfMonthOrdinalParse:/\\d{1,2}(er|)/,ordinal:function(number,period){switch(period){case\"D\":return number+(1===number?\"er\":\"\");default:case\"M\":case\"Q\":case\"DDD\":case\"d\":return number+(1===number?\"er\":\"e\");case\"w\":case\"W\":return number+(1===number?\"re\":\"e\")}},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"fr-ca\",{months:\"janvier_fÃ©vrier_mars_avril_mai_juin_juillet_aoÃ»t_septembre_octobre_novembre_dÃ©cembre\".split(\"_\"),monthsShort:\"janv._fÃ©vr._mars_avr._mai_juin_juil._aoÃ»t_sept._oct._nov._dÃ©c.\".split(\"_\"),monthsParseExact:!0,weekdays:\"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi\".split(\"_\"),weekdaysShort:\"dim._lun._mar._mer._jeu._ven._sam.\".split(\"_\"),weekdaysMin:\"di_lu_ma_me_je_ve_sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Aujourdâ€™hui Ã&nbsp;] LT\",nextDay:\"[Demain Ã&nbsp;] LT\",nextWeek:\"dddd [Ã&nbsp;] LT\",lastDay:\"[Hier Ã&nbsp;] LT\",lastWeek:\"dddd [dernier Ã&nbsp;] LT\",sameElse:\"L\"},relativeTime:{future:\"dans %s\",past:\"il y a %s\",s:\"quelques secondes\",ss:\"%d secondes\",m:\"une minute\",mm:\"%d minutes\",h:\"une heure\",hh:\"%d heures\",d:\"un jour\",dd:\"%d jours\",M:\"un mois\",MM:\"%d mois\",y:\"un an\",yy:\"%d ans\"},dayOfMonthOrdinalParse:/\\d{1,2}(er|e)/,ordinal:function(number,period){switch(period){default:case\"M\":case\"Q\":case\"D\":case\"DDD\":case\"d\":return number+(1===number?\"er\":\"e\");case\"w\":case\"W\":return number+(1===number?\"re\":\"e\")}}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"fr-ch\",{months:\"janvier_fÃ©vrier_mars_avril_mai_juin_juillet_aoÃ»t_septembre_octobre_novembre_dÃ©cembre\".split(\"_\"),monthsShort:\"janv._fÃ©vr._mars_avr._mai_juin_juil._aoÃ»t_sept._oct._nov._dÃ©c.\".split(\"_\"),monthsParseExact:!0,weekdays:\"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi\".split(\"_\"),weekdaysShort:\"dim._lun._mar._mer._jeu._ven._sam.\".split(\"_\"),weekdaysMin:\"di_lu_ma_me_je_ve_sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Aujourdâ€™hui Ã&nbsp;] LT\",nextDay:\"[Demain Ã&nbsp;] LT\",nextWeek:\"dddd [Ã&nbsp;] LT\",lastDay:\"[Hier Ã&nbsp;] LT\",lastWeek:\"dddd [dernier Ã&nbsp;] LT\",sameElse:\"L\"},relativeTime:{future:\"dans %s\",past:\"il y a %s\",s:\"quelques secondes\",ss:\"%d secondes\",m:\"une minute\",mm:\"%d minutes\",h:\"une heure\",hh:\"%d heures\",d:\"un jour\",dd:\"%d jours\",M:\"un mois\",MM:\"%d mois\",y:\"un an\",yy:\"%d ans\"},dayOfMonthOrdinalParse:/\\d{1,2}(er|e)/,ordinal:function(number,period){switch(period){default:case\"M\":case\"Q\":case\"D\":case\"DDD\":case\"d\":return number+(1===number?\"er\":\"e\");case\"w\":case\"W\":return number+(1===number?\"re\":\"e\")}},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var monthsShortWithDots=\"jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.\".split(\"_\"),monthsShortWithoutDots=\"jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des\".split(\"_\");moment.defineLocale(\"fy\",{months:\"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber\".split(\"_\"),monthsShort:function(m,format){return m?/-MMM-/.test(format)?monthsShortWithoutDots[m.month()]:monthsShortWithDots[m.month()]:monthsShortWithDots},monthsParseExact:!0,weekdays:\"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon\".split(\"_\"),weekdaysShort:\"si._mo._ti._wo._to._fr._so.\".split(\"_\"),weekdaysMin:\"Si_Mo_Ti_Wo_To_Fr_So\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD-MM-YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[hjoed om] LT\",nextDay:\"[moarn om] LT\",nextWeek:\"dddd [om] LT\",lastDay:\"[juster om] LT\",lastWeek:\"[Ã´frÃ»ne] dddd [om] LT\",sameElse:\"L\"},relativeTime:{future:\"oer %s\",past:\"%s lyn\",s:\"in pear sekonden\",ss:\"%d sekonden\",m:\"ien minÃºt\",mm:\"%d minuten\",h:\"ien oere\",hh:\"%d oeren\",d:\"ien dei\",dd:\"%d dagen\",M:\"ien moanne\",MM:\"%d moannen\",y:\"ien jier\",yy:\"%d jierren\"},dayOfMonthOrdinalParse:/\\d{1,2}(ste|de)/,ordinal:function(number){return number+(1===number||8===number||number&gt;=20?\"ste\":\"de\")},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"ga\",{months:[\"EanÃ¡ir\",\"Feabhra\",\"MÃ¡rta\",\"AibreÃ¡n\",\"Bealtaine\",\"Meitheamh\",\"IÃºil\",\"LÃºnasa\",\"MeÃ¡n FÃ³mhair\",\"Deireadh FÃ³mhair\",\"Samhain\",\"Nollaig\"],monthsShort:[\"Ean\",\"Feabh\",\"MÃ¡rt\",\"Aib\",\"Beal\",\"Meith\",\"IÃºil\",\"LÃºn\",\"M.F.\",\"D.F.\",\"Samh\",\"Noll\"],monthsParseExact:!0,weekdays:[\"DÃ© Domhnaigh\",\"DÃ© Luain\",\"DÃ© MÃ¡irt\",\"DÃ© CÃ©adaoin\",\"DÃ©ardaoin\",\"DÃ© hAoine\",\"DÃ© Sathairn\"],weekdaysShort:[\"Domh\",\"Luan\",\"MÃ¡irt\",\"CÃ©ad\",\"DÃ©ar\",\"Aoine\",\"Sath\"],weekdaysMin:[\"Do\",\"Lu\",\"MÃ¡\",\"CÃ©\",\"DÃ©\",\"A\",\"Sa\"],longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Inniu ag] LT\",nextDay:\"[AmÃ¡rach ag] LT\",nextWeek:\"dddd [ag] LT\",lastDay:\"[InnÃ© ag] LT\",lastWeek:\"dddd [seo caite] [ag] LT\",sameElse:\"L\"},relativeTime:{future:\"i %s\",past:\"%s Ã³ shin\",s:\"cÃºpla soicind\",ss:\"%d soicind\",m:\"nÃ³imÃ©ad\",mm:\"%d nÃ³imÃ©ad\",h:\"uair an chloig\",hh:\"%d uair an chloig\",d:\"lÃ¡\",dd:\"%d lÃ¡\",M:\"mÃ­\",MM:\"%d mÃ­onna\",y:\"bliain\",yy:\"%d bliain\"},dayOfMonthOrdinalParse:/\\d{1,2}(d|na|mh)/,ordinal:function(number){return number+(1===number?\"d\":number%10==2?\"na\":\"mh\")},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"gd\",{months:[\"Am Faoilleach\",\"An Gearran\",\"Am MÃ&nbsp;rt\",\"An Giblean\",\"An CÃ¨itean\",\"An t-Ã’gmhios\",\"An t-Iuchar\",\"An LÃ¹nastal\",\"An t-Sultain\",\"An DÃ&nbsp;mhair\",\"An t-Samhain\",\"An DÃ¹bhlachd\"],monthsShort:[\"Faoi\",\"Gear\",\"MÃ&nbsp;rt\",\"Gibl\",\"CÃ¨it\",\"Ã’gmh\",\"Iuch\",\"LÃ¹n\",\"Sult\",\"DÃ&nbsp;mh\",\"Samh\",\"DÃ¹bh\"],monthsParseExact:!0,weekdays:[\"DidÃ²mhnaich\",\"Diluain\",\"DimÃ&nbsp;irt\",\"Diciadain\",\"Diardaoin\",\"Dihaoine\",\"Disathairne\"],weekdaysShort:[\"Did\",\"Dil\",\"Dim\",\"Dic\",\"Dia\",\"Dih\",\"Dis\"],weekdaysMin:[\"DÃ²\",\"Lu\",\"MÃ&nbsp;\",\"Ci\",\"Ar\",\"Ha\",\"Sa\"],longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[An-diugh aig] LT\",nextDay:\"[A-mÃ&nbsp;ireach aig] LT\",nextWeek:\"dddd [aig] LT\",lastDay:\"[An-dÃ¨ aig] LT\",lastWeek:\"dddd [seo chaidh] [aig] LT\",sameElse:\"L\"},relativeTime:{future:\"ann an %s\",past:\"bho chionn %s\",s:\"beagan diogan\",ss:\"%d diogan\",m:\"mionaid\",mm:\"%d mionaidean\",h:\"uair\",hh:\"%d uairean\",d:\"latha\",dd:\"%d latha\",M:\"mÃ¬os\",MM:\"%d mÃ¬osan\",y:\"bliadhna\",yy:\"%d bliadhna\"},dayOfMonthOrdinalParse:/\\d{1,2}(d|na|mh)/,ordinal:function(number){return number+(1===number?\"d\":number%10==2?\"na\":\"mh\")},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"gl\",{months:\"xaneiro_febreiro_marzo_abril_maio_xuÃ±o_xullo_agosto_setembro_outubro_novembro_decembro\".split(\"_\"),monthsShort:\"xan._feb._mar._abr._mai._xuÃ±._xul._ago._set._out._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"domingo_luns_martes_mÃ©rcores_xoves_venres_sÃ¡bado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._mÃ©r._xov._ven._sÃ¡b.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mÃ©_xo_ve_sÃ¡\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY H:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY H:mm\"},calendar:{sameDay:function(){return\"[hoxe \"+(1!==this.hours()?\"Ã¡s\":\"Ã¡\")+\"] LT\"},nextDay:function(){return\"[maÃ±Ã¡ \"+(1!==this.hours()?\"Ã¡s\":\"Ã¡\")+\"] LT\"},nextWeek:function(){return\"dddd [\"+(1!==this.hours()?\"Ã¡s\":\"a\")+\"] LT\"},lastDay:function(){return\"[onte \"+(1!==this.hours()?\"Ã¡\":\"a\")+\"] LT\"},lastWeek:function(){return\"[o] dddd [pasado \"+(1!==this.hours()?\"Ã¡s\":\"a\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:function(str){return 0===str.indexOf(\"un\")?\"n\"+str:\"en \"+str},past:\"hai %s\",s:\"uns segundos\",ss:\"%d segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"unha hora\",hh:\"%d horas\",d:\"un dÃ­a\",dd:\"%d dÃ­as\",M:\"un mes\",MM:\"%d meses\",y:\"un ano\",yy:\"%d anos\"},dayOfMonthOrdinalParse:/\\d{1,2}Âº/,ordinal:\"%dÂº\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";function processRelativeTime(number,withoutSuffix,key,isFuture){var format={s:[\"à¤¥à¥‹à¤¡à¤¯à¤¾ à¤¸à¥…à¤•à¤‚à¤¡à¤¾à¤‚à¤¨à¥€\",\"à¤¥à¥‹à¤¡à¥‡ à¤¸à¥…à¤•à¤‚à¤¡\"],ss:[number+\" à¤¸à¥…à¤•à¤‚à¤¡à¤¾à¤‚à¤¨à¥€\",number+\" à¤¸à¥…à¤•à¤‚à¤¡\"],m:[\"à¤à¤•à¤¾ à¤®à¤¿à¤£à¤Ÿà¤¾à¤¨\",\"à¤à¤• à¤®à¤¿à¤¨à¥‚à¤Ÿ\"],mm:[number+\" à¤®à¤¿à¤£à¤Ÿà¤¾à¤‚à¤¨à¥€\",number+\" à¤®à¤¿à¤£à¤Ÿà¤¾à¤‚\"],h:[\"à¤à¤•à¤¾ à¤µà¤°à¤¾à¤¨\",\"à¤à¤• à¤µà¤°\"],hh:[number+\" à¤µà¤°à¤¾à¤‚à¤¨à¥€\",number+\" à¤µà¤°à¤¾à¤‚\"],d:[\"à¤à¤•à¤¾ à¤¦à¤¿à¤¸à¤¾à¤¨\",\"à¤à¤• à¤¦à¥€à¤¸\"],dd:[number+\" à¤¦à¤¿à¤¸à¤¾à¤‚à¤¨à¥€\",number+\" à¤¦à¥€à¤¸\"],M:[\"à¤à¤•à¤¾ à¤®à¥à¤¹à¤¯à¤¨à¥à¤¯à¤¾à¤¨\",\"à¤à¤• à¤®à¥à¤¹à¤¯à¤¨à¥‹\"],MM:[number+\" à¤®à¥à¤¹à¤¯à¤¨à¥à¤¯à¤¾à¤¨à¥€\",number+\" à¤®à¥à¤¹à¤¯à¤¨à¥‡\"],y:[\"à¤à¤•à¤¾ à¤µà¤°à¥à¤¸à¤¾à¤¨\",\"à¤à¤• à¤µà¤°à¥à¤¸\"],yy:[number+\" à¤µà¤°à¥à¤¸à¤¾à¤‚à¤¨à¥€\",number+\" à¤µà¤°à¥à¤¸à¤¾à¤‚\"]};return isFuture?format[key][0]:format[key][1]}moment.defineLocale(\"gom-deva\",{months:{standalone:\"à¤œà¤¾à¤¨à¥‡à¤µà¤¾à¤°à¥€_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤¾à¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤à¤ªà¥à¤°à¥€à¤²_à¤®à¥‡_à¤œà¥‚à¤¨_à¤œà¥à¤²à¤¯_à¤‘à¤—à¤¸à¥à¤Ÿ_à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚à¤¬à¤°_à¤‘à¤•à¥à¤Ÿà¥‹à¤¬à¤°_à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚à¤¬à¤°_à¤¡à¤¿à¤¸à¥‡à¤‚à¤¬à¤°\".split(\"_\"),format:\"à¤œà¤¾à¤¨à¥‡à¤µà¤¾à¤°à¥€à¤šà¥à¤¯à¤¾_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤¾à¤°à¥€à¤šà¥à¤¯à¤¾_à¤®à¤¾à¤°à¥à¤šà¤¾à¤šà¥à¤¯à¤¾_à¤à¤ªà¥à¤°à¥€à¤²à¤¾à¤šà¥à¤¯à¤¾_à¤®à¥‡à¤¯à¤¾à¤šà¥à¤¯à¤¾_à¤œà¥‚à¤¨à¤¾à¤šà¥à¤¯à¤¾_à¤œà¥à¤²à¤¯à¤¾à¤šà¥à¤¯à¤¾_à¤‘à¤—à¤¸à¥à¤Ÿà¤¾à¤šà¥à¤¯à¤¾_à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾_à¤‘à¤•à¥à¤Ÿà¥‹à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾_à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾_à¤¡à¤¿à¤¸à¥‡à¤‚à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾\".split(\"_\"),isFormat:/MMMM(\\s)+D[oD]?/},monthsShort:\"à¤œà¤¾à¤¨à¥‡._à¤«à¥‡à¤¬à¥à¤°à¥._à¤®à¤¾à¤°à¥à¤š_à¤à¤ªà¥à¤°à¥€._à¤®à¥‡_à¤œà¥‚à¤¨_à¤œà¥à¤²._à¤‘à¤—._à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚._à¤‘à¤•à¥à¤Ÿà¥‹._à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚._à¤¡à¤¿à¤¸à¥‡à¤‚.\".split(\"_\"),monthsParseExact:!0,weekdays:\"à¤†à¤¯à¤¤à¤¾à¤°_à¤¸à¥‹à¤®à¤¾à¤°_à¤®à¤‚à¤—à¤³à¤¾à¤°_à¤¬à¥à¤§à¤µà¤¾à¤°_à¤¬à¤¿à¤°à¥‡à¤¸à¥à¤¤à¤¾à¤°_à¤¸à¥à¤•à¥à¤°à¤¾à¤°_à¤¶à¥‡à¤¨à¤µà¤¾à¤°\".split(\"_\"),weekdaysShort:\"à¤†à¤¯à¤¤._à¤¸à¥‹à¤®._à¤®à¤‚à¤—à¤³._à¤¬à¥à¤§._à¤¬à¥à¤°à¥‡à¤¸à¥à¤¤._à¤¸à¥à¤•à¥à¤°._à¤¶à¥‡à¤¨.\".split(\"_\"),weekdaysMin:\"à¤†_à¤¸à¥‹_à¤®à¤‚_à¤¬à¥_à¤¬à¥à¤°à¥‡_à¤¸à¥_à¤¶à¥‡\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]\",LTS:\"A h:mm:ss [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]\",L:\"DD-MM-YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]\",LLLL:\"dddd, MMMM Do, YYYY, A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]\",llll:\"ddd, D MMM YYYY, A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]\"},calendar:{sameDay:\"[à¤†à¤¯à¤œ] LT\",nextDay:\"[à¤«à¤¾à¤²à¥à¤¯à¤¾à¤‚] LT\",nextWeek:\"[à¤«à¥à¤¡à¤²à¥‹] dddd[,] LT\",lastDay:\"[à¤•à¤¾à¤²] LT\",lastWeek:\"[à¤«à¤¾à¤Ÿà¤²à¥‹] dddd[,] LT\",sameElse:\"L\"},relativeTime:{future:\"%s\",past:\"%s à¤†à¤¦à¥€à¤‚\",s:processRelativeTime,ss:processRelativeTime,m:processRelativeTime,mm:processRelativeTime,h:processRelativeTime,hh:processRelativeTime,d:processRelativeTime,dd:processRelativeTime,M:processRelativeTime,MM:processRelativeTime,y:processRelativeTime,yy:processRelativeTime},dayOfMonthOrdinalParse:/\\d{1,2}(à¤µà¥‡à¤°)/,ordinal:function(number,period){switch(period){case\"D\":return number+\"à¤µà¥‡à¤°\";default:case\"M\":case\"Q\":case\"DDD\":case\"d\":case\"w\":case\"W\":return number}},week:{dow:0,doy:3},meridiemParse:/à¤°à¤¾à¤¤à¥€|à¤¸à¤•à¤¾à¤³à¥€à¤‚|à¤¦à¤¨à¤ªà¤¾à¤°à¤¾à¤‚|à¤¸à¤¾à¤‚à¤œà¥‡/,meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"à¤°à¤¾à¤¤à¥€\"===meridiem?hour&lt;4?hour:hour+12:\"à¤¸à¤•à¤¾à¤³à¥€à¤‚\"===meridiem?hour:\"à¤¦à¤¨à¤ªà¤¾à¤°à¤¾à¤‚\"===meridiem?hour&gt;12?hour:hour+12:\"à¤¸à¤¾à¤‚à¤œà¥‡\"===meridiem?hour+12:void 0},meridiem:function(hour,minute,isLower){return hour&lt;4?\"à¤°à¤¾à¤¤à¥€\":hour&lt;12?\"à¤¸à¤•à¤¾à¤³à¥€à¤‚\":hour&lt;16?\"à¤¦à¤¨à¤ªà¤¾à¤°à¤¾à¤‚\":hour&lt;20?\"à¤¸à¤¾à¤‚à¤œà¥‡\":\"à¤°à¤¾à¤¤à¥€\"}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";function processRelativeTime(number,withoutSuffix,key,isFuture){var format={s:[\"thoddea sekondamni\",\"thodde sekond\"],ss:[number+\" sekondamni\",number+\" sekond\"],m:[\"eka mintan\",\"ek minut\"],mm:[number+\" mintamni\",number+\" mintam\"],h:[\"eka voran\",\"ek vor\"],hh:[number+\" voramni\",number+\" voram\"],d:[\"eka disan\",\"ek dis\"],dd:[number+\" disamni\",number+\" dis\"],M:[\"eka mhoinean\",\"ek mhoino\"],MM:[number+\" mhoineamni\",number+\" mhoine\"],y:[\"eka vorsan\",\"ek voros\"],yy:[number+\" vorsamni\",number+\" vorsam\"]};return isFuture?format[key][0]:format[key][1]}moment.defineLocale(\"gom-latn\",{months:{standalone:\"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr\".split(\"_\"),format:\"Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea\".split(\"_\"),isFormat:/MMMM(\\s)+D[oD]?/},monthsShort:\"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var\".split(\"_\"),weekdaysShort:\"Ait._Som._Mon._Bud._Bre._Suk._Son.\".split(\"_\"),weekdaysMin:\"Ai_Sm_Mo_Bu_Br_Su_Sn\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"A h:mm [vazta]\",LTS:\"A h:mm:ss [vazta]\",L:\"DD-MM-YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY A h:mm [vazta]\",LLLL:\"dddd, MMMM Do, YYYY, A h:mm [vazta]\",llll:\"ddd, D MMM YYYY, A h:mm [vazta]\"},calendar:{sameDay:\"[Aiz] LT\",nextDay:\"[Faleam] LT\",nextWeek:\"[Fuddlo] dddd[,] LT\",lastDay:\"[Kal] LT\",lastWeek:\"[Fattlo] dddd[,] LT\",sameElse:\"L\"},relativeTime:{future:\"%s\",past:\"%s adim\",s:processRelativeTime,ss:processRelativeTime,m:processRelativeTime,mm:processRelativeTime,h:processRelativeTime,hh:processRelativeTime,d:processRelativeTime,dd:processRelativeTime,M:processRelativeTime,MM:processRelativeTime,y:processRelativeTime,yy:processRelativeTime},dayOfMonthOrdinalParse:/\\d{1,2}(er)/,ordinal:function(number,period){switch(period){case\"D\":return number+\"er\";default:case\"M\":case\"Q\":case\"DDD\":case\"d\":case\"w\":case\"W\":return number}},week:{dow:0,doy:3},meridiemParse:/rati|sokallim|donparam|sanje/,meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"rati\"===meridiem?hour&lt;4?hour:hour+12:\"sokallim\"===meridiem?hour:\"donparam\"===meridiem?hour&gt;12?hour:hour+12:\"sanje\"===meridiem?hour+12:void 0},meridiem:function(hour,minute,isLower){return hour&lt;4?\"rati\":hour&lt;12?\"sokallim\":hour&lt;16?\"donparam\":hour&lt;20?\"sanje\":\"rati\"}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var symbolMap={1:\"à«§\",2:\"à«¨\",3:\"à«©\",4:\"à«ª\",5:\"à««\",6:\"à«¬\",7:\"à«­\",8:\"à«®\",9:\"à«¯\",0:\"à«¦\"},numberMap={\"à«§\":\"1\",\"à«¨\":\"2\",\"à«©\":\"3\",\"à«ª\":\"4\",\"à««\":\"5\",\"à«¬\":\"6\",\"à«­\":\"7\",\"à«®\":\"8\",\"à«¯\":\"9\",\"à«¦\":\"0\"};moment.defineLocale(\"gu\",{months:\"àªœàª¾àª¨à«àª¯à«àª†àª°à«€_àª«à«‡àª¬à«àª°à«àª†àª°à«€_àª®àª¾àª°à«àªš_àªàªªà«àª°àª¿àª²_àª®à«‡_àªœà«‚àª¨_àªœà«àª²àª¾àªˆ_àª‘àª—àª¸à«àªŸ_àª¸àªªà«àªŸà«‡àª®à«àª¬àª°_àª‘àª•à«àªŸà«àª¬àª°_àª¨àªµà«‡àª®à«àª¬àª°_àª¡àª¿àª¸à«‡àª®à«àª¬àª°\".split(\"_\"),monthsShort:\"àªœàª¾àª¨à«àª¯à«._àª«à«‡àª¬à«àª°à«._àª®àª¾àª°à«àªš_àªàªªà«àª°àª¿._àª®à«‡_àªœà«‚àª¨_àªœà«àª²àª¾._àª‘àª—._àª¸àªªà«àªŸà«‡._àª‘àª•à«àªŸà«._àª¨àªµà«‡._àª¡àª¿àª¸à«‡.\".split(\"_\"),monthsParseExact:!0,weekdays:\"àª°àªµàª¿àªµàª¾àª°_àª¸à«‹àª®àªµàª¾àª°_àª®àª‚àª—àª³àªµàª¾àª°_àª¬à«àª§à«àªµàª¾àª°_àª—à«àª°à«àªµàª¾àª°_àª¶à«àª•à«àª°àªµàª¾àª°_àª¶àª¨àª¿àªµàª¾àª°\".split(\"_\"),weekdaysShort:\"àª°àªµàª¿_àª¸à«‹àª®_àª®àª‚àª—àª³_àª¬à«àª§à«_àª—à«àª°à«_àª¶à«àª•à«àª°_àª¶àª¨àª¿\".split(\"_\"),weekdaysMin:\"àª°_àª¸à«‹_àª®àª‚_àª¬à«_àª—à«_àª¶à«_àª¶\".split(\"_\"),longDateFormat:{LT:\"A h:mm àªµàª¾àª—à«àª¯à«‡\",LTS:\"A h:mm:ss àªµàª¾àª—à«àª¯à«‡\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm àªµàª¾àª—à«àª¯à«‡\",LLLL:\"dddd, D MMMM YYYY, A h:mm àªµàª¾àª—à«àª¯à«‡\"},calendar:{sameDay:\"[àª†àªœ] LT\",nextDay:\"[àª•àª¾àª²à«‡] LT\",nextWeek:\"dddd, LT\",lastDay:\"[àª—àª‡àª•àª¾àª²à«‡] LT\",lastWeek:\"[àªªàª¾àª›àª²àª¾] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s àª®àª¾\",past:\"%s àªªàª¹à«‡àª²àª¾\",s:\"àª…àª®à«àª• àªªàª³à«‹\",ss:\"%d àª¸à«‡àª•àª‚àª¡\",m:\"àªàª• àª®àª¿àª¨àª¿àªŸ\",mm:\"%d àª®àª¿àª¨àª¿àªŸ\",h:\"àªàª• àª•àª²àª¾àª•\",hh:\"%d àª•àª²àª¾àª•\",d:\"àªàª• àª¦àª¿àªµàª¸\",dd:\"%d àª¦àª¿àªµàª¸\",M:\"àªàª• àª®àª¹àª¿àª¨à«‹\",MM:\"%d àª®àª¹àª¿àª¨à«‹\",y:\"àªàª• àªµàª°à«àª·\",yy:\"%d àªµàª°à«àª·\"},preparse:function(string){return string.replace(/[à«§à«¨à«©à«ªà««à«¬à«­à«®à«¯à«¦]/g,(function(match){return numberMap[match]}))},postformat:function(string){return string.replace(/\\d/g,(function(match){return symbolMap[match]}))},meridiemParse:/àª°àª¾àª¤|àª¬àªªà«‹àª°|àª¸àªµàª¾àª°|àª¸àª¾àª‚àªœ/,meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"àª°àª¾àª¤\"===meridiem?hour&lt;4?hour:hour+12:\"àª¸àªµàª¾àª°\"===meridiem?hour:\"àª¬àªªà«‹àª°\"===meridiem?hour&gt;=10?hour:hour+12:\"àª¸àª¾àª‚àªœ\"===meridiem?hour+12:void 0},meridiem:function(hour,minute,isLower){return hour&lt;4?\"àª°àª¾àª¤\":hour&lt;10?\"àª¸àªµàª¾àª°\":hour&lt;17?\"àª¬àªªà«‹àª°\":hour&lt;20?\"àª¸àª¾àª‚àªœ\":\"àª°àª¾àª¤\"},week:{dow:0,doy:6}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"he\",{months:\"×™×&nbsp;×•××¨_×¤×‘×¨×•××¨_×ž×¨×¥_××¤×¨×™×œ_×ž××™_×™×•×&nbsp;×™_×™×•×œ×™_××•×’×•×¡×˜_×¡×¤×˜×ž×‘×¨_××•×§×˜×•×‘×¨_×&nbsp;×•×‘×ž×‘×¨_×“×¦×ž×‘×¨\".split(\"_\"),monthsShort:\"×™×&nbsp;×•×³_×¤×‘×¨×³_×ž×¨×¥_××¤×¨×³_×ž××™_×™×•×&nbsp;×™_×™×•×œ×™_××•×’×³_×¡×¤×˜×³_××•×§×³_×&nbsp;×•×‘×³_×“×¦×ž×³\".split(\"_\"),weekdays:\"×¨××©×•×Ÿ_×©×&nbsp;×™_×©×œ×™×©×™_×¨×‘×™×¢×™_×—×ž×™×©×™_×©×™×©×™_×©×‘×ª\".split(\"_\"),weekdaysShort:\"××³_×‘×³_×’×³_×“×³_×”×³_×•×³_×©×³\".split(\"_\"),weekdaysMin:\"×_×‘_×’_×“_×”_×•_×©\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [×‘]MMMM YYYY\",LLL:\"D [×‘]MMMM YYYY HH:mm\",LLLL:\"dddd, D [×‘]MMMM YYYY HH:mm\",l:\"D/M/YYYY\",ll:\"D MMM YYYY\",lll:\"D MMM YYYY HH:mm\",llll:\"ddd, D MMM YYYY HH:mm\"},calendar:{sameDay:\"[×”×™×•× ×‘Ö¾]LT\",nextDay:\"[×ž×—×¨ ×‘Ö¾]LT\",nextWeek:\"dddd [×‘×©×¢×”] LT\",lastDay:\"[××ª×ž×•×œ ×‘Ö¾]LT\",lastWeek:\"[×‘×™×•×] dddd [×”××—×¨×•×Ÿ ×‘×©×¢×”] LT\",sameElse:\"L\"},relativeTime:{future:\"×‘×¢×•×“ %s\",past:\"×œ×¤×&nbsp;×™ %s\",s:\"×ž×¡×¤×¨ ×©×&nbsp;×™×•×ª\",ss:\"%d ×©×&nbsp;×™×•×ª\",m:\"×“×§×”\",mm:\"%d ×“×§×•×ª\",h:\"×©×¢×”\",hh:function(number){return 2===number?\"×©×¢×ª×™×™×\":number+\" ×©×¢×•×ª\"},d:\"×™×•×\",dd:function(number){return 2===number?\"×™×•×ž×™×™×\":number+\" ×™×ž×™×\"},M:\"×—×•×“×©\",MM:function(number){return 2===number?\"×—×•×“×©×™×™×\":number+\" ×—×•×“×©×™×\"},y:\"×©×&nbsp;×”\",yy:function(number){return 2===number?\"×©×&nbsp;×ª×™×™×\":number%10==0&amp;&amp;10!==number?number+\" ×©×&nbsp;×”\":number+\" ×©×&nbsp;×™×\"}},meridiemParse:/××—×”\"×¦|×œ×¤×&nbsp;×”\"×¦|××—×¨×™ ×”×¦×”×¨×™×™×|×œ×¤×&nbsp;×™ ×”×¦×”×¨×™×™×|×œ×¤×&nbsp;×•×ª ×‘×•×§×¨|×‘×‘×•×§×¨|×‘×¢×¨×‘/i,isPM:function(input){return/^(××—×”\"×¦|××—×¨×™ ×”×¦×”×¨×™×™×|×‘×¢×¨×‘)$/.test(input)},meridiem:function(hour,minute,isLower){return hour&lt;5?\"×œ×¤×&nbsp;×•×ª ×‘×•×§×¨\":hour&lt;10?\"×‘×‘×•×§×¨\":hour&lt;12?isLower?'×œ×¤×&nbsp;×”\"×¦':\"×œ×¤×&nbsp;×™ ×”×¦×”×¨×™×™×\":hour&lt;18?isLower?'××—×”\"×¦':\"××—×¨×™ ×”×¦×”×¨×™×™×\":\"×‘×¢×¨×‘\"}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var symbolMap={1:\"à¥§\",2:\"à¥¨\",3:\"à¥©\",4:\"à¥ª\",5:\"à¥«\",6:\"à¥¬\",7:\"à¥­\",8:\"à¥®\",9:\"à¥¯\",0:\"à¥¦\"},numberMap={\"à¥§\":\"1\",\"à¥¨\":\"2\",\"à¥©\":\"3\",\"à¥ª\":\"4\",\"à¥«\":\"5\",\"à¥¬\":\"6\",\"à¥­\":\"7\",\"à¥®\":\"8\",\"à¥¯\":\"9\",\"à¥¦\":\"0\"},monthsParse=[/^à¤œà¤¨/i,/^à¤«à¤¼à¤°|à¤«à¤°/i,/^à¤®à¤¾à¤°à¥à¤š/i,/^à¤…à¤ªà¥à¤°à¥ˆ/i,/^à¤®à¤ˆ/i,/^à¤œà¥‚à¤¨/i,/^à¤œà¥à¤²/i,/^à¤…à¤—/i,/^à¤¸à¤¿à¤¤à¤‚|à¤¸à¤¿à¤¤/i,/^à¤…à¤•à¥à¤Ÿà¥‚/i,/^à¤¨à¤µ|à¤¨à¤µà¤‚/i,/^à¤¦à¤¿à¤¸à¤‚|à¤¦à¤¿à¤¸/i];moment.defineLocale(\"hi\",{months:{format:\"à¤œà¤¨à¤µà¤°à¥€_à¤«à¤¼à¤°à¤µà¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¥ˆà¤²_à¤®à¤ˆ_à¤œà¥‚à¤¨_à¤œà¥à¤²à¤¾à¤ˆ_à¤…à¤—à¤¸à¥à¤¤_à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°_à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°_à¤¨à¤µà¤®à¥à¤¬à¤°_à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°\".split(\"_\"),standalone:\"à¤œà¤¨à¤µà¤°à¥€_à¤«à¤°à¤µà¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¥ˆà¤²_à¤®à¤ˆ_à¤œà¥‚à¤¨_à¤œà¥à¤²à¤¾à¤ˆ_à¤…à¤—à¤¸à¥à¤¤_à¤¸à¤¿à¤¤à¤‚à¤¬à¤°_à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°_à¤¨à¤µà¤‚à¤¬à¤°_à¤¦à¤¿à¤¸à¤‚à¤¬à¤°\".split(\"_\")},monthsShort:\"à¤œà¤¨._à¤«à¤¼à¤°._à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¥ˆ._à¤®à¤ˆ_à¤œà¥‚à¤¨_à¤œà¥à¤²._à¤…à¤—._à¤¸à¤¿à¤¤._à¤…à¤•à¥à¤Ÿà¥‚._à¤¨à¤µ._à¤¦à¤¿à¤¸.\".split(\"_\"),weekdays:\"à¤°à¤µà¤¿à¤µà¤¾à¤°_à¤¸à¥‹à¤®à¤µà¤¾à¤°_à¤®à¤‚à¤—à¤²à¤µà¤¾à¤°_à¤¬à¥à¤§à¤µà¤¾à¤°_à¤—à¥à¤°à¥‚à¤µà¤¾à¤°_à¤¶à¥à¤•à¥à¤°à¤µà¤¾à¤°_à¤¶à¤¨à¤¿à¤µà¤¾à¤°\".split(\"_\"),weekdaysShort:\"à¤°à¤µà¤¿_à¤¸à¥‹à¤®_à¤®à¤‚à¤—à¤²_à¤¬à¥à¤§_à¤—à¥à¤°à¥‚_à¤¶à¥à¤•à¥à¤°_à¤¶à¤¨à¤¿\".split(\"_\"),weekdaysMin:\"à¤°_à¤¸à¥‹_à¤®à¤‚_à¤¬à¥_à¤—à¥_à¤¶à¥_à¤¶\".split(\"_\"),longDateFormat:{LT:\"A h:mm à¤¬à¤œà¥‡\",LTS:\"A h:mm:ss à¤¬à¤œà¥‡\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm à¤¬à¤œà¥‡\",LLLL:\"dddd, D MMMM YYYY, A h:mm à¤¬à¤œà¥‡\"},monthsParse:monthsParse,longMonthsParse:monthsParse,shortMonthsParse:[/^à¤œà¤¨/i,/^à¤«à¤¼à¤°/i,/^à¤®à¤¾à¤°à¥à¤š/i,/^à¤…à¤ªà¥à¤°à¥ˆ/i,/^à¤®à¤ˆ/i,/^à¤œà¥‚à¤¨/i,/^à¤œà¥à¤²/i,/^à¤…à¤—/i,/^à¤¸à¤¿à¤¤/i,/^à¤…à¤•à¥à¤Ÿà¥‚/i,/^à¤¨à¤µ/i,/^à¤¦à¤¿à¤¸/i],monthsRegex:/^(à¤œà¤¨à¤µà¤°à¥€|à¤œà¤¨\\.?|à¤«à¤¼à¤°à¤µà¤°à¥€|à¤«à¤°à¤µà¤°à¥€|à¤«à¤¼à¤°\\.?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆà¤²|à¤…à¤ªà¥à¤°à¥ˆ\\.?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²à¤¾à¤ˆ|à¤œà¥à¤²\\.?|à¤…à¤—à¤¸à¥à¤¤|à¤…à¤—\\.?|à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°|à¤¸à¤¿à¤¤à¤‚à¤¬à¤°|à¤¸à¤¿à¤¤\\.?|à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°|à¤…à¤•à¥à¤Ÿà¥‚\\.?|à¤¨à¤µà¤®à¥à¤¬à¤°|à¤¨à¤µà¤‚à¤¬à¤°|à¤¨à¤µ\\.?|à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°|à¤¦à¤¿à¤¸à¤‚à¤¬à¤°|à¤¦à¤¿à¤¸\\.?)/i,monthsShortRegex:/^(à¤œà¤¨à¤µà¤°à¥€|à¤œà¤¨\\.?|à¤«à¤¼à¤°à¤µà¤°à¥€|à¤«à¤°à¤µà¤°à¥€|à¤«à¤¼à¤°\\.?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆà¤²|à¤…à¤ªà¥à¤°à¥ˆ\\.?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²à¤¾à¤ˆ|à¤œà¥à¤²\\.?|à¤…à¤—à¤¸à¥à¤¤|à¤…à¤—\\.?|à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°|à¤¸à¤¿à¤¤à¤‚à¤¬à¤°|à¤¸à¤¿à¤¤\\.?|à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°|à¤…à¤•à¥à¤Ÿà¥‚\\.?|à¤¨à¤µà¤®à¥à¤¬à¤°|à¤¨à¤µà¤‚à¤¬à¤°|à¤¨à¤µ\\.?|à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°|à¤¦à¤¿à¤¸à¤‚à¤¬à¤°|à¤¦à¤¿à¤¸\\.?)/i,monthsStrictRegex:/^(à¤œà¤¨à¤µà¤°à¥€?|à¤«à¤¼à¤°à¤µà¤°à¥€|à¤«à¤°à¤µà¤°à¥€?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆà¤²?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²à¤¾à¤ˆ?|à¤…à¤—à¤¸à¥à¤¤?|à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°|à¤¸à¤¿à¤¤à¤‚à¤¬à¤°|à¤¸à¤¿à¤¤?\\.?|à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°|à¤…à¤•à¥à¤Ÿà¥‚\\.?|à¤¨à¤µà¤®à¥à¤¬à¤°|à¤¨à¤µà¤‚à¤¬à¤°?|à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°|à¤¦à¤¿à¤¸à¤‚à¤¬à¤°?)/i,monthsShortStrictRegex:/^(à¤œà¤¨\\.?|à¤«à¤¼à¤°\\.?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆ\\.?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²\\.?|à¤…à¤—\\.?|à¤¸à¤¿à¤¤\\.?|à¤…à¤•à¥à¤Ÿà¥‚\\.?|à¤¨à¤µ\\.?|à¤¦à¤¿à¤¸\\.?)/i,calendar:{sameDay:\"[à¤†à¤œ] LT\",nextDay:\"[à¤•à¤²] LT\",nextWeek:\"dddd, LT\",lastDay:\"[à¤•à¤²] LT\",lastWeek:\"[à¤ªà¤¿à¤›à¤²à¥‡] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s à¤®à¥‡à¤‚\",past:\"%s à¤ªà¤¹à¤²à¥‡\",s:\"à¤•à¥à¤› à¤¹à¥€ à¤•à¥à¤·à¤£\",ss:\"%d à¤¸à¥‡à¤•à¤‚à¤¡\",m:\"à¤à¤• à¤®à¤¿à¤¨à¤Ÿ\",mm:\"%d à¤®à¤¿à¤¨à¤Ÿ\",h:\"à¤à¤• à¤˜à¤‚à¤Ÿà¤¾\",hh:\"%d à¤˜à¤‚à¤Ÿà¥‡\",d:\"à¤à¤• à¤¦à¤¿à¤¨\",dd:\"%d à¤¦à¤¿à¤¨\",M:\"à¤à¤• à¤®à¤¹à¥€à¤¨à¥‡\",MM:\"%d à¤®à¤¹à¥€à¤¨à¥‡\",y:\"à¤à¤• à¤µà¤°à¥à¤·\",yy:\"%d à¤µà¤°à¥à¤·\"},preparse:function(string){return string.replace(/[à¥§à¥¨à¥©à¥ªà¥«à¥¬à¥­à¥®à¥¯à¥¦]/g,(function(match){return numberMap[match]}))},postformat:function(string){return string.replace(/\\d/g,(function(match){return symbolMap[match]}))},meridiemParse:/à¤°à¤¾à¤¤|à¤¸à¥à¤¬à¤¹|à¤¦à¥‹à¤ªà¤¹à¤°|à¤¶à¤¾à¤®/,meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"à¤°à¤¾à¤¤\"===meridiem?hour&lt;4?hour:hour+12:\"à¤¸à¥à¤¬à¤¹\"===meridiem?hour:\"à¤¦à¥‹à¤ªà¤¹à¤°\"===meridiem?hour&gt;=10?hour:hour+12:\"à¤¶à¤¾à¤®\"===meridiem?hour+12:void 0},meridiem:function(hour,minute,isLower){return hour&lt;4?\"à¤°à¤¾à¤¤\":hour&lt;10?\"à¤¸à¥à¤¬à¤¹\":hour&lt;17?\"à¤¦à¥‹à¤ªà¤¹à¤°\":hour&lt;20?\"à¤¶à¤¾à¤®\":\"à¤°à¤¾à¤¤\"},week:{dow:0,doy:6}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";function translate(number,withoutSuffix,key){var result=number+\" \";switch(key){case\"ss\":return result+=1===number?\"sekunda\":2===number||3===number||4===number?\"sekunde\":\"sekundi\";case\"m\":return withoutSuffix?\"jedna minuta\":\"jedne minute\";case\"mm\":return result+=1===number?\"minuta\":2===number||3===number||4===number?\"minute\":\"minuta\";case\"h\":return withoutSuffix?\"jedan sat\":\"jednog sata\";case\"hh\":return result+=1===number?\"sat\":2===number||3===number||4===number?\"sata\":\"sati\";case\"dd\":return result+=1===number?\"dan\":\"dana\";case\"MM\":return result+=1===number?\"mjesec\":2===number||3===number||4===number?\"mjeseca\":\"mjeseci\";case\"yy\":return result+=1===number?\"godina\":2===number||3===number||4===number?\"godine\":\"godina\"}}moment.defineLocale(\"hr\",{months:{format:\"sijeÄnja_veljaÄe_oÅ¾ujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca\".split(\"_\"),standalone:\"sijeÄanj_veljaÄa_oÅ¾ujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac\".split(\"_\")},monthsShort:\"sij._velj._oÅ¾u._tra._svi._lip._srp._kol._ruj._lis._stu._pro.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota\".split(\"_\"),weekdaysShort:\"ned._pon._uto._sri._Äet._pet._sub.\".split(\"_\"),weekdaysMin:\"ne_po_ut_sr_Äe_pe_su\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"Do MMMM YYYY\",LLL:\"Do MMMM YYYY H:mm\",LLLL:\"dddd, Do MMMM YYYY H:mm\"},calendar:{sameDay:\"[danas u] LT\",nextDay:\"[sutra u] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[u] [nedjelju] [u] LT\";case 3:return\"[u] [srijedu] [u] LT\";case 6:return\"[u] [subotu] [u] LT\";case 1:case 2:case 4:case 5:return\"[u] dddd [u] LT\"}},lastDay:\"[juÄer u] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[proÅ¡lu] [nedjelju] [u] LT\";case 3:return\"[proÅ¡lu] [srijedu] [u] LT\";case 6:return\"[proÅ¡le] [subote] [u] LT\";case 1:case 2:case 4:case 5:return\"[proÅ¡li] dddd [u] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"prije %s\",s:\"par sekundi\",ss:translate,m:translate,mm:translate,h:translate,hh:translate,d:\"dan\",dd:translate,M:\"mjesec\",MM:translate,y:\"godinu\",yy:translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var weekEndings=\"vasÃ¡rnap hÃ©tfÅ‘n kedden szerdÃ¡n csÃ¼tÃ¶rtÃ¶kÃ¶n pÃ©nteken szombaton\".split(\" \");function translate(number,withoutSuffix,key,isFuture){var num=number;switch(key){case\"s\":return isFuture||withoutSuffix?\"nÃ©hÃ¡ny mÃ¡sodperc\":\"nÃ©hÃ¡ny mÃ¡sodperce\";case\"ss\":return num+(isFuture||withoutSuffix)?\" mÃ¡sodperc\":\" mÃ¡sodperce\";case\"m\":return\"egy\"+(isFuture||withoutSuffix?\" perc\":\" perce\");case\"mm\":return num+(isFuture||withoutSuffix?\" perc\":\" perce\");case\"h\":return\"egy\"+(isFuture||withoutSuffix?\" Ã³ra\":\" Ã³rÃ¡ja\");case\"hh\":return num+(isFuture||withoutSuffix?\" Ã³ra\":\" Ã³rÃ¡ja\");case\"d\":return\"egy\"+(isFuture||withoutSuffix?\" nap\":\" napja\");case\"dd\":return num+(isFuture||withoutSuffix?\" nap\":\" napja\");case\"M\":return\"egy\"+(isFuture||withoutSuffix?\" hÃ³nap\":\" hÃ³napja\");case\"MM\":return num+(isFuture||withoutSuffix?\" hÃ³nap\":\" hÃ³napja\");case\"y\":return\"egy\"+(isFuture||withoutSuffix?\" Ã©v\":\" Ã©ve\");case\"yy\":return num+(isFuture||withoutSuffix?\" Ã©v\":\" Ã©ve\")}return\"\"}function week(isFuture){return(isFuture?\"\":\"[mÃºlt] \")+\"[\"+weekEndings[this.day()]+\"] LT[-kor]\"}moment.defineLocale(\"hu\",{months:\"januÃ¡r_februÃ¡r_mÃ¡rcius_Ã¡prilis_mÃ¡jus_jÃºnius_jÃºlius_augusztus_szeptember_oktÃ³ber_november_december\".split(\"_\"),monthsShort:\"jan._feb._mÃ¡rc._Ã¡pr._mÃ¡j._jÃºn._jÃºl._aug._szept._okt._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"vasÃ¡rnap_hÃ©tfÅ‘_kedd_szerda_csÃ¼tÃ¶rtÃ¶k_pÃ©ntek_szombat\".split(\"_\"),weekdaysShort:\"vas_hÃ©t_kedd_sze_csÃ¼t_pÃ©n_szo\".split(\"_\"),weekdaysMin:\"v_h_k_sze_cs_p_szo\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"YYYY.MM.DD.\",LL:\"YYYY. MMMM D.\",LLL:\"YYYY. MMMM D. H:mm\",LLLL:\"YYYY. MMMM D., dddd H:mm\"},meridiemParse:/de|du/i,isPM:function(input){return\"u\"===input.charAt(1).toLowerCase()},meridiem:function(hours,minutes,isLower){return hours&lt;12?!0===isLower?\"de\":\"DE\":!0===isLower?\"du\":\"DU\"},calendar:{sameDay:\"[ma] LT[-kor]\",nextDay:\"[holnap] LT[-kor]\",nextWeek:function(){return week.call(this,!0)},lastDay:\"[tegnap] LT[-kor]\",lastWeek:function(){return week.call(this,!1)},sameElse:\"L\"},relativeTime:{future:\"%s mÃºlva\",past:\"%s\",s:translate,ss:translate,m:translate,mm:translate,h:translate,hh:translate,d:translate,dd:translate,M:translate,MM:translate,y:translate,yy:translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"hy-am\",{months:{format:\"Õ°Õ¸Ö‚Õ¶Õ¾Õ¡Ö€Õ«_ÖƒÕ¥Õ¿Ö€Õ¾Õ¡Ö€Õ«_Õ´Õ¡Ö€Õ¿Õ«_Õ¡ÕºÖ€Õ«Õ¬Õ«_Õ´Õ¡ÕµÕ«Õ½Õ«_Õ°Õ¸Ö‚Õ¶Õ«Õ½Õ«_Õ°Õ¸Ö‚Õ¬Õ«Õ½Õ«_Ö…Õ£Õ¸Õ½Õ¿Õ¸Õ½Õ«_Õ½Õ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«_Õ°Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«_Õ¶Õ¸ÕµÕ¥Õ´Õ¢Õ¥Ö€Õ«_Õ¤Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«\".split(\"_\"),standalone:\"Õ°Õ¸Ö‚Õ¶Õ¾Õ¡Ö€_ÖƒÕ¥Õ¿Ö€Õ¾Õ¡Ö€_Õ´Õ¡Ö€Õ¿_Õ¡ÕºÖ€Õ«Õ¬_Õ´Õ¡ÕµÕ«Õ½_Õ°Õ¸Ö‚Õ¶Õ«Õ½_Õ°Õ¸Ö‚Õ¬Õ«Õ½_Ö…Õ£Õ¸Õ½Õ¿Õ¸Õ½_Õ½Õ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥Ö€_Õ°Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€_Õ¶Õ¸ÕµÕ¥Õ´Õ¢Õ¥Ö€_Õ¤Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€\".split(\"_\")},monthsShort:\"Õ°Õ¶Õ¾_ÖƒÕ¿Ö€_Õ´Ö€Õ¿_Õ¡ÕºÖ€_Õ´ÕµÕ½_Õ°Õ¶Õ½_Õ°Õ¬Õ½_Ö…Õ£Õ½_Õ½ÕºÕ¿_Õ°Õ¯Õ¿_Õ¶Õ´Õ¢_Õ¤Õ¯Õ¿\".split(\"_\"),weekdays:\"Õ¯Õ«Ö€Õ¡Õ¯Õ«_Õ¥Ö€Õ¯Õ¸Ö‚Õ·Õ¡Õ¢Õ©Õ«_Õ¥Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«_Õ¹Õ¸Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«_Õ°Õ«Õ¶Õ£Õ·Õ¡Õ¢Õ©Õ«_Õ¸Ö‚Ö€Õ¢Õ¡Õ©_Õ·Õ¡Õ¢Õ¡Õ©\".split(\"_\"),weekdaysShort:\"Õ¯Ö€Õ¯_Õ¥Ö€Õ¯_Õ¥Ö€Ö„_Õ¹Ö€Ö„_Õ°Õ¶Õ£_Õ¸Ö‚Ö€Õ¢_Õ·Õ¢Õ©\".split(\"_\"),weekdaysMin:\"Õ¯Ö€Õ¯_Õ¥Ö€Õ¯_Õ¥Ö€Ö„_Õ¹Ö€Ö„_Õ°Õ¶Õ£_Õ¸Ö‚Ö€Õ¢_Õ·Õ¢Õ©\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY Õ©.\",LLL:\"D MMMM YYYY Õ©., HH:mm\",LLLL:\"dddd, D MMMM YYYY Õ©., HH:mm\"},calendar:{sameDay:\"[Õ¡ÕµÕ½Ö…Ö€] LT\",nextDay:\"[Õ¾Õ¡Õ²Õ¨] LT\",lastDay:\"[Õ¥Ö€Õ¥Õ¯] LT\",nextWeek:function(){return\"dddd [Ö…Ö€Õ¨ ÕªÕ¡Õ´Õ¨] LT\"},lastWeek:function(){return\"[Õ¡Õ¶ÖÕ¡Õ®] dddd [Ö…Ö€Õ¨ ÕªÕ¡Õ´Õ¨] LT\"},sameElse:\"L\"},relativeTime:{future:\"%s Õ°Õ¥Õ¿Õ¸\",past:\"%s Õ¡Õ¼Õ¡Õ»\",s:\"Õ´Õ« Ö„Õ¡Õ¶Õ« Õ¾Õ¡ÕµÖ€Õ¯ÕµÕ¡Õ¶\",ss:\"%d Õ¾Õ¡ÕµÖ€Õ¯ÕµÕ¡Õ¶\",m:\"Ö€Õ¸ÕºÕ¥\",mm:\"%d Ö€Õ¸ÕºÕ¥\",h:\"ÕªÕ¡Õ´\",hh:\"%d ÕªÕ¡Õ´\",d:\"Ö…Ö€\",dd:\"%d Ö…Ö€\",M:\"Õ¡Õ´Õ«Õ½\",MM:\"%d Õ¡Õ´Õ«Õ½\",y:\"Õ¿Õ¡Ö€Õ«\",yy:\"%d Õ¿Õ¡Ö€Õ«\"},meridiemParse:/Õ£Õ«Õ·Õ¥Ö€Õ¾Õ¡|Õ¡Õ¼Õ¡Õ¾Õ¸Õ¿Õ¾Õ¡|ÖÕ¥Ö€Õ¥Õ¯Õ¾Õ¡|Õ¥Ö€Õ¥Õ¯Õ¸ÕµÕ¡Õ¶/,isPM:function(input){return/^(ÖÕ¥Ö€Õ¥Õ¯Õ¾Õ¡|Õ¥Ö€Õ¥Õ¯Õ¸ÕµÕ¡Õ¶)$/.test(input)},meridiem:function(hour){return hour&lt;4?\"Õ£Õ«Õ·Õ¥Ö€Õ¾Õ¡\":hour&lt;12?\"Õ¡Õ¼Õ¡Õ¾Õ¸Õ¿Õ¾Õ¡\":hour&lt;17?\"ÖÕ¥Ö€Õ¥Õ¯Õ¾Õ¡\":\"Õ¥Ö€Õ¥Õ¯Õ¸ÕµÕ¡Õ¶\"},dayOfMonthOrdinalParse:/\\d{1,2}|\\d{1,2}-(Õ«Õ¶|Ö€Õ¤)/,ordinal:function(number,period){switch(period){case\"DDD\":case\"w\":case\"W\":case\"DDDo\":return 1===number?number+\"-Õ«Õ¶\":number+\"-Ö€Õ¤\";default:return number}},week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"id\",{months:\"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des\".split(\"_\"),weekdays:\"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu\".split(\"_\"),weekdaysShort:\"Min_Sen_Sel_Rab_Kam_Jum_Sab\".split(\"_\"),weekdaysMin:\"Mg_Sn_Sl_Rb_Km_Jm_Sb\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [pukul] HH.mm\",LLLL:\"dddd, D MMMM YYYY [pukul] HH.mm\"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"pagi\"===meridiem?hour:\"siang\"===meridiem?hour&gt;=11?hour:hour+12:\"sore\"===meridiem||\"malam\"===meridiem?hour+12:void 0},meridiem:function(hours,minutes,isLower){return hours&lt;11?\"pagi\":hours&lt;15?\"siang\":hours&lt;19?\"sore\":\"malam\"},calendar:{sameDay:\"[Hari ini pukul] LT\",nextDay:\"[Besok pukul] LT\",nextWeek:\"dddd [pukul] LT\",lastDay:\"[Kemarin pukul] LT\",lastWeek:\"dddd [lalu pukul] LT\",sameElse:\"L\"},relativeTime:{future:\"dalam %s\",past:\"%s yang lalu\",s:\"beberapa detik\",ss:\"%d detik\",m:\"semenit\",mm:\"%d menit\",h:\"sejam\",hh:\"%d jam\",d:\"sehari\",dd:\"%d hari\",M:\"sebulan\",MM:\"%d bulan\",y:\"setahun\",yy:\"%d tahun\"},week:{dow:0,doy:6}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";function plural(n){return n%100==11||n%10!=1}function translate(number,withoutSuffix,key,isFuture){var result=number+\" \";switch(key){case\"s\":return withoutSuffix||isFuture?\"nokkrar sekÃºndur\":\"nokkrum sekÃºndum\";case\"ss\":return plural(number)?result+(withoutSuffix||isFuture?\"sekÃºndur\":\"sekÃºndum\"):result+\"sekÃºnda\";case\"m\":return withoutSuffix?\"mÃ­nÃºta\":\"mÃ­nÃºtu\";case\"mm\":return plural(number)?result+(withoutSuffix||isFuture?\"mÃ­nÃºtur\":\"mÃ­nÃºtum\"):withoutSuffix?result+\"mÃ­nÃºta\":result+\"mÃ­nÃºtu\";case\"hh\":return plural(number)?result+(withoutSuffix||isFuture?\"klukkustundir\":\"klukkustundum\"):result+\"klukkustund\";case\"d\":return withoutSuffix?\"dagur\":isFuture?\"dag\":\"degi\";case\"dd\":return plural(number)?withoutSuffix?result+\"dagar\":result+(isFuture?\"daga\":\"dÃ¶gum\"):withoutSuffix?result+\"dagur\":result+(isFuture?\"dag\":\"degi\");case\"M\":return withoutSuffix?\"mÃ¡nuÃ°ur\":isFuture?\"mÃ¡nuÃ°\":\"mÃ¡nuÃ°i\";case\"MM\":return plural(number)?withoutSuffix?result+\"mÃ¡nuÃ°ir\":result+(isFuture?\"mÃ¡nuÃ°i\":\"mÃ¡nuÃ°um\"):withoutSuffix?result+\"mÃ¡nuÃ°ur\":result+(isFuture?\"mÃ¡nuÃ°\":\"mÃ¡nuÃ°i\");case\"y\":return withoutSuffix||isFuture?\"Ã¡r\":\"Ã¡ri\";case\"yy\":return plural(number)?result+(withoutSuffix||isFuture?\"Ã¡r\":\"Ã¡rum\"):result+(withoutSuffix||isFuture?\"Ã¡r\":\"Ã¡ri\")}}moment.defineLocale(\"is\",{months:\"janÃºar_febrÃºar_mars_aprÃ­l_maÃ­_jÃºnÃ­_jÃºlÃ­_Ã¡gÃºst_september_oktÃ³ber_nÃ³vember_desember\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_maÃ­_jÃºn_jÃºl_Ã¡gÃº_sep_okt_nÃ³v_des\".split(\"_\"),weekdays:\"sunnudagur_mÃ¡nudagur_Ã¾riÃ°judagur_miÃ°vikudagur_fimmtudagur_fÃ¶studagur_laugardagur\".split(\"_\"),weekdaysShort:\"sun_mÃ¡n_Ã¾ri_miÃ°_fim_fÃ¶s_lau\".split(\"_\"),weekdaysMin:\"Su_MÃ¡_Ãžr_Mi_Fi_FÃ¶_La\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY [kl.] H:mm\",LLLL:\"dddd, D. MMMM YYYY [kl.] H:mm\"},calendar:{sameDay:\"[Ã­ dag kl.] LT\",nextDay:\"[Ã¡ morgun kl.] LT\",nextWeek:\"dddd [kl.] LT\",lastDay:\"[Ã­ gÃ¦r kl.] LT\",lastWeek:\"[sÃ­Ã°asta] dddd [kl.] LT\",sameElse:\"L\"},relativeTime:{future:\"eftir %s\",past:\"fyrir %s sÃ­Ã°an\",s:translate,ss:translate,m:translate,mm:translate,h:\"klukkustund\",hh:translate,d:translate,dd:translate,M:translate,MM:translate,y:translate,yy:translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"it\",{months:\"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre\".split(\"_\"),monthsShort:\"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic\".split(\"_\"),weekdays:\"domenica_lunedÃ¬_martedÃ¬_mercoledÃ¬_giovedÃ¬_venerdÃ¬_sabato\".split(\"_\"),weekdaysShort:\"dom_lun_mar_mer_gio_ven_sab\".split(\"_\"),weekdaysMin:\"do_lu_ma_me_gi_ve_sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:function(){return\"[Oggi a\"+(this.hours()&gt;1?\"lle \":0===this.hours()?\" \":\"ll'\")+\"]LT\"},nextDay:function(){return\"[Domani a\"+(this.hours()&gt;1?\"lle \":0===this.hours()?\" \":\"ll'\")+\"]LT\"},nextWeek:function(){return\"dddd [a\"+(this.hours()&gt;1?\"lle \":0===this.hours()?\" \":\"ll'\")+\"]LT\"},lastDay:function(){return\"[Ieri a\"+(this.hours()&gt;1?\"lle \":0===this.hours()?\" \":\"ll'\")+\"]LT\"},lastWeek:function(){switch(this.day()){case 0:return\"[La scorsa] dddd [a\"+(this.hours()&gt;1?\"lle \":0===this.hours()?\" \":\"ll'\")+\"]LT\";default:return\"[Lo scorso] dddd [a\"+(this.hours()&gt;1?\"lle \":0===this.hours()?\" \":\"ll'\")+\"]LT\"}},sameElse:\"L\"},relativeTime:{future:\"tra %s\",past:\"%s fa\",s:\"alcuni secondi\",ss:\"%d secondi\",m:\"un minuto\",mm:\"%d minuti\",h:\"un'ora\",hh:\"%d ore\",d:\"un giorno\",dd:\"%d giorni\",w:\"una settimana\",ww:\"%d settimane\",M:\"un mese\",MM:\"%d mesi\",y:\"un anno\",yy:\"%d anni\"},dayOfMonthOrdinalParse:/\\d{1,2}Âº/,ordinal:\"%dÂº\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"it-ch\",{months:\"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre\".split(\"_\"),monthsShort:\"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic\".split(\"_\"),weekdays:\"domenica_lunedÃ¬_martedÃ¬_mercoledÃ¬_giovedÃ¬_venerdÃ¬_sabato\".split(\"_\"),weekdaysShort:\"dom_lun_mar_mer_gio_ven_sab\".split(\"_\"),weekdaysMin:\"do_lu_ma_me_gi_ve_sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Oggi alle] LT\",nextDay:\"[Domani alle] LT\",nextWeek:\"dddd [alle] LT\",lastDay:\"[Ieri alle] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[la scorsa] dddd [alle] LT\";default:return\"[lo scorso] dddd [alle] LT\"}},sameElse:\"L\"},relativeTime:{future:function(s){return(/^[0-9].+$/.test(s)?\"tra\":\"in\")+\" \"+s},past:\"%s fa\",s:\"alcuni secondi\",ss:\"%d secondi\",m:\"un minuto\",mm:\"%d minuti\",h:\"un'ora\",hh:\"%d ore\",d:\"un giorno\",dd:\"%d giorni\",M:\"un mese\",MM:\"%d mesi\",y:\"un anno\",yy:\"%d anni\"},dayOfMonthOrdinalParse:/\\d{1,2}Âº/,ordinal:\"%dÂº\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"ja\",{eras:[{since:\"2019-05-01\",offset:1,name:\"ä»¤å’Œ\",narrow:\"ã‹¿\",abbr:\"R\"},{since:\"1989-01-08\",until:\"2019-04-30\",offset:1,name:\"å¹³æˆ\",narrow:\"ã»\",abbr:\"H\"},{since:\"1926-12-25\",until:\"1989-01-07\",offset:1,name:\"æ˜­å’Œ\",narrow:\"ã¼\",abbr:\"S\"},{since:\"1912-07-30\",until:\"1926-12-24\",offset:1,name:\"å¤§æ­£\",narrow:\"ã½\",abbr:\"T\"},{since:\"1873-01-01\",until:\"1912-07-29\",offset:6,name:\"æ˜Žæ²»\",narrow:\"ã¾\",abbr:\"M\"},{since:\"0001-01-01\",until:\"1873-12-31\",offset:1,name:\"è¥¿æš¦\",narrow:\"AD\",abbr:\"AD\"},{since:\"0000-12-31\",until:-1/0,offset:1,name:\"ç´€å…ƒå‰\",narrow:\"BC\",abbr:\"BC\"}],eraYearOrdinalRegex:/(å…ƒ|\\d+)å¹´/,eraYearOrdinalParse:function(input,match){return\"å…ƒ\"===match[1]?1:parseInt(match[1]||input,10)},months:\"1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ\".split(\"_\"),monthsShort:\"1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ\".split(\"_\"),weekdays:\"æ—¥æ›œæ—¥_æœˆæ›œæ—¥_ç«æ›œæ—¥_æ°´æ›œæ—¥_æœ¨æ›œæ—¥_é‡‘æ›œæ—¥_åœŸæ›œæ—¥\".split(\"_\"),weekdaysShort:\"æ—¥_æœˆ_ç«_æ°´_æœ¨_é‡‘_åœŸ\".split(\"_\"),weekdaysMin:\"æ—¥_æœˆ_ç«_æ°´_æœ¨_é‡‘_åœŸ\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYYå¹´MæœˆDæ—¥\",LLL:\"YYYYå¹´MæœˆDæ—¥ HH:mm\",LLLL:\"YYYYå¹´MæœˆDæ—¥ dddd HH:mm\",l:\"YYYY/MM/DD\",ll:\"YYYYå¹´MæœˆDæ—¥\",lll:\"YYYYå¹´MæœˆDæ—¥ HH:mm\",llll:\"YYYYå¹´MæœˆDæ—¥(ddd) HH:mm\"},meridiemParse:/åˆå‰|åˆå¾Œ/i,isPM:function(input){return\"åˆå¾Œ\"===input},meridiem:function(hour,minute,isLower){return hour&lt;12?\"åˆå‰\":\"åˆå¾Œ\"},calendar:{sameDay:\"[ä»Šæ—¥] LT\",nextDay:\"[æ˜Žæ—¥] LT\",nextWeek:function(now){return now.week()!==this.week()?\"[æ¥é€±]dddd LT\":\"dddd LT\"},lastDay:\"[æ˜¨æ—¥] LT\",lastWeek:function(now){return this.week()!==now.week()?\"[å…ˆé€±]dddd LT\":\"dddd LT\"},sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}æ—¥/,ordinal:function(number,period){switch(period){case\"y\":return 1===number?\"å…ƒå¹´\":number+\"å¹´\";case\"d\":case\"D\":case\"DDD\":return number+\"æ—¥\";default:return number}},relativeTime:{future:\"%så¾Œ\",past:\"%så‰\",s:\"æ•°ç§’\",ss:\"%dç§’\",m:\"1åˆ†\",mm:\"%dåˆ†\",h:\"1æ™‚é–“\",hh:\"%dæ™‚é–“\",d:\"1æ—¥\",dd:\"%dæ—¥\",M:\"1ãƒ¶æœˆ\",MM:\"%dãƒ¶æœˆ\",y:\"1å¹´\",yy:\"%då¹´\"}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"jv\",{months:\"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des\".split(\"_\"),weekdays:\"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu\".split(\"_\"),weekdaysShort:\"Min_Sen_Sel_Reb_Kem_Jem_Sep\".split(\"_\"),weekdaysMin:\"Mg_Sn_Sl_Rb_Km_Jm_Sp\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [pukul] HH.mm\",LLLL:\"dddd, D MMMM YYYY [pukul] HH.mm\"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"enjing\"===meridiem?hour:\"siyang\"===meridiem?hour&gt;=11?hour:hour+12:\"sonten\"===meridiem||\"ndalu\"===meridiem?hour+12:void 0},meridiem:function(hours,minutes,isLower){return hours&lt;11?\"enjing\":hours&lt;15?\"siyang\":hours&lt;19?\"sonten\":\"ndalu\"},calendar:{sameDay:\"[Dinten puniko pukul] LT\",nextDay:\"[Mbenjang pukul] LT\",nextWeek:\"dddd [pukul] LT\",lastDay:\"[Kala wingi pukul] LT\",lastWeek:\"dddd [kepengker pukul] LT\",sameElse:\"L\"},relativeTime:{future:\"wonten ing %s\",past:\"%s ingkang kepengker\",s:\"sawetawis detik\",ss:\"%d detik\",m:\"setunggal menit\",mm:\"%d menit\",h:\"setunggal jam\",hh:\"%d jam\",d:\"sedinten\",dd:\"%d dinten\",M:\"sewulan\",MM:\"%d wulan\",y:\"setaun\",yy:\"%d taun\"},week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"ka\",{months:\"áƒ˜áƒáƒœáƒ•áƒáƒ&nbsp;áƒ˜_áƒ—áƒ”áƒ‘áƒ”áƒ&nbsp;áƒ•áƒáƒšáƒ˜_áƒ›áƒáƒ&nbsp;áƒ¢áƒ˜_áƒáƒžáƒ&nbsp;áƒ˜áƒšáƒ˜_áƒ›áƒáƒ˜áƒ¡áƒ˜_áƒ˜áƒ•áƒœáƒ˜áƒ¡áƒ˜_áƒ˜áƒ•áƒšáƒ˜áƒ¡áƒ˜_áƒáƒ’áƒ•áƒ˜áƒ¡áƒ¢áƒ_áƒ¡áƒ”áƒ¥áƒ¢áƒ”áƒ›áƒ‘áƒ”áƒ&nbsp;áƒ˜_áƒáƒ¥áƒ¢áƒáƒ›áƒ‘áƒ”áƒ&nbsp;áƒ˜_áƒœáƒáƒ”áƒ›áƒ‘áƒ”áƒ&nbsp;áƒ˜_áƒ“áƒ”áƒ™áƒ”áƒ›áƒ‘áƒ”áƒ&nbsp;áƒ˜\".split(\"_\"),monthsShort:\"áƒ˜áƒáƒœ_áƒ—áƒ”áƒ‘_áƒ›áƒáƒ&nbsp;_áƒáƒžáƒ&nbsp;_áƒ›áƒáƒ˜_áƒ˜áƒ•áƒœ_áƒ˜áƒ•áƒš_áƒáƒ’áƒ•_áƒ¡áƒ”áƒ¥_áƒáƒ¥áƒ¢_áƒœáƒáƒ”_áƒ“áƒ”áƒ™\".split(\"_\"),weekdays:{standalone:\"áƒ™áƒ•áƒ˜áƒ&nbsp;áƒ_áƒáƒ&nbsp;áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒ¡áƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒáƒ—áƒ®áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒ®áƒ£áƒ—áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒžáƒáƒ&nbsp;áƒáƒ¡áƒ™áƒ”áƒ•áƒ˜_áƒ¨áƒáƒ‘áƒáƒ—áƒ˜\".split(\"_\"),format:\"áƒ™áƒ•áƒ˜áƒ&nbsp;áƒáƒ¡_áƒáƒ&nbsp;áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒ¡áƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒáƒ—áƒ®áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒ®áƒ£áƒ—áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒžáƒáƒ&nbsp;áƒáƒ¡áƒ™áƒ”áƒ•áƒ¡_áƒ¨áƒáƒ‘áƒáƒ—áƒ¡\".split(\"_\"),isFormat:/(áƒ¬áƒ˜áƒœáƒ|áƒ¨áƒ”áƒ›áƒ“áƒ”áƒ’)/},weekdaysShort:\"áƒ™áƒ•áƒ˜_áƒáƒ&nbsp;áƒ¨_áƒ¡áƒáƒ›_áƒáƒ—áƒ®_áƒ®áƒ£áƒ—_áƒžáƒáƒ&nbsp;_áƒ¨áƒáƒ‘\".split(\"_\"),weekdaysMin:\"áƒ™áƒ•_áƒáƒ&nbsp;_áƒ¡áƒ_áƒáƒ—_áƒ®áƒ£_áƒžáƒ_áƒ¨áƒ\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[áƒ“áƒ¦áƒ”áƒ¡] LT[-áƒ–áƒ”]\",nextDay:\"[áƒ®áƒ•áƒáƒš] LT[-áƒ–áƒ”]\",lastDay:\"[áƒ’áƒ£áƒ¨áƒ˜áƒœ] LT[-áƒ–áƒ”]\",nextWeek:\"[áƒ¨áƒ”áƒ›áƒ“áƒ”áƒ’] dddd LT[-áƒ–áƒ”]\",lastWeek:\"[áƒ¬áƒ˜áƒœáƒ] dddd LT-áƒ–áƒ”\",sameElse:\"L\"},relativeTime:{future:function(s){return s.replace(/(áƒ¬áƒáƒ›|áƒ¬áƒ£áƒ—|áƒ¡áƒáƒáƒ—|áƒ¬áƒ”áƒš|áƒ“áƒ¦|áƒ—áƒ•)(áƒ˜|áƒ”)/,(function($0,$1,$2){return\"áƒ˜\"===$2?$1+\"áƒ¨áƒ˜\":$1+$2+\"áƒ¨áƒ˜\"}))},past:function(s){return/(áƒ¬áƒáƒ›áƒ˜|áƒ¬áƒ£áƒ—áƒ˜|áƒ¡áƒáƒáƒ—áƒ˜|áƒ“áƒ¦áƒ”|áƒ—áƒ•áƒ”)/.test(s)?s.replace(/(áƒ˜|áƒ”)$/,\"áƒ˜áƒ¡ áƒ¬áƒ˜áƒœ\"):/áƒ¬áƒ”áƒšáƒ˜/.test(s)?s.replace(/áƒ¬áƒ”áƒšáƒ˜$/,\"áƒ¬áƒšáƒ˜áƒ¡ áƒ¬áƒ˜áƒœ\"):s},s:\"áƒ&nbsp;áƒáƒ›áƒ“áƒ”áƒœáƒ˜áƒ›áƒ” áƒ¬áƒáƒ›áƒ˜\",ss:\"%d áƒ¬áƒáƒ›áƒ˜\",m:\"áƒ¬áƒ£áƒ—áƒ˜\",mm:\"%d áƒ¬áƒ£áƒ—áƒ˜\",h:\"áƒ¡áƒáƒáƒ—áƒ˜\",hh:\"%d áƒ¡áƒáƒáƒ—áƒ˜\",d:\"áƒ“áƒ¦áƒ”\",dd:\"%d áƒ“áƒ¦áƒ”\",M:\"áƒ—áƒ•áƒ”\",MM:\"%d áƒ—áƒ•áƒ”\",y:\"áƒ¬áƒ”áƒšáƒ˜\",yy:\"%d áƒ¬áƒ”áƒšáƒ˜\"},dayOfMonthOrdinalParse:/0|1-áƒšáƒ˜|áƒ›áƒ”-\\d{1,2}|\\d{1,2}-áƒ”/,ordinal:function(number){return 0===number?number:1===number?number+\"-áƒšáƒ˜\":number&lt;20||number&lt;=100&amp;&amp;number%20==0||number%100==0?\"áƒ›áƒ”-\"+number:number+\"-áƒ”\"},week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var suffixes={0:\"-ÑˆÑ–\",1:\"-ÑˆÑ–\",2:\"-ÑˆÑ–\",3:\"-ÑˆÑ–\",4:\"-ÑˆÑ–\",5:\"-ÑˆÑ–\",6:\"-ÑˆÑ‹\",7:\"-ÑˆÑ–\",8:\"-ÑˆÑ–\",9:\"-ÑˆÑ‹\",10:\"-ÑˆÑ‹\",20:\"-ÑˆÑ‹\",30:\"-ÑˆÑ‹\",40:\"-ÑˆÑ‹\",50:\"-ÑˆÑ–\",60:\"-ÑˆÑ‹\",70:\"-ÑˆÑ–\",80:\"-ÑˆÑ–\",90:\"-ÑˆÑ‹\",100:\"-ÑˆÑ–\"};moment.defineLocale(\"kk\",{months:\"Ò›Ð°Ò£Ñ‚Ð°Ñ€_Ð°Ò›Ð¿Ð°Ð½_Ð½Ð°ÑƒÑ€Ñ‹Ð·_ÑÓ™ÑƒÑ–Ñ€_Ð¼Ð°Ð¼Ñ‹Ñ€_Ð¼Ð°ÑƒÑÑ‹Ð¼_ÑˆÑ–Ð»Ð´Ðµ_Ñ‚Ð°Ð¼Ñ‹Ð·_Ò›Ñ‹Ñ€ÐºÒ¯Ð¹ÐµÐº_Ò›Ð°Ð·Ð°Ð½_Ò›Ð°Ñ€Ð°ÑˆÐ°_Ð¶ÐµÐ»Ñ‚Ð¾Ò›ÑÐ°Ð½\".split(\"_\"),monthsShort:\"Ò›Ð°Ò£_Ð°Ò›Ð¿_Ð½Ð°Ñƒ_ÑÓ™Ñƒ_Ð¼Ð°Ð¼_Ð¼Ð°Ñƒ_ÑˆÑ–Ð»_Ñ‚Ð°Ð¼_Ò›Ñ‹Ñ€_Ò›Ð°Ð·_Ò›Ð°Ñ€_Ð¶ÐµÐ»\".split(\"_\"),weekdays:\"Ð¶ÐµÐºÑÐµÐ½Ð±Ñ–_Ð´Ò¯Ð¹ÑÐµÐ½Ð±Ñ–_ÑÐµÐ¹ÑÐµÐ½Ð±Ñ–_ÑÓ™Ñ€ÑÐµÐ½Ð±Ñ–_Ð±ÐµÐ¹ÑÐµÐ½Ð±Ñ–_Ð¶Ò±Ð¼Ð°_ÑÐµÐ½Ð±Ñ–\".split(\"_\"),weekdaysShort:\"Ð¶ÐµÐº_Ð´Ò¯Ð¹_ÑÐµÐ¹_ÑÓ™Ñ€_Ð±ÐµÐ¹_Ð¶Ò±Ð¼_ÑÐµÐ½\".split(\"_\"),weekdaysMin:\"Ð¶Ðº_Ð´Ð¹_ÑÐ¹_ÑÑ€_Ð±Ð¹_Ð¶Ð¼_ÑÐ½\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Ð‘Ò¯Ð³Ñ–Ð½ ÑÐ°Ò“Ð°Ñ‚] LT\",nextDay:\"[Ð•Ñ€Ñ‚ÐµÒ£ ÑÐ°Ò“Ð°Ñ‚] LT\",nextWeek:\"dddd [ÑÐ°Ò“Ð°Ñ‚] LT\",lastDay:\"[ÐšÐµÑˆÐµ ÑÐ°Ò“Ð°Ñ‚] LT\",lastWeek:\"[Ó¨Ñ‚ÐºÐµÐ½ Ð°Ð¿Ñ‚Ð°Ð½Ñ‹Ò£] dddd [ÑÐ°Ò“Ð°Ñ‚] LT\",sameElse:\"L\"},relativeTime:{future:\"%s Ñ–ÑˆÑ–Ð½Ð´Ðµ\",past:\"%s Ð±Ò±Ñ€Ñ‹Ð½\",s:\"Ð±Ñ–Ñ€Ð½ÐµÑˆÐµ ÑÐµÐºÑƒÐ½Ð´\",ss:\"%d ÑÐµÐºÑƒÐ½Ð´\",m:\"Ð±Ñ–Ñ€ Ð¼Ð¸Ð½ÑƒÑ‚\",mm:\"%d Ð¼Ð¸Ð½ÑƒÑ‚\",h:\"Ð±Ñ–Ñ€ ÑÐ°Ò“Ð°Ñ‚\",hh:\"%d ÑÐ°Ò“Ð°Ñ‚\",d:\"Ð±Ñ–Ñ€ ÐºÒ¯Ð½\",dd:\"%d ÐºÒ¯Ð½\",M:\"Ð±Ñ–Ñ€ Ð°Ð¹\",MM:\"%d Ð°Ð¹\",y:\"Ð±Ñ–Ñ€ Ð¶Ñ‹Ð»\",yy:\"%d Ð¶Ñ‹Ð»\"},dayOfMonthOrdinalParse:/\\d{1,2}-(ÑˆÑ–|ÑˆÑ‹)/,ordinal:function(number){return number+(suffixes[number]||suffixes[number%10]||suffixes[number&gt;=100?100:null])},week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var symbolMap={1:\"áŸ¡\",2:\"áŸ¢\",3:\"áŸ£\",4:\"áŸ¤\",5:\"áŸ¥\",6:\"áŸ¦\",7:\"áŸ§\",8:\"áŸ¨\",9:\"áŸ©\",0:\"áŸ&nbsp;\"},numberMap={\"áŸ¡\":\"1\",\"áŸ¢\":\"2\",\"áŸ£\":\"3\",\"áŸ¤\":\"4\",\"áŸ¥\":\"5\",\"áŸ¦\":\"6\",\"áŸ§\":\"7\",\"áŸ¨\":\"8\",\"áŸ©\":\"9\",\"áŸ&nbsp;\":\"0\"};moment.defineLocale(\"km\",{months:\"áž˜áž€ážšáž¶_áž€áž»áž˜áŸ’áž—áŸˆ_áž˜áž¸áž“áž¶_áž˜áŸážŸáž¶_áž§ážŸáž—áž¶_áž˜áž·ážáž»áž“áž¶_áž€áž€áŸ’áž€ážŠáž¶_ážŸáž¸áž&nbsp;áž¶_áž€áž‰áŸ’áž‰áž¶_ážáž»áž›áž¶_ážœáž·áž…áŸ’áž†áž·áž€áž¶_áž’áŸ’áž“áž¼\".split(\"_\"),monthsShort:\"áž˜áž€ážšáž¶_áž€áž»áž˜áŸ’áž—áŸˆ_áž˜áž¸áž“áž¶_áž˜áŸážŸáž¶_áž§ážŸáž—áž¶_áž˜áž·ážáž»áž“áž¶_áž€áž€áŸ’áž€ážŠáž¶_ážŸáž¸áž&nbsp;áž¶_áž€áž‰áŸ’áž‰áž¶_ážáž»áž›áž¶_ážœáž·áž…áŸ’áž†áž·áž€áž¶_áž’áŸ’áž“áž¼\".split(\"_\"),weekdays:\"áž¢áž¶áž‘áž·ážáŸ’áž™_áž…áŸáž“áŸ’áž‘_áž¢áž„áŸ’áž‚áž¶ážš_áž–áž»áž’_áž–áŸ’ážšáž&nbsp;ážŸáŸ’áž”ážáž·áŸ_ážŸáž»áž€áŸ’ážš_ážŸáŸ…ážšáŸ\".split(\"_\"),weekdaysShort:\"áž¢áž¶_áž…_áž¢_áž–_áž–áŸ’ážš_ážŸáž»_ážŸ\".split(\"_\"),weekdaysMin:\"áž¢áž¶_áž…_áž¢_áž–_áž–áŸ’ážš_ážŸáž»_ážŸ\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},meridiemParse:/áž–áŸ’ážšáž¹áž€|áž›áŸ’áž„áž¶áž…/,isPM:function(input){return\"áž›áŸ’áž„áž¶áž…\"===input},meridiem:function(hour,minute,isLower){return hour&lt;12?\"áž–áŸ’ážšáž¹áž€\":\"áž›áŸ’áž„áž¶áž…\"},calendar:{sameDay:\"[ážáŸ’áž„áŸƒáž“áŸáŸ‡ áž˜áŸ‰áŸ„áž„] LT\",nextDay:\"[ážŸáŸ’áž¢áŸ‚áž€ áž˜áŸ‰áŸ„áž„] LT\",nextWeek:\"dddd [áž˜áŸ‰áŸ„áž„] LT\",lastDay:\"[áž˜áŸ’ážŸáž·áž›áž˜áž·áž‰ áž˜áŸ‰áŸ„áž„] LT\",lastWeek:\"dddd [ážŸáž”áŸ’ážáž¶áž&nbsp;áŸáž˜áž»áž“] [áž˜áŸ‰áŸ„áž„] LT\",sameElse:\"L\"},relativeTime:{future:\"%sáž‘áŸ€áž\",past:\"%sáž˜áž»áž“\",s:\"áž”áŸ‰áž»áž“áŸ’áž˜áž¶áž“ážœáž·áž“áž¶áž‘áž¸\",ss:\"%d ážœáž·áž“áž¶áž‘áž¸\",m:\"áž˜áž½áž™áž“áž¶áž‘áž¸\",mm:\"%d áž“áž¶áž‘áž¸\",h:\"áž˜áž½áž™áž˜áŸ‰áŸ„áž„\",hh:\"%d áž˜áŸ‰áŸ„áž„\",d:\"áž˜áž½áž™ážáŸ’áž„áŸƒ\",dd:\"%d ážáŸ’áž„áŸƒ\",M:\"áž˜áž½áž™ážáŸ‚\",MM:\"%d ážáŸ‚\",y:\"áž˜áž½áž™áž†áŸ’áž“áž¶áŸ†\",yy:\"%d áž†áŸ’áž“áž¶áŸ†\"},dayOfMonthOrdinalParse:/áž‘áž¸\\d{1,2}/,ordinal:\"áž‘áž¸%d\",preparse:function(string){return string.replace(/[áŸ¡áŸ¢áŸ£áŸ¤áŸ¥áŸ¦áŸ§áŸ¨áŸ©áŸ&nbsp;]/g,(function(match){return numberMap[match]}))},postformat:function(string){return string.replace(/\\d/g,(function(match){return symbolMap[match]}))},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var symbolMap={1:\"à³§\",2:\"à³¨\",3:\"à³©\",4:\"à³ª\",5:\"à³«\",6:\"à³¬\",7:\"à³­\",8:\"à³®\",9:\"à³¯\",0:\"à³¦\"},numberMap={\"à³§\":\"1\",\"à³¨\":\"2\",\"à³©\":\"3\",\"à³ª\":\"4\",\"à³«\":\"5\",\"à³¬\":\"6\",\"à³­\":\"7\",\"à³®\":\"8\",\"à³¯\":\"9\",\"à³¦\":\"0\"};moment.defineLocale(\"kn\",{months:\"à²œà²¨à²µà²°à²¿_à²«à³†à²¬à³à²°à²µà²°à²¿_à²®à²¾à²°à³à²šà³_à²à²ªà³à²°à²¿à²²à³_à²®à³†à³•_à²œà³‚à²¨à³_à²œà³à²²à³†à³–_à²†à²—à²¸à³à²Ÿà³_à²¸à³†à²ªà³à²Ÿà³†à²‚à²¬à²°à³_à²…à²•à³à²Ÿà³†à³‚à³•à²¬à²°à³_à²¨à²µà³†à²‚à²¬à²°à³_à²¡à²¿à²¸à³†à²‚à²¬à²°à³\".split(\"_\"),monthsShort:\"à²œà²¨_à²«à³†à²¬à³à²°_à²®à²¾à²°à³à²šà³_à²à²ªà³à²°à²¿à²²à³_à²®à³†à³•_à²œà³‚à²¨à³_à²œà³à²²à³†à³–_à²†à²—à²¸à³à²Ÿà³_à²¸à³†à²ªà³à²Ÿà³†à²‚_à²…à²•à³à²Ÿà³†à³‚à³•_à²¨à²µà³†à²‚_à²¡à²¿à²¸à³†à²‚\".split(\"_\"),monthsParseExact:!0,weekdays:\"à²­à²¾à²¨à³à²µà²¾à²°_à²¸à³†à³‚à³•à²®à²µà²¾à²°_à²®à²‚à²—à²³à²µà²¾à²°_à²¬à³à²§à²µà²¾à²°_à²—à³à²°à³à²µà²¾à²°_à²¶à³à²•à³à²°à²µà²¾à²°_à²¶à²¨à²¿à²µà²¾à²°\".split(\"_\"),weekdaysShort:\"à²­à²¾à²¨à³_à²¸à³†à³‚à³•à²®_à²®à²‚à²—à²³_à²¬à³à²§_à²—à³à²°à³_à²¶à³à²•à³à²°_à²¶à²¨à²¿\".split(\"_\"),weekdaysMin:\"à²­à²¾_à²¸à³†à³‚à³•_à²®à²‚_à²¬à³_à²—à³_à²¶à³_à²¶\".split(\"_\"),longDateFormat:{LT:\"A h:mm\",LTS:\"A h:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm\",LLLL:\"dddd, D MMMM YYYY, A h:mm\"},calendar:{sameDay:\"[à²‡à²‚à²¦à³] LT\",nextDay:\"[à²¨à²¾à²³à³†] LT\",nextWeek:\"dddd, LT\",lastDay:\"[à²¨à²¿à²¨à³à²¨à³†] LT\",lastWeek:\"[à²•à³†à³‚à²¨à³†à²¯] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s à²¨à²‚à²¤à²°\",past:\"%s à²¹à²¿à²‚à²¦à³†\",s:\"à²•à³†à²²à²µà³ à²•à³à²·à²£à²—à²³à³\",ss:\"%d à²¸à³†à²•à³†à²‚à²¡à³à²—à²³à³\",m:\"à²’à²‚à²¦à³ à²¨à²¿à²®à²¿à²·\",mm:\"%d à²¨à²¿à²®à²¿à²·\",h:\"à²’à²‚à²¦à³ à²—à²‚à²Ÿà³†\",hh:\"%d à²—à²‚à²Ÿà³†\",d:\"à²’à²‚à²¦à³ à²¦à²¿à²¨\",dd:\"%d à²¦à²¿à²¨\",M:\"à²’à²‚à²¦à³ à²¤à²¿à²‚à²—à²³à³\",MM:\"%d à²¤à²¿à²‚à²—à²³à³\",y:\"à²’à²‚à²¦à³ à²µà²°à³à²·\",yy:\"%d à²µà²°à³à²·\"},preparse:function(string){return string.replace(/[à³§à³¨à³©à³ªà³«à³¬à³­à³®à³¯à³¦]/g,(function(match){return numberMap[match]}))},postformat:function(string){return string.replace(/\\d/g,(function(match){return symbolMap[match]}))},meridiemParse:/à²°à²¾à²¤à³à²°à²¿|à²¬à³†à²³à²¿à²—à³à²—à³†|à²®à²§à³à²¯à²¾à²¹à³à²¨|à²¸à²‚à²œà³†/,meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"à²°à²¾à²¤à³à²°à²¿\"===meridiem?hour&lt;4?hour:hour+12:\"à²¬à³†à²³à²¿à²—à³à²—à³†\"===meridiem?hour:\"à²®à²§à³à²¯à²¾à²¹à³à²¨\"===meridiem?hour&gt;=10?hour:hour+12:\"à²¸à²‚à²œà³†\"===meridiem?hour+12:void 0},meridiem:function(hour,minute,isLower){return hour&lt;4?\"à²°à²¾à²¤à³à²°à²¿\":hour&lt;10?\"à²¬à³†à²³à²¿à²—à³à²—à³†\":hour&lt;17?\"à²®à²§à³à²¯à²¾à²¹à³à²¨\":hour&lt;20?\"à²¸à²‚à²œà³†\":\"à²°à²¾à²¤à³à²°à²¿\"},dayOfMonthOrdinalParse:/\\d{1,2}(à²¨à³†à³•)/,ordinal:function(number){return number+\"à²¨à³†à³•\"},week:{dow:0,doy:6}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"ko\",{months:\"1ì›”_2ì›”_3ì›”_4ì›”_5ì›”_6ì›”_7ì›”_8ì›”_9ì›”_10ì›”_11ì›”_12ì›”\".split(\"_\"),monthsShort:\"1ì›”_2ì›”_3ì›”_4ì›”_5ì›”_6ì›”_7ì›”_8ì›”_9ì›”_10ì›”_11ì›”_12ì›”\".split(\"_\"),weekdays:\"ì¼ìš”ì¼_ì›”ìš”ì¼_í™”ìš”ì¼_ìˆ˜ìš”ì¼_ëª©ìš”ì¼_ê¸ˆìš”ì¼_í†&nbsp;ìš”ì¼\".split(\"_\"),weekdaysShort:\"ì¼_ì›”_í™”_ìˆ˜_ëª©_ê¸ˆ_í†&nbsp;\".split(\"_\"),weekdaysMin:\"ì¼_ì›”_í™”_ìˆ˜_ëª©_ê¸ˆ_í†&nbsp;\".split(\"_\"),longDateFormat:{LT:\"A h:mm\",LTS:\"A h:mm:ss\",L:\"YYYY.MM.DD.\",LL:\"YYYYë…„ MMMM Dì¼\",LLL:\"YYYYë…„ MMMM Dì¼ A h:mm\",LLLL:\"YYYYë…„ MMMM Dì¼ dddd A h:mm\",l:\"YYYY.MM.DD.\",ll:\"YYYYë…„ MMMM Dì¼\",lll:\"YYYYë…„ MMMM Dì¼ A h:mm\",llll:\"YYYYë…„ MMMM Dì¼ dddd A h:mm\"},calendar:{sameDay:\"ì˜¤ëŠ˜ LT\",nextDay:\"ë‚´ì¼ LT\",nextWeek:\"dddd LT\",lastDay:\"ì–´ì&nbsp;œ LT\",lastWeek:\"ì§€ë‚œì£¼ dddd LT\",sameElse:\"L\"},relativeTime:{future:\"%s í›„\",past:\"%s ì&nbsp;„\",s:\"ëª‡ ì´ˆ\",ss:\"%dì´ˆ\",m:\"1ë¶„\",mm:\"%dë¶„\",h:\"í•œ ì‹œê°„\",hh:\"%dì‹œê°„\",d:\"í•˜ë£¨\",dd:\"%dì¼\",M:\"í•œ ë‹¬\",MM:\"%dë‹¬\",y:\"ì¼ ë…„\",yy:\"%dë…„\"},dayOfMonthOrdinalParse:/\\d{1,2}(ì¼|ì›”|ì£¼)/,ordinal:function(number,period){switch(period){case\"d\":case\"D\":case\"DDD\":return number+\"ì¼\";case\"M\":return number+\"ì›”\";case\"w\":case\"W\":return number+\"ì£¼\";default:return number}},meridiemParse:/ì˜¤ì&nbsp;„|ì˜¤í›„/,isPM:function(token){return\"ì˜¤í›„\"===token},meridiem:function(hour,minute,isUpper){return hour&lt;12?\"ì˜¤ì&nbsp;„\":\"ì˜¤í›„\"}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var symbolMap={1:\"Ù¡\",2:\"Ù¢\",3:\"Ù£\",4:\"Ù¤\",5:\"Ù¥\",6:\"Ù¦\",7:\"Ù§\",8:\"Ù¨\",9:\"Ù©\",0:\"Ù&nbsp;\"},numberMap={\"Ù¡\":\"1\",\"Ù¢\":\"2\",\"Ù£\":\"3\",\"Ù¤\":\"4\",\"Ù¥\":\"5\",\"Ù¦\":\"6\",\"Ù§\":\"7\",\"Ù¨\":\"8\",\"Ù©\":\"9\",\"Ù&nbsp;\":\"0\"},months=[\"Ú©Ø§Ù†ÙˆÙ†ÛŒ Ø¯ÙˆÙˆÛ•Ù…\",\"Ø´ÙˆØ¨Ø§Øª\",\"Ø¦Ø§Ø²Ø§Ø±\",\"Ù†ÛŒØ³Ø§Ù†\",\"Ø¦Ø§ÛŒØ§Ø±\",\"Ø­ÙˆØ²Û•ÛŒØ±Ø§Ù†\",\"ØªÛ•Ù…Ù…ÙˆØ²\",\"Ø¦Ø§Ø¨\",\"Ø¦Û•ÛŒÙ„ÙˆÙˆÙ„\",\"ØªØ´Ø±ÛŒÙ†ÛŒ ÛŒÛ•ÙƒÛ•Ù…\",\"ØªØ´Ø±ÛŒÙ†ÛŒ Ø¯ÙˆÙˆÛ•Ù…\",\"ÙƒØ§Ù†ÙˆÙ†ÛŒ ÛŒÛ•Ú©Û•Ù…\"];moment.defineLocale(\"ku\",{months:months,monthsShort:months,weekdays:\"ÛŒÙ‡â€ŒÙƒØ´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ø¯ÙˆÙˆØ´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ø³ÛŽØ´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ú†ÙˆØ§Ø±Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ù¾ÛŽÙ†Ø¬Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ù‡Ù‡â€ŒÛŒÙ†ÛŒ_Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ\".split(\"_\"),weekdaysShort:\"ÛŒÙ‡â€ŒÙƒØ´Ù‡â€ŒÙ…_Ø¯ÙˆÙˆØ´Ù‡â€ŒÙ…_Ø³ÛŽØ´Ù‡â€ŒÙ…_Ú†ÙˆØ§Ø±Ø´Ù‡â€ŒÙ…_Ù¾ÛŽÙ†Ø¬Ø´Ù‡â€ŒÙ…_Ù‡Ù‡â€ŒÛŒÙ†ÛŒ_Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ\".split(\"_\"),weekdaysMin:\"ÛŒ_Ø¯_Ø³_Ú†_Ù¾_Ù‡_Ø´\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},meridiemParse:/Ø¦ÛŽÙˆØ§Ø±Ù‡â€Œ|Ø¨Ù‡â€ŒÛŒØ§Ù†ÛŒ/,isPM:function(input){return/Ø¦ÛŽÙˆØ§Ø±Ù‡â€Œ/.test(input)},meridiem:function(hour,minute,isLower){return hour&lt;12?\"Ø¨Ù‡â€ŒÛŒØ§Ù†ÛŒ\":\"Ø¦ÛŽÙˆØ§Ø±Ù‡â€Œ\"},calendar:{sameDay:\"[Ø¦Ù‡â€ŒÙ…Ø±Û† ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT\",nextDay:\"[Ø¨Ù‡â€ŒÛŒØ§Ù†ÛŒ ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT\",nextWeek:\"dddd [ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT\",lastDay:\"[Ø¯ÙˆÛŽÙ†ÛŽ ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT\",lastWeek:\"dddd [ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT\",sameElse:\"L\"},relativeTime:{future:\"Ù„Ù‡â€Œ %s\",past:\"%s\",s:\"Ú†Ù‡â€ŒÙ†Ø¯ Ú†Ø±ÙƒÙ‡â€ŒÛŒÙ‡â€ŒÙƒ\",ss:\"Ú†Ø±ÙƒÙ‡â€Œ %d\",m:\"ÛŒÙ‡â€ŒÙƒ Ø®ÙˆÙ„Ù‡â€ŒÙƒ\",mm:\"%d Ø®ÙˆÙ„Ù‡â€ŒÙƒ\",h:\"ÛŒÙ‡â€ŒÙƒ ÙƒØ§ØªÚ˜Ù…ÛŽØ±\",hh:\"%d ÙƒØ§ØªÚ˜Ù…ÛŽØ±\",d:\"ÛŒÙ‡â€ŒÙƒ Ú•Û†Ú˜\",dd:\"%d Ú•Û†Ú˜\",M:\"ÛŒÙ‡â€ŒÙƒ Ù…Ø§Ù†Ú¯\",MM:\"%d Ù…Ø§Ù†Ú¯\",y:\"ÛŒÙ‡â€ŒÙƒ Ø³Ø§Úµ\",yy:\"%d Ø³Ø§Úµ\"},preparse:function(string){return string.replace(/[Ù¡Ù¢Ù£Ù¤Ù¥Ù¦Ù§Ù¨Ù©Ù&nbsp;]/g,(function(match){return numberMap[match]})).replace(/ØŒ/g,\",\")},postformat:function(string){return string.replace(/\\d/g,(function(match){return symbolMap[match]})).replace(/,/g,\"ØŒ\")},week:{dow:6,doy:12}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var suffixes={0:\"-Ñ‡Ò¯\",1:\"-Ñ‡Ð¸\",2:\"-Ñ‡Ð¸\",3:\"-Ñ‡Ò¯\",4:\"-Ñ‡Ò¯\",5:\"-Ñ‡Ð¸\",6:\"-Ñ‡Ñ‹\",7:\"-Ñ‡Ð¸\",8:\"-Ñ‡Ð¸\",9:\"-Ñ‡Ñƒ\",10:\"-Ñ‡Ñƒ\",20:\"-Ñ‡Ñ‹\",30:\"-Ñ‡Ñƒ\",40:\"-Ñ‡Ñ‹\",50:\"-Ñ‡Ò¯\",60:\"-Ñ‡Ñ‹\",70:\"-Ñ‡Ð¸\",80:\"-Ñ‡Ð¸\",90:\"-Ñ‡Ñƒ\",100:\"-Ñ‡Ò¯\"};moment.defineLocale(\"ky\",{months:\"ÑÐ½Ð²Ð°Ñ€ÑŒ_Ñ„ÐµÐ²Ñ€Ð°Ð»ÑŒ_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»ÑŒ_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€ÑŒ_Ð¾ÐºÑ‚ÑÐ±Ñ€ÑŒ_Ð½Ð¾ÑÐ±Ñ€ÑŒ_Ð´ÐµÐºÐ°Ð±Ñ€ÑŒ\".split(\"_\"),monthsShort:\"ÑÐ½Ð²_Ñ„ÐµÐ²_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³_ÑÐµÐ½_Ð¾ÐºÑ‚_Ð½Ð¾Ñ_Ð´ÐµÐº\".split(\"_\"),weekdays:\"Ð–ÐµÐºÑˆÐµÐ¼Ð±Ð¸_Ð”Ò¯Ð¹ÑˆÓ©Ð¼Ð±Ò¯_Ð¨ÐµÐ¹ÑˆÐµÐ¼Ð±Ð¸_Ð¨Ð°Ñ€ÑˆÐµÐ¼Ð±Ð¸_Ð‘ÐµÐ¹ÑˆÐµÐ¼Ð±Ð¸_Ð–ÑƒÐ¼Ð°_Ð˜ÑˆÐµÐ¼Ð±Ð¸\".split(\"_\"),weekdaysShort:\"Ð–ÐµÐº_Ð”Ò¯Ð¹_Ð¨ÐµÐ¹_Ð¨Ð°Ñ€_Ð‘ÐµÐ¹_Ð–ÑƒÐ¼_Ð˜ÑˆÐµ\".split(\"_\"),weekdaysMin:\"Ð–Ðº_Ð”Ð¹_Ð¨Ð¹_Ð¨Ñ€_Ð‘Ð¹_Ð–Ð¼_Ð˜Ñˆ\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Ð‘Ò¯Ð³Ò¯Ð½ ÑÐ°Ð°Ñ‚] LT\",nextDay:\"[Ð­Ñ€Ñ‚ÐµÒ£ ÑÐ°Ð°Ñ‚] LT\",nextWeek:\"dddd [ÑÐ°Ð°Ñ‚] LT\",lastDay:\"[ÐšÐµÑ‡ÑÑ ÑÐ°Ð°Ñ‚] LT\",lastWeek:\"[Ó¨Ñ‚ÐºÓ©Ð½ Ð°Ð¿Ñ‚Ð°Ð½Ñ‹Ð½] dddd [ÐºÒ¯Ð½Ò¯] [ÑÐ°Ð°Ñ‚] LT\",sameElse:\"L\"},relativeTime:{future:\"%s Ð¸Ñ‡Ð¸Ð½Ð´Ðµ\",past:\"%s Ð¼ÑƒÑ€ÑƒÐ½\",s:\"Ð±Ð¸Ñ€Ð½ÐµÑ‡Ðµ ÑÐµÐºÑƒÐ½Ð´\",ss:\"%d ÑÐµÐºÑƒÐ½Ð´\",m:\"Ð±Ð¸Ñ€ Ð¼Ò¯Ð½Ó©Ñ‚\",mm:\"%d Ð¼Ò¯Ð½Ó©Ñ‚\",h:\"Ð±Ð¸Ñ€ ÑÐ°Ð°Ñ‚\",hh:\"%d ÑÐ°Ð°Ñ‚\",d:\"Ð±Ð¸Ñ€ ÐºÒ¯Ð½\",dd:\"%d ÐºÒ¯Ð½\",M:\"Ð±Ð¸Ñ€ Ð°Ð¹\",MM:\"%d Ð°Ð¹\",y:\"Ð±Ð¸Ñ€ Ð¶Ñ‹Ð»\",yy:\"%d Ð¶Ñ‹Ð»\"},dayOfMonthOrdinalParse:/\\d{1,2}-(Ñ‡Ð¸|Ñ‡Ñ‹|Ñ‡Ò¯|Ñ‡Ñƒ)/,ordinal:function(number){return number+(suffixes[number]||suffixes[number%10]||suffixes[number&gt;=100?100:null])},week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";function processRelativeTime(number,withoutSuffix,key,isFuture){var format={m:[\"eng Minutt\",\"enger Minutt\"],h:[\"eng Stonn\",\"enger Stonn\"],d:[\"een Dag\",\"engem Dag\"],M:[\"ee Mount\",\"engem Mount\"],y:[\"ee Joer\",\"engem Joer\"]};return withoutSuffix?format[key][0]:format[key][1]}function eifelerRegelAppliesToNumber(number){if(number=parseInt(number,10),isNaN(number))return!1;if(number&lt;0)return!0;if(number&lt;10)return 4&lt;=number&amp;&amp;number&lt;=7;if(number&lt;100){var lastDigit=number%10;return eifelerRegelAppliesToNumber(0===lastDigit?number/10:lastDigit)}if(number&lt;1e4){for(;number&gt;=10;)number/=10;return eifelerRegelAppliesToNumber(number)}return eifelerRegelAppliesToNumber(number/=1e3)}moment.defineLocale(\"lb\",{months:\"Januar_Februar_MÃ¤erz_AbrÃ«ll_Mee_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonndeg_MÃ©indeg_DÃ«nschdeg_MÃ«ttwoch_Donneschdeg_Freideg_Samschdeg\".split(\"_\"),weekdaysShort:\"So._MÃ©._DÃ«._MÃ«._Do._Fr._Sa.\".split(\"_\"),weekdaysMin:\"So_MÃ©_DÃ«_MÃ«_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm [Auer]\",LTS:\"H:mm:ss [Auer]\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm [Auer]\",LLLL:\"dddd, D. MMMM YYYY H:mm [Auer]\"},calendar:{sameDay:\"[Haut um] LT\",sameElse:\"L\",nextDay:\"[Muer um] LT\",nextWeek:\"dddd [um] LT\",lastDay:\"[GÃ«schter um] LT\",lastWeek:function(){switch(this.day()){case 2:case 4:return\"[Leschten] dddd [um] LT\";default:return\"[Leschte] dddd [um] LT\"}}},relativeTime:{future:function(string){return eifelerRegelAppliesToNumber(string.substr(0,string.indexOf(\" \")))?\"a \"+string:\"an \"+string},past:function(string){return eifelerRegelAppliesToNumber(string.substr(0,string.indexOf(\" \")))?\"viru \"+string:\"virun \"+string},s:\"e puer Sekonnen\",ss:\"%d Sekonnen\",m:processRelativeTime,mm:\"%d Minutten\",h:processRelativeTime,hh:\"%d Stonnen\",d:processRelativeTime,dd:\"%d Deeg\",M:processRelativeTime,MM:\"%d MÃ©int\",y:processRelativeTime,yy:\"%d Joer\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"lo\",{months:\"àº¡àº±àº‡àºàº­àº™_àºàº¸àº¡àºžàº²_àº¡àºµàº™àº²_à»€àº¡àºªàº²_àºžàº¶àº”àºªàº°àºžàº²_àº¡àº´àº–àº¸àº™àº²_àºà»àº¥àº°àºàº»àº”_àºªàº´àº‡àº«àº²_àºàº±àº™àºàº²_àº•àº¸àº¥àº²_àºžàº°àºˆàº´àº_àº—àº±àº™àº§àº²\".split(\"_\"),monthsShort:\"àº¡àº±àº‡àºàº­àº™_àºàº¸àº¡àºžàº²_àº¡àºµàº™àº²_à»€àº¡àºªàº²_àºžàº¶àº”àºªàº°àºžàº²_àº¡àº´àº–àº¸àº™àº²_àºà»àº¥àº°àºàº»àº”_àºªàº´àº‡àº«àº²_àºàº±àº™àºàº²_àº•àº¸àº¥àº²_àºžàº°àºˆàº´àº_àº—àº±àº™àº§àº²\".split(\"_\"),weekdays:\"àº­àº²àº—àº´àº”_àºˆàº±àº™_àº­àº±àº‡àº„àº²àº™_àºžàº¸àº”_àºžàº°àº«àº±àº”_àºªàº¸àº_à»€àºªàº»àº²\".split(\"_\"),weekdaysShort:\"àº—àº´àº”_àºˆàº±àº™_àº­àº±àº‡àº„àº²àº™_àºžàº¸àº”_àºžàº°àº«àº±àº”_àºªàº¸àº_à»€àºªàº»àº²\".split(\"_\"),weekdaysMin:\"àº—_àºˆ_àº­àº„_àºž_àºžàº«_àºªàº_àºª\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"àº§àº±àº™dddd D MMMM YYYY HH:mm\"},meridiemParse:/àº•àº­àº™à»€àºŠàº»à»‰àº²|àº•àº­àº™à»àº¥àº‡/,isPM:function(input){return\"àº•àº­àº™à»àº¥àº‡\"===input},meridiem:function(hour,minute,isLower){return hour&lt;12?\"àº•àº­àº™à»€àºŠàº»à»‰àº²\":\"àº•àº­àº™à»àº¥àº‡\"},calendar:{sameDay:\"[àº¡àº·à»‰àº™àºµà»‰à»€àº§àº¥àº²] LT\",nextDay:\"[àº¡àº·à»‰àº­àº·à»ˆàº™à»€àº§àº¥àº²] LT\",nextWeek:\"[àº§àº±àº™]dddd[à»œà»‰àº²à»€àº§àº¥àº²] LT\",lastDay:\"[àº¡àº·à»‰àº§àº²àº™àº™àºµà»‰à»€àº§àº¥àº²] LT\",lastWeek:\"[àº§àº±àº™]dddd[à»àº¥à»‰àº§àº™àºµà»‰à»€àº§àº¥àº²] LT\",sameElse:\"L\"},relativeTime:{future:\"àº­àºµàº %s\",past:\"%sàºœà»ˆàº²àº™àº¡àº²\",s:\"àºšà»à»ˆà»€àº—àº»à»ˆàº²à»ƒàº”àº§àº´àº™àº²àº—àºµ\",ss:\"%d àº§àº´àº™àº²àº—àºµ\",m:\"1 àº™àº²àº—àºµ\",mm:\"%d àº™àº²àº—àºµ\",h:\"1 àºŠàº»à»ˆàº§à»‚àº¡àº‡\",hh:\"%d àºŠàº»à»ˆàº§à»‚àº¡àº‡\",d:\"1 àº¡àº·à»‰\",dd:\"%d àº¡àº·à»‰\",M:\"1 à»€àº”àº·àº­àº™\",MM:\"%d à»€àº”àº·àº­àº™\",y:\"1 àº›àºµ\",yy:\"%d àº›àºµ\"},dayOfMonthOrdinalParse:/(àº—àºµà»ˆ)\\d{1,2}/,ordinal:function(number){return\"àº—àºµà»ˆ\"+number}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var units={ss:\"sekundÄ—_sekundÅ¾iÅ³_sekundes\",m:\"minutÄ—_minutÄ—s_minutÄ™\",mm:\"minutÄ—s_minuÄiÅ³_minutes\",h:\"valanda_valandos_valandÄ…\",hh:\"valandos_valandÅ³_valandas\",d:\"diena_dienos_dienÄ…\",dd:\"dienos_dienÅ³_dienas\",M:\"mÄ—nuo_mÄ—nesio_mÄ—nesÄ¯\",MM:\"mÄ—nesiai_mÄ—nesiÅ³_mÄ—nesius\",y:\"metai_metÅ³_metus\",yy:\"metai_metÅ³_metus\"};function translateSingular(number,withoutSuffix,key,isFuture){return withoutSuffix?forms(key)[0]:isFuture?forms(key)[1]:forms(key)[2]}function special(number){return number%10==0||number&gt;10&amp;&amp;number&lt;20}function forms(key){return units[key].split(\"_\")}function translate(number,withoutSuffix,key,isFuture){var result=number+\" \";return 1===number?result+translateSingular(0,withoutSuffix,key[0],isFuture):withoutSuffix?result+(special(number)?forms(key)[1]:forms(key)[0]):isFuture?result+forms(key)[1]:result+(special(number)?forms(key)[1]:forms(key)[2])}moment.defineLocale(\"lt\",{months:{format:\"sausio_vasario_kovo_balandÅ¾io_geguÅ¾Ä—s_birÅ¾elio_liepos_rugpjÅ«Äio_rugsÄ—jo_spalio_lapkriÄio_gruodÅ¾io\".split(\"_\"),standalone:\"sausis_vasaris_kovas_balandis_geguÅ¾Ä—_birÅ¾elis_liepa_rugpjÅ«tis_rugsÄ—jis_spalis_lapkritis_gruodis\".split(\"_\"),isFormat:/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/},monthsShort:\"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd\".split(\"_\"),weekdays:{format:\"sekmadienÄ¯_pirmadienÄ¯_antradienÄ¯_treÄiadienÄ¯_ketvirtadienÄ¯_penktadienÄ¯_Å¡eÅ¡tadienÄ¯\".split(\"_\"),standalone:\"sekmadienis_pirmadienis_antradienis_treÄiadienis_ketvirtadienis_penktadienis_Å¡eÅ¡tadienis\".split(\"_\"),isFormat:/dddd HH:mm/},weekdaysShort:\"Sek_Pir_Ant_Tre_Ket_Pen_Å&nbsp;eÅ¡\".split(\"_\"),weekdaysMin:\"S_P_A_T_K_Pn_Å&nbsp;\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"YYYY [m.] MMMM D [d.]\",LLL:\"YYYY [m.] MMMM D [d.], HH:mm [val.]\",LLLL:\"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]\",l:\"YYYY-MM-DD\",ll:\"YYYY [m.] MMMM D [d.]\",lll:\"YYYY [m.] MMMM D [d.], HH:mm [val.]\",llll:\"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]\"},calendar:{sameDay:\"[Å&nbsp;iandien] LT\",nextDay:\"[Rytoj] LT\",nextWeek:\"dddd LT\",lastDay:\"[Vakar] LT\",lastWeek:\"[PraÄ—jusÄ¯] dddd LT\",sameElse:\"L\"},relativeTime:{future:\"po %s\",past:\"prieÅ¡ %s\",s:function(number,withoutSuffix,key,isFuture){return withoutSuffix?\"kelios sekundÄ—s\":isFuture?\"keliÅ³ sekundÅ¾iÅ³\":\"kelias sekundes\"},ss:translate,m:translateSingular,mm:translate,h:translateSingular,hh:translate,d:translateSingular,dd:translate,M:translateSingular,MM:translate,y:translateSingular,yy:translate},dayOfMonthOrdinalParse:/\\d{1,2}-oji/,ordinal:function(number){return number+\"-oji\"},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var units={ss:\"sekundes_sekundÄ“m_sekunde_sekundes\".split(\"_\"),m:\"minÅ«tes_minÅ«tÄ“m_minÅ«te_minÅ«tes\".split(\"_\"),mm:\"minÅ«tes_minÅ«tÄ“m_minÅ«te_minÅ«tes\".split(\"_\"),h:\"stundas_stundÄm_stunda_stundas\".split(\"_\"),hh:\"stundas_stundÄm_stunda_stundas\".split(\"_\"),d:\"dienas_dienÄm_diena_dienas\".split(\"_\"),dd:\"dienas_dienÄm_diena_dienas\".split(\"_\"),M:\"mÄ“neÅ¡a_mÄ“neÅ¡iem_mÄ“nesis_mÄ“neÅ¡i\".split(\"_\"),MM:\"mÄ“neÅ¡a_mÄ“neÅ¡iem_mÄ“nesis_mÄ“neÅ¡i\".split(\"_\"),y:\"gada_gadiem_gads_gadi\".split(\"_\"),yy:\"gada_gadiem_gads_gadi\".split(\"_\")};function format(forms,number,withoutSuffix){return withoutSuffix?number%10==1&amp;&amp;number%100!=11?forms[2]:forms[3]:number%10==1&amp;&amp;number%100!=11?forms[0]:forms[1]}function relativeTimeWithPlural(number,withoutSuffix,key){return number+\" \"+format(units[key],number,withoutSuffix)}function relativeTimeWithSingular(number,withoutSuffix,key){return format(units[key],number,withoutSuffix)}moment.defineLocale(\"lv\",{months:\"janvÄris_februÄris_marts_aprÄ«lis_maijs_jÅ«nijs_jÅ«lijs_augusts_septembris_oktobris_novembris_decembris\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_mai_jÅ«n_jÅ«l_aug_sep_okt_nov_dec\".split(\"_\"),weekdays:\"svÄ“tdiena_pirmdiena_otrdiena_treÅ¡diena_ceturtdiena_piektdiena_sestdiena\".split(\"_\"),weekdaysShort:\"Sv_P_O_T_C_Pk_S\".split(\"_\"),weekdaysMin:\"Sv_P_O_T_C_Pk_S\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY.\",LL:\"YYYY. [gada] D. MMMM\",LLL:\"YYYY. [gada] D. MMMM, HH:mm\",LLLL:\"YYYY. [gada] D. MMMM, dddd, HH:mm\"},calendar:{sameDay:\"[Å&nbsp;odien pulksten] LT\",nextDay:\"[RÄ«t pulksten] LT\",nextWeek:\"dddd [pulksten] LT\",lastDay:\"[Vakar pulksten] LT\",lastWeek:\"[PagÄjuÅ¡Ä] dddd [pulksten] LT\",sameElse:\"L\"},relativeTime:{future:\"pÄ“c %s\",past:\"pirms %s\",s:function(number,withoutSuffix){return withoutSuffix?\"daÅ¾as sekundes\":\"daÅ¾Äm sekundÄ“m\"},ss:relativeTimeWithPlural,m:relativeTimeWithSingular,mm:relativeTimeWithPlural,h:relativeTimeWithSingular,hh:relativeTimeWithPlural,d:relativeTimeWithSingular,dd:relativeTimeWithPlural,M:relativeTimeWithSingular,MM:relativeTimeWithPlural,y:relativeTimeWithSingular,yy:relativeTimeWithPlural},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var translator={words:{ss:[\"sekund\",\"sekunda\",\"sekundi\"],m:[\"jedan minut\",\"jednog minuta\"],mm:[\"minut\",\"minuta\",\"minuta\"],h:[\"jedan sat\",\"jednog sata\"],hh:[\"sat\",\"sata\",\"sati\"],dd:[\"dan\",\"dana\",\"dana\"],MM:[\"mjesec\",\"mjeseca\",\"mjeseci\"],yy:[\"godina\",\"godine\",\"godina\"]},correctGrammaticalCase:function(number,wordKey){return 1===number?wordKey[0]:number&gt;=2&amp;&amp;number&lt;=4?wordKey[1]:wordKey[2]},translate:function(number,withoutSuffix,key){var wordKey=translator.words[key];return 1===key.length?withoutSuffix?wordKey[0]:wordKey[1]:number+\" \"+translator.correctGrammaticalCase(number,wordKey)}};moment.defineLocale(\"me\",{months:\"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar\".split(\"_\"),monthsShort:\"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota\".split(\"_\"),weekdaysShort:\"ned._pon._uto._sri._Äet._pet._sub.\".split(\"_\"),weekdaysMin:\"ne_po_ut_sr_Äe_pe_su\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[danas u] LT\",nextDay:\"[sjutra u] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[u] [nedjelju] [u] LT\";case 3:return\"[u] [srijedu] [u] LT\";case 6:return\"[u] [subotu] [u] LT\";case 1:case 2:case 4:case 5:return\"[u] dddd [u] LT\"}},lastDay:\"[juÄe u] LT\",lastWeek:function(){return[\"[proÅ¡le] [nedjelje] [u] LT\",\"[proÅ¡log] [ponedjeljka] [u] LT\",\"[proÅ¡log] [utorka] [u] LT\",\"[proÅ¡le] [srijede] [u] LT\",\"[proÅ¡log] [Äetvrtka] [u] LT\",\"[proÅ¡log] [petka] [u] LT\",\"[proÅ¡le] [subote] [u] LT\"][this.day()]},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"prije %s\",s:\"nekoliko sekundi\",ss:translator.translate,m:translator.translate,mm:translator.translate,h:translator.translate,hh:translator.translate,d:\"dan\",dd:translator.translate,M:\"mjesec\",MM:translator.translate,y:\"godinu\",yy:translator.translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"mi\",{months:\"Kohi-tÄte_Hui-tanguru_PoutÅ«-te-rangi_Paenga-whÄwhÄ_Haratua_Pipiri_HÅngoingoi_Here-turi-kÅkÄ_Mahuru_Whiringa-Ä-nuku_Whiringa-Ä-rangi_Hakihea\".split(\"_\"),monthsShort:\"Kohi_Hui_Pou_Pae_Hara_Pipi_HÅngoi_Here_Mahu_Whi-nu_Whi-ra_Haki\".split(\"_\"),monthsRegex:/(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,monthsShortRegex:/(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,weekdays:\"RÄtapu_Mane_TÅ«rei_Wenerei_TÄite_Paraire_HÄtarei\".split(\"_\"),weekdaysShort:\"Ta_Ma_TÅ«_We_TÄi_Pa_HÄ\".split(\"_\"),weekdaysMin:\"Ta_Ma_TÅ«_We_TÄi_Pa_HÄ\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [i] HH:mm\",LLLL:\"dddd, D MMMM YYYY [i] HH:mm\"},calendar:{sameDay:\"[i teie mahana, i] LT\",nextDay:\"[apopo i] LT\",nextWeek:\"dddd [i] LT\",lastDay:\"[inanahi i] LT\",lastWeek:\"dddd [whakamutunga i] LT\",sameElse:\"L\"},relativeTime:{future:\"i roto i %s\",past:\"%s i mua\",s:\"te hÄ“kona ruarua\",ss:\"%d hÄ“kona\",m:\"he meneti\",mm:\"%d meneti\",h:\"te haora\",hh:\"%d haora\",d:\"he ra\",dd:\"%d ra\",M:\"he marama\",MM:\"%d marama\",y:\"he tau\",yy:\"%d tau\"},dayOfMonthOrdinalParse:/\\d{1,2}Âº/,ordinal:\"%dÂº\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"mk\",{months:\"Ñ˜Ð°Ð½ÑƒÐ°Ñ€Ð¸_Ñ„ÐµÐ²Ñ€ÑƒÐ°Ñ€Ð¸_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€Ð¸Ð»_Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½Ð¸_Ñ˜ÑƒÐ»Ð¸_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ¿Ñ‚ÐµÐ¼Ð²Ñ€Ð¸_Ð¾ÐºÑ‚Ð¾Ð¼Ð²Ñ€Ð¸_Ð½Ð¾ÐµÐ¼Ð²Ñ€Ð¸_Ð´ÐµÐºÐµÐ¼Ð²Ñ€Ð¸\".split(\"_\"),monthsShort:\"Ñ˜Ð°Ð½_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½_Ñ˜ÑƒÐ»_Ð°Ð²Ð³_ÑÐµÐ¿_Ð¾ÐºÑ‚_Ð½Ð¾Ðµ_Ð´ÐµÐº\".split(\"_\"),weekdays:\"Ð½ÐµÐ´ÐµÐ»Ð°_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»Ð½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²Ñ€Ñ‚Ð¾Ðº_Ð¿ÐµÑ‚Ð¾Ðº_ÑÐ°Ð±Ð¾Ñ‚Ð°\".split(\"_\"),weekdaysShort:\"Ð½ÐµÐ´_Ð¿Ð¾Ð½_Ð²Ñ‚Ð¾_ÑÑ€Ðµ_Ñ‡ÐµÑ‚_Ð¿ÐµÑ‚_ÑÐ°Ð±\".split(\"_\"),weekdaysMin:\"Ð½e_Ð¿o_Ð²Ñ‚_ÑÑ€_Ñ‡Ðµ_Ð¿Ðµ_Ña\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"D.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY H:mm\",LLLL:\"dddd, D MMMM YYYY H:mm\"},calendar:{sameDay:\"[Ð”ÐµÐ½ÐµÑ Ð²Ð¾] LT\",nextDay:\"[Ð£Ñ‚Ñ€Ðµ Ð²Ð¾] LT\",nextWeek:\"[Ð’Ð¾] dddd [Ð²Ð¾] LT\",lastDay:\"[Ð’Ñ‡ÐµÑ€Ð° Ð²Ð¾] LT\",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return\"[Ð˜Ð·Ð¼Ð¸Ð½Ð°Ñ‚Ð°Ñ‚Ð°] dddd [Ð²Ð¾] LT\";case 1:case 2:case 4:case 5:return\"[Ð˜Ð·Ð¼Ð¸Ð½Ð°Ñ‚Ð¸Ð¾Ñ‚] dddd [Ð²Ð¾] LT\"}},sameElse:\"L\"},relativeTime:{future:\"Ð·Ð° %s\",past:\"Ð¿Ñ€ÐµÐ´ %s\",s:\"Ð½ÐµÐºÐ¾Ð»ÐºÑƒ ÑÐµÐºÑƒÐ½Ð´Ð¸\",ss:\"%d ÑÐµÐºÑƒÐ½Ð´Ð¸\",m:\"ÐµÐ´Ð½Ð° Ð¼Ð¸Ð½ÑƒÑ‚Ð°\",mm:\"%d Ð¼Ð¸Ð½ÑƒÑ‚Ð¸\",h:\"ÐµÐ´ÐµÐ½ Ñ‡Ð°Ñ\",hh:\"%d Ñ‡Ð°ÑÐ°\",d:\"ÐµÐ´ÐµÐ½ Ð´ÐµÐ½\",dd:\"%d Ð´ÐµÐ½Ð°\",M:\"ÐµÐ´ÐµÐ½ Ð¼ÐµÑÐµÑ†\",MM:\"%d Ð¼ÐµÑÐµÑ†Ð¸\",y:\"ÐµÐ´Ð½Ð° Ð³Ð¾Ð´Ð¸Ð½Ð°\",yy:\"%d Ð³Ð¾Ð´Ð¸Ð½Ð¸\"},dayOfMonthOrdinalParse:/\\d{1,2}-(ÐµÐ²|ÐµÐ½|Ñ‚Ð¸|Ð²Ð¸|Ñ€Ð¸|Ð¼Ð¸)/,ordinal:function(number){var lastDigit=number%10,last2Digits=number%100;return 0===number?number+\"-ÐµÐ²\":0===last2Digits?number+\"-ÐµÐ½\":last2Digits&gt;10&amp;&amp;last2Digits&lt;20?number+\"-Ñ‚Ð¸\":1===lastDigit?number+\"-Ð²Ð¸\":2===lastDigit?number+\"-Ñ€Ð¸\":7===lastDigit||8===lastDigit?number+\"-Ð¼Ð¸\":number+\"-Ñ‚Ð¸\"},week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"ml\",{months:\"à´œà´¨àµà´µà´°à´¿_à´«àµ†à´¬àµà´°àµà´µà´°à´¿_à´®à´¾àµ¼à´šàµà´šàµ_à´à´ªàµà´°à´¿àµ½_à´®àµ‡à´¯àµ_à´œàµ‚àµº_à´œàµ‚à´²àµˆ_à´“à´—à´¸àµà´±àµà´±àµ_à´¸àµ†à´ªàµà´±àµà´±à´‚à´¬àµ¼_à´’à´•àµà´Ÿàµ‹à´¬àµ¼_à´¨à´µà´‚à´¬àµ¼_à´¡à´¿à´¸à´‚à´¬àµ¼\".split(\"_\"),monthsShort:\"à´œà´¨àµ._à´«àµ†à´¬àµà´°àµ._à´®à´¾àµ¼._à´à´ªàµà´°à´¿._à´®àµ‡à´¯àµ_à´œàµ‚àµº_à´œàµ‚à´²àµˆ._à´“à´—._à´¸àµ†à´ªàµà´±àµà´±._à´’à´•àµà´Ÿàµ‹._à´¨à´µà´‚._à´¡à´¿à´¸à´‚.\".split(\"_\"),monthsParseExact:!0,weekdays:\"à´žà´¾à´¯à´±à´¾à´´àµà´š_à´¤à´¿à´™àµà´•à´³à´¾à´´àµà´š_à´šàµŠà´µàµà´µà´¾à´´àµà´š_à´¬àµà´§à´¨à´¾à´´àµà´š_à´µàµà´¯à´¾à´´à´¾à´´àµà´š_à´µàµ†à´³àµà´³à´¿à´¯à´¾à´´àµà´š_à´¶à´¨à´¿à´¯à´¾à´´àµà´š\".split(\"_\"),weekdaysShort:\"à´žà´¾à´¯àµ¼_à´¤à´¿à´™àµà´•àµ¾_à´šàµŠà´µàµà´µ_à´¬àµà´§àµ»_à´µàµà´¯à´¾à´´à´‚_à´µàµ†à´³àµà´³à´¿_à´¶à´¨à´¿\".split(\"_\"),weekdaysMin:\"à´žà´¾_à´¤à´¿_à´šàµŠ_à´¬àµ_à´µàµà´¯à´¾_à´µàµ†_à´¶\".split(\"_\"),longDateFormat:{LT:\"A h:mm -à´¨àµ\",LTS:\"A h:mm:ss -à´¨àµ\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm -à´¨àµ\",LLLL:\"dddd, D MMMM YYYY, A h:mm -à´¨àµ\"},calendar:{sameDay:\"[à´‡à´¨àµà´¨àµ] LT\",nextDay:\"[à´¨à´¾à´³àµ†] LT\",nextWeek:\"dddd, LT\",lastDay:\"[à´‡à´¨àµà´¨à´²àµ†] LT\",lastWeek:\"[à´•à´´à´¿à´žàµà´ž] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s à´•à´´à´¿à´žàµà´žàµ\",past:\"%s à´®àµàµ»à´ªàµ\",s:\"à´…àµ½à´ª à´¨à´¿à´®à´¿à´·à´™àµà´™àµ¾\",ss:\"%d à´¸àµ†à´•àµà´•àµ»à´¡àµ\",m:\"à´’à´°àµ à´®à´¿à´¨à´¿à´±àµà´±àµ\",mm:\"%d à´®à´¿à´¨à´¿à´±àµà´±àµ\",h:\"à´’à´°àµ à´®à´£à´¿à´•àµà´•àµ‚àµ¼\",hh:\"%d à´®à´£à´¿à´•àµà´•àµ‚àµ¼\",d:\"à´’à´°àµ à´¦à´¿à´µà´¸à´‚\",dd:\"%d à´¦à´¿à´µà´¸à´‚\",M:\"à´’à´°àµ à´®à´¾à´¸à´‚\",MM:\"%d à´®à´¾à´¸à´‚\",y:\"à´’à´°àµ à´µàµ¼à´·à´‚\",yy:\"%d à´µàµ¼à´·à´‚\"},meridiemParse:/à´°à´¾à´¤àµà´°à´¿|à´°à´¾à´µà´¿à´²àµ†|à´‰à´šàµà´š à´•à´´à´¿à´žàµà´žàµ|à´µàµˆà´•àµà´¨àµà´¨àµ‡à´°à´‚|à´°à´¾à´¤àµà´°à´¿/i,meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"à´°à´¾à´¤àµà´°à´¿\"===meridiem&amp;&amp;hour&gt;=4||\"à´‰à´šàµà´š à´•à´´à´¿à´žàµà´žàµ\"===meridiem||\"à´µàµˆà´•àµà´¨àµà´¨àµ‡à´°à´‚\"===meridiem?hour+12:hour},meridiem:function(hour,minute,isLower){return hour&lt;4?\"à´°à´¾à´¤àµà´°à´¿\":hour&lt;12?\"à´°à´¾à´µà´¿à´²àµ†\":hour&lt;17?\"à´‰à´šàµà´š à´•à´´à´¿à´žàµà´žàµ\":hour&lt;20?\"à´µàµˆà´•àµà´¨àµà´¨àµ‡à´°à´‚\":\"à´°à´¾à´¤àµà´°à´¿\"}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";function translate(number,withoutSuffix,key,isFuture){switch(key){case\"s\":return withoutSuffix?\"Ñ…ÑÐ´Ñ…ÑÐ½ ÑÐµÐºÑƒÐ½Ð´\":\"Ñ…ÑÐ´Ñ…ÑÐ½ ÑÐµÐºÑƒÐ½Ð´Ñ‹Ð½\";case\"ss\":return number+(withoutSuffix?\" ÑÐµÐºÑƒÐ½Ð´\":\" ÑÐµÐºÑƒÐ½Ð´Ñ‹Ð½\");case\"m\":case\"mm\":return number+(withoutSuffix?\" Ð¼Ð¸Ð½ÑƒÑ‚\":\" Ð¼Ð¸Ð½ÑƒÑ‚Ñ‹Ð½\");case\"h\":case\"hh\":return number+(withoutSuffix?\" Ñ†Ð°Ð³\":\" Ñ†Ð°Ð³Ð¸Ð¹Ð½\");case\"d\":case\"dd\":return number+(withoutSuffix?\" Ó©Ð´Ó©Ñ€\":\" Ó©Ð´Ñ€Ð¸Ð¹Ð½\");case\"M\":case\"MM\":return number+(withoutSuffix?\" ÑÐ°Ñ€\":\" ÑÐ°Ñ€Ñ‹Ð½\");case\"y\":case\"yy\":return number+(withoutSuffix?\" Ð¶Ð¸Ð»\":\" Ð¶Ð¸Ð»Ð¸Ð¹Ð½\");default:return number}}moment.defineLocale(\"mn\",{months:\"ÐÑÐ³Ð´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_Ð¥Ð¾Ñ‘Ñ€Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð“ÑƒÑ€Ð°Ð²Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð”Ó©Ñ€Ó©Ð²Ð´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_Ð¢Ð°Ð²Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð—ÑƒÑ€Ð³Ð°Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð”Ð¾Ð»Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_ÐÐ°Ð¹Ð¼Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð•ÑÐ´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_ÐÑ€Ð°Ð²Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_ÐÑ€Ð²Ð°Ð½ Ð½ÑÐ³Ð´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_ÐÑ€Ð²Ð°Ð½ Ñ…Ð¾Ñ‘Ñ€Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€\".split(\"_\"),monthsShort:\"1 ÑÐ°Ñ€_2 ÑÐ°Ñ€_3 ÑÐ°Ñ€_4 ÑÐ°Ñ€_5 ÑÐ°Ñ€_6 ÑÐ°Ñ€_7 ÑÐ°Ñ€_8 ÑÐ°Ñ€_9 ÑÐ°Ñ€_10 ÑÐ°Ñ€_11 ÑÐ°Ñ€_12 ÑÐ°Ñ€\".split(\"_\"),monthsParseExact:!0,weekdays:\"ÐÑÐ¼_Ð”Ð°Ð²Ð°Ð°_ÐœÑÐ³Ð¼Ð°Ñ€_Ð›Ñ…Ð°Ð³Ð²Ð°_ÐŸÒ¯Ñ€ÑÐ²_Ð‘Ð°Ð°ÑÐ°Ð½_Ð‘ÑÐ¼Ð±Ð°\".split(\"_\"),weekdaysShort:\"ÐÑÐ¼_Ð”Ð°Ð²_ÐœÑÐ³_Ð›Ñ…Ð°_ÐŸÒ¯Ñ€_Ð‘Ð°Ð°_Ð‘ÑÐ¼\".split(\"_\"),weekdaysMin:\"ÐÑ_Ð”Ð°_ÐœÑ_Ð›Ñ…_ÐŸÒ¯_Ð‘Ð°_Ð‘Ñ\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"YYYY Ð¾Ð½Ñ‹ MMMMÑ‹Ð½ D\",LLL:\"YYYY Ð¾Ð½Ñ‹ MMMMÑ‹Ð½ D HH:mm\",LLLL:\"dddd, YYYY Ð¾Ð½Ñ‹ MMMMÑ‹Ð½ D HH:mm\"},meridiemParse:/Ò®Ó¨|Ò®Ð¥/i,isPM:function(input){return\"Ò®Ð¥\"===input},meridiem:function(hour,minute,isLower){return hour&lt;12?\"Ò®Ó¨\":\"Ò®Ð¥\"},calendar:{sameDay:\"[Ó¨Ð½Ó©Ó©Ð´Ó©Ñ€] LT\",nextDay:\"[ÐœÐ°Ñ€Ð³Ð°Ð°Ñˆ] LT\",nextWeek:\"[Ð˜Ñ€ÑÑ…] dddd LT\",lastDay:\"[Ó¨Ñ‡Ð¸Ð³Ð´Ó©Ñ€] LT\",lastWeek:\"[Ó¨Ð½Ð³Ó©Ñ€ÑÓ©Ð½] dddd LT\",sameElse:\"L\"},relativeTime:{future:\"%s Ð´Ð°Ñ€Ð°Ð°\",past:\"%s Ó©Ð¼Ð½Ó©\",s:translate,ss:translate,m:translate,mm:translate,h:translate,hh:translate,d:translate,dd:translate,M:translate,MM:translate,y:translate,yy:translate},dayOfMonthOrdinalParse:/\\d{1,2} Ó©Ð´Ó©Ñ€/,ordinal:function(number,period){switch(period){case\"d\":case\"D\":case\"DDD\":return number+\" Ó©Ð´Ó©Ñ€\";default:return number}}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var symbolMap={1:\"à¥§\",2:\"à¥¨\",3:\"à¥©\",4:\"à¥ª\",5:\"à¥«\",6:\"à¥¬\",7:\"à¥­\",8:\"à¥®\",9:\"à¥¯\",0:\"à¥¦\"},numberMap={\"à¥§\":\"1\",\"à¥¨\":\"2\",\"à¥©\":\"3\",\"à¥ª\":\"4\",\"à¥«\":\"5\",\"à¥¬\":\"6\",\"à¥­\":\"7\",\"à¥®\":\"8\",\"à¥¯\":\"9\",\"à¥¦\":\"0\"};function relativeTimeMr(number,withoutSuffix,string,isFuture){var output=\"\";if(withoutSuffix)switch(string){case\"s\":output=\"à¤•à¤¾à¤¹à¥€ à¤¸à¥‡à¤•à¤‚à¤¦\";break;case\"ss\":output=\"%d à¤¸à¥‡à¤•à¤‚à¤¦\";break;case\"m\":output=\"à¤à¤• à¤®à¤¿à¤¨à¤¿à¤Ÿ\";break;case\"mm\":output=\"%d à¤®à¤¿à¤¨à¤¿à¤Ÿà¥‡\";break;case\"h\":output=\"à¤à¤• à¤¤à¤¾à¤¸\";break;case\"hh\":output=\"%d à¤¤à¤¾à¤¸\";break;case\"d\":output=\"à¤à¤• à¤¦à¤¿à¤µà¤¸\";break;case\"dd\":output=\"%d à¤¦à¤¿à¤µà¤¸\";break;case\"M\":output=\"à¤à¤• à¤®à¤¹à¤¿à¤¨à¤¾\";break;case\"MM\":output=\"%d à¤®à¤¹à¤¿à¤¨à¥‡\";break;case\"y\":output=\"à¤à¤• à¤µà¤°à¥à¤·\";break;case\"yy\":output=\"%d à¤µà¤°à¥à¤·à¥‡\"}else switch(string){case\"s\":output=\"à¤•à¤¾à¤¹à¥€ à¤¸à¥‡à¤•à¤‚à¤¦à¤¾à¤‚\";break;case\"ss\":output=\"%d à¤¸à¥‡à¤•à¤‚à¤¦à¤¾à¤‚\";break;case\"m\":output=\"à¤à¤•à¤¾ à¤®à¤¿à¤¨à¤¿à¤Ÿà¤¾\";break;case\"mm\":output=\"%d à¤®à¤¿à¤¨à¤¿à¤Ÿà¤¾à¤‚\";break;case\"h\":output=\"à¤à¤•à¤¾ à¤¤à¤¾à¤¸à¤¾\";break;case\"hh\":output=\"%d à¤¤à¤¾à¤¸à¤¾à¤‚\";break;case\"d\":output=\"à¤à¤•à¤¾ à¤¦à¤¿à¤µà¤¸à¤¾\";break;case\"dd\":output=\"%d à¤¦à¤¿à¤µà¤¸à¤¾à¤‚\";break;case\"M\":output=\"à¤à¤•à¤¾ à¤®à¤¹à¤¿à¤¨à¥à¤¯à¤¾\";break;case\"MM\":output=\"%d à¤®à¤¹à¤¿à¤¨à¥à¤¯à¤¾à¤‚\";break;case\"y\":output=\"à¤à¤•à¤¾ à¤µà¤°à¥à¤·à¤¾\";break;case\"yy\":output=\"%d à¤µà¤°à¥à¤·à¤¾à¤‚\"}return output.replace(/%d/i,number)}moment.defineLocale(\"mr\",{months:\"à¤œà¤¾à¤¨à¥‡à¤µà¤¾à¤°à¥€_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤¾à¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤à¤ªà¥à¤°à¤¿à¤²_à¤®à¥‡_à¤œà¥‚à¤¨_à¤œà¥à¤²à¥ˆ_à¤‘à¤—à¤¸à¥à¤Ÿ_à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚à¤¬à¤°_à¤‘à¤•à¥à¤Ÿà¥‹à¤¬à¤°_à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚à¤¬à¤°_à¤¡à¤¿à¤¸à¥‡à¤‚à¤¬à¤°\".split(\"_\"),monthsShort:\"à¤œà¤¾à¤¨à¥‡._à¤«à¥‡à¤¬à¥à¤°à¥._à¤®à¤¾à¤°à¥à¤š._à¤à¤ªà¥à¤°à¤¿._à¤®à¥‡._à¤œà¥‚à¤¨._à¤œà¥à¤²à¥ˆ._à¤‘à¤—._à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚._à¤‘à¤•à¥à¤Ÿà¥‹._à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚._à¤¡à¤¿à¤¸à¥‡à¤‚.\".split(\"_\"),monthsParseExact:!0,weekdays:\"à¤°à¤µà¤¿à¤µà¤¾à¤°_à¤¸à¥‹à¤®à¤µà¤¾à¤°_à¤®à¤‚à¤—à¤³à¤µà¤¾à¤°_à¤¬à¥à¤§à¤µà¤¾à¤°_à¤—à¥à¤°à¥‚à¤µà¤¾à¤°_à¤¶à¥à¤•à¥à¤°à¤µà¤¾à¤°_à¤¶à¤¨à¤¿à¤µà¤¾à¤°\".split(\"_\"),weekdaysShort:\"à¤°à¤µà¤¿_à¤¸à¥‹à¤®_à¤®à¤‚à¤—à¤³_à¤¬à¥à¤§_à¤—à¥à¤°à¥‚_à¤¶à¥à¤•à¥à¤°_à¤¶à¤¨à¤¿\".split(\"_\"),weekdaysMin:\"à¤°_à¤¸à¥‹_à¤®à¤‚_à¤¬à¥_à¤—à¥_à¤¶à¥_à¤¶\".split(\"_\"),longDateFormat:{LT:\"A h:mm à¤µà¤¾à¤œà¤¤à¤¾\",LTS:\"A h:mm:ss à¤µà¤¾à¤œà¤¤à¤¾\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm à¤µà¤¾à¤œà¤¤à¤¾\",LLLL:\"dddd, D MMMM YYYY, A h:mm à¤µà¤¾à¤œà¤¤à¤¾\"},calendar:{sameDay:\"[à¤†à¤œ] LT\",nextDay:\"[à¤‰à¤¦à¥à¤¯à¤¾] LT\",nextWeek:\"dddd, LT\",lastDay:\"[à¤•à¤¾à¤²] LT\",lastWeek:\"[à¤®à¤¾à¤—à¥€à¤²] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%sà¤®à¤§à¥à¤¯à¥‡\",past:\"%sà¤ªà¥‚à¤°à¥à¤µà¥€\",s:relativeTimeMr,ss:relativeTimeMr,m:relativeTimeMr,mm:relativeTimeMr,h:relativeTimeMr,hh:relativeTimeMr,d:relativeTimeMr,dd:relativeTimeMr,M:relativeTimeMr,MM:relativeTimeMr,y:relativeTimeMr,yy:relativeTimeMr},preparse:function(string){return string.replace(/[à¥§à¥¨à¥©à¥ªà¥«à¥¬à¥­à¥®à¥¯à¥¦]/g,(function(match){return numberMap[match]}))},postformat:function(string){return string.replace(/\\d/g,(function(match){return symbolMap[match]}))},meridiemParse:/à¤ªà¤¹à¤¾à¤Ÿà¥‡|à¤¸à¤•à¤¾à¤³à¥€|à¤¦à¥à¤ªà¤¾à¤°à¥€|à¤¸à¤¾à¤¯à¤‚à¤•à¤¾à¤³à¥€|à¤°à¤¾à¤¤à¥à¤°à¥€/,meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"à¤ªà¤¹à¤¾à¤Ÿà¥‡\"===meridiem||\"à¤¸à¤•à¤¾à¤³à¥€\"===meridiem?hour:\"à¤¦à¥à¤ªà¤¾à¤°à¥€\"===meridiem||\"à¤¸à¤¾à¤¯à¤‚à¤•à¤¾à¤³à¥€\"===meridiem||\"à¤°à¤¾à¤¤à¥à¤°à¥€\"===meridiem?hour&gt;=12?hour:hour+12:void 0},meridiem:function(hour,minute,isLower){return hour&gt;=0&amp;&amp;hour&lt;6?\"à¤ªà¤¹à¤¾à¤Ÿà¥‡\":hour&lt;12?\"à¤¸à¤•à¤¾à¤³à¥€\":hour&lt;17?\"à¤¦à¥à¤ªà¤¾à¤°à¥€\":hour&lt;20?\"à¤¸à¤¾à¤¯à¤‚à¤•à¤¾à¤³à¥€\":\"à¤°à¤¾à¤¤à¥à¤°à¥€\"},week:{dow:0,doy:6}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"ms\",{months:\"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember\".split(\"_\"),monthsShort:\"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis\".split(\"_\"),weekdays:\"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu\".split(\"_\"),weekdaysShort:\"Ahd_Isn_Sel_Rab_Kha_Jum_Sab\".split(\"_\"),weekdaysMin:\"Ah_Is_Sl_Rb_Km_Jm_Sb\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [pukul] HH.mm\",LLLL:\"dddd, D MMMM YYYY [pukul] HH.mm\"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"pagi\"===meridiem?hour:\"tengahari\"===meridiem?hour&gt;=11?hour:hour+12:\"petang\"===meridiem||\"malam\"===meridiem?hour+12:void 0},meridiem:function(hours,minutes,isLower){return hours&lt;11?\"pagi\":hours&lt;15?\"tengahari\":hours&lt;19?\"petang\":\"malam\"},calendar:{sameDay:\"[Hari ini pukul] LT\",nextDay:\"[Esok pukul] LT\",nextWeek:\"dddd [pukul] LT\",lastDay:\"[Kelmarin pukul] LT\",lastWeek:\"dddd [lepas pukul] LT\",sameElse:\"L\"},relativeTime:{future:\"dalam %s\",past:\"%s yang lepas\",s:\"beberapa saat\",ss:\"%d saat\",m:\"seminit\",mm:\"%d minit\",h:\"sejam\",hh:\"%d jam\",d:\"sehari\",dd:\"%d hari\",M:\"sebulan\",MM:\"%d bulan\",y:\"setahun\",yy:\"%d tahun\"},week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"ms-my\",{months:\"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember\".split(\"_\"),monthsShort:\"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis\".split(\"_\"),weekdays:\"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu\".split(\"_\"),weekdaysShort:\"Ahd_Isn_Sel_Rab_Kha_Jum_Sab\".split(\"_\"),weekdaysMin:\"Ah_Is_Sl_Rb_Km_Jm_Sb\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [pukul] HH.mm\",LLLL:\"dddd, D MMMM YYYY [pukul] HH.mm\"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"pagi\"===meridiem?hour:\"tengahari\"===meridiem?hour&gt;=11?hour:hour+12:\"petang\"===meridiem||\"malam\"===meridiem?hour+12:void 0},meridiem:function(hours,minutes,isLower){return hours&lt;11?\"pagi\":hours&lt;15?\"tengahari\":hours&lt;19?\"petang\":\"malam\"},calendar:{sameDay:\"[Hari ini pukul] LT\",nextDay:\"[Esok pukul] LT\",nextWeek:\"dddd [pukul] LT\",lastDay:\"[Kelmarin pukul] LT\",lastWeek:\"dddd [lepas pukul] LT\",sameElse:\"L\"},relativeTime:{future:\"dalam %s\",past:\"%s yang lepas\",s:\"beberapa saat\",ss:\"%d saat\",m:\"seminit\",mm:\"%d minit\",h:\"sejam\",hh:\"%d jam\",d:\"sehari\",dd:\"%d hari\",M:\"sebulan\",MM:\"%d bulan\",y:\"setahun\",yy:\"%d tahun\"},week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"mt\",{months:\"Jannar_Frar_Marzu_April_Mejju_Ä&nbsp;unju_Lulju_Awwissu_Settembru_Ottubru_Novembru_DiÄ‹embru\".split(\"_\"),monthsShort:\"Jan_Fra_Mar_Apr_Mej_Ä&nbsp;un_Lul_Aww_Set_Ott_Nov_DiÄ‹\".split(\"_\"),weekdays:\"Il-Ä¦add_It-Tnejn_It-Tlieta_L-ErbgÄ§a_Il-Ä¦amis_Il-Ä&nbsp;imgÄ§a_Is-Sibt\".split(\"_\"),weekdaysShort:\"Ä¦ad_Tne_Tli_Erb_Ä¦am_Ä&nbsp;im_Sib\".split(\"_\"),weekdaysMin:\"Ä¦a_Tn_Tl_Er_Ä¦a_Ä&nbsp;i_Si\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Illum fil-]LT\",nextDay:\"[GÄ§ada fil-]LT\",nextWeek:\"dddd [fil-]LT\",lastDay:\"[Il-bieraÄ§ fil-]LT\",lastWeek:\"dddd [li gÄ§adda] [fil-]LT\",sameElse:\"L\"},relativeTime:{future:\"fâ€™ %s\",past:\"%s ilu\",s:\"ftit sekondi\",ss:\"%d sekondi\",m:\"minuta\",mm:\"%d minuti\",h:\"siegÄ§a\",hh:\"%d siegÄ§at\",d:\"Ä¡urnata\",dd:\"%d Ä¡ranet\",M:\"xahar\",MM:\"%d xhur\",y:\"sena\",yy:\"%d sni\"},dayOfMonthOrdinalParse:/\\d{1,2}Âº/,ordinal:\"%dÂº\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var symbolMap={1:\"á\",2:\"á‚\",3:\"áƒ\",4:\"á„\",5:\"á…\",6:\"á†\",7:\"á‡\",8:\"áˆ\",9:\"á‰\",0:\"á€\"},numberMap={\"á\":\"1\",\"á‚\":\"2\",\"áƒ\":\"3\",\"á„\":\"4\",\"á…\":\"5\",\"á†\":\"6\",\"á‡\":\"7\",\"áˆ\":\"8\",\"á‰\":\"9\",\"á€\":\"0\"};moment.defineLocale(\"my\",{months:\"á€‡á€”á€ºá€”á€á€«á€›á€®_á€–á€±á€–á€±á€¬á€ºá€á€«á€›á€®_á€™á€á€º_á€§á€•á€¼á€®_á€™á€±_á€‡á€½á€”á€º_á€‡á€°á€œá€­á€¯á€„á€º_á€žá€¼á€‚á€¯á€á€º_á€…á€€á€ºá€á€„á€ºá€˜á€¬_á€¡á€±á€¬á€€á€ºá€á€­á€¯á€˜á€¬_á€”á€­á€¯á€á€„á€ºá€˜á€¬_á€’á€®á€‡á€„á€ºá€˜á€¬\".split(\"_\"),monthsShort:\"á€‡á€”á€º_á€–á€±_á€™á€á€º_á€•á€¼á€®_á€™á€±_á€‡á€½á€”á€º_á€œá€­á€¯á€„á€º_á€žá€¼_á€…á€€á€º_á€¡á€±á€¬á€€á€º_á€”á€­á€¯_á€’á€®\".split(\"_\"),weekdays:\"á€á€”á€„á€ºá€¹á€‚á€”á€½á€±_á€á€”á€„á€ºá€¹á€œá€¬_á€¡á€„á€ºá€¹á€‚á€«_á€—á€¯á€’á€¹á€“á€Ÿá€°á€¸_á€€á€¼á€¬á€žá€•á€á€±á€¸_á€žá€±á€¬á€€á€¼á€¬_á€…á€”á€±\".split(\"_\"),weekdaysShort:\"á€”á€½á€±_á€œá€¬_á€‚á€«_á€Ÿá€°á€¸_á€€á€¼á€¬_á€žá€±á€¬_á€”á€±\".split(\"_\"),weekdaysMin:\"á€”á€½á€±_á€œá€¬_á€‚á€«_á€Ÿá€°á€¸_á€€á€¼á€¬_á€žá€±á€¬_á€”á€±\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[á€šá€”á€±.] LT [á€™á€¾á€¬]\",nextDay:\"[á€™á€”á€€á€ºá€–á€¼á€”á€º] LT [á€™á€¾á€¬]\",nextWeek:\"dddd LT [á€™á€¾á€¬]\",lastDay:\"[á€™á€”á€±.á€€] LT [á€™á€¾á€¬]\",lastWeek:\"[á€•á€¼á€®á€¸á€á€²á€·á€žá€±á€¬] dddd LT [á€™á€¾á€¬]\",sameElse:\"L\"},relativeTime:{future:\"á€œá€¬á€™á€Šá€ºá€· %s á€™á€¾á€¬\",past:\"á€œá€½á€”á€ºá€á€²á€·á€žá€±á€¬ %s á€€\",s:\"á€…á€€á€¹á€€á€”á€º.á€¡á€”á€Šá€ºá€¸á€„á€šá€º\",ss:\"%d á€…á€€á€¹á€€á€”á€·á€º\",m:\"á€á€…á€ºá€™á€­á€”á€…á€º\",mm:\"%d á€™á€­á€”á€…á€º\",h:\"á€á€…á€ºá€”á€¬á€›á€®\",hh:\"%d á€”á€¬á€›á€®\",d:\"á€á€…á€ºá€›á€€á€º\",dd:\"%d á€›á€€á€º\",M:\"á€á€…á€ºá€œ\",MM:\"%d á€œ\",y:\"á€á€…á€ºá€”á€¾á€…á€º\",yy:\"%d á€”á€¾á€…á€º\"},preparse:function(string){return string.replace(/[áá‚áƒá„á…á†á‡áˆá‰á€]/g,(function(match){return numberMap[match]}))},postformat:function(string){return string.replace(/\\d/g,(function(match){return symbolMap[match]}))},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"nb\",{months:\"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember\".split(\"_\"),monthsShort:\"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.\".split(\"_\"),monthsParseExact:!0,weekdays:\"sÃ¸ndag_mandag_tirsdag_onsdag_torsdag_fredag_lÃ¸rdag\".split(\"_\"),weekdaysShort:\"sÃ¸._ma._ti._on._to._fr._lÃ¸.\".split(\"_\"),weekdaysMin:\"sÃ¸_ma_ti_on_to_fr_lÃ¸\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY [kl.] HH:mm\",LLLL:\"dddd D. MMMM YYYY [kl.] HH:mm\"},calendar:{sameDay:\"[i dag kl.] LT\",nextDay:\"[i morgen kl.] LT\",nextWeek:\"dddd [kl.] LT\",lastDay:\"[i gÃ¥r kl.] LT\",lastWeek:\"[forrige] dddd [kl.] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"%s siden\",s:\"noen sekunder\",ss:\"%d sekunder\",m:\"ett minutt\",mm:\"%d minutter\",h:\"en time\",hh:\"%d timer\",d:\"en dag\",dd:\"%d dager\",w:\"en uke\",ww:\"%d uker\",M:\"en mÃ¥ned\",MM:\"%d mÃ¥neder\",y:\"ett Ã¥r\",yy:\"%d Ã¥r\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var symbolMap={1:\"à¥§\",2:\"à¥¨\",3:\"à¥©\",4:\"à¥ª\",5:\"à¥«\",6:\"à¥¬\",7:\"à¥­\",8:\"à¥®\",9:\"à¥¯\",0:\"à¥¦\"},numberMap={\"à¥§\":\"1\",\"à¥¨\":\"2\",\"à¥©\":\"3\",\"à¥ª\":\"4\",\"à¥«\":\"5\",\"à¥¬\":\"6\",\"à¥­\":\"7\",\"à¥®\":\"8\",\"à¥¯\":\"9\",\"à¥¦\":\"0\"};moment.defineLocale(\"ne\",{months:\"à¤œà¤¨à¤µà¤°à¥€_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¤¿à¤²_à¤®à¤ˆ_à¤œà¥à¤¨_à¤œà¥à¤²à¤¾à¤ˆ_à¤…à¤—à¤·à¥à¤Ÿ_à¤¸à¥‡à¤ªà¥à¤Ÿà¥‡à¤®à¥à¤¬à¤°_à¤…à¤•à¥à¤Ÿà¥‹à¤¬à¤°_à¤¨à¥‹à¤­à¥‡à¤®à¥à¤¬à¤°_à¤¡à¤¿à¤¸à¥‡à¤®à¥à¤¬à¤°\".split(\"_\"),monthsShort:\"à¤œà¤¨._à¤«à¥‡à¤¬à¥à¤°à¥._à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¤¿._à¤®à¤ˆ_à¤œà¥à¤¨_à¤œà¥à¤²à¤¾à¤ˆ._à¤…à¤—._à¤¸à¥‡à¤ªà¥à¤Ÿ._à¤…à¤•à¥à¤Ÿà¥‹._à¤¨à¥‹à¤­à¥‡._à¤¡à¤¿à¤¸à¥‡.\".split(\"_\"),monthsParseExact:!0,weekdays:\"à¤†à¤‡à¤¤à¤¬à¤¾à¤°_à¤¸à¥‹à¤®à¤¬à¤¾à¤°_à¤®à¤™à¥à¤—à¤²à¤¬à¤¾à¤°_à¤¬à¥à¤§à¤¬à¤¾à¤°_à¤¬à¤¿à¤¹à¤¿à¤¬à¤¾à¤°_à¤¶à¥à¤•à¥à¤°à¤¬à¤¾à¤°_à¤¶à¤¨à¤¿à¤¬à¤¾à¤°\".split(\"_\"),weekdaysShort:\"à¤†à¤‡à¤¤._à¤¸à¥‹à¤®._à¤®à¤™à¥à¤—à¤²._à¤¬à¥à¤§._à¤¬à¤¿à¤¹à¤¿._à¤¶à¥à¤•à¥à¤°._à¤¶à¤¨à¤¿.\".split(\"_\"),weekdaysMin:\"à¤†._à¤¸à¥‹._à¤®à¤‚._à¤¬à¥._à¤¬à¤¿._à¤¶à¥._à¤¶.\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"Aà¤•à¥‹ h:mm à¤¬à¤œà¥‡\",LTS:\"Aà¤•à¥‹ h:mm:ss à¤¬à¤œà¥‡\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, Aà¤•à¥‹ h:mm à¤¬à¤œà¥‡\",LLLL:\"dddd, D MMMM YYYY, Aà¤•à¥‹ h:mm à¤¬à¤œà¥‡\"},preparse:function(string){return string.replace(/[à¥§à¥¨à¥©à¥ªà¥«à¥¬à¥­à¥®à¥¯à¥¦]/g,(function(match){return numberMap[match]}))},postformat:function(string){return string.replace(/\\d/g,(function(match){return symbolMap[match]}))},meridiemParse:/à¤°à¤¾à¤¤à¤¿|à¤¬à¤¿à¤¹à¤¾à¤¨|à¤¦à¤¿à¤‰à¤à¤¸à¥‹|à¤¸à¤¾à¤à¤/,meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"à¤°à¤¾à¤¤à¤¿\"===meridiem?hour&lt;4?hour:hour+12:\"à¤¬à¤¿à¤¹à¤¾à¤¨\"===meridiem?hour:\"à¤¦à¤¿à¤‰à¤à¤¸à¥‹\"===meridiem?hour&gt;=10?hour:hour+12:\"à¤¸à¤¾à¤à¤\"===meridiem?hour+12:void 0},meridiem:function(hour,minute,isLower){return hour&lt;3?\"à¤°à¤¾à¤¤à¤¿\":hour&lt;12?\"à¤¬à¤¿à¤¹à¤¾à¤¨\":hour&lt;16?\"à¤¦à¤¿à¤‰à¤à¤¸à¥‹\":hour&lt;20?\"à¤¸à¤¾à¤à¤\":\"à¤°à¤¾à¤¤à¤¿\"},calendar:{sameDay:\"[à¤†à¤œ] LT\",nextDay:\"[à¤­à¥‹à¤²à¤¿] LT\",nextWeek:\"[à¤†à¤‰à¤à¤¦à¥‹] dddd[,] LT\",lastDay:\"[à¤¹à¤¿à¤œà¥‹] LT\",lastWeek:\"[à¤—à¤à¤•à¥‹] dddd[,] LT\",sameElse:\"L\"},relativeTime:{future:\"%sà¤®à¤¾\",past:\"%s à¤…à¤—à¤¾à¤¡à¤¿\",s:\"à¤•à¥‡à¤¹à¥€ à¤•à¥à¤·à¤£\",ss:\"%d à¤¸à¥‡à¤•à¥‡à¤£à¥à¤¡\",m:\"à¤à¤• à¤®à¤¿à¤¨à¥‡à¤Ÿ\",mm:\"%d à¤®à¤¿à¤¨à¥‡à¤Ÿ\",h:\"à¤à¤• à¤˜à¤£à¥à¤Ÿà¤¾\",hh:\"%d à¤˜à¤£à¥à¤Ÿà¤¾\",d:\"à¤à¤• à¤¦à¤¿à¤¨\",dd:\"%d à¤¦à¤¿à¤¨\",M:\"à¤à¤• à¤®à¤¹à¤¿à¤¨à¤¾\",MM:\"%d à¤®à¤¹à¤¿à¤¨à¤¾\",y:\"à¤à¤• à¤¬à¤°à¥à¤·\",yy:\"%d à¤¬à¤°à¥à¤·\"},week:{dow:0,doy:6}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var monthsShortWithDots=\"jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.\".split(\"_\"),monthsShortWithoutDots=\"jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),monthsParse=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],monthsRegex=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;moment.defineLocale(\"nl\",{months:\"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december\".split(\"_\"),monthsShort:function(m,format){return m?/-MMM-/.test(format)?monthsShortWithoutDots[m.month()]:monthsShortWithDots[m.month()]:monthsShortWithDots},monthsRegex:monthsRegex,monthsShortRegex:monthsRegex,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,monthsParse:monthsParse,longMonthsParse:monthsParse,shortMonthsParse:monthsParse,weekdays:\"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag\".split(\"_\"),weekdaysShort:\"zo._ma._di._wo._do._vr._za.\".split(\"_\"),weekdaysMin:\"zo_ma_di_wo_do_vr_za\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD-MM-YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[vandaag om] LT\",nextDay:\"[morgen om] LT\",nextWeek:\"dddd [om] LT\",lastDay:\"[gisteren om] LT\",lastWeek:\"[afgelopen] dddd [om] LT\",sameElse:\"L\"},relativeTime:{future:\"over %s\",past:\"%s geleden\",s:\"een paar seconden\",ss:\"%d seconden\",m:\"Ã©Ã©n minuut\",mm:\"%d minuten\",h:\"Ã©Ã©n uur\",hh:\"%d uur\",d:\"Ã©Ã©n dag\",dd:\"%d dagen\",w:\"Ã©Ã©n week\",ww:\"%d weken\",M:\"Ã©Ã©n maand\",MM:\"%d maanden\",y:\"Ã©Ã©n jaar\",yy:\"%d jaar\"},dayOfMonthOrdinalParse:/\\d{1,2}(ste|de)/,ordinal:function(number){return number+(1===number||8===number||number&gt;=20?\"ste\":\"de\")},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var monthsShortWithDots=\"jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.\".split(\"_\"),monthsShortWithoutDots=\"jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),monthsParse=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],monthsRegex=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;moment.defineLocale(\"nl-be\",{months:\"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december\".split(\"_\"),monthsShort:function(m,format){return m?/-MMM-/.test(format)?monthsShortWithoutDots[m.month()]:monthsShortWithDots[m.month()]:monthsShortWithDots},monthsRegex:monthsRegex,monthsShortRegex:monthsRegex,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,monthsParse:monthsParse,longMonthsParse:monthsParse,shortMonthsParse:monthsParse,weekdays:\"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag\".split(\"_\"),weekdaysShort:\"zo._ma._di._wo._do._vr._za.\".split(\"_\"),weekdaysMin:\"zo_ma_di_wo_do_vr_za\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[vandaag om] LT\",nextDay:\"[morgen om] LT\",nextWeek:\"dddd [om] LT\",lastDay:\"[gisteren om] LT\",lastWeek:\"[afgelopen] dddd [om] LT\",sameElse:\"L\"},relativeTime:{future:\"over %s\",past:\"%s geleden\",s:\"een paar seconden\",ss:\"%d seconden\",m:\"Ã©Ã©n minuut\",mm:\"%d minuten\",h:\"Ã©Ã©n uur\",hh:\"%d uur\",d:\"Ã©Ã©n dag\",dd:\"%d dagen\",M:\"Ã©Ã©n maand\",MM:\"%d maanden\",y:\"Ã©Ã©n jaar\",yy:\"%d jaar\"},dayOfMonthOrdinalParse:/\\d{1,2}(ste|de)/,ordinal:function(number){return number+(1===number||8===number||number&gt;=20?\"ste\":\"de\")},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"nn\",{months:\"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember\".split(\"_\"),monthsShort:\"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.\".split(\"_\"),monthsParseExact:!0,weekdays:\"sundag_mÃ¥ndag_tysdag_onsdag_torsdag_fredag_laurdag\".split(\"_\"),weekdaysShort:\"su._mÃ¥._ty._on._to._fr._lau.\".split(\"_\"),weekdaysMin:\"su_mÃ¥_ty_on_to_fr_la\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY [kl.] H:mm\",LLLL:\"dddd D. MMMM YYYY [kl.] HH:mm\"},calendar:{sameDay:\"[I dag klokka] LT\",nextDay:\"[I morgon klokka] LT\",nextWeek:\"dddd [klokka] LT\",lastDay:\"[I gÃ¥r klokka] LT\",lastWeek:\"[FÃ¸regÃ¥ande] dddd [klokka] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"%s sidan\",s:\"nokre sekund\",ss:\"%d sekund\",m:\"eit minutt\",mm:\"%d minutt\",h:\"ein time\",hh:\"%d timar\",d:\"ein dag\",dd:\"%d dagar\",w:\"ei veke\",ww:\"%d veker\",M:\"ein mÃ¥nad\",MM:\"%d mÃ¥nader\",y:\"eit Ã¥r\",yy:\"%d Ã¥r\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"oc-lnc\",{months:{standalone:\"geniÃ¨r_febriÃ¨r_marÃ§_abril_mai_junh_julhet_agost_setembre_octÃ²bre_novembre_decembre\".split(\"_\"),format:\"de geniÃ¨r_de febriÃ¨r_de marÃ§_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octÃ²bre_de novembre_de decembre\".split(\"_\"),isFormat:/D[oD]?(\\s)+MMMM/},monthsShort:\"gen._febr._marÃ§_abr._mai_junh_julh._ago._set._oct._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"dimenge_diluns_dimars_dimÃ¨cres_dijÃ²us_divendres_dissabte\".split(\"_\"),weekdaysShort:\"dg._dl._dm._dc._dj._dv._ds.\".split(\"_\"),weekdaysMin:\"dg_dl_dm_dc_dj_dv_ds\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM [de] YYYY\",ll:\"D MMM YYYY\",LLL:\"D MMMM [de] YYYY [a] H:mm\",lll:\"D MMM YYYY, H:mm\",LLLL:\"dddd D MMMM [de] YYYY [a] H:mm\",llll:\"ddd D MMM YYYY, H:mm\"},calendar:{sameDay:\"[uÃ¨i a] LT\",nextDay:\"[deman a] LT\",nextWeek:\"dddd [a] LT\",lastDay:\"[iÃ¨r a] LT\",lastWeek:\"dddd [passat a] LT\",sameElse:\"L\"},relativeTime:{future:\"d'aquÃ­ %s\",past:\"fa %s\",s:\"unas segondas\",ss:\"%d segondas\",m:\"una minuta\",mm:\"%d minutas\",h:\"una ora\",hh:\"%d oras\",d:\"un jorn\",dd:\"%d jorns\",M:\"un mes\",MM:\"%d meses\",y:\"un an\",yy:\"%d ans\"},dayOfMonthOrdinalParse:/\\d{1,2}(r|n|t|Ã¨|a)/,ordinal:function(number,period){var output=1===number?\"r\":2===number?\"n\":3===number?\"r\":4===number?\"t\":\"Ã¨\";return\"w\"!==period&amp;&amp;\"W\"!==period||(output=\"a\"),number+output},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var symbolMap={1:\"à©§\",2:\"à©¨\",3:\"à©©\",4:\"à©ª\",5:\"à©«\",6:\"à©¬\",7:\"à©­\",8:\"à©®\",9:\"à©¯\",0:\"à©¦\"},numberMap={\"à©§\":\"1\",\"à©¨\":\"2\",\"à©©\":\"3\",\"à©ª\":\"4\",\"à©«\":\"5\",\"à©¬\":\"6\",\"à©­\":\"7\",\"à©®\":\"8\",\"à©¯\":\"9\",\"à©¦\":\"0\"};moment.defineLocale(\"pa-in\",{months:\"à¨œà¨¨à¨µà¨°à©€_à¨«à¨¼à¨°à¨µà¨°à©€_à¨®à¨¾à¨°à¨š_à¨…à¨ªà©à¨°à©ˆà¨²_à¨®à¨ˆ_à¨œà©‚à¨¨_à¨œà©à¨²à¨¾à¨ˆ_à¨…à¨—à¨¸à¨¤_à¨¸à¨¤à©°à¨¬à¨°_à¨…à¨•à¨¤à©‚à¨¬à¨°_à¨¨à¨µà©°à¨¬à¨°_à¨¦à¨¸à©°à¨¬à¨°\".split(\"_\"),monthsShort:\"à¨œà¨¨à¨µà¨°à©€_à¨«à¨¼à¨°à¨µà¨°à©€_à¨®à¨¾à¨°à¨š_à¨…à¨ªà©à¨°à©ˆà¨²_à¨®à¨ˆ_à¨œà©‚à¨¨_à¨œà©à¨²à¨¾à¨ˆ_à¨…à¨—à¨¸à¨¤_à¨¸à¨¤à©°à¨¬à¨°_à¨…à¨•à¨¤à©‚à¨¬à¨°_à¨¨à¨µà©°à¨¬à¨°_à¨¦à¨¸à©°à¨¬à¨°\".split(\"_\"),weekdays:\"à¨à¨¤à¨µà¨¾à¨°_à¨¸à©‹à¨®à¨µà¨¾à¨°_à¨®à©°à¨—à¨²à¨µà¨¾à¨°_à¨¬à©à¨§à¨µà¨¾à¨°_à¨µà©€à¨°à¨µà¨¾à¨°_à¨¸à¨¼à©à©±à¨•à¨°à¨µà¨¾à¨°_à¨¸à¨¼à¨¨à©€à¨šà¨°à¨µà¨¾à¨°\".split(\"_\"),weekdaysShort:\"à¨à¨¤_à¨¸à©‹à¨®_à¨®à©°à¨—à¨²_à¨¬à©à¨§_à¨µà©€à¨°_à¨¸à¨¼à©à¨•à¨°_à¨¸à¨¼à¨¨à©€\".split(\"_\"),weekdaysMin:\"à¨à¨¤_à¨¸à©‹à¨®_à¨®à©°à¨—à¨²_à¨¬à©à¨§_à¨µà©€à¨°_à¨¸à¨¼à©à¨•à¨°_à¨¸à¨¼à¨¨à©€\".split(\"_\"),longDateFormat:{LT:\"A h:mm à¨µà¨œà©‡\",LTS:\"A h:mm:ss à¨µà¨œà©‡\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm à¨µà¨œà©‡\",LLLL:\"dddd, D MMMM YYYY, A h:mm à¨µà¨œà©‡\"},calendar:{sameDay:\"[à¨…à¨œ] LT\",nextDay:\"[à¨•à¨²] LT\",nextWeek:\"[à¨…à¨—à¨²à¨¾] dddd, LT\",lastDay:\"[à¨•à¨²] LT\",lastWeek:\"[à¨ªà¨¿à¨›à¨²à©‡] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s à¨µà¨¿à©±à¨š\",past:\"%s à¨ªà¨¿à¨›à¨²à©‡\",s:\"à¨•à©à¨ à¨¸à¨•à¨¿à©°à¨Ÿ\",ss:\"%d à¨¸à¨•à¨¿à©°à¨Ÿ\",m:\"à¨‡à¨• à¨®à¨¿à©°à¨Ÿ\",mm:\"%d à¨®à¨¿à©°à¨Ÿ\",h:\"à¨‡à©±à¨• à¨˜à©°à¨Ÿà¨¾\",hh:\"%d à¨˜à©°à¨Ÿà©‡\",d:\"à¨‡à©±à¨• à¨¦à¨¿à¨¨\",dd:\"%d à¨¦à¨¿à¨¨\",M:\"à¨‡à©±à¨• à¨®à¨¹à©€à¨¨à¨¾\",MM:\"%d à¨®à¨¹à©€à¨¨à©‡\",y:\"à¨‡à©±à¨• à¨¸à¨¾à¨²\",yy:\"%d à¨¸à¨¾à¨²\"},preparse:function(string){return string.replace(/[à©§à©¨à©©à©ªà©«à©¬à©­à©®à©¯à©¦]/g,(function(match){return numberMap[match]}))},postformat:function(string){return string.replace(/\\d/g,(function(match){return symbolMap[match]}))},meridiemParse:/à¨°à¨¾à¨¤|à¨¸à¨µà©‡à¨°|à¨¦à©à¨ªà¨¹à¨¿à¨°|à¨¸à¨¼à¨¾à¨®/,meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"à¨°à¨¾à¨¤\"===meridiem?hour&lt;4?hour:hour+12:\"à¨¸à¨µà©‡à¨°\"===meridiem?hour:\"à¨¦à©à¨ªà¨¹à¨¿à¨°\"===meridiem?hour&gt;=10?hour:hour+12:\"à¨¸à¨¼à¨¾à¨®\"===meridiem?hour+12:void 0},meridiem:function(hour,minute,isLower){return hour&lt;4?\"à¨°à¨¾à¨¤\":hour&lt;10?\"à¨¸à¨µà©‡à¨°\":hour&lt;17?\"à¨¦à©à¨ªà¨¹à¨¿à¨°\":hour&lt;20?\"à¨¸à¨¼à¨¾à¨®\":\"à¨°à¨¾à¨¤\"},week:{dow:0,doy:6}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var monthsNominative=\"styczeÅ„_luty_marzec_kwiecieÅ„_maj_czerwiec_lipiec_sierpieÅ„_wrzesieÅ„_paÅºdziernik_listopad_grudzieÅ„\".split(\"_\"),monthsSubjective=\"stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrzeÅ›nia_paÅºdziernika_listopada_grudnia\".split(\"_\"),monthsParse=[/^sty/i,/^lut/i,/^mar/i,/^kwi/i,/^maj/i,/^cze/i,/^lip/i,/^sie/i,/^wrz/i,/^paÅº/i,/^lis/i,/^gru/i];function plural(n){return n%10&lt;5&amp;&amp;n%10&gt;1&amp;&amp;~~(n/10)%10!=1}function translate(number,withoutSuffix,key){var result=number+\" \";switch(key){case\"ss\":return result+(plural(number)?\"sekundy\":\"sekund\");case\"m\":return withoutSuffix?\"minuta\":\"minutÄ™\";case\"mm\":return result+(plural(number)?\"minuty\":\"minut\");case\"h\":return withoutSuffix?\"godzina\":\"godzinÄ™\";case\"hh\":return result+(plural(number)?\"godziny\":\"godzin\");case\"ww\":return result+(plural(number)?\"tygodnie\":\"tygodni\");case\"MM\":return result+(plural(number)?\"miesiÄ…ce\":\"miesiÄ™cy\");case\"yy\":return result+(plural(number)?\"lata\":\"lat\")}}moment.defineLocale(\"pl\",{months:function(momentToFormat,format){return momentToFormat?/D MMMM/.test(format)?monthsSubjective[momentToFormat.month()]:monthsNominative[momentToFormat.month()]:monthsNominative},monthsShort:\"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paÅº_lis_gru\".split(\"_\"),monthsParse:monthsParse,longMonthsParse:monthsParse,shortMonthsParse:monthsParse,weekdays:\"niedziela_poniedziaÅ‚ek_wtorek_Å›roda_czwartek_piÄ…tek_sobota\".split(\"_\"),weekdaysShort:\"ndz_pon_wt_Å›r_czw_pt_sob\".split(\"_\"),weekdaysMin:\"Nd_Pn_Wt_Åšr_Cz_Pt_So\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[DziÅ› o] LT\",nextDay:\"[Jutro o] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[W niedzielÄ™ o] LT\";case 2:return\"[We wtorek o] LT\";case 3:return\"[W Å›rodÄ™ o] LT\";case 6:return\"[W sobotÄ™ o] LT\";default:return\"[W] dddd [o] LT\"}},lastDay:\"[Wczoraj o] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[W zeszÅ‚Ä… niedzielÄ™ o] LT\";case 3:return\"[W zeszÅ‚Ä… Å›rodÄ™ o] LT\";case 6:return\"[W zeszÅ‚Ä… sobotÄ™ o] LT\";default:return\"[W zeszÅ‚y] dddd [o] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"%s temu\",s:\"kilka sekund\",ss:translate,m:translate,mm:translate,h:translate,hh:translate,d:\"1 dzieÅ„\",dd:\"%d dni\",w:\"tydzieÅ„\",ww:translate,M:\"miesiÄ…c\",MM:translate,y:\"rok\",yy:translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"pt\",{months:\"janeiro_fevereiro_marÃ§o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro\".split(\"_\"),monthsShort:\"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez\".split(\"_\"),weekdays:\"Domingo_Segunda-feira_TerÃ§a-feira_Quarta-feira_Quinta-feira_Sexta-feira_SÃ¡bado\".split(\"_\"),weekdaysShort:\"Dom_Seg_Ter_Qua_Qui_Sex_SÃ¡b\".split(\"_\"),weekdaysMin:\"Do_2Âª_3Âª_4Âª_5Âª_6Âª_SÃ¡\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY HH:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY HH:mm\"},calendar:{sameDay:\"[Hoje Ã&nbsp;s] LT\",nextDay:\"[AmanhÃ£ Ã&nbsp;s] LT\",nextWeek:\"dddd [Ã&nbsp;s] LT\",lastDay:\"[Ontem Ã&nbsp;s] LT\",lastWeek:function(){return 0===this.day()||6===this.day()?\"[Ãšltimo] dddd [Ã&nbsp;s] LT\":\"[Ãšltima] dddd [Ã&nbsp;s] LT\"},sameElse:\"L\"},relativeTime:{future:\"em %s\",past:\"hÃ¡ %s\",s:\"segundos\",ss:\"%d segundos\",m:\"um minuto\",mm:\"%d minutos\",h:\"uma hora\",hh:\"%d horas\",d:\"um dia\",dd:\"%d dias\",w:\"uma semana\",ww:\"%d semanas\",M:\"um mÃªs\",MM:\"%d meses\",y:\"um ano\",yy:\"%d anos\"},dayOfMonthOrdinalParse:/\\d{1,2}Âº/,ordinal:\"%dÂº\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"pt-br\",{months:\"janeiro_fevereiro_marÃ§o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro\".split(\"_\"),monthsShort:\"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez\".split(\"_\"),weekdays:\"domingo_segunda-feira_terÃ§a-feira_quarta-feira_quinta-feira_sexta-feira_sÃ¡bado\".split(\"_\"),weekdaysShort:\"dom_seg_ter_qua_qui_sex_sÃ¡b\".split(\"_\"),weekdaysMin:\"do_2Âª_3Âª_4Âª_5Âª_6Âª_sÃ¡\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY [Ã&nbsp;s] HH:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY [Ã&nbsp;s] HH:mm\"},calendar:{sameDay:\"[Hoje Ã&nbsp;s] LT\",nextDay:\"[AmanhÃ£ Ã&nbsp;s] LT\",nextWeek:\"dddd [Ã&nbsp;s] LT\",lastDay:\"[Ontem Ã&nbsp;s] LT\",lastWeek:function(){return 0===this.day()||6===this.day()?\"[Ãšltimo] dddd [Ã&nbsp;s] LT\":\"[Ãšltima] dddd [Ã&nbsp;s] LT\"},sameElse:\"L\"},relativeTime:{future:\"em %s\",past:\"hÃ¡ %s\",s:\"poucos segundos\",ss:\"%d segundos\",m:\"um minuto\",mm:\"%d minutos\",h:\"uma hora\",hh:\"%d horas\",d:\"um dia\",dd:\"%d dias\",M:\"um mÃªs\",MM:\"%d meses\",y:\"um ano\",yy:\"%d anos\"},dayOfMonthOrdinalParse:/\\d{1,2}Âº/,ordinal:\"%dÂº\",invalidDate:\"Data invÃ¡lida\"})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";function relativeTimeWithPlural(number,withoutSuffix,key){var separator=\" \";return(number%100&gt;=20||number&gt;=100&amp;&amp;number%100==0)&amp;&amp;(separator=\" de \"),number+separator+{ss:\"secunde\",mm:\"minute\",hh:\"ore\",dd:\"zile\",ww:\"sÄƒptÄƒmÃ¢ni\",MM:\"luni\",yy:\"ani\"}[key]}moment.defineLocale(\"ro\",{months:\"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie\".split(\"_\"),monthsShort:\"ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"duminicÄƒ_luni_marÈ›i_miercuri_joi_vineri_sÃ¢mbÄƒtÄƒ\".split(\"_\"),weekdaysShort:\"Dum_Lun_Mar_Mie_Joi_Vin_SÃ¢m\".split(\"_\"),weekdaysMin:\"Du_Lu_Ma_Mi_Jo_Vi_SÃ¢\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY H:mm\",LLLL:\"dddd, D MMMM YYYY H:mm\"},calendar:{sameDay:\"[azi la] LT\",nextDay:\"[mÃ¢ine la] LT\",nextWeek:\"dddd [la] LT\",lastDay:\"[ieri la] LT\",lastWeek:\"[fosta] dddd [la] LT\",sameElse:\"L\"},relativeTime:{future:\"peste %s\",past:\"%s Ã®n urmÄƒ\",s:\"cÃ¢teva secunde\",ss:relativeTimeWithPlural,m:\"un minut\",mm:relativeTimeWithPlural,h:\"o orÄƒ\",hh:relativeTimeWithPlural,d:\"o zi\",dd:relativeTimeWithPlural,w:\"o sÄƒptÄƒmÃ¢nÄƒ\",ww:relativeTimeWithPlural,M:\"o lunÄƒ\",MM:relativeTimeWithPlural,y:\"un an\",yy:relativeTimeWithPlural},week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";function relativeTimeWithPlural(number,withoutSuffix,key){var num,forms;return\"m\"===key?withoutSuffix?\"Ð¼Ð¸Ð½ÑƒÑ‚Ð°\":\"Ð¼Ð¸Ð½ÑƒÑ‚Ñƒ\":number+\" \"+(num=+number,forms={ss:withoutSuffix?\"ÑÐµÐºÑƒÐ½Ð´Ð°_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´\":\"ÑÐµÐºÑƒÐ½Ð´Ñƒ_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´\",mm:withoutSuffix?\"Ð¼Ð¸Ð½ÑƒÑ‚Ð°_Ð¼Ð¸Ð½ÑƒÑ‚Ñ‹_Ð¼Ð¸Ð½ÑƒÑ‚\":\"Ð¼Ð¸Ð½ÑƒÑ‚Ñƒ_Ð¼Ð¸Ð½ÑƒÑ‚Ñ‹_Ð¼Ð¸Ð½ÑƒÑ‚\",hh:\"Ñ‡Ð°Ñ_Ñ‡Ð°ÑÐ°_Ñ‡Ð°ÑÐ¾Ð²\",dd:\"Ð´ÐµÐ½ÑŒ_Ð´Ð½Ñ_Ð´Ð½ÐµÐ¹\",ww:\"Ð½ÐµÐ´ÐµÐ»Ñ_Ð½ÐµÐ´ÐµÐ»Ð¸_Ð½ÐµÐ´ÐµÐ»ÑŒ\",MM:\"Ð¼ÐµÑÑÑ†_Ð¼ÐµÑÑÑ†Ð°_Ð¼ÐµÑÑÑ†ÐµÐ²\",yy:\"Ð³Ð¾Ð´_Ð³Ð¾Ð´Ð°_Ð»ÐµÑ‚\"}[key].split(\"_\"),num%10==1&amp;&amp;num%100!=11?forms[0]:num%10&gt;=2&amp;&amp;num%10&lt;=4&amp;&amp;(num%100&lt;10||num%100&gt;=20)?forms[1]:forms[2])}var monthsParse=[/^ÑÐ½Ð²/i,/^Ñ„ÐµÐ²/i,/^Ð¼Ð°Ñ€/i,/^Ð°Ð¿Ñ€/i,/^Ð¼Ð°[Ð¹Ñ]/i,/^Ð¸ÑŽÐ½/i,/^Ð¸ÑŽÐ»/i,/^Ð°Ð²Ð³/i,/^ÑÐµÐ½/i,/^Ð¾ÐºÑ‚/i,/^Ð½Ð¾Ñ/i,/^Ð´ÐµÐº/i];moment.defineLocale(\"ru\",{months:{format:\"ÑÐ½Ð²Ð°Ñ€Ñ_Ñ„ÐµÐ²Ñ€Ð°Ð»Ñ_Ð¼Ð°Ñ€Ñ‚Ð°_Ð°Ð¿Ñ€ÐµÐ»Ñ_Ð¼Ð°Ñ_Ð¸ÑŽÐ½Ñ_Ð¸ÑŽÐ»Ñ_Ð°Ð²Ð³ÑƒÑÑ‚Ð°_ÑÐµÐ½Ñ‚ÑÐ±Ñ€Ñ_Ð¾ÐºÑ‚ÑÐ±Ñ€Ñ_Ð½Ð¾ÑÐ±Ñ€Ñ_Ð´ÐµÐºÐ°Ð±Ñ€Ñ\".split(\"_\"),standalone:\"ÑÐ½Ð²Ð°Ñ€ÑŒ_Ñ„ÐµÐ²Ñ€Ð°Ð»ÑŒ_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»ÑŒ_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€ÑŒ_Ð¾ÐºÑ‚ÑÐ±Ñ€ÑŒ_Ð½Ð¾ÑÐ±Ñ€ÑŒ_Ð´ÐµÐºÐ°Ð±Ñ€ÑŒ\".split(\"_\")},monthsShort:{format:\"ÑÐ½Ð²._Ñ„ÐµÐ²Ñ€._Ð¼Ð°Ñ€._Ð°Ð¿Ñ€._Ð¼Ð°Ñ_Ð¸ÑŽÐ½Ñ_Ð¸ÑŽÐ»Ñ_Ð°Ð²Ð³._ÑÐµÐ½Ñ‚._Ð¾ÐºÑ‚._Ð½Ð¾ÑÐ±._Ð´ÐµÐº.\".split(\"_\"),standalone:\"ÑÐ½Ð²._Ñ„ÐµÐ²Ñ€._Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€._Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³._ÑÐµÐ½Ñ‚._Ð¾ÐºÑ‚._Ð½Ð¾ÑÐ±._Ð´ÐµÐº.\".split(\"_\")},weekdays:{standalone:\"Ð²Ð¾ÑÐºÑ€ÐµÑÐµÐ½ÑŒÐµ_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»ÑŒÐ½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð³_Ð¿ÑÑ‚Ð½Ð¸Ñ†Ð°_ÑÑƒÐ±Ð±Ð¾Ñ‚Ð°\".split(\"_\"),format:\"Ð²Ð¾ÑÐºÑ€ÐµÑÐµÐ½ÑŒÐµ_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»ÑŒÐ½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÐµÐ´Ñƒ_Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð³_Ð¿ÑÑ‚Ð½Ð¸Ñ†Ñƒ_ÑÑƒÐ±Ð±Ð¾Ñ‚Ñƒ\".split(\"_\"),isFormat:/\\[ ?[Ð’Ð²] ?(?:Ð¿Ñ€Ð¾ÑˆÐ»ÑƒÑŽ|ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÑƒÑŽ|ÑÑ‚Ñƒ)? ?] ?dddd/},weekdaysShort:\"Ð²Ñ_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±\".split(\"_\"),weekdaysMin:\"Ð²Ñ_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±\".split(\"_\"),monthsParse:monthsParse,longMonthsParse:monthsParse,shortMonthsParse:monthsParse,monthsRegex:/^(ÑÐ½Ð²Ð°Ñ€[ÑŒÑ]|ÑÐ½Ð²\\.?|Ñ„ÐµÐ²Ñ€Ð°Ð»[ÑŒÑ]|Ñ„ÐµÐ²Ñ€?\\.?|Ð¼Ð°Ñ€Ñ‚Ð°?|Ð¼Ð°Ñ€\\.?|Ð°Ð¿Ñ€ÐµÐ»[ÑŒÑ]|Ð°Ð¿Ñ€\\.?|Ð¼Ð°[Ð¹Ñ]|Ð¸ÑŽÐ½[ÑŒÑ]|Ð¸ÑŽÐ½\\.?|Ð¸ÑŽÐ»[ÑŒÑ]|Ð¸ÑŽÐ»\\.?|Ð°Ð²Ð³ÑƒÑÑ‚Ð°?|Ð°Ð²Ð³\\.?|ÑÐµÐ½Ñ‚ÑÐ±Ñ€[ÑŒÑ]|ÑÐµÐ½Ñ‚?\\.?|Ð¾ÐºÑ‚ÑÐ±Ñ€[ÑŒÑ]|Ð¾ÐºÑ‚\\.?|Ð½Ð¾ÑÐ±Ñ€[ÑŒÑ]|Ð½Ð¾ÑÐ±?\\.?|Ð´ÐµÐºÐ°Ð±Ñ€[ÑŒÑ]|Ð´ÐµÐº\\.?)/i,monthsShortRegex:/^(ÑÐ½Ð²Ð°Ñ€[ÑŒÑ]|ÑÐ½Ð²\\.?|Ñ„ÐµÐ²Ñ€Ð°Ð»[ÑŒÑ]|Ñ„ÐµÐ²Ñ€?\\.?|Ð¼Ð°Ñ€Ñ‚Ð°?|Ð¼Ð°Ñ€\\.?|Ð°Ð¿Ñ€ÐµÐ»[ÑŒÑ]|Ð°Ð¿Ñ€\\.?|Ð¼Ð°[Ð¹Ñ]|Ð¸ÑŽÐ½[ÑŒÑ]|Ð¸ÑŽÐ½\\.?|Ð¸ÑŽÐ»[ÑŒÑ]|Ð¸ÑŽÐ»\\.?|Ð°Ð²Ð³ÑƒÑÑ‚Ð°?|Ð°Ð²Ð³\\.?|ÑÐµÐ½Ñ‚ÑÐ±Ñ€[ÑŒÑ]|ÑÐµÐ½Ñ‚?\\.?|Ð¾ÐºÑ‚ÑÐ±Ñ€[ÑŒÑ]|Ð¾ÐºÑ‚\\.?|Ð½Ð¾ÑÐ±Ñ€[ÑŒÑ]|Ð½Ð¾ÑÐ±?\\.?|Ð´ÐµÐºÐ°Ð±Ñ€[ÑŒÑ]|Ð´ÐµÐº\\.?)/i,monthsStrictRegex:/^(ÑÐ½Ð²Ð°Ñ€[ÑÑŒ]|Ñ„ÐµÐ²Ñ€Ð°Ð»[ÑÑŒ]|Ð¼Ð°Ñ€Ñ‚Ð°?|Ð°Ð¿Ñ€ÐµÐ»[ÑÑŒ]|Ð¼Ð°[ÑÐ¹]|Ð¸ÑŽÐ½[ÑÑŒ]|Ð¸ÑŽÐ»[ÑÑŒ]|Ð°Ð²Ð³ÑƒÑÑ‚Ð°?|ÑÐµÐ½Ñ‚ÑÐ±Ñ€[ÑÑŒ]|Ð¾ÐºÑ‚ÑÐ±Ñ€[ÑÑŒ]|Ð½Ð¾ÑÐ±Ñ€[ÑÑŒ]|Ð´ÐµÐºÐ°Ð±Ñ€[ÑÑŒ])/i,monthsShortStrictRegex:/^(ÑÐ½Ð²\\.|Ñ„ÐµÐ²Ñ€?\\.|Ð¼Ð°Ñ€[Ñ‚.]|Ð°Ð¿Ñ€\\.|Ð¼Ð°[ÑÐ¹]|Ð¸ÑŽÐ½[ÑŒÑ.]|Ð¸ÑŽÐ»[ÑŒÑ.]|Ð°Ð²Ð³\\.|ÑÐµÐ½Ñ‚?\\.|Ð¾ÐºÑ‚\\.|Ð½Ð¾ÑÐ±?\\.|Ð´ÐµÐº\\.)/i,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY Ð³.\",LLL:\"D MMMM YYYY Ð³., H:mm\",LLLL:\"dddd, D MMMM YYYY Ð³., H:mm\"},calendar:{sameDay:\"[Ð¡ÐµÐ³Ð¾Ð´Ð½Ñ, Ð²] LT\",nextDay:\"[Ð—Ð°Ð²Ñ‚Ñ€Ð°, Ð²] LT\",lastDay:\"[Ð’Ñ‡ÐµÑ€Ð°, Ð²] LT\",nextWeek:function(now){if(now.week()===this.week())return 2===this.day()?\"[Ð’Ð¾] dddd, [Ð²] LT\":\"[Ð’] dddd, [Ð²] LT\";switch(this.day()){case 0:return\"[Ð’ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÐµÐµ] dddd, [Ð²] LT\";case 1:case 2:case 4:return\"[Ð’ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð¸Ð¹] dddd, [Ð²] LT\";case 3:case 5:case 6:return\"[Ð’ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÑƒÑŽ] dddd, [Ð²] LT\"}},lastWeek:function(now){if(now.week()===this.week())return 2===this.day()?\"[Ð’Ð¾] dddd, [Ð²] LT\":\"[Ð’] dddd, [Ð²] LT\";switch(this.day()){case 0:return\"[Ð’ Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ðµ] dddd, [Ð²] LT\";case 1:case 2:case 4:return\"[Ð’ Ð¿Ñ€Ð¾ÑˆÐ»Ñ‹Ð¹] dddd, [Ð²] LT\";case 3:case 5:case 6:return\"[Ð’ Ð¿Ñ€Ð¾ÑˆÐ»ÑƒÑŽ] dddd, [Ð²] LT\"}},sameElse:\"L\"},relativeTime:{future:\"Ñ‡ÐµÑ€ÐµÐ· %s\",past:\"%s Ð½Ð°Ð·Ð°Ð´\",s:\"Ð½ÐµÑÐºÐ¾Ð»ÑŒÐºÐ¾ ÑÐµÐºÑƒÐ½Ð´\",ss:relativeTimeWithPlural,m:relativeTimeWithPlural,mm:relativeTimeWithPlural,h:\"Ñ‡Ð°Ñ\",hh:relativeTimeWithPlural,d:\"Ð´ÐµÐ½ÑŒ\",dd:relativeTimeWithPlural,w:\"Ð½ÐµÐ´ÐµÐ»Ñ\",ww:relativeTimeWithPlural,M:\"Ð¼ÐµÑÑÑ†\",MM:relativeTimeWithPlural,y:\"Ð³Ð¾Ð´\",yy:relativeTimeWithPlural},meridiemParse:/Ð½Ð¾Ñ‡Ð¸|ÑƒÑ‚Ñ€Ð°|Ð´Ð½Ñ|Ð²ÐµÑ‡ÐµÑ€Ð°/i,isPM:function(input){return/^(Ð´Ð½Ñ|Ð²ÐµÑ‡ÐµÑ€Ð°)$/.test(input)},meridiem:function(hour,minute,isLower){return hour&lt;4?\"Ð½Ð¾Ñ‡Ð¸\":hour&lt;12?\"ÑƒÑ‚Ñ€Ð°\":hour&lt;17?\"Ð´Ð½Ñ\":\"Ð²ÐµÑ‡ÐµÑ€Ð°\"},dayOfMonthOrdinalParse:/\\d{1,2}-(Ð¹|Ð³Ð¾|Ñ)/,ordinal:function(number,period){switch(period){case\"M\":case\"d\":case\"DDD\":return number+\"-Ð¹\";case\"D\":return number+\"-Ð³Ð¾\";case\"w\":case\"W\":return number+\"-Ñ\";default:return number}},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var months=[\"Ø¬Ù†ÙˆØ±ÙŠ\",\"ÙÙŠØ¨Ø±ÙˆØ±ÙŠ\",\"Ù…Ø§Ø±Ú†\",\"Ø§Ù¾Ø±ÙŠÙ„\",\"Ù…Ø¦ÙŠ\",\"Ø¬ÙˆÙ†\",\"Ø¬ÙˆÙ„Ø§Ø¡Ù\",\"Ø¢Ú¯Ø³Ù½\",\"Ø³ÙŠÙ¾Ù½Ù…Ø¨Ø±\",\"Ø¢ÚªÙ½ÙˆØ¨Ø±\",\"Ù†ÙˆÙ…Ø¨Ø±\",\"ÚŠØ³Ù…Ø¨Ø±\"],days=[\"Ø¢Ú†Ø±\",\"Ø³ÙˆÙ…Ø±\",\"Ø§Ú±Ø§Ø±Ùˆ\",\"Ø§Ø±Ø¨Ø¹\",\"Ø®Ù…ÙŠØ³\",\"Ø¬Ù…Ø¹\",\"Ú‡Ù†Ú‡Ø±\"];moment.defineLocale(\"sd\",{months:months,monthsShort:months,weekdays:days,weekdaysShort:days,weekdaysMin:days,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"ddddØŒ D MMMM YYYY HH:mm\"},meridiemParse:/ØµØ¨Ø­|Ø´Ø§Ù…/,isPM:function(input){return\"Ø´Ø§Ù…\"===input},meridiem:function(hour,minute,isLower){return hour&lt;12?\"ØµØ¨Ø­\":\"Ø´Ø§Ù…\"},calendar:{sameDay:\"[Ø§Ú„] LT\",nextDay:\"[Ø³Ú€Ø§Ú»ÙŠ] LT\",nextWeek:\"dddd [Ø§Ú³ÙŠÙ† Ù‡ÙØªÙŠ ØªÙŠ] LT\",lastDay:\"[ÚªØ§Ù„Ù‡Ù‡] LT\",lastWeek:\"[Ú¯Ø²Ø±ÙŠÙ„ Ù‡ÙØªÙŠ] dddd [ØªÙŠ] LT\",sameElse:\"L\"},relativeTime:{future:\"%s Ù¾ÙˆØ¡\",past:\"%s Ø§Ú³\",s:\"Ú†Ù†Ø¯ Ø³ÙŠÚªÙ†ÚŠ\",ss:\"%d Ø³ÙŠÚªÙ†ÚŠ\",m:\"Ù‡Úª Ù…Ù†Ù½\",mm:\"%d Ù…Ù†Ù½\",h:\"Ù‡Úª ÚªÙ„Ø§Úª\",hh:\"%d ÚªÙ„Ø§Úª\",d:\"Ù‡Úª ÚÙŠÙ†Ù‡Ù†\",dd:\"%d ÚÙŠÙ†Ù‡Ù†\",M:\"Ù‡Úª Ù…Ù‡ÙŠÙ†Ùˆ\",MM:\"%d Ù…Ù‡ÙŠÙ†Ø§\",y:\"Ù‡Úª Ø³Ø§Ù„\",yy:\"%d Ø³Ø§Ù„\"},preparse:function(string){return string.replace(/ØŒ/g,\",\")},postformat:function(string){return string.replace(/,/g,\"ØŒ\")},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"se\",{months:\"oÄ‘Ä‘ajagemÃ¡nnu_guovvamÃ¡nnu_njukÄamÃ¡nnu_cuoÅ‹omÃ¡nnu_miessemÃ¡nnu_geassemÃ¡nnu_suoidnemÃ¡nnu_borgemÃ¡nnu_ÄakÄamÃ¡nnu_golggotmÃ¡nnu_skÃ¡bmamÃ¡nnu_juovlamÃ¡nnu\".split(\"_\"),monthsShort:\"oÄ‘Ä‘j_guov_njuk_cuo_mies_geas_suoi_borg_ÄakÄ_golg_skÃ¡b_juov\".split(\"_\"),weekdays:\"sotnabeaivi_vuossÃ¡rga_maÅ‹Å‹ebÃ¡rga_gaskavahkku_duorastat_bearjadat_lÃ¡vvardat\".split(\"_\"),weekdaysShort:\"sotn_vuos_maÅ‹_gask_duor_bear_lÃ¡v\".split(\"_\"),weekdaysMin:\"s_v_m_g_d_b_L\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"MMMM D. [b.] YYYY\",LLL:\"MMMM D. [b.] YYYY [ti.] HH:mm\",LLLL:\"dddd, MMMM D. [b.] YYYY [ti.] HH:mm\"},calendar:{sameDay:\"[otne ti] LT\",nextDay:\"[ihttin ti] LT\",nextWeek:\"dddd [ti] LT\",lastDay:\"[ikte ti] LT\",lastWeek:\"[ovddit] dddd [ti] LT\",sameElse:\"L\"},relativeTime:{future:\"%s geaÅ¾es\",past:\"maÅ‹it %s\",s:\"moadde sekunddat\",ss:\"%d sekunddat\",m:\"okta minuhta\",mm:\"%d minuhtat\",h:\"okta diimmu\",hh:\"%d diimmut\",d:\"okta beaivi\",dd:\"%d beaivvit\",M:\"okta mÃ¡nnu\",MM:\"%d mÃ¡nut\",y:\"okta jahki\",yy:\"%d jagit\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"si\",{months:\"à¶¢à¶±à·€à·à¶»à·’_à¶´à·™à¶¶à¶»à·€à·à¶»à·’_à¶¸à·à¶»à·Šà¶­à·”_à¶…à¶´à·Šâ€à¶»à·šà¶½à·Š_à¶¸à·à¶ºà·’_à¶¢à·–à¶±à·’_à¶¢à·–à¶½à·’_à¶…à¶œà·à·ƒà·Šà¶­à·”_à·ƒà·à¶´à·Šà¶­à·à¶¸à·Šà¶¶à¶»à·Š_à¶”à¶šà·Šà¶­à·à¶¶à¶»à·Š_à¶±à·œà·€à·à¶¸à·Šà¶¶à¶»à·Š_à¶¯à·™à·ƒà·à¶¸à·Šà¶¶à¶»à·Š\".split(\"_\"),monthsShort:\"à¶¢à¶±_à¶´à·™à¶¶_à¶¸à·à¶»à·Š_à¶…à¶´à·Š_à¶¸à·à¶ºà·’_à¶¢à·–à¶±à·’_à¶¢à·–à¶½à·’_à¶…à¶œà·_à·ƒà·à¶´à·Š_à¶”à¶šà·Š_à¶±à·œà·€à·_à¶¯à·™à·ƒà·\".split(\"_\"),weekdays:\"à¶‰à¶»à·’à¶¯à·_à·ƒà¶³à·”à¶¯à·_à¶…à¶Ÿà·„à¶»à·”à·€à·à¶¯à·_à¶¶à¶¯à·à¶¯à·_à¶¶à·Šâ€à¶»à·„à·ƒà·Šà¶´à¶­à·’à¶±à·Šà¶¯à·_à·ƒà·’à¶šà·”à¶»à·à¶¯à·_à·ƒà·™à¶±à·ƒà·”à¶»à·à¶¯à·\".split(\"_\"),weekdaysShort:\"à¶‰à¶»à·’_à·ƒà¶³à·”_à¶…à¶Ÿ_à¶¶à¶¯à·_à¶¶à·Šâ€à¶»à·„_à·ƒà·’à¶šà·”_à·ƒà·™à¶±\".split(\"_\"),weekdaysMin:\"à¶‰_à·ƒ_à¶…_à¶¶_à¶¶à·Šâ€à¶»_à·ƒà·’_à·ƒà·™\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"a h:mm\",LTS:\"a h:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYY MMMM D\",LLL:\"YYYY MMMM D, a h:mm\",LLLL:\"YYYY MMMM D [à·€à·à¶±à·’] dddd, a h:mm:ss\"},calendar:{sameDay:\"[à¶…à¶¯] LT[à¶§]\",nextDay:\"[à·„à·™à¶§] LT[à¶§]\",nextWeek:\"dddd LT[à¶§]\",lastDay:\"[à¶Šà¶ºà·š] LT[à¶§]\",lastWeek:\"[à¶´à·ƒà·”à¶œà·’à¶º] dddd LT[à¶§]\",sameElse:\"L\"},relativeTime:{future:\"%sà¶šà·’à¶±à·Š\",past:\"%sà¶šà¶§ à¶´à·™à¶»\",s:\"à¶­à¶­à·Šà¶´à¶» à¶šà·’à·„à·’à¶´à¶º\",ss:\"à¶­à¶­à·Šà¶´à¶» %d\",m:\"à¶¸à·’à¶±à·’à¶­à·Šà¶­à·”à·€\",mm:\"à¶¸à·’à¶±à·’à¶­à·Šà¶­à·” %d\",h:\"à¶´à·à¶º\",hh:\"à¶´à·à¶º %d\",d:\"à¶¯à·’à¶±à¶º\",dd:\"à¶¯à·’à¶± %d\",M:\"à¶¸à·à·ƒà¶º\",MM:\"à¶¸à·à·ƒ %d\",y:\"à·€à·ƒà¶»\",yy:\"à·€à·ƒà¶» %d\"},dayOfMonthOrdinalParse:/\\d{1,2} à·€à·à¶±à·’/,ordinal:function(number){return number+\" à·€à·à¶±à·’\"},meridiemParse:/à¶´à·™à¶» à·€à¶»à·”|à¶´à·ƒà·Š à·€à¶»à·”|à¶´à·™.à·€|à¶´.à·€./,isPM:function(input){return\"à¶´.à·€.\"===input||\"à¶´à·ƒà·Š à·€à¶»à·”\"===input},meridiem:function(hours,minutes,isLower){return hours&gt;11?isLower?\"à¶´.à·€.\":\"à¶´à·ƒà·Š à·€à¶»à·”\":isLower?\"à¶´à·™.à·€.\":\"à¶´à·™à¶» à·€à¶»à·”\"}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var months=\"januÃ¡r_februÃ¡r_marec_aprÃ­l_mÃ¡j_jÃºn_jÃºl_august_september_oktÃ³ber_november_december\".split(\"_\"),monthsShort=\"jan_feb_mar_apr_mÃ¡j_jÃºn_jÃºl_aug_sep_okt_nov_dec\".split(\"_\");function plural(n){return n&gt;1&amp;&amp;n&lt;5}function translate(number,withoutSuffix,key,isFuture){var result=number+\" \";switch(key){case\"s\":return withoutSuffix||isFuture?\"pÃ¡r sekÃºnd\":\"pÃ¡r sekundami\";case\"ss\":return withoutSuffix||isFuture?result+(plural(number)?\"sekundy\":\"sekÃºnd\"):result+\"sekundami\";case\"m\":return withoutSuffix?\"minÃºta\":isFuture?\"minÃºtu\":\"minÃºtou\";case\"mm\":return withoutSuffix||isFuture?result+(plural(number)?\"minÃºty\":\"minÃºt\"):result+\"minÃºtami\";case\"h\":return withoutSuffix?\"hodina\":isFuture?\"hodinu\":\"hodinou\";case\"hh\":return withoutSuffix||isFuture?result+(plural(number)?\"hodiny\":\"hodÃ­n\"):result+\"hodinami\";case\"d\":return withoutSuffix||isFuture?\"deÅˆ\":\"dÅˆom\";case\"dd\":return withoutSuffix||isFuture?result+(plural(number)?\"dni\":\"dnÃ­\"):result+\"dÅˆami\";case\"M\":return withoutSuffix||isFuture?\"mesiac\":\"mesiacom\";case\"MM\":return withoutSuffix||isFuture?result+(plural(number)?\"mesiace\":\"mesiacov\"):result+\"mesiacmi\";case\"y\":return withoutSuffix||isFuture?\"rok\":\"rokom\";case\"yy\":return withoutSuffix||isFuture?result+(plural(number)?\"roky\":\"rokov\"):result+\"rokmi\"}}moment.defineLocale(\"sk\",{months:months,monthsShort:monthsShort,weekdays:\"nedeÄ¾a_pondelok_utorok_streda_Å¡tvrtok_piatok_sobota\".split(\"_\"),weekdaysShort:\"ne_po_ut_st_Å¡t_pi_so\".split(\"_\"),weekdaysMin:\"ne_po_ut_st_Å¡t_pi_so\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[dnes o] LT\",nextDay:\"[zajtra o] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[v nedeÄ¾u o] LT\";case 1:case 2:return\"[v] dddd [o] LT\";case 3:return\"[v stredu o] LT\";case 4:return\"[vo Å¡tvrtok o] LT\";case 5:return\"[v piatok o] LT\";case 6:return\"[v sobotu o] LT\"}},lastDay:\"[vÄera o] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[minulÃº nedeÄ¾u o] LT\";case 1:case 2:return\"[minulÃ½] dddd [o] LT\";case 3:return\"[minulÃº stredu o] LT\";case 4:case 5:return\"[minulÃ½] dddd [o] LT\";case 6:return\"[minulÃº sobotu o] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"pred %s\",s:translate,ss:translate,m:translate,mm:translate,h:translate,hh:translate,d:translate,dd:translate,M:translate,MM:translate,y:translate,yy:translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";function processRelativeTime(number,withoutSuffix,key,isFuture){var result=number+\" \";switch(key){case\"s\":return withoutSuffix||isFuture?\"nekaj sekund\":\"nekaj sekundami\";case\"ss\":return result+=1===number?withoutSuffix?\"sekundo\":\"sekundi\":2===number?withoutSuffix||isFuture?\"sekundi\":\"sekundah\":number&lt;5?withoutSuffix||isFuture?\"sekunde\":\"sekundah\":\"sekund\";case\"m\":return withoutSuffix?\"ena minuta\":\"eno minuto\";case\"mm\":return result+=1===number?withoutSuffix?\"minuta\":\"minuto\":2===number?withoutSuffix||isFuture?\"minuti\":\"minutama\":number&lt;5?withoutSuffix||isFuture?\"minute\":\"minutami\":withoutSuffix||isFuture?\"minut\":\"minutami\";case\"h\":return withoutSuffix?\"ena ura\":\"eno uro\";case\"hh\":return result+=1===number?withoutSuffix?\"ura\":\"uro\":2===number?withoutSuffix||isFuture?\"uri\":\"urama\":number&lt;5?withoutSuffix||isFuture?\"ure\":\"urami\":withoutSuffix||isFuture?\"ur\":\"urami\";case\"d\":return withoutSuffix||isFuture?\"en dan\":\"enim dnem\";case\"dd\":return result+=1===number?withoutSuffix||isFuture?\"dan\":\"dnem\":2===number?withoutSuffix||isFuture?\"dni\":\"dnevoma\":withoutSuffix||isFuture?\"dni\":\"dnevi\";case\"M\":return withoutSuffix||isFuture?\"en mesec\":\"enim mesecem\";case\"MM\":return result+=1===number?withoutSuffix||isFuture?\"mesec\":\"mesecem\":2===number?withoutSuffix||isFuture?\"meseca\":\"mesecema\":number&lt;5?withoutSuffix||isFuture?\"mesece\":\"meseci\":withoutSuffix||isFuture?\"mesecev\":\"meseci\";case\"y\":return withoutSuffix||isFuture?\"eno leto\":\"enim letom\";case\"yy\":return result+=1===number?withoutSuffix||isFuture?\"leto\":\"letom\":2===number?withoutSuffix||isFuture?\"leti\":\"letoma\":number&lt;5?withoutSuffix||isFuture?\"leta\":\"leti\":withoutSuffix||isFuture?\"let\":\"leti\"}}moment.defineLocale(\"sl\",{months:\"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december\".split(\"_\"),monthsShort:\"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedelja_ponedeljek_torek_sreda_Äetrtek_petek_sobota\".split(\"_\"),weekdaysShort:\"ned._pon._tor._sre._Äet._pet._sob.\".split(\"_\"),weekdaysMin:\"ne_po_to_sr_Äe_pe_so\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD. MM. YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[danes ob] LT\",nextDay:\"[jutri ob] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[v] [nedeljo] [ob] LT\";case 3:return\"[v] [sredo] [ob] LT\";case 6:return\"[v] [soboto] [ob] LT\";case 1:case 2:case 4:case 5:return\"[v] dddd [ob] LT\"}},lastDay:\"[vÄeraj ob] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[prejÅ¡njo] [nedeljo] [ob] LT\";case 3:return\"[prejÅ¡njo] [sredo] [ob] LT\";case 6:return\"[prejÅ¡njo] [soboto] [ob] LT\";case 1:case 2:case 4:case 5:return\"[prejÅ¡nji] dddd [ob] LT\"}},sameElse:\"L\"},relativeTime:{future:\"Äez %s\",past:\"pred %s\",s:processRelativeTime,ss:processRelativeTime,m:processRelativeTime,mm:processRelativeTime,h:processRelativeTime,hh:processRelativeTime,d:processRelativeTime,dd:processRelativeTime,M:processRelativeTime,MM:processRelativeTime,y:processRelativeTime,yy:processRelativeTime},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"sq\",{months:\"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_NÃ«ntor_Dhjetor\".split(\"_\"),monthsShort:\"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_NÃ«n_Dhj\".split(\"_\"),weekdays:\"E Diel_E HÃ«nÃ«_E MartÃ«_E MÃ«rkurÃ«_E Enjte_E Premte_E ShtunÃ«\".split(\"_\"),weekdaysShort:\"Die_HÃ«n_Mar_MÃ«r_Enj_Pre_Sht\".split(\"_\"),weekdaysMin:\"D_H_Ma_MÃ«_E_P_Sh\".split(\"_\"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(input){return\"M\"===input.charAt(0)},meridiem:function(hours,minutes,isLower){return hours&lt;12?\"PD\":\"MD\"},longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Sot nÃ«] LT\",nextDay:\"[NesÃ«r nÃ«] LT\",nextWeek:\"dddd [nÃ«] LT\",lastDay:\"[Dje nÃ«] LT\",lastWeek:\"dddd [e kaluar nÃ«] LT\",sameElse:\"L\"},relativeTime:{future:\"nÃ« %s\",past:\"%s mÃ« parÃ«\",s:\"disa sekonda\",ss:\"%d sekonda\",m:\"njÃ« minutÃ«\",mm:\"%d minuta\",h:\"njÃ« orÃ«\",hh:\"%d orÃ«\",d:\"njÃ« ditÃ«\",dd:\"%d ditÃ«\",M:\"njÃ« muaj\",MM:\"%d muaj\",y:\"njÃ« vit\",yy:\"%d vite\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var translator={words:{ss:[\"sekunda\",\"sekunde\",\"sekundi\"],m:[\"jedan minut\",\"jedne minute\"],mm:[\"minut\",\"minute\",\"minuta\"],h:[\"jedan sat\",\"jednog sata\"],hh:[\"sat\",\"sata\",\"sati\"],dd:[\"dan\",\"dana\",\"dana\"],MM:[\"mesec\",\"meseca\",\"meseci\"],yy:[\"godina\",\"godine\",\"godina\"]},correctGrammaticalCase:function(number,wordKey){return 1===number?wordKey[0]:number&gt;=2&amp;&amp;number&lt;=4?wordKey[1]:wordKey[2]},translate:function(number,withoutSuffix,key){var wordKey=translator.words[key];return 1===key.length?withoutSuffix?wordKey[0]:wordKey[1]:number+\" \"+translator.correctGrammaticalCase(number,wordKey)}};moment.defineLocale(\"sr\",{months:\"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar\".split(\"_\"),monthsShort:\"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedelja_ponedeljak_utorak_sreda_Äetvrtak_petak_subota\".split(\"_\"),weekdaysShort:\"ned._pon._uto._sre._Äet._pet._sub.\".split(\"_\"),weekdaysMin:\"ne_po_ut_sr_Äe_pe_su\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"D. M. YYYY.\",LL:\"D. MMMM YYYY.\",LLL:\"D. MMMM YYYY. H:mm\",LLLL:\"dddd, D. MMMM YYYY. H:mm\"},calendar:{sameDay:\"[danas u] LT\",nextDay:\"[sutra u] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[u] [nedelju] [u] LT\";case 3:return\"[u] [sredu] [u] LT\";case 6:return\"[u] [subotu] [u] LT\";case 1:case 2:case 4:case 5:return\"[u] dddd [u] LT\"}},lastDay:\"[juÄe u] LT\",lastWeek:function(){return[\"[proÅ¡le] [nedelje] [u] LT\",\"[proÅ¡log] [ponedeljka] [u] LT\",\"[proÅ¡log] [utorka] [u] LT\",\"[proÅ¡le] [srede] [u] LT\",\"[proÅ¡log] [Äetvrtka] [u] LT\",\"[proÅ¡log] [petka] [u] LT\",\"[proÅ¡le] [subote] [u] LT\"][this.day()]},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"pre %s\",s:\"nekoliko sekundi\",ss:translator.translate,m:translator.translate,mm:translator.translate,h:translator.translate,hh:translator.translate,d:\"dan\",dd:translator.translate,M:\"mesec\",MM:translator.translate,y:\"godinu\",yy:translator.translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var translator={words:{ss:[\"ÑÐµÐºÑƒÐ½Ð´Ð°\",\"ÑÐµÐºÑƒÐ½Ð´Ðµ\",\"ÑÐµÐºÑƒÐ½Ð´Ð¸\"],m:[\"Ñ˜ÐµÐ´Ð°Ð½ Ð¼Ð¸Ð½ÑƒÑ‚\",\"Ñ˜ÐµÐ´Ð½Ðµ Ð¼Ð¸Ð½ÑƒÑ‚Ðµ\"],mm:[\"Ð¼Ð¸Ð½ÑƒÑ‚\",\"Ð¼Ð¸Ð½ÑƒÑ‚Ðµ\",\"Ð¼Ð¸Ð½ÑƒÑ‚Ð°\"],h:[\"Ñ˜ÐµÐ´Ð°Ð½ ÑÐ°Ñ‚\",\"Ñ˜ÐµÐ´Ð½Ð¾Ð³ ÑÐ°Ñ‚Ð°\"],hh:[\"ÑÐ°Ñ‚\",\"ÑÐ°Ñ‚Ð°\",\"ÑÐ°Ñ‚Ð¸\"],dd:[\"Ð´Ð°Ð½\",\"Ð´Ð°Ð½Ð°\",\"Ð´Ð°Ð½Ð°\"],MM:[\"Ð¼ÐµÑÐµÑ†\",\"Ð¼ÐµÑÐµÑ†Ð°\",\"Ð¼ÐµÑÐµÑ†Ð¸\"],yy:[\"Ð³Ð¾Ð´Ð¸Ð½Ð°\",\"Ð³Ð¾Ð´Ð¸Ð½Ðµ\",\"Ð³Ð¾Ð´Ð¸Ð½Ð°\"]},correctGrammaticalCase:function(number,wordKey){return 1===number?wordKey[0]:number&gt;=2&amp;&amp;number&lt;=4?wordKey[1]:wordKey[2]},translate:function(number,withoutSuffix,key){var wordKey=translator.words[key];return 1===key.length?withoutSuffix?wordKey[0]:wordKey[1]:number+\" \"+translator.correctGrammaticalCase(number,wordKey)}};moment.defineLocale(\"sr-cyrl\",{months:\"Ñ˜Ð°Ð½ÑƒÐ°Ñ€_Ñ„ÐµÐ±Ñ€ÑƒÐ°Ñ€_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€Ð¸Ð»_Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½_Ñ˜ÑƒÐ»_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ¿Ñ‚ÐµÐ¼Ð±Ð°Ñ€_Ð¾ÐºÑ‚Ð¾Ð±Ð°Ñ€_Ð½Ð¾Ð²ÐµÐ¼Ð±Ð°Ñ€_Ð´ÐµÑ†ÐµÐ¼Ð±Ð°Ñ€\".split(\"_\"),monthsShort:\"Ñ˜Ð°Ð½._Ñ„ÐµÐ±._Ð¼Ð°Ñ€._Ð°Ð¿Ñ€._Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½_Ñ˜ÑƒÐ»_Ð°Ð²Ð³._ÑÐµÐ¿._Ð¾ÐºÑ‚._Ð½Ð¾Ð²._Ð´ÐµÑ†.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Ð½ÐµÐ´ÐµÑ™Ð°_Ð¿Ð¾Ð½ÐµÐ´ÐµÑ™Ð°Ðº_ÑƒÑ‚Ð¾Ñ€Ð°Ðº_ÑÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²Ñ€Ñ‚Ð°Ðº_Ð¿ÐµÑ‚Ð°Ðº_ÑÑƒÐ±Ð¾Ñ‚Ð°\".split(\"_\"),weekdaysShort:\"Ð½ÐµÐ´._Ð¿Ð¾Ð½._ÑƒÑ‚Ð¾._ÑÑ€Ðµ._Ñ‡ÐµÑ‚._Ð¿ÐµÑ‚._ÑÑƒÐ±.\".split(\"_\"),weekdaysMin:\"Ð½Ðµ_Ð¿Ð¾_ÑƒÑ‚_ÑÑ€_Ñ‡Ðµ_Ð¿Ðµ_ÑÑƒ\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"D. M. YYYY.\",LL:\"D. MMMM YYYY.\",LLL:\"D. MMMM YYYY. H:mm\",LLLL:\"dddd, D. MMMM YYYY. H:mm\"},calendar:{sameDay:\"[Ð´Ð°Ð½Ð°Ñ Ñƒ] LT\",nextDay:\"[ÑÑƒÑ‚Ñ€Ð° Ñƒ] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[Ñƒ] [Ð½ÐµÐ´ÐµÑ™Ñƒ] [Ñƒ] LT\";case 3:return\"[Ñƒ] [ÑÑ€ÐµÐ´Ñƒ] [Ñƒ] LT\";case 6:return\"[Ñƒ] [ÑÑƒÐ±Ð¾Ñ‚Ñƒ] [Ñƒ] LT\";case 1:case 2:case 4:case 5:return\"[Ñƒ] dddd [Ñƒ] LT\"}},lastDay:\"[Ñ˜ÑƒÑ‡Ðµ Ñƒ] LT\",lastWeek:function(){return[\"[Ð¿Ñ€Ð¾ÑˆÐ»Ðµ] [Ð½ÐµÐ´ÐµÑ™Ðµ] [Ñƒ] LT\",\"[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [Ð¿Ð¾Ð½ÐµÐ´ÐµÑ™ÐºÐ°] [Ñƒ] LT\",\"[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [ÑƒÑ‚Ð¾Ñ€ÐºÐ°] [Ñƒ] LT\",\"[Ð¿Ñ€Ð¾ÑˆÐ»Ðµ] [ÑÑ€ÐµÐ´Ðµ] [Ñƒ] LT\",\"[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [Ñ‡ÐµÑ‚Ð²Ñ€Ñ‚ÐºÐ°] [Ñƒ] LT\",\"[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [Ð¿ÐµÑ‚ÐºÐ°] [Ñƒ] LT\",\"[Ð¿Ñ€Ð¾ÑˆÐ»Ðµ] [ÑÑƒÐ±Ð¾Ñ‚Ðµ] [Ñƒ] LT\"][this.day()]},sameElse:\"L\"},relativeTime:{future:\"Ð·Ð° %s\",past:\"Ð¿Ñ€Ðµ %s\",s:\"Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ ÑÐµÐºÑƒÐ½Ð´Ð¸\",ss:translator.translate,m:translator.translate,mm:translator.translate,h:translator.translate,hh:translator.translate,d:\"Ð´Ð°Ð½\",dd:translator.translate,M:\"Ð¼ÐµÑÐµÑ†\",MM:translator.translate,y:\"Ð³Ð¾Ð´Ð¸Ð½Ñƒ\",yy:translator.translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"ss\",{months:\"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split(\"_\"),monthsShort:\"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo\".split(\"_\"),weekdays:\"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo\".split(\"_\"),weekdaysShort:\"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg\".split(\"_\"),weekdaysMin:\"Li_Us_Lb_Lt_Ls_Lh_Ug\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendar:{sameDay:\"[Namuhla nga] LT\",nextDay:\"[Kusasa nga] LT\",nextWeek:\"dddd [nga] LT\",lastDay:\"[Itolo nga] LT\",lastWeek:\"dddd [leliphelile] [nga] LT\",sameElse:\"L\"},relativeTime:{future:\"nga %s\",past:\"wenteka nga %s\",s:\"emizuzwana lomcane\",ss:\"%d mzuzwana\",m:\"umzuzu\",mm:\"%d emizuzu\",h:\"lihora\",hh:\"%d emahora\",d:\"lilanga\",dd:\"%d emalanga\",M:\"inyanga\",MM:\"%d tinyanga\",y:\"umnyaka\",yy:\"%d iminyaka\"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(hours,minutes,isLower){return hours&lt;11?\"ekuseni\":hours&lt;15?\"emini\":hours&lt;19?\"entsambama\":\"ebusuku\"},meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"ekuseni\"===meridiem?hour:\"emini\"===meridiem?hour&gt;=11?hour:hour+12:\"entsambama\"===meridiem||\"ebusuku\"===meridiem?0===hour?0:hour+12:void 0},dayOfMonthOrdinalParse:/\\d{1,2}/,ordinal:\"%d\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"sv\",{months:\"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),weekdays:\"sÃ¶ndag_mÃ¥ndag_tisdag_onsdag_torsdag_fredag_lÃ¶rdag\".split(\"_\"),weekdaysShort:\"sÃ¶n_mÃ¥n_tis_ons_tor_fre_lÃ¶r\".split(\"_\"),weekdaysMin:\"sÃ¶_mÃ¥_ti_on_to_fr_lÃ¶\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [kl.] HH:mm\",LLLL:\"dddd D MMMM YYYY [kl.] HH:mm\",lll:\"D MMM YYYY HH:mm\",llll:\"ddd D MMM YYYY HH:mm\"},calendar:{sameDay:\"[Idag] LT\",nextDay:\"[Imorgon] LT\",lastDay:\"[IgÃ¥r] LT\",nextWeek:\"[PÃ¥] dddd LT\",lastWeek:\"[I] dddd[s] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"fÃ¶r %s sedan\",s:\"nÃ¥gra sekunder\",ss:\"%d sekunder\",m:\"en minut\",mm:\"%d minuter\",h:\"en timme\",hh:\"%d timmar\",d:\"en dag\",dd:\"%d dagar\",M:\"en mÃ¥nad\",MM:\"%d mÃ¥nader\",y:\"ett Ã¥r\",yy:\"%d Ã¥r\"},dayOfMonthOrdinalParse:/\\d{1,2}(\\:e|\\:a)/,ordinal:function(number){var b=number%10;return number+(1==~~(number%100/10)?\":e\":1===b?\":a\":2===b?\":a\":\":e\")},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"sw\",{months:\"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba\".split(\"_\"),monthsShort:\"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des\".split(\"_\"),weekdays:\"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi\".split(\"_\"),weekdaysShort:\"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos\".split(\"_\"),weekdaysMin:\"J2_J3_J4_J5_Al_Ij_J1\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"hh:mm A\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[leo saa] LT\",nextDay:\"[kesho saa] LT\",nextWeek:\"[wiki ijayo] dddd [saat] LT\",lastDay:\"[jana] LT\",lastWeek:\"[wiki iliyopita] dddd [saat] LT\",sameElse:\"L\"},relativeTime:{future:\"%s baadaye\",past:\"tokea %s\",s:\"hivi punde\",ss:\"sekunde %d\",m:\"dakika moja\",mm:\"dakika %d\",h:\"saa limoja\",hh:\"masaa %d\",d:\"siku moja\",dd:\"siku %d\",M:\"mwezi mmoja\",MM:\"miezi %d\",y:\"mwaka mmoja\",yy:\"miaka %d\"},week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var symbolMap={1:\"à¯§\",2:\"à¯¨\",3:\"à¯©\",4:\"à¯ª\",5:\"à¯«\",6:\"à¯¬\",7:\"à¯­\",8:\"à¯®\",9:\"à¯¯\",0:\"à¯¦\"},numberMap={\"à¯§\":\"1\",\"à¯¨\":\"2\",\"à¯©\":\"3\",\"à¯ª\":\"4\",\"à¯«\":\"5\",\"à¯¬\":\"6\",\"à¯­\":\"7\",\"à¯®\":\"8\",\"à¯¯\":\"9\",\"à¯¦\":\"0\"};moment.defineLocale(\"ta\",{months:\"à®œà®©à®µà®°à®¿_à®ªà®¿à®ªà¯à®°à®µà®°à®¿_à®®à®¾à®°à¯à®šà¯_à®à®ªà¯à®°à®²à¯_à®®à¯‡_à®œà¯‚à®©à¯_à®œà¯‚à®²à¯ˆ_à®†à®•à®¸à¯à®Ÿà¯_à®šà¯†à®ªà¯à®Ÿà¯†à®®à¯à®ªà®°à¯_à®…à®•à¯à®Ÿà¯‡à®¾à®ªà®°à¯_à®¨à®µà®®à¯à®ªà®°à¯_à®Ÿà®¿à®šà®®à¯à®ªà®°à¯\".split(\"_\"),monthsShort:\"à®œà®©à®µà®°à®¿_à®ªà®¿à®ªà¯à®°à®µà®°à®¿_à®®à®¾à®°à¯à®šà¯_à®à®ªà¯à®°à®²à¯_à®®à¯‡_à®œà¯‚à®©à¯_à®œà¯‚à®²à¯ˆ_à®†à®•à®¸à¯à®Ÿà¯_à®šà¯†à®ªà¯à®Ÿà¯†à®®à¯à®ªà®°à¯_à®…à®•à¯à®Ÿà¯‡à®¾à®ªà®°à¯_à®¨à®µà®®à¯à®ªà®°à¯_à®Ÿà®¿à®šà®®à¯à®ªà®°à¯\".split(\"_\"),weekdays:\"à®žà®¾à®¯à®¿à®±à¯à®±à¯à®•à¯à®•à®¿à®´à®®à¯ˆ_à®¤à®¿à®™à¯à®•à®Ÿà¯à®•à®¿à®´à®®à¯ˆ_à®šà¯†à®µà¯à®µà®¾à®¯à¯à®•à®¿à®´à®®à¯ˆ_à®ªà¯à®¤à®©à¯à®•à®¿à®´à®®à¯ˆ_à®µà®¿à®¯à®¾à®´à®•à¯à®•à®¿à®´à®®à¯ˆ_à®µà¯†à®³à¯à®³à®¿à®•à¯à®•à®¿à®´à®®à¯ˆ_à®šà®©à®¿à®•à¯à®•à®¿à®´à®®à¯ˆ\".split(\"_\"),weekdaysShort:\"à®žà®¾à®¯à®¿à®±à¯_à®¤à®¿à®™à¯à®•à®³à¯_à®šà¯†à®µà¯à®µà®¾à®¯à¯_à®ªà¯à®¤à®©à¯_à®µà®¿à®¯à®¾à®´à®©à¯_à®µà¯†à®³à¯à®³à®¿_à®šà®©à®¿\".split(\"_\"),weekdaysMin:\"à®žà®¾_à®¤à®¿_à®šà¯†_à®ªà¯_à®µà®¿_à®µà¯†_à®š\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, HH:mm\",LLLL:\"dddd, D MMMM YYYY, HH:mm\"},calendar:{sameDay:\"[à®‡à®©à¯à®±à¯] LT\",nextDay:\"[à®¨à®¾à®³à¯ˆ] LT\",nextWeek:\"dddd, LT\",lastDay:\"[à®¨à¯‡à®±à¯à®±à¯] LT\",lastWeek:\"[à®•à®Ÿà®¨à¯à®¤ à®µà®¾à®°à®®à¯] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s à®‡à®²à¯\",past:\"%s à®®à¯à®©à¯\",s:\"à®’à®°à¯ à®šà®¿à®² à®µà®¿à®¨à®¾à®Ÿà®¿à®•à®³à¯\",ss:\"%d à®µà®¿à®¨à®¾à®Ÿà®¿à®•à®³à¯\",m:\"à®’à®°à¯ à®¨à®¿à®®à®¿à®Ÿà®®à¯\",mm:\"%d à®¨à®¿à®®à®¿à®Ÿà®™à¯à®•à®³à¯\",h:\"à®’à®°à¯ à®®à®£à®¿ à®¨à¯‡à®°à®®à¯\",hh:\"%d à®®à®£à®¿ à®¨à¯‡à®°à®®à¯\",d:\"à®’à®°à¯ à®¨à®¾à®³à¯\",dd:\"%d à®¨à®¾à®Ÿà¯à®•à®³à¯\",M:\"à®’à®°à¯ à®®à®¾à®¤à®®à¯\",MM:\"%d à®®à®¾à®¤à®™à¯à®•à®³à¯\",y:\"à®’à®°à¯ à®µà®°à¯à®Ÿà®®à¯\",yy:\"%d à®†à®£à¯à®Ÿà¯à®•à®³à¯\"},dayOfMonthOrdinalParse:/\\d{1,2}à®µà®¤à¯/,ordinal:function(number){return number+\"à®µà®¤à¯\"},preparse:function(string){return string.replace(/[à¯§à¯¨à¯©à¯ªà¯«à¯¬à¯­à¯®à¯¯à¯¦]/g,(function(match){return numberMap[match]}))},postformat:function(string){return string.replace(/\\d/g,(function(match){return symbolMap[match]}))},meridiemParse:/à®¯à®¾à®®à®®à¯|à®µà¯ˆà®•à®±à¯ˆ|à®•à®¾à®²à¯ˆ|à®¨à®£à¯à®ªà®•à®²à¯|à®Žà®±à¯à®ªà®¾à®Ÿà¯|à®®à®¾à®²à¯ˆ/,meridiem:function(hour,minute,isLower){return hour&lt;2?\" à®¯à®¾à®®à®®à¯\":hour&lt;6?\" à®µà¯ˆà®•à®±à¯ˆ\":hour&lt;10?\" à®•à®¾à®²à¯ˆ\":hour&lt;14?\" à®¨à®£à¯à®ªà®•à®²à¯\":hour&lt;18?\" à®Žà®±à¯à®ªà®¾à®Ÿà¯\":hour&lt;22?\" à®®à®¾à®²à¯ˆ\":\" à®¯à®¾à®®à®®à¯\"},meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"à®¯à®¾à®®à®®à¯\"===meridiem?hour&lt;2?hour:hour+12:\"à®µà¯ˆà®•à®±à¯ˆ\"===meridiem||\"à®•à®¾à®²à¯ˆ\"===meridiem?hour:\"à®¨à®£à¯à®ªà®•à®²à¯\"===meridiem&amp;&amp;hour&gt;=10?hour:hour+12},week:{dow:0,doy:6}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"te\",{months:\"à°œà°¨à°µà°°à°¿_à°«à°¿à°¬à±à°°à°µà°°à°¿_à°®à°¾à°°à±à°šà°¿_à°à°ªà±à°°à°¿à°²à±_à°®à±‡_à°œà±‚à°¨à±_à°œà±à°²à±ˆ_à°†à°—à°¸à±à°Ÿà±_à°¸à±†à°ªà±à°Ÿà±†à°‚à°¬à°°à±_à°…à°•à±à°Ÿà±‹à°¬à°°à±_à°¨à°µà°‚à°¬à°°à±_à°¡à°¿à°¸à±†à°‚à°¬à°°à±\".split(\"_\"),monthsShort:\"à°œà°¨._à°«à°¿à°¬à±à°°._à°®à°¾à°°à±à°šà°¿_à°à°ªà±à°°à°¿._à°®à±‡_à°œà±‚à°¨à±_à°œà±à°²à±ˆ_à°†à°—._à°¸à±†à°ªà±._à°…à°•à±à°Ÿà±‹._à°¨à°µ._à°¡à°¿à°¸à±†.\".split(\"_\"),monthsParseExact:!0,weekdays:\"à°†à°¦à°¿à°µà°¾à°°à°‚_à°¸à±‹à°®à°µà°¾à°°à°‚_à°®à°‚à°—à°³à°µà°¾à°°à°‚_à°¬à±à°§à°µà°¾à°°à°‚_à°—à±à°°à±à°µà°¾à°°à°‚_à°¶à±à°•à±à°°à°µà°¾à°°à°‚_à°¶à°¨à°¿à°µà°¾à°°à°‚\".split(\"_\"),weekdaysShort:\"à°†à°¦à°¿_à°¸à±‹à°®_à°®à°‚à°—à°³_à°¬à±à°§_à°—à±à°°à±_à°¶à±à°•à±à°°_à°¶à°¨à°¿\".split(\"_\"),weekdaysMin:\"à°†_à°¸à±‹_à°®à°‚_à°¬à±_à°—à±_à°¶à±_à°¶\".split(\"_\"),longDateFormat:{LT:\"A h:mm\",LTS:\"A h:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm\",LLLL:\"dddd, D MMMM YYYY, A h:mm\"},calendar:{sameDay:\"[à°¨à±‡à°¡à±] LT\",nextDay:\"[à°°à±‡à°ªà±] LT\",nextWeek:\"dddd, LT\",lastDay:\"[à°¨à°¿à°¨à±à°¨] LT\",lastWeek:\"[à°—à°¤] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s à°²à±‹\",past:\"%s à°•à±à°°à°¿à°¤à°‚\",s:\"à°•à±Šà°¨à±à°¨à°¿ à°•à±à°·à°£à°¾à°²à±\",ss:\"%d à°¸à±†à°•à°¨à±à°²à±\",m:\"à°’à°• à°¨à°¿à°®à°¿à°·à°‚\",mm:\"%d à°¨à°¿à°®à°¿à°·à°¾à°²à±\",h:\"à°’à°• à°—à°‚à°Ÿ\",hh:\"%d à°—à°‚à°Ÿà°²à±\",d:\"à°’à°• à°°à±‹à°œà±\",dd:\"%d à°°à±‹à°œà±à°²à±\",M:\"à°’à°• à°¨à±†à°²\",MM:\"%d à°¨à±†à°²à°²à±\",y:\"à°’à°• à°¸à°‚à°µà°¤à±à°¸à°°à°‚\",yy:\"%d à°¸à°‚à°µà°¤à±à°¸à°°à°¾à°²à±\"},dayOfMonthOrdinalParse:/\\d{1,2}à°µ/,ordinal:\"%dà°µ\",meridiemParse:/à°°à°¾à°¤à±à°°à°¿|à°‰à°¦à°¯à°‚|à°®à°§à±à°¯à°¾à°¹à±à°¨à°‚|à°¸à°¾à°¯à°‚à°¤à±à°°à°‚/,meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"à°°à°¾à°¤à±à°°à°¿\"===meridiem?hour&lt;4?hour:hour+12:\"à°‰à°¦à°¯à°‚\"===meridiem?hour:\"à°®à°§à±à°¯à°¾à°¹à±à°¨à°‚\"===meridiem?hour&gt;=10?hour:hour+12:\"à°¸à°¾à°¯à°‚à°¤à±à°°à°‚\"===meridiem?hour+12:void 0},meridiem:function(hour,minute,isLower){return hour&lt;4?\"à°°à°¾à°¤à±à°°à°¿\":hour&lt;10?\"à°‰à°¦à°¯à°‚\":hour&lt;17?\"à°®à°§à±à°¯à°¾à°¹à±à°¨à°‚\":hour&lt;20?\"à°¸à°¾à°¯à°‚à°¤à±à°°à°‚\":\"à°°à°¾à°¤à±à°°à°¿\"},week:{dow:0,doy:6}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"tet\",{months:\"Janeiru_Fevereiru_Marsu_Abril_Maiu_JuÃ±u_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru\".split(\"_\"),monthsShort:\"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez\".split(\"_\"),weekdays:\"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu\".split(\"_\"),weekdaysShort:\"Dom_Seg_Ters_Kua_Kint_Sest_Sab\".split(\"_\"),weekdaysMin:\"Do_Seg_Te_Ku_Ki_Ses_Sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Ohin iha] LT\",nextDay:\"[Aban iha] LT\",nextWeek:\"dddd [iha] LT\",lastDay:\"[Horiseik iha] LT\",lastWeek:\"dddd [semana kotuk] [iha] LT\",sameElse:\"L\"},relativeTime:{future:\"iha %s\",past:\"%s liuba\",s:\"segundu balun\",ss:\"segundu %d\",m:\"minutu ida\",mm:\"minutu %d\",h:\"oras ida\",hh:\"oras %d\",d:\"loron ida\",dd:\"loron %d\",M:\"fulan ida\",MM:\"fulan %d\",y:\"tinan ida\",yy:\"tinan %d\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(number){var b=number%10;return number+(1==~~(number%100/10)?\"th\":1===b?\"st\":2===b?\"nd\":3===b?\"rd\":\"th\")},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var suffixes={0:\"-ÑƒÐ¼\",1:\"-ÑƒÐ¼\",2:\"-ÑŽÐ¼\",3:\"-ÑŽÐ¼\",4:\"-ÑƒÐ¼\",5:\"-ÑƒÐ¼\",6:\"-ÑƒÐ¼\",7:\"-ÑƒÐ¼\",8:\"-ÑƒÐ¼\",9:\"-ÑƒÐ¼\",10:\"-ÑƒÐ¼\",12:\"-ÑƒÐ¼\",13:\"-ÑƒÐ¼\",20:\"-ÑƒÐ¼\",30:\"-ÑŽÐ¼\",40:\"-ÑƒÐ¼\",50:\"-ÑƒÐ¼\",60:\"-ÑƒÐ¼\",70:\"-ÑƒÐ¼\",80:\"-ÑƒÐ¼\",90:\"-ÑƒÐ¼\",100:\"-ÑƒÐ¼\"};moment.defineLocale(\"tg\",{months:{format:\"ÑÐ½Ð²Ð°Ñ€Ð¸_Ñ„ÐµÐ²Ñ€Ð°Ð»Ð¸_Ð¼Ð°Ñ€Ñ‚Ð¸_Ð°Ð¿Ñ€ÐµÐ»Ð¸_Ð¼Ð°Ð¹Ð¸_Ð¸ÑŽÐ½Ð¸_Ð¸ÑŽÐ»Ð¸_Ð°Ð²Ð³ÑƒÑÑ‚Ð¸_ÑÐµÐ½Ñ‚ÑÐ±Ñ€Ð¸_Ð¾ÐºÑ‚ÑÐ±Ñ€Ð¸_Ð½Ð¾ÑÐ±Ñ€Ð¸_Ð´ÐµÐºÐ°Ð±Ñ€Ð¸\".split(\"_\"),standalone:\"ÑÐ½Ð²Ð°Ñ€_Ñ„ÐµÐ²Ñ€Ð°Ð»_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€_Ð¾ÐºÑ‚ÑÐ±Ñ€_Ð½Ð¾ÑÐ±Ñ€_Ð´ÐµÐºÐ°Ð±Ñ€\".split(\"_\")},monthsShort:\"ÑÐ½Ð²_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³_ÑÐµÐ½_Ð¾ÐºÑ‚_Ð½Ð¾Ñ_Ð´ÐµÐº\".split(\"_\"),weekdays:\"ÑÐºÑˆÐ°Ð½Ð±Ðµ_Ð´ÑƒÑˆÐ°Ð½Ð±Ðµ_ÑÐµÑˆÐ°Ð½Ð±Ðµ_Ñ‡Ð¾Ñ€ÑˆÐ°Ð½Ð±Ðµ_Ð¿Ð°Ð½Ò·ÑˆÐ°Ð½Ð±Ðµ_Ò·ÑƒÐ¼ÑŠÐ°_ÑˆÐ°Ð½Ð±Ðµ\".split(\"_\"),weekdaysShort:\"ÑÑˆÐ±_Ð´ÑˆÐ±_ÑÑˆÐ±_Ñ‡ÑˆÐ±_Ð¿ÑˆÐ±_Ò·ÑƒÐ¼_ÑˆÐ½Ð±\".split(\"_\"),weekdaysMin:\"ÑÑˆ_Ð´Ñˆ_ÑÑˆ_Ñ‡Ñˆ_Ð¿Ñˆ_Ò·Ð¼_ÑˆÐ±\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Ð˜Ð¼Ñ€Ó¯Ð· ÑÐ¾Ð°Ñ‚Ð¸] LT\",nextDay:\"[Ð¤Ð°Ñ€Ð´Ð¾ ÑÐ¾Ð°Ñ‚Ð¸] LT\",lastDay:\"[Ð”Ð¸Ñ€Ó¯Ð· ÑÐ¾Ð°Ñ‚Ð¸] LT\",nextWeek:\"dddd[Ð¸] [Ò³Ð°Ñ„Ñ‚Ð°Ð¸ Ð¾ÑÐ½Ð´Ð° ÑÐ¾Ð°Ñ‚Ð¸] LT\",lastWeek:\"dddd[Ð¸] [Ò³Ð°Ñ„Ñ‚Ð°Ð¸ Ð³ÑƒÐ·Ð°ÑˆÑ‚Ð° ÑÐ¾Ð°Ñ‚Ð¸] LT\",sameElse:\"L\"},relativeTime:{future:\"Ð±Ð°ÑŠÐ´Ð¸ %s\",past:\"%s Ð¿ÐµÑˆ\",s:\"ÑÐºÑ‡Ð°Ð½Ð´ ÑÐ¾Ð½Ð¸Ñ\",m:\"ÑÐº Ð´Ð°Ò›Ð¸Ò›Ð°\",mm:\"%d Ð´Ð°Ò›Ð¸Ò›Ð°\",h:\"ÑÐº ÑÐ¾Ð°Ñ‚\",hh:\"%d ÑÐ¾Ð°Ñ‚\",d:\"ÑÐº Ñ€Ó¯Ð·\",dd:\"%d Ñ€Ó¯Ð·\",M:\"ÑÐº Ð¼Ð¾Ò³\",MM:\"%d Ð¼Ð¾Ò³\",y:\"ÑÐº ÑÐ¾Ð»\",yy:\"%d ÑÐ¾Ð»\"},meridiemParse:/ÑˆÐ°Ð±|ÑÑƒÐ±Ò³|Ñ€Ó¯Ð·|Ð±ÐµÐ³Ð¾Ò³/,meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"ÑˆÐ°Ð±\"===meridiem?hour&lt;4?hour:hour+12:\"ÑÑƒÐ±Ò³\"===meridiem?hour:\"Ñ€Ó¯Ð·\"===meridiem?hour&gt;=11?hour:hour+12:\"Ð±ÐµÐ³Ð¾Ò³\"===meridiem?hour+12:void 0},meridiem:function(hour,minute,isLower){return hour&lt;4?\"ÑˆÐ°Ð±\":hour&lt;11?\"ÑÑƒÐ±Ò³\":hour&lt;16?\"Ñ€Ó¯Ð·\":hour&lt;19?\"Ð±ÐµÐ³Ð¾Ò³\":\"ÑˆÐ°Ð±\"},dayOfMonthOrdinalParse:/\\d{1,2}-(ÑƒÐ¼|ÑŽÐ¼)/,ordinal:function(number){return number+(suffixes[number]||suffixes[number%10]||suffixes[number&gt;=100?100:null])},week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"th\",{months:\"à¸¡à¸à¸£à¸²à¸„à¸¡_à¸à¸¸à¸¡à¸&nbsp;à¸²à¸žà¸±à¸™à¸˜à¹Œ_à¸¡à¸µà¸™à¸²à¸„à¸¡_à¹€à¸¡à¸©à¸²à¸¢à¸™_à¸žà¸¤à¸©à¸&nbsp;à¸²à¸„à¸¡_à¸¡à¸´à¸–à¸¸à¸™à¸²à¸¢à¸™_à¸à¸£à¸à¸Žà¸²à¸„à¸¡_à¸ªà¸´à¸‡à¸«à¸²à¸„à¸¡_à¸à¸±à¸™à¸¢à¸²à¸¢à¸™_à¸•à¸¸à¸¥à¸²à¸„à¸¡_à¸žà¸¤à¸¨à¸ˆà¸´à¸à¸²à¸¢à¸™_à¸˜à¸±à¸™à¸§à¸²à¸„à¸¡\".split(\"_\"),monthsShort:\"à¸¡.à¸„._à¸.à¸ž._à¸¡à¸µ.à¸„._à¹€à¸¡.à¸¢._à¸ž.à¸„._à¸¡à¸´.à¸¢._à¸.à¸„._à¸ª.à¸„._à¸.à¸¢._à¸•.à¸„._à¸ž.à¸¢._à¸˜.à¸„.\".split(\"_\"),monthsParseExact:!0,weekdays:\"à¸­à¸²à¸—à¸´à¸•à¸¢à¹Œ_à¸ˆà¸±à¸™à¸—à¸£à¹Œ_à¸­à¸±à¸‡à¸„à¸²à¸£_à¸žà¸¸à¸˜_à¸žà¸¤à¸«à¸±à¸ªà¸šà¸”à¸µ_à¸¨à¸¸à¸à¸£à¹Œ_à¹€à¸ªà¸²à¸£à¹Œ\".split(\"_\"),weekdaysShort:\"à¸­à¸²à¸—à¸´à¸•à¸¢à¹Œ_à¸ˆà¸±à¸™à¸—à¸£à¹Œ_à¸­à¸±à¸‡à¸„à¸²à¸£_à¸žà¸¸à¸˜_à¸žà¸¤à¸«à¸±à¸ª_à¸¨à¸¸à¸à¸£à¹Œ_à¹€à¸ªà¸²à¸£à¹Œ\".split(\"_\"),weekdaysMin:\"à¸­à¸²._à¸ˆ._à¸­._à¸ž._à¸žà¸¤._à¸¨._à¸ª.\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY à¹€à¸§à¸¥à¸² H:mm\",LLLL:\"à¸§à¸±à¸™ddddà¸—à¸µà¹ˆ D MMMM YYYY à¹€à¸§à¸¥à¸² H:mm\"},meridiemParse:/à¸à¹ˆà¸­à¸™à¹€à¸—à¸µà¹ˆà¸¢à¸‡|à¸«à¸¥à¸±à¸‡à¹€à¸—à¸µà¹ˆà¸¢à¸‡/,isPM:function(input){return\"à¸«à¸¥à¸±à¸‡à¹€à¸—à¸µà¹ˆà¸¢à¸‡\"===input},meridiem:function(hour,minute,isLower){return hour&lt;12?\"à¸à¹ˆà¸­à¸™à¹€à¸—à¸µà¹ˆà¸¢à¸‡\":\"à¸«à¸¥à¸±à¸‡à¹€à¸—à¸µà¹ˆà¸¢à¸‡\"},calendar:{sameDay:\"[à¸§à¸±à¸™à¸™à¸µà¹‰ à¹€à¸§à¸¥à¸²] LT\",nextDay:\"[à¸žà¸£à¸¸à¹ˆà¸‡à¸™à¸µà¹‰ à¹€à¸§à¸¥à¸²] LT\",nextWeek:\"dddd[à¸«à¸™à¹‰à¸² à¹€à¸§à¸¥à¸²] LT\",lastDay:\"[à¹€à¸¡à¸·à¹ˆà¸­à¸§à¸²à¸™à¸™à¸µà¹‰ à¹€à¸§à¸¥à¸²] LT\",lastWeek:\"[à¸§à¸±à¸™]dddd[à¸—à¸µà¹ˆà¹à¸¥à¹‰à¸§ à¹€à¸§à¸¥à¸²] LT\",sameElse:\"L\"},relativeTime:{future:\"à¸­à¸µà¸ %s\",past:\"%sà¸—à¸µà¹ˆà¹à¸¥à¹‰à¸§\",s:\"à¹„à¸¡à¹ˆà¸à¸µà¹ˆà¸§à¸´à¸™à¸²à¸—à¸µ\",ss:\"%d à¸§à¸´à¸™à¸²à¸—à¸µ\",m:\"1 à¸™à¸²à¸—à¸µ\",mm:\"%d à¸™à¸²à¸—à¸µ\",h:\"1 à¸Šà¸±à¹ˆà¸§à¹‚à¸¡à¸‡\",hh:\"%d à¸Šà¸±à¹ˆà¸§à¹‚à¸¡à¸‡\",d:\"1 à¸§à¸±à¸™\",dd:\"%d à¸§à¸±à¸™\",w:\"1 à¸ªà¸±à¸›à¸”à¸²à¸«à¹Œ\",ww:\"%d à¸ªà¸±à¸›à¸”à¸²à¸«à¹Œ\",M:\"1 à¹€à¸”à¸·à¸­à¸™\",MM:\"%d à¹€à¸”à¸·à¸­à¸™\",y:\"1 à¸›à¸µ\",yy:\"%d à¸›à¸µ\"}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var suffixes={1:\"'inji\",5:\"'inji\",8:\"'inji\",70:\"'inji\",80:\"'inji\",2:\"'nji\",7:\"'nji\",20:\"'nji\",50:\"'nji\",3:\"'Ã¼nji\",4:\"'Ã¼nji\",100:\"'Ã¼nji\",6:\"'njy\",9:\"'unjy\",10:\"'unjy\",30:\"'unjy\",60:\"'ynjy\",90:\"'ynjy\"};moment.defineLocale(\"tk\",{months:\"Ãanwar_Fewral_Mart_Aprel_MaÃ½_IÃ½un_IÃ½ul_Awgust_SentÃ½abr_OktÃ½abr_NoÃ½abr_Dekabr\".split(\"_\"),monthsShort:\"Ãan_Few_Mar_Apr_MaÃ½_IÃ½n_IÃ½l_Awg_Sen_Okt_NoÃ½_Dek\".split(\"_\"),weekdays:\"ÃekÅŸenbe_DuÅŸenbe_SiÅŸenbe_Ã‡arÅŸenbe_PenÅŸenbe_Anna_Åženbe\".split(\"_\"),weekdaysShort:\"Ãek_DuÅŸ_SiÅŸ_Ã‡ar_Pen_Ann_Åžen\".split(\"_\"),weekdaysMin:\"Ãk_DÅŸ_SÅŸ_Ã‡r_Pn_An_Åžn\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[bugÃ¼n sagat] LT\",nextDay:\"[ertir sagat] LT\",nextWeek:\"[indiki] dddd [sagat] LT\",lastDay:\"[dÃ¼Ã½n] LT\",lastWeek:\"[geÃ§en] dddd [sagat] LT\",sameElse:\"L\"},relativeTime:{future:\"%s soÅˆ\",past:\"%s Ã¶Åˆ\",s:\"birnÃ¤Ã§e sekunt\",m:\"bir minut\",mm:\"%d minut\",h:\"bir sagat\",hh:\"%d sagat\",d:\"bir gÃ¼n\",dd:\"%d gÃ¼n\",M:\"bir aÃ½\",MM:\"%d aÃ½\",y:\"bir Ã½yl\",yy:\"%d Ã½yl\"},ordinal:function(number,period){switch(period){case\"d\":case\"D\":case\"Do\":case\"DD\":return number;default:if(0===number)return number+\"'unjy\";var a=number%10;return number+(suffixes[a]||suffixes[number%100-a]||suffixes[number&gt;=100?100:null])}},week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"tl-ph\",{months:\"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre\".split(\"_\"),monthsShort:\"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis\".split(\"_\"),weekdays:\"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado\".split(\"_\"),weekdaysShort:\"Lin_Lun_Mar_Miy_Huw_Biy_Sab\".split(\"_\"),weekdaysMin:\"Li_Lu_Ma_Mi_Hu_Bi_Sab\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"MM/D/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY HH:mm\",LLLL:\"dddd, MMMM DD, YYYY HH:mm\"},calendar:{sameDay:\"LT [ngayong araw]\",nextDay:\"[Bukas ng] LT\",nextWeek:\"LT [sa susunod na] dddd\",lastDay:\"LT [kahapon]\",lastWeek:\"LT [noong nakaraang] dddd\",sameElse:\"L\"},relativeTime:{future:\"sa loob ng %s\",past:\"%s ang nakalipas\",s:\"ilang segundo\",ss:\"%d segundo\",m:\"isang minuto\",mm:\"%d minuto\",h:\"isang oras\",hh:\"%d oras\",d:\"isang araw\",dd:\"%d araw\",M:\"isang buwan\",MM:\"%d buwan\",y:\"isang taon\",yy:\"%d taon\"},dayOfMonthOrdinalParse:/\\d{1,2}/,ordinal:function(number){return number},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var numbersNouns=\"pagh_waâ€™_chaâ€™_wej_loS_vagh_jav_Soch_chorgh_Hut\".split(\"_\");function translate(number,withoutSuffix,string,isFuture){var numberNoun=function(number){var hundred=Math.floor(number%1e3/100),ten=Math.floor(number%100/10),one=number%10,word=\"\";return hundred&gt;0&amp;&amp;(word+=numbersNouns[hundred]+\"vatlh\"),ten&gt;0&amp;&amp;(word+=(\"\"!==word?\" \":\"\")+numbersNouns[ten]+\"maH\"),one&gt;0&amp;&amp;(word+=(\"\"!==word?\" \":\"\")+numbersNouns[one]),\"\"===word?\"pagh\":word}(number);switch(string){case\"ss\":return numberNoun+\" lup\";case\"mm\":return numberNoun+\" tup\";case\"hh\":return numberNoun+\" rep\";case\"dd\":return numberNoun+\" jaj\";case\"MM\":return numberNoun+\" jar\";case\"yy\":return numberNoun+\" DIS\"}}moment.defineLocale(\"tlh\",{months:\"teraâ€™ jar waâ€™_teraâ€™ jar chaâ€™_teraâ€™ jar wej_teraâ€™ jar loS_teraâ€™ jar vagh_teraâ€™ jar jav_teraâ€™ jar Soch_teraâ€™ jar chorgh_teraâ€™ jar Hut_teraâ€™ jar waâ€™maH_teraâ€™ jar waâ€™maH waâ€™_teraâ€™ jar waâ€™maH chaâ€™\".split(\"_\"),monthsShort:\"jar waâ€™_jar chaâ€™_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar waâ€™maH_jar waâ€™maH waâ€™_jar waâ€™maH chaâ€™\".split(\"_\"),monthsParseExact:!0,weekdays:\"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj\".split(\"_\"),weekdaysShort:\"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj\".split(\"_\"),weekdaysMin:\"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[DaHjaj] LT\",nextDay:\"[waâ€™leS] LT\",nextWeek:\"LLL\",lastDay:\"[waâ€™Huâ€™] LT\",lastWeek:\"LLL\",sameElse:\"L\"},relativeTime:{future:function(output){var time=output;return time=-1!==output.indexOf(\"jaj\")?time.slice(0,-3)+\"leS\":-1!==output.indexOf(\"jar\")?time.slice(0,-3)+\"waQ\":-1!==output.indexOf(\"DIS\")?time.slice(0,-3)+\"nem\":time+\" pIq\"},past:function(output){var time=output;return time=-1!==output.indexOf(\"jaj\")?time.slice(0,-3)+\"Huâ€™\":-1!==output.indexOf(\"jar\")?time.slice(0,-3)+\"wen\":-1!==output.indexOf(\"DIS\")?time.slice(0,-3)+\"ben\":time+\" ret\"},s:\"puS lup\",ss:translate,m:\"waâ€™ tup\",mm:translate,h:\"waâ€™ rep\",hh:translate,d:\"waâ€™ jaj\",dd:translate,M:\"waâ€™ jar\",MM:translate,y:\"waâ€™ DIS\",yy:translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var suffixes={1:\"'inci\",5:\"'inci\",8:\"'inci\",70:\"'inci\",80:\"'inci\",2:\"'nci\",7:\"'nci\",20:\"'nci\",50:\"'nci\",3:\"'Ã¼ncÃ¼\",4:\"'Ã¼ncÃ¼\",100:\"'Ã¼ncÃ¼\",6:\"'ncÄ±\",9:\"'uncu\",10:\"'uncu\",30:\"'uncu\",60:\"'Ä±ncÄ±\",90:\"'Ä±ncÄ±\"};moment.defineLocale(\"tr\",{months:\"Ocak_Åžubat_Mart_Nisan_MayÄ±s_Haziran_Temmuz_AÄŸustos_EylÃ¼l_Ekim_KasÄ±m_AralÄ±k\".split(\"_\"),monthsShort:\"Oca_Åžub_Mar_Nis_May_Haz_Tem_AÄŸu_Eyl_Eki_Kas_Ara\".split(\"_\"),weekdays:\"Pazar_Pazartesi_SalÄ±_Ã‡arÅŸamba_PerÅŸembe_Cuma_Cumartesi\".split(\"_\"),weekdaysShort:\"Paz_Pts_Sal_Ã‡ar_Per_Cum_Cts\".split(\"_\"),weekdaysMin:\"Pz_Pt_Sa_Ã‡a_Pe_Cu_Ct\".split(\"_\"),meridiem:function(hours,minutes,isLower){return hours&lt;12?isLower?\"Ã¶Ã¶\":\"Ã–Ã–\":isLower?\"Ã¶s\":\"Ã–S\"},meridiemParse:/Ã¶Ã¶|Ã–Ã–|Ã¶s|Ã–S/,isPM:function(input){return\"Ã¶s\"===input||\"Ã–S\"===input},longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[bugÃ¼n saat] LT\",nextDay:\"[yarÄ±n saat] LT\",nextWeek:\"[gelecek] dddd [saat] LT\",lastDay:\"[dÃ¼n] LT\",lastWeek:\"[geÃ§en] dddd [saat] LT\",sameElse:\"L\"},relativeTime:{future:\"%s sonra\",past:\"%s Ã¶nce\",s:\"birkaÃ§ saniye\",ss:\"%d saniye\",m:\"bir dakika\",mm:\"%d dakika\",h:\"bir saat\",hh:\"%d saat\",d:\"bir gÃ¼n\",dd:\"%d gÃ¼n\",w:\"bir hafta\",ww:\"%d hafta\",M:\"bir ay\",MM:\"%d ay\",y:\"bir yÄ±l\",yy:\"%d yÄ±l\"},ordinal:function(number,period){switch(period){case\"d\":case\"D\":case\"Do\":case\"DD\":return number;default:if(0===number)return number+\"'Ä±ncÄ±\";var a=number%10;return number+(suffixes[a]||suffixes[number%100-a]||suffixes[number&gt;=100?100:null])}},week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";function processRelativeTime(number,withoutSuffix,key,isFuture){var format={s:[\"viensas secunds\",\"'iensas secunds\"],ss:[number+\" secunds\",number+\" secunds\"],m:[\"'n mÃ­ut\",\"'iens mÃ­ut\"],mm:[number+\" mÃ­uts\",number+\" mÃ­uts\"],h:[\"'n Ã¾ora\",\"'iensa Ã¾ora\"],hh:[number+\" Ã¾oras\",number+\" Ã¾oras\"],d:[\"'n ziua\",\"'iensa ziua\"],dd:[number+\" ziuas\",number+\" ziuas\"],M:[\"'n mes\",\"'iens mes\"],MM:[number+\" mesen\",number+\" mesen\"],y:[\"'n ar\",\"'iens ar\"],yy:[number+\" ars\",number+\" ars\"]};return isFuture?format[key][0]:withoutSuffix?format[key][0]:format[key][1]}moment.defineLocale(\"tzl\",{months:\"Januar_Fevraglh_MarÃ§_AvrÃ¯u_Mai_GÃ¼n_Julia_Guscht_Setemvar_ListopÃ¤ts_Noemvar_Zecemvar\".split(\"_\"),monthsShort:\"Jan_Fev_Mar_Avr_Mai_GÃ¼n_Jul_Gus_Set_Lis_Noe_Zec\".split(\"_\"),weekdays:\"SÃºladi_LÃºneÃ§i_Maitzi_MÃ¡rcuri_XhÃºadi_ViÃ©nerÃ§i_SÃ¡turi\".split(\"_\"),weekdaysShort:\"SÃºl_LÃºn_Mai_MÃ¡r_XhÃº_ViÃ©_SÃ¡t\".split(\"_\"),weekdaysMin:\"SÃº_LÃº_Ma_MÃ¡_Xh_Vi_SÃ¡\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM [dallas] YYYY\",LLL:\"D. MMMM [dallas] YYYY HH.mm\",LLLL:\"dddd, [li] D. MMMM [dallas] YYYY HH.mm\"},meridiemParse:/d\\'o|d\\'a/i,isPM:function(input){return\"d'o\"===input.toLowerCase()},meridiem:function(hours,minutes,isLower){return hours&gt;11?isLower?\"d'o\":\"D'O\":isLower?\"d'a\":\"D'A\"},calendar:{sameDay:\"[oxhi Ã&nbsp;] LT\",nextDay:\"[demÃ&nbsp; Ã&nbsp;] LT\",nextWeek:\"dddd [Ã&nbsp;] LT\",lastDay:\"[ieiri Ã&nbsp;] LT\",lastWeek:\"[sÃ¼r el] dddd [lasteu Ã&nbsp;] LT\",sameElse:\"L\"},relativeTime:{future:\"osprei %s\",past:\"ja%s\",s:processRelativeTime,ss:processRelativeTime,m:processRelativeTime,mm:processRelativeTime,h:processRelativeTime,hh:processRelativeTime,d:processRelativeTime,dd:processRelativeTime,M:processRelativeTime,MM:processRelativeTime,y:processRelativeTime,yy:processRelativeTime},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"tzm\",{months:\"âµ‰âµâµâ´°âµ¢âµ”_â´±âµ•â´°âµ¢âµ•_âµŽâ´°âµ•âµš_âµ‰â´±âµ”âµ‰âµ”_âµŽâ´°âµ¢âµ¢âµ“_âµ¢âµ“âµâµ¢âµ“_âµ¢âµ“âµâµ¢âµ“âµ£_âµ–âµ“âµ›âµœ_âµ›âµ“âµœâ´°âµâ´±âµ‰âµ”_â´½âµŸâµ“â´±âµ•_âµâµ“âµ¡â´°âµâ´±âµ‰âµ”_â´·âµ“âµŠâµâ´±âµ‰âµ”\".split(\"_\"),monthsShort:\"âµ‰âµâµâ´°âµ¢âµ”_â´±âµ•â´°âµ¢âµ•_âµŽâ´°âµ•âµš_âµ‰â´±âµ”âµ‰âµ”_âµŽâ´°âµ¢âµ¢âµ“_âµ¢âµ“âµâµ¢âµ“_âµ¢âµ“âµâµ¢âµ“âµ£_âµ–âµ“âµ›âµœ_âµ›âµ“âµœâ´°âµâ´±âµ‰âµ”_â´½âµŸâµ“â´±âµ•_âµâµ“âµ¡â´°âµâ´±âµ‰âµ”_â´·âµ“âµŠâµâ´±âµ‰âµ”\".split(\"_\"),weekdays:\"â´°âµ™â´°âµŽâ´°âµ™_â´°âµ¢âµâ´°âµ™_â´°âµ™âµ‰âµâ´°âµ™_â´°â´½âµ”â´°âµ™_â´°â´½âµ¡â´°âµ™_â´°âµ™âµ‰âµŽâµ¡â´°âµ™_â´°âµ™âµ‰â´¹âµ¢â´°âµ™\".split(\"_\"),weekdaysShort:\"â´°âµ™â´°âµŽâ´°âµ™_â´°âµ¢âµâ´°âµ™_â´°âµ™âµ‰âµâ´°âµ™_â´°â´½âµ”â´°âµ™_â´°â´½âµ¡â´°âµ™_â´°âµ™âµ‰âµŽâµ¡â´°âµ™_â´°âµ™âµ‰â´¹âµ¢â´°âµ™\".split(\"_\"),weekdaysMin:\"â´°âµ™â´°âµŽâ´°âµ™_â´°âµ¢âµâ´°âµ™_â´°âµ™âµ‰âµâ´°âµ™_â´°â´½âµ”â´°âµ™_â´°â´½âµ¡â´°âµ™_â´°âµ™âµ‰âµŽâµ¡â´°âµ™_â´°âµ™âµ‰â´¹âµ¢â´°âµ™\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[â´°âµ™â´·âµ… â´´] LT\",nextDay:\"[â´°âµ™â´½â´° â´´] LT\",nextWeek:\"dddd [â´´] LT\",lastDay:\"[â´°âµšâ´°âµâµœ â´´] LT\",lastWeek:\"dddd [â´´] LT\",sameElse:\"L\"},relativeTime:{future:\"â´·â´°â´·âµ… âµ™ âµ¢â´°âµ %s\",past:\"âµ¢â´°âµ %s\",s:\"âµ‰âµŽâµ‰â´½\",ss:\"%d âµ‰âµŽâµ‰â´½\",m:\"âµŽâµ‰âµâµ“â´º\",mm:\"%d âµŽâµ‰âµâµ“â´º\",h:\"âµ™â´°âµ„â´°\",hh:\"%d âµœâ´°âµ™âµ™â´°âµ„âµ‰âµ\",d:\"â´°âµ™âµ™\",dd:\"%d oâµ™âµ™â´°âµ\",M:\"â´°âµ¢oâµ“âµ”\",MM:\"%d âµ‰âµ¢âµ¢âµ‰âµ”âµ\",y:\"â´°âµ™â´³â´°âµ™\",yy:\"%d âµ‰âµ™â´³â´°âµ™âµ\"},week:{dow:6,doy:12}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"tzm-latn\",{months:\"innayr_brË¤ayrË¤_marË¤sË¤_ibrir_mayyw_ywnyw_ywlywz_É£wÅ¡t_Å¡wtanbir_ktË¤wbrË¤_nwwanbir_dwjnbir\".split(\"_\"),monthsShort:\"innayr_brË¤ayrË¤_marË¤sË¤_ibrir_mayyw_ywnyw_ywlywz_É£wÅ¡t_Å¡wtanbir_ktË¤wbrË¤_nwwanbir_dwjnbir\".split(\"_\"),weekdays:\"asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas\".split(\"_\"),weekdaysShort:\"asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas\".split(\"_\"),weekdaysMin:\"asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[asdkh g] LT\",nextDay:\"[aska g] LT\",nextWeek:\"dddd [g] LT\",lastDay:\"[assant g] LT\",lastWeek:\"dddd [g] LT\",sameElse:\"L\"},relativeTime:{future:\"dadkh s yan %s\",past:\"yan %s\",s:\"imik\",ss:\"%d imik\",m:\"minuá¸\",mm:\"%d minuá¸\",h:\"saÉ›a\",hh:\"%d tassaÉ›in\",d:\"ass\",dd:\"%d ossan\",M:\"ayowr\",MM:\"%d iyyirn\",y:\"asgas\",yy:\"%d isgasn\"},week:{dow:6,doy:12}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"ug-cn\",{months:\"ÙŠØ§Ù†Û‹Ø§Ø±_ÙÛÛ‹Ø±Ø§Ù„_Ù…Ø§Ø±Øª_Ø¦Ø§Ù¾Ø±ÛÙ„_Ù…Ø§ÙŠ_Ø¦Ù‰ÙŠÛ‡Ù†_Ø¦Ù‰ÙŠÛ‡Ù„_Ø¦Ø§Û‹ØºÛ‡Ø³Øª_Ø³ÛÙ†ØªÛ•Ø¨Ù‰Ø±_Ø¦Û†ÙƒØªÛ•Ø¨Ù‰Ø±_Ù†ÙˆÙŠØ§Ø¨Ù‰Ø±_Ø¯ÛÙƒØ§Ø¨Ù‰Ø±\".split(\"_\"),monthsShort:\"ÙŠØ§Ù†Û‹Ø§Ø±_ÙÛÛ‹Ø±Ø§Ù„_Ù…Ø§Ø±Øª_Ø¦Ø§Ù¾Ø±ÛÙ„_Ù…Ø§ÙŠ_Ø¦Ù‰ÙŠÛ‡Ù†_Ø¦Ù‰ÙŠÛ‡Ù„_Ø¦Ø§Û‹ØºÛ‡Ø³Øª_Ø³ÛÙ†ØªÛ•Ø¨Ù‰Ø±_Ø¦Û†ÙƒØªÛ•Ø¨Ù‰Ø±_Ù†ÙˆÙŠØ§Ø¨Ù‰Ø±_Ø¯ÛÙƒØ§Ø¨Ù‰Ø±\".split(\"_\"),weekdays:\"ÙŠÛ•ÙƒØ´Û•Ù†Ø¨Û•_Ø¯ÛˆØ´Û•Ù†Ø¨Û•_Ø³Û•ÙŠØ´Û•Ù†Ø¨Û•_Ú†Ø§Ø±Ø´Û•Ù†Ø¨Û•_Ù¾Û•ÙŠØ´Û•Ù†Ø¨Û•_Ø¬ÛˆÙ…Û•_Ø´Û•Ù†Ø¨Û•\".split(\"_\"),weekdaysShort:\"ÙŠÛ•_Ø¯Ûˆ_Ø³Û•_Ú†Ø§_Ù¾Û•_Ø¬Ûˆ_Ø´Û•\".split(\"_\"),weekdaysMin:\"ÙŠÛ•_Ø¯Ûˆ_Ø³Û•_Ú†Ø§_Ù¾Û•_Ø¬Ûˆ_Ø´Û•\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"YYYY-ÙŠÙ‰Ù„Ù‰M-Ø¦Ø§ÙŠÙ†Ù‰Ú­D-ÙƒÛˆÙ†Ù‰\",LLL:\"YYYY-ÙŠÙ‰Ù„Ù‰M-Ø¦Ø§ÙŠÙ†Ù‰Ú­D-ÙƒÛˆÙ†Ù‰ØŒ HH:mm\",LLLL:\"ddddØŒ YYYY-ÙŠÙ‰Ù„Ù‰M-Ø¦Ø§ÙŠÙ†Ù‰Ú­D-ÙƒÛˆÙ†Ù‰ØŒ HH:mm\"},meridiemParse:/ÙŠÛØ±Ù‰Ù… ÙƒÛÚ†Û•|Ø³Û•Ú¾Û•Ø±|Ú†ÛˆØ´ØªÙ‰Ù† Ø¨Û‡Ø±Û‡Ù†|Ú†ÛˆØ´|Ú†ÛˆØ´ØªÙ‰Ù† ÙƒÛÙŠÙ‰Ù†|ÙƒÛ•Ú†/,meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"ÙŠÛØ±Ù‰Ù… ÙƒÛÚ†Û•\"===meridiem||\"Ø³Û•Ú¾Û•Ø±\"===meridiem||\"Ú†ÛˆØ´ØªÙ‰Ù† Ø¨Û‡Ø±Û‡Ù†\"===meridiem?hour:\"Ú†ÛˆØ´ØªÙ‰Ù† ÙƒÛÙŠÙ‰Ù†\"===meridiem||\"ÙƒÛ•Ú†\"===meridiem?hour+12:hour&gt;=11?hour:hour+12},meridiem:function(hour,minute,isLower){var hm=100*hour+minute;return hm&lt;600?\"ÙŠÛØ±Ù‰Ù… ÙƒÛÚ†Û•\":hm&lt;900?\"Ø³Û•Ú¾Û•Ø±\":hm&lt;1130?\"Ú†ÛˆØ´ØªÙ‰Ù† Ø¨Û‡Ø±Û‡Ù†\":hm&lt;1230?\"Ú†ÛˆØ´\":hm&lt;1800?\"Ú†ÛˆØ´ØªÙ‰Ù† ÙƒÛÙŠÙ‰Ù†\":\"ÙƒÛ•Ú†\"},calendar:{sameDay:\"[Ø¨ÛˆÚ¯ÛˆÙ† Ø³Ø§Ø¦Û•Øª] LT\",nextDay:\"[Ø¦Û•ØªÛ• Ø³Ø§Ø¦Û•Øª] LT\",nextWeek:\"[ÙƒÛÙ„Û•Ø±ÙƒÙ‰] dddd [Ø³Ø§Ø¦Û•Øª] LT\",lastDay:\"[ØªÛ†Ù†ÛˆÚ¯ÛˆÙ†] LT\",lastWeek:\"[Ø¦Ø§Ù„Ø¯Ù‰Ù†Ù‚Ù‰] dddd [Ø³Ø§Ø¦Û•Øª] LT\",sameElse:\"L\"},relativeTime:{future:\"%s ÙƒÛÙŠÙ‰Ù†\",past:\"%s Ø¨Û‡Ø±Û‡Ù†\",s:\"Ù†Û•Ú†Ú†Û• Ø³ÛÙƒÙˆÙ†Øª\",ss:\"%d Ø³ÛÙƒÙˆÙ†Øª\",m:\"Ø¨Ù‰Ø± Ù…Ù‰Ù†Û‡Øª\",mm:\"%d Ù…Ù‰Ù†Û‡Øª\",h:\"Ø¨Ù‰Ø± Ø³Ø§Ø¦Û•Øª\",hh:\"%d Ø³Ø§Ø¦Û•Øª\",d:\"Ø¨Ù‰Ø± ÙƒÛˆÙ†\",dd:\"%d ÙƒÛˆÙ†\",M:\"Ø¨Ù‰Ø± Ø¦Ø§ÙŠ\",MM:\"%d Ø¦Ø§ÙŠ\",y:\"Ø¨Ù‰Ø± ÙŠÙ‰Ù„\",yy:\"%d ÙŠÙ‰Ù„\"},dayOfMonthOrdinalParse:/\\d{1,2}(-ÙƒÛˆÙ†Ù‰|-Ø¦Ø§ÙŠ|-Ú¾Û•Ù¾ØªÛ•)/,ordinal:function(number,period){switch(period){case\"d\":case\"D\":case\"DDD\":return number+\"-ÙƒÛˆÙ†Ù‰\";case\"w\":case\"W\":return number+\"-Ú¾Û•Ù¾ØªÛ•\";default:return number}},preparse:function(string){return string.replace(/ØŒ/g,\",\")},postformat:function(string){return string.replace(/,/g,\"ØŒ\")},week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";function relativeTimeWithPlural(number,withoutSuffix,key){var num,forms;return\"m\"===key?withoutSuffix?\"Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð°\":\"Ñ…Ð²Ð¸Ð»Ð¸Ð½Ñƒ\":\"h\"===key?withoutSuffix?\"Ð³Ð¾Ð´Ð¸Ð½Ð°\":\"Ð³Ð¾Ð´Ð¸Ð½Ñƒ\":number+\" \"+(num=+number,forms={ss:withoutSuffix?\"ÑÐµÐºÑƒÐ½Ð´Ð°_ÑÐµÐºÑƒÐ½Ð´Ð¸_ÑÐµÐºÑƒÐ½Ð´\":\"ÑÐµÐºÑƒÐ½Ð´Ñƒ_ÑÐµÐºÑƒÐ½Ð´Ð¸_ÑÐµÐºÑƒÐ½Ð´\",mm:withoutSuffix?\"Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð°_Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð¸_Ñ…Ð²Ð¸Ð»Ð¸Ð½\":\"Ñ…Ð²Ð¸Ð»Ð¸Ð½Ñƒ_Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð¸_Ñ…Ð²Ð¸Ð»Ð¸Ð½\",hh:withoutSuffix?\"Ð³Ð¾Ð´Ð¸Ð½Ð°_Ð³Ð¾Ð´Ð¸Ð½Ð¸_Ð³Ð¾Ð´Ð¸Ð½\":\"Ð³Ð¾Ð´Ð¸Ð½Ñƒ_Ð³Ð¾Ð´Ð¸Ð½Ð¸_Ð³Ð¾Ð´Ð¸Ð½\",dd:\"Ð´ÐµÐ½ÑŒ_Ð´Ð½Ñ–_Ð´Ð½Ñ–Ð²\",MM:\"Ð¼Ñ–ÑÑÑ†ÑŒ_Ð¼Ñ–ÑÑÑ†Ñ–_Ð¼Ñ–ÑÑÑ†Ñ–Ð²\",yy:\"Ñ€Ñ–Ðº_Ñ€Ð¾ÐºÐ¸_Ñ€Ð¾ÐºÑ–Ð²\"}[key].split(\"_\"),num%10==1&amp;&amp;num%100!=11?forms[0]:num%10&gt;=2&amp;&amp;num%10&lt;=4&amp;&amp;(num%100&lt;10||num%100&gt;=20)?forms[1]:forms[2])}function processHoursFunction(str){return function(){return str+\"Ð¾\"+(11===this.hours()?\"Ð±\":\"\")+\"] LT\"}}moment.defineLocale(\"uk\",{months:{format:\"ÑÑ–Ñ‡Ð½Ñ_Ð»ÑŽÑ‚Ð¾Ð³Ð¾_Ð±ÐµÑ€ÐµÐ·Ð½Ñ_ÐºÐ²Ñ–Ñ‚Ð½Ñ_Ñ‚Ñ€Ð°Ð²Ð½Ñ_Ñ‡ÐµÑ€Ð²Ð½Ñ_Ð»Ð¸Ð¿Ð½Ñ_ÑÐµÑ€Ð¿Ð½Ñ_Ð²ÐµÑ€ÐµÑÐ½Ñ_Ð¶Ð¾Ð²Ñ‚Ð½Ñ_Ð»Ð¸ÑÑ‚Ð¾Ð¿Ð°Ð´Ð°_Ð³Ñ€ÑƒÐ´Ð½Ñ\".split(\"_\"),standalone:\"ÑÑ–Ñ‡ÐµÐ½ÑŒ_Ð»ÑŽÑ‚Ð¸Ð¹_Ð±ÐµÑ€ÐµÐ·ÐµÐ½ÑŒ_ÐºÐ²Ñ–Ñ‚ÐµÐ½ÑŒ_Ñ‚Ñ€Ð°Ð²ÐµÐ½ÑŒ_Ñ‡ÐµÑ€Ð²ÐµÐ½ÑŒ_Ð»Ð¸Ð¿ÐµÐ½ÑŒ_ÑÐµÑ€Ð¿ÐµÐ½ÑŒ_Ð²ÐµÑ€ÐµÑÐµÐ½ÑŒ_Ð¶Ð¾Ð²Ñ‚ÐµÐ½ÑŒ_Ð»Ð¸ÑÑ‚Ð¾Ð¿Ð°Ð´_Ð³Ñ€ÑƒÐ´ÐµÐ½ÑŒ\".split(\"_\")},monthsShort:\"ÑÑ–Ñ‡_Ð»ÑŽÑ‚_Ð±ÐµÑ€_ÐºÐ²Ñ–Ñ‚_Ñ‚Ñ€Ð°Ð²_Ñ‡ÐµÑ€Ð²_Ð»Ð¸Ð¿_ÑÐµÑ€Ð¿_Ð²ÐµÑ€_Ð¶Ð¾Ð²Ñ‚_Ð»Ð¸ÑÑ‚_Ð³Ñ€ÑƒÐ´\".split(\"_\"),weekdays:function(m,format){var weekdays={nominative:\"Ð½ÐµÐ´Ñ–Ð»Ñ_Ð¿Ð¾Ð½ÐµÐ´Ñ–Ð»Ð¾Ðº_Ð²Ñ–Ð²Ñ‚Ð¾Ñ€Ð¾Ðº_ÑÐµÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²ÐµÑ€_Ð¿â€™ÑÑ‚Ð½Ð¸Ñ†Ñ_ÑÑƒÐ±Ð¾Ñ‚Ð°\".split(\"_\"),accusative:\"Ð½ÐµÐ´Ñ–Ð»ÑŽ_Ð¿Ð¾Ð½ÐµÐ´Ñ–Ð»Ð¾Ðº_Ð²Ñ–Ð²Ñ‚Ð¾Ñ€Ð¾Ðº_ÑÐµÑ€ÐµÐ´Ñƒ_Ñ‡ÐµÑ‚Ð²ÐµÑ€_Ð¿â€™ÑÑ‚Ð½Ð¸Ñ†ÑŽ_ÑÑƒÐ±Ð¾Ñ‚Ñƒ\".split(\"_\"),genitive:\"Ð½ÐµÐ´Ñ–Ð»Ñ–_Ð¿Ð¾Ð½ÐµÐ´Ñ–Ð»ÐºÐ°_Ð²Ñ–Ð²Ñ‚Ð¾Ñ€ÐºÐ°_ÑÐµÑ€ÐµÐ´Ð¸_Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð³Ð°_Ð¿â€™ÑÑ‚Ð½Ð¸Ñ†Ñ–_ÑÑƒÐ±Ð¾Ñ‚Ð¸\".split(\"_\")};return!0===m?weekdays.nominative.slice(1,7).concat(weekdays.nominative.slice(0,1)):m?weekdays[/(\\[[Ð’Ð²Ð£Ñƒ]\\]) ?dddd/.test(format)?\"accusative\":/\\[?(?:Ð¼Ð¸Ð½ÑƒÐ»Ð¾Ñ—|Ð½Ð°ÑÑ‚ÑƒÐ¿Ð½Ð¾Ñ—)? ?\\] ?dddd/.test(format)?\"genitive\":\"nominative\"][m.day()]:weekdays.nominative},weekdaysShort:\"Ð½Ð´_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±\".split(\"_\"),weekdaysMin:\"Ð½Ð´_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY Ñ€.\",LLL:\"D MMMM YYYY Ñ€., HH:mm\",LLLL:\"dddd, D MMMM YYYY Ñ€., HH:mm\"},calendar:{sameDay:processHoursFunction(\"[Ð¡ÑŒÐ¾Ð³Ð¾Ð´Ð½Ñ– \"),nextDay:processHoursFunction(\"[Ð—Ð°Ð²Ñ‚Ñ€Ð° \"),lastDay:processHoursFunction(\"[Ð’Ñ‡Ð¾Ñ€Ð° \"),nextWeek:processHoursFunction(\"[Ð£] dddd [\"),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return processHoursFunction(\"[ÐœÐ¸Ð½ÑƒÐ»Ð¾Ñ—] dddd [\").call(this);case 1:case 2:case 4:return processHoursFunction(\"[ÐœÐ¸Ð½ÑƒÐ»Ð¾Ð³Ð¾] dddd [\").call(this)}},sameElse:\"L\"},relativeTime:{future:\"Ð·Ð° %s\",past:\"%s Ñ‚Ð¾Ð¼Ñƒ\",s:\"Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° ÑÐµÐºÑƒÐ½Ð´\",ss:relativeTimeWithPlural,m:relativeTimeWithPlural,mm:relativeTimeWithPlural,h:\"Ð³Ð¾Ð´Ð¸Ð½Ñƒ\",hh:relativeTimeWithPlural,d:\"Ð´ÐµÐ½ÑŒ\",dd:relativeTimeWithPlural,M:\"Ð¼Ñ–ÑÑÑ†ÑŒ\",MM:relativeTimeWithPlural,y:\"Ñ€Ñ–Ðº\",yy:relativeTimeWithPlural},meridiemParse:/Ð½Ð¾Ñ‡Ñ–|Ñ€Ð°Ð½ÐºÑƒ|Ð´Ð½Ñ|Ð²ÐµÑ‡Ð¾Ñ€Ð°/,isPM:function(input){return/^(Ð´Ð½Ñ|Ð²ÐµÑ‡Ð¾Ñ€Ð°)$/.test(input)},meridiem:function(hour,minute,isLower){return hour&lt;4?\"Ð½Ð¾Ñ‡Ñ–\":hour&lt;12?\"Ñ€Ð°Ð½ÐºÑƒ\":hour&lt;17?\"Ð´Ð½Ñ\":\"Ð²ÐµÑ‡Ð¾Ñ€Ð°\"},dayOfMonthOrdinalParse:/\\d{1,2}-(Ð¹|Ð³Ð¾)/,ordinal:function(number,period){switch(period){case\"M\":case\"d\":case\"DDD\":case\"w\":case\"W\":return number+\"-Ð¹\";case\"D\":return number+\"-Ð³Ð¾\";default:return number}},week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";var months=[\"Ø¬Ù†ÙˆØ±ÛŒ\",\"ÙØ±ÙˆØ±ÛŒ\",\"Ù…Ø§Ø±Ú†\",\"Ø§Ù¾Ø±ÛŒÙ„\",\"Ù…Ø¦ÛŒ\",\"Ø¬ÙˆÙ†\",\"Ø¬ÙˆÙ„Ø§Ø¦ÛŒ\",\"Ø§Ú¯Ø³Øª\",\"Ø³ØªÙ…Ø¨Ø±\",\"Ø§Ú©ØªÙˆØ¨Ø±\",\"Ù†ÙˆÙ…Ø¨Ø±\",\"Ø¯Ø³Ù…Ø¨Ø±\"],days=[\"Ø§ØªÙˆØ§Ø±\",\"Ù¾ÛŒØ±\",\"Ù…Ù†Ú¯Ù„\",\"Ø¨Ø¯Ú¾\",\"Ø¬Ù…Ø¹Ø±Ø§Øª\",\"Ø¬Ù…Ø¹Û\",\"ÛÙØªÛ\"];moment.defineLocale(\"ur\",{months:months,monthsShort:months,weekdays:days,weekdaysShort:days,weekdaysMin:days,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"ddddØŒ D MMMM YYYY HH:mm\"},meridiemParse:/ØµØ¨Ø­|Ø´Ø§Ù…/,isPM:function(input){return\"Ø´Ø§Ù…\"===input},meridiem:function(hour,minute,isLower){return hour&lt;12?\"ØµØ¨Ø­\":\"Ø´Ø§Ù…\"},calendar:{sameDay:\"[Ø¢Ø¬ Ø¨ÙˆÙ‚Øª] LT\",nextDay:\"[Ú©Ù„ Ø¨ÙˆÙ‚Øª] LT\",nextWeek:\"dddd [Ø¨ÙˆÙ‚Øª] LT\",lastDay:\"[Ú¯Ø°Ø´ØªÛ Ø±ÙˆØ² Ø¨ÙˆÙ‚Øª] LT\",lastWeek:\"[Ú¯Ø°Ø´ØªÛ] dddd [Ø¨ÙˆÙ‚Øª] LT\",sameElse:\"L\"},relativeTime:{future:\"%s Ø¨Ø¹Ø¯\",past:\"%s Ù‚Ø¨Ù„\",s:\"Ú†Ù†Ø¯ Ø³ÛŒÚ©Ù†Úˆ\",ss:\"%d Ø³ÛŒÚ©Ù†Úˆ\",m:\"Ø§ÛŒÚ© Ù…Ù†Ù¹\",mm:\"%d Ù…Ù†Ù¹\",h:\"Ø§ÛŒÚ© Ú¯Ú¾Ù†Ù¹Û\",hh:\"%d Ú¯Ú¾Ù†Ù¹Û’\",d:\"Ø§ÛŒÚ© Ø¯Ù†\",dd:\"%d Ø¯Ù†\",M:\"Ø§ÛŒÚ© Ù…Ø§Û\",MM:\"%d Ù…Ø§Û\",y:\"Ø§ÛŒÚ© Ø³Ø§Ù„\",yy:\"%d Ø³Ø§Ù„\"},preparse:function(string){return string.replace(/ØŒ/g,\",\")},postformat:function(string){return string.replace(/,/g,\"ØŒ\")},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"uz\",{months:\"ÑÐ½Ð²Ð°Ñ€_Ñ„ÐµÐ²Ñ€Ð°Ð»_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€_Ð¾ÐºÑ‚ÑÐ±Ñ€_Ð½Ð¾ÑÐ±Ñ€_Ð´ÐµÐºÐ°Ð±Ñ€\".split(\"_\"),monthsShort:\"ÑÐ½Ð²_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³_ÑÐµÐ½_Ð¾ÐºÑ‚_Ð½Ð¾Ñ_Ð´ÐµÐº\".split(\"_\"),weekdays:\"Ð¯ÐºÑˆÐ°Ð½Ð±Ð°_Ð”ÑƒÑˆÐ°Ð½Ð±Ð°_Ð¡ÐµÑˆÐ°Ð½Ð±Ð°_Ð§Ð¾Ñ€ÑˆÐ°Ð½Ð±Ð°_ÐŸÐ°Ð¹ÑˆÐ°Ð½Ð±Ð°_Ð–ÑƒÐ¼Ð°_Ð¨Ð°Ð½Ð±Ð°\".split(\"_\"),weekdaysShort:\"Ð¯ÐºÑˆ_Ð”ÑƒÑˆ_Ð¡ÐµÑˆ_Ð§Ð¾Ñ€_ÐŸÐ°Ð¹_Ð–ÑƒÐ¼_Ð¨Ð°Ð½\".split(\"_\"),weekdaysMin:\"Ð¯Ðº_Ð”Ñƒ_Ð¡Ðµ_Ð§Ð¾_ÐŸÐ°_Ð–Ñƒ_Ð¨Ð°\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"D MMMM YYYY, dddd HH:mm\"},calendar:{sameDay:\"[Ð‘ÑƒÐ³ÑƒÐ½ ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]\",nextDay:\"[Ð­Ñ€Ñ‚Ð°Ð³Ð°] LT [Ð´Ð°]\",nextWeek:\"dddd [ÐºÑƒÐ½Ð¸ ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]\",lastDay:\"[ÐšÐµÑ‡Ð° ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]\",lastWeek:\"[Ð£Ñ‚Ð³Ð°Ð½] dddd [ÐºÑƒÐ½Ð¸ ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]\",sameElse:\"L\"},relativeTime:{future:\"Ð¯ÐºÐ¸Ð½ %s Ð¸Ñ‡Ð¸Ð´Ð°\",past:\"Ð‘Ð¸Ñ€ Ð½ÐµÑ‡Ð° %s Ð¾Ð»Ð´Ð¸Ð½\",s:\"Ñ„ÑƒÑ€ÑÐ°Ñ‚\",ss:\"%d Ñ„ÑƒÑ€ÑÐ°Ñ‚\",m:\"Ð±Ð¸Ñ€ Ð´Ð°ÐºÐ¸ÐºÐ°\",mm:\"%d Ð´Ð°ÐºÐ¸ÐºÐ°\",h:\"Ð±Ð¸Ñ€ ÑÐ¾Ð°Ñ‚\",hh:\"%d ÑÐ¾Ð°Ñ‚\",d:\"Ð±Ð¸Ñ€ ÐºÑƒÐ½\",dd:\"%d ÐºÑƒÐ½\",M:\"Ð±Ð¸Ñ€ Ð¾Ð¹\",MM:\"%d Ð¾Ð¹\",y:\"Ð±Ð¸Ñ€ Ð¹Ð¸Ð»\",yy:\"%d Ð¹Ð¸Ð»\"},week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"uz-latn\",{months:\"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr\".split(\"_\"),monthsShort:\"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek\".split(\"_\"),weekdays:\"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba\".split(\"_\"),weekdaysShort:\"Yak_Dush_Sesh_Chor_Pay_Jum_Shan\".split(\"_\"),weekdaysMin:\"Ya_Du_Se_Cho_Pa_Ju_Sha\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"D MMMM YYYY, dddd HH:mm\"},calendar:{sameDay:\"[Bugun soat] LT [da]\",nextDay:\"[Ertaga] LT [da]\",nextWeek:\"dddd [kuni soat] LT [da]\",lastDay:\"[Kecha soat] LT [da]\",lastWeek:\"[O'tgan] dddd [kuni soat] LT [da]\",sameElse:\"L\"},relativeTime:{future:\"Yaqin %s ichida\",past:\"Bir necha %s oldin\",s:\"soniya\",ss:\"%d soniya\",m:\"bir daqiqa\",mm:\"%d daqiqa\",h:\"bir soat\",hh:\"%d soat\",d:\"bir kun\",dd:\"%d kun\",M:\"bir oy\",MM:\"%d oy\",y:\"bir yil\",yy:\"%d yil\"},week:{dow:1,doy:7}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"vi\",{months:\"thÃ¡ng 1_thÃ¡ng 2_thÃ¡ng 3_thÃ¡ng 4_thÃ¡ng 5_thÃ¡ng 6_thÃ¡ng 7_thÃ¡ng 8_thÃ¡ng 9_thÃ¡ng 10_thÃ¡ng 11_thÃ¡ng 12\".split(\"_\"),monthsShort:\"Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12\".split(\"_\"),monthsParseExact:!0,weekdays:\"chá»§ nháº­t_thá»© hai_thá»© ba_thá»© tÆ°_thá»© nÄƒm_thá»© sÃ¡u_thá»© báº£y\".split(\"_\"),weekdaysShort:\"CN_T2_T3_T4_T5_T6_T7\".split(\"_\"),weekdaysMin:\"CN_T2_T3_T4_T5_T6_T7\".split(\"_\"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(input){return/^ch$/i.test(input)},meridiem:function(hours,minutes,isLower){return hours&lt;12?isLower?\"sa\":\"SA\":isLower?\"ch\":\"CH\"},longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM [nÄƒm] YYYY\",LLL:\"D MMMM [nÄƒm] YYYY HH:mm\",LLLL:\"dddd, D MMMM [nÄƒm] YYYY HH:mm\",l:\"DD/M/YYYY\",ll:\"D MMM YYYY\",lll:\"D MMM YYYY HH:mm\",llll:\"ddd, D MMM YYYY HH:mm\"},calendar:{sameDay:\"[HÃ´m nay lÃºc] LT\",nextDay:\"[NgÃ&nbsp;y mai lÃºc] LT\",nextWeek:\"dddd [tuáº§n tá»›i lÃºc] LT\",lastDay:\"[HÃ´m qua lÃºc] LT\",lastWeek:\"dddd [tuáº§n trÆ°á»›c lÃºc] LT\",sameElse:\"L\"},relativeTime:{future:\"%s tá»›i\",past:\"%s trÆ°á»›c\",s:\"vÃ&nbsp;i giÃ¢y\",ss:\"%d giÃ¢y\",m:\"má»™t phÃºt\",mm:\"%d phÃºt\",h:\"má»™t giá»\",hh:\"%d giá»\",d:\"má»™t ngÃ&nbsp;y\",dd:\"%d ngÃ&nbsp;y\",w:\"má»™t tuáº§n\",ww:\"%d tuáº§n\",M:\"má»™t thÃ¡ng\",MM:\"%d thÃ¡ng\",y:\"má»™t nÄƒm\",yy:\"%d nÄƒm\"},dayOfMonthOrdinalParse:/\\d{1,2}/,ordinal:function(number){return number},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"x-pseudo\",{months:\"J~Ã¡Ã±ÃºÃ¡~rÃ½_F~Ã©brÃº~Ã¡rÃ½_~MÃ¡rc~h_Ãp~rÃ­l_~MÃ¡Ã½_~JÃºÃ±Ã©~_JÃºl~Ã½_ÃÃº~gÃºst~_SÃ©p~tÃ©mb~Ã©r_Ã“~ctÃ³b~Ã©r_Ã‘~Ã³vÃ©m~bÃ©r_~DÃ©cÃ©~mbÃ©r\".split(\"_\"),monthsShort:\"J~Ã¡Ã±_~FÃ©b_~MÃ¡r_~Ãpr_~MÃ¡Ã½_~JÃºÃ±_~JÃºl_~ÃÃºg_~SÃ©p_~Ã“ct_~Ã‘Ã³v_~DÃ©c\".split(\"_\"),monthsParseExact:!0,weekdays:\"S~ÃºÃ±dÃ¡~Ã½_MÃ³~Ã±dÃ¡Ã½~_TÃºÃ©~sdÃ¡Ã½~_WÃ©d~Ã±Ã©sd~Ã¡Ã½_T~hÃºrs~dÃ¡Ã½_~FrÃ­d~Ã¡Ã½_S~Ã¡tÃºr~dÃ¡Ã½\".split(\"_\"),weekdaysShort:\"S~ÃºÃ±_~MÃ³Ã±_~TÃºÃ©_~WÃ©d_~ThÃº_~FrÃ­_~SÃ¡t\".split(\"_\"),weekdaysMin:\"S~Ãº_MÃ³~_TÃº_~WÃ©_T~h_Fr~_SÃ¡\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[T~Ã³dÃ¡~Ã½ Ã¡t] LT\",nextDay:\"[T~Ã³mÃ³~rrÃ³~w Ã¡t] LT\",nextWeek:\"dddd [Ã¡t] LT\",lastDay:\"[Ã~Ã©st~Ã©rdÃ¡~Ã½ Ã¡t] LT\",lastWeek:\"[L~Ã¡st] dddd [Ã¡t] LT\",sameElse:\"L\"},relativeTime:{future:\"Ã­~Ã± %s\",past:\"%s Ã¡~gÃ³\",s:\"Ã¡ ~fÃ©w ~sÃ©cÃ³~Ã±ds\",ss:\"%d s~Ã©cÃ³Ã±~ds\",m:\"Ã¡ ~mÃ­Ã±~ÃºtÃ©\",mm:\"%d m~Ã­Ã±Ãº~tÃ©s\",h:\"Ã¡~Ã± hÃ³~Ãºr\",hh:\"%d h~Ã³Ãºrs\",d:\"Ã¡ ~dÃ¡Ã½\",dd:\"%d d~Ã¡Ã½s\",M:\"Ã¡ ~mÃ³Ã±~th\",MM:\"%d m~Ã³Ã±t~hs\",y:\"Ã¡ ~Ã½Ã©Ã¡r\",yy:\"%d Ã½~Ã©Ã¡rs\"},dayOfMonthOrdinalParse:/\\d{1,2}(th|st|nd|rd)/,ordinal:function(number){var b=number%10;return number+(1==~~(number%100/10)?\"th\":1===b?\"st\":2===b?\"nd\":3===b?\"rd\":\"th\")},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"yo\",{months:\"Sáº¹Ìráº¹Ì_EÌ€reÌ€leÌ€_áº¸ráº¹Ì€naÌ€_IÌ€gbeÌ_EÌ€bibi_OÌ€kuÌ€du_Agáº¹mo_OÌ€guÌn_Owewe_á»ŒÌ€waÌ€raÌ€_BeÌluÌ_á»ŒÌ€páº¹Ì€Ì€\".split(\"_\"),monthsShort:\"Sáº¹Ìr_EÌ€rl_áº¸rn_IÌ€gb_EÌ€bi_OÌ€kuÌ€_Agáº¹_OÌ€guÌ_Owe_á»ŒÌ€waÌ€_BeÌl_á»ŒÌ€páº¹Ì€Ì€\".split(\"_\"),weekdays:\"AÌ€iÌ€kuÌ_AjeÌ_IÌ€sáº¹Ìgun_á»Œjá»ÌruÌ_á»Œjá»Ìbá»_áº¸tiÌ€_AÌ€baÌmáº¹Ìta\".split(\"_\"),weekdaysShort:\"AÌ€iÌ€k_AjeÌ_IÌ€sáº¹Ì_á»Œjr_á»Œjb_áº¸tiÌ€_AÌ€baÌ\".split(\"_\"),weekdaysMin:\"AÌ€iÌ€_Aj_IÌ€s_á»Œr_á»Œb_áº¸t_AÌ€b\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendar:{sameDay:\"[OÌ€niÌ€ ni] LT\",nextDay:\"[á»ŒÌ€la ni] LT\",nextWeek:\"dddd [á»Œsáº¹Ì€ toÌn'bá»] [ni] LT\",lastDay:\"[AÌ€na ni] LT\",lastWeek:\"dddd [á»Œsáº¹Ì€ toÌlá»Ì] [ni] LT\",sameElse:\"L\"},relativeTime:{future:\"niÌ %s\",past:\"%s ká»jaÌ\",s:\"iÌ€sáº¹juÌ aayaÌ die\",ss:\"aayaÌ %d\",m:\"iÌ€sáº¹juÌ kan\",mm:\"iÌ€sáº¹juÌ %d\",h:\"waÌkati kan\",hh:\"waÌkati %d\",d:\"á»já»Ì kan\",dd:\"á»já»Ì %d\",M:\"osuÌ€ kan\",MM:\"osuÌ€ %d\",y:\"á»duÌn kan\",yy:\"á»duÌn %d\"},dayOfMonthOrdinalParse:/á»já»Ì\\s\\d{1,2}/,ordinal:\"á»já»Ì %d\",week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"zh-cn\",{months:\"ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ\".split(\"_\"),monthsShort:\"1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ\".split(\"_\"),weekdays:\"æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­\".split(\"_\"),weekdaysShort:\"å‘¨æ—¥_å‘¨ä¸€_å‘¨äºŒ_å‘¨ä¸‰_å‘¨å››_å‘¨äº”_å‘¨å…­\".split(\"_\"),weekdaysMin:\"æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYYå¹´MæœˆDæ—¥\",LLL:\"YYYYå¹´MæœˆDæ—¥Ahç‚¹mmåˆ†\",LLLL:\"YYYYå¹´MæœˆDæ—¥ddddAhç‚¹mmåˆ†\",l:\"YYYY/M/D\",ll:\"YYYYå¹´MæœˆDæ—¥\",lll:\"YYYYå¹´MæœˆDæ—¥ HH:mm\",llll:\"YYYYå¹´MæœˆDæ—¥dddd HH:mm\"},meridiemParse:/å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"å‡Œæ™¨\"===meridiem||\"æ—©ä¸Š\"===meridiem||\"ä¸Šåˆ\"===meridiem?hour:\"ä¸‹åˆ\"===meridiem||\"æ™šä¸Š\"===meridiem?hour+12:hour&gt;=11?hour:hour+12},meridiem:function(hour,minute,isLower){var hm=100*hour+minute;return hm&lt;600?\"å‡Œæ™¨\":hm&lt;900?\"æ—©ä¸Š\":hm&lt;1130?\"ä¸Šåˆ\":hm&lt;1230?\"ä¸­åˆ\":hm&lt;1800?\"ä¸‹åˆ\":\"æ™šä¸Š\"},calendar:{sameDay:\"[ä»Šå¤©]LT\",nextDay:\"[æ˜Žå¤©]LT\",nextWeek:function(now){return now.week()!==this.week()?\"[ä¸‹]dddLT\":\"[æœ¬]dddLT\"},lastDay:\"[æ˜¨å¤©]LT\",lastWeek:function(now){return this.week()!==now.week()?\"[ä¸Š]dddLT\":\"[æœ¬]dddLT\"},sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}(æ—¥|æœˆ|å‘¨)/,ordinal:function(number,period){switch(period){case\"d\":case\"D\":case\"DDD\":return number+\"æ—¥\";case\"M\":return number+\"æœˆ\";case\"w\":case\"W\":return number+\"å‘¨\";default:return number}},relativeTime:{future:\"%såŽ\",past:\"%så‰\",s:\"å‡&nbsp;ç§’\",ss:\"%d ç§’\",m:\"1 åˆ†é’Ÿ\",mm:\"%d åˆ†é’Ÿ\",h:\"1 å°æ—¶\",hh:\"%d å°æ—¶\",d:\"1 å¤©\",dd:\"%d å¤©\",w:\"1 å‘¨\",ww:\"%d å‘¨\",M:\"1 ä¸ªæœˆ\",MM:\"%d ä¸ªæœˆ\",y:\"1 å¹´\",yy:\"%d å¹´\"},week:{dow:1,doy:4}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"zh-hk\",{months:\"ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ\".split(\"_\"),monthsShort:\"1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ\".split(\"_\"),weekdays:\"æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­\".split(\"_\"),weekdaysShort:\"é€±æ—¥_é€±ä¸€_é€±äºŒ_é€±ä¸‰_é€±å››_é€±äº”_é€±å…­\".split(\"_\"),weekdaysMin:\"æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYYå¹´MæœˆDæ—¥\",LLL:\"YYYYå¹´MæœˆDæ—¥ HH:mm\",LLLL:\"YYYYå¹´MæœˆDæ—¥dddd HH:mm\",l:\"YYYY/M/D\",ll:\"YYYYå¹´MæœˆDæ—¥\",lll:\"YYYYå¹´MæœˆDæ—¥ HH:mm\",llll:\"YYYYå¹´MæœˆDæ—¥dddd HH:mm\"},meridiemParse:/å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"å‡Œæ™¨\"===meridiem||\"æ—©ä¸Š\"===meridiem||\"ä¸Šåˆ\"===meridiem?hour:\"ä¸­åˆ\"===meridiem?hour&gt;=11?hour:hour+12:\"ä¸‹åˆ\"===meridiem||\"æ™šä¸Š\"===meridiem?hour+12:void 0},meridiem:function(hour,minute,isLower){var hm=100*hour+minute;return hm&lt;600?\"å‡Œæ™¨\":hm&lt;900?\"æ—©ä¸Š\":hm&lt;1200?\"ä¸Šåˆ\":1200===hm?\"ä¸­åˆ\":hm&lt;1800?\"ä¸‹åˆ\":\"æ™šä¸Š\"},calendar:{sameDay:\"[ä»Šå¤©]LT\",nextDay:\"[æ˜Žå¤©]LT\",nextWeek:\"[ä¸‹]ddddLT\",lastDay:\"[æ˜¨å¤©]LT\",lastWeek:\"[ä¸Š]ddddLT\",sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}(æ—¥|æœˆ|é€±)/,ordinal:function(number,period){switch(period){case\"d\":case\"D\":case\"DDD\":return number+\"æ—¥\";case\"M\":return number+\"æœˆ\";case\"w\":case\"W\":return number+\"é€±\";default:return number}},relativeTime:{future:\"%så¾Œ\",past:\"%så‰\",s:\"å¹¾ç§’\",ss:\"%d ç§’\",m:\"1 åˆ†é˜\",mm:\"%d åˆ†é˜\",h:\"1 å°æ™‚\",hh:\"%d å°æ™‚\",d:\"1 å¤©\",dd:\"%d å¤©\",M:\"1 å€‹æœˆ\",MM:\"%d å€‹æœˆ\",y:\"1 å¹´\",yy:\"%d å¹´\"}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"zh-mo\",{months:\"ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ\".split(\"_\"),monthsShort:\"1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ\".split(\"_\"),weekdays:\"æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­\".split(\"_\"),weekdaysShort:\"é€±æ—¥_é€±ä¸€_é€±äºŒ_é€±ä¸‰_é€±å››_é€±äº”_é€±å…­\".split(\"_\"),weekdaysMin:\"æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"YYYYå¹´MæœˆDæ—¥\",LLL:\"YYYYå¹´MæœˆDæ—¥ HH:mm\",LLLL:\"YYYYå¹´MæœˆDæ—¥dddd HH:mm\",l:\"D/M/YYYY\",ll:\"YYYYå¹´MæœˆDæ—¥\",lll:\"YYYYå¹´MæœˆDæ—¥ HH:mm\",llll:\"YYYYå¹´MæœˆDæ—¥dddd HH:mm\"},meridiemParse:/å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"å‡Œæ™¨\"===meridiem||\"æ—©ä¸Š\"===meridiem||\"ä¸Šåˆ\"===meridiem?hour:\"ä¸­åˆ\"===meridiem?hour&gt;=11?hour:hour+12:\"ä¸‹åˆ\"===meridiem||\"æ™šä¸Š\"===meridiem?hour+12:void 0},meridiem:function(hour,minute,isLower){var hm=100*hour+minute;return hm&lt;600?\"å‡Œæ™¨\":hm&lt;900?\"æ—©ä¸Š\":hm&lt;1130?\"ä¸Šåˆ\":hm&lt;1230?\"ä¸­åˆ\":hm&lt;1800?\"ä¸‹åˆ\":\"æ™šä¸Š\"},calendar:{sameDay:\"[ä»Šå¤©] LT\",nextDay:\"[æ˜Žå¤©] LT\",nextWeek:\"[ä¸‹]dddd LT\",lastDay:\"[æ˜¨å¤©] LT\",lastWeek:\"[ä¸Š]dddd LT\",sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}(æ—¥|æœˆ|é€±)/,ordinal:function(number,period){switch(period){case\"d\":case\"D\":case\"DDD\":return number+\"æ—¥\";case\"M\":return number+\"æœˆ\";case\"w\":case\"W\":return number+\"é€±\";default:return number}},relativeTime:{future:\"%så…§\",past:\"%så‰\",s:\"å¹¾ç§’\",ss:\"%d ç§’\",m:\"1 åˆ†é˜\",mm:\"%d åˆ†é˜\",h:\"1 å°æ™‚\",hh:\"%d å°æ™‚\",d:\"1 å¤©\",dd:\"%d å¤©\",M:\"1 å€‹æœˆ\",MM:\"%d å€‹æœˆ\",y:\"1 å¹´\",yy:\"%d å¹´\"}})}(__webpack_require__(0))},function(module,exports,__webpack_require__){!function(moment){\"use strict\";moment.defineLocale(\"zh-tw\",{months:\"ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ\".split(\"_\"),monthsShort:\"1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ\".split(\"_\"),weekdays:\"æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­\".split(\"_\"),weekdaysShort:\"é€±æ—¥_é€±ä¸€_é€±äºŒ_é€±ä¸‰_é€±å››_é€±äº”_é€±å…­\".split(\"_\"),weekdaysMin:\"æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYYå¹´MæœˆDæ—¥\",LLL:\"YYYYå¹´MæœˆDæ—¥ HH:mm\",LLLL:\"YYYYå¹´MæœˆDæ—¥dddd HH:mm\",l:\"YYYY/M/D\",ll:\"YYYYå¹´MæœˆDæ—¥\",lll:\"YYYYå¹´MæœˆDæ—¥ HH:mm\",llll:\"YYYYå¹´MæœˆDæ—¥dddd HH:mm\"},meridiemParse:/å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,meridiemHour:function(hour,meridiem){return 12===hour&amp;&amp;(hour=0),\"å‡Œæ™¨\"===meridiem||\"æ—©ä¸Š\"===meridiem||\"ä¸Šåˆ\"===meridiem?hour:\"ä¸­åˆ\"===meridiem?hour&gt;=11?hour:hour+12:\"ä¸‹åˆ\"===meridiem||\"æ™šä¸Š\"===meridiem?hour+12:void 0},meridiem:function(hour,minute,isLower){var hm=100*hour+minute;return hm&lt;600?\"å‡Œæ™¨\":hm&lt;900?\"æ—©ä¸Š\":hm&lt;1130?\"ä¸Šåˆ\":hm&lt;1230?\"ä¸­åˆ\":hm&lt;1800?\"ä¸‹åˆ\":\"æ™šä¸Š\"},calendar:{sameDay:\"[ä»Šå¤©] LT\",nextDay:\"[æ˜Žå¤©] LT\",nextWeek:\"[ä¸‹]dddd LT\",lastDay:\"[æ˜¨å¤©] LT\",lastWeek:\"[ä¸Š]dddd LT\",sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}(æ—¥|æœˆ|é€±)/,ordinal:function(number,period){switch(period){case\"d\":case\"D\":case\"DDD\":return number+\"æ—¥\";case\"M\":return number+\"æœˆ\";case\"w\":case\"W\":return number+\"é€±\";default:return number}},relativeTime:{future:\"%så¾Œ\",past:\"%så‰\",s:\"å¹¾ç§’\",ss:\"%d ç§’\",m:\"1 åˆ†é˜\",mm:\"%d åˆ†é˜\",h:\"1 å°æ™‚\",hh:\"%d å°æ™‚\",d:\"1 å¤©\",dd:\"%d å¤©\",M:\"1 å€‹æœˆ\",MM:\"%d å€‹æœˆ\",y:\"1 å¹´\",yy:\"%d å¹´\"}})}(__webpack_require__(0))},function(module,exports){window.HTMLElement&amp;&amp;!window.HTMLElement.prototype.insertAdjacentHTML&amp;&amp;(console.info(\"Polyfill for insertAdjacentHTML loaded.\"),window.HTMLElement.prototype.insertAdjacentHTML=function(position,html){var container=this.ownerDocument.createElementNS(\"http://www.w3.org/1999/xhtml\",\"_\"),parent=this.parentNode,nodeFrag=document.createDocumentFragment();for(position=position.toLowerCase(),container.innerHTML=html;void 0===container.firstChild;)nodeFrag.appendChild(void 0);\"beforeend\"===position?this.appendChild(nodeFrag):\"afterbegin\"===position?this.insertBefore(nodeFrag,this.firstChild):\"beforebegin\"===position?parent.insertBefore(nodeFrag,this):\"afterend\"===position&amp;&amp;parent.insertBefore(nodeFrag,this.nextElementSibling)})},function(module,exports){module.exports='&lt;svg class=\"tv-icon-attention \" viewBox=\"0 0 16 16\"&gt;&lt;path d=\"m 9.1342851,13.209903 v -1.825619 q 0,-0.137782 -0.079879,-0.223896 -0.079879,-0.08611 -0.1917101,-0.08611 H 7.1373049 q -0.1118309,0 -0.1917101,0.08611 -0.079879,0.08611 -0.079879,0.223896 v 1.825619 q 0,0.137783 0.079879,0.223897 0.079879,0.08611 0.1917101,0.103337 h 1.7253909 q 0.1118309,0 0.1917101,-0.103337 0.079879,-0.103337 0.079879,-0.223897 z M 9.1183091,9.6275565 9.2780676,5.2012917 q 0,-0.1033369 -0.079879,-0.1722282 Q 9.0863577,4.9257266 8.9745268,4.9257266 H 7.025474 q -0.095855,0 -0.2236618,0.1033369 -0.079879,0.068891 -0.079879,0.2066739 l 0.1437826,4.3918191 q 0,0.086114 0.095855,0.1550054 0.095855,0.068891 0.2076859,0.051668 h 1.6455117 q 0.1278067,0 0.2236617,-0.051668 0.095855,-0.051668 0.079879,-0.1550054 z M 9.0064784,0.63724435 15.844138,14.174381 q 0.319517,0.602799 -0.01597,1.205597 -0.143783,0.292788 -0.415372,0.447794 Q 15.141206,15.982777 14.853641,16 H 1.1463644 Q 0.85879922,16 0.58720992,15.827772 0.31562062,15.655544 0.17183804,15.379978 -0.16365462,14.77718 0.1558622,14.174381 L 7.0094982,0.63724435 Q 7.1532808,0.3444564 7.4248701,0.1722282 7.6964594,0 8.0000004,0 8.3035413,0 8.5751306,0.1722282 8.8467199,0.3444564 9.0064784,0.63724435 Z\"&gt;&lt;/path&gt;&lt;/svg&gt;'},function(module,exports){module.exports='&lt;svg class=\"tv-icon-checkmark \" viewBox=\"0 0 16 16\"&gt;&lt;path d=\"M6.37 13.526a.27.27 0 01-.335 0L.085 8.308a.223.223 0 010-.35L2.01 6.017a.255.255 0 01.35 0l3.69 3.182a.239.239 0 00.335 0L13.56 2.5a.223.223 0 01.35 0l2.005 1.877a.239.239 0 010 .366l-9.546 8.782\" fill-rule=\"evenodd\"&gt;&lt;/path&gt;&lt;/svg&gt;'},function(module,exports){module.exports='&lt;svg class=\"tv-icon-cross \" viewBox=\"0 0 16 16\"&gt;&lt;path d=\"m 16,12.886878 q 0,0.53092 -0.361991,0.917044 l -1.834087,1.834087 Q 13.417798,16 12.886878,16 q -0.53092,0 -0.917044,-0.361991 l -3.9577676,-3.9819 -3.9577678,3.9819 Q 3.668175,16 3.1372549,16 2.6063348,16 2.2202112,15.638009 L 0.38612368,13.803922 Q 0,13.417798 0,12.886878 0,12.355958 0.38612368,11.969834 L 4.3438914,8.0120664 0.38612368,4.0542986 Q 0,3.668175 0,3.1372549 0,2.6063348 0.38612368,2.2202112 L 2.2202112,0.38612368 Q 2.6063348,0 3.1372549,0 3.668175,0 4.0542986,0.38612368 L 8.0120664,4.3438914 11.969834,0.38612368 Q 12.355958,0 12.886878,0 q 0.53092,0 0.917044,0.38612368 L 15.638009,2.2202112 Q 16,2.5822021 16,3.1372549 16,3.6923077 15.638009,4.0542986 l -3.957768,3.9577678 3.957768,3.9577676 Q 16,12.331825 16,12.886878 Z\"&gt;&lt;/path&gt;&lt;/svg&gt;'},function(module,exports){module.exports='&lt;svg class=\"tv-icon-cross-circle \" viewBox=\"0 0 16 16\"&gt;&lt;path d=\"M8 0a8 8 0 108 8 8 8 0 00-8-8zm3.396 10.267a.8.8 0 01-1.13 1.129L8 9.129l-2.267 2.267a.8.8 0 11-1.129-1.13L6.871 8 4.604 5.733a.8.8 0 111.13-1.129L8 6.871l2.267-2.267a.8.8 0 111.129 1.13L9.129 8z\"&gt;&lt;/path&gt;&lt;/svg&gt;'},function(module,exports){module.exports='&lt;svg class=\"tv-icon-cross \" viewBox=\"0 0 16 16\"&gt;&lt;path d=\"M1.6830502.00247305A1.7923935 1.792 0 00.28874016 2.766473c.17804.27.4321.474.65415.706l4.54099004 4.514c-1.66636 1.673-3.33573 3.345-5.00109004 5.02a1.790393 1.79 0 00-.11303 2.287c.25206.332.62214.571 1.02823004.663.40609.092.84318.037 1.21326-.154.24406-.121.4401-.314.62814-.508l4.77605-4.777c1.66236 1.667 3.3227298 3.337 4.9870898 5.002a1.790393 1.79 0 001.11425.477c.41809.025.84118-.104 1.17526-.357.33007-.25.56912-.62.66014-1.025.092-.405.036-.84-.15503-1.21-.12303-.25-.32407-.446-.51812-.642l-4.66902-4.776c1.64036-1.663 3.28272-3.324 4.92108-4.988a1.7873924 1.787 0 00-.9132-2.94699995 1.7953941 1.795 0 00-1.21327.152c-.24805.122-.4451.318-.63714.512L8.0164402 5.407473c-1.67437-1.646-3.34673-3.295-5.0211-4.93999995a1.8003952 1.8 0 00-1.08624-.463c-.075-.01-.15003 0-.22605 0z\"&gt;&lt;/path&gt;&lt;/svg&gt;'},function(module,exports){module.exports='&lt;svg class=\"tv-icon-emoji-happy \" viewBox=\"0 0 16 16\"&gt;&lt;path d=\"M 8.0000002,16 C 3.5840001,16 0,12.416 0,8 0,3.584 3.5840001,0 8.0000002,0 12.416,0 16,3.584 16,8 c 0,4.416 -3.584,8 -7.9999998,8 z m -2.656,-8.8 c 0.256,0 0.448,-0.192 0.448,-0.432 V 4.88 c 0,-0.24 -0.192,-0.432 -0.448,-0.432 -0.24,0 -0.4480001,0.192 -0.4480001,0.432 v 1.888 c 0,0.24 0.2080001,0.432 0.4480001,0.432 z M 10.448,7.2 c 0.256,0 0.448,-0.192 0.448,-0.432 V 4.88 C 10.896,4.64 10.704,4.448 10.448,4.448 10.208,4.448 10,4.64 10,4.88 V 6.768 C 10,7.008 10.208,7.2 10.448,7.2 Z M 7.9840002,12.256 C 9.9200003,12.256 11.616,11.024 12.112,9.264 12.176,9.04 12.032,8.816 11.792,8.752 c -0.24,-0.064 -0.496,0.08 -0.544,0.304 -0.4,1.392 -1.7279997,2.352 -3.2639998,2.352 -1.584,0 -2.928,-1.008 -3.2800001,-2.448 -0.064,-0.224 -0.304,-0.368 -0.544,-0.32 -0.24,0.048 -0.384,0.272 -0.336,0.512 0.448,1.824 2.1600001,3.104 4.1600001,3.104 z\"&gt;&lt;/path&gt;&lt;/svg&gt;'},function(module,exports){module.exports='&lt;svg class=\"tv-icon-info-circle \" viewBox=\"0 0 16 16\"&gt;&lt;path d=\"M8 3.208a1.02 1.02 0 11-1.02 1.02A1.02 1.02 0 018 3.208zM8 6.3a1.02 1.02 0 011.013.935v4.823a1.02 1.02 0 01-2.033.1v-4.83A1.02 1.02 0 018 6.308zm0-4.553a6.253 6.253 0 106.253 6.26A6.253 6.253 0 008 1.756zM8 0a8 8 0 11-8 8.008 8 8 0 018-8z\"&gt;&lt;/path&gt;&lt;/svg&gt;'},function(module,exports){module.exports='&lt;svg class=\"tv-icon-search \" viewBox=\"0 0 16 16\"&gt;&lt;path d=\"M15.63 13.907l-2.214-2.214a7.472 7.472 0 001.354-4.309C14.77 3.324 11.446 0 7.384 0 3.324 0 0 3.323 0 7.384c0 4.062 3.323 7.386 7.384 7.386 1.6 0 3.077-.493 4.309-1.354l2.214 2.214c.247.247.554.37.863.37.307 0 .614-.123.86-.37a1.19 1.19 0 000-1.723zm-8.246-1.6c-1.291 0-2.523-.491-3.507-1.414-.923-.986-1.416-2.216-1.416-3.509a4.938 4.938 0 014.923-4.923c1.293 0 2.523.493 3.509 1.416.923.923 1.414 2.153 1.414 3.507a4.936 4.936 0 01-4.923 4.923z\"&gt;&lt;/path&gt;&lt;/svg&gt;'},function(module,exports){module.exports='&lt;svg class=\"tv-icon-arrow-left \" viewBox=\"0 0 24 24\"&gt;&lt;path d=\"M15.214 16.327L10.874 12l4.34-4.327a.975.975 0 00.286-.695.974.974 0 00-.286-.693.991.991 0 00-1.392 0l-5.034 5.02a.979.979 0 000 1.388l5.034 5.02a.987.987 0 001.392 0 .97.97 0 00.286-.693.974.974 0 00-.286-.693z\" fillRule=\"evenodd\"&gt;&lt;/path&gt;&lt;/svg&gt;'},function(module,exports){module.exports='&lt;svg viewBox=\"0 0 24 24\"&gt;&lt;path d=\"M10.179 13.852L8.378 12.05a1.393 1.393 0 10-1.97 1.97l2.786 2.785a1.393 1.393 0 001.97 0l7.428-7.428a1.393 1.393 0 00-1.97-1.97l-6.443 6.444z\" fillRule=\"evenodd\"&gt;&lt;/path&gt;&lt;/svg&gt;'},function(module,exports,__webpack_require__){module.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){\"undefined\"!=typeof Symbol&amp;&amp;Symbol.toStringTag&amp;&amp;Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&amp;t&amp;&amp;(e=r(e)),8&amp;t)return e;if(4&amp;t&amp;&amp;\"object\"==typeof e&amp;&amp;e&amp;&amp;e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&amp;t&amp;&amp;\"string\"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&amp;&amp;e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=0)}([function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&amp;&amp;\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&amp;&amp;\"function\"==typeof Symbol&amp;&amp;e.constructor===Symbol&amp;&amp;e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r&lt;t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&amp;&amp;(n.writable=!0),Object.defineProperty(e,n.key,n)}}var i=r(1),a=r(7),s=a.get,c=(a.deepValue,a.isArray),h=function(){function e(t,r){var n=r.location,o=void 0===n?0:n,i=r.distance,a=void 0===i?100:i,c=r.threshold,h=void 0===c?.6:c,l=r.maxPatternLength,u=void 0===l?32:l,f=r.caseSensitive,v=void 0!==f&amp;&amp;f,p=r.tokenSeparator,d=void 0===p?/ +/g:p,g=r.findAllMatches,y=void 0!==g&amp;&amp;g,m=r.minMatchCharLength,k=void 0===m?1:m,b=r.id,S=void 0===b?null:b,x=r.keys,M=void 0===x?[]:x,_=r.shouldSort,w=void 0===_||_,L=r.getFn,A=void 0===L?s:L,O=r.sortFn,C=void 0===O?function(e,t){return e.score-t.score}:O,j=r.tokenize,P=void 0!==j&amp;&amp;j,I=r.matchAllTokens,F=void 0!==I&amp;&amp;I,T=r.includeMatches,N=void 0!==T&amp;&amp;T,z=r.includeScore,E=void 0!==z&amp;&amp;z,W=r.verbose,K=void 0!==W&amp;&amp;W;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.options={location:o,distance:a,threshold:h,maxPatternLength:u,isCaseSensitive:v,tokenSeparator:d,findAllMatches:y,minMatchCharLength:k,id:S,keys:M,includeMatches:N,includeScore:E,shouldSort:w,getFn:A,sortFn:C,verbose:K,tokenize:P,matchAllTokens:F},this.setCollection(t),this._processKeys(M)}var t,r;return t=e,(r=[{key:\"setCollection\",value:function(e){return this.list=e,e}},{key:\"_processKeys\",value:function(e){if(this._keyWeights={},this._keyNames=[],e.length&amp;&amp;\"string\"==typeof e[0])for(var t=0,r=e.length;t&lt;r;t+=1){var n=e[t];this._keyWeights[n]=1,this._keyNames.push(n)}else{for(var o=null,i=null,a=0,s=0,c=e.length;s&lt;c;s+=1){var h=e[s];if(!h.hasOwnProperty(\"name\"))throw new Error('Missing \"name\" property in key object');var l=h.name;if(this._keyNames.push(l),!h.hasOwnProperty(\"weight\"))throw new Error('Missing \"weight\" property in key object');var u=h.weight;if(u&lt;0||u&gt;1)throw new Error('\"weight\" property in key must bein the range of [0, 1)');i=null==i?u:Math.max(i,u),o=null==o?u:Math.min(o,u),this._keyWeights[l]=u,a+=u}if(a&gt;1)throw new Error(\"Total of weights cannot exceed 1\")}}},{key:\"search\",value:function(e){var t=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:{limit:!1};this._log('---------\\nSearch pattern: \"'.concat(e,'\"'));var r=this._prepareSearchers(e),n=r.tokenSearchers,o=r.fullSearcher,i=this._search(n,o);return this._computeScore(i),this.options.shouldSort&amp;&amp;this._sort(i),t.limit&amp;&amp;\"number\"==typeof t.limit&amp;&amp;(i=i.slice(0,t.limit)),this._format(i)}},{key:\"_prepareSearchers\",value:function(){var e=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:\"\",t=[];if(this.options.tokenize)for(var r=e.split(this.options.tokenSeparator),n=0,o=r.length;n&lt;o;n+=1)t.push(new i(r[n],this.options));return{tokenSearchers:t,fullSearcher:new i(e,this.options)}}},{key:\"_search\",value:function(){var e=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:[],t=arguments.length&gt;1?arguments[1]:void 0,r=this.list,n={},o=[];if(\"string\"==typeof r[0]){for(var i=0,a=r.length;i&lt;a;i+=1)this._analyze({key:\"\",value:r[i],record:i,index:i},{resultMap:n,results:o,tokenSearchers:e,fullSearcher:t});return o}for(var s=0,c=r.length;s&lt;c;s+=1)for(var h=r[s],l=0,u=this._keyNames.length;l&lt;u;l+=1){var f=this._keyNames[l];this._analyze({key:f,value:this.options.getFn(h,f),record:h,index:s},{resultMap:n,results:o,tokenSearchers:e,fullSearcher:t})}return o}},{key:\"_analyze\",value:function(e,t){var r=this,n=e.key,o=e.arrayIndex,i=void 0===o?-1:o,a=e.value,s=e.record,h=e.index,l=t.tokenSearchers,u=void 0===l?[]:l,f=t.fullSearcher,v=t.resultMap,p=void 0===v?{}:v,d=t.results,g=void 0===d?[]:d;!function e(t,o,i,a){if(null!=o)if(\"string\"==typeof o){var s=!1,h=-1,l=0;r._log(\"\\nKey: \".concat(\"\"===n?\"--\":n));var v=f.search(o);if(r._log('Full text: \"'.concat(o,'\", score: ').concat(v.score)),r.options.tokenize){for(var d=o.split(r.options.tokenSeparator),y=d.length,m=[],k=0,b=u.length;k&lt;b;k+=1){var S=u[k];r._log('\\nPattern: \"'.concat(S.pattern,'\"'));for(var x=!1,M=0;M&lt;y;M+=1){var _=d[M],w=S.search(_),L={};w.isMatch?(L[_]=w.score,s=!0,x=!0,m.push(w.score)):(L[_]=1,r.options.matchAllTokens||m.push(1)),r._log('Token: \"'.concat(_,'\", score: ').concat(L[_]))}x&amp;&amp;(l+=1)}h=m[0];for(var A=m.length,O=1;O&lt;A;O+=1)h+=m[O];h/=A,r._log(\"Token score average:\",h)}var C=v.score;h&gt;-1&amp;&amp;(C=(C+h)/2),r._log(\"Score average:\",C);var j=!r.options.tokenize||!r.options.matchAllTokens||l&gt;=u.length;if(r._log(\"\\nCheck Matches: \".concat(j)),(s||v.isMatch)&amp;&amp;j){var P={key:n,arrayIndex:t,value:o,score:C};r.options.includeMatches&amp;&amp;(P.matchedIndices=v.matchedIndices);var I=p[a];I?I.output.push(P):(p[a]={item:i,output:[P]},g.push(p[a]))}}else if(c(o))for(var F=0,T=o.length;F&lt;T;F+=1)e(F,o[F],i,a)}(i,a,s,h)}},{key:\"_computeScore\",value:function(e){this._log(\"\\n\\nComputing score:\\n\");for(var t=this._keyWeights,r=!!Object.keys(t).length,n=0,o=e.length;n&lt;o;n+=1){for(var i=e[n],a=i.output,s=a.length,c=1,h=0;h&lt;s;h+=1){var l=a[h],u=l.key,f=r?t[u]:1,v=0===l.score&amp;&amp;t&amp;&amp;t[u]&gt;0?Number.EPSILON:l.score;c*=Math.pow(v,f)}i.score=c,this._log(i)}}},{key:\"_sort\",value:function(e){this._log(\"\\n\\nSorting....\"),e.sort(this.options.sortFn)}},{key:\"_format\",value:function(e){var t=[];if(this.options.verbose){var r=[];this._log(\"\\n\\nOutput:\\n\\n\",JSON.stringify(e,(function(e,t){if(\"object\"===n(t)&amp;&amp;null!==t){if(-1!==r.indexOf(t))return;r.push(t)}return t}),2)),r=null}var o=[];this.options.includeMatches&amp;&amp;o.push((function(e,t){var r=e.output;t.matches=[];for(var n=0,o=r.length;n&lt;o;n+=1){var i=r[n];if(0!==i.matchedIndices.length){var a={indices:i.matchedIndices,value:i.value};i.key&amp;&amp;(a.key=i.key),i.hasOwnProperty(\"arrayIndex\")&amp;&amp;i.arrayIndex&gt;-1&amp;&amp;(a.arrayIndex=i.arrayIndex),t.matches.push(a)}}})),this.options.includeScore&amp;&amp;o.push((function(e,t){t.score=e.score}));for(var i=0,a=e.length;i&lt;a;i+=1){var s=e[i];if(this.options.id&amp;&amp;(s.item=this.options.getFn(s.item,this.options.id)[0]),o.length){for(var c={item:s.item},h=0,l=o.length;h&lt;l;h+=1)o[h](s,c);t.push(c)}else t.push(s.item)}return t}},{key:\"_log\",value:function(){var e;this.options.verbose&amp;&amp;(e=console).log.apply(e,arguments)}}])&amp;&amp;o(t.prototype,r),e}();e.exports=h},function(e,t,r){function n(e,t){for(var r=0;r&lt;t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&amp;&amp;(n.writable=!0),Object.defineProperty(e,n.key,n)}}var o=r(2),i=r(3),a=r(6),s=function(){function e(t,r){var n=r.location,o=void 0===n?0:n,i=r.distance,s=void 0===i?100:i,c=r.threshold,h=void 0===c?.6:c,l=r.maxPatternLength,u=void 0===l?32:l,f=r.isCaseSensitive,v=void 0!==f&amp;&amp;f,p=r.tokenSeparator,d=void 0===p?/ +/g:p,g=r.findAllMatches,y=void 0!==g&amp;&amp;g,m=r.minMatchCharLength,k=void 0===m?1:m,b=r.includeMatches,S=void 0!==b&amp;&amp;b;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.options={location:o,distance:s,threshold:h,maxPatternLength:u,isCaseSensitive:v,tokenSeparator:d,findAllMatches:y,includeMatches:S,minMatchCharLength:k},this.pattern=v?t:t.toLowerCase(),this.pattern.length&lt;=u&amp;&amp;(this.patternAlphabet=a(this.pattern))}var t,r;return t=e,(r=[{key:\"search\",value:function(e){var t=this.options,r=t.isCaseSensitive,n=t.includeMatches;if(r||(e=e.toLowerCase()),this.pattern===e){var a={isMatch:!0,score:0};return n&amp;&amp;(a.matchedIndices=[[0,e.length-1]]),a}var s=this.options,c=s.maxPatternLength,h=s.tokenSeparator;if(this.pattern.length&gt;c)return o(e,this.pattern,h);var l=this.options,u=l.location,f=l.distance,v=l.threshold,p=l.findAllMatches,d=l.minMatchCharLength;return i(e,this.pattern,this.patternAlphabet,{location:u,distance:f,threshold:v,findAllMatches:p,minMatchCharLength:d,includeMatches:n})}}])&amp;&amp;n(t.prototype,r),e}();e.exports=s},function(e,t){var r=/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g;e.exports=function(e,t){var n=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:/ +/g,o=new RegExp(t.replace(r,\"\\\\$&amp;\").replace(n,\"|\")),i=e.match(o),a=!!i,s=[];if(a)for(var c=0,h=i.length;c&lt;h;c+=1){var l=i[c];s.push([e.indexOf(l),l.length-1])}return{score:a?.5:1,isMatch:a,matchedIndices:s}}},function(e,t,r){var n=r(4),o=r(5);e.exports=function(e,t,r,i){for(var a=i.location,s=void 0===a?0:a,c=i.distance,h=void 0===c?100:c,l=i.threshold,u=void 0===l?.6:l,f=i.findAllMatches,v=void 0!==f&amp;&amp;f,p=i.minMatchCharLength,d=void 0===p?1:p,g=i.includeMatches,y=void 0!==g&amp;&amp;g,m=s,k=e.length,b=u,S=e.indexOf(t,m),x=t.length,M=[],_=0;_&lt;k;_+=1)M[_]=0;if(-1!==S){var w=n(t,{errors:0,currentLocation:S,expectedLocation:m,distance:h});if(b=Math.min(w,b),-1!==(S=e.lastIndexOf(t,m+x))){var L=n(t,{errors:0,currentLocation:S,expectedLocation:m,distance:h});b=Math.min(L,b)}}S=-1;for(var A=[],O=1,C=x+k,j=1&lt;&lt;(x&lt;=31?x-1:30),P=0;P&lt;x;P+=1){for(var I=0,F=C;I&lt;F;)n(t,{errors:P,currentLocation:m+F,expectedLocation:m,distance:h})&lt;=b?I=F:C=F,F=Math.floor((C-I)/2+I);C=F;var T=Math.max(1,m-F+1),N=v?k:Math.min(m+F,k)+x,z=Array(N+2);z[N+1]=(1&lt;&lt;P)-1;for(var E=N;E&gt;=T;E-=1){var W=E-1,K=r[e.charAt(W)];if(K&amp;&amp;(M[W]=1),z[E]=(z[E+1]&lt;&lt;1|1)&amp;K,0!==P&amp;&amp;(z[E]|=(A[E+1]|A[E])&lt;&lt;1|1|A[E+1]),z[E]&amp;j&amp;&amp;(O=n(t,{errors:P,currentLocation:W,expectedLocation:m,distance:h}))&lt;=b){if(b=O,(S=W)&lt;=m)break;T=Math.max(1,2*m-S)}}if(n(t,{errors:P+1,currentLocation:m,expectedLocation:m,distance:h})&gt;b)break;A=z}var $={isMatch:S&gt;=0,score:0===O?.001:O};return y&amp;&amp;($.matchedIndices=o(M,d)),$}},function(e,t){e.exports=function(e,t){var r=t.errors,n=void 0===r?0:r,o=t.currentLocation,i=void 0===o?0:o,a=t.expectedLocation,s=void 0===a?0:a,c=t.distance,h=void 0===c?100:c,l=n/e.length,u=Math.abs(s-i);return h?l+u/h:u?1:l}},function(e,t){e.exports=function(){for(var e=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:[],t=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:1,r=[],n=-1,o=-1,i=0,a=e.length;i&lt;a;i+=1){var s=e[i];s&amp;&amp;-1===n?n=i:s||-1===n||((o=i-1)-n+1&gt;=t&amp;&amp;r.push([n,o]),n=-1)}return e[i-1]&amp;&amp;i-n&gt;=t&amp;&amp;r.push([n,i-1]),r}},function(e,t){e.exports=function(e){for(var t={},r=e.length,n=0;n&lt;r;n+=1)t[e.charAt(n)]=0;for(var o=0;o&lt;r;o+=1)t[e.charAt(o)]|=1&lt;&lt;r-o-1;return t}},function(e,t){var r=function(e){return Array.isArray?Array.isArray(e):\"[object Array]\"===Object.prototype.toString.call(e)},n=function(e){return null==e?\"\":function(e){if(\"string\"==typeof e)return e;var t=e+\"\";return\"0\"==t&amp;&amp;1/e==-1/0?\"-0\":t}(e)},o=function(e){return\"string\"==typeof e},i=function(e){return\"number\"==typeof e};e.exports={get:function(e,t){var a=[];return function e(t,s){if(s){var c=s.indexOf(\".\"),h=s,l=null;-1!==c&amp;&amp;(h=s.slice(0,c),l=s.slice(c+1));var u=t[h];if(null!=u)if(l||!o(u)&amp;&amp;!i(u))if(r(u))for(var f=0,v=u.length;f&lt;v;f+=1)e(u[f],l);else l&amp;&amp;e(u,l);else a.push(n(u))}else a.push(t)}(e,t),a},isArray:r,isString:o,isNum:i,toString:n}}])},function(module,exports,__webpack_require__){var api=__webpack_require__(2),content=__webpack_require__(153);\"string\"==typeof(content=content.__esModule?content.default:content)&amp;&amp;(content=[[module.i,content,\"\"]]);var options={insert:\"head\",singleton:!1},exported=(api(content,options),content.locals?content.locals:{});module.exports=exported},function(module,exports,__webpack_require__){(exports=__webpack_require__(3)(!1)).push([module.i,'.flex{display:flex}.flex--align-start{align-items:flex-start}.flex--align-end{align-items:flex-end}.flex--align-center{align-items:center}.flex--align-stretch{align-items:stretch}.flex--align-baseline{align-items:baseline}.flex--justify-start{justify-content:flex-start}.flex--justify-end{justify-content:flex-end}.flex--justify-center{justify-content:center}.flex--justify-around{justify-content:space-around}.flex--justify-between{justify-content:space-between}.flex--justify-evenly{justify-content:space-evenly}@keyframes scale{0%{-webkit-transform:scale(0.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes scale{0%{-webkit-transform:scale(1.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}*{box-sizing:border-box}@font-face{font-family:\\'Takeaway Sans Regular\\';font-style:normal;font-weight:400;src:url(\"//assets.takeaway.com/fonts/takeaway-sans/takeaway-sans-regular.eot\");src:local(\"Takeaway Sans Regular\"),url(\"//assets.takeaway.com/fonts/takeaway-sans/takeaway-sans-regular.eot?#iefix\") format(\"embedded-opentype\"),url(\"//assets.takeaway.com/fonts/takeaway-sans/takeaway-sans-regular.woff2\") format(\"woff2\"),url(\"//assets.takeaway.com/fonts/takeaway-sans/takeaway-sans-regular.woff\") format(\"woff\"),url(\"//assets.takeaway.com/fonts/takeaway-sans/takeaway-sans-regular.ttf\") format(\"truetype\")}@font-face{font-family:\\'Takeaway Sans Bold\\';font-style:normal;font-weight:700;src:url(\"//assets.takeaway.com/fonts/takeaway-sans/takeaway-sans-bold.eot\");src:local(\"Takeaway Sans Bold\"),url(\"//assets.takeaway.com/fonts/takeaway-sans/takeaway-sans-bold.eot?#iefix\") format(\"embedded-opentype\"),url(\"//assets.takeaway.com/fonts/takeaway-sans/takeaway-sans-bold.woff2\") format(\"woff2\"),url(\"//assets.takeaway.com/fonts/takeaway-sans/takeaway-sans-bold.woff\") format(\"woff\"),url(\"//assets.takeaway.com/fonts/takeaway-sans/takeaway-sans-bold.ttf\") format(\"truetype\")}.alertify{font-family:\\'Takeaway Sans Regular\\', \\'Avant Garde\\', \\'Century Gothic\\', Helvetica, Arial, sans-serif;font-weight:400;display:flex;flex-direction:row;align-items:stretch;background-color:#0a3847;color:#fff;font-size:14px;padding:29px 37px;text-align:left}@media (max-width: 570px){.alertify{padding:22px 21px}}.alertify__icon{margin:4px 0 0}.alertify__icon .tv-icon{width:21px}.alertify__icon .tv-icon [class^=\\'tv-icon-\\']{width:100%;fill:#fff}.alertify__content{margin:0 25px 0 17px}@media (max-width: 570px){.alertify__content{margin:0 6px 0 16px}}.alertify__header{font-family:\\'Takeaway Sans Bold\\', \\'Avant Garde\\', \\'Century Gothic\\', Helvetica, Arial, sans-serif;font-weight:700;font-size:16px;line-height:1.5em}.alertify strong,.alertify b{font-family:\\'Takeaway Sans Bold\\', \\'Avant Garde\\', \\'Century Gothic\\', Helvetica, Arial, sans-serif;font-weight:700;color:#f86600}\\n',\"\"]),module.exports=exports},function(module,exports,__webpack_require__){var api=__webpack_require__(2),content=__webpack_require__(155);\"string\"==typeof(content=content.__esModule?content.default:content)&amp;&amp;(content=[[module.i,content,\"\"]]);var options={insert:\"head\",singleton:!1},exported=(api(content,options),content.locals?content.locals:{});module.exports=exported},function(module,exports,__webpack_require__){(exports=__webpack_require__(3)(!1)).push([module.i,\".flex{display:flex}.flex--align-start{align-items:flex-start}.flex--align-end{align-items:flex-end}.flex--align-center{align-items:center}.flex--align-stretch{align-items:stretch}.flex--align-baseline{align-items:baseline}.flex--justify-start{justify-content:flex-start}.flex--justify-end{justify-content:flex-end}.flex--justify-center{justify-content:center}.flex--justify-around{justify-content:space-around}.flex--justify-between{justify-content:space-between}.flex--justify-evenly{justify-content:space-evenly}@keyframes scale{0%{-webkit-transform:scale(0.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes scale{0%{-webkit-transform:scale(1.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}*{box-sizing:border-box}.tv-icon{display:flex}[class^='tv-icon-']{fill:#000;font-size:1rem;width:1rem;height:1rem}\\n\",\"\"]),module.exports=exports},function(module,exports){module.exports=function(module){return module.webpackPolyfill||(module.deprecate=function(){},module.paths=[],module.children||(module.children=[]),Object.defineProperty(module,\"loaded\",{enumerable:!0,get:function(){return module.l}}),Object.defineProperty(module,\"id\",{enumerable:!0,get:function(){return module.i}}),module.webpackPolyfill=1),module}},function(module,exports,__webpack_require__){var map={\"./af\":5,\"./af.js\":5,\"./ar\":6,\"./ar-dz\":7,\"./ar-dz.js\":7,\"./ar-kw\":8,\"./ar-kw.js\":8,\"./ar-ly\":9,\"./ar-ly.js\":9,\"./ar-ma\":10,\"./ar-ma.js\":10,\"./ar-sa\":11,\"./ar-sa.js\":11,\"./ar-tn\":12,\"./ar-tn.js\":12,\"./ar.js\":6,\"./az\":13,\"./az.js\":13,\"./be\":14,\"./be.js\":14,\"./bg\":15,\"./bg.js\":15,\"./bm\":16,\"./bm.js\":16,\"./bn\":17,\"./bn-bd\":18,\"./bn-bd.js\":18,\"./bn.js\":17,\"./bo\":19,\"./bo.js\":19,\"./br\":20,\"./br.js\":20,\"./bs\":21,\"./bs.js\":21,\"./ca\":22,\"./ca.js\":22,\"./cs\":23,\"./cs.js\":23,\"./cv\":24,\"./cv.js\":24,\"./cy\":25,\"./cy.js\":25,\"./da\":26,\"./da.js\":26,\"./de\":27,\"./de-at\":28,\"./de-at.js\":28,\"./de-ch\":29,\"./de-ch.js\":29,\"./de.js\":27,\"./dv\":30,\"./dv.js\":30,\"./el\":31,\"./el.js\":31,\"./en-au\":32,\"./en-au.js\":32,\"./en-ca\":33,\"./en-ca.js\":33,\"./en-gb\":34,\"./en-gb.js\":34,\"./en-ie\":35,\"./en-ie.js\":35,\"./en-il\":36,\"./en-il.js\":36,\"./en-in\":37,\"./en-in.js\":37,\"./en-nz\":38,\"./en-nz.js\":38,\"./en-sg\":39,\"./en-sg.js\":39,\"./eo\":40,\"./eo.js\":40,\"./es\":41,\"./es-do\":42,\"./es-do.js\":42,\"./es-mx\":43,\"./es-mx.js\":43,\"./es-us\":44,\"./es-us.js\":44,\"./es.js\":41,\"./et\":45,\"./et.js\":45,\"./eu\":46,\"./eu.js\":46,\"./fa\":47,\"./fa.js\":47,\"./fi\":48,\"./fi.js\":48,\"./fil\":49,\"./fil.js\":49,\"./fo\":50,\"./fo.js\":50,\"./fr\":51,\"./fr-ca\":52,\"./fr-ca.js\":52,\"./fr-ch\":53,\"./fr-ch.js\":53,\"./fr.js\":51,\"./fy\":54,\"./fy.js\":54,\"./ga\":55,\"./ga.js\":55,\"./gd\":56,\"./gd.js\":56,\"./gl\":57,\"./gl.js\":57,\"./gom-deva\":58,\"./gom-deva.js\":58,\"./gom-latn\":59,\"./gom-latn.js\":59,\"./gu\":60,\"./gu.js\":60,\"./he\":61,\"./he.js\":61,\"./hi\":62,\"./hi.js\":62,\"./hr\":63,\"./hr.js\":63,\"./hu\":64,\"./hu.js\":64,\"./hy-am\":65,\"./hy-am.js\":65,\"./id\":66,\"./id.js\":66,\"./is\":67,\"./is.js\":67,\"./it\":68,\"./it-ch\":69,\"./it-ch.js\":69,\"./it.js\":68,\"./ja\":70,\"./ja.js\":70,\"./jv\":71,\"./jv.js\":71,\"./ka\":72,\"./ka.js\":72,\"./kk\":73,\"./kk.js\":73,\"./km\":74,\"./km.js\":74,\"./kn\":75,\"./kn.js\":75,\"./ko\":76,\"./ko.js\":76,\"./ku\":77,\"./ku.js\":77,\"./ky\":78,\"./ky.js\":78,\"./lb\":79,\"./lb.js\":79,\"./lo\":80,\"./lo.js\":80,\"./lt\":81,\"./lt.js\":81,\"./lv\":82,\"./lv.js\":82,\"./me\":83,\"./me.js\":83,\"./mi\":84,\"./mi.js\":84,\"./mk\":85,\"./mk.js\":85,\"./ml\":86,\"./ml.js\":86,\"./mn\":87,\"./mn.js\":87,\"./mr\":88,\"./mr.js\":88,\"./ms\":89,\"./ms-my\":90,\"./ms-my.js\":90,\"./ms.js\":89,\"./mt\":91,\"./mt.js\":91,\"./my\":92,\"./my.js\":92,\"./nb\":93,\"./nb.js\":93,\"./ne\":94,\"./ne.js\":94,\"./nl\":95,\"./nl-be\":96,\"./nl-be.js\":96,\"./nl.js\":95,\"./nn\":97,\"./nn.js\":97,\"./oc-lnc\":98,\"./oc-lnc.js\":98,\"./pa-in\":99,\"./pa-in.js\":99,\"./pl\":100,\"./pl.js\":100,\"./pt\":101,\"./pt-br\":102,\"./pt-br.js\":102,\"./pt.js\":101,\"./ro\":103,\"./ro.js\":103,\"./ru\":104,\"./ru.js\":104,\"./sd\":105,\"./sd.js\":105,\"./se\":106,\"./se.js\":106,\"./si\":107,\"./si.js\":107,\"./sk\":108,\"./sk.js\":108,\"./sl\":109,\"./sl.js\":109,\"./sq\":110,\"./sq.js\":110,\"./sr\":111,\"./sr-cyrl\":112,\"./sr-cyrl.js\":112,\"./sr.js\":111,\"./ss\":113,\"./ss.js\":113,\"./sv\":114,\"./sv.js\":114,\"./sw\":115,\"./sw.js\":115,\"./ta\":116,\"./ta.js\":116,\"./te\":117,\"./te.js\":117,\"./tet\":118,\"./tet.js\":118,\"./tg\":119,\"./tg.js\":119,\"./th\":120,\"./th.js\":120,\"./tk\":121,\"./tk.js\":121,\"./tl-ph\":122,\"./tl-ph.js\":122,\"./tlh\":123,\"./tlh.js\":123,\"./tr\":124,\"./tr.js\":124,\"./tzl\":125,\"./tzl.js\":125,\"./tzm\":126,\"./tzm-latn\":127,\"./tzm-latn.js\":127,\"./tzm.js\":126,\"./ug-cn\":128,\"./ug-cn.js\":128,\"./uk\":129,\"./uk.js\":129,\"./ur\":130,\"./ur.js\":130,\"./uz\":131,\"./uz-latn\":132,\"./uz-latn.js\":132,\"./uz.js\":131,\"./vi\":133,\"./vi.js\":133,\"./x-pseudo\":134,\"./x-pseudo.js\":134,\"./yo\":135,\"./yo.js\":135,\"./zh-cn\":136,\"./zh-cn.js\":136,\"./zh-hk\":137,\"./zh-hk.js\":137,\"./zh-mo\":138,\"./zh-mo.js\":138,\"./zh-tw\":139,\"./zh-tw.js\":139};function webpackContext(req){var id=webpackContextResolve(req);return __webpack_require__(id)}function webpackContextResolve(req){if(!__webpack_require__.o(map,req)){var e=new Error(\"Cannot find module '\"+req+\"'\");throw e.code=\"MODULE_NOT_FOUND\",e}return map[req]}webpackContext.keys=function(){return Object.keys(map)},webpackContext.resolve=webpackContextResolve,module.exports=webpackContext,webpackContext.id=157},function(module,exports,__webpack_require__){var api=__webpack_require__(2),content=__webpack_require__(159);\"string\"==typeof(content=content.__esModule?content.default:content)&amp;&amp;(content=[[module.i,content,\"\"]]);var options={insert:\"head\",singleton:!1},exported=(api(content,options),content.locals?content.locals:{});module.exports=exported},function(module,exports,__webpack_require__){(exports=__webpack_require__(3)(!1)).push([module.i,\".flex{display:flex}.flex--align-start{align-items:flex-start}.flex--align-end{align-items:flex-end}.flex--align-center{align-items:center}.flex--align-stretch{align-items:stretch}.flex--align-baseline{align-items:baseline}.flex--justify-start{justify-content:flex-start}.flex--justify-end{justify-content:flex-end}.flex--justify-center{justify-content:center}.flex--justify-around{justify-content:space-around}.flex--justify-between{justify-content:space-between}.flex--justify-evenly{justify-content:space-evenly}@keyframes scale{0%{-webkit-transform:scale(0.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes scale{0%{-webkit-transform:scale(1.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}*{box-sizing:border-box}.tv-button{background-color:#fff;border-radius:2px;border:1px solid #d7d7d7;color:#125fca;cursor:pointer;font-size:14px;font-weight:bold;height:48px;outline:0}.tv-button:hover,.tv-button:focus{color:#fff;background-color:#125fca}\\n\",\"\"]),module.exports=exports},function(module,exports,__webpack_require__){var api=__webpack_require__(2),content=__webpack_require__(161);\"string\"==typeof(content=content.__esModule?content.default:content)&amp;&amp;(content=[[module.i,content,\"\"]]);var options={insert:\"head\",singleton:!1},exported=(api(content,options),content.locals?content.locals:{});module.exports=exported},function(module,exports,__webpack_require__){(exports=__webpack_require__(3)(!1)).push([module.i,\".flex{display:flex}.flex--align-start{align-items:flex-start}.flex--align-end{align-items:flex-end}.flex--align-center{align-items:center}.flex--align-stretch{align-items:stretch}.flex--align-baseline{align-items:baseline}.flex--justify-start{justify-content:flex-start}.flex--justify-end{justify-content:flex-end}.flex--justify-center{justify-content:center}.flex--justify-around{justify-content:space-around}.flex--justify-between{justify-content:space-between}.flex--justify-evenly{justify-content:space-evenly}@keyframes scale{0%{-webkit-transform:scale(0.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes scale{0%{-webkit-transform:scale(1.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}*{box-sizing:border-box}.tv-popup{background-color:rgba(0,0,0,0.4);bottom:0;height:100vh;left:0;opacity:1;position:fixed;right:0;top:0;width:100%;z-index:20}.tv-popup__icon-close{background-color:transparent;border:0;cursor:pointer;height:64px;position:absolute;right:0;top:0;width:64px;z-index:2}.tv-popup__inner{background-color:#fff;display:flex;flex-direction:column;min-height:100vh;height:100%;width:100vw;position:relative}@media (min-width: 1004px){.tv-popup__inner{height:50vh;min-height:610px;max-width:672px;margin:80px auto;border-radius:2px}}@media all and (min-width: 1004px) and (-ms-high-contrast: none){.tv-popup__inner{height:610px}}.tv-popup__header,.tv-popup__content{padding:0 20px}.tv-popup__header{flex:0 0 auto;position:relative;top:0;margin-bottom:15px}.tv-popup__content{flex:1 1 auto;overflow:auto;height:100%;display:flex}.tv-popup .tv-icon-cross{fill:#0a3847;width:12px}.tv-scroll-stop{overflow:hidden}\\n\",\"\"]),module.exports=exports},function(module,exports,__webpack_require__){var api=__webpack_require__(2),content=__webpack_require__(163);\"string\"==typeof(content=content.__esModule?content.default:content)&amp;&amp;(content=[[module.i,content,\"\"]]);var options={insert:\"head\",singleton:!1},exported=(api(content,options),content.locals?content.locals:{});module.exports=exported},function(module,exports,__webpack_require__){(exports=__webpack_require__(3)(!1)).push([module.i,\".flex{display:flex}.flex--align-start{align-items:flex-start}.flex--align-end{align-items:flex-end}.flex--align-center{align-items:center}.flex--align-stretch{align-items:stretch}.flex--align-baseline{align-items:baseline}.flex--justify-start{justify-content:flex-start}.flex--justify-end{justify-content:flex-end}.flex--justify-center{justify-content:center}.flex--justify-around{justify-content:space-around}.flex--justify-between{justify-content:space-between}.flex--justify-evenly{justify-content:space-evenly}@keyframes scale{0%{-webkit-transform:scale(0.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes scale{0%{-webkit-transform:scale(1.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}*{box-sizing:border-box}.tv-chips-container{display:block;width:100%;color:#0a3847}.tv-chips-container--no-results{display:flex;flex:1;justify-content:center}.tv-chips-no-results{display:none}.tv-chips-no-results__text{color:#0a3847;font-size:18px;font-weight:bold}.tv-chips-container--no-results .tv-chips-no-results{display:flex;flex-direction:column;align-self:center;justify-content:center;padding:0 0 100px}.tv-chips-container--no-results .tv-chips-no-results .tv-icon-search{display:flex;fill:#0a3847;height:32px;width:32px}.tv-chips-container--no-results .tv-chips-no-results__button{min-width:260px}.tv-chips-results{display:flex;flex-wrap:wrap;justify-content:flex-start}.tv-chips-results:focus{outline:0}.tv-chips-container--no-results .tv-chips-results{display:none}.tv-chips-container--filter-active .tv-chips-results{flex-direction:column}.tv-chips-container--filter-active .tv-chips-results .tv-chips-results__item{flex:1 0 auto}.tv-chips-container--filter-active .tv-chips-results .tv-chips-results__item--select-all{display:none}.tv-chips-results__item{flex:0 0 180px;margin-bottom:16px}.tv-chips-results__item--hidden{display:none}.tv-chips-results__item--first{order:-1}.tv-chips-results__item--selected{display:block}.tv-chips-results__item--select-all{order:-3}.tv-chips-results__item--select-effect{scale:1.1}\\n\",\"\"]),module.exports=exports},function(module,exports,__webpack_require__){var api=__webpack_require__(2),content=__webpack_require__(165);\"string\"==typeof(content=content.__esModule?content.default:content)&amp;&amp;(content=[[module.i,content,\"\"]]);var options={insert:\"head\",singleton:!1},exported=(api(content,options),content.locals?content.locals:{});module.exports=exported},function(module,exports,__webpack_require__){(exports=__webpack_require__(3)(!1)).push([module.i,\".flex{display:flex}.flex--align-start{align-items:flex-start}.flex--align-end{align-items:flex-end}.flex--align-center{align-items:center}.flex--align-stretch{align-items:stretch}.flex--align-baseline{align-items:baseline}.flex--justify-start{justify-content:flex-start}.flex--justify-end{justify-content:flex-end}.flex--justify-center{justify-content:center}.flex--justify-around{justify-content:space-around}.flex--justify-between{justify-content:space-between}.flex--justify-evenly{justify-content:space-evenly}@keyframes scale{0%{-webkit-transform:scale(0.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes scale{0%{-webkit-transform:scale(1.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}*{box-sizing:border-box}.tv-chip{align-items:center;background-color:#fff;border-radius:16px;cursor:pointer;display:inline-flex;font-family:Roboto Slab, Arial, serif;font-size:14px;height:1px;justify-content:center;line-height:32px;margin:0;min-height:32px;padding:7px 12px}.focused .tv-chip{outline:none}.tv-chips-results__item--selected .tv-chip{background-color:#f86600;color:#fff}\\n\",\"\"]),module.exports=exports},function(module,exports,__webpack_require__){var api=__webpack_require__(2),content=__webpack_require__(167);\"string\"==typeof(content=content.__esModule?content.default:content)&amp;&amp;(content=[[module.i,content,\"\"]]);var options={insert:\"head\",singleton:!1},exported=(api(content,options),content.locals?content.locals:{});module.exports=exported},function(module,exports,__webpack_require__){(exports=__webpack_require__(3)(!1)).push([module.i,\".flex{display:flex}.flex--align-start{align-items:flex-start}.flex--align-end{align-items:flex-end}.flex--align-center{align-items:center}.flex--align-stretch{align-items:stretch}.flex--align-baseline{align-items:baseline}.flex--justify-start{justify-content:flex-start}.flex--justify-end{justify-content:flex-end}.flex--justify-center{justify-content:center}.flex--justify-around{justify-content:space-around}.flex--justify-between{justify-content:space-between}.flex--justify-evenly{justify-content:space-evenly}@keyframes scale{0%{-webkit-transform:scale(0.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes scale{0%{-webkit-transform:scale(1.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}*{box-sizing:border-box}.tv-searchbox{align-items:center;border-radius:2px;border:1px solid #d7d7d7;box-sizing:border-box;display:inline-flex;font-family:Roboto, 'Helvetica Neue', sans-serif;font-weight:400;line-height:20px;padding:8px;text-align:left;width:100%}.tv-searchbox [type='search']::-webkit-search-decoration,.tv-searchbox [type='search']::-webkit-search-cancel-button,.tv-searchbox [type='search']::-webkit-search-results-button,.tv-searchbox [type='search']::-webkit-search-results-decoration{-webkit-appearance:none}.tv-searchbox .tv-icon-search{fill:#0a3847}.tv-searchbox__searchfield{border:0;flex:1;font-size:16px;margin-left:20px;outline:0}.tv-searchbox__searchfield::placeholder{color:#666;font-size:14px}.tv-searchbox__clear-search{background-color:#fff;border:0;display:none;outline:0}.tv-searchbox__clear-search .tv-icon-cross-circle{fill:#0a3847}.tv-searchbox__clear-search--show{display:inline-block}\\n\",\"\"]),module.exports=exports},function(module,exports,__webpack_require__){var api=__webpack_require__(2),content=__webpack_require__(169);\"string\"==typeof(content=content.__esModule?content.default:content)&amp;&amp;(content=[[module.i,content,\"\"]]);var options={insert:\"head\",singleton:!1},exported=(api(content,options),content.locals?content.locals:{});module.exports=exported},function(module,exports,__webpack_require__){(exports=__webpack_require__(3)(!1)).push([module.i,\".flex{display:flex}.flex--align-start{align-items:flex-start}.flex--align-end{align-items:flex-end}.flex--align-center{align-items:center}.flex--align-stretch{align-items:stretch}.flex--align-baseline{align-items:baseline}.flex--justify-start{justify-content:flex-start}.flex--justify-end{justify-content:flex-end}.flex--justify-center{justify-content:center}.flex--justify-around{justify-content:space-around}.flex--justify-between{justify-content:space-between}.flex--justify-evenly{justify-content:space-evenly}@keyframes scale{0%{-webkit-transform:scale(0.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes scale{0%{-webkit-transform:scale(1.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}*{box-sizing:border-box}.content-toggle{overflow:hidden;position:relative}.content-toggle__link{white-space:nowrap;padding-left:4em;color:#f86600;cursor:pointer;display:block;font-size:inherit;line-height:inherit;position:absolute;text-align:right}.content-toggle__link:hover{color:#f86600;text-decoration:underline}.content-toggle__link:focus{color:#f86600}.content-toggle__link--expanded{display:block;text-align:left;position:relative;padding-left:0}.content-toggle__link--multi-line{line-height:inherit}.content-toggle__link--primary{background:linear-gradient(to right, rgba(255,255,255,0), #fff 4em)}.content-toggle__link--primary.content-toggle__link--expanded{background:#fff}.content-toggle__link--secondary{background:linear-gradient(to right, rgba(255,255,255,0), #f8f5f2 4em)}.content-toggle__link--secondary.content-toggle__link--expanded{background:#f8f5f2}.content-toggle--last-letter{display:inline-block}.content-toggle--expanded{white-space:initial}.content-toggle--single-line{height:1.5em}\\n\",\"\"]),module.exports=exports},function(module,exports,__webpack_require__){var api=__webpack_require__(2),content=__webpack_require__(171);\"string\"==typeof(content=content.__esModule?content.default:content)&amp;&amp;(content=[[module.i,content,\"\"]]);var options={insert:\"head\",singleton:!1},exported=(api(content,options),content.locals?content.locals:{});module.exports=exported},function(module,exports,__webpack_require__){(exports=__webpack_require__(3)(!1)).push([module.i,\".flex{display:flex}.flex--align-start{align-items:flex-start}.flex--align-end{align-items:flex-end}.flex--align-center{align-items:center}.flex--align-stretch{align-items:stretch}.flex--align-baseline{align-items:baseline}.flex--justify-start{justify-content:flex-start}.flex--justify-end{justify-content:flex-end}.flex--justify-center{justify-content:center}.flex--justify-around{justify-content:space-around}.flex--justify-between{justify-content:space-between}.flex--justify-evenly{justify-content:space-evenly}@keyframes scale{0%{-webkit-transform:scale(0.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes scale{0%{-webkit-transform:scale(1.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}*{box-sizing:border-box}.cookie-settings{font-size:0.75rem;margin-bottom:1rem}@media (min-width: 1004px){.cookie-settings{font-size:0.875rem}}.cookie-settings__cards{display:flex;flex-direction:column}@media (min-width: 1004px){.cookie-settings__cards{flex-direction:row}}.cookie-settings__card{flex:1;border:1px solid #d7d7d7;padding:0.75rem;cursor:pointer}.cookie-settings__card:hover{background-color:#f6f6f6}.cookie-settings__card:first-child{margin-bottom:0.5rem}@media (min-width: 1004px){.cookie-settings__card:first-child{margin:0 2rem 0 0}}.cookie-settings__card-desc{margin:0 !important}.cookie-settings .radio{font-weight:bold;height:1.5rem}@media (min-width: 1004px){.cookie-settings .radio{font-size:0.875rem}}_:-ms-fullscreen .cookie-settings__card,:root .cookie-settings__card{flex:1 0 auto}@media (min-width: 1004px){_:-ms-fullscreen .cookie-settings__card,:root .cookie-settings__card{flex:1}}\\n\",\"\"]),module.exports=exports},function(module,exports,__webpack_require__){var api=__webpack_require__(2),content=__webpack_require__(173);\"string\"==typeof(content=content.__esModule?content.default:content)&amp;&amp;(content=[[module.i,content,\"\"]]);var options={insert:\"head\",singleton:!1},exported=(api(content,options),content.locals?content.locals:{});module.exports=exported},function(module,exports,__webpack_require__){(exports=__webpack_require__(3)(!1)).push([module.i,\".flex{display:flex}.flex--align-start{align-items:flex-start}.flex--align-end{align-items:flex-end}.flex--align-center{align-items:center}.flex--align-stretch{align-items:stretch}.flex--align-baseline{align-items:baseline}.flex--justify-start{justify-content:flex-start}.flex--justify-end{justify-content:flex-end}.flex--justify-center{justify-content:center}.flex--justify-around{justify-content:space-around}.flex--justify-between{justify-content:space-between}.flex--justify-evenly{justify-content:space-evenly}@keyframes scale{0%{-webkit-transform:scale(0.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes scale{0%{-webkit-transform:scale(1.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}*{box-sizing:border-box}.radio{display:flex;position:relative}.radio__title{display:block;padding:2px 0 0 2rem}.radio__input{height:1rem;left:0;opacity:0;position:absolute;top:0;width:1rem}.radio__input+.radio__title:before{border-radius:50%;border:1px solid #e9e9e9;content:'';height:1rem;left:0;position:absolute;top:0;width:1rem}.radio__input+.radio__title:after{border-radius:50%;border:5px solid #f86600;content:'';left:4px;opacity:0;position:absolute;top:4px;transition:opacity 0.2s ease-in-out}.radio__input:checked+.radio__title:after{opacity:1}.radio__input:focus+.radio__title:before{box-shadow:0 0 0 1px #f86600;outline:1px solid transparent}\\n\",\"\"]),module.exports=exports},function(module,exports,__webpack_require__){var api=__webpack_require__(2),content=__webpack_require__(175);\"string\"==typeof(content=content.__esModule?content.default:content)&amp;&amp;(content=[[module.i,content,\"\"]]);var options={insert:\"head\",singleton:!1},exported=(api(content,options),content.locals?content.locals:{});module.exports=exported},function(module,exports,__webpack_require__){(exports=__webpack_require__(3)(!1)).push([module.i,'.flex{display:flex}.flex--align-start{align-items:flex-start}.flex--align-end{align-items:flex-end}.flex--align-center{align-items:center}.flex--align-stretch{align-items:stretch}.flex--align-baseline{align-items:baseline}.flex--justify-start{justify-content:flex-start}.flex--justify-end{justify-content:flex-end}.flex--justify-center{justify-content:center}.flex--justify-around{justify-content:space-around}.flex--justify-between{justify-content:space-between}.flex--justify-evenly{justify-content:space-evenly}@keyframes scale{0%{-webkit-transform:scale(0.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes scale{0%{-webkit-transform:scale(1.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}*{box-sizing:border-box}@font-face{font-family:\\'Takeaway Sans Regular\\';font-style:normal;font-weight:400;src:url(\"//assets.takeaway.com/fonts/takeaway-sans/takeaway-sans-regular.eot\");src:local(\"Takeaway Sans Regular\"),url(\"//assets.takeaway.com/fonts/takeaway-sans/takeaway-sans-regular.eot?#iefix\") format(\"embedded-opentype\"),url(\"//assets.takeaway.com/fonts/takeaway-sans/takeaway-sans-regular.woff2\") format(\"woff2\"),url(\"//assets.takeaway.com/fonts/takeaway-sans/takeaway-sans-regular.woff\") format(\"woff\"),url(\"//assets.takeaway.com/fonts/takeaway-sans/takeaway-sans-regular.ttf\") format(\"truetype\")}.cc-banner{width:100%;position:fixed;bottom:0;box-sizing:border-box;z-index:999999}.cc-banner *,.cc-banner *:after,.cc-banner *:before{box-sizing:inherit;margin:0;padding:0}.cc-banner *:focus{outline:none}.cc-banner__container{align-items:center;background:#0a3847;bottom:0;display:flex;justify-content:center}.cc-banner__wrapper{align-items:flex-start;display:flex;flex-direction:column;margin:20px 15px;max-width:440px;width:100%}@media only screen and (min-width: 1004px){.cc-banner__wrapper{max-width:600px;margin:45px 0}}@media only screen and (min-width: 1280px){.cc-banner__wrapper{max-width:630px}}.cc-banner__buttons{display:flex;margin-top:16px;flex-direction:column;width:100%}@media only screen and (min-width: 1004px){.cc-banner__buttons{flex-direction:row}}.cc-banner__text{font-family:\\'Takeaway Sans Regular\\', \\'Avant Garde\\', \\'Century Gothic\\', Helvetica, Arial, sans-serif;font-weight:400;color:#fff;width:100%;font-size:12px;line-height:18px;margin-right:0;text-align:left}.cc-banner__link{color:#f86600;text-decoration:none;white-space:nowrap}.cc-banner__link:active,.cc-banner__link:focus,.cc-banner__link:hover{color:#f86600}.cc-banner__link:hover{text-decoration:underline}.cc-banner__btn{border-radius:2px;cursor:pointer;font-size:14px;font-weight:bold;height:40px;margin-top:8px;width:100%;border:1px solid}@media only screen and (min-width: 1004px){.cc-banner__btn{flex:1 0 180px;margin:0 16px 0 0;max-width:180px}}.cc-banner__btn-ok{background-color:#fff;color:#146eeb;border-color:#fff}.cc-banner__btn-ok:hover,.cc-banner__btn-ok:focus{border-color:#146eeb}.cc-banner__btn-essential{background-color:#0a3847;color:#fff}.cc-banner__btn-essential:hover,.cc-banner__btn-essential:focus{border-color:#146eeb}\\n',\"\"]),module.exports=exports},function(module,exports,__webpack_require__){\"use strict\";var ReactPropTypesSecret=__webpack_require__(177);function emptyFunction(){}function emptyFunctionWithReset(){}emptyFunctionWithReset.resetWarningCache=emptyFunction,module.exports=function(){function shim(props,propName,componentName,location,propFullName,secret){if(secret!==ReactPropTypesSecret){var err=new Error(\"Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types\");throw err.name=\"Invariant Violation\",err}}function getShim(){return shim}shim.isRequired=shim;var ReactPropTypes={array:shim,bool:shim,func:shim,number:shim,object:shim,string:shim,symbol:shim,any:shim,arrayOf:getShim,element:shim,elementType:shim,instanceOf:getShim,node:shim,objectOf:getShim,oneOf:getShim,oneOfType:getShim,shape:getShim,exact:getShim,checkPropTypes:emptyFunctionWithReset,resetWarningCache:emptyFunction};return ReactPropTypes.PropTypes=ReactPropTypes,ReactPropTypes}},function(module,exports,__webpack_require__){\"use strict\";module.exports=\"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED\"},function(module,exports,__webpack_require__){var api=__webpack_require__(2),content=__webpack_require__(179);\"string\"==typeof(content=content.__esModule?content.default:content)&amp;&amp;(content=[[module.i,content,\"\"]]);var options={insert:\"head\",singleton:!1},exported=(api(content,options),content.locals?content.locals:{});module.exports=exported},function(module,exports,__webpack_require__){(exports=__webpack_require__(3)(!1)).push([module.i,'.flex{display:flex}.flex--align-start{align-items:flex-start}.flex--align-end{align-items:flex-end}.flex--align-center{align-items:center}.flex--align-stretch{align-items:stretch}.flex--align-baseline{align-items:baseline}.flex--justify-start{justify-content:flex-start}.flex--justify-end{justify-content:flex-end}.flex--justify-center{justify-content:center}.flex--justify-around{justify-content:space-around}.flex--justify-between{justify-content:space-between}.flex--justify-evenly{justify-content:space-evenly}@keyframes scale{0%{-webkit-transform:scale(0.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes scale{0%{-webkit-transform:scale(1.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}*{box-sizing:border-box}@font-face{font-family:\\'Takeaway Sans Regular\\';font-style:normal;font-weight:400;src:url(\"//assets.takeaway.com/fonts/takeaway-sans/takeaway-sans-regular.eot\");src:local(\"Takeaway Sans Regular\"),url(\"//assets.takeaway.com/fonts/takeaway-sans/takeaway-sans-regular.eot?#iefix\") format(\"embedded-opentype\"),url(\"//assets.takeaway.com/fonts/takeaway-sans/takeaway-sans-regular.woff2\") format(\"woff2\"),url(\"//assets.takeaway.com/fonts/takeaway-sans/takeaway-sans-regular.woff\") format(\"woff\"),url(\"//assets.takeaway.com/fonts/takeaway-sans/takeaway-sans-regular.ttf\") format(\"truetype\")}.cc-banner-granular{width:100%;position:fixed;bottom:0;box-sizing:border-box;z-index:999999;display:flex;flex-direction:column;flex:1}.cc-banner-granular *,.cc-banner-granular *:after,.cc-banner-granular *:before{box-sizing:inherit;margin:0;padding:0}.cc-banner-granular *:focus{outline:none}.cc-banner-granular__background{background:rgba(0,0,0,0.75);z-index:1000;position:fixed;top:0;bottom:0;left:0;right:0}.cc-banner-granular__container{align-items:center;background:#0a3847;bottom:0;display:flex;z-index:1001;justify-content:center}.cc-banner-granular__wrapper{align-items:flex-start;display:flex;flex-direction:column;margin:20px 15px;max-width:440px;width:100%}@media only screen and (min-width: 1004px){.cc-banner-granular__wrapper{max-width:600px;margin:45px 0}}@media only screen and (min-width: 1280px){.cc-banner-granular__wrapper{max-width:1024px}}.cc-banner-granular__buttons{display:flex;margin-top:16px;flex-direction:column;width:100%}@media only screen and (min-width: 1004px){.cc-banner-granular__buttons{flex-direction:row}}.cc-banner-granular__text{font-family:\\'Takeaway Sans Regular\\', \\'Avant Garde\\', \\'Century Gothic\\', Helvetica, Arial, sans-serif;font-weight:400;color:#fff;width:100%;font-size:12px;line-height:18px;margin-right:0;text-align:left}.cc-banner-granular__link{color:#f86600;text-decoration:none;white-space:nowrap}.cc-banner-granular__link:active,.cc-banner-granular__link:focus,.cc-banner-granular__link:hover{color:#f86600}.cc-banner-granular__link:hover{text-decoration:underline}.cc-banner-granular__btn{border-radius:2px;cursor:pointer;font-size:14px;font-weight:bold;height:40px;margin-top:8px;width:100%;border:1px solid}@media only screen and (min-width: 1004px){.cc-banner-granular__btn{flex:1 0 180px;margin:0 16px 0 0;max-width:180px}}.cc-banner-granular__btn-ok{background-color:#fff;color:#146eeb;border-color:#fff}.cc-banner-granular__btn-ok:hover,.cc-banner-granular__btn-ok:focus{border-color:#146eeb}.cc-banner-granular__btn-essential{background-color:#0a3847;color:#fff}.cc-banner-granular__btn-essential:hover,.cc-banner-granular__btn-essential:focus{border-color:#146eeb}.cc-banner-granular__header{display:flex;justify-content:space-between;flex:1;width:100%}.cc-banner-granular__header-title{color:#fff}.cc-banner-granular__header-language-picker{color:#fff;text-transform:uppercase}.cc-banner-granular__header-language-picker-link{color:#fff}.cc-banner-granular__header-language-picker-link.active{font-weight:bold}\\n',\"\"]),module.exports=exports},function(module,exports,__webpack_require__){var api=__webpack_require__(2),content=__webpack_require__(181);\"string\"==typeof(content=content.__esModule?content.default:content)&amp;&amp;(content=[[module.i,content,\"\"]]);var options={insert:\"head\",singleton:!1},exported=(api(content,options),content.locals?content.locals:{});module.exports=exported},function(module,exports,__webpack_require__){(exports=__webpack_require__(3)(!1)).push([module.i,\".flex{display:flex}.flex--align-start{align-items:flex-start}.flex--align-end{align-items:flex-end}.flex--align-center{align-items:center}.flex--align-stretch{align-items:stretch}.flex--align-baseline{align-items:baseline}.flex--justify-start{justify-content:flex-start}.flex--justify-end{justify-content:flex-end}.flex--justify-center{justify-content:center}.flex--justify-around{justify-content:space-around}.flex--justify-between{justify-content:space-between}.flex--justify-evenly{justify-content:space-evenly}@keyframes scale{0%{-webkit-transform:scale(0.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes scale{0%{-webkit-transform:scale(1.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}*{box-sizing:border-box}.cookie-settings-granular-popup{background-color:rgba(0,0,0,0.75);bottom:0;height:100%;left:0;opacity:1;position:fixed;right:0;top:0;width:100%;z-index:20}.cookie-settings-granular-popup__icon-close{background-color:transparent;border:0;cursor:pointer;height:64px;position:absolute;left:0;top:0;width:64px;z-index:2}.cookie-settings-granular-popup__inner{background-color:#0a3847;display:flex;flex-direction:column;width:100vw;position:relative;overflow:hidden;padding-bottom:20px}@media (min-width: 1004px){.cookie-settings-granular-popup__inner{max-height:calc(80vh - 80px);min-height:180px;max-width:672px;margin:auto;margin-top:80px;border-radius:2px}}@media (max-width: 1003px){.cookie-settings-granular-popup__inner{height:100%}}.cookie-settings-granular-popup__header,.cookie-settings-granular-popup__content{padding:0 16px;margin-bottom:10px}@media (min-width: 1004px){.cookie-settings-granular-popup__header,.cookie-settings-granular-popup__content{padding:0 32px}}.cookie-settings-granular-popup__header{flex:0 0 auto;color:#fff;position:relative;top:0;margin-bottom:15px;font-size:12px}.cookie-settings-granular-popup__header-link{color:#f86600;text-decoration:none;white-space:nowrap}.cookie-settings-granular-popup__header-link:active,.cookie-settings-granular-popup__header-link:focus,.cookie-settings-granular-popup__header-link:hover{color:#f86600}.cookie-settings-granular-popup__header-link:hover{text-decoration:underline}.cookie-settings-granular-popup__content{flex:0 1 auto;overflow:auto;display:flex;color:#fff;flex-direction:column}.cookie-settings-granular-popup__footer{bottom:0;width:100%;padding:0 16px;margin-top:auto}@media (min-width: 570px){.cookie-settings-granular-popup__footer{display:flex;flex:0 1 auto;padding:0 20px;margin-bottom:15px}}@media (min-width: 1004px){.cookie-settings-granular-popup__footer{margin-top:15px}}.cookie-settings-granular-popup__btn{border-radius:2px;cursor:pointer;font-size:14px;font-weight:bold;height:40px;margin-top:8px;width:100%;border:1px solid}@media only screen and (min-width: 1004px){.cookie-settings-granular-popup__btn{flex:1 0 180px;margin:0 16px 0 0}}.cookie-settings-granular-popup__btn-accept-all{background-color:#fff;color:#146eeb;border-color:#fff;margin-right:8px}.cookie-settings-granular-popup__btn-accept-all:hover,.cookie-settings-granular-popup__btn-accept-all:focus{border-color:#146eeb}.cookie-settings-granular-popup__btn-only-selected{background-color:#0a3847;color:#fff}.cookie-settings-granular-popup__btn-only-selected:hover,.cookie-settings-granular-popup__btn-only-selected:focus{border-color:#146eeb}.cookie-settings-granular-popup .tv-icon-arrow-left{fill:#fff;width:50px}.cookie-settings-granular-popup .cookie-settings-granular-popup-scroll-stop{overflow:hidden}.cookie-settings-granular-popup .cookie-settings-granular-popup__consents-item{margin-bottom:1.5rem}.cookie-settings-granular-popup .cookie-settings-granular-popup__consents-item h3{margin-bottom:8px;font-weight:bold}.cookie-settings-granular-popup .cookie-settings-granular-popup__consents-toggle{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.cookie-settings-granular-popup .cookie-settings-granular-popup__consents-toggle p{font-size:12px;line-height:16px;margin:0}.cookie-settings-granular-popup .cookie-settings-granular-popup__consents-toggle h3{font-size:14px;font-weight:bold}.cookie-settings-granular-popup .js-header-content{display:flex;width:100%;justify-content:center;font-size:16px;font-weight:bold}.cookie-settings-granular-popup .switch{position:relative;display:inline-block;width:42px;height:24px;margin-left:8px}.cookie-settings-granular-popup .switch input{opacity:0;width:0;height:0}.cookie-settings-granular-popup .slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#0a3847;-webkit-transition:.15s;transition:.15s;display:flex}.cookie-settings-granular-popup .slider:before{position:absolute;content:'';height:18px;width:18px;left:1px;bottom:1px;background-color:#fff;-webkit-transition:0.4s;transition:0.4s}.cookie-settings-granular-popup input+.slider .slider-icon{opacity:0}.cookie-settings-granular-popup .slider-icon{position:absolute;content:'';height:13px;bottom:4px;left:4px;-webkit-transition:0.4s;transition:0.4s;display:flex}@keyframes opacityDirect{0%{opacity:0}1%{opacity:1}100%{opacity:1}}.cookie-settings-granular-popup input:checked+.slider{background-color:#2196f3}.cookie-settings-granular-popup input:checked+.slider .slider-icon{opacity:1;animation:opacityDirect 0.4s}.cookie-settings-granular-popup input:focus+.slider{box-shadow:0 0 1px #2196f3}.cookie-settings-granular-popup input:checked+.slider:before{-webkit-transform:translateX(18px);-ms-transform:translateX(18px);transform:translateX(18px)}.cookie-settings-granular-popup input+.slider{border:2px solid #d8d8d8}.cookie-settings-granular-popup input:checked+.slider{border:2px solid #0a3847}.cookie-settings-granular-popup input:checked+.slider .slider-icon{-webkit-transform:translateX(18px);-ms-transform:translateX(18px);transform:translateX(18px)}.cookie-settings-granular-popup .slider.round{border-radius:12px}.cookie-settings-granular-popup .slider.round .slider-icon{fill:#2196f3}.cookie-settings-granular-popup .slider.round:before{border-radius:50%}.cookie-settings-granular-popup .slider.round.consent-disabled{background-color:#d7d7d7}.cookie-settings-granular-popup .slider.round.consent-disabled .slider-icon{fill:#959595}\\n\",\"\"]),module.exports=exports},function(module,exports){[Element.prototype,CharacterData.prototype,DocumentType.prototype].forEach((function(item){item.hasOwnProperty(\"remove\")||Object.defineProperty(item,\"remove\",{configurable:!0,enumerable:!0,writable:!0,value:function(){null!==this.parentNode&amp;&amp;this.parentNode.removeChild(this)}})}))},function(module,exports,__webpack_require__){var api=__webpack_require__(2),content=__webpack_require__(184);\"string\"==typeof(content=content.__esModule?content.default:content)&amp;&amp;(content=[[module.i,content,\"\"]]);var options={insert:\"head\",singleton:!1},exported=(api(content,options),content.locals?content.locals:{});module.exports=exported},function(module,exports,__webpack_require__){(exports=__webpack_require__(3)(!1)).push([module.i,\".flex{display:flex}.flex--align-start{align-items:flex-start}.flex--align-end{align-items:flex-end}.flex--align-center{align-items:center}.flex--align-stretch{align-items:stretch}.flex--align-baseline{align-items:baseline}.flex--justify-start{justify-content:flex-start}.flex--justify-end{justify-content:flex-end}.flex--justify-center{justify-content:center}.flex--justify-around{justify-content:space-around}.flex--justify-between{justify-content:space-between}.flex--justify-evenly{justify-content:space-evenly}@keyframes scale{0%{-webkit-transform:scale(0.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes scale{0%{-webkit-transform:scale(1.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}*{box-sizing:border-box}.notify{align-items:center;background-color:#10d365;display:flex;font-size:1rem;font-weight:600;height:auto;justify-content:center;min-height:4.5rem;opacity:1;position:fixed;top:0;transition:all 0.3s ease-in;width:100%;z-index:999999}@media (max-width: 1004px){.notify{justify-content:flex-start}}.notify__title{color:#fff;padding:0.5rem 1rem 0.5rem 0}@media (min-width: 1004px){.notify__title{padding:0.5rem 1.5rem 0.5rem 0}}.notify .tv-icon{padding:0 1.375rem}.notify .tv-icon [class^='tv-icon-']{fill:#fff}.notify--hidden{opacity:0}.notify--error{background-color:#ff4246}.notify--info{background-color:#0a3847}.notify--warning{background-color:#f86600}_:-ms-fullscreen .notify,:root .notify{height:2rem}_:-ms-fullscreen .notify .tv-icon [class^='tv-icon-'],:root .notify .tv-icon [class^='tv-icon-']{min-width:1rem}\\n\",\"\"]),module.exports=exports},function(module,exports,__webpack_require__){var api=__webpack_require__(2),content=__webpack_require__(186);\"string\"==typeof(content=content.__esModule?content.default:content)&amp;&amp;(content=[[module.i,content,\"\"]]);var options={insert:\"head\",singleton:!1},exported=(api(content,options),content.locals?content.locals:{});module.exports=exported},function(module,exports,__webpack_require__){(exports=__webpack_require__(3)(!1)).push([module.i,\".flex{display:flex}.flex--align-start{align-items:flex-start}.flex--align-end{align-items:flex-end}.flex--align-center{align-items:center}.flex--align-stretch{align-items:stretch}.flex--align-baseline{align-items:baseline}.flex--justify-start{justify-content:flex-start}.flex--justify-end{justify-content:flex-end}.flex--justify-center{justify-content:center}.flex--justify-around{justify-content:space-around}.flex--justify-between{justify-content:space-between}.flex--justify-evenly{justify-content:space-evenly}@keyframes scale{0%{-webkit-transform:scale(0.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes scale{0%{-webkit-transform:scale(1.9);transform:scale(0.9);opacity:0}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0.8}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}*{box-sizing:border-box}.tv-spinner{display:flex;background-color:rgba(0,0,0,0.4);bottom:0;height:100vh;left:0;opacity:1;position:fixed;right:0;top:0;width:100%;z-index:20}.tv-spinner__background{height:88px;width:88px;border-radius:2px;background-color:#fff;margin:auto;display:flex}.tv-spinner__background-circle{margin:auto;border:5px solid #f8f5f2;font-size:56px;width:1em;height:1em;border-radius:0.5em;-webkit-animation:spin 1s linear infinite;-moz-animation:spin 1s linear infinite;animation:spin 1s linear infinite;border-top-color:#f86600}@-webkit-keyframes spin{to{transform:rotate(360deg)}}@keyframes spin{to{transform:rotate(360deg)}}\\n\",\"\"]),module.exports=exports},function(module,__webpack_exports__,__webpack_require__){\"use strict\";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,\"Alertify\",(function(){return alertify_Alertify})),__webpack_require__.d(__webpack_exports__,\"Button\",(function(){return button_Button})),__webpack_require__.d(__webpack_exports__,\"ButtonAutoloader\",(function(){return ButtonAutoloader})),__webpack_require__.d(__webpack_exports__,\"ChipsList\",(function(){return chips_list_ChipsList})),__webpack_require__.d(__webpack_exports__,\"ContentToggle\",(function(){return content_toggle_ContentToggle})),__webpack_require__.d(__webpack_exports__,\"ContentToggleAutoloader\",(function(){return ContentToggleAutoloader})),__webpack_require__.d(__webpack_exports__,\"CookieSettings\",(function(){return cookie_settings_CookieSettings})),__webpack_require__.d(__webpack_exports__,\"CookieWall\",(function(){return cookie_wall_CookieWall})),__webpack_require__.d(__webpack_exports__,\"CookieConsent\",(function(){return CookieConsent})),__webpack_require__.d(__webpack_exports__,\"CookieWallGranular\",(function(){return cookie_wall_granular_CookieWallGranular})),__webpack_require__.d(__webpack_exports__,\"CookieSettingsGranular\",(function(){return cookie_settings_granular_CookieSettingsGranular})),__webpack_require__.d(__webpack_exports__,\"CookieConsentGranular\",(function(){return CookieConsentGranular})),__webpack_require__.d(__webpack_exports__,\"Notify\",(function(){return Notify})),__webpack_require__.d(__webpack_exports__,\"Popup\",(function(){return popup_Popup})),__webpack_require__.d(__webpack_exports__,\"PopupAutoloader\",(function(){return PopupAutoloader})),__webpack_require__.d(__webpack_exports__,\"Radio\",(function(){return Radio})),__webpack_require__.d(__webpack_exports__,\"SearchBox\",(function(){return search_box_SearchBox})),__webpack_require__.d(__webpack_exports__,\"SearchBoxAutoloader\",(function(){return SearchBoxAutoloader})),__webpack_require__.d(__webpack_exports__,\"BehaviorSubject\",(function(){return BehaviorSubject})),__webpack_require__.d(__webpack_exports__,\"debounce\",(function(){return debounce})),__webpack_require__.d(__webpack_exports__,\"Spinner\",(function(){return spinner_Spinner}));__webpack_require__(152),__webpack_require__(154);var attention=__webpack_require__(141),attention_default=__webpack_require__.n(attention),check=__webpack_require__(142),check_default=__webpack_require__.n(check),cross=__webpack_require__(143),cross_default=__webpack_require__.n(cross),cross_circle=__webpack_require__(144),cross_circle_default=__webpack_require__.n(cross_circle),cross_light=__webpack_require__(145),cross_light_default=__webpack_require__.n(cross_light),emoji_happy=__webpack_require__(146),emoji_happy_default=__webpack_require__.n(emoji_happy),info_circle=__webpack_require__(147),info_circle_default=__webpack_require__.n(info_circle),search=__webpack_require__(148),search_default=__webpack_require__.n(search),arrow_left=__webpack_require__(149),arrow_left_default=__webpack_require__.n(arrow_left),cw_check=__webpack_require__(150),cw_check_default=__webpack_require__.n(cw_check),contain=function(icon){return'&lt;div class=\"tv-icon\"&gt;'.concat(icon,\"&lt;/div&gt;\")},iconAttention=contain(attention_default.a),iconCheck=contain(check_default.a),iconCross=contain(cross_default.a),iconCrossCircle=contain(cross_circle_default.a),iconCrossLight=contain(cross_light_default.a),iconEmojiHappy=contain(emoji_happy_default.a),iconInfoCircle=contain(info_circle_default.a),iconSearch=contain(search_default.a),iconArrowLeft=contain(arrow_left_default.a),iconCwCheck=contain(cw_check_default.a),js_cookie=__webpack_require__(4),moment=__webpack_require__(0),moment_default=__webpack_require__.n(moment);function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&amp;&amp;(symbols=symbols.filter((function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable}))),keys.push.apply(keys,symbols)}return keys}function _objectSpread(target){for(var i=1;i&lt;arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?ownKeys(Object(source),!0).forEach((function(key){_defineProperty(target,key,source[key])})):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):ownKeys(Object(source)).forEach((function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))}))}return target}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var BehaviorSubject=function(defaultValue){var subscribers=[],currentValue=null,next=function(nextValue){currentValue!==nextValue&amp;&amp;(currentValue=nextValue,subscribers.forEach((function(subscriber){return subscriber(nextValue)})))};return{subscribe:function(subscriber){subscribers.push(subscriber),next(defaultValue)},next:next}},debounce=function(fn,wait){var t;return function(){var _arguments=arguments,_this=this;clearTimeout(t),t=setTimeout((function(){return fn.apply(_this,_arguments)}),wait)}},generateUid=function(){return Math.random().toString(36).substr(2,9)},helpers_getCookie=function(key){return js_cookie.get(key)},helpers_removeCookie=function(key){return js_cookie.remove(key)},helpers_setCookie=function(key,value,extraOptions){js_cookie.set(key,value,_objectSpread({secure:!0},extraOptions))},helpers_setCookieWithEncoding=function(key,value,extraOptions){var encodingFunc=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:encodeURIComponent,cookieWithEncode=js_cookie.withConverter({write:function(value){return encodingFunc(value)}});cookieWithEncode.set(key,value,_objectSpread({secure:!0},extraOptions))},helpers_utcCurrentTimeString=function(){var format=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:\"DD-MM-YYYY H:mm:ss\";return moment_default()().utc().format(format)},helpers_isDateFormatted=function(dateString){var format=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:\"DD-MM-YYYY H:mm:ss\";return moment_default()(dateString,format,!0).isValid()};function alertify_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var alertify_Alertify=function Alertify(wrapper){var _this=this;if(function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError(\"Cannot call a class as a function\")}(this,Alertify),alertify_defineProperty(this,\"showAlert\",(function(heading,content){if(!heading)throw new Error(\"the first parameter (heading) is required\");if(!content)throw new Error(\"the second parameter (content) is required\");var HTML='\\n    &lt;div class=\"alertify '.concat(_this.uid,'\"&gt;\\n        &lt;div class=\"alertify__icon\"&gt;').concat(iconInfoCircle,'&lt;/div&gt;\\n        &lt;div class=\"alertify__content\"&gt;\\n            &lt;div class=\"alertify__header\"&gt;\\n                ').concat(heading,'\\n            &lt;/div&gt;\\n            &lt;div class=\"alertify__text\"&gt;\\n                ').concat(content,\"\\n            &lt;/div&gt;\\n        &lt;/div&gt;\\n    &lt;/div&gt;\");_this.wrapper.insertAdjacentHTML(\"beforeend\",HTML)})),alertify_defineProperty(this,\"removeAlert\",(function(){document.querySelector(\".\".concat(_this.uid)).remove()})),!wrapper||void 0===wrapper.insertAdjacentHTML)throw new Error(\"the constructor expects the wrapper to be an HTML element\");this.wrapper=wrapper,this.uid=\"js-alertify-\"+generateUid()};__webpack_require__(158);function button_ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&amp;&amp;(symbols=symbols.filter((function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable}))),keys.push.apply(keys,symbols)}return keys}function _defineProperties(target,props){for(var i=0;i&lt;props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,\"value\"in descriptor&amp;&amp;(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function button_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function _classPrivateFieldGet(receiver,privateMap){var descriptor=privateMap.get(receiver);if(!descriptor)throw new TypeError(\"attempted to get private field on non-instance\");return descriptor.get?descriptor.get.call(receiver):descriptor.value}var button_Button=function(){function Button(props){var _this=this;if(function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError(\"Cannot call a class as a function\")}(this,Button),button_props.set(this,{writable:!0,value:void 0}),button_defineProperty(this,\"getSelector\",(function(){return _classPrivateFieldGet(_this,button_props).selector})),!(props.$container instanceof HTMLElement))throw new Error(\"Need a reference element for showing the button\");var defaultValues={classList:[],selector:\"js-btn-\".concat(generateUid()),type:\"button\"};!function(receiver,privateMap,value){var descriptor=privateMap.get(receiver);if(!descriptor)throw new TypeError(\"attempted to set private field on non-instance\");if(descriptor.set)descriptor.set.call(receiver,value);else{if(!descriptor.writable)throw new TypeError(\"attempted to set read only private field\");descriptor.value=value}}(this,button_props,function(target){for(var i=1;i&lt;arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?button_ownKeys(Object(source),!0).forEach((function(key){button_defineProperty(target,key,source[key])})):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):button_ownKeys(Object(source)).forEach((function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))}))}return target}({},defaultValues,{},props))}var Constructor,protoProps,staticProps;return Constructor=Button,(protoProps=[{key:\"componentDidMount\",value:function(){var $element=document.querySelector(\".\".concat(_classPrivateFieldGet(this,button_props).selector));$element&amp;&amp;$element.addEventListener(\"click\",_classPrivateFieldGet(this,button_props).clickFn)}},{key:\"render\",value:function(){var _classPrivateFieldGet2=_classPrivateFieldGet(this,button_props),classList=_classPrivateFieldGet2.classList,$container=_classPrivateFieldGet2.$container,innerContent=_classPrivateFieldGet2.innerContent,position=_classPrivateFieldGet2.position,selector=_classPrivateFieldGet2.selector,type=_classPrivateFieldGet2.type,HTML='\\n    &lt;button type=\"'.concat(type,'\" class=\"tv-button ').concat(selector,\" \").concat(classList.join(\" \"),'\"&gt;\\n      ').concat(innerContent,\"\\n    &lt;/button&gt;\");$container&amp;&amp;position?$container.insertAdjacentHTML(position,HTML):$container&amp;&amp;($container.innerHTML=HTML),this.componentDidMount()}}])&amp;&amp;_defineProperties(Constructor.prototype,protoProps),staticProps&amp;&amp;_defineProperties(Constructor,staticProps),Button}(),button_props=new WeakMap,KeyCode_DOWN=(__webpack_require__(160),40),KeyCode_END=35,KeyCode_ENTER=13,KeyCode_ESCAPE=27,KeyCode_HOME=36,KeyCode_LEFT=37,KeyCode_RIGHT=39,KeyCode_SPACE=32,KeyCode_TAB=9,KeyCode_UP=38;function _toConsumableArray(arr){return function(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function(iter){if(\"undefined\"!=typeof Symbol&amp;&amp;Symbol.iterator in Object(iter))return Array.from(iter)}(arr)||function(o,minLen){if(!o)return;if(\"string\"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);\"Object\"===n&amp;&amp;o.constructor&amp;&amp;(n=o.constructor.name);if(\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function _arrayLikeToArray(arr,len){(null==len||len&gt;arr.length)&amp;&amp;(len=arr.length);for(var i=0,arr2=new Array(len);i&lt;len;i++)arr2[i]=arr[i];return arr2}function popup_ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&amp;&amp;(symbols=symbols.filter((function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable}))),keys.push.apply(keys,symbols)}return keys}function popup_defineProperties(target,props){for(var i=0;i&lt;props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,\"value\"in descriptor&amp;&amp;(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function popup_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function popup_classPrivateFieldGet(receiver,privateMap){var descriptor=privateMap.get(receiver);if(!descriptor)throw new TypeError(\"attempted to get private field on non-instance\");return descriptor.get?descriptor.get.call(receiver):descriptor.value}var popup_Popup=function(){function Popup(props){var _this=this;!function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError(\"Cannot call a class as a function\")}(this,Popup),popup_props.set(this,{writable:!0,value:void 0}),_state.set(this,{writable:!0,value:{$firstFocusableElement:void 0,$lastFocusableElement:void 0,$mouseDownElement:void 0}}),_classSelectors.set(this,{writable:!0,value:{closeButton:\"js-tv-popup__close\",headerContainer:\"tv-popup__header\",mainContainer:\"tv-popup__content\",popupInner:\"js-tv-popup_inner\",scrollStop:\"tv-scroll-stop\"}}),popup_defineProperty(this,\"clickBoundFunction\",void 0),popup_defineProperty(this,\"keydownBoundFunction\",void 0),popup_defineProperty(this,\"mousedownBoundFunction\",void 0),popup_defineProperty(this,\"captureElementOnMouseDown\",(function(_ref){var target=_ref.target;popup_classPrivateFieldGet(_this,_state).$mouseDownElement=target})),popup_defineProperty(this,\"getMainContent\",(function(){return document.querySelector(\".\".concat(popup_classPrivateFieldGet(_this,popup_props).selector,\" .\").concat(popup_classPrivateFieldGet(_this,_classSelectors).mainContainer))})),popup_defineProperty(this,\"closeOnEscapePressed\",(function(eventHandler){eventHandler.keyCode===KeyCode_ESCAPE&amp;&amp;(eventHandler.stopPropagation(),eventHandler.preventDefault(),_this.closePopup())})),popup_defineProperty(this,\"closeClickOutside\",(function(mouseEvent){var $outerContainer=document.querySelector(\".\".concat(popup_classPrivateFieldGet(_this,popup_props).selector)),isClickedOutsidePopup=$outerContainer===mouseEvent.target,elementMouseDownIsSame=mouseEvent.target===popup_classPrivateFieldGet(_this,_state).$mouseDownElement;if($outerContainer&amp;&amp;popup_classPrivateFieldGet(_this,popup_props).isLightDismissEnabled&amp;&amp;isClickedOutsidePopup&amp;&amp;elementMouseDownIsSame)return mouseEvent.preventDefault(),mouseEvent.stopPropagation(),_this.closePopup(),!1})),popup_defineProperty(this,\"focusPreviousActiveELement\",(function(){var previousActiveElement=popup_classPrivateFieldGet(_this,popup_props).previousActiveElement;previousActiveElement&amp;&amp;previousActiveElement.focus()})),popup_defineProperty(this,\"moveFocusFromFirstToLastElement\",(function(eventHandler){var $lastFocusableElement=popup_classPrivateFieldGet(_this,_state).$lastFocusableElement;eventHandler.keyCode===KeyCode_TAB&amp;&amp;eventHandler.shiftKey&amp;&amp;$lastFocusableElement&amp;&amp;(eventHandler.preventDefault(),eventHandler.stopPropagation(),$lastFocusableElement.focus())})),popup_defineProperty(this,\"moveFocusFromLastToFirstElement\",(function(eventHandler){var $firstFocusableElement=popup_classPrivateFieldGet(_this,_state).$firstFocusableElement;eventHandler.keyCode===KeyCode_TAB&amp;&amp;!eventHandler.shiftKey&amp;&amp;$firstFocusableElement&amp;&amp;(eventHandler.preventDefault(),eventHandler.stopPropagation(),$firstFocusableElement.focus())})),popup_defineProperty(this,\"setHeaderContent\",(function(newHeaderContent){var $headerContainer=document.querySelector(\".\".concat(popup_classPrivateFieldGet(_this,_classSelectors).headerContainer));$headerContainer&amp;&amp;($headerContainer.innerHTML=newHeaderContent),_this.keepFocusWithinModal()})),popup_defineProperty(this,\"setMainContent\",(function(newMainContent){var $mainContainer=document.querySelector(\".\".concat(popup_classPrivateFieldGet(_this,_classSelectors).mainContainer));$mainContainer&amp;&amp;($mainContainer.innerHTML=newMainContent),_this.keepFocusWithinModal()}));var generatedUid=generateUid(),defaultValues={classList:[],closeCallback:function(){return{}},isLightDismissEnabled:!0,selector:\"js-popup-\".concat(generatedUid),headerSelector:\"js-popup-header-\".concat(generatedUid),mainSelector:\"js-popup-main-\".concat(generatedUid),openCallback:function(){return{}},previousActiveElement:document.activeElement};!function(receiver,privateMap,value){var descriptor=privateMap.get(receiver);if(!descriptor)throw new TypeError(\"attempted to set private field on non-instance\");if(descriptor.set)descriptor.set.call(receiver,value);else{if(!descriptor.writable)throw new TypeError(\"attempted to set read only private field\");descriptor.value=value}}(this,popup_props,function(target){for(var i=1;i&lt;arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?popup_ownKeys(Object(source),!0).forEach((function(key){popup_defineProperty(target,key,source[key])})):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):popup_ownKeys(Object(source)).forEach((function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))}))}return target}({},defaultValues,{},props))}var Constructor,protoProps,staticProps;return Constructor=Popup,(protoProps=[{key:\"componentDidMount\",value:function(){var openCallback=popup_classPrivateFieldGet(this,popup_props).openCallback,$closeButton=document.querySelector(\".\".concat(popup_classPrivateFieldGet(this,_classSelectors).closeButton));openCallback(),$closeButton&amp;&amp;$closeButton.addEventListener(\"click\",this.closePopup.bind(this)),document.body&amp;&amp;document.body.classList.add(\"tv-scroll-stop\"),this.clickBoundFunction=this.closeClickOutside.bind(this),this.mousedownBoundFunction=this.captureElementOnMouseDown.bind(this),this.keydownBoundFunction=this.closeOnEscapePressed.bind(this),window.addEventListener(\"click\",this.clickBoundFunction),window.addEventListener(\"mousedown\",this.mousedownBoundFunction),window.addEventListener(\"keydown\",this.keydownBoundFunction),this.keepFocusWithinModal()}},{key:\"closePopup\",value:function(){var $popup=document.querySelector(\".\".concat(popup_classPrivateFieldGet(this,popup_props).selector));document.body&amp;&amp;document.body.classList.remove(\"tv-scroll-stop\"),$popup&amp;&amp;(window.removeEventListener(\"click\",this.clickBoundFunction),window.removeEventListener(\"mousedown\",this.mousedownBoundFunction),window.removeEventListener(\"keydown\",this.keydownBoundFunction),$popup.remove(),popup_classPrivateFieldGet(this,popup_props).previousActiveElement instanceof HTMLElement&amp;&amp;popup_classPrivateFieldGet(this,popup_props).previousActiveElement.focus(),popup_classPrivateFieldGet(this,popup_props).closeCallback())}},{key:\"render\",value:function(){var _classPrivateFieldGet6=popup_classPrivateFieldGet(this,popup_props),_classPrivateFieldGet7=_classPrivateFieldGet6.classList,classList=void 0===_classPrivateFieldGet7?[]:_classPrivateFieldGet7,headerContent=_classPrivateFieldGet6.headerContent,mainContent=_classPrivateFieldGet6.mainContent,_classPrivateFieldGet8=_classPrivateFieldGet6.selector,selector=void 0===_classPrivateFieldGet8?\"\".concat(popup_classPrivateFieldGet(this,popup_props).selector):_classPrivateFieldGet8;popup_classPrivateFieldGet(this,popup_props).selector||(popup_classPrivateFieldGet(this,popup_props).selector=selector);var HTML='\\n    &lt;div class=\"tv-popup '.concat(selector,\" \").concat(classList.join(\" \"),'\"&gt;\\n      &lt;div class=\"tv-popup__inner ').concat(popup_classPrivateFieldGet(this,_classSelectors).popupInner,'\"\\n        open\\n        role=\"dialog\"\\n        aria-modal=\"true\"\\n        aria-labelledby=\"').concat(popup_classPrivateFieldGet(this,popup_props).headerSelector,'\"\\n        aria-describedby=\"').concat(popup_classPrivateFieldGet(this,popup_props).mainSelector,'\"\\n        tabindex=\"-1\"&gt;\\n        &lt;button class=\"tv-popup__icon-close\\n          flex flex--justify-center\\n          flex--align-center ').concat(popup_classPrivateFieldGet(this,_classSelectors).closeButton,'\"&gt;\\n          ').concat(iconCrossLight,'\\n        &lt;/button&gt;\\n        &lt;div class=\"').concat(popup_classPrivateFieldGet(this,_classSelectors).headerContainer,'\"\\n          id=\"').concat(popup_classPrivateFieldGet(this,popup_props).headerSelector,'\"\\n        &gt;\\n          ').concat(headerContent,'\\n        &lt;/div&gt;\\n        &lt;div\\n          class=\"').concat(popup_classPrivateFieldGet(this,_classSelectors).mainContainer,'\"\\n          id=\"').concat(popup_classPrivateFieldGet(this,popup_props).mainSelector,'\"\\n        &gt;\\n          ').concat(mainContent,\"\\n        &lt;/div&gt;\\n      &lt;/div&gt;\\n    &lt;/div&gt;\");document.body&amp;&amp;document.body.insertAdjacentHTML(\"beforeend\",HTML),this.componentDidMount()}},{key:\"keepFocusWithinModal\",value:function(){var $modalElement=document.querySelector(\".\".concat(popup_classPrivateFieldGet(this,popup_props).selector));if($modalElement){var $$allFocusableAndVisibleElements=_toConsumableArray($modalElement.querySelectorAll('\\n      a[href]:not([disabled]),\\n      button:not([disabled]),\\n      textarea:not([disabled]),\\n      input[type=\"text\"]:not([disabled]),\\n      input[type=\"radio\"]:not([disabled]),\\n      input[type=\"checkbox\"]:not([disabled]),\\n      select:not([disabled]),\\n      [tabindex]:not([tabindex=\"-1\"])\\n    ')).filter((function($element){return $element.offsetWidth&gt;0&amp;&amp;$element.offsetHeight&gt;0})).filter((function($element){if($element.offsetWidth&gt;0&amp;&amp;$element.offsetHeight&gt;0)return!0}));if($$allFocusableAndVisibleElements.length){popup_classPrivateFieldGet(this,_state).$firstFocusableElement=$$allFocusableAndVisibleElements[0],popup_classPrivateFieldGet(this,_state).$lastFocusableElement=$$allFocusableAndVisibleElements[$$allFocusableAndVisibleElements.length-1];var _classPrivateFieldGet9=popup_classPrivateFieldGet(this,_state),$firstFocusableElement=_classPrivateFieldGet9.$firstFocusableElement,$lastFocusableElement=_classPrivateFieldGet9.$lastFocusableElement;$lastFocusableElement&amp;&amp;$lastFocusableElement instanceof HTMLElement&amp;&amp;$lastFocusableElement.addEventListener(\"keydown\",this.moveFocusFromLastToFirstElement.bind(this)),$firstFocusableElement&amp;&amp;$firstFocusableElement instanceof HTMLElement&amp;&amp;$firstFocusableElement.addEventListener(\"keydown\",this.moveFocusFromFirstToLastElement.bind(this))}}}}])&amp;&amp;popup_defineProperties(Constructor.prototype,protoProps),staticProps&amp;&amp;popup_defineProperties(Constructor,staticProps),Popup}(),popup_props=new WeakMap,_state=new WeakMap,_classSelectors=new WeakMap;var obj,key,value,PopupAutoloader=function PopupAutoloader(){!function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError(\"Cannot call a class as a function\")}(this,PopupAutoloader)};value=function(){document.querySelectorAll(\".js-popup-header\").forEach((function($container){new popup_Popup({$container:$container,mainContent:\"Click me\",headerContent:\"HELLO WORLD\"}).render()}))},(key=\"load\")in(obj=PopupAutoloader)?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value;__webpack_require__(162),__webpack_require__(164);var fuse=__webpack_require__(151);function chips_list_ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&amp;&amp;(symbols=symbols.filter((function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable}))),keys.push.apply(keys,symbols)}return keys}function chips_list_toConsumableArray(arr){return function(arr){if(Array.isArray(arr))return chips_list_arrayLikeToArray(arr)}(arr)||function(iter){if(\"undefined\"!=typeof Symbol&amp;&amp;Symbol.iterator in Object(iter))return Array.from(iter)}(arr)||function(o,minLen){if(!o)return;if(\"string\"==typeof o)return chips_list_arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);\"Object\"===n&amp;&amp;o.constructor&amp;&amp;(n=o.constructor.name);if(\"Map\"===n||\"Set\"===n)return Array.from(n);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return chips_list_arrayLikeToArray(o,minLen)}(arr)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function chips_list_arrayLikeToArray(arr,len){(null==len||len&gt;arr.length)&amp;&amp;(len=arr.length);for(var i=0,arr2=new Array(len);i&lt;len;i++)arr2[i]=arr[i];return arr2}function chips_list_defineProperties(target,props){for(var i=0;i&lt;props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,\"value\"in descriptor&amp;&amp;(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function chips_list_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function chips_list_classPrivateFieldGet(receiver,privateMap){var descriptor=privateMap.get(receiver);if(!descriptor)throw new TypeError(\"attempted to get private field on non-instance\");return descriptor.get?descriptor.get.call(receiver):descriptor.value}var chips_list_ChipsList=function(){function ChipsList(props){var _this=this;if(function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError(\"Cannot call a class as a function\")}(this,ChipsList),chips_list_state.set(this,{writable:!0,value:{$activeDescendent:void 0,$listbox:void 0,chips:[],filter:new BehaviorSubject(\"\"),filterActive:!1,hasResults:!1,selectedItems:[]}}),_classSelector.set(this,{writable:!0,value:{activeClass:\"tv-chip__active\",chipClass:\"tv-chip\",chipItem:\"tv-chips-results__item\",chipsClass:\"tv-chips\",container:\"tv-chips-container\",containerNoResults:\"tv-chips-container--no-results\",filterActive:\"tv-chips-container--filter-active\",firstGroup:\"tv-chips-results__item--first\",innerContent:\"tv-chip__inner-content\",itemHidden:\"tv-chips-results__item--hidden\",noResults:\"tv-chips-no-results\",noResultsText:\"tv-chips-no-results__text\",results:\"tv-chips-results\",selectAll:\"tv-chips-results__item--select-all\",selected:\"tv-chips-results__item--selected\",selectEffect:\"tv-chips-results__item--select-effect\"}}),chips_list_props.set(this,{writable:!0,value:void 0}),_regexClear.set(this,{writable:!0,value:new RegExp(\"/[^a-zA-Z0-9-+*/s]/\",\"g\")}),chips_list_defineProperty(this,\"componentDidMount\",(function(){var selector=chips_list_classPrivateFieldGet(_this,chips_list_props).selector,$container=document.querySelector(\".\".concat(selector)),$results=document.querySelector(\".\".concat(selector,\" .\").concat(chips_list_classPrivateFieldGet(_this,_classSelector).results));if($container&amp;&amp;$results){chips_list_classPrivateFieldGet(_this,chips_list_state).$listbox=$results,chips_list_classPrivateFieldGet(_this,chips_list_state).chips.forEach((function(chip){chip.selected=chips_list_classPrivateFieldGet(_this,chips_list_state).selectedItems.includes(chip.innerContent)})),$results.innerHTML=_this.renderChipItems(),chips_list_classPrivateFieldGet(_this,chips_list_state).chips.filter((function(chip){return chip.selected})).forEach((function(chip){var $selectedItem=$container.querySelector('[data-index=\"'.concat(chip.index,'\"]'));$selectedItem&amp;&amp;$selectedItem.id&amp;&amp;chips_list_classPrivateFieldGet(_this,chips_list_state).$listbox&amp;&amp;_this.focusItem($selectedItem)}));var $noResult=$container.querySelector(\".\".concat(chips_list_classPrivateFieldGet(_this,_classSelector).noResults));if($noResult){var btn=new button_Button({$container:$noResult,classList:[\"tv-chips-no-results__button\"],clickFn:function(eventHandler){eventHandler.stopPropagation()},innerContent:\"Reset search\",position:\"beforeend\"});btn.render();var $resetButton=$noResult.querySelector(\".\".concat(btn.getSelector()));$resetButton&amp;&amp;$resetButton.addEventListener(\"click\",_this.resetSearch.bind(_this))}}_this.registerEvents()})),chips_list_defineProperty(this,\"getSelector\",(function(){return chips_list_classPrivateFieldGet(_this,chips_list_props).selector})),chips_list_defineProperty(this,\"checkIfHasResults\",(function(){return!0===chips_list_classPrivateFieldGet(_this,chips_list_state).hasResults})),chips_list_defineProperty(this,\"filterChips\",(function(filterString){chips_list_classPrivateFieldGet(_this,chips_list_state).hasResults=!1,chips_list_classPrivateFieldGet(_this,chips_list_state).filter.next(filterString),chips_list_classPrivateFieldGet(_this,chips_list_state).filterActive=0!==filterString.length;var $container=document.querySelector(\".\".concat(chips_list_classPrivateFieldGet(_this,chips_list_props).selector));if(_this.setFilterStatus(),$container){var filterStringLower=_this.clearStringOfSpecialChar(filterString),fuzzySearchResults=new fuse(chips_list_classPrivateFieldGet(_this,chips_list_state).chips,{threshold:.38,location:0,distance:350,keys:[\"clearedString\"]}).search(filterStringLower);chips_list_classPrivateFieldGet(_this,chips_list_state).hasResults=!1,chips_list_classPrivateFieldGet(_this,chips_list_state).chips.forEach((function(chip,index){if(0!==index){chip.strict=!1;var fuzzySearchResult=fuzzySearchResults.find((function(result){return result.index===index}));chip.clearedString.startsWith(filterStringLower)?(chip.hidden=!1,chip.strict=!0,chips_list_classPrivateFieldGet(_this,chips_list_state).hasResults=!0):-1!==chip.clearedString.indexOf(filterStringLower)?(chip.hidden=!1,chips_list_classPrivateFieldGet(_this,chips_list_state).hasResults=!0):void 0!==fuzzySearchResult?(chip.hidden=!1,chips_list_classPrivateFieldGet(_this,chips_list_state).hasResults=!0):chip.hidden=!0}}));var $results=document.querySelector(\".\".concat(chips_list_classPrivateFieldGet(_this,chips_list_props).selector,\" .\").concat(chips_list_classPrivateFieldGet(_this,_classSelector).results));chips_list_classPrivateFieldGet(_this,chips_list_state).hasResults?$container.classList.remove(chips_list_classPrivateFieldGet(_this,_classSelector).containerNoResults):$container.classList.add(chips_list_classPrivateFieldGet(_this,_classSelector).containerNoResults),$results&amp;&amp;($results.innerHTML=_this.renderChipItems())}})),chips_list_defineProperty(this,\"activeDescendant\",(function(){var $listbox=chips_list_classPrivateFieldGet(_this,chips_list_state).$listbox;if($listbox){var elementId=$listbox.getAttribute(\"aria-activedescendant\");if(elementId)return document.getElementById(elementId)}})),chips_list_defineProperty(this,\"selectDescendant\",(function(eventHandler){var $selectedDescendant=eventHandler.target.closest(\".\".concat(chips_list_classPrivateFieldGet(_this,chips_list_props).selector,\" .\").concat(chips_list_classPrivateFieldGet(_this,_classSelector).chipItem));if($selectedDescendant instanceof HTMLElement&amp;&amp;\"option\"===$selectedDescendant.getAttribute(\"role\")){eventHandler.click&amp;&amp;(eventHandler.preventDefault(),eventHandler.stopPropagation()),_this.focusItem($selectedDescendant);var dataIndex=Number($selectedDescendant.dataset.index);chips_list_classPrivateFieldGet(_this,chips_list_state).chips.forEach((function(chip){chip.selected=!1})),chips_list_classPrivateFieldGet(_this,chips_list_state).chips[dataIndex].selected=!0,_this.selectItem($selectedDescendant),_this.chipsSelectionCallback()}})),chips_list_defineProperty(this,\"checkKeyPress\",(function(keyEvent){var nextItem,key=keyEvent.which||keyEvent.keyCode,currentItem=_this.activeDescendant();if(currentItem)switch(key){case KeyCode_UP:case KeyCode_DOWN:case KeyCode_RIGHT:case KeyCode_LEFT:keyEvent.preventDefault(),(nextItem=key===KeyCode_UP||key===KeyCode_LEFT?currentItem.previousElementSibling:currentItem.nextElementSibling)&amp;&amp;nextItem instanceof HTMLElement&amp;&amp;_this.focusItem(nextItem);break;case KeyCode_HOME:keyEvent.preventDefault(),_this.focusFirstItem();break;case KeyCode_END:keyEvent.preventDefault(),_this.focusLastItem();break;case KeyCode_ENTER:case KeyCode_SPACE:keyEvent.preventDefault(),_this.selectDescendant({target:currentItem})}})),chips_list_defineProperty(this,\"clearStringOfSpecialChar\",(function(){var input=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:\"\";return\"function\"==typeof String.prototype.normalize?input.toLowerCase().normalize(\"NFD\").replace(chips_list_classPrivateFieldGet(_this,_regexClear),\"\"):input.toLowerCase().replace(chips_list_classPrivateFieldGet(_this,_regexClear),\"\")})),chips_list_defineProperty(this,\"resetSearch\",(function(){_this.filterChips(\"\"),chips_list_classPrivateFieldGet(_this,chips_list_props).resetCallback()})),chips_list_defineProperty(this,\"chipsSelectionCallback\",(function(){var selectedItems=chips_list_classPrivateFieldGet(_this,chips_list_state).chips.filter((function(chip){return chip.selected})).map((function(chip){return chip.innerContent}));chips_list_classPrivateFieldGet(_this,chips_list_props).selectedCallback(selectedItems)})),chips_list_defineProperty(this,\"renderChipItems\",(function(){return chips_list_classPrivateFieldGet(_this,chips_list_state).chips.map((function(chip,index){return chip.hidden?\"\":_this.renderSingleChip({chip:chip,index:index})})).join(\"\")})),chips_list_defineProperty(this,\"renderSingleChip\",(function(_ref){var chip=_ref.chip,index=_ref.index,innerContent=chip.innerContent,selected=chip.selected,strict=chip.strict,ariaSelected=selected?\"true\":\"false\",selectAllClass=0===index?chips_list_classPrivateFieldGet(_this,_classSelector).selectAll:\"\",hasSelectedClass=selected?chips_list_classPrivateFieldGet(_this,_classSelector).selected:\"\";return'\\n      &lt;div\\n          class=\"'.concat(chips_list_classPrivateFieldGet(_this,_classSelector).chipItem,\" \").concat(hasSelectedClass,\" \").concat(selectAllClass,\"\\n          \").concat(strict?chips_list_classPrivateFieldGet(_this,_classSelector).firstGroup:\"\",'\"\\n          aria-selected=\"').concat(ariaSelected,'\"\\n          id=\"').concat(chips_list_classPrivateFieldGet(_this,chips_list_props).selector,\"-\").concat(index,'\"\\n          data-index=\"').concat(index,'\"\\n          role=\"option\"\\n          tab-index=\"0\"&gt;\\n          &lt;div\\n              class=\"').concat(chips_list_classPrivateFieldGet(_this,_classSelector).chipClass,\" \").concat(selected?chips_list_classPrivateFieldGet(_this,_classSelector).activeClass:\"\",' \"&gt;\\n              &lt;span class=\"').concat(chips_list_classPrivateFieldGet(_this,_classSelector).innerContent,'\"&gt;').concat(innerContent,\"&lt;/span&gt;\\n          &lt;/div&gt;\\n      &lt;/div&gt;\")})),chips_list_defineProperty(this,\"setFilterStatus\",(function(){var $container=document.querySelector(\".\".concat(chips_list_classPrivateFieldGet(_this,chips_list_props).selector));$container&amp;&amp;(chips_list_classPrivateFieldGet(_this,chips_list_state).filterActive?$container.classList.add(chips_list_classPrivateFieldGet(_this,_classSelector).filterActive):$container.classList.remove(chips_list_classPrivateFieldGet(_this,_classSelector).filterActive))})),chips_list_defineProperty(this,\"registerEvents\",(function(){var $listbox=chips_list_classPrivateFieldGet(_this,chips_list_state).$listbox;$listbox&amp;&amp;($listbox.addEventListener(\"click\",_this.selectDescendant.bind(_this)),$listbox.addEventListener(\"focus\",_this.setupFocus.bind(_this)),$listbox.addEventListener(\"keydown\",_this.checkKeyPress.bind(_this)),$listbox.addEventListener(\"keydown\",_this.selectDescendant.bind(_this)))})),chips_list_defineProperty(this,\"setupFocus\",(function(eventHandler){eventHandler.target===chips_list_classPrivateFieldGet(_this,chips_list_state).$listbox&amp;&amp;(_this.activeDescendant()||_this.focusFirstItem())})),chips_list_defineProperty(this,\"getScrollParent\",(function(_ref2){var $element=_ref2.$element;if($element)return $element.scrollHeight&gt;$element.clientHeight?$element:$element.parentNode instanceof HTMLElement?_this.getScrollParent({$element:$element.parentNode}):void 0})),chips_list_defineProperty(this,\"focusFirstItem\",(function(){if(chips_list_classPrivateFieldGet(_this,chips_list_state).$listbox){var firstItem=chips_list_classPrivateFieldGet(_this,chips_list_state).$listbox.querySelector('[role=\"option\"]');firstItem&amp;&amp;_this.focusItem(firstItem)}})),chips_list_defineProperty(this,\"selectItem\",(function($focusElement){var $listbox=chips_list_classPrivateFieldGet(_this,chips_list_state).$listbox;$listbox&amp;&amp;(chips_list_toConsumableArray($listbox.querySelectorAll(\".\".concat(chips_list_classPrivateFieldGet(_this,_classSelector).selected))).forEach((function($selectedItem){return $selectedItem.classList.remove(chips_list_classPrivateFieldGet(_this,_classSelector).selected)})),$focusElement.classList.add(chips_list_classPrivateFieldGet(_this,_classSelector).selected),_this.focusSelected())})),chips_list_defineProperty(this,\"focusLastItem\",(function(){var $listbox=chips_list_classPrivateFieldGet(_this,chips_list_state).$listbox;if($listbox){var $$itemList=chips_list_toConsumableArray($listbox.querySelectorAll('[role=\"option\"]'));$$itemList.length&amp;&amp;_this.focusItem($$itemList[$$itemList.length-1])}})),chips_list_defineProperty(this,\"defocusItem\",(function(element){element&amp;&amp;element.classList.remove(\"focused\")})),chips_list_defineProperty(this,\"focusItem\",(function($focusElement){var $listbox=chips_list_classPrivateFieldGet(_this,chips_list_state).$listbox;if($listbox){var $currentElement=_this.activeDescendant();_this.defocusItem($currentElement),$focusElement.classList.add(\"focused\"),$listbox.setAttribute(\"aria-activedescendant\",$focusElement.id),_this.moveElementIntoView($focusElement),$focusElement.focus()}})),chips_list_defineProperty(this,\"focusSelected\",(function(){var $firstSelectedItem=document.querySelector(\".\".concat(chips_list_classPrivateFieldGet(_this,chips_list_props).selector,\" .\").concat(chips_list_classPrivateFieldGet(_this,_classSelector).selected));$firstSelectedItem&amp;&amp;_this.moveElementIntoView($firstSelectedItem)})),chips_list_defineProperty(this,\"renderNoResult\",(function(){return'\\n  &lt;div class=\"'.concat(chips_list_classPrivateFieldGet(_this,_classSelector).noResults,' flex--align-center\"&gt;\\n    ').concat(iconSearch,'\\n    &lt;h2 class=\"').concat(chips_list_classPrivateFieldGet(_this,_classSelector).noResultsText,'\" &gt;').concat(chips_list_classPrivateFieldGet(_this,chips_list_props).noResultsText,\"&lt;/h2&gt;\\n  &lt;/div&gt;\")})),chips_list_defineProperty(this,\"render\",(function(){var _classPrivateFieldGet8=chips_list_classPrivateFieldGet(_this,chips_list_props),classList=_classPrivateFieldGet8.classList,$container=_classPrivateFieldGet8.$container,label=_classPrivateFieldGet8.label,position=_classPrivateFieldGet8.position,selector=_classPrivateFieldGet8.selector,_classPrivateFieldGet9=chips_list_classPrivateFieldGet(_this,_classSelector),container=_classPrivateFieldGet9.container,results=_classPrivateFieldGet9.results,HTML='\\n    &lt;div class=\"'.concat(container,\" \").concat(selector,\" \").concat(classList.join(\" \"),'\"&gt;\\n        &lt;div id=\"').concat(selector,'\"\\n            class=\"').concat(results,' flex\"\\n            tabindex=\"0\"\\n            aria-label=\"').concat(label,'\"\\n            role=\"listbox\"&gt;\\n        &lt;/div&gt;\\n        ').concat(_this.renderNoResult(),\"\\n    &lt;/div&gt;\");$container&amp;&amp;position?$container.insertAdjacentHTML(position,HTML):$container&amp;&amp;($container.innerHTML=HTML),_this.componentDidMount()})),!(props.$container instanceof HTMLElement))throw new Error(\"Need a reference element for showing the ChipsList\");var defaultValues={classList:[],defaultSelected:[],label:\"List\",noResultsText:\"No results\",resetCallback:function(){return{}},selectAllText:\"Select All\",selectedCallback:function(){return{}},selector:\"js-chips-list-\".concat(generateUid())};!function(receiver,privateMap,value){var descriptor=privateMap.get(receiver);if(!descriptor)throw new TypeError(\"attempted to set private field on non-instance\");if(descriptor.set)descriptor.set.call(receiver,value);else{if(!descriptor.writable)throw new TypeError(\"attempted to set read only private field\");descriptor.value=value}}(this,chips_list_props,function(target){for(var i=1;i&lt;arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?chips_list_ownKeys(Object(source),!0).forEach((function(key){chips_list_defineProperty(target,key,source[key])})):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):chips_list_ownKeys(Object(source)).forEach((function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))}))}return target}({},defaultValues,{},props)),chips_list_classPrivateFieldGet(this,chips_list_state).selectedItems=chips_list_toConsumableArray(chips_list_classPrivateFieldGet(this,chips_list_props).defaultSelected),0===chips_list_classPrivateFieldGet(this,chips_list_state).selectedItems.length&amp;&amp;(chips_list_classPrivateFieldGet(this,chips_list_state).selectedItems=[chips_list_classPrivateFieldGet(this,chips_list_props).selectAllText]);var uniqueChips=chips_list_toConsumableArray(new Set(chips_list_classPrivateFieldGet(this,chips_list_props).chipsList));chips_list_classPrivateFieldGet(this,chips_list_state).chips=[chips_list_classPrivateFieldGet(this,chips_list_props).selectAllText].concat(chips_list_toConsumableArray(uniqueChips.sort())).map((function(chipName,index){return{clearedString:_this.clearStringOfSpecialChar(chipName),hidden:!1,index:index,innerContent:chipName,selected:!1,strict:!1}}))}var Constructor,protoProps,staticProps;return Constructor=ChipsList,(protoProps=[{key:\"moveElementIntoView\",value:function($elementToShow){var $listbox=chips_list_classPrivateFieldGet(this,chips_list_state).$listbox;if($listbox){var $scrollContainer=this.getScrollParent({$element:$listbox});if($scrollContainer&amp;&amp;$scrollContainer.parentElement instanceof HTMLElement){var marginBottom=getComputedStyle($elementToShow).marginBottom,$parentElement=$scrollContainer.parentElement;if($parentElement instanceof HTMLElement){var _$parentElement$offse=$parentElement.offsetTop,offsetTop=void 0===_$parentElement$offse?0:_$parentElement$offse,_$parentElement$scrol=$parentElement.scrollTop,scrollTop=void 0===_$parentElement$scrol?0:_$parentElement$scrol,elementTop=$elementToShow.offsetTop-offsetTop,elementBottom=elementTop+$elementToShow.offsetHeight+Number(marginBottom.replace(/px$/,\"\")),clientHeight=$parentElement.clientHeight;elementBottom&gt;clientHeight+scrollTop?$parentElement.scrollTo(0,elementBottom-clientHeight):elementTop&lt;scrollTop&amp;&amp;$parentElement.scrollTo(0,elementTop)}}}}}])&amp;&amp;chips_list_defineProperties(Constructor.prototype,protoProps),staticProps&amp;&amp;chips_list_defineProperties(Constructor,staticProps),ChipsList}(),chips_list_state=new WeakMap,_classSelector=new WeakMap,chips_list_props=new WeakMap,_regexClear=new WeakMap;__webpack_require__(166);function search_box_ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&amp;&amp;(symbols=symbols.filter((function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable}))),keys.push.apply(keys,symbols)}return keys}function search_box_defineProperties(target,props){for(var i=0;i&lt;props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,\"value\"in descriptor&amp;&amp;(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function search_box_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function search_box_classPrivateFieldGet(receiver,privateMap){var descriptor=privateMap.get(receiver);if(!descriptor)throw new TypeError(\"attempted to get private field on non-instance\");return descriptor.get?descriptor.get.call(receiver):descriptor.value}var search_box_SearchBox=function(){function SearchBox(props){var _this=this;!function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError(\"Cannot call a class as a function\")}(this,SearchBox),search_box_props.set(this,{writable:!0,value:void 0}),search_box_classSelectors.set(this,{writable:!0,value:{clearButton:\"tv-searchbox__clear-search\",inputField:\"tv-searchbox__searchfield\",showClearButton:\"tv-searchbox__clear-search--show\"}}),search_box_defineProperty(this,\"getSelector\",(function(){return search_box_classPrivateFieldGet(_this,search_box_props).selector})),search_box_defineProperty(this,\"focus\",(function(){var $inputField=document.querySelector(\".\".concat(_this.getSelector(),\" .\").concat(search_box_classPrivateFieldGet(_this,search_box_classSelectors).inputField));$inputField&amp;&amp;$inputField.focus()})),search_box_defineProperty(this,\"resetSearch\",(function(){_this.setSearch({newValue:\"\"}),search_box_classPrivateFieldGet(_this,search_box_props).resetCallback()}));var defaultValues={resetCallback:function(){return{}},selector:\"js-search-box-\".concat(generateUid())};!function(receiver,privateMap,value){var descriptor=privateMap.get(receiver);if(!descriptor)throw new TypeError(\"attempted to set private field on non-instance\");if(descriptor.set)descriptor.set.call(receiver,value);else{if(!descriptor.writable)throw new TypeError(\"attempted to set read only private field\");descriptor.value=value}}(this,search_box_props,function(target){for(var i=1;i&lt;arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?search_box_ownKeys(Object(source),!0).forEach((function(key){search_box_defineProperty(target,key,source[key])})):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):search_box_ownKeys(Object(source)).forEach((function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))}))}return target}({},defaultValues,{},props))}var Constructor,protoProps,staticProps;return Constructor=SearchBox,(protoProps=[{key:\"render\",value:function(){var _classPrivateFieldGet2=search_box_classPrivateFieldGet(this,search_box_props),$container=_classPrivateFieldGet2.$container,_classPrivateFieldGet3=_classPrivateFieldGet2.classList,classList=void 0===_classPrivateFieldGet3?[]:_classPrivateFieldGet3,_classPrivateFieldGet4=_classPrivateFieldGet2.placeholderText,placeholderText=void 0===_classPrivateFieldGet4?\"Search\":_classPrivateFieldGet4,position=_classPrivateFieldGet2.position,selector=_classPrivateFieldGet2.selector;search_box_classPrivateFieldGet(this,search_box_props).search=new BehaviorSubject(\"\");var HTML='\\n    &lt;div class=\"tv-searchbox '.concat(selector,\" \").concat(classList.join(\"\"),'\"&gt;\\n        ').concat(iconSearch,'\\n        &lt;input\\n        id=\"').concat(selector,'\"\\n        class=\"tv-searchbox__searchfield ').concat(classList.join(\" \"),'\"\\n        type=\"search\"\\n        placeholder=\"').concat(placeholderText,'\"\\n        aria-label=\"Search\" /&gt;\\n        &lt;label class=\"tv-input-label\" for=\"').concat(selector,'\"&gt;&lt;/label&gt;\\n        &lt;button\\n          class=\"tv-searchbox__clear-search\"\\n          tabindex=\"-1\"&gt;\\n          ').concat(iconCrossCircle,\"\\n        &lt;/button&gt;\\n    &lt;/div&gt;\\n    \");$container&amp;&amp;position?$container.insertAdjacentHTML(position,HTML):$container&amp;&amp;($container.innerHTML=HTML),this.componentDidMount()}},{key:\"setSearch\",value:function(_ref){var _ref$newValue=_ref.newValue,newValue=void 0===_ref$newValue?\"\":_ref$newValue,$inputField=document.querySelector(\".\".concat(this.getSelector(),\" .\").concat(search_box_classPrivateFieldGet(this,search_box_classSelectors).inputField));$inputField&amp;&amp;$inputField instanceof HTMLInputElement&amp;&amp;($inputField.value=newValue,$inputField.focus()),search_box_classPrivateFieldGet(this,search_box_props).search.next(newValue),this.showHideClearButton({searchString:newValue})}},{key:\"showHideClearButton\",value:function(_ref2){var _ref2$searchString=_ref2.searchString,searchString=void 0===_ref2$searchString?\"\":_ref2$searchString,$clearButton=document.querySelector(\".\".concat(this.getSelector(),\" .\").concat(search_box_classPrivateFieldGet(this,search_box_classSelectors).clearButton));$clearButton&amp;&amp;(0===searchString.length?$clearButton.classList.remove(\"\".concat(search_box_classPrivateFieldGet(this,search_box_classSelectors).showClearButton)):$clearButton.classList.add(\"\".concat(search_box_classPrivateFieldGet(this,search_box_classSelectors).showClearButton)))}},{key:\"componentDidMount\",value:function(){var _this2=this,$inputField=document.querySelector(\".\".concat(this.getSelector(),\" .\").concat(search_box_classPrivateFieldGet(this,search_box_classSelectors).inputField)),$clearButton=document.querySelector(\".\".concat(this.getSelector(),\" .\").concat(search_box_classPrivateFieldGet(this,search_box_classSelectors).clearButton)),_classPrivateFieldGet5=search_box_classPrivateFieldGet(this,search_box_props),search=_classPrivateFieldGet5.search,searchChangeFn=_classPrivateFieldGet5.searchChangeFn;$inputField&amp;&amp;$inputField instanceof HTMLInputElement&amp;&amp;($inputField.addEventListener(\"input\",(function(inputEvent){if(inputEvent.target instanceof HTMLInputElement){var newSearchString=inputEvent.target.value||\"\";_this2.showHideClearButton({searchString:newSearchString}),search.next(newSearchString)}})),search.subscribe((function(newSearchTerm){return searchChangeFn(newSearchTerm)}))),$clearButton&amp;&amp;$clearButton.addEventListener(\"click\",this.resetSearch.bind(this))}}])&amp;&amp;search_box_defineProperties(Constructor.prototype,protoProps),staticProps&amp;&amp;search_box_defineProperties(Constructor,staticProps),SearchBox}(),search_box_props=new WeakMap,search_box_classSelectors=new WeakMap,generateChipList=function(){var length=arguments.length&gt;0&amp;&amp;void 0!==arguments[0]?arguments[0]:100,label=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:\"Item\";return Array(length).fill().map((function(item,index){return\"\".concat(label,\" \").concat(\"000\".concat((index+1).toString()).slice(-3))}))};var SearchBoxAutoloader=function SearchBoxAutoloader(){!function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError(\"Cannot call a class as a function\")}(this,SearchBoxAutoloader)};!function(obj,key,value){key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value}(SearchBoxAutoloader,\"load\",(function(){var $chipsHeader=document.querySelector(\".js-chips-list-header\"),chipList=new chips_list_ChipsList({$container:$chipsHeader,chipsList:generateChipList(),noResultsText:\"No Results....\",position:\"afterend\"});chipList.render(),document.querySelectorAll(\".js-search-box-header\").forEach((function($container){new search_box_SearchBox({$container:$container,searchChangeFn:function(searchValue){var $result=document.querySelector(\".js-search-box-result\");$result&amp;&amp;($result.innerText=searchValue,chipList.filterChips(searchValue))},innerContent:\"Click me\",position:\"afterend\"}).render()}))}));var classSelector_JS_BUTTON_SELECTOR=\"js-button-header\",classSelector_JS_POPUP_HEADER=\"js-header-content\",ButtonAutoloader=function ButtonAutoloader(){!function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError(\"Cannot call a class as a function\")}(this,ButtonAutoloader)};!function(obj,key,value){key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value}(ButtonAutoloader,\"load\",(function(){var popup,addContent=function(){var resetSearch,defaultSelected=document.querySelector(\".js-button-result\"),selectedChips=[];defaultSelected&amp;&amp;defaultSelected.innerText&amp;&amp;defaultSelected.innerText.includes(\":\")&amp;&amp;(selectedChips=defaultSelected.innerText.substr(defaultSelected.innerText.indexOf(\":\")+1).split(\",\").map((function(item){return item.trim()})));var $chipsLocation=popup.getMainContent(),chipList=new chips_list_ChipsList({$container:$chipsLocation,chipsList:generateChipList(),defaultSelected:selectedChips,selectedCallback:function(item){if(item){var result=document.querySelector(\".js-button-result\");result&amp;&amp;(setTimeout((function(){popup.closePopup()}),200),result.innerHTML=\"The selected chip is: \".concat(item))}},noResultsText:\"No categories found\",position:\"beforeend\",resetCallback:function(){return resetSearch()}});chipList.render(),document.querySelectorAll(\".\".concat(classSelector_JS_POPUP_HEADER)).forEach((function($container){var $searchBox=new search_box_SearchBox({$container:$container,searchChangeFn:function(searchValue){chipList.filterChips(searchValue)},innerContent:\"Open popup\",position:\"beforeend\"});$searchBox.render(),chipList.focusSelected(),$searchBox.focus(),resetSearch=function(){$searchBox.setSearch({newValue:\"\"})}}))};document.querySelectorAll(\".\".concat(classSelector_JS_BUTTON_SELECTOR)).forEach((function($container){new button_Button({$container:$container,clickFn:function(eventHandler){eventHandler.stopPropagation(),(popup=new popup_Popup({classList:[\"i-am-step-3\"],headerContent:'&lt;div class=\"js-header-content\"&gt;&lt;h2&gt;All Categories&lt;/h2&gt;&lt;/div&gt;',mainContent:\"\",openCallback:addContent})).render()},innerContent:\"Click me\",position:\"afterend\"}).render()}))}));__webpack_require__(168);function content_toggle_ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&amp;&amp;(symbols=symbols.filter((function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable}))),keys.push.apply(keys,symbols)}return keys}function _typeof(obj){return(_typeof=\"function\"==typeof Symbol&amp;&amp;\"symbol\"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&amp;&amp;\"function\"==typeof Symbol&amp;&amp;obj.constructor===Symbol&amp;&amp;obj!==Symbol.prototype?\"symbol\":typeof obj})(obj)}function content_toggle_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var STATUS_EXPANDED=\"expanded\",STATUS_COLLAPSED=\"collapsed\",ROW_CLASSES_MULTI_LINE=\"multi-line\",ROW_CLASSES_SINGLE_LINE=\"single-line\",THEMES={PRIMARY:\"primary\",SECONDARY:\"secondary\"},content_toggle_ContentToggle=function ContentToggle(props){var _this=this;!function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError(\"Cannot call a class as a function\")}(this,ContentToggle),content_toggle_defineProperty(this,\"defaultProps\",{collapseText:\"Show less\",expandText:\"Read more\",rowCount:1,theme:THEMES.PRIMARY,checkHeightBeforeInit:1}),content_toggle_defineProperty(this,\"state\",{status:new BehaviorSubject(STATUS_COLLAPSED),link:{style:{position:\"\",left:\"\",right:\"\",top:\"\",bottom:\"\"},text:\"\"}}),content_toggle_defineProperty(this,\"init\",(function(){_this.render(),_this.setLinkStyles(),_this.setContainerHeight(),_this.addListeners()})),content_toggle_defineProperty(this,\"getComputedStyle\",(function(element){return window.getComputedStyle(element)})),content_toggle_defineProperty(this,\"$link\",(function(){return _this.props.$container.querySelector(\".\".concat(\"content-toggle__link\"))})),content_toggle_defineProperty(this,\"render\",(function(){var $container=_this.props.$container,$link=_this.$link();$link&amp;&amp;$link.remove();var HTML='\\n      &lt;a\\n        href=\"#\"\\n        class=\"\\n          '.concat(\"content-toggle__link\",\"\\n          \").concat(\"content-toggle__link\",\"--\").concat(_this.getThemeClass(),\"\\n          \").concat(\"content-toggle__link\",\"--\").concat(_this.getRowCountClass(),\"\\n          \").concat(_this.state.statusValue===STATUS_EXPANDED?\"content-toggle__link--expanded\":\"\",'\\n        \"\\n      &gt;\\n      ').concat((_this.state.statusValue===STATUS_COLLAPSED?\"...\":\"\")+_this.state.link.text,\"\\n      &lt;/a&gt;\");$container.insertAdjacentHTML(\"beforeend\",HTML)})),content_toggle_defineProperty(this,\"getThemeClass\",(function(){return Object.values(THEMES).includes(_this.props.theme)?_this.props.theme:THEMES.PRIMARY})),content_toggle_defineProperty(this,\"getRowCountClass\",(function(){return _this.props.rowCount&gt;1?ROW_CLASSES_MULTI_LINE:ROW_CLASSES_SINGLE_LINE})),content_toggle_defineProperty(this,\"addContainerClasses\",(function(){var $container=_this.props.$container;[\"content-toggle\",\"\".concat(\"content-toggle\",\"--\").concat(_this.getThemeClass()),\"\".concat(\"content-toggle\",\"--\").concat(_this.getRowCountClass())].forEach((function(className){return $container.classList.add(className)}))})),content_toggle_defineProperty(this,\"checkIfElementIsHigherThanRowCount\",(function(){var _this$props=_this.props,$container=_this$props.$container,rowCount=_this$props.rowCount,parsedLineHeight=_this.getParsedLineHeight($container),maxHeight=parseFloat(parsedLineHeight)*rowCount;return _this.getParsedHeight($container)&gt;maxHeight})),content_toggle_defineProperty(this,\"getLastLetter\",(function(){return _this.props.$container.querySelector(\".\".concat(\"content-toggle--last-letter\"))||null})),content_toggle_defineProperty(this,\"setLastLetter\",(function(){var _this$props2=_this.props,$container=_this$props2.$container,rowCount=_this$props2.rowCount;if(null===_this.getLastLetter()){var lines=$container.innerHTML.split(/&lt;br\\s*[/]?&gt;/gi).filter((function(line){return line.length&gt;0})),lastLineIndex=lines.length&gt;rowCount?rowCount-1:lines.length-1,lastLine=lines[lastLineIndex].trim(),lastPart=lastLine.match(/(.)(?:&lt;[^&gt;]+&gt;)*$/g).shift(),newLastLine=[lastLine.substring(0,lastLine.length-lastPart.length),'&lt;span class=\"'.concat(\"content-toggle--last-letter\",'\"&gt;'),lastPart.substring(0,1),\"&lt;/span&gt;\"];newLastLine.push(lastPart.substring(1)),lines[lastLineIndex]=newLastLine.join(\"\"),$container.innerHTML=lines.join(\"&lt;br&gt;\")}})),content_toggle_defineProperty(this,\"setLinkStyles\",(function(){var _this$props3=_this.props,$container=_this$props3.$container,rowCount=_this$props3.rowCount,style=_this.state.link.style;if(_this.state.statusValue===STATUS_COLLAPSED){style.position=\"absolute\",style.top=\"\",style.bottom=parseFloat(_this.getComputedStyle($container).paddingBottom),style.left=\"\",style.right=0;var linkPositionElement=_this.getLastLetter(),elementWidth=_this.getElementWidth($container),offsetTop=linkPositionElement.offsetTop,styleLeft=linkPositionElement.offsetLeft+linkPositionElement.offsetWidth;offsetTop+linkPositionElement.offsetHeight&gt;parseFloat(_this.getParsedLineHeight($container))*rowCount?(style.left=\"\",style.right=0):styleLeft&lt;elementWidth-_this.$link().offsetWidth&amp;&amp;(style.left=styleLeft-parseInt(_this.getComputedStyle(_this.$link()).paddingLeft)+\"px\",style.right=\"\")}else Object.keys(style).forEach((function(key){style[key]=\"\"}));Object.keys(style).forEach((function(key){_this.$link().style[key]=style[key]}))})),content_toggle_defineProperty(this,\"setContainerHeight\",(function(){var _this$props4=_this.props,$container=_this$props4.$container,rowCount=_this$props4.rowCount,containerStyle=$container.style;if(_this.state.statusValue===STATUS_COLLAPSED){var height=parseFloat(_this.getParsedLineHeight($container))*rowCount;containerStyle.height=\"\".concat(height,\"px\")}else containerStyle.height=\"auto\",1===rowCount&amp;&amp;(containerStyle.maxWidth=\"100%\")})),content_toggle_defineProperty(this,\"collapse\",(function(){_this.props.$container.classList.remove(\"content-toggle--expanded\"),_this.state.status.next(STATUS_COLLAPSED),_this.setContainerHeight()})),content_toggle_defineProperty(this,\"expand\",(function(){_this.props.$container.classList.add(\"content-toggle--expanded\"),_this.state.status.next(STATUS_EXPANDED),_this.setContainerHeight()})),content_toggle_defineProperty(this,\"addListeners\",(function(){_this.$link().addEventListener(\"click\",(function(event){event.preventDefault(),_this.clickListeners()}))})),content_toggle_defineProperty(this,\"clickListeners\",(function(){_this.state.statusValue===STATUS_EXPANDED?_this.collapse():_this.expand()})),content_toggle_defineProperty(this,\"getParsedHeight\",(function(element){var _this$getComputedStyl=_this.getComputedStyle(element),height=_this$getComputedStyl.height,boxSizing=_this$getComputedStyl.boxSizing,paddingTop=_this$getComputedStyl.paddingTop,paddingBottom=_this$getComputedStyl.paddingBottom,parsedHeight=parseFloat(height);return\"border-box\"===boxSizing&amp;&amp;(parsedHeight-=parseFloat(paddingTop)+parseFloat(paddingBottom)),parsedHeight})),content_toggle_defineProperty(this,\"getParsedLineHeight\",(function(element){var _this$getComputedStyl2=_this.getComputedStyle(element),lineHeight=_this$getComputedStyl2.lineHeight,fontSize=_this$getComputedStyl2.fontSize,parsedLineHeight=lineHeight;return\"normal\"===lineHeight&amp;&amp;(parsedLineHeight=(1.14*parseFloat(fontSize)).toFixed(2)+\"px\"),parsedLineHeight})),content_toggle_defineProperty(this,\"getElementWidth\",(function(element){var width=_this.getComputedStyle(element).width;return isNaN(parseFloat(width))?0:parseFloat(width)})),content_toggle_defineProperty(this,\"throwPropError\",(function(element){throw new Error(\"[ContentToggle] Invalid \".concat(element,\"!\"))})),content_toggle_defineProperty(this,\"validateProps\",(function(){var _this$props5=_this.props,$container=_this$props5.$container,collapseText=_this$props5.collapseText,expandText=_this$props5.expandText,theme=_this$props5.theme,rowCount=_this$props5.rowCount,checkHeightBeforeInit=_this$props5.checkHeightBeforeInit;\"object\"===_typeof($container)&amp;&amp;\"\"!==$container.innerHTML||_this.throwPropError(\"container\"),\"string\"==typeof collapseText&amp;&amp;\"\"!==collapseText||_this.throwPropError(\"collapse text\"),\"string\"==typeof expandText&amp;&amp;\"\"!==expandText||_this.throwPropError(\"expand text\"),\"string\"==typeof theme&amp;&amp;Object.values(THEMES).includes(theme)||_this.throwPropError(\"theme\"),(!0===isNaN(Number(rowCount))||Number(rowCount)&lt;1)&amp;&amp;_this.throwPropError(\"row count\"),(!0===isNaN(Number(checkHeightBeforeInit))||Number(checkHeightBeforeInit)&lt;0||Number(checkHeightBeforeInit)&gt;1)&amp;&amp;_this.throwPropError(\"checkHeightBeforeInit\")})),this.props=function(target){for(var i=1;i&lt;arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?content_toggle_ownKeys(Object(source),!0).forEach((function(key){content_toggle_defineProperty(target,key,source[key])})):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):content_toggle_ownKeys(Object(source)).forEach((function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))}))}return target}({},this.defaultProps,{},props),this.validateProps(),(0===Number(this.props.checkHeightBeforeInit)||this.checkIfElementIsHigherThanRowCount())&amp;&amp;(this.addContainerClasses(),this.setLastLetter(),this.state.status.subscribe((function(value){_this.state.statusValue=value,_this.state.link.text=value===STATUS_EXPANDED?_this.props.collapseText:_this.props.expandText,_this.init()})))};function content_toggle_autoload_ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&amp;&amp;(symbols=symbols.filter((function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable}))),keys.push.apply(keys,symbols)}return keys}function content_toggle_autoload_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var ContentToggleAutoloader=function ContentToggleAutoloader(){!function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError(\"Cannot call a class as a function\")}(this,ContentToggleAutoloader)};content_toggle_autoload_defineProperty(ContentToggleAutoloader,\"load\",(function(){document.querySelectorAll(\".js-content-toggle\").forEach((function($container){new content_toggle_ContentToggle(function(target){for(var i=1;i&lt;arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?content_toggle_autoload_ownKeys(Object(source),!0).forEach((function(key){content_toggle_autoload_defineProperty(target,key,source[key])})):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):content_toggle_autoload_ownKeys(Object(source)).forEach((function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))}))}return target}({$container:$container},$container.dataset))}))}));__webpack_require__(140),__webpack_require__(170),__webpack_require__(172);var Radio=function(props){var checked=props.checked,name=props.name,title=props.title;return'\\n    &lt;label class=\"radio\"&gt;\\n      &lt;input class=\"radio__input\" name=\"'.concat(name,'\" type=\"radio\" ').concat(checked?\"checked\":\"\",'&gt;\\n      &lt;span class=\"radio__title\"&gt;').concat(title,\"&lt;/span&gt;\\n    &lt;/label&gt;\")};function cookie_consent_ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&amp;&amp;(symbols=symbols.filter((function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable}))),keys.push.apply(keys,symbols)}return keys}function cookie_consent_objectSpread(target){for(var i=1;i&lt;arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?cookie_consent_ownKeys(Object(source),!0).forEach((function(key){cookie_consent_defineProperty(target,key,source[key])})):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):cookie_consent_ownKeys(Object(source)).forEach((function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))}))}return target}function cookie_consent_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var CONSENTS=Object.freeze({ESSENTIAL:\"functional\",PERSONAL:\"full\",TEMPORARY:\"temporary\",UNDEFINED:\"\"}),COOKIE_KEY=\"cookieConsent\",UpdateConsent=new BehaviorSubject,CookieConsent={getConsent:function(){var cookie=helpers_getCookie(COOKIE_KEY),consent=cookie;return void 0===cookie?consent=CONSENTS.UNDEFINED:cookie!==CONSENTS.UNDEFINED&amp;&amp;Object.values(CONSENTS).includes(cookie)||(console.warn(\"Invalid cookie consent cookie\"),consent=CONSENTS.UNDEFINED),consent},removeCookieConsent:function(){helpers_removeCookie(COOKIE_KEY)},setConsent:function(consent,extraData){if(consent===CONSENTS.UNDEFINED||!Object.values(CONSENTS).includes(consent))throw new Error(\"Invalid consent type\");consent===CONSENTS.TEMPORARY?helpers_setCookie(COOKIE_KEY,consent,cookie_consent_objectSpread({},extraData)):helpers_setCookie(COOKIE_KEY,consent,cookie_consent_objectSpread({expires:90},extraData)),UpdateConsent.next(consent)},setEssentialConsent:function(extraData){CookieConsent.setConsent(CONSENTS.ESSENTIAL,cookie_consent_objectSpread({},extraData))},setPersonalConsent:function(extraData){CookieConsent.setConsent(CONSENTS.PERSONAL,cookie_consent_objectSpread({},extraData))},setTemporaryConsent:function(extraData){CookieConsent.setConsent(CONSENTS.TEMPORARY,cookie_consent_objectSpread({},extraData))},getVisitedUrls:function(){return helpers_getCookie(\"visitedUrls\")},addVisitedUrl:function(){var visitedUrls=JSON.parse(CookieConsent.getVisitedUrls()||\"[]\"),encodedUrl=encodeURIComponent(\"\".concat(window.location.origin).concat(window.location.pathname));visitedUrls.includes(encodedUrl)||(visitedUrls.push(encodedUrl),visitedUrls.length&lt;3?helpers_setCookie(\"visitedUrls\",JSON.stringify(visitedUrls)):(helpers_removeCookie(\"visitedUrls\"),CookieConsent.setTemporaryConsent()))},CONSENTS:CONSENTS};function customer_cookie_consent_ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&amp;&amp;(symbols=symbols.filter((function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable}))),keys.push.apply(keys,symbols)}return keys}function customer_cookie_consent_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var CUSTOMER_CONSENTS=Object.freeze({PERSONAL:{name:CONSENTS.PERSONAL,id:100},ESSENTIAL:{name:CONSENTS.ESSENTIAL,id:101},TEMPORARY:{name:CONSENTS.TEMPORARY,id:102},UNDEFINED:{}}),CustomerCookieConsent={consentTypeIds:function(){var consentTypeIds=[];for(var consentType in CUSTOMER_CONSENTS)CUSTOMER_CONSENTS[consentType]!==CUSTOMER_CONSENTS.UNDEFINED&amp;&amp;consentTypeIds.push(CUSTOMER_CONSENTS[consentType].id);return consentTypeIds},consentTypeNames:function(){var consentTypeNames=[];for(var consentType in CUSTOMER_CONSENTS)CUSTOMER_CONSENTS[consentType]!==CUSTOMER_CONSENTS.UNDEFINED&amp;&amp;consentTypeNames.push(CUSTOMER_CONSENTS[consentType].name);return consentTypeNames},hasConsentTypeID:function(customerCookie){var consentTypeId=customerCookie.consentTypeId;return!(void 0===consentTypeId||!CustomerCookieConsent.consentTypeIds().includes(consentTypeId))},hasConsentTypeName:function(customerCookie){var consentTypeName=customerCookie.consentTypeName;return!(void 0===consentTypeName||!CustomerCookieConsent.consentTypeNames().includes(consentTypeName))},hasDecisionAt:function(customerCookie){return!(void 0===customerCookie.decisionAt||!helpers_isDateFormatted(customerCookie.decisionAt,\"YYYY-MM-DDTHH:mm:ss.0000000+00:00\"))},hasIsAccepted:function(customerCookie){var isAccepted=customerCookie.isAccepted;return!(void 0===customerCookie.isAccepted||\"boolean\"!=typeof isAccepted)},removeCustomerCookieConsent:function(){helpers_removeCookie(\"customerCookieConsent\")},setCustomerConsentCookieValue:function(consent,isAccepted,extraData){if(consent===CONSENTS.UNDEFINED||!CustomerCookieConsent.consentTypeIds().includes(consent.id)||!CustomerCookieConsent.consentTypeNames().includes(consent.name))throw new Error(\"Invalid consent type\");var customerCookie=[{consentTypeId:consent.id,consentTypeName:consent.name,isAccepted:isAccepted,decisionAt:helpers_utcCurrentTimeString(\"YYYY-MM-DDTHH:mm:ss.0000000+00:00\")}];helpers_setCookieWithEncoding(\"customerCookieConsent\",customerCookie,function(target){for(var i=1;i&lt;arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?customer_cookie_consent_ownKeys(Object(source),!0).forEach((function(key){customer_cookie_consent_defineProperty(target,key,source[key])})):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):customer_cookie_consent_ownKeys(Object(source)).forEach((function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))}))}return target}({},extraData))},getCustomerConsentCookieValue:function(){try{var cookie=helpers_getCookie(\"customerCookieConsent\");if(void 0===cookie)return;return JSON.parse(cookie)}catch(error){return void console.warn(\"Cannot determine customer cookie consent, \"+error)}},isValidCustomerConsentCookieValue:function(customerCookie){if(!Array.isArray(customerCookie)||1!==customerCookie.length)return!1;var customerCookieType=customerCookie[0];return CustomerCookieConsent.hasConsentTypeID(customerCookieType)&amp;&amp;CustomerCookieConsent.hasConsentTypeName(customerCookieType)&amp;&amp;CustomerCookieConsent.hasDecisionAt(customerCookieType)&amp;&amp;CustomerCookieConsent.hasIsAccepted(customerCookieType)},getCustomerConsentCookieType:function(){var customerCookie=CustomerCookieConsent.getCustomerConsentCookieValue();if(!Array.isArray(customerCookie)||!CustomerCookieConsent.isValidCustomerConsentCookieValue(customerCookie))return CUSTOMER_CONSENTS.UNDEFINED;for(var consentType in customerCookie=customerCookie[0],CUSTOMER_CONSENTS)if(customerCookie.consentTypeName===CUSTOMER_CONSENTS[consentType].name&amp;&amp;customerCookie.consentTypeId===CUSTOMER_CONSENTS[consentType].id)return CUSTOMER_CONSENTS[consentType];return CUSTOMER_CONSENTS.UNDEFINED},CUSTOMER_CONSENTS:CUSTOMER_CONSENTS};function cookie_consent_wrapper_ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&amp;&amp;(symbols=symbols.filter((function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable}))),keys.push.apply(keys,symbols)}return keys}function cookie_consent_wrapper_objectSpread(target){for(var i=1;i&lt;arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?cookie_consent_wrapper_ownKeys(Object(source),!0).forEach((function(key){cookie_consent_wrapper_defineProperty(target,key,source[key])})):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):cookie_consent_wrapper_ownKeys(Object(source)).forEach((function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))}))}return target}function cookie_consent_wrapper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function cookie_settings_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}CookieConsent.getConsent=function(){var cookie=helpers_getCookie(COOKIE_KEY),customerCookie=CustomerCookieConsent.getCustomerConsentCookieType(),consent=cookie;return void 0===cookie||customerCookie===CUSTOMER_CONSENTS.UNDEFINED?(CookieConsent.removeCookieConsent(),CustomerCookieConsent.removeCustomerCookieConsent(),CONSENTS.UNDEFINED):cookie!==CONSENTS.UNDEFINED&amp;&amp;Object.values(CONSENTS).includes(cookie)?consent:(console.warn(\"Invalid cookie consent cookie\"),CONSENTS.UNDEFINED)},CookieConsent.setConsent=function(consent,extraData){if(consent===CONSENTS.UNDEFINED||!Object.values(CONSENTS).includes(consent))throw new Error(\"Invalid consent type\");if(consent===CONSENTS.TEMPORARY)helpers_setCookie(COOKIE_KEY,consent,cookie_consent_wrapper_objectSpread({},extraData)),CustomerCookieConsent.setCustomerConsentCookieValue(CUSTOMER_CONSENTS.TEMPORARY,!0,cookie_consent_wrapper_objectSpread({},extraData));else for(var customerConsent in helpers_setCookie(COOKIE_KEY,consent,cookie_consent_wrapper_objectSpread({expires:90},extraData)),CUSTOMER_CONSENTS)if(CUSTOMER_CONSENTS[customerConsent].name===consent){CustomerCookieConsent.setCustomerConsentCookieValue(CUSTOMER_CONSENTS[customerConsent],!0,cookie_consent_wrapper_objectSpread({expires:90},extraData));break}UpdateConsent.next(consent)};var JS_SELECTOR_ESSENTIAL=\"js-cookie-settings--\"+CookieConsent.CONSENTS.ESSENTIAL,JS_SELECTOR_PERSONAL=\"js-cookie-settings--\"+CookieConsent.CONSENTS.PERSONAL,cookie_settings_CookieSettings=function CookieSettings(props){var _this=this;!function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError(\"Cannot call a class as a function\")}(this,CookieSettings),cookie_settings_defineProperty(this,\"props\",void 0),cookie_settings_defineProperty(this,\"state\",{consent:CookieConsent.CONSENTS.UNDEFINED}),cookie_settings_defineProperty(this,\"addListeners\",(function(){var $container=_this.props.$container,$contEssential=$container.querySelector(\".\"+JS_SELECTOR_ESSENTIAL);$contEssential&amp;&amp;$contEssential.addEventListener(\"click\",(function(){return _this.handleClickOnConsent(CookieConsent.CONSENTS.ESSENTIAL)}));var $contPersonal=$container.querySelector(\".\"+JS_SELECTOR_PERSONAL);$contPersonal&amp;&amp;$contPersonal.addEventListener(\"click\",(function(){return _this.handleClickOnConsent(CookieConsent.CONSENTS.PERSONAL)}))})),cookie_settings_defineProperty(this,\"handleClickOnConsent\",(function(consent){_this.state.consent!==consent&amp;&amp;(_this.setConsent(consent),_this.render(),_this.addListeners(),_this.props.notifySuccess(_this.props.i18n.MESSAGE_SETTINGS_UPDATED))})),cookie_settings_defineProperty(this,\"getConsent\",(function(){if(_this.state.consent!==CookieConsent.CONSENTS.UNDEFINED)return _this.state.consent;var consent=CookieConsent.getConsent();return consent&amp;&amp;(_this.state.consent=consent),_this.state.consent})),cookie_settings_defineProperty(this,\"setConsent\",(function(consent){var domain=_this.props.domain;CookieConsent.setConsent(consent,{domain:domain}),_this.state.consent=consent})),cookie_settings_defineProperty(this,\"render\",(function(){var _this$props=_this.props,$container=_this$props.$container,i18n=_this$props.i18n,consent=_this.state.consent,i18nDescTemplate=\"\";i18n.DESC&amp;&amp;(i18nDescTemplate='&lt;p class=\"cookie-settings__desc\"&gt;'.concat(i18n.DESC,\"&lt;/p&gt;\"));var HTML='\\n      &lt;div class=\"cookie-settings\"&gt;\\n          &lt;h2 class=\"cookie-settings__title\"&gt;'.concat(i18n.TITLE,\"&lt;/h2&gt;\\n          \").concat(i18nDescTemplate,'\\n          &lt;div class=\"cookie-settings__cards\"&gt;\\n              &lt;div class=\"cookie-settings__card ').concat(JS_SELECTOR_PERSONAL,'\"&gt;\\n                  ').concat(Radio({checked:consent===CookieConsent.CONSENTS.PERSONAL,name:\"cookie-settings\",title:i18n.PERSONALISED_TITLE}),'\\n                  &lt;p class=\"cookie-settings__card-desc\"&gt;').concat(i18n.PERSONALISED_TEXT,'&lt;/p&gt;\\n              &lt;/div&gt;\\n              &lt;div class=\"cookie-settings__card ').concat(JS_SELECTOR_ESSENTIAL,'\"&gt;\\n                  ').concat(Radio({checked:consent===CookieConsent.CONSENTS.ESSENTIAL,name:\"cookie-settings\",title:i18n.ESSENTIAL_TITLE}),'\\n                  &lt;p class=\"cookie-settings__card-desc\"&gt;').concat(i18n.ESSENTIAL_TEXT,\"&lt;/p&gt;\\n              &lt;/div&gt;\\n          &lt;/div&gt;\\n      &lt;/div&gt;\");$container.innerHTML=\"\",$container.insertAdjacentHTML(\"beforeend\",HTML)})),this.props=Object.freeze(props),this.props&amp;&amp;\"function\"==typeof this.props.updateCookieFn&amp;&amp;UpdateConsent.subscribe(this.props.updateCookieFn),this.getConsent(),this.render(),this.addListeners()},prop_types=(__webpack_require__(174),__webpack_require__(1));function cookie_wall_ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&amp;&amp;(symbols=symbols.filter((function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable}))),keys.push.apply(keys,symbols)}return keys}function cookie_wall_objectSpread(target){for(var i=1;i&lt;arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?cookie_wall_ownKeys(Object(source),!0).forEach((function(key){cookie_wall_defineProperty(target,key,source[key])})):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):cookie_wall_ownKeys(Object(source)).forEach((function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))}))}return target}function cookie_wall_defineProperties(target,props){for(var i=0;i&lt;props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,\"value\"in descriptor&amp;&amp;(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function cookie_wall_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var cookie_wall_CookieWall=function(){function CookieWall(_props){var _this=this;!function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError(\"Cannot call a class as a function\")}(this,CookieWall),cookie_wall_defineProperty(this,\"props\",void 0),cookie_wall_defineProperty(this,\"componentState\",{expires:90}),cookie_wall_defineProperty(this,\"setState\",(function(props){_this.componentState=cookie_wall_objectSpread({},_this.componentState,{},props),_this.render()})),cookie_wall_defineProperty(this,\"getState\",(function(){return _this.componentState})),cookie_wall_defineProperty(this,\"clickOkEvent\",(function(){var extraProps={domain:_this.props.domain};CookieConsent.setPersonalConsent(cookie_wall_objectSpread({},extraProps)),_this.closeCookieWall()})),cookie_wall_defineProperty(this,\"clickEssentialEvent\",(function(){var extraProps={domain:_this.props.domain};CookieConsent.setEssentialConsent(cookie_wall_objectSpread({},extraProps)),_this.closeCookieWall()})),cookie_wall_defineProperty(this,\"closeCookieWall\",(function(){_this.setState({isClosed:!0})})),cookie_wall_defineProperty(this,\"closeCookieWallThisSession\",(function(){var extraProps={domain:_this.props.domain};CookieConsent.getConsent()===CONSENTS.UNDEFINED&amp;&amp;CookieConsent.setTemporaryConsent(cookie_wall_objectSpread({},extraProps)),_this.closeCookieWall()})),cookie_wall_defineProperty(this,\"render\",(function(){var _this$props=_this.props,buttonText=_this$props.buttonText,classList=_this$props.classList,$container=_this$props.$container,urlText=_this$props.urlText,contentText=_this$props.contentText,url=_this$props.url,hideLinkAfterText=_this$props.hideLinkAfterText,buttonEssentialPackage=_this$props.buttonEssentialPackage,buttonTextAria=_this$props.buttonTextAria,buttonEssentialPackageAria=_this$props.buttonEssentialPackageAria,textWithUrl=contentText.replace(/{preferencesUrl}/g,'&lt;a href=\"'.concat(url,'\" class=\"cc-banner__link\"&gt;')).replace(/{\\/preferencesUrl}/g,\"&lt;/a&gt;\"),urlLinkAfterText=hideLinkAfterText?\"\":\"&lt;a href=\".concat(url,' class=\"cc-banner__link\"&gt;').concat(urlText,\"&lt;/a&gt;\");$container.innerHTML=\"\",_this.getState().isClosed||_this.getState().consent||!$container||($container.innerHTML='\\n      &lt;section class=\"cc-banner__container '.concat(classList?classList.join(\" \"):\"\",'\"&gt;\\n        &lt;article class=\"cc-banner__wrapper\"&gt;\\n          &lt;p class=\"cc-banner__text\"&gt;\\n            ').concat(textWithUrl,\"\\n            \").concat(urlLinkAfterText,'\\n          &lt;/p&gt;\\n          &lt;div class=\"cc-banner__buttons\"&gt;\\n            &lt;button\\n              aria-label=\"').concat(buttonTextAria,'\"\\n              class=\"\\n              cc-banner__btn-ok cc-banner__btn\\n              ').concat(\"js-btn-ok\",'\"\\n            &gt;\\n              ').concat(buttonText,'\\n            &lt;/button&gt;\\n            &lt;button\\n              aria-label=\"').concat(buttonEssentialPackageAria,'\"\\n              class=\"\\n              cc-banner__btn-essential cc-banner__btn\\n              ').concat(\"js-btn-essential\",'\"\\n            &gt;\\n              ').concat(buttonEssentialPackage,\"\\n            &lt;/button&gt;\\n          &lt;/div&gt;\\n        &lt;/article&gt;\\n      &lt;/section&gt;\"),_this.componentDidMount())})),this.props=cookie_wall_objectSpread({},_props),\"function\"==typeof this.props.updateCookieFn&amp;&amp;UpdateConsent.subscribe(this.props.updateCookieFn);var _consent=CookieConsent.getConsent();_consent===CONSENTS.UNDEFINED&amp;&amp;(CookieConsent.addVisitedUrl(),_consent=CookieConsent.getConsent()),this.setState({consent:_consent})}var Constructor,protoProps,staticProps;return Constructor=CookieWall,(protoProps=[{key:\"componentDidMount\",value:function(){if(!this.getState().consent){var $okButton=this.props.$container.querySelector(\".\".concat(\"js-btn-ok\"));$okButton&amp;&amp;$okButton.addEventListener(\"click\",this.clickOkEvent);var $essentialButton=this.props.$container.querySelector(\".\".concat(\"js-btn-essential\"));$essentialButton&amp;&amp;$essentialButton.addEventListener(\"click\",this.clickEssentialEvent)}}}])&amp;&amp;cookie_wall_defineProperties(Constructor.prototype,protoProps),staticProps&amp;&amp;cookie_wall_defineProperties(Constructor,staticProps),CookieWall}();cookie_wall_defineProperty(cookie_wall_CookieWall,\"propTypes\",{buttonText:prop_types.string.isRequired,classList:[],$container:Object(prop_types.instanceOf)(prop_types.Element).isRequired,contentText:prop_types.string.isRequired,updateCookieFn:Function,url:prop_types.string.isRequired,urlText:prop_types.string.isRequired,domain:prop_types.string,hideLinkAfterText:prop_types.bool,buttonEssentialPackage:prop_types.string,buttonTextAria:prop_types.string,buttonEssentialPackageAria:prop_types.string});__webpack_require__(178);function cookie_consent_granular_ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&amp;&amp;(symbols=symbols.filter((function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable}))),keys.push.apply(keys,symbols)}return keys}function cookie_consent_granular_objectSpread(target){for(var i=1;i&lt;arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?cookie_consent_granular_ownKeys(Object(source),!0).forEach((function(key){cookie_consent_granular_defineProperty(target,key,source[key])})):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):cookie_consent_granular_ownKeys(Object(source)).forEach((function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))}))}return target}function cookie_consent_granular_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var cookie_consent_granular_CONSENTS=Object.freeze({NECESSARY:\"necessary\",FUNCTIONAL:\"functional\",ANALYTICAL:\"analytical\",PERSONALIZED:\"personalized\"}),LEGACY_CONSENT_OPTIONS=Object.freeze([\"full\",\"functional\",\"temporary\"]),cookie_consent_granular_CUSTOMER_CONSENTS=Object.freeze({NECESSARY:{name:cookie_consent_granular_CONSENTS.NECESSARY,id:103},FUNCTIONAL:{name:cookie_consent_granular_CONSENTS.FUNCTIONAL,id:104},ANALYTICAL:{name:cookie_consent_granular_CONSENTS.ANALYTICAL,id:105},PERSONALIZED:{name:cookie_consent_granular_CONSENTS.PERSONALIZED,id:106}}),COOKIES_TO_BE_REMOVED_WHEN_REVOKING_PERSONALIZED_CONSENTS=Object.freeze([\"_fbc\",\"_fbp\",\"_gcl_au\",\"_gcl_aw\",\"_gcl_dc\",\"_uetmsclkid\",\"_uetsid\",\"_uetvid\",\"realRefr\",\"TDCPM\",\"TDID\"]),LOCAL_STORAGE_TO_BE_REMOVED_WHEN_REVOKING_PERSONALIZED_CONSENTS=Object.freeze([\"_uetmsclkid\",\"_uetmsclkid_exp\",\"_uetsid\",\"_uetsid_exp\",\"_uetvid\",\"_uetvid_exp\"]),cookie_consent_granular_UpdateConsent=new function(){var subscribers=[],currentValue=null;return{subscribe:function(subscriber){subscribers.push(subscriber)},next:function(nextValue){currentValue!==nextValue&amp;&amp;(currentValue=nextValue,subscribers.forEach((function(subscriber){return subscriber(nextValue)})))}}},CookieConsentGranular={hasValidConsent:function(){var customerCookieConsentIsValid=CookieConsentGranular.customerConsentCookieIsValid();return customerCookieConsentIsValid||(CookieConsentGranular.removeCustomerCookieConsent(),CookieConsentGranular.removeLegacyConsent()),customerCookieConsentIsValid},acceptAllConsents:function(extraData){var consents=[{consentId:cookie_consent_granular_CUSTOMER_CONSENTS.NECESSARY.id,consentGiven:!0},{consentId:cookie_consent_granular_CUSTOMER_CONSENTS.FUNCTIONAL.id,consentGiven:!0},{consentId:cookie_consent_granular_CUSTOMER_CONSENTS.ANALYTICAL.id,consentGiven:!0},{consentId:cookie_consent_granular_CUSTOMER_CONSENTS.PERSONALIZED.id,consentGiven:!0}];CookieConsentGranular.setConsents(consents,cookie_consent_granular_objectSpread({},extraData))},acceptNecessaryConsent:function(extraData){var consents=[{consentId:cookie_consent_granular_CUSTOMER_CONSENTS.NECESSARY.id,consentGiven:!0},{consentId:cookie_consent_granular_CUSTOMER_CONSENTS.FUNCTIONAL.id,consentGiven:!1},{consentId:cookie_consent_granular_CUSTOMER_CONSENTS.ANALYTICAL.id,consentGiven:!1},{consentId:cookie_consent_granular_CUSTOMER_CONSENTS.PERSONALIZED.id,consentGiven:!1}];CookieConsentGranular.setConsents(consents,cookie_consent_granular_objectSpread({},extraData))},setConsents:function(consents,extraData){var finalConsents=[];consents.forEach((function(consent){var singleConsent=CookieConsentGranular.getConsentItem(consent.consentId),decisionAtNow=helpers_utcCurrentTimeString(\"YYYY-MM-DDTHH:mm:ss.0000000+00:00\");singleConsent&amp;&amp;(Object.prototype.hasOwnProperty.call(singleConsent,\"isAccepted\")&amp;&amp;singleConsent.isAccepted===consent.consentGiven||(singleConsent.isAccepted=consent.consentGiven,singleConsent.decisionAt=decisionAtNow),finalConsents.push(singleConsent))}));var cookieConsentValue=consents.length&gt;0&amp;&amp;consents.every((function(c){return!0===c.consentGiven}))?\"full\":\"functional\";CookieConsentGranular.setCustomerConsentCookieValue(finalConsents,cookie_consent_granular_objectSpread({expires:90},extraData)),helpers_setCookie(\"cookieConsent\",cookieConsentValue,cookie_consent_granular_objectSpread({expires:90},extraData)),cookie_consent_granular_UpdateConsent.next({consents:finalConsents,legacyConsent:cookieConsentValue})},getConsentItem:function(consentId){var name,currentValues=CookieConsentGranular.getCustomerConsentCookieValue();switch(consentId){case cookie_consent_granular_CUSTOMER_CONSENTS.NECESSARY.id:name=cookie_consent_granular_CUSTOMER_CONSENTS.NECESSARY.name;break;case cookie_consent_granular_CUSTOMER_CONSENTS.FUNCTIONAL.id:name=cookie_consent_granular_CUSTOMER_CONSENTS.FUNCTIONAL.name;break;case cookie_consent_granular_CUSTOMER_CONSENTS.ANALYTICAL.id:name=cookie_consent_granular_CUSTOMER_CONSENTS.ANALYTICAL.name;break;case cookie_consent_granular_CUSTOMER_CONSENTS.PERSONALIZED.id:name=cookie_consent_granular_CUSTOMER_CONSENTS.PERSONALIZED.name}if(!name)return null;var currentConsent=null;Array.isArray(currentValues)&amp;&amp;(currentConsent=currentValues.find((function(x){return x.consentTypeId===consentId})));var item={consentTypeId:consentId,consentTypeName:name,decisionAt:void 0,isAccepted:void 0};return currentConsent&amp;&amp;(item.decisionAt=currentConsent.decisionAt,item.isAccepted=currentConsent.isAccepted),item},setCustomerConsentCookieValue:function(consents,extraData){(consents.forEach((function(consent){if(!(CookieConsentGranular.consentTypeIds().includes(consent.consentTypeId)&amp;&amp;CookieConsentGranular.consentTypeNames().includes(consent.consentTypeName)&amp;&amp;Object.prototype.hasOwnProperty.call(consent,\"isAccepted\")&amp;&amp;Object.prototype.hasOwnProperty.call(consent,\"decisionAt\")))throw new Error(\"Invalid consent type\")})),consents.length&gt;0&amp;&amp;consents.filter((function(x){return x.consentTypeId===cookie_consent_granular_CUSTOMER_CONSENTS.PERSONALIZED.id})).length&gt;0)&amp;&amp;(1===consents.filter((function(x){return x.consentTypeId===cookie_consent_granular_CUSTOMER_CONSENTS.PERSONALIZED.id&amp;&amp;!1===x.isAccepted})).length&amp;&amp;(COOKIES_TO_BE_REMOVED_WHEN_REVOKING_PERSONALIZED_CONSENTS.forEach((function(cookie){helpers_removeCookie(cookie),function(key){var rootDomainName=location.hostname.split(\".\").reverse().splice(0,2).reverse().join(\".\");document.cookie=\"\".concat(key,\"=;path=/;domain=\").concat(rootDomainName,\";expires=Thu, 01 Jan 1970 00:00:01 GMT\")}(cookie)})),LOCAL_STORAGE_TO_BE_REMOVED_WHEN_REVOKING_PERSONALIZED_CONSENTS.forEach((function(key){!function(key){window.localStorage.removeItem(key)}(key)}))));helpers_setCookieWithEncoding(\"customerCookieConsent\",consents,cookie_consent_granular_objectSpread({},extraData))},removeLegacyConsent:function(){helpers_removeCookie(\"cookieConsent\")},consentTypeIds:function(){var consentTypeIds=[];for(var consentType in cookie_consent_granular_CUSTOMER_CONSENTS)consentTypeIds.push(cookie_consent_granular_CUSTOMER_CONSENTS[consentType].id);return consentTypeIds},consentTypeNames:function(){var consentTypeNames=[];for(var consentType in cookie_consent_granular_CUSTOMER_CONSENTS)consentTypeNames.push(cookie_consent_granular_CUSTOMER_CONSENTS[consentType].name);return consentTypeNames},hasConsentTypeID:function(customerCookie){var consentTypeId=customerCookie.consentTypeId;return!(void 0===consentTypeId||!CookieConsentGranular.consentTypeIds().includes(consentTypeId))},hasConsentTypeName:function(customerCookie){var consentTypeName=customerCookie.consentTypeName;return!(void 0===consentTypeName||!CookieConsentGranular.consentTypeNames().includes(consentTypeName))},hasDecisionAt:function(customerCookie){return!(void 0===customerCookie.decisionAt||!helpers_isDateFormatted(customerCookie.decisionAt,\"YYYY-MM-DDTHH:mm:ss.0000000+00:00\"))},hasIsAccepted:function(customerCookie){var isAccepted=customerCookie.isAccepted;return!(void 0===customerCookie.isAccepted||\"boolean\"!=typeof isAccepted)},removeCustomerCookieConsent:function(){helpers_removeCookie(\"customerCookieConsent\")},getCustomerConsentCookieValue:function(){try{var cookie=helpers_getCookie(\"customerCookieConsent\");if(void 0===cookie)return;return JSON.parse(cookie)}catch(error){return void console.warn(\"Cannot determine customer cookie consent, \"+error)}},isSingleStoredConsentValid:function(customerCookieType){return CookieConsentGranular.hasConsentTypeID(customerCookieType)&amp;&amp;CookieConsentGranular.hasConsentTypeName(customerCookieType)&amp;&amp;CookieConsentGranular.hasDecisionAt(customerCookieType)&amp;&amp;CookieConsentGranular.hasIsAccepted(customerCookieType)},legacyConsentCookieIsValid:function(){var cookie=helpers_getCookie(\"cookieConsent\");return void 0!==cookie&amp;&amp;LEGACY_CONSENT_OPTIONS.includes(cookie)},customerConsentCookieIsValid:function(){if(!CookieConsentGranular.legacyConsentCookieIsValid())return!1;var customerCookieConsent=CookieConsentGranular.getCustomerConsentCookieValue();if(!Array.isArray(customerCookieConsent))return!1;if(4!==customerCookieConsent.length)return!1;for(var i=0;i&lt;customerCookieConsent.length;i++){var singleItem=customerCookieConsent[i];if(!CookieConsentGranular.isSingleStoredConsentValid(singleItem))return!1}return!0},CONSENTS:cookie_consent_granular_CONSENTS};__webpack_require__(180);function cookie_settings_granular_ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&amp;&amp;(symbols=symbols.filter((function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable}))),keys.push.apply(keys,symbols)}return keys}function cookie_settings_granular_objectSpread(target){for(var i=1;i&lt;arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?cookie_settings_granular_ownKeys(Object(source),!0).forEach((function(key){cookie_settings_granular_defineProperty(target,key,source[key])})):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):cookie_settings_granular_ownKeys(Object(source)).forEach((function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))}))}return target}function cookie_settings_granular_defineProperties(target,props){for(var i=0;i&lt;props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,\"value\"in descriptor&amp;&amp;(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function cookie_settings_granular_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var cookie_settings_granular_CookieSettingsGranular=function(){function CookieSettingsGranular(props){var _this=this;!function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError(\"Cannot call a class as a function\")}(this,CookieSettingsGranular),cookie_settings_granular_defineProperty(this,\"props\",void 0),cookie_settings_granular_defineProperty(this,\"state\",{$firstFocusableElement:void 0,$lastFocusableElement:void 0,$mouseDownElement:void 0}),cookie_settings_granular_defineProperty(this,\"currentConsents\",void 0),cookie_settings_granular_defineProperty(this,\"classSelectors\",{closeButton:\"js-cookie-settings-granular-popup__close\",popupInner:\"js-cookie-settings-granular-popup_inner\",scrollStop:\"cookie-settings-granular-scroll-stop\",btn:{acceptAll:\"cookie-settings-granular-popup__btn-accept-all\",onlySelected:\"cookie-settings-granular-popup__btn-only-selected\"},switch:\"cookie-consent-granular-popup__switch-toggle__switch\"}),cookie_settings_granular_defineProperty(this,\"clickBoundFunction\",void 0),cookie_settings_granular_defineProperty(this,\"keydownBoundFunction\",void 0),cookie_settings_granular_defineProperty(this,\"mousedownBoundFunction\",void 0),cookie_settings_granular_defineProperty(this,\"captureElementOnMouseDown\",(function(_ref){var target=_ref.target;_this.state.$mouseDownElement=target})),cookie_settings_granular_defineProperty(this,\"renderSingleConsent\",(function(consent){var switchHtml=_this.renderSwitch(consent);return'&lt;div class=\"cookie-settings-granular-popup__consents-item\"&gt;\\n                &lt;div class=\"cookie-settings-granular-popup__consents-item-contents\"&gt;\\n                    &lt;h3&gt;'.concat(consent.consentTitle,'&lt;/h3&gt;\\n                &lt;/div&gt;\\n                &lt;div class=\"cookie-settings-granular-popup__consents-toggle\"&gt;\\n                   &lt;p&gt;').concat(consent.consentDescription,\"&lt;/p&gt;\\n                   \").concat(switchHtml,\"\\n                &lt;/div&gt;\\n            &lt;/div&gt;\")})),cookie_settings_granular_defineProperty(this,\"getSwitchId\",(function(consent){return\"consent-\".concat(consent.consentId)})),cookie_settings_granular_defineProperty(this,\"renderSwitch\",(function(consent){var consentGiven=consent.consentCanBeAltered?_this.consentGiven(consent.consentId):consent.consentGiven,isDisabled=consent.consentCanBeAltered?\"\":\"disabled\",isChecked=consentGiven?\"checked\":\"\",isCheckedClass=consentGiven?\"consent-given\":\"\",isDisabledClass=consent.consentCanBeAltered?\"\":\"consent-disabled\",switchId=_this.getSwitchId(consent);return'&lt;div class=\"consent-toggle\"&gt;\\n                &lt;label for=\"'.concat(switchId,'\" class=\"switch ').concat(isCheckedClass,\" \").concat(isDisabledClass,'\"&gt;\\n                    \\n                    &lt;input role=\"switch\" id=\"').concat(switchId,'\" class=\"').concat(_this.classSelectors.switch,'\" type=\"checkbox\" ').concat(isChecked,\" \").concat(isDisabled,' /&gt;\\n                    &lt;span class=\"slider round ').concat(isCheckedClass,\" \").concat(isDisabledClass,'\"&gt;\\n                        &lt;div class=\"slider-icon\"&gt;\\n                        ').concat(iconCwCheck,\"\\n                        &lt;/div&gt;\\n                    &lt;/span&gt;\\n              \\n                &lt;/label&gt;\\n            &lt;/div&gt;\")})),cookie_settings_granular_defineProperty(this,\"parseCookieToConsent\",(function(){_this.currentConsents=CookieConsentGranular.getCustomerConsentCookieValue()})),cookie_settings_granular_defineProperty(this,\"consentGiven\",(function(consentId){return!!Array.isArray(_this.currentConsents)&amp;&amp;1===_this.currentConsents.filter((function(x){return x.consentTypeId===consentId&amp;&amp;!0===x.isAccepted})).length})),cookie_settings_granular_defineProperty(this,\"closeOnEscapePressed\",(function(eventHandler){eventHandler.keyCode===KeyCode_ESCAPE&amp;&amp;(eventHandler.stopPropagation(),eventHandler.preventDefault(),_this.closePopup())})),cookie_settings_granular_defineProperty(this,\"closeClickOutside\",(function(mouseEvent){var $outerContainer=document.querySelector(\".\".concat(_this.props.selector)),isClickedOutsidePopup=$outerContainer===mouseEvent.target,elementMouseDownIsSame=mouseEvent.target===_this.state.$mouseDownElement;if($outerContainer&amp;&amp;isClickedOutsidePopup&amp;&amp;elementMouseDownIsSame)return mouseEvent.preventDefault(),mouseEvent.stopPropagation(),_this.closePopup(),!1}));var generatedUid=generateUid(),defaultValues={classList:[],closeCallback:function(){return{}},selector:\"js-popup-\".concat(generatedUid),headerSelector:\"js-popup-header-\".concat(generatedUid),mainSelector:\"js-popup-main-\".concat(generatedUid)};this.props=cookie_settings_granular_objectSpread({},defaultValues,{},props),\"function\"==typeof this.props.updateCookieFn&amp;&amp;cookie_consent_granular_UpdateConsent.subscribe(this.props.updateCookieFn)}var Constructor,protoProps,staticProps;return Constructor=CookieSettingsGranular,(protoProps=[{key:\"componentDidMount\",value:function(){var $closeButton=document.querySelector(\".\".concat(this.classSelectors.closeButton));$closeButton&amp;&amp;$closeButton.addEventListener(\"click\",this.closePopup.bind(this));var $acceptAllButton=document.querySelector(\".\".concat(this.classSelectors.btn.acceptAll));$acceptAllButton&amp;&amp;$acceptAllButton.addEventListener(\"click\",this.acceptAll.bind(this));var $onlySelectedButton=document.querySelector(\".\".concat(this.classSelectors.btn.onlySelected));$onlySelectedButton&amp;&amp;$onlySelectedButton.addEventListener(\"click\",this.onlySelected.bind(this)),document.body&amp;&amp;document.body.classList.add(\"tv-scroll-stop\"),this.clickBoundFunction=this.closeClickOutside.bind(this),this.mousedownBoundFunction=this.captureElementOnMouseDown.bind(this),this.keydownBoundFunction=this.closeOnEscapePressed.bind(this),window.addEventListener(\"click\",this.clickBoundFunction),window.addEventListener(\"mousedown\",this.mousedownBoundFunction),window.addEventListener(\"keydown\",this.keydownBoundFunction)}},{key:\"closePopup\",value:function(){var $popup=document.querySelector(\".\".concat(this.props.selector));document.body&amp;&amp;document.body.classList.remove(\"tv-scroll-stop\"),$popup&amp;&amp;(window.removeEventListener(\"click\",this.clickBoundFunction),window.removeEventListener(\"mousedown\",this.mousedownBoundFunction),window.removeEventListener(\"keydown\",this.keydownBoundFunction),$popup.remove(),this.props.closeCallback())}},{key:\"acceptAll\",value:function(){var consents=this.props.consents,consentsToUpdate=[],extraProps={domain:this.props.domain};consents.forEach((function(consent){var consentUpdate={consentId:consent.consentId,consentGiven:!0};consentsToUpdate.push(consentUpdate)})),CookieConsentGranular.setConsents(consentsToUpdate,cookie_settings_granular_objectSpread({},extraProps)),this.closePopup()}},{key:\"onlySelected\",value:function(){var _this2=this,consents=this.props.consents,extraProps={domain:this.props.domain},consentsToUpdate=[];consents.forEach((function(consent){var consentUpdate={consentId:consent.consentId,consentGiven:!1},switchId=_this2.getSwitchId(consent),$switch=document.querySelector(\"#\".concat(switchId));$switch&amp;&amp;(consentUpdate.consentGiven=$switch.checked),consentsToUpdate.push(consentUpdate)})),CookieConsentGranular.setConsents(consentsToUpdate,cookie_settings_granular_objectSpread({},extraProps)),this.closePopup()}},{key:\"render\",value:function(){var _this3=this,_this$props=this.props,_this$props$classList=_this$props.classList,classList=void 0===_this$props$classList?[]:_this$props$classList,headerContent=_this$props.headerContent,subHeaderContents=_this$props.subHeaderContents,consents=_this$props.consents,_this$props$selector=_this$props.selector,selector=void 0===_this$props$selector?\"\".concat(this.props.selector):_this$props$selector;this.props.selector||(this.props.selector=selector),this.parseCookieToConsent();var consentHtml=\"\";Array.isArray(consents)&amp;&amp;(consentHtml=consents.map((function(consent){return _this3.renderSingleConsent(consent)})).join(\"\"));var HTML='\\n    &lt;div class=\"cookie-settings-granular-popup '.concat(selector,\" \").concat(classList.join(\" \"),'\"&gt;\\n      &lt;div class=\"cookie-settings-granular-popup__inner ').concat(this.classSelectors.popupInner,'\"\\n        open\\n        role=\"dialog\"\\n        aria-modal=\"true\"\\n        aria-labelledby=\"').concat(this.props.headerSelector,'\"\\n        aria-describedby=\"').concat(this.props.mainSelector,'\"\\n        tabindex=\"-1\"&gt;\\n    \\n    \\n        &lt;div class=\"cookie-settings-granular-popup__header\"\\n        &gt;\\n         &lt;div class=\"cookie-settings-granular-popup__header__title\"&gt;\\n             &lt;button class=\"cookie-settings-granular-popup__icon-close\\n              flex flex--justify-center\\n              flex--align-center js-cookie-settings-granular-popup__close\"&gt;\\n              ').concat(iconArrowLeft,\"\\n            &lt;/button&gt;\\n          \").concat(headerContent,\"\\n          &lt;/div&gt; \\n          \").concat(subHeaderContents,'\\n        &lt;/div&gt;\\n        &lt;div\\n          class=\"cookie-settings-granular-popup__content\"\\n        &gt;\\n         &lt;div class=\"cookie-settings-granular-popup__consents\"&gt;\\n            ').concat(consentHtml,'\\n          &lt;/div&gt;\\n       \\n          &lt;div class=\"cookie-settings-granular-popup__footer\"&gt;\\n              &lt;button class=\"cookie-settings-granular-popup__btn ').concat(this.classSelectors.btn.acceptAll,'\"&gt;').concat(this.props.buttons.acceptAllText,'&lt;/button&gt;    \\n              &lt;button class=\"cookie-settings-granular-popup__btn ').concat(this.classSelectors.btn.onlySelected,'\"&gt;').concat(this.props.buttons.onlySelectedText,\"&lt;/button&gt;\\n          &lt;/div&gt;\\n        &lt;/div&gt;\\n      &lt;/div&gt;\\n    &lt;/div&gt;\");document.body&amp;&amp;document.body.insertAdjacentHTML(\"beforeend\",HTML),this.componentDidMount()}}])&amp;&amp;cookie_settings_granular_defineProperties(Constructor.prototype,protoProps),staticProps&amp;&amp;cookie_settings_granular_defineProperties(Constructor,staticProps),CookieSettingsGranular}();function cookie_wall_granular_ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&amp;&amp;(symbols=symbols.filter((function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable}))),keys.push.apply(keys,symbols)}return keys}function cookie_wall_granular_objectSpread(target){for(var i=1;i&lt;arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?cookie_wall_granular_ownKeys(Object(source),!0).forEach((function(key){cookie_wall_granular_defineProperty(target,key,source[key])})):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):cookie_wall_granular_ownKeys(Object(source)).forEach((function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))}))}return target}function cookie_wall_granular_defineProperties(target,props){for(var i=0;i&lt;props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,\"value\"in descriptor&amp;&amp;(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function cookie_wall_granular_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var cookie_wall_granular_CookieWallGranular=function(){function CookieWallGranular(_props){var _this=this;!function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError(\"Cannot call a class as a function\")}(this,CookieWallGranular),cookie_wall_granular_defineProperty(this,\"props\",void 0),cookie_wall_granular_defineProperty(this,\"cookieSettingsGranularPopup\",void 0),cookie_wall_granular_defineProperty(this,\"currentLanguageSettings\",void 0),cookie_wall_granular_defineProperty(this,\"selectedLanguage\",void 0),cookie_wall_granular_defineProperty(this,\"componentState\",{expires:90,consentIsValid:!1,isClosed:!1}),cookie_wall_granular_defineProperty(this,\"setState\",(function(props){_this.componentState=cookie_wall_granular_objectSpread({},_this.componentState,{},props),_this.render()})),cookie_wall_granular_defineProperty(this,\"getState\",(function(){return _this.componentState})),cookie_wall_granular_defineProperty(this,\"clickOkEvent\",(function(e){e.preventDefault();var extraProps={domain:_this.props.domain};CookieConsentGranular.acceptAllConsents(cookie_wall_granular_objectSpread({},extraProps)),_this.closeCookieWall()})),cookie_wall_granular_defineProperty(this,\"clickNecessaryEvent\",(function(e){e.preventDefault();var extraProps={domain:_this.props.domain};CookieConsentGranular.acceptNecessaryConsent(cookie_wall_granular_objectSpread({},extraProps)),_this.closeCookieWall()})),cookie_wall_granular_defineProperty(this,\"switchToPrimaryContent\",(function(e){e.preventDefault(),_this.currentLanguageSettings=_this.props.languageSettings.primaryLanguage,_this.selectedLanguage=_this.currentLanguageSettings.languageKey,_this.render()})),cookie_wall_granular_defineProperty(this,\"switchToSecondaryContent\",(function(e){e.preventDefault(),_this.currentLanguageSettings=_this.props.languageSettings.secondaryLanguage,_this.selectedLanguage=_this.currentLanguageSettings.languageKey,_this.render()})),cookie_wall_granular_defineProperty(this,\"clickOpenPreferences\",(function(e){e.preventDefault(),_this.cookieSettingsGranularPopup=new cookie_settings_granular_CookieSettingsGranular({classList:[],headerContent:_this.currentLanguageSettings.settingsModal.headerTitle,closeCallback:function(){_this.setState({isClosed:!1}),CookieConsentGranular.hasValidConsent()&amp;&amp;_this.closeCookieWall()},selector:_this.currentLanguageSettings.settingsModal.selector,mainSelector:_this.currentLanguageSettings.settingsModal.mainSelector,headerSelector:_this.currentLanguageSettings.settingsModal.headerSelector,subHeaderContents:_this.currentLanguageSettings.settingsModal.subHeaderContents,buttons:{acceptAllText:_this.currentLanguageSettings.settingsModal.buttonAcceptAll,onlySelectedText:_this.currentLanguageSettings.settingsModal.buttonOnlySelected},consents:_this.currentLanguageSettings.settingsModal.consents}),_this.setState({isClosed:!0}),_this.cookieSettingsGranularPopup&amp;&amp;_this.cookieSettingsGranularPopup.render()})),cookie_wall_granular_defineProperty(this,\"closeCookieWall\",(function(){_this.setState({isClosed:!0,consentIsValid:!0})})),cookie_wall_granular_defineProperty(this,\"render\",(function(){var _this$props=_this.props,classList=_this$props.classList,$container=_this$props.$container,_this$currentLanguage=_this.currentLanguageSettings,buttonText=_this$currentLanguage.buttonText,contentText=_this$currentLanguage.contentText,buttonNecessaryPackage=_this$currentLanguage.buttonNecessaryPackage,buttonTextAria=_this$currentLanguage.buttonTextAria,buttonNecessaryPackageAria=_this$currentLanguage.buttonNecessaryPackageAria,textWithUrl=contentText.replace(/{preferencesModal}/g,'&lt;a href=\"#\" class=\"cc-banner-granular__link '.concat(\"js-link-open-preferences\",'\"&gt;')).replace(/{\\/preferencesModal}/g,\"&lt;/a&gt;\");if($container.innerHTML=\"\",!_this.getState().isClosed&amp;&amp;!_this.getState().consentIsValid&amp;&amp;$container){var primaryIsActive=_this.currentLanguageSettings&amp;&amp;_this.selectedLanguage===_this.props.languageSettings.primaryLanguage.languageKey,bannerTitle=_this.currentLanguageSettings?_this.currentLanguageSettings.bannerTitle:\"\",primaryLanguageKey=_this.props.languageSettings.primaryLanguage.languageKey,secondaryLanguageKey=_this.props.languageSettings.secondaryLanguage.languageKey;$container.innerHTML='\\n      &lt;div class=\"cc-banner-granular__background\"&gt;&lt;/div&gt;\\n      &lt;section class=\"cc-banner-granular__container '.concat(classList?classList.join(\" \"):\"\",'\"&gt;\\n        &lt;article class=\"cc-banner-granular__wrapper\"&gt;\\n          &lt;div class=\"cc-banner-granular__header\"&gt;\\n            &lt;h2 class=\"cc-banner-granular__header-title\"&gt;').concat(bannerTitle,'&lt;/h2&gt;\\n            &lt;div class=\"cc-banner-granular__header-language-picker\"&gt;\\n                &lt;a class=\"cc-banner-granular__header-language-picker-link ').concat(primaryIsActive?\"active\":\"\",\" \").concat(\"js-use-primary-language\",'\" href=\"#\"&gt;').concat(primaryLanguageKey,'&lt;/a&gt; | &lt;a class=\"cc-banner-granular__header-language-picker-link ').concat(primaryIsActive?\"\":\"active\",\" \").concat(\"js-use-secondary-language\",'\" href=\"#\"&gt;').concat(secondaryLanguageKey,'&lt;/a&gt;\\n            &lt;/div&gt;\\n          &lt;/div&gt;\\n          &lt;p class=\"cc-banner-granular__text\"&gt;\\n            ').concat(textWithUrl,'\\n          &lt;/p&gt;\\n          &lt;div class=\"cc-banner-granular__buttons\"&gt;\\n            &lt;button\\n              aria-label=\"').concat(buttonTextAria,'\"\\n              class=\"\\n              cc-banner-granular__btn-ok cc-banner-granular__btn\\n              ').concat(\"js-btn-ok\",'\"\\n            &gt;\\n              ').concat(buttonText,'\\n            &lt;/button&gt;\\n            &lt;button\\n              aria-label=\"').concat(buttonNecessaryPackageAria,'\"\\n              class=\"\\n              cc-banner-granular__btn-essential cc-banner-granular__btn\\n              ').concat(\"js-btn-necessary\",'\"\\n            &gt;\\n              ').concat(buttonNecessaryPackage,\"\\n            &lt;/button&gt;\\n          &lt;/div&gt;\\n        &lt;/article&gt;\\n      &lt;/section&gt;\"),_this.componentDidMount()}})),this.props=cookie_wall_granular_objectSpread({},_props),\"function\"==typeof this.props.updateCookieFn&amp;&amp;cookie_consent_granular_UpdateConsent.subscribe(this.props.updateCookieFn);var consentIsValid=CookieConsentGranular.hasValidConsent();this.selectedLanguage=_props.selectedLanguage,this.currentLanguageSettings=_props.languageSettings.primaryLanguage.languageKey===_props.selectedLanguage?_props.languageSettings.primaryLanguage:_props.languageSettings.secondaryLanguage,this.setState({consentIsValid:consentIsValid})}var Constructor,protoProps,staticProps;return Constructor=CookieWallGranular,(protoProps=[{key:\"componentDidMount\",value:function(){if(!this.getState().consent){var $okButton=this.props.$container.querySelector(\".\".concat(\"js-btn-ok\"));$okButton&amp;&amp;$okButton.addEventListener(\"click\",this.clickOkEvent);var $necessaryButton=this.props.$container.querySelector(\".\".concat(\"js-btn-necessary\"));$necessaryButton&amp;&amp;$necessaryButton.addEventListener(\"click\",this.clickNecessaryEvent);var $openPreferencesLink=this.props.$container.querySelector(\".\".concat(\"js-link-open-preferences\"));$openPreferencesLink&amp;&amp;$openPreferencesLink.addEventListener(\"click\",this.clickOpenPreferences);var $primaryContentLink=this.props.$container.querySelector(\".\".concat(\"js-use-primary-language\"));$primaryContentLink&amp;&amp;$primaryContentLink.addEventListener(\"click\",this.switchToPrimaryContent);var $secondaryContentLink=this.props.$container.querySelector(\".\".concat(\"js-use-secondary-language\"));$secondaryContentLink&amp;&amp;$secondaryContentLink.addEventListener(\"click\",this.switchToSecondaryContent)}}}])&amp;&amp;cookie_wall_granular_defineProperties(Constructor.prototype,protoProps),staticProps&amp;&amp;cookie_wall_granular_defineProperties(Constructor,staticProps),CookieWallGranular}();cookie_wall_granular_defineProperty(cookie_wall_granular_CookieWallGranular,\"propTypes\",{languageSettings:prop_types.object.isRequired,classList:[],$container:Object(prop_types.instanceOf)(prop_types.Element).isRequired,updateCookieFn:Function,domain:prop_types.string,selectedLanguage:prop_types.string});__webpack_require__(182),__webpack_require__(183);function notify_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var TYPE_ERROR=\"error\",TYPE_INFO=\"info\",TYPE_SUCCESS=\"success\",TYPE_WARNING=\"warning\",Notify=function Notify(){!function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError(\"Cannot call a class as a function\")}(this,Notify)};notify_defineProperty(Notify,\"_notify\",(function(text){var type=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:TYPE_SUCCESS,duration=arguments.length&gt;2&amp;&amp;void 0!==arguments[2]?arguments[2]:5e3,icon=arguments.length&gt;3&amp;&amp;void 0!==arguments[3]?arguments[3]:null,selector=\"notify\",$oldElem=document.querySelector(\".\"+selector);$oldElem&amp;&amp;$oldElem.remove();var HTML='\\n      &lt;div class=\"'.concat(selector,\" \").concat(selector,\"--\").concat(type,'\"&gt;\\n          ').concat(icon,'\\n          &lt;div class=\"').concat(selector,'__title\"&gt;').concat(text,\"&lt;/div&gt;\\n      &lt;/div&gt;\");document.body.insertAdjacentHTML(\"beforeend\",HTML);var $elem=document.querySelector(\".\"+selector);$elem.addEventListener(\"transitionend\",(function(){return $elem.remove()})),setTimeout((function(){return $elem.classList.add(selector+\"--hidden\")}),duration)})),notify_defineProperty(Notify,\"notifyError\",(function(text){var duration=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:5e3;return Notify._notify(text,TYPE_ERROR,duration,iconCross)})),notify_defineProperty(Notify,\"notifyErrorWithIconSad\",(function(text){var duration=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:5e3;return Notify._notify(text,TYPE_ERROR,duration,iconAttention)})),notify_defineProperty(Notify,\"notifyInfo\",(function(text){var duration=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:5e3;return Notify._notify(text,TYPE_INFO,duration,iconInfoCircle)})),notify_defineProperty(Notify,\"notifySuccess\",(function(text){var duration=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:5e3;return Notify._notify(text,TYPE_SUCCESS,duration,iconCheck)})),notify_defineProperty(Notify,\"notifySuccessWithIconHappy\",(function(text){var duration=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:5e3;return Notify._notify(text,TYPE_SUCCESS,duration,iconEmojiHappy)})),notify_defineProperty(Notify,\"notifyWarning\",(function(text){var duration=arguments.length&gt;1&amp;&amp;void 0!==arguments[1]?arguments[1]:5e3;return Notify._notify(text,TYPE_WARNING,duration,iconAttention)})),window.not=Notify;__webpack_require__(185);function spinner_ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&amp;&amp;(symbols=symbols.filter((function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable}))),keys.push.apply(keys,symbols)}return keys}function spinner_defineProperties(target,props){for(var i=0;i&lt;props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,\"value\"in descriptor&amp;&amp;(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}function spinner_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function spinner_classPrivateFieldGet(receiver,privateMap){var descriptor=privateMap.get(receiver);if(!descriptor)throw new TypeError(\"attempted to get private field on non-instance\");return descriptor.get?descriptor.get.call(receiver):descriptor.value}var spinner_Spinner=function(){function Spinner(props){var _this=this;!function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError(\"Cannot call a class as a function\")}(this,Spinner),spinner_props.set(this,{writable:!0,value:void 0}),spinner_defineProperty(this,\"close\",(function(){var element=document.querySelector(\".\".concat(spinner_classPrivateFieldGet(_this,spinner_props).selector));element&amp;&amp;element.remove()}));var generatedUid=generateUid(),defaultValues={selector:\"js-spinner-\".concat(generatedUid)};!function(receiver,privateMap,value){var descriptor=privateMap.get(receiver);if(!descriptor)throw new TypeError(\"attempted to set private field on non-instance\");if(descriptor.set)descriptor.set.call(receiver,value);else{if(!descriptor.writable)throw new TypeError(\"attempted to set read only private field\");descriptor.value=value}}(this,spinner_props,function(target){for(var i=1;i&lt;arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?spinner_ownKeys(Object(source),!0).forEach((function(key){spinner_defineProperty(target,key,source[key])})):Object.getOwnPropertyDescriptors?Object.defineProperties(target,Object.getOwnPropertyDescriptors(source)):spinner_ownKeys(Object(source)).forEach((function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))}))}return target}({},defaultValues,{},props))}var Constructor,protoProps,staticProps;return Constructor=Spinner,(protoProps=[{key:\"render\",value:function(){var HTML='\\n        &lt;div class=\"tv-spinner '.concat(spinner_classPrivateFieldGet(this,spinner_props).selector,'\"&gt;\\n            &lt;div class=\"tv-spinner__background\"&gt;\\n                &lt;div class=\"tv-spinner__background-circle\"&gt;&lt;/div&gt;\\n            &lt;/div&gt;\\n        &lt;/div&gt;\\n        ');document.body&amp;&amp;document.body.insertAdjacentHTML(\"beforeend\",HTML)}}])&amp;&amp;spinner_defineProperties(Constructor.prototype,protoProps),staticProps&amp;&amp;spinner_defineProperties(Constructor,staticProps),Spinner}(),spinner_props=new WeakMap;!function(obj,key,value){key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value}((function SpinnerAutoloader(){!function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError(\"Cannot call a class as a function\")}(this,SpinnerAutoloader)}),\"load\",(function(){new button_Button({$container:document.querySelector(\".\".concat(\"js-button-spinner\")),innerContent:\"Test the spinner\",clickFn:function(){var spinner=new spinner_Spinner;spinner.render(),setTimeout((function(){spinner.close()}),3e3)}}).render()}))}])}));\n//# sourceMappingURL=index.js.map","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    var requestData = config.data;\n    var requestHeaders = config.headers;\n\n    if (utils.isFormData(requestData)) {\n      delete requestHeaders['Content-Type']; // Let the browser set it\n    }\n\n    var request = new XMLHttpRequest();\n\n    // HTTP basic authentication\n    if (config.auth) {\n      var username = config.auth.username || '';\n      var password = config.auth.password || '';\n      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n    }\n\n    var fullPath = buildFullPath(config.baseURL, config.url);\n    request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n    // Set the request timeout in MS\n    request.timeout = config.timeout;\n\n    // Listen for ready state\n    request.onreadystatechange = function handleLoad() {\n      if (!request || request.readyState !== 4) {\n        return;\n      }\n\n      // The request errored out and we didn't get a response, this will be\n      // handled by onerror instead\n      // With one exception: request that using file: protocol, most browsers\n      // will return status as 0 even though it's a successful request\n      if (request.status === 0 &amp;&amp; !(request.responseURL &amp;&amp; request.responseURL.indexOf('file:') === 0)) {\n        return;\n      }\n\n      // Prepare the response\n      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n      var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n      var response = {\n        data: responseData,\n        status: request.status,\n        statusText: request.statusText,\n        headers: responseHeaders,\n        config: config,\n        request: request\n      };\n\n      settle(resolve, reject, response);\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle browser request cancellation (as opposed to a manual cancellation)\n    request.onabort = function handleAbort() {\n      if (!request) {\n        return;\n      }\n\n      reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle low level network errors\n    request.onerror = function handleError() {\n      // Real errors are hidden from us by the browser\n      // onerror should only fire if it's a network error\n      reject(createError('Network Error', config, null, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle timeout\n    request.ontimeout = function handleTimeout() {\n      var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n      if (config.timeoutErrorMessage) {\n        timeoutErrorMessage = config.timeoutErrorMessage;\n      }\n      reject(createError(timeoutErrorMessage, config, 'ECONNABORTED',\n        request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Add xsrf header\n    // This is only done if running in a standard browser environment.\n    // Specifically not if we're in a web worker, or react-native.\n    if (utils.isStandardBrowserEnv()) {\n      var cookies = require('./../helpers/cookies');\n\n      // Add xsrf header\n      var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) &amp;&amp; config.xsrfCookieName ?\n        cookies.read(config.xsrfCookieName) :\n        undefined;\n\n      if (xsrfValue) {\n        requestHeaders[config.xsrfHeaderName] = xsrfValue;\n      }\n    }\n\n    // Add headers to the request\n    if ('setRequestHeader' in request) {\n      utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n        if (typeof requestData === 'undefined' &amp;&amp; key.toLowerCase() === 'content-type') {\n          // Remove Content-Type if data is undefined\n          delete requestHeaders[key];\n        } else {\n          // Otherwise add header to the request\n          request.setRequestHeader(key, val);\n        }\n      });\n    }\n\n    // Add withCredentials to request if needed\n    if (!utils.isUndefined(config.withCredentials)) {\n      request.withCredentials = !!config.withCredentials;\n    }\n\n    // Add responseType to request if needed\n    if (config.responseType) {\n      try {\n        request.responseType = config.responseType;\n      } catch (e) {\n        // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n        // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n        if (config.responseType !== 'json') {\n          throw e;\n        }\n      }\n    }\n\n    // Handle progress if needed\n    if (typeof config.onDownloadProgress === 'function') {\n      request.addEventListener('progress', config.onDownloadProgress);\n    }\n\n    // Not all browsers support upload events\n    if (typeof config.onUploadProgress === 'function' &amp;&amp; request.upload) {\n      request.upload.addEventListener('progress', config.onUploadProgress);\n    }\n\n    if (config.cancelToken) {\n      // Handle cancellation\n      config.cancelToken.promise.then(function onCanceled(cancel) {\n        if (!request) {\n          return;\n        }\n\n        request.abort();\n        reject(cancel);\n        // Clean up request\n        request = null;\n      });\n    }\n\n    if (requestData === undefined) {\n      requestData = null;\n    }\n\n    // Send the request\n    request.send(requestData);\n  });\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  var context = new Axios(defaultConfig);\n  var instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context);\n\n  // Copy context to instance\n  utils.extend(instance, context);\n\n  return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n  return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel &amp; CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n  this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n  return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n  if (typeof executor !== 'function') {\n    throw new TypeError('executor must be a function.');\n  }\n\n  var resolvePromise;\n  this.promise = new Promise(function promiseExecutor(resolve) {\n    resolvePromise = resolve;\n  });\n\n  var token = this;\n  executor(function cancel(message) {\n    if (token.reason) {\n      // Cancellation has already been requested\n      return;\n    }\n\n    token.reason = new Cancel(message);\n    resolvePromise(token.reason);\n  });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n  if (this.reason) {\n    throw this.reason;\n  }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n  var cancel;\n  var token = new CancelToken(function executor(c) {\n    cancel = c;\n  });\n  return {\n    token: token,\n    cancel: cancel\n  };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n  return !!(value &amp;&amp; value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n  this.defaults = instanceConfig;\n  this.interceptors = {\n    request: new InterceptorManager(),\n    response: new InterceptorManager()\n  };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n  /*eslint no-param-reassign:0*/\n  // Allow for axios('example/url'[, config]) a la fetch API\n  if (typeof config === 'string') {\n    config = arguments[1] || {};\n    config.url = arguments[0];\n  } else {\n    config = config || {};\n  }\n\n  config = mergeConfig(this.defaults, config);\n\n  // Set config.method\n  if (config.method) {\n    config.method = config.method.toLowerCase();\n  } else if (this.defaults.method) {\n    config.method = this.defaults.method.toLowerCase();\n  } else {\n    config.method = 'get';\n  }\n\n  // Hook up interceptors middleware\n  var chain = [dispatchRequest, undefined];\n  var promise = Promise.resolve(config);\n\n  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n    chain.unshift(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n    chain.push(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  while (chain.length) {\n    promise = promise.then(chain.shift(), chain.shift());\n  }\n\n  return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n  config = mergeConfig(this.defaults, config);\n  return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, config) {\n    return this.request(utils.merge(config || {}, {\n      method: method,\n      url: url\n    }));\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, data, config) {\n    return this.request(utils.merge(config || {}, {\n      method: method,\n      url: url,\n      data: data\n    }));\n  };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n  this.handlers = [];\n}\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 */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n  this.handlers.push({\n    fulfilled: fulfilled,\n    rejected: rejected\n  });\n  return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n  if (this.handlers[id]) {\n    this.handlers[id] = null;\n  }\n};\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 */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n  utils.forEach(this.handlers, function forEachHandler(h) {\n    if (h !== null) {\n      fn(h);\n    }\n  });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n  if (baseURL &amp;&amp; !isAbsoluteURL(requestedURL)) {\n    return combineURLs(baseURL, requestedURL);\n  }\n  return requestedURL;\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n  var error = new Error(message);\n  return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  // Ensure headers exist\n  config.headers = config.headers || {};\n\n  // Transform request data\n  config.data = transformData(\n    config.data,\n    config.headers,\n    config.transformRequest\n  );\n\n  // Flatten headers\n  config.headers = utils.merge(\n    config.headers.common || {},\n    config.headers[config.method] || {},\n    config.headers\n  );\n\n  utils.forEach(\n    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n    function cleanHeaderConfig(method) {\n      delete config.headers[method];\n    }\n  );\n\n  var adapter = config.adapter || defaults.adapter;\n\n  return adapter(config).then(function onAdapterResolution(response) {\n    throwIfCancellationRequested(config);\n\n    // Transform response data\n    response.data = transformData(\n      response.data,\n      response.headers,\n      config.transformResponse\n    );\n\n    return response;\n  }, function onAdapterRejection(reason) {\n    if (!isCancel(reason)) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      if (reason &amp;&amp; reason.response) {\n        reason.response.data = transformData(\n          reason.response.data,\n          reason.response.headers,\n          config.transformResponse\n        );\n      }\n    }\n\n    return Promise.reject(reason);\n  });\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n  error.config = config;\n  if (code) {\n    error.code = code;\n  }\n\n  error.request = request;\n  error.response = response;\n  error.isAxiosError = true;\n\n  error.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: this.config,\n      code: this.code\n    };\n  };\n  return error;\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config2 = config2 || {};\n  var config = {};\n\n  var valueFromConfig2Keys = ['url', 'method', 'params', 'data'];\n  var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy'];\n  var defaultToConfig2Keys = [\n    'baseURL', 'url', 'transformRequest', 'transformResponse', 'paramsSerializer',\n    'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n    'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress',\n    'maxContentLength', 'validateStatus', 'maxRedirects', 'httpAgent',\n    'httpsAgent', 'cancelToken', 'socketPath'\n  ];\n\n  utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {\n    if (typeof config2[prop] !== 'undefined') {\n      config[prop] = config2[prop];\n    }\n  });\n\n  utils.forEach(mergeDeepPropertiesKeys, function mergeDeepProperties(prop) {\n    if (utils.isObject(config2[prop])) {\n      config[prop] = utils.deepMerge(config1[prop], config2[prop]);\n    } else if (typeof config2[prop] !== 'undefined') {\n      config[prop] = config2[prop];\n    } else if (utils.isObject(config1[prop])) {\n      config[prop] = utils.deepMerge(config1[prop]);\n    } else if (typeof config1[prop] !== 'undefined') {\n      config[prop] = config1[prop];\n    }\n  });\n\n  utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {\n    if (typeof config2[prop] !== 'undefined') {\n      config[prop] = config2[prop];\n    } else if (typeof config1[prop] !== 'undefined') {\n      config[prop] = config1[prop];\n    }\n  });\n\n  var axiosKeys = valueFromConfig2Keys\n    .concat(mergeDeepPropertiesKeys)\n    .concat(defaultToConfig2Keys);\n\n  var otherKeys = Object\n    .keys(config2)\n    .filter(function filterAxiosKeys(key) {\n      return axiosKeys.indexOf(key) === -1;\n    });\n\n  utils.forEach(otherKeys, function otherKeysDefaultToConfig2(prop) {\n    if (typeof config2[prop] !== 'undefined') {\n      config[prop] = config2[prop];\n    } else if (typeof config1[prop] !== 'undefined') {\n      config[prop] = config1[prop];\n    }\n  });\n\n  return config;\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n  var validateStatus = response.config.validateStatus;\n  if (!validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(createError(\n      'Request failed with status code ' + response.status,\n      response.config,\n      null,\n      response.request,\n      response\n    ));\n  }\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n  /*eslint no-param-reassign:0*/\n  utils.forEach(fns, function transform(fn) {\n    data = fn(data, headers);\n  });\n\n  return data;\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n  'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n  if (!utils.isUndefined(headers) &amp;&amp; utils.isUndefined(headers['Content-Type'])) {\n    headers['Content-Type'] = value;\n  }\n}\n\nfunction getDefaultAdapter() {\n  var adapter;\n  if (typeof XMLHttpRequest !== 'undefined') {\n    // For browsers use XHR adapter\n    adapter = require('./adapters/xhr');\n  } else if (typeof process !== 'undefined' &amp;&amp; Object.prototype.toString.call(process) === '[object process]') {\n    // For node use HTTP adapter\n    adapter = require('./adapters/http');\n  }\n  return adapter;\n}\n\nvar defaults = {\n  adapter: getDefaultAdapter(),\n\n  transformRequest: [function transformRequest(data, headers) {\n    normalizeHeaderName(headers, 'Accept');\n    normalizeHeaderName(headers, 'Content-Type');\n    if (utils.isFormData(data) ||\n      utils.isArrayBuffer(data) ||\n      utils.isBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n      return data.toString();\n    }\n    if (utils.isObject(data)) {\n      setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n      return JSON.stringify(data);\n    }\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    /*eslint no-param-reassign:0*/\n    if (typeof data === 'string') {\n      try {\n        data = JSON.parse(data);\n      } catch (e) { /* Ignore */ }\n    }\n    return data;\n  }],\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\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n\n  validateStatus: function validateStatus(status) {\n    return status &gt;= 200 &amp;&amp; status &lt; 300;\n  }\n};\n\ndefaults.headers = {\n  common: {\n    'Accept': 'application/json, text/plain, */*'\n  }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n  defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n  return function wrap() {\n    var args = new Array(arguments.length);\n    for (var i = 0; i &lt; args.length; i++) {\n      args[i] = arguments[i];\n    }\n    return fn.apply(thisArg, args);\n  };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%40/gi, '@').\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+').\n    replace(/%5B/gi, '[').\n    replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n  /*eslint no-param-reassign:0*/\n  if (!params) {\n    return url;\n  }\n\n  var serializedParams;\n  if (paramsSerializer) {\n    serializedParams = paramsSerializer(params);\n  } else if (utils.isURLSearchParams(params)) {\n    serializedParams = params.toString();\n  } else {\n    var parts = [];\n\n    utils.forEach(params, function serialize(val, key) {\n      if (val === null || typeof val === 'undefined') {\n        return;\n      }\n\n      if (utils.isArray(val)) {\n        key = key + '[]';\n      } else {\n        val = [val];\n      }\n\n      utils.forEach(val, function parseValue(v) {\n        if (utils.isDate(v)) {\n          v = v.toISOString();\n        } else if (utils.isObject(v)) {\n          v = JSON.stringify(v);\n        }\n        parts.push(encode(key) + '=' + encode(v));\n      });\n    });\n\n    serializedParams = parts.join('&amp;');\n  }\n\n  if (serializedParams) {\n    var hashmarkIndex = url.indexOf('#');\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n\n    url += (url.indexOf('?') === -1 ? '?' : '&amp;') + serializedParams;\n  }\n\n  return url;\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs support document.cookie\n    (function standardBrowserEnv() {\n      return {\n        write: function write(name, value, expires, path, domain, secure) {\n          var cookie = [];\n          cookie.push(name + '=' + encodeURIComponent(value));\n\n          if (utils.isNumber(expires)) {\n            cookie.push('expires=' + new Date(expires).toGMTString());\n          }\n\n          if (utils.isString(path)) {\n            cookie.push('path=' + path);\n          }\n\n          if (utils.isString(domain)) {\n            cookie.push('domain=' + domain);\n          }\n\n          if (secure === true) {\n            cookie.push('secure');\n          }\n\n          document.cookie = cookie.join('; ');\n        },\n\n        read: function read(name) {\n          var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n          return (match ? decodeURIComponent(match[3]) : null);\n        },\n\n        remove: function remove(name) {\n          this.write(name, '', Date.now() - 86400000);\n        }\n      };\n    })() :\n\n  // Non standard browser env (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return {\n        write: function write() {},\n        read: function read() { return null; },\n        remove: function remove() {}\n      };\n    })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"&lt;scheme&gt;://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\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 standardBrowserEnv() {\n      var msie = /(msie|trident)/i.test(navigator.userAgent);\n      var urlParsingNode = document.createElement('a');\n      var originURL;\n\n      /**\n    * Parse a URL to discover it's components\n    *\n    * @param {String} url The URL to be parsed\n    * @returns {Object}\n    */\n      function resolveURL(url) {\n        var href = url;\n\n        if (msie) {\n        // IE needs attribute set twice to normalize properties\n          urlParsingNode.setAttribute('href', href);\n          href = urlParsingNode.href;\n        }\n\n        urlParsingNode.setAttribute('href', href);\n\n        // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n        return {\n          href: urlParsingNode.href,\n          protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n          host: urlParsingNode.host,\n          search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n          hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n          hostname: urlParsingNode.hostname,\n          port: urlParsingNode.port,\n          pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n            urlParsingNode.pathname :\n            '/' + urlParsingNode.pathname\n        };\n      }\n\n      originURL = resolveURL(window.location.href);\n\n      /**\n    * Determine if a URL shares the same origin as the current location\n    *\n    * @param {String} requestURL The URL to test\n    * @returns {boolean} True if URL shares the same origin, otherwise false\n    */\n      return function isURLSameOrigin(requestURL) {\n        var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n        return (parsed.protocol === originURL.protocol &amp;&amp;\n            parsed.host === originURL.host);\n      };\n    })() :\n\n  // Non standard browser envs (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return function isURLSameOrigin() {\n        return true;\n      };\n    })()\n);\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n  utils.forEach(headers, function processHeader(value, name) {\n    if (name !== normalizedName &amp;&amp; name.toUpperCase() === normalizedName.toUpperCase()) {\n      headers[normalizedName] = value;\n      delete headers[name];\n    }\n  });\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n  'age', 'authorization', 'content-length', 'content-type', 'etag',\n  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n  'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n  var parsed = {};\n  var key;\n  var val;\n  var i;\n\n  if (!headers) { return parsed; }\n\n  utils.forEach(headers.split('\\n'), function parser(line) {\n    i = line.indexOf(':');\n    key = utils.trim(line.substr(0, i)).toLowerCase();\n    val = utils.trim(line.substr(i + 1));\n\n    if (key) {\n      if (parsed[key] &amp;&amp; ignoreDuplicateOf.indexOf(key) &gt;= 0) {\n        return;\n      }\n      if (key === 'set-cookie') {\n        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n      } else {\n        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n      }\n    }\n  });\n\n  return parsed;\n};\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  var args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n  return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n  return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n  return val !== null &amp;&amp; !isUndefined(val) &amp;&amp; val.constructor !== null &amp;&amp; !isUndefined(val.constructor)\n    &amp;&amp; typeof val.constructor.isBuffer === 'function' &amp;&amp; val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n  return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n  return (typeof FormData !== 'undefined') &amp;&amp; (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  var result;\n  if ((typeof ArrayBuffer !== 'undefined') &amp;&amp; (ArrayBuffer.isView)) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = (val) &amp;&amp; (val.buffer) &amp;&amp; (val.buffer instanceof ArrayBuffer);\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n  return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n  return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n  return val !== null &amp;&amp; typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n  return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n  return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n  return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n  return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n  return isObject(val) &amp;&amp; isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n  return typeof URLSearchParams !== 'undefined' &amp;&amp; val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n  return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -&gt; undefined\n *  typeof document -&gt; undefined\n *\n * react-native:\n *  navigator.product -&gt; 'ReactNative'\n * nativescript\n *  navigator.product -&gt; 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n  if (typeof navigator !== 'undefined' &amp;&amp; (navigator.product === 'ReactNative' ||\n                                           navigator.product === 'NativeScript' ||\n                                           navigator.product === 'NS')) {\n    return false;\n  }\n  return (\n    typeof window !== 'undefined' &amp;&amp;\n    typeof document !== 'undefined'\n  );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (var i = 0, l = obj.length; i &lt; l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Iterate over object keys\n    for (var key in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\n        fn.call(null, obj[key], key, obj);\n      }\n    }\n  }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  var result = {};\n  function assignValue(val, key) {\n    if (typeof result[key] === 'object' &amp;&amp; typeof val === 'object') {\n      result[key] = merge(result[key], val);\n    } else {\n      result[key] = val;\n    }\n  }\n\n  for (var i = 0, l = arguments.length; i &lt; l; i++) {\n    forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Function equal to merge with the difference being that no reference\n * to original objects is kept.\n *\n * @see merge\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction deepMerge(/* obj1, obj2, obj3, ... */) {\n  var result = {};\n  function assignValue(val, key) {\n    if (typeof result[key] === 'object' &amp;&amp; typeof val === 'object') {\n      result[key] = deepMerge(result[key], val);\n    } else if (typeof val === 'object') {\n      result[key] = deepMerge({}, val);\n    } else {\n      result[key] = val;\n    }\n  }\n\n  for (var i = 0, l = arguments.length; i &lt; l; i++) {\n    forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n  forEach(b, function assignValue(val, key) {\n    if (thisArg &amp;&amp; typeof val === 'function') {\n      a[key] = bind(val, thisArg);\n    } else {\n      a[key] = val;\n    }\n  });\n  return a;\n}\n\nmodule.exports = {\n  isArray: isArray,\n  isArrayBuffer: isArrayBuffer,\n  isBuffer: isBuffer,\n  isFormData: isFormData,\n  isArrayBufferView: isArrayBufferView,\n  isString: isString,\n  isNumber: isNumber,\n  isObject: isObject,\n  isUndefined: isUndefined,\n  isDate: isDate,\n  isFile: isFile,\n  isBlob: isBlob,\n  isFunction: isFunction,\n  isStream: isStream,\n  isURLSearchParams: isURLSearchParams,\n  isStandardBrowserEnv: isStandardBrowserEnv,\n  forEach: forEach,\n  merge: merge,\n  deepMerge: deepMerge,\n  extend: extend,\n  trim: trim\n};\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i &lt; 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s &lt; arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i &lt; symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) &amp;&amp; setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) &amp;&amp; clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex &lt; len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length &gt; 1) {\n        for (var i = 1; i &lt; arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 &amp;&amp; !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\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';\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n  var loggedTypeFailures = {};\n  var has = require('./lib/has');\n\n  printWarning = function(text) {\n    var message = 'Warning: ' + text;\n    if (typeof console !== 'undefined') {\n      console.error(message);\n    }\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      throw new Error(message);\n    } catch (x) { /**/ }\n  };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n  if (process.env.NODE_ENV !== 'production') {\n    for (var typeSpecName in typeSpecs) {\n      if (has(typeSpecs, typeSpecName)) {\n        var error;\n        // Prop type validation may throw. In case they do, we don't want to\n        // fail the render phase where it didn't fail before. So we log it.\n        // After these have been cleaned up, we'll let them throw.\n        try {\n          // This is intentionally an invariant that gets caught. It's the same\n          // behavior as without this statement except with a better message.\n          if (typeof typeSpecs[typeSpecName] !== 'function') {\n            var err = Error(\n              (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n              'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +\n              'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'\n            );\n            err.name = 'Invariant Violation';\n            throw err;\n          }\n          error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n        } catch (ex) {\n          error = ex;\n        }\n        if (error &amp;&amp; !(error instanceof Error)) {\n          printWarning(\n            (componentName || 'React class') + ': type specification of ' +\n            location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n            'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n            'You may have forgotten to pass an argument to the type checker ' +\n            'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n            'shape all require an argument).'\n          );\n        }\n        if (error instanceof Error &amp;&amp; !(error.message in loggedTypeFailures)) {\n          // Only monitor this failure once because there tends to be a lot of the\n          // same error.\n          loggedTypeFailures[error.message] = true;\n\n          var stack = getStack ? getStack() : '';\n\n          printWarning(\n            'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n          );\n        }\n      }\n    }\n  }\n}\n\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\ncheckPropTypes.resetWarningCache = function() {\n  if (process.env.NODE_ENV !== 'production') {\n    loggedTypeFailures = {};\n  }\n}\n\nmodule.exports = checkPropTypes;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\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';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bigint: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\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';\n\nvar ReactIs = require('react-is');\nvar assign = require('object-assign');\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\nvar has = require('./lib/has');\nvar checkPropTypes = require('./checkPropTypes');\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n  printWarning = function(text) {\n    var message = 'Warning: ' + text;\n    if (typeof console !== 'undefined') {\n      console.error(message);\n    }\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      throw new Error(message);\n    } catch (x) {}\n  };\n}\n\nfunction emptyFunctionThatReturnsNull() {\n  return null;\n}\n\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\n  /* global Symbol */\n  var ITERATOR_SYMBOL = typeof Symbol === 'function' &amp;&amp; Symbol.iterator;\n  var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n  /**\n   * Returns the iterator method function contained on the iterable object.\n   *\n   * Be sure to invoke the function with the iterable as context:\n   *\n   *     var iteratorFn = getIteratorFn(myIterable);\n   *     if (iteratorFn) {\n   *       var iterator = iteratorFn.call(myIterable);\n   *       ...\n   *     }\n   *\n   * @param {?object} maybeIterable\n   * @return {?function}\n   */\n  function getIteratorFn(maybeIterable) {\n    var iteratorFn = maybeIterable &amp;&amp; (ITERATOR_SYMBOL &amp;&amp; maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n    if (typeof iteratorFn === 'function') {\n      return iteratorFn;\n    }\n  }\n\n  /**\n   * Collection of methods that allow declaration and validation of props that are\n   * supplied to React components. Example usage:\n   *\n   *   var Props = require('ReactPropTypes');\n   *   var MyArticle = React.createClass({\n   *     propTypes: {\n   *       // An optional string prop named \"description\".\n   *       description: Props.string,\n   *\n   *       // A required enum prop named \"category\".\n   *       category: Props.oneOf(['News','Photos']).isRequired,\n   *\n   *       // A prop named \"dialog\" that requires an instance of Dialog.\n   *       dialog: Props.instanceOf(Dialog).isRequired\n   *     },\n   *     render: function() { ... }\n   *   });\n   *\n   * A more formal specification of how these methods are used:\n   *\n   *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n   *   decl := ReactPropTypes.{type}(.isRequired)?\n   *\n   * Each and every declaration produces a function with the same signature. This\n   * allows the creation of custom validation functions. For example:\n   *\n   *  var MyLink = React.createClass({\n   *    propTypes: {\n   *      // An optional string or URI prop named \"href\".\n   *      href: function(props, propName, componentName) {\n   *        var propValue = props[propName];\n   *        if (propValue != null &amp;&amp; typeof propValue !== 'string' &amp;&amp;\n   *            !(propValue instanceof URI)) {\n   *          return new Error(\n   *            'Expected a string or an URI for ' + propName + ' in ' +\n   *            componentName\n   *          );\n   *        }\n   *      }\n   *    },\n   *    render: function() {...}\n   *  });\n   *\n   * @internal\n   */\n\n  var ANONYMOUS = '&lt;&lt;anonymous&gt;&gt;';\n\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n  var ReactPropTypes = {\n    array: createPrimitiveTypeChecker('array'),\n    bigint: createPrimitiveTypeChecker('bigint'),\n    bool: createPrimitiveTypeChecker('boolean'),\n    func: createPrimitiveTypeChecker('function'),\n    number: createPrimitiveTypeChecker('number'),\n    object: createPrimitiveTypeChecker('object'),\n    string: createPrimitiveTypeChecker('string'),\n    symbol: createPrimitiveTypeChecker('symbol'),\n\n    any: createAnyTypeChecker(),\n    arrayOf: createArrayOfTypeChecker,\n    element: createElementTypeChecker(),\n    elementType: createElementTypeTypeChecker(),\n    instanceOf: createInstanceTypeChecker,\n    node: createNodeChecker(),\n    objectOf: createObjectOfTypeChecker,\n    oneOf: createEnumTypeChecker,\n    oneOfType: createUnionTypeChecker,\n    shape: createShapeTypeChecker,\n    exact: createStrictShapeTypeChecker,\n  };\n\n  /**\n   * inlined Object.is polyfill to avoid requiring consumers ship their own\n   * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n   */\n  /*eslint-disable no-self-compare*/\n  function is(x, y) {\n    // SameValue algorithm\n    if (x === y) {\n      // Steps 1-5, 7-10\n      // Steps 6.b-6.e: +0 != -0\n      return x !== 0 || 1 / x === 1 / y;\n    } else {\n      // Step 6.a: NaN == NaN\n      return x !== x &amp;&amp; y !== y;\n    }\n  }\n  /*eslint-enable no-self-compare*/\n\n  /**\n   * We use an Error-like object for backward compatibility as people may call\n   * PropTypes directly and inspect their output. However, we don't use real\n   * Errors anymore. We don't inspect their stack anyway, and creating them\n   * is prohibitively expensive if they are created too often, such as what\n   * happens in oneOfType() for any type before the one that matched.\n   */\n  function PropTypeError(message, data) {\n    this.message = message;\n    this.data = data &amp;&amp; typeof data === 'object' ? data: {};\n    this.stack = '';\n  }\n  // Make `instanceof Error` still work for returned errors.\n  PropTypeError.prototype = Error.prototype;\n\n  function createChainableTypeChecker(validate) {\n    if (process.env.NODE_ENV !== 'production') {\n      var manualPropTypeCallCache = {};\n      var manualPropTypeWarningCount = 0;\n    }\n    function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n      componentName = componentName || ANONYMOUS;\n      propFullName = propFullName || propName;\n\n      if (secret !== ReactPropTypesSecret) {\n        if (throwOnDirectAccess) {\n          // New behavior only for users of `prop-types` package\n          var err = new Error(\n            'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n            'Use `PropTypes.checkPropTypes()` to call them. ' +\n            'Read more at http://fb.me/use-check-prop-types'\n          );\n          err.name = 'Invariant Violation';\n          throw err;\n        } else if (process.env.NODE_ENV !== 'production' &amp;&amp; typeof console !== 'undefined') {\n          // Old behavior for people using React.PropTypes\n          var cacheKey = componentName + ':' + propName;\n          if (\n            !manualPropTypeCallCache[cacheKey] &amp;&amp;\n            // Avoid spamming the console because they are often not actionable except for lib authors\n            manualPropTypeWarningCount &lt; 3\n          ) {\n            printWarning(\n              'You are manually calling a React.PropTypes validation ' +\n              'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +\n              'and will throw in the standalone `prop-types` package. ' +\n              'You may be seeing this warning due to a third-party PropTypes ' +\n              'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\n            );\n            manualPropTypeCallCache[cacheKey] = true;\n            manualPropTypeWarningCount++;\n          }\n        }\n      }\n      if (props[propName] == null) {\n        if (isRequired) {\n          if (props[propName] === null) {\n            return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n          }\n          return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n        }\n        return null;\n      } else {\n        return validate(props, propName, componentName, location, propFullName);\n      }\n    }\n\n    var chainedCheckType = checkType.bind(null, false);\n    chainedCheckType.isRequired = checkType.bind(null, true);\n\n    return chainedCheckType;\n  }\n\n  function createPrimitiveTypeChecker(expectedType) {\n    function validate(props, propName, componentName, location, propFullName, secret) {\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== expectedType) {\n        // `propValue` being instance of, say, date/regexp, pass the 'object'\n        // check, but we can offer a more precise error message here rather than\n        // 'of type `object`'.\n        var preciseType = getPreciseType(propValue);\n\n        return new PropTypeError(\n          'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),\n          {expectedType: expectedType}\n        );\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createAnyTypeChecker() {\n    return createChainableTypeChecker(emptyFunctionThatReturnsNull);\n  }\n\n  function createArrayOfTypeChecker(typeChecker) {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (typeof typeChecker !== 'function') {\n        return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n      }\n      var propValue = props[propName];\n      if (!Array.isArray(propValue)) {\n        var propType = getPropType(propValue);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n      }\n      for (var i = 0; i &lt; propValue.length; i++) {\n        var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n        if (error instanceof Error) {\n          return error;\n        }\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createElementTypeChecker() {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      if (!isValidElement(propValue)) {\n        var propType = getPropType(propValue);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createElementTypeTypeChecker() {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      if (!ReactIs.isValidElementType(propValue)) {\n        var propType = getPropType(propValue);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createInstanceTypeChecker(expectedClass) {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (!(props[propName] instanceof expectedClass)) {\n        var expectedClassName = expectedClass.name || ANONYMOUS;\n        var actualClassName = getClassName(props[propName]);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createEnumTypeChecker(expectedValues) {\n    if (!Array.isArray(expectedValues)) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (arguments.length &gt; 1) {\n          printWarning(\n            'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +\n            'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'\n          );\n        } else {\n          printWarning('Invalid argument supplied to oneOf, expected an array.');\n        }\n      }\n      return emptyFunctionThatReturnsNull;\n    }\n\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      for (var i = 0; i &lt; expectedValues.length; i++) {\n        if (is(propValue, expectedValues[i])) {\n          return null;\n        }\n      }\n\n      var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {\n        var type = getPreciseType(value);\n        if (type === 'symbol') {\n          return String(value);\n        }\n        return value;\n      });\n      return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createObjectOfTypeChecker(typeChecker) {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (typeof typeChecker !== 'function') {\n        return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n      }\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== 'object') {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n      }\n      for (var key in propValue) {\n        if (has(propValue, key)) {\n          var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n          if (error instanceof Error) {\n            return error;\n          }\n        }\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createUnionTypeChecker(arrayOfTypeCheckers) {\n    if (!Array.isArray(arrayOfTypeCheckers)) {\n      process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n      return emptyFunctionThatReturnsNull;\n    }\n\n    for (var i = 0; i &lt; arrayOfTypeCheckers.length; i++) {\n      var checker = arrayOfTypeCheckers[i];\n      if (typeof checker !== 'function') {\n        printWarning(\n          'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n          'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\n        );\n        return emptyFunctionThatReturnsNull;\n      }\n    }\n\n    function validate(props, propName, componentName, location, propFullName) {\n      var expectedTypes = [];\n      for (var i = 0; i &lt; arrayOfTypeCheckers.length; i++) {\n        var checker = arrayOfTypeCheckers[i];\n        var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret);\n        if (checkerResult == null) {\n          return null;\n        }\n        if (checkerResult.data &amp;&amp; has(checkerResult.data, 'expectedType')) {\n          expectedTypes.push(checkerResult.data.expectedType);\n        }\n      }\n      var expectedTypesMessage = (expectedTypes.length &gt; 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';\n      return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createNodeChecker() {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (!isNode(props[propName])) {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function invalidValidatorError(componentName, location, propFullName, key, type) {\n    return new PropTypeError(\n      (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +\n      'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'\n    );\n  }\n\n  function createShapeTypeChecker(shapeTypes) {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== 'object') {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n      }\n      for (var key in shapeTypes) {\n        var checker = shapeTypes[key];\n        if (typeof checker !== 'function') {\n          return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n        }\n        var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n        if (error) {\n          return error;\n        }\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createStrictShapeTypeChecker(shapeTypes) {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== 'object') {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n      }\n      // We need to check all keys in case some are required but missing from props.\n      var allKeys = assign({}, props[propName], shapeTypes);\n      for (var key in allKeys) {\n        var checker = shapeTypes[key];\n        if (has(shapeTypes, key) &amp;&amp; typeof checker !== 'function') {\n          return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n        }\n        if (!checker) {\n          return new PropTypeError(\n            'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n            '\\nBad object: ' + JSON.stringify(props[propName], null, '  ') +\n            '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, '  ')\n          );\n        }\n        var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n        if (error) {\n          return error;\n        }\n      }\n      return null;\n    }\n\n    return createChainableTypeChecker(validate);\n  }\n\n  function isNode(propValue) {\n    switch (typeof propValue) {\n      case 'number':\n      case 'string':\n      case 'undefined':\n        return true;\n      case 'boolean':\n        return !propValue;\n      case 'object':\n        if (Array.isArray(propValue)) {\n          return propValue.every(isNode);\n        }\n        if (propValue === null || isValidElement(propValue)) {\n          return true;\n        }\n\n        var iteratorFn = getIteratorFn(propValue);\n        if (iteratorFn) {\n          var iterator = iteratorFn.call(propValue);\n          var step;\n          if (iteratorFn !== propValue.entries) {\n            while (!(step = iterator.next()).done) {\n              if (!isNode(step.value)) {\n                return false;\n              }\n            }\n          } else {\n            // Iterator will provide entry [k,v] tuples rather than values.\n            while (!(step = iterator.next()).done) {\n              var entry = step.value;\n              if (entry) {\n                if (!isNode(entry[1])) {\n                  return false;\n                }\n              }\n            }\n          }\n        } else {\n          return false;\n        }\n\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  function isSymbol(propType, propValue) {\n    // Native Symbol.\n    if (propType === 'symbol') {\n      return true;\n    }\n\n    // falsy value can't be a Symbol\n    if (!propValue) {\n      return false;\n    }\n\n    // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n    if (propValue['@@toStringTag'] === 'Symbol') {\n      return true;\n    }\n\n    // Fallback for non-spec compliant Symbols which are polyfilled.\n    if (typeof Symbol === 'function' &amp;&amp; propValue instanceof Symbol) {\n      return true;\n    }\n\n    return false;\n  }\n\n  // Equivalent of `typeof` but with special handling for array and regexp.\n  function getPropType(propValue) {\n    var propType = typeof propValue;\n    if (Array.isArray(propValue)) {\n      return 'array';\n    }\n    if (propValue instanceof RegExp) {\n      // Old webkits (at least until Android 4.0) return 'function' rather than\n      // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n      // passes PropTypes.object.\n      return 'object';\n    }\n    if (isSymbol(propType, propValue)) {\n      return 'symbol';\n    }\n    return propType;\n  }\n\n  // This handles more types than `getPropType`. Only used for error messages.\n  // See `createPrimitiveTypeChecker`.\n  function getPreciseType(propValue) {\n    if (typeof propValue === 'undefined' || propValue === null) {\n      return '' + propValue;\n    }\n    var propType = getPropType(propValue);\n    if (propType === 'object') {\n      if (propValue instanceof Date) {\n        return 'date';\n      } else if (propValue instanceof RegExp) {\n        return 'regexp';\n      }\n    }\n    return propType;\n  }\n\n  // Returns a string that is postfixed to a warning about an invalid type.\n  // For example, \"undefined\" or \"of type array\"\n  function getPostfixForTypeWarning(value) {\n    var type = getPreciseType(value);\n    switch (type) {\n      case 'array':\n      case 'object':\n        return 'an ' + type;\n      case 'boolean':\n      case 'date':\n      case 'regexp':\n        return 'a ' + type;\n      default:\n        return type;\n    }\n  }\n\n  // Returns class name of the object, if any.\n  function getClassName(propValue) {\n    if (!propValue.constructor || !propValue.constructor.name) {\n      return ANONYMOUS;\n    }\n    return propValue.constructor.name;\n  }\n\n  ReactPropTypes.checkPropTypes = checkPropTypes;\n  ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\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\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\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';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","module.exports = Function.call.bind(Object.prototype.hasOwnProperty);\n","/** @license React v16.13.1\n * react-is.development.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';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n  (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' &amp;&amp; Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n  return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n  type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' &amp;&amp; type !== null &amp;&amp; (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n  if (typeof object === 'object' &amp;&amp; object !== null) {\n    var $$typeof = object.$$typeof;\n\n    switch ($$typeof) {\n      case REACT_ELEMENT_TYPE:\n        var type = object.type;\n\n        switch (type) {\n          case REACT_ASYNC_MODE_TYPE:\n          case REACT_CONCURRENT_MODE_TYPE:\n          case REACT_FRAGMENT_TYPE:\n          case REACT_PROFILER_TYPE:\n          case REACT_STRICT_MODE_TYPE:\n          case REACT_SUSPENSE_TYPE:\n            return type;\n\n          default:\n            var $$typeofType = type &amp;&amp; type.$$typeof;\n\n            switch ($$typeofType) {\n              case REACT_CONTEXT_TYPE:\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_LAZY_TYPE:\n              case REACT_MEMO_TYPE:\n              case REACT_PROVIDER_TYPE:\n                return $$typeofType;\n\n              default:\n                return $$typeof;\n            }\n\n        }\n\n      case REACT_PORTAL_TYPE:\n        return $$typeof;\n    }\n  }\n\n  return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n  {\n    if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n      hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n      console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n    }\n  }\n\n  return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n  return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n  return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n  return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n  return typeof object === 'object' &amp;&amp; object !== null &amp;&amp; object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n  return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n  return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n  return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n  return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n  return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n  return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n  return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n  return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n  })();\n}\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&amp;&amp;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&amp;&amp;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&amp;&amp;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&amp;&amp;null!==a&amp;&amp;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&amp;&amp;null!==a&amp;&amp;(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","/**\n * Swiper 5.3.1\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * http://swiperjs.com\n *\n * Copyright 2014-2020 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: February 8, 2020\n */\n\n(function (global, factory) {\n  typeof exports === 'object' &amp;&amp; typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' &amp;&amp; define.amd ? define(factory) :\n  (global = global || self, global.Swiper = factory());\n}(this, function () { 'use strict';\n\n  /**\n   * SSR Window 1.0.1\n   * Better handling for window object in SSR environment\n   * https://github.com/nolimits4web/ssr-window\n   *\n   * Copyright 2018, Vladimir Kharlampidi\n   *\n   * Licensed under MIT\n   *\n   * Released on: July 18, 2018\n   */\n  var doc = (typeof document === 'undefined') ? {\n    body: {},\n    addEventListener: function addEventListener() {},\n    removeEventListener: function removeEventListener() {},\n    activeElement: {\n      blur: function blur() {},\n      nodeName: '',\n    },\n    querySelector: function querySelector() {\n      return null;\n    },\n    querySelectorAll: function querySelectorAll() {\n      return [];\n    },\n    getElementById: function getElementById() {\n      return null;\n    },\n    createEvent: function createEvent() {\n      return {\n        initEvent: function initEvent() {},\n      };\n    },\n    createElement: function createElement() {\n      return {\n        children: [],\n        childNodes: [],\n        style: {},\n        setAttribute: function setAttribute() {},\n        getElementsByTagName: function getElementsByTagName() {\n          return [];\n        },\n      };\n    },\n    location: { hash: '' },\n  } : document; // eslint-disable-line\n\n  var win = (typeof window === 'undefined') ? {\n    document: doc,\n    navigator: {\n      userAgent: '',\n    },\n    location: {},\n    history: {},\n    CustomEvent: function CustomEvent() {\n      return this;\n    },\n    addEventListener: function addEventListener() {},\n    removeEventListener: function removeEventListener() {},\n    getComputedStyle: function getComputedStyle() {\n      return {\n        getPropertyValue: function getPropertyValue() {\n          return '';\n        },\n      };\n    },\n    Image: function Image() {},\n    Date: function Date() {},\n    screen: {},\n    setTimeout: function setTimeout() {},\n    clearTimeout: function clearTimeout() {},\n  } : window; // eslint-disable-line\n\n  /**\n   * Dom7 2.1.3\n   * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n   * http://framework7.io/docs/dom.html\n   *\n   * Copyright 2019, Vladimir Kharlampidi\n   * The iDangero.us\n   * http://www.idangero.us/\n   *\n   * Licensed under MIT\n   *\n   * Released on: February 11, 2019\n   */\n\n  var Dom7 = function Dom7(arr) {\n    var self = this;\n    // Create array-like object\n    for (var i = 0; i &lt; arr.length; i += 1) {\n      self[i] = arr[i];\n    }\n    self.length = arr.length;\n    // Return collection with methods\n    return this;\n  };\n\n  function $(selector, context) {\n    var arr = [];\n    var i = 0;\n    if (selector &amp;&amp; !context) {\n      if (selector instanceof Dom7) {\n        return selector;\n      }\n    }\n    if (selector) {\n        // String\n      if (typeof selector === 'string') {\n        var els;\n        var tempParent;\n        var html = selector.trim();\n        if (html.indexOf('&lt;') &gt;= 0 &amp;&amp; html.indexOf('&gt;') &gt;= 0) {\n          var toCreate = 'div';\n          if (html.indexOf('&lt;li') === 0) { toCreate = 'ul'; }\n          if (html.indexOf('&lt;tr') === 0) { toCreate = 'tbody'; }\n          if (html.indexOf('&lt;td') === 0 || html.indexOf('&lt;th') === 0) { toCreate = 'tr'; }\n          if (html.indexOf('&lt;tbody') === 0) { toCreate = 'table'; }\n          if (html.indexOf('&lt;option') === 0) { toCreate = 'select'; }\n          tempParent = doc.createElement(toCreate);\n          tempParent.innerHTML = html;\n          for (i = 0; i &lt; tempParent.childNodes.length; i += 1) {\n            arr.push(tempParent.childNodes[i]);\n          }\n        } else {\n          if (!context &amp;&amp; selector[0] === '#' &amp;&amp; !selector.match(/[ .&lt;&gt;:~]/)) {\n            // Pure ID selector\n            els = [doc.getElementById(selector.trim().split('#')[1])];\n          } else {\n            // Other selectors\n            els = (context || doc).querySelectorAll(selector.trim());\n          }\n          for (i = 0; i &lt; els.length; i += 1) {\n            if (els[i]) { arr.push(els[i]); }\n          }\n        }\n      } else if (selector.nodeType || selector === win || selector === doc) {\n        // Node/element\n        arr.push(selector);\n      } else if (selector.length &gt; 0 &amp;&amp; selector[0].nodeType) {\n        // Array of elements or instance of Dom\n        for (i = 0; i &lt; selector.length; i += 1) {\n          arr.push(selector[i]);\n        }\n      }\n    }\n    return new Dom7(arr);\n  }\n\n  $.fn = Dom7.prototype;\n  $.Class = Dom7;\n  $.Dom7 = Dom7;\n\n  function unique(arr) {\n    var uniqueArray = [];\n    for (var i = 0; i &lt; arr.length; i += 1) {\n      if (uniqueArray.indexOf(arr[i]) === -1) { uniqueArray.push(arr[i]); }\n    }\n    return uniqueArray;\n  }\n\n  // Classes and attributes\n  function addClass(className) {\n    if (typeof className === 'undefined') {\n      return this;\n    }\n    var classes = className.split(' ');\n    for (var i = 0; i &lt; classes.length; i += 1) {\n      for (var j = 0; j &lt; this.length; j += 1) {\n        if (typeof this[j] !== 'undefined' &amp;&amp; typeof this[j].classList !== 'undefined') { this[j].classList.add(classes[i]); }\n      }\n    }\n    return this;\n  }\n  function removeClass(className) {\n    var classes = className.split(' ');\n    for (var i = 0; i &lt; classes.length; i += 1) {\n      for (var j = 0; j &lt; this.length; j += 1) {\n        if (typeof this[j] !== 'undefined' &amp;&amp; typeof this[j].classList !== 'undefined') { this[j].classList.remove(classes[i]); }\n      }\n    }\n    return this;\n  }\n  function hasClass(className) {\n    if (!this[0]) { return false; }\n    return this[0].classList.contains(className);\n  }\n  function toggleClass(className) {\n    var classes = className.split(' ');\n    for (var i = 0; i &lt; classes.length; i += 1) {\n      for (var j = 0; j &lt; this.length; j += 1) {\n        if (typeof this[j] !== 'undefined' &amp;&amp; typeof this[j].classList !== 'undefined') { this[j].classList.toggle(classes[i]); }\n      }\n    }\n    return this;\n  }\n  function attr(attrs, value) {\n    var arguments$1 = arguments;\n\n    if (arguments.length === 1 &amp;&amp; typeof attrs === 'string') {\n      // Get attr\n      if (this[0]) { return this[0].getAttribute(attrs); }\n      return undefined;\n    }\n\n    // Set attrs\n    for (var i = 0; i &lt; this.length; i += 1) {\n      if (arguments$1.length === 2) {\n        // String\n        this[i].setAttribute(attrs, value);\n      } else {\n        // Object\n        // eslint-disable-next-line\n        for (var attrName in attrs) {\n          this[i][attrName] = attrs[attrName];\n          this[i].setAttribute(attrName, attrs[attrName]);\n        }\n      }\n    }\n    return this;\n  }\n  // eslint-disable-next-line\n  function removeAttr(attr) {\n    for (var i = 0; i &lt; this.length; i += 1) {\n      this[i].removeAttribute(attr);\n    }\n    return this;\n  }\n  function data(key, value) {\n    var el;\n    if (typeof value === 'undefined') {\n      el = this[0];\n      // Get value\n      if (el) {\n        if (el.dom7ElementDataStorage &amp;&amp; (key in el.dom7ElementDataStorage)) {\n          return el.dom7ElementDataStorage[key];\n        }\n\n        var dataKey = el.getAttribute((\"data-\" + key));\n        if (dataKey) {\n          return dataKey;\n        }\n        return undefined;\n      }\n      return undefined;\n    }\n\n    // Set value\n    for (var i = 0; i &lt; this.length; i += 1) {\n      el = this[i];\n      if (!el.dom7ElementDataStorage) { el.dom7ElementDataStorage = {}; }\n      el.dom7ElementDataStorage[key] = value;\n    }\n    return this;\n  }\n  // Transforms\n  // eslint-disable-next-line\n  function transform(transform) {\n    for (var i = 0; i &lt; this.length; i += 1) {\n      var elStyle = this[i].style;\n      elStyle.webkitTransform = transform;\n      elStyle.transform = transform;\n    }\n    return this;\n  }\n  function transition(duration) {\n    if (typeof duration !== 'string') {\n      duration = duration + \"ms\"; // eslint-disable-line\n    }\n    for (var i = 0; i &lt; this.length; i += 1) {\n      var elStyle = this[i].style;\n      elStyle.webkitTransitionDuration = duration;\n      elStyle.transitionDuration = duration;\n    }\n    return this;\n  }\n  // Events\n  function on() {\n    var assign;\n\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n    var eventType = args[0];\n    var targetSelector = args[1];\n    var listener = args[2];\n    var capture = args[3];\n    if (typeof args[1] === 'function') {\n      (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]);\n      targetSelector = undefined;\n    }\n    if (!capture) { capture = false; }\n\n    function handleLiveEvent(e) {\n      var target = e.target;\n      if (!target) { return; }\n      var eventData = e.target.dom7EventData || [];\n      if (eventData.indexOf(e) &lt; 0) {\n        eventData.unshift(e);\n      }\n      if ($(target).is(targetSelector)) { listener.apply(target, eventData); }\n      else {\n        var parents = $(target).parents(); // eslint-disable-line\n        for (var k = 0; k &lt; parents.length; k += 1) {\n          if ($(parents[k]).is(targetSelector)) { listener.apply(parents[k], eventData); }\n        }\n      }\n    }\n    function handleEvent(e) {\n      var eventData = e &amp;&amp; e.target ? e.target.dom7EventData || [] : [];\n      if (eventData.indexOf(e) &lt; 0) {\n        eventData.unshift(e);\n      }\n      listener.apply(this, eventData);\n    }\n    var events = eventType.split(' ');\n    var j;\n    for (var i = 0; i &lt; this.length; i += 1) {\n      var el = this[i];\n      if (!targetSelector) {\n        for (j = 0; j &lt; events.length; j += 1) {\n          var event = events[j];\n          if (!el.dom7Listeners) { el.dom7Listeners = {}; }\n          if (!el.dom7Listeners[event]) { el.dom7Listeners[event] = []; }\n          el.dom7Listeners[event].push({\n            listener: listener,\n            proxyListener: handleEvent,\n          });\n          el.addEventListener(event, handleEvent, capture);\n        }\n      } else {\n        // Live events\n        for (j = 0; j &lt; events.length; j += 1) {\n          var event$1 = events[j];\n          if (!el.dom7LiveListeners) { el.dom7LiveListeners = {}; }\n          if (!el.dom7LiveListeners[event$1]) { el.dom7LiveListeners[event$1] = []; }\n          el.dom7LiveListeners[event$1].push({\n            listener: listener,\n            proxyListener: handleLiveEvent,\n          });\n          el.addEventListener(event$1, handleLiveEvent, capture);\n        }\n      }\n    }\n    return this;\n  }\n  function off() {\n    var assign;\n\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n    var eventType = args[0];\n    var targetSelector = args[1];\n    var listener = args[2];\n    var capture = args[3];\n    if (typeof args[1] === 'function') {\n      (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]);\n      targetSelector = undefined;\n    }\n    if (!capture) { capture = false; }\n\n    var events = eventType.split(' ');\n    for (var i = 0; i &lt; events.length; i += 1) {\n      var event = events[i];\n      for (var j = 0; j &lt; this.length; j += 1) {\n        var el = this[j];\n        var handlers = (void 0);\n        if (!targetSelector &amp;&amp; el.dom7Listeners) {\n          handlers = el.dom7Listeners[event];\n        } else if (targetSelector &amp;&amp; el.dom7LiveListeners) {\n          handlers = el.dom7LiveListeners[event];\n        }\n        if (handlers &amp;&amp; handlers.length) {\n          for (var k = handlers.length - 1; k &gt;= 0; k -= 1) {\n            var handler = handlers[k];\n            if (listener &amp;&amp; handler.listener === listener) {\n              el.removeEventListener(event, handler.proxyListener, capture);\n              handlers.splice(k, 1);\n            } else if (listener &amp;&amp; handler.listener &amp;&amp; handler.listener.dom7proxy &amp;&amp; handler.listener.dom7proxy === listener) {\n              el.removeEventListener(event, handler.proxyListener, capture);\n              handlers.splice(k, 1);\n            } else if (!listener) {\n              el.removeEventListener(event, handler.proxyListener, capture);\n              handlers.splice(k, 1);\n            }\n          }\n        }\n      }\n    }\n    return this;\n  }\n  function trigger() {\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n\n    var events = args[0].split(' ');\n    var eventData = args[1];\n    for (var i = 0; i &lt; events.length; i += 1) {\n      var event = events[i];\n      for (var j = 0; j &lt; this.length; j += 1) {\n        var el = this[j];\n        var evt = (void 0);\n        try {\n          evt = new win.CustomEvent(event, {\n            detail: eventData,\n            bubbles: true,\n            cancelable: true,\n          });\n        } catch (e) {\n          evt = doc.createEvent('Event');\n          evt.initEvent(event, true, true);\n          evt.detail = eventData;\n        }\n        // eslint-disable-next-line\n        el.dom7EventData = args.filter(function (data, dataIndex) { return dataIndex &gt; 0; });\n        el.dispatchEvent(evt);\n        el.dom7EventData = [];\n        delete el.dom7EventData;\n      }\n    }\n    return this;\n  }\n  function transitionEnd(callback) {\n    var events = ['webkitTransitionEnd', 'transitionend'];\n    var dom = this;\n    var i;\n    function fireCallBack(e) {\n      /* jshint validthis:true */\n      if (e.target !== this) { return; }\n      callback.call(this, e);\n      for (i = 0; i &lt; events.length; i += 1) {\n        dom.off(events[i], fireCallBack);\n      }\n    }\n    if (callback) {\n      for (i = 0; i &lt; events.length; i += 1) {\n        dom.on(events[i], fireCallBack);\n      }\n    }\n    return this;\n  }\n  function outerWidth(includeMargins) {\n    if (this.length &gt; 0) {\n      if (includeMargins) {\n        // eslint-disable-next-line\n        var styles = this.styles();\n        return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n      }\n      return this[0].offsetWidth;\n    }\n    return null;\n  }\n  function outerHeight(includeMargins) {\n    if (this.length &gt; 0) {\n      if (includeMargins) {\n        // eslint-disable-next-line\n        var styles = this.styles();\n        return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n      }\n      return this[0].offsetHeight;\n    }\n    return null;\n  }\n  function offset() {\n    if (this.length &gt; 0) {\n      var el = this[0];\n      var box = el.getBoundingClientRect();\n      var body = doc.body;\n      var clientTop = el.clientTop || body.clientTop || 0;\n      var clientLeft = el.clientLeft || body.clientLeft || 0;\n      var scrollTop = el === win ? win.scrollY : el.scrollTop;\n      var scrollLeft = el === win ? win.scrollX : el.scrollLeft;\n      return {\n        top: (box.top + scrollTop) - clientTop,\n        left: (box.left + scrollLeft) - clientLeft,\n      };\n    }\n\n    return null;\n  }\n  function styles() {\n    if (this[0]) { return win.getComputedStyle(this[0], null); }\n    return {};\n  }\n  function css(props, value) {\n    var i;\n    if (arguments.length === 1) {\n      if (typeof props === 'string') {\n        if (this[0]) { return win.getComputedStyle(this[0], null).getPropertyValue(props); }\n      } else {\n        for (i = 0; i &lt; this.length; i += 1) {\n          // eslint-disable-next-line\n          for (var prop in props) {\n            this[i].style[prop] = props[prop];\n          }\n        }\n        return this;\n      }\n    }\n    if (arguments.length === 2 &amp;&amp; typeof props === 'string') {\n      for (i = 0; i &lt; this.length; i += 1) {\n        this[i].style[props] = value;\n      }\n      return this;\n    }\n    return this;\n  }\n  // Iterate over the collection passing elements to `callback`\n  function each(callback) {\n    // Don't bother continuing without a callback\n    if (!callback) { return this; }\n    // Iterate over the current collection\n    for (var i = 0; i &lt; this.length; i += 1) {\n      // If the callback returns false\n      if (callback.call(this[i], i, this[i]) === false) {\n        // End the loop early\n        return this;\n      }\n    }\n    // Return `this` to allow chained DOM operations\n    return this;\n  }\n  function filter(callback) {\n    var matchedItems = [];\n    var dom = this;\n    for (var i = 0; i &lt; dom.length; i += 1) {\n      if (callback.call(dom[i], i, dom[i])) { matchedItems.push(dom[i]); }\n    }\n    return new Dom7(matchedItems);\n  }\n  // eslint-disable-next-line\n  function html(html) {\n    if (typeof html === 'undefined') {\n      return this[0] ? this[0].innerHTML : undefined;\n    }\n\n    for (var i = 0; i &lt; this.length; i += 1) {\n      this[i].innerHTML = html;\n    }\n    return this;\n  }\n  // eslint-disable-next-line\n  function text(text) {\n    if (typeof text === 'undefined') {\n      if (this[0]) {\n        return this[0].textContent.trim();\n      }\n      return null;\n    }\n\n    for (var i = 0; i &lt; this.length; i += 1) {\n      this[i].textContent = text;\n    }\n    return this;\n  }\n  function is(selector) {\n    var el = this[0];\n    var compareWith;\n    var i;\n    if (!el || typeof selector === 'undefined') { return false; }\n    if (typeof selector === 'string') {\n      if (el.matches) { return el.matches(selector); }\n      else if (el.webkitMatchesSelector) { return el.webkitMatchesSelector(selector); }\n      else if (el.msMatchesSelector) { return el.msMatchesSelector(selector); }\n\n      compareWith = $(selector);\n      for (i = 0; i &lt; compareWith.length; i += 1) {\n        if (compareWith[i] === el) { return true; }\n      }\n      return false;\n    } else if (selector === doc) { return el === doc; }\n    else if (selector === win) { return el === win; }\n\n    if (selector.nodeType || selector instanceof Dom7) {\n      compareWith = selector.nodeType ? [selector] : selector;\n      for (i = 0; i &lt; compareWith.length; i += 1) {\n        if (compareWith[i] === el) { return true; }\n      }\n      return false;\n    }\n    return false;\n  }\n  function index() {\n    var child = this[0];\n    var i;\n    if (child) {\n      i = 0;\n      // eslint-disable-next-line\n      while ((child = child.previousSibling) !== null) {\n        if (child.nodeType === 1) { i += 1; }\n      }\n      return i;\n    }\n    return undefined;\n  }\n  // eslint-disable-next-line\n  function eq(index) {\n    if (typeof index === 'undefined') { return this; }\n    var length = this.length;\n    var returnIndex;\n    if (index &gt; length - 1) {\n      return new Dom7([]);\n    }\n    if (index &lt; 0) {\n      returnIndex = length + index;\n      if (returnIndex &lt; 0) { return new Dom7([]); }\n      return new Dom7([this[returnIndex]]);\n    }\n    return new Dom7([this[index]]);\n  }\n  function append() {\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n\n    var newChild;\n\n    for (var k = 0; k &lt; args.length; k += 1) {\n      newChild = args[k];\n      for (var i = 0; i &lt; this.length; i += 1) {\n        if (typeof newChild === 'string') {\n          var tempDiv = doc.createElement('div');\n          tempDiv.innerHTML = newChild;\n          while (tempDiv.firstChild) {\n            this[i].appendChild(tempDiv.firstChild);\n          }\n        } else if (newChild instanceof Dom7) {\n          for (var j = 0; j &lt; newChild.length; j += 1) {\n            this[i].appendChild(newChild[j]);\n          }\n        } else {\n          this[i].appendChild(newChild);\n        }\n      }\n    }\n\n    return this;\n  }\n  function prepend(newChild) {\n    var i;\n    var j;\n    for (i = 0; i &lt; this.length; i += 1) {\n      if (typeof newChild === 'string') {\n        var tempDiv = doc.createElement('div');\n        tempDiv.innerHTML = newChild;\n        for (j = tempDiv.childNodes.length - 1; j &gt;= 0; j -= 1) {\n          this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n        }\n      } else if (newChild instanceof Dom7) {\n        for (j = 0; j &lt; newChild.length; j += 1) {\n          this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n        }\n      } else {\n        this[i].insertBefore(newChild, this[i].childNodes[0]);\n      }\n    }\n    return this;\n  }\n  function next(selector) {\n    if (this.length &gt; 0) {\n      if (selector) {\n        if (this[0].nextElementSibling &amp;&amp; $(this[0].nextElementSibling).is(selector)) {\n          return new Dom7([this[0].nextElementSibling]);\n        }\n        return new Dom7([]);\n      }\n\n      if (this[0].nextElementSibling) { return new Dom7([this[0].nextElementSibling]); }\n      return new Dom7([]);\n    }\n    return new Dom7([]);\n  }\n  function nextAll(selector) {\n    var nextEls = [];\n    var el = this[0];\n    if (!el) { return new Dom7([]); }\n    while (el.nextElementSibling) {\n      var next = el.nextElementSibling; // eslint-disable-line\n      if (selector) {\n        if ($(next).is(selector)) { nextEls.push(next); }\n      } else { nextEls.push(next); }\n      el = next;\n    }\n    return new Dom7(nextEls);\n  }\n  function prev(selector) {\n    if (this.length &gt; 0) {\n      var el = this[0];\n      if (selector) {\n        if (el.previousElementSibling &amp;&amp; $(el.previousElementSibling).is(selector)) {\n          return new Dom7([el.previousElementSibling]);\n        }\n        return new Dom7([]);\n      }\n\n      if (el.previousElementSibling) { return new Dom7([el.previousElementSibling]); }\n      return new Dom7([]);\n    }\n    return new Dom7([]);\n  }\n  function prevAll(selector) {\n    var prevEls = [];\n    var el = this[0];\n    if (!el) { return new Dom7([]); }\n    while (el.previousElementSibling) {\n      var prev = el.previousElementSibling; // eslint-disable-line\n      if (selector) {\n        if ($(prev).is(selector)) { prevEls.push(prev); }\n      } else { prevEls.push(prev); }\n      el = prev;\n    }\n    return new Dom7(prevEls);\n  }\n  function parent(selector) {\n    var parents = []; // eslint-disable-line\n    for (var i = 0; i &lt; this.length; i += 1) {\n      if (this[i].parentNode !== null) {\n        if (selector) {\n          if ($(this[i].parentNode).is(selector)) { parents.push(this[i].parentNode); }\n        } else {\n          parents.push(this[i].parentNode);\n        }\n      }\n    }\n    return $(unique(parents));\n  }\n  function parents(selector) {\n    var parents = []; // eslint-disable-line\n    for (var i = 0; i &lt; this.length; i += 1) {\n      var parent = this[i].parentNode; // eslint-disable-line\n      while (parent) {\n        if (selector) {\n          if ($(parent).is(selector)) { parents.push(parent); }\n        } else {\n          parents.push(parent);\n        }\n        parent = parent.parentNode;\n      }\n    }\n    return $(unique(parents));\n  }\n  function closest(selector) {\n    var closest = this; // eslint-disable-line\n    if (typeof selector === 'undefined') {\n      return new Dom7([]);\n    }\n    if (!closest.is(selector)) {\n      closest = closest.parents(selector).eq(0);\n    }\n    return closest;\n  }\n  function find(selector) {\n    var foundElements = [];\n    for (var i = 0; i &lt; this.length; i += 1) {\n      var found = this[i].querySelectorAll(selector);\n      for (var j = 0; j &lt; found.length; j += 1) {\n        foundElements.push(found[j]);\n      }\n    }\n    return new Dom7(foundElements);\n  }\n  function children(selector) {\n    var children = []; // eslint-disable-line\n    for (var i = 0; i &lt; this.length; i += 1) {\n      var childNodes = this[i].childNodes;\n\n      for (var j = 0; j &lt; childNodes.length; j += 1) {\n        if (!selector) {\n          if (childNodes[j].nodeType === 1) { children.push(childNodes[j]); }\n        } else if (childNodes[j].nodeType === 1 &amp;&amp; $(childNodes[j]).is(selector)) {\n          children.push(childNodes[j]);\n        }\n      }\n    }\n    return new Dom7(unique(children));\n  }\n  function remove() {\n    for (var i = 0; i &lt; this.length; i += 1) {\n      if (this[i].parentNode) { this[i].parentNode.removeChild(this[i]); }\n    }\n    return this;\n  }\n  function add() {\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n\n    var dom = this;\n    var i;\n    var j;\n    for (i = 0; i &lt; args.length; i += 1) {\n      var toAdd = $(args[i]);\n      for (j = 0; j &lt; toAdd.length; j += 1) {\n        dom[dom.length] = toAdd[j];\n        dom.length += 1;\n      }\n    }\n    return dom;\n  }\n\n  var Methods = {\n    addClass: addClass,\n    removeClass: removeClass,\n    hasClass: hasClass,\n    toggleClass: toggleClass,\n    attr: attr,\n    removeAttr: removeAttr,\n    data: data,\n    transform: transform,\n    transition: transition,\n    on: on,\n    off: off,\n    trigger: trigger,\n    transitionEnd: transitionEnd,\n    outerWidth: outerWidth,\n    outerHeight: outerHeight,\n    offset: offset,\n    css: css,\n    each: each,\n    html: html,\n    text: text,\n    is: is,\n    index: index,\n    eq: eq,\n    append: append,\n    prepend: prepend,\n    next: next,\n    nextAll: nextAll,\n    prev: prev,\n    prevAll: prevAll,\n    parent: parent,\n    parents: parents,\n    closest: closest,\n    find: find,\n    children: children,\n    filter: filter,\n    remove: remove,\n    add: add,\n    styles: styles,\n  };\n\n  Object.keys(Methods).forEach(function (methodName) {\n    $.fn[methodName] = $.fn[methodName] || Methods[methodName];\n  });\n\n  var Utils = {\n    deleteProps: function deleteProps(obj) {\n      var object = obj;\n      Object.keys(object).forEach(function (key) {\n        try {\n          object[key] = null;\n        } catch (e) {\n          // no getter for object\n        }\n        try {\n          delete object[key];\n        } catch (e) {\n          // something got wrong\n        }\n      });\n    },\n    nextTick: function nextTick(callback, delay) {\n      if ( delay === void 0 ) delay = 0;\n\n      return setTimeout(callback, delay);\n    },\n    now: function now() {\n      return Date.now();\n    },\n    getTranslate: function getTranslate(el, axis) {\n      if ( axis === void 0 ) axis = 'x';\n\n      var matrix;\n      var curTransform;\n      var transformMatrix;\n\n      var curStyle = win.getComputedStyle(el, null);\n\n      if (win.WebKitCSSMatrix) {\n        curTransform = curStyle.transform || curStyle.webkitTransform;\n        if (curTransform.split(',').length &gt; 6) {\n          curTransform = curTransform.split(', ').map(function (a) { return a.replace(',', '.'); }).join(', ');\n        }\n        // Some old versions of Webkit choke when 'none' is passed; pass\n        // empty string instead in this case\n        transformMatrix = new win.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n      } else {\n        transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n        matrix = transformMatrix.toString().split(',');\n      }\n\n      if (axis === 'x') {\n        // Latest Chrome and webkits Fix\n        if (win.WebKitCSSMatrix) { curTransform = transformMatrix.m41; }\n        // Crazy IE10 Matrix\n        else if (matrix.length === 16) { curTransform = parseFloat(matrix[12]); }\n        // Normal Browsers\n        else { curTransform = parseFloat(matrix[4]); }\n      }\n      if (axis === 'y') {\n        // Latest Chrome and webkits Fix\n        if (win.WebKitCSSMatrix) { curTransform = transformMatrix.m42; }\n        // Crazy IE10 Matrix\n        else if (matrix.length === 16) { curTransform = parseFloat(matrix[13]); }\n        // Normal Browsers\n        else { curTransform = parseFloat(matrix[5]); }\n      }\n      return curTransform || 0;\n    },\n    parseUrlQuery: function parseUrlQuery(url) {\n      var query = {};\n      var urlToParse = url || win.location.href;\n      var i;\n      var params;\n      var param;\n      var length;\n      if (typeof urlToParse === 'string' &amp;&amp; urlToParse.length) {\n        urlToParse = urlToParse.indexOf('?') &gt; -1 ? urlToParse.replace(/\\S*\\?/, '') : '';\n        params = urlToParse.split('&amp;').filter(function (paramsPart) { return paramsPart !== ''; });\n        length = params.length;\n\n        for (i = 0; i &lt; length; i += 1) {\n          param = params[i].replace(/#\\S+/g, '').split('=');\n          query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';\n        }\n      }\n      return query;\n    },\n    isObject: function isObject(o) {\n      return typeof o === 'object' &amp;&amp; o !== null &amp;&amp; o.constructor &amp;&amp; o.constructor === Object;\n    },\n    extend: function extend() {\n      var args = [], len$1 = arguments.length;\n      while ( len$1-- ) args[ len$1 ] = arguments[ len$1 ];\n\n      var to = Object(args[0]);\n      for (var i = 1; i &lt; args.length; i += 1) {\n        var nextSource = args[i];\n        if (nextSource !== undefined &amp;&amp; nextSource !== null) {\n          var keysArray = Object.keys(Object(nextSource));\n          for (var nextIndex = 0, len = keysArray.length; nextIndex &lt; len; nextIndex += 1) {\n            var nextKey = keysArray[nextIndex];\n            var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n            if (desc !== undefined &amp;&amp; desc.enumerable) {\n              if (Utils.isObject(to[nextKey]) &amp;&amp; Utils.isObject(nextSource[nextKey])) {\n                Utils.extend(to[nextKey], nextSource[nextKey]);\n              } else if (!Utils.isObject(to[nextKey]) &amp;&amp; Utils.isObject(nextSource[nextKey])) {\n                to[nextKey] = {};\n                Utils.extend(to[nextKey], nextSource[nextKey]);\n              } else {\n                to[nextKey] = nextSource[nextKey];\n              }\n            }\n          }\n        }\n      }\n      return to;\n    },\n  };\n\n  var Support = (function Support() {\n    return {\n      touch: (win.Modernizr &amp;&amp; win.Modernizr.touch === true) || (function checkTouch() {\n        return !!((win.navigator.maxTouchPoints &gt; 0) || ('ontouchstart' in win) || (win.DocumentTouch &amp;&amp; doc instanceof win.DocumentTouch));\n      }()),\n\n      pointerEvents: !!win.PointerEvent &amp;&amp; ('maxTouchPoints' in win.navigator) &amp;&amp; win.navigator.maxTouchPoints &gt; 0,\n\n      observer: (function checkObserver() {\n        return ('MutationObserver' in win || 'WebkitMutationObserver' in win);\n      }()),\n\n      passiveListener: (function checkPassiveListener() {\n        var supportsPassive = false;\n        try {\n          var opts = Object.defineProperty({}, 'passive', {\n            // eslint-disable-next-line\n            get: function get() {\n              supportsPassive = true;\n            },\n          });\n          win.addEventListener('testPassiveListener', null, opts);\n        } catch (e) {\n          // No support\n        }\n        return supportsPassive;\n      }()),\n\n      gestures: (function checkGestures() {\n        return 'ongesturestart' in win;\n      }()),\n    };\n  }());\n\n  var SwiperClass = function SwiperClass(params) {\n    if ( params === void 0 ) params = {};\n\n    var self = this;\n    self.params = params;\n\n    // Events\n    self.eventsListeners = {};\n\n    if (self.params &amp;&amp; self.params.on) {\n      Object.keys(self.params.on).forEach(function (eventName) {\n        self.on(eventName, self.params.on[eventName]);\n      });\n    }\n  };\n\n  var staticAccessors = { components: { configurable: true } };\n\n  SwiperClass.prototype.on = function on (events, handler, priority) {\n    var self = this;\n    if (typeof handler !== 'function') { return self; }\n    var method = priority ? 'unshift' : 'push';\n    events.split(' ').forEach(function (event) {\n      if (!self.eventsListeners[event]) { self.eventsListeners[event] = []; }\n      self.eventsListeners[event][method](handler);\n    });\n    return self;\n  };\n\n  SwiperClass.prototype.once = function once (events, handler, priority) {\n    var self = this;\n    if (typeof handler !== 'function') { return self; }\n    function onceHandler() {\n        var args = [], len = arguments.length;\n        while ( len-- ) args[ len ] = arguments[ len ];\n\n      self.off(events, onceHandler);\n      if (onceHandler.f7proxy) {\n        delete onceHandler.f7proxy;\n      }\n      handler.apply(self, args);\n    }\n    onceHandler.f7proxy = handler;\n    return self.on(events, onceHandler, priority);\n  };\n\n  SwiperClass.prototype.off = function off (events, handler) {\n    var self = this;\n    if (!self.eventsListeners) { return self; }\n    events.split(' ').forEach(function (event) {\n      if (typeof handler === 'undefined') {\n        self.eventsListeners[event] = [];\n      } else if (self.eventsListeners[event] &amp;&amp; self.eventsListeners[event].length) {\n        self.eventsListeners[event].forEach(function (eventHandler, index) {\n          if (eventHandler === handler || (eventHandler.f7proxy &amp;&amp; eventHandler.f7proxy === handler)) {\n            self.eventsListeners[event].splice(index, 1);\n          }\n        });\n      }\n    });\n    return self;\n  };\n\n  SwiperClass.prototype.emit = function emit () {\n      var args = [], len = arguments.length;\n      while ( len-- ) args[ len ] = arguments[ len ];\n\n    var self = this;\n    if (!self.eventsListeners) { return self; }\n    var events;\n    var data;\n    var context;\n    if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n      events = args[0];\n      data = args.slice(1, args.length);\n      context = self;\n    } else {\n      events = args[0].events;\n      data = args[0].data;\n      context = args[0].context || self;\n    }\n    var eventsArray = Array.isArray(events) ? events : events.split(' ');\n    eventsArray.forEach(function (event) {\n      if (self.eventsListeners &amp;&amp; self.eventsListeners[event]) {\n        var handlers = [];\n        self.eventsListeners[event].forEach(function (eventHandler) {\n          handlers.push(eventHandler);\n        });\n        handlers.forEach(function (eventHandler) {\n          eventHandler.apply(context, data);\n        });\n      }\n    });\n    return self;\n  };\n\n  SwiperClass.prototype.useModulesParams = function useModulesParams (instanceParams) {\n    var instance = this;\n    if (!instance.modules) { return; }\n    Object.keys(instance.modules).forEach(function (moduleName) {\n      var module = instance.modules[moduleName];\n      // Extend params\n      if (module.params) {\n        Utils.extend(instanceParams, module.params);\n      }\n    });\n  };\n\n  SwiperClass.prototype.useModules = function useModules (modulesParams) {\n      if ( modulesParams === void 0 ) modulesParams = {};\n\n    var instance = this;\n    if (!instance.modules) { return; }\n    Object.keys(instance.modules).forEach(function (moduleName) {\n      var module = instance.modules[moduleName];\n      var moduleParams = modulesParams[moduleName] || {};\n      // Extend instance methods and props\n      if (module.instance) {\n        Object.keys(module.instance).forEach(function (modulePropName) {\n          var moduleProp = module.instance[modulePropName];\n          if (typeof moduleProp === 'function') {\n            instance[modulePropName] = moduleProp.bind(instance);\n          } else {\n            instance[modulePropName] = moduleProp;\n          }\n        });\n      }\n      // Add event listeners\n      if (module.on &amp;&amp; instance.on) {\n        Object.keys(module.on).forEach(function (moduleEventName) {\n          instance.on(moduleEventName, module.on[moduleEventName]);\n        });\n      }\n\n      // Module create callback\n      if (module.create) {\n        module.create.bind(instance)(moduleParams);\n      }\n    });\n  };\n\n  staticAccessors.components.set = function (components) {\n    var Class = this;\n    if (!Class.use) { return; }\n    Class.use(components);\n  };\n\n  SwiperClass.installModule = function installModule (module) {\n      var params = [], len = arguments.length - 1;\n      while ( len-- &gt; 0 ) params[ len ] = arguments[ len + 1 ];\n\n    var Class = this;\n    if (!Class.prototype.modules) { Class.prototype.modules = {}; }\n    var name = module.name || (((Object.keys(Class.prototype.modules).length) + \"_\" + (Utils.now())));\n    Class.prototype.modules[name] = module;\n    // Prototype\n    if (module.proto) {\n      Object.keys(module.proto).forEach(function (key) {\n        Class.prototype[key] = module.proto[key];\n      });\n    }\n    // Class\n    if (module.static) {\n      Object.keys(module.static).forEach(function (key) {\n        Class[key] = module.static[key];\n      });\n    }\n    // Callback\n    if (module.install) {\n      module.install.apply(Class, params);\n    }\n    return Class;\n  };\n\n  SwiperClass.use = function use (module) {\n      var params = [], len = arguments.length - 1;\n      while ( len-- &gt; 0 ) params[ len ] = arguments[ len + 1 ];\n\n    var Class = this;\n    if (Array.isArray(module)) {\n      module.forEach(function (m) { return Class.installModule(m); });\n      return Class;\n    }\n    return Class.installModule.apply(Class, [ module ].concat( params ));\n  };\n\n  Object.defineProperties( SwiperClass, staticAccessors );\n\n  function updateSize () {\n    var swiper = this;\n    var width;\n    var height;\n    var $el = swiper.$el;\n    if (typeof swiper.params.width !== 'undefined') {\n      width = swiper.params.width;\n    } else {\n      width = $el[0].clientWidth;\n    }\n    if (typeof swiper.params.height !== 'undefined') {\n      height = swiper.params.height;\n    } else {\n      height = $el[0].clientHeight;\n    }\n    if ((width === 0 &amp;&amp; swiper.isHorizontal()) || (height === 0 &amp;&amp; swiper.isVertical())) {\n      return;\n    }\n\n    // Subtract paddings\n    width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);\n    height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);\n\n    Utils.extend(swiper, {\n      width: width,\n      height: height,\n      size: swiper.isHorizontal() ? width : height,\n    });\n  }\n\n  function updateSlides () {\n    var swiper = this;\n    var params = swiper.params;\n\n    var $wrapperEl = swiper.$wrapperEl;\n    var swiperSize = swiper.size;\n    var rtl = swiper.rtlTranslate;\n    var wrongRTL = swiper.wrongRTL;\n    var isVirtual = swiper.virtual &amp;&amp; params.virtual.enabled;\n    var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n    var slides = $wrapperEl.children((\".\" + (swiper.params.slideClass)));\n    var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n    var snapGrid = [];\n    var slidesGrid = [];\n    var slidesSizesGrid = [];\n\n    function slidesForMargin(slideIndex) {\n      if (!params.cssMode) { return true; }\n      if (slideIndex === slides.length - 1) {\n        return false;\n      }\n      return true;\n    }\n\n    var offsetBefore = params.slidesOffsetBefore;\n    if (typeof offsetBefore === 'function') {\n      offsetBefore = params.slidesOffsetBefore.call(swiper);\n    }\n\n    var offsetAfter = params.slidesOffsetAfter;\n    if (typeof offsetAfter === 'function') {\n      offsetAfter = params.slidesOffsetAfter.call(swiper);\n    }\n\n    var previousSnapGridLength = swiper.snapGrid.length;\n    var previousSlidesGridLength = swiper.snapGrid.length;\n\n    var spaceBetween = params.spaceBetween;\n    var slidePosition = -offsetBefore;\n    var prevSlideSize = 0;\n    var index = 0;\n    if (typeof swiperSize === 'undefined') {\n      return;\n    }\n    if (typeof spaceBetween === 'string' &amp;&amp; spaceBetween.indexOf('%') &gt;= 0) {\n      spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;\n    }\n\n    swiper.virtualSize = -spaceBetween;\n\n    // reset margins\n    if (rtl) { slides.css({ marginLeft: '', marginTop: '' }); }\n    else { slides.css({ marginRight: '', marginBottom: '' }); }\n\n    var slidesNumberEvenToRows;\n    if (params.slidesPerColumn &gt; 1) {\n      if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {\n        slidesNumberEvenToRows = slidesLength;\n      } else {\n        slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;\n      }\n      if (params.slidesPerView !== 'auto' &amp;&amp; params.slidesPerColumnFill === 'row') {\n        slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);\n      }\n    }\n\n    // Calc slides\n    var slideSize;\n    var slidesPerColumn = params.slidesPerColumn;\n    var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n    var numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);\n    for (var i = 0; i &lt; slidesLength; i += 1) {\n      slideSize = 0;\n      var slide = slides.eq(i);\n      if (params.slidesPerColumn &gt; 1) {\n        // Set slides order\n        var newSlideOrderIndex = (void 0);\n        var column = (void 0);\n        var row = (void 0);\n        if (params.slidesPerColumnFill === 'row' &amp;&amp; params.slidesPerGroup &gt; 1) {\n          var groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));\n          var slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;\n          var columnsInGroup = groupIndex === 0\n            ? params.slidesPerGroup\n            : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);\n          row = Math.floor(slideIndexInGroup / columnsInGroup);\n          column = (slideIndexInGroup - row * columnsInGroup) + groupIndex * params.slidesPerGroup;\n\n          newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn);\n          slide\n            .css({\n              '-webkit-box-ordinal-group': newSlideOrderIndex,\n              '-moz-box-ordinal-group': newSlideOrderIndex,\n              '-ms-flex-order': newSlideOrderIndex,\n              '-webkit-order': newSlideOrderIndex,\n              order: newSlideOrderIndex,\n            });\n        } else if (params.slidesPerColumnFill === 'column') {\n          column = Math.floor(i / slidesPerColumn);\n          row = i - (column * slidesPerColumn);\n          if (column &gt; numFullColumns || (column === numFullColumns &amp;&amp; row === slidesPerColumn - 1)) {\n            row += 1;\n            if (row &gt;= slidesPerColumn) {\n              row = 0;\n              column += 1;\n            }\n          }\n        } else {\n          row = Math.floor(i / slidesPerRow);\n          column = i - (row * slidesPerRow);\n        }\n        slide.css(\n          (\"margin-\" + (swiper.isHorizontal() ? 'top' : 'left')),\n          (row !== 0 &amp;&amp; params.spaceBetween) &amp;&amp; (((params.spaceBetween) + \"px\"))\n        );\n      }\n      if (slide.css('display') === 'none') { continue; } // eslint-disable-line\n\n      if (params.slidesPerView === 'auto') {\n        var slideStyles = win.getComputedStyle(slide[0], null);\n        var currentTransform = slide[0].style.transform;\n        var currentWebKitTransform = slide[0].style.webkitTransform;\n        if (currentTransform) {\n          slide[0].style.transform = 'none';\n        }\n        if (currentWebKitTransform) {\n          slide[0].style.webkitTransform = 'none';\n        }\n        if (params.roundLengths) {\n          slideSize = swiper.isHorizontal()\n            ? slide.outerWidth(true)\n            : slide.outerHeight(true);\n        } else {\n          // eslint-disable-next-line\n          if (swiper.isHorizontal()) {\n            var width = parseFloat(slideStyles.getPropertyValue('width'));\n            var paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left'));\n            var paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right'));\n            var marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left'));\n            var marginRight = parseFloat(slideStyles.getPropertyValue('margin-right'));\n            var boxSizing = slideStyles.getPropertyValue('box-sizing');\n            if (boxSizing &amp;&amp; boxSizing === 'border-box') {\n              slideSize = width + marginLeft + marginRight;\n            } else {\n              slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;\n            }\n          } else {\n            var height = parseFloat(slideStyles.getPropertyValue('height'));\n            var paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top'));\n            var paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom'));\n            var marginTop = parseFloat(slideStyles.getPropertyValue('margin-top'));\n            var marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom'));\n            var boxSizing$1 = slideStyles.getPropertyValue('box-sizing');\n            if (boxSizing$1 &amp;&amp; boxSizing$1 === 'border-box') {\n              slideSize = height + marginTop + marginBottom;\n            } else {\n              slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;\n            }\n          }\n        }\n        if (currentTransform) {\n          slide[0].style.transform = currentTransform;\n        }\n        if (currentWebKitTransform) {\n          slide[0].style.webkitTransform = currentWebKitTransform;\n        }\n        if (params.roundLengths) { slideSize = Math.floor(slideSize); }\n      } else {\n        slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView;\n        if (params.roundLengths) { slideSize = Math.floor(slideSize); }\n\n        if (slides[i]) {\n          if (swiper.isHorizontal()) {\n            slides[i].style.width = slideSize + \"px\";\n          } else {\n            slides[i].style.height = slideSize + \"px\";\n          }\n        }\n      }\n      if (slides[i]) {\n        slides[i].swiperSlideSize = slideSize;\n      }\n      slidesSizesGrid.push(slideSize);\n\n\n      if (params.centeredSlides) {\n        slidePosition = slidePosition + (slideSize / 2) + (prevSlideSize / 2) + spaceBetween;\n        if (prevSlideSize === 0 &amp;&amp; i !== 0) { slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; }\n        if (i === 0) { slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; }\n        if (Math.abs(slidePosition) &lt; 1 / 1000) { slidePosition = 0; }\n        if (params.roundLengths) { slidePosition = Math.floor(slidePosition); }\n        if ((index) % params.slidesPerGroup === 0) { snapGrid.push(slidePosition); }\n        slidesGrid.push(slidePosition);\n      } else {\n        if (params.roundLengths) { slidePosition = Math.floor(slidePosition); }\n        if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) { snapGrid.push(slidePosition); }\n        slidesGrid.push(slidePosition);\n        slidePosition = slidePosition + slideSize + spaceBetween;\n      }\n\n      swiper.virtualSize += slideSize + spaceBetween;\n\n      prevSlideSize = slideSize;\n\n      index += 1;\n    }\n    swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n    var newSlidesGrid;\n\n    if (\n      rtl &amp;&amp; wrongRTL &amp;&amp; (params.effect === 'slide' || params.effect === 'coverflow')) {\n      $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") });\n    }\n    if (params.setWrapperSize) {\n      if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n      else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n    }\n\n    if (params.slidesPerColumn &gt; 1) {\n      swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;\n      swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;\n      if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n      else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n      if (params.centeredSlides) {\n        newSlidesGrid = [];\n        for (var i$1 = 0; i$1 &lt; snapGrid.length; i$1 += 1) {\n          var slidesGridItem = snapGrid[i$1];\n          if (params.roundLengths) { slidesGridItem = Math.floor(slidesGridItem); }\n          if (snapGrid[i$1] &lt; swiper.virtualSize + snapGrid[0]) { newSlidesGrid.push(slidesGridItem); }\n        }\n        snapGrid = newSlidesGrid;\n      }\n    }\n\n    // Remove last grid elements depending on width\n    if (!params.centeredSlides) {\n      newSlidesGrid = [];\n      for (var i$2 = 0; i$2 &lt; snapGrid.length; i$2 += 1) {\n        var slidesGridItem$1 = snapGrid[i$2];\n        if (params.roundLengths) { slidesGridItem$1 = Math.floor(slidesGridItem$1); }\n        if (snapGrid[i$2] &lt;= swiper.virtualSize - swiperSize) {\n          newSlidesGrid.push(slidesGridItem$1);\n        }\n      }\n      snapGrid = newSlidesGrid;\n      if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) &gt; 1) {\n        snapGrid.push(swiper.virtualSize - swiperSize);\n      }\n    }\n    if (snapGrid.length === 0) { snapGrid = [0]; }\n\n    if (params.spaceBetween !== 0) {\n      if (swiper.isHorizontal()) {\n        if (rtl) { slides.filter(slidesForMargin).css({ marginLeft: (spaceBetween + \"px\") }); }\n        else { slides.filter(slidesForMargin).css({ marginRight: (spaceBetween + \"px\") }); }\n      } else { slides.filter(slidesForMargin).css({ marginBottom: (spaceBetween + \"px\") }); }\n    }\n\n    if (params.centeredSlides &amp;&amp; params.centeredSlidesBounds) {\n      var allSlidesSize = 0;\n      slidesSizesGrid.forEach(function (slideSizeValue) {\n        allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n      });\n      allSlidesSize -= params.spaceBetween;\n      var maxSnap = allSlidesSize - swiperSize;\n      snapGrid = snapGrid.map(function (snap) {\n        if (snap &lt; 0) { return -offsetBefore; }\n        if (snap &gt; maxSnap) { return maxSnap + offsetAfter; }\n        return snap;\n      });\n    }\n\n    if (params.centerInsufficientSlides) {\n      var allSlidesSize$1 = 0;\n      slidesSizesGrid.forEach(function (slideSizeValue) {\n        allSlidesSize$1 += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n      });\n      allSlidesSize$1 -= params.spaceBetween;\n      if (allSlidesSize$1 &lt; swiperSize) {\n        var allSlidesOffset = (swiperSize - allSlidesSize$1) / 2;\n        snapGrid.forEach(function (snap, snapIndex) {\n          snapGrid[snapIndex] = snap - allSlidesOffset;\n        });\n        slidesGrid.forEach(function (snap, snapIndex) {\n          slidesGrid[snapIndex] = snap + allSlidesOffset;\n        });\n      }\n    }\n\n    Utils.extend(swiper, {\n      slides: slides,\n      snapGrid: snapGrid,\n      slidesGrid: slidesGrid,\n      slidesSizesGrid: slidesSizesGrid,\n    });\n\n    if (slidesLength !== previousSlidesLength) {\n      swiper.emit('slidesLengthChange');\n    }\n    if (snapGrid.length !== previousSnapGridLength) {\n      if (swiper.params.watchOverflow) { swiper.checkOverflow(); }\n      swiper.emit('snapGridLengthChange');\n    }\n    if (slidesGrid.length !== previousSlidesGridLength) {\n      swiper.emit('slidesGridLengthChange');\n    }\n\n    if (params.watchSlidesProgress || params.watchSlidesVisibility) {\n      swiper.updateSlidesOffset();\n    }\n  }\n\n  function updateAutoHeight (speed) {\n    var swiper = this;\n    var activeSlides = [];\n    var newHeight = 0;\n    var i;\n    if (typeof speed === 'number') {\n      swiper.setTransition(speed);\n    } else if (speed === true) {\n      swiper.setTransition(swiper.params.speed);\n    }\n    // Find slides currently in view\n    if (swiper.params.slidesPerView !== 'auto' &amp;&amp; swiper.params.slidesPerView &gt; 1) {\n      for (i = 0; i &lt; Math.ceil(swiper.params.slidesPerView); i += 1) {\n        var index = swiper.activeIndex + i;\n        if (index &gt; swiper.slides.length) { break; }\n        activeSlides.push(swiper.slides.eq(index)[0]);\n      }\n    } else {\n      activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);\n    }\n\n    // Find new height from highest slide in view\n    for (i = 0; i &lt; activeSlides.length; i += 1) {\n      if (typeof activeSlides[i] !== 'undefined') {\n        var height = activeSlides[i].offsetHeight;\n        newHeight = height &gt; newHeight ? height : newHeight;\n      }\n    }\n\n    // Update Height\n    if (newHeight) { swiper.$wrapperEl.css('height', (newHeight + \"px\")); }\n  }\n\n  function updateSlidesOffset () {\n    var swiper = this;\n    var slides = swiper.slides;\n    for (var i = 0; i &lt; slides.length; i += 1) {\n      slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n    }\n  }\n\n  function updateSlidesProgress (translate) {\n    if ( translate === void 0 ) translate = (this &amp;&amp; this.translate) || 0;\n\n    var swiper = this;\n    var params = swiper.params;\n\n    var slides = swiper.slides;\n    var rtl = swiper.rtlTranslate;\n\n    if (slides.length === 0) { return; }\n    if (typeof slides[0].swiperSlideOffset === 'undefined') { swiper.updateSlidesOffset(); }\n\n    var offsetCenter = -translate;\n    if (rtl) { offsetCenter = translate; }\n\n    // Visible Slides\n    slides.removeClass(params.slideVisibleClass);\n\n    swiper.visibleSlidesIndexes = [];\n    swiper.visibleSlides = [];\n\n    for (var i = 0; i &lt; slides.length; i += 1) {\n      var slide = slides[i];\n      var slideProgress = (\n        (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset\n      ) / (slide.swiperSlideSize + params.spaceBetween);\n      if (params.watchSlidesVisibility) {\n        var slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n        var slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n        var isVisible = (slideBefore &gt;= 0 &amp;&amp; slideBefore &lt; swiper.size - 1)\n                  || (slideAfter &gt; 1 &amp;&amp; slideAfter &lt;= swiper.size)\n                  || (slideBefore &lt;= 0 &amp;&amp; slideAfter &gt;= swiper.size);\n        if (isVisible) {\n          swiper.visibleSlides.push(slide);\n          swiper.visibleSlidesIndexes.push(i);\n          slides.eq(i).addClass(params.slideVisibleClass);\n        }\n      }\n      slide.progress = rtl ? -slideProgress : slideProgress;\n    }\n    swiper.visibleSlides = $(swiper.visibleSlides);\n  }\n\n  function updateProgress (translate) {\n    var swiper = this;\n    if (typeof translate === 'undefined') {\n      var multiplier = swiper.rtlTranslate ? -1 : 1;\n      // eslint-disable-next-line\n      translate = (swiper &amp;&amp; swiper.translate &amp;&amp; (swiper.translate * multiplier)) || 0;\n    }\n    var params = swiper.params;\n    var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n    var progress = swiper.progress;\n    var isBeginning = swiper.isBeginning;\n    var isEnd = swiper.isEnd;\n    var wasBeginning = isBeginning;\n    var wasEnd = isEnd;\n    if (translatesDiff === 0) {\n      progress = 0;\n      isBeginning = true;\n      isEnd = true;\n    } else {\n      progress = (translate - swiper.minTranslate()) / (translatesDiff);\n      isBeginning = progress &lt;= 0;\n      isEnd = progress &gt;= 1;\n    }\n    Utils.extend(swiper, {\n      progress: progress,\n      isBeginning: isBeginning,\n      isEnd: isEnd,\n    });\n\n    if (params.watchSlidesProgress || params.watchSlidesVisibility) { swiper.updateSlidesProgress(translate); }\n\n    if (isBeginning &amp;&amp; !wasBeginning) {\n      swiper.emit('reachBeginning toEdge');\n    }\n    if (isEnd &amp;&amp; !wasEnd) {\n      swiper.emit('reachEnd toEdge');\n    }\n    if ((wasBeginning &amp;&amp; !isBeginning) || (wasEnd &amp;&amp; !isEnd)) {\n      swiper.emit('fromEdge');\n    }\n\n    swiper.emit('progress', progress);\n  }\n\n  function updateSlidesClasses () {\n    var swiper = this;\n\n    var slides = swiper.slides;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n    var activeIndex = swiper.activeIndex;\n    var realIndex = swiper.realIndex;\n    var isVirtual = swiper.virtual &amp;&amp; params.virtual.enabled;\n\n    slides.removeClass(((params.slideActiveClass) + \" \" + (params.slideNextClass) + \" \" + (params.slidePrevClass) + \" \" + (params.slideDuplicateActiveClass) + \" \" + (params.slideDuplicateNextClass) + \" \" + (params.slideDuplicatePrevClass)));\n\n    var activeSlide;\n    if (isVirtual) {\n      activeSlide = swiper.$wrapperEl.find((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + activeIndex + \"\\\"]\"));\n    } else {\n      activeSlide = slides.eq(activeIndex);\n    }\n\n    // Active classes\n    activeSlide.addClass(params.slideActiveClass);\n\n    if (params.loop) {\n      // Duplicate to all looped slides\n      if (activeSlide.hasClass(params.slideDuplicateClass)) {\n        $wrapperEl\n          .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]\"))\n          .addClass(params.slideDuplicateActiveClass);\n      } else {\n        $wrapperEl\n          .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]\"))\n          .addClass(params.slideDuplicateActiveClass);\n      }\n    }\n    // Next Slide\n    var nextSlide = activeSlide.nextAll((\".\" + (params.slideClass))).eq(0).addClass(params.slideNextClass);\n    if (params.loop &amp;&amp; nextSlide.length === 0) {\n      nextSlide = slides.eq(0);\n      nextSlide.addClass(params.slideNextClass);\n    }\n    // Prev Slide\n    var prevSlide = activeSlide.prevAll((\".\" + (params.slideClass))).eq(0).addClass(params.slidePrevClass);\n    if (params.loop &amp;&amp; prevSlide.length === 0) {\n      prevSlide = slides.eq(-1);\n      prevSlide.addClass(params.slidePrevClass);\n    }\n    if (params.loop) {\n      // Duplicate to all looped slides\n      if (nextSlide.hasClass(params.slideDuplicateClass)) {\n        $wrapperEl\n          .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + (nextSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n          .addClass(params.slideDuplicateNextClass);\n      } else {\n        $wrapperEl\n          .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + (nextSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n          .addClass(params.slideDuplicateNextClass);\n      }\n      if (prevSlide.hasClass(params.slideDuplicateClass)) {\n        $wrapperEl\n          .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + (prevSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n          .addClass(params.slideDuplicatePrevClass);\n      } else {\n        $wrapperEl\n          .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + (prevSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n          .addClass(params.slideDuplicatePrevClass);\n      }\n    }\n  }\n\n  function updateActiveIndex (newActiveIndex) {\n    var swiper = this;\n    var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n    var slidesGrid = swiper.slidesGrid;\n    var snapGrid = swiper.snapGrid;\n    var params = swiper.params;\n    var previousIndex = swiper.activeIndex;\n    var previousRealIndex = swiper.realIndex;\n    var previousSnapIndex = swiper.snapIndex;\n    var activeIndex = newActiveIndex;\n    var snapIndex;\n    if (typeof activeIndex === 'undefined') {\n      for (var i = 0; i &lt; slidesGrid.length; i += 1) {\n        if (typeof slidesGrid[i + 1] !== 'undefined') {\n          if (translate &gt;= slidesGrid[i] &amp;&amp; translate &lt; slidesGrid[i + 1] - ((slidesGrid[i + 1] - slidesGrid[i]) / 2)) {\n            activeIndex = i;\n          } else if (translate &gt;= slidesGrid[i] &amp;&amp; translate &lt; slidesGrid[i + 1]) {\n            activeIndex = i + 1;\n          }\n        } else if (translate &gt;= slidesGrid[i]) {\n          activeIndex = i;\n        }\n      }\n      // Normalize slideIndex\n      if (params.normalizeSlideIndex) {\n        if (activeIndex &lt; 0 || typeof activeIndex === 'undefined') { activeIndex = 0; }\n      }\n    }\n    if (snapGrid.indexOf(translate) &gt;= 0) {\n      snapIndex = snapGrid.indexOf(translate);\n    } else {\n      var skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n      snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n    }\n    if (snapIndex &gt;= snapGrid.length) { snapIndex = snapGrid.length - 1; }\n    if (activeIndex === previousIndex) {\n      if (snapIndex !== previousSnapIndex) {\n        swiper.snapIndex = snapIndex;\n        swiper.emit('snapIndexChange');\n      }\n      return;\n    }\n\n    // Get real index\n    var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n\n    Utils.extend(swiper, {\n      snapIndex: snapIndex,\n      realIndex: realIndex,\n      previousIndex: previousIndex,\n      activeIndex: activeIndex,\n    });\n    swiper.emit('activeIndexChange');\n    swiper.emit('snapIndexChange');\n    if (previousRealIndex !== realIndex) {\n      swiper.emit('realIndexChange');\n    }\n    if (swiper.initialized || swiper.runCallbacksOnInit) {\n      swiper.emit('slideChange');\n    }\n  }\n\n  function updateClickedSlide (e) {\n    var swiper = this;\n    var params = swiper.params;\n    var slide = $(e.target).closest((\".\" + (params.slideClass)))[0];\n    var slideFound = false;\n    if (slide) {\n      for (var i = 0; i &lt; swiper.slides.length; i += 1) {\n        if (swiper.slides[i] === slide) { slideFound = true; }\n      }\n    }\n\n    if (slide &amp;&amp; slideFound) {\n      swiper.clickedSlide = slide;\n      if (swiper.virtual &amp;&amp; swiper.params.virtual.enabled) {\n        swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n      } else {\n        swiper.clickedIndex = $(slide).index();\n      }\n    } else {\n      swiper.clickedSlide = undefined;\n      swiper.clickedIndex = undefined;\n      return;\n    }\n    if (params.slideToClickedSlide &amp;&amp; swiper.clickedIndex !== undefined &amp;&amp; swiper.clickedIndex !== swiper.activeIndex) {\n      swiper.slideToClickedSlide();\n    }\n  }\n\n  var update = {\n    updateSize: updateSize,\n    updateSlides: updateSlides,\n    updateAutoHeight: updateAutoHeight,\n    updateSlidesOffset: updateSlidesOffset,\n    updateSlidesProgress: updateSlidesProgress,\n    updateProgress: updateProgress,\n    updateSlidesClasses: updateSlidesClasses,\n    updateActiveIndex: updateActiveIndex,\n    updateClickedSlide: updateClickedSlide,\n  };\n\n  function getTranslate (axis) {\n    if ( axis === void 0 ) axis = this.isHorizontal() ? 'x' : 'y';\n\n    var swiper = this;\n\n    var params = swiper.params;\n    var rtl = swiper.rtlTranslate;\n    var translate = swiper.translate;\n    var $wrapperEl = swiper.$wrapperEl;\n\n    if (params.virtualTranslate) {\n      return rtl ? -translate : translate;\n    }\n    if (params.cssMode) {\n      return translate;\n    }\n\n    var currentTranslate = Utils.getTranslate($wrapperEl[0], axis);\n    if (rtl) { currentTranslate = -currentTranslate; }\n\n    return currentTranslate || 0;\n  }\n\n  function setTranslate (translate, byController) {\n    var swiper = this;\n    var rtl = swiper.rtlTranslate;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n    var wrapperEl = swiper.wrapperEl;\n    var progress = swiper.progress;\n    var x = 0;\n    var y = 0;\n    var z = 0;\n\n    if (swiper.isHorizontal()) {\n      x = rtl ? -translate : translate;\n    } else {\n      y = translate;\n    }\n\n    if (params.roundLengths) {\n      x = Math.floor(x);\n      y = Math.floor(y);\n    }\n\n    if (params.cssMode) {\n      wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n    } else if (!params.virtualTranslate) {\n      $wrapperEl.transform((\"translate3d(\" + x + \"px, \" + y + \"px, \" + z + \"px)\"));\n    }\n    swiper.previousTranslate = swiper.translate;\n    swiper.translate = swiper.isHorizontal() ? x : y;\n\n    // Check if we need to update progress\n    var newProgress;\n    var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n    if (translatesDiff === 0) {\n      newProgress = 0;\n    } else {\n      newProgress = (translate - swiper.minTranslate()) / (translatesDiff);\n    }\n    if (newProgress !== progress) {\n      swiper.updateProgress(translate);\n    }\n\n    swiper.emit('setTranslate', swiper.translate, byController);\n  }\n\n  function minTranslate () {\n    return (-this.snapGrid[0]);\n  }\n\n  function maxTranslate () {\n    return (-this.snapGrid[this.snapGrid.length - 1]);\n  }\n\n  function translateTo (translate, speed, runCallbacks, translateBounds, internal) {\n    var obj;\n\n    if ( translate === void 0 ) translate = 0;\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n    if ( translateBounds === void 0 ) translateBounds = true;\n    var swiper = this;\n\n    var params = swiper.params;\n    var wrapperEl = swiper.wrapperEl;\n\n    if (swiper.animating &amp;&amp; params.preventInteractionOnTransition) {\n      return false;\n    }\n\n    var minTranslate = swiper.minTranslate();\n    var maxTranslate = swiper.maxTranslate();\n    var newTranslate;\n    if (translateBounds &amp;&amp; translate &gt; minTranslate) { newTranslate = minTranslate; }\n    else if (translateBounds &amp;&amp; translate &lt; maxTranslate) { newTranslate = maxTranslate; }\n    else { newTranslate = translate; }\n\n    // Update progress\n    swiper.updateProgress(newTranslate);\n\n    if (params.cssMode) {\n      var isH = swiper.isHorizontal();\n      if (speed === 0) {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n      } else {\n        // eslint-disable-next-line\n        if (wrapperEl.scrollTo) {\n          wrapperEl.scrollTo(( obj = {}, obj[isH ? 'left' : 'top'] = -newTranslate, obj.behavior = 'smooth', obj ));\n        } else {\n          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n        }\n      }\n      return true;\n    }\n\n    if (speed === 0) {\n      swiper.setTransition(0);\n      swiper.setTranslate(newTranslate);\n      if (runCallbacks) {\n        swiper.emit('beforeTransitionStart', speed, internal);\n        swiper.emit('transitionEnd');\n      }\n    } else {\n      swiper.setTransition(speed);\n      swiper.setTranslate(newTranslate);\n      if (runCallbacks) {\n        swiper.emit('beforeTransitionStart', speed, internal);\n        swiper.emit('transitionStart');\n      }\n      if (!swiper.animating) {\n        swiper.animating = true;\n        if (!swiper.onTranslateToWrapperTransitionEnd) {\n          swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n            if (!swiper || swiper.destroyed) { return; }\n            if (e.target !== this) { return; }\n            swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n            swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n            swiper.onTranslateToWrapperTransitionEnd = null;\n            delete swiper.onTranslateToWrapperTransitionEnd;\n            if (runCallbacks) {\n              swiper.emit('transitionEnd');\n            }\n          };\n        }\n        swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n        swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n      }\n    }\n\n    return true;\n  }\n\n  var translate = {\n    getTranslate: getTranslate,\n    setTranslate: setTranslate,\n    minTranslate: minTranslate,\n    maxTranslate: maxTranslate,\n    translateTo: translateTo,\n  };\n\n  function setTransition (duration, byController) {\n    var swiper = this;\n\n    if (!swiper.params.cssMode) {\n      swiper.$wrapperEl.transition(duration);\n    }\n\n    swiper.emit('setTransition', duration, byController);\n  }\n\n  function transitionStart (runCallbacks, direction) {\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    var activeIndex = swiper.activeIndex;\n    var params = swiper.params;\n    var previousIndex = swiper.previousIndex;\n    if (params.cssMode) { return; }\n    if (params.autoHeight) {\n      swiper.updateAutoHeight();\n    }\n\n    var dir = direction;\n    if (!dir) {\n      if (activeIndex &gt; previousIndex) { dir = 'next'; }\n      else if (activeIndex &lt; previousIndex) { dir = 'prev'; }\n      else { dir = 'reset'; }\n    }\n\n    swiper.emit('transitionStart');\n\n    if (runCallbacks &amp;&amp; activeIndex !== previousIndex) {\n      if (dir === 'reset') {\n        swiper.emit('slideResetTransitionStart');\n        return;\n      }\n      swiper.emit('slideChangeTransitionStart');\n      if (dir === 'next') {\n        swiper.emit('slideNextTransitionStart');\n      } else {\n        swiper.emit('slidePrevTransitionStart');\n      }\n    }\n  }\n\n  function transitionEnd$1 (runCallbacks, direction) {\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    var activeIndex = swiper.activeIndex;\n    var previousIndex = swiper.previousIndex;\n    var params = swiper.params;\n    swiper.animating = false;\n    if (params.cssMode) { return; }\n    swiper.setTransition(0);\n\n    var dir = direction;\n    if (!dir) {\n      if (activeIndex &gt; previousIndex) { dir = 'next'; }\n      else if (activeIndex &lt; previousIndex) { dir = 'prev'; }\n      else { dir = 'reset'; }\n    }\n\n    swiper.emit('transitionEnd');\n\n    if (runCallbacks &amp;&amp; activeIndex !== previousIndex) {\n      if (dir === 'reset') {\n        swiper.emit('slideResetTransitionEnd');\n        return;\n      }\n      swiper.emit('slideChangeTransitionEnd');\n      if (dir === 'next') {\n        swiper.emit('slideNextTransitionEnd');\n      } else {\n        swiper.emit('slidePrevTransitionEnd');\n      }\n    }\n  }\n\n  var transition$1 = {\n    setTransition: setTransition,\n    transitionStart: transitionStart,\n    transitionEnd: transitionEnd$1,\n  };\n\n  function slideTo (index, speed, runCallbacks, internal) {\n    var obj;\n\n    if ( index === void 0 ) index = 0;\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n    var swiper = this;\n    var slideIndex = index;\n    if (slideIndex &lt; 0) { slideIndex = 0; }\n\n    var params = swiper.params;\n    var snapGrid = swiper.snapGrid;\n    var slidesGrid = swiper.slidesGrid;\n    var previousIndex = swiper.previousIndex;\n    var activeIndex = swiper.activeIndex;\n    var rtl = swiper.rtlTranslate;\n    var wrapperEl = swiper.wrapperEl;\n    if (swiper.animating &amp;&amp; params.preventInteractionOnTransition) {\n      return false;\n    }\n\n    var skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n    var snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n    if (snapIndex &gt;= snapGrid.length) { snapIndex = snapGrid.length - 1; }\n\n    if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) &amp;&amp; runCallbacks) {\n      swiper.emit('beforeSlideChangeStart');\n    }\n\n    var translate = -snapGrid[snapIndex];\n\n    // Update progress\n    swiper.updateProgress(translate);\n\n    // Normalize slideIndex\n    if (params.normalizeSlideIndex) {\n      for (var i = 0; i &lt; slidesGrid.length; i += 1) {\n        if (-Math.floor(translate * 100) &gt;= Math.floor(slidesGrid[i] * 100)) {\n          slideIndex = i;\n        }\n      }\n    }\n    // Directions locks\n    if (swiper.initialized &amp;&amp; slideIndex !== activeIndex) {\n      if (!swiper.allowSlideNext &amp;&amp; translate &lt; swiper.translate &amp;&amp; translate &lt; swiper.minTranslate()) {\n        return false;\n      }\n      if (!swiper.allowSlidePrev &amp;&amp; translate &gt; swiper.translate &amp;&amp; translate &gt; swiper.maxTranslate()) {\n        if ((activeIndex || 0) !== slideIndex) { return false; }\n      }\n    }\n\n    var direction;\n    if (slideIndex &gt; activeIndex) { direction = 'next'; }\n    else if (slideIndex &lt; activeIndex) { direction = 'prev'; }\n    else { direction = 'reset'; }\n\n\n    // Update Index\n    if ((rtl &amp;&amp; -translate === swiper.translate) || (!rtl &amp;&amp; translate === swiper.translate)) {\n      swiper.updateActiveIndex(slideIndex);\n      // Update Height\n      if (params.autoHeight) {\n        swiper.updateAutoHeight();\n      }\n      swiper.updateSlidesClasses();\n      if (params.effect !== 'slide') {\n        swiper.setTranslate(translate);\n      }\n      if (direction !== 'reset') {\n        swiper.transitionStart(runCallbacks, direction);\n        swiper.transitionEnd(runCallbacks, direction);\n      }\n      return false;\n    }\n    if (params.cssMode) {\n      var isH = swiper.isHorizontal();\n      if (speed === 0) {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -translate;\n      } else {\n        // eslint-disable-next-line\n        if (wrapperEl.scrollTo) {\n          wrapperEl.scrollTo(( obj = {}, obj[isH ? 'left' : 'top'] = -translate, obj.behavior = 'smooth', obj ));\n        } else {\n          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -translate;\n        }\n      }\n      return true;\n    }\n\n    if (speed === 0) {\n      swiper.setTransition(0);\n      swiper.setTranslate(translate);\n      swiper.updateActiveIndex(slideIndex);\n      swiper.updateSlidesClasses();\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.transitionStart(runCallbacks, direction);\n      swiper.transitionEnd(runCallbacks, direction);\n    } else {\n      swiper.setTransition(speed);\n      swiper.setTranslate(translate);\n      swiper.updateActiveIndex(slideIndex);\n      swiper.updateSlidesClasses();\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.transitionStart(runCallbacks, direction);\n      if (!swiper.animating) {\n        swiper.animating = true;\n        if (!swiper.onSlideToWrapperTransitionEnd) {\n          swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n            if (!swiper || swiper.destroyed) { return; }\n            if (e.target !== this) { return; }\n            swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n            swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n            swiper.onSlideToWrapperTransitionEnd = null;\n            delete swiper.onSlideToWrapperTransitionEnd;\n            swiper.transitionEnd(runCallbacks, direction);\n          };\n        }\n        swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n        swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n      }\n    }\n\n    return true;\n  }\n\n  function slideToLoop (index, speed, runCallbacks, internal) {\n    if ( index === void 0 ) index = 0;\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    var newIndex = index;\n    if (swiper.params.loop) {\n      newIndex += swiper.loopedSlides;\n    }\n\n    return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n  }\n\n  /* eslint no-unused-vars: \"off\" */\n  function slideNext (speed, runCallbacks, internal) {\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    var params = swiper.params;\n    var animating = swiper.animating;\n    var increment = swiper.activeIndex &lt; params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;\n    if (params.loop) {\n      if (animating) { return false; }\n      swiper.loopFix();\n      // eslint-disable-next-line\n      swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n    }\n    return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n  }\n\n  /* eslint no-unused-vars: \"off\" */\n  function slidePrev (speed, runCallbacks, internal) {\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    var params = swiper.params;\n    var animating = swiper.animating;\n    var snapGrid = swiper.snapGrid;\n    var slidesGrid = swiper.slidesGrid;\n    var rtlTranslate = swiper.rtlTranslate;\n\n    if (params.loop) {\n      if (animating) { return false; }\n      swiper.loopFix();\n      // eslint-disable-next-line\n      swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n    }\n    var translate = rtlTranslate ? swiper.translate : -swiper.translate;\n    function normalize(val) {\n      if (val &lt; 0) { return -Math.floor(Math.abs(val)); }\n      return Math.floor(val);\n    }\n    var normalizedTranslate = normalize(translate);\n    var normalizedSnapGrid = snapGrid.map(function (val) { return normalize(val); });\n    var normalizedSlidesGrid = slidesGrid.map(function (val) { return normalize(val); });\n\n    var currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];\n    var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n    if (typeof prevSnap === 'undefined' &amp;&amp; params.cssMode) {\n      snapGrid.forEach(function (snap) {\n        if (!prevSnap &amp;&amp; normalizedTranslate &gt;= snap) { prevSnap = snap; }\n      });\n    }\n    var prevIndex;\n    if (typeof prevSnap !== 'undefined') {\n      prevIndex = slidesGrid.indexOf(prevSnap);\n      if (prevIndex &lt; 0) { prevIndex = swiper.activeIndex - 1; }\n    }\n    return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n  }\n\n  /* eslint no-unused-vars: \"off\" */\n  function slideReset (speed, runCallbacks, internal) {\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n\n    var swiper = this;\n    return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n  }\n\n  /* eslint no-unused-vars: \"off\" */\n  function slideToClosest (speed, runCallbacks, internal, threshold) {\n    if ( speed === void 0 ) speed = this.params.speed;\n    if ( runCallbacks === void 0 ) runCallbacks = true;\n    if ( threshold === void 0 ) threshold = 0.5;\n\n    var swiper = this;\n    var index = swiper.activeIndex;\n    var skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n    var snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n\n    var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n    if (translate &gt;= swiper.snapGrid[snapIndex]) {\n      // The current translate is on or after the current snap index, so the choice\n      // is between the current index and the one after it.\n      var currentSnap = swiper.snapGrid[snapIndex];\n      var nextSnap = swiper.snapGrid[snapIndex + 1];\n      if ((translate - currentSnap) &gt; (nextSnap - currentSnap) * threshold) {\n        index += swiper.params.slidesPerGroup;\n      }\n    } else {\n      // The current translate is before the current snap index, so the choice\n      // is between the current index and the one before it.\n      var prevSnap = swiper.snapGrid[snapIndex - 1];\n      var currentSnap$1 = swiper.snapGrid[snapIndex];\n      if ((translate - prevSnap) &lt;= (currentSnap$1 - prevSnap) * threshold) {\n        index -= swiper.params.slidesPerGroup;\n      }\n    }\n    index = Math.max(index, 0);\n    index = Math.min(index, swiper.slidesGrid.length - 1);\n\n    return swiper.slideTo(index, speed, runCallbacks, internal);\n  }\n\n  function slideToClickedSlide () {\n    var swiper = this;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n\n    var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n    var slideToIndex = swiper.clickedIndex;\n    var realIndex;\n    if (params.loop) {\n      if (swiper.animating) { return; }\n      realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n      if (params.centeredSlides) {\n        if (\n          (slideToIndex &lt; swiper.loopedSlides - (slidesPerView / 2))\n          || (slideToIndex &gt; (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2))\n        ) {\n          swiper.loopFix();\n          slideToIndex = $wrapperEl\n            .children((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]:not(.\" + (params.slideDuplicateClass) + \")\"))\n            .eq(0)\n            .index();\n\n          Utils.nextTick(function () {\n            swiper.slideTo(slideToIndex);\n          });\n        } else {\n          swiper.slideTo(slideToIndex);\n        }\n      } else if (slideToIndex &gt; swiper.slides.length - slidesPerView) {\n        swiper.loopFix();\n        slideToIndex = $wrapperEl\n          .children((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]:not(.\" + (params.slideDuplicateClass) + \")\"))\n          .eq(0)\n          .index();\n\n        Utils.nextTick(function () {\n          swiper.slideTo(slideToIndex);\n        });\n      } else {\n        swiper.slideTo(slideToIndex);\n      }\n    } else {\n      swiper.slideTo(slideToIndex);\n    }\n  }\n\n  var slide = {\n    slideTo: slideTo,\n    slideToLoop: slideToLoop,\n    slideNext: slideNext,\n    slidePrev: slidePrev,\n    slideReset: slideReset,\n    slideToClosest: slideToClosest,\n    slideToClickedSlide: slideToClickedSlide,\n  };\n\n  function loopCreate () {\n    var swiper = this;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n    // Remove duplicated slides\n    $wrapperEl.children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass))).remove();\n\n    var slides = $wrapperEl.children((\".\" + (params.slideClass)));\n\n    if (params.loopFillGroupWithBlank) {\n      var blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);\n      if (blankSlidesNum !== params.slidesPerGroup) {\n        for (var i = 0; i &lt; blankSlidesNum; i += 1) {\n          var blankNode = $(doc.createElement('div')).addClass(((params.slideClass) + \" \" + (params.slideBlankClass)));\n          $wrapperEl.append(blankNode);\n        }\n        slides = $wrapperEl.children((\".\" + (params.slideClass)));\n      }\n    }\n\n    if (params.slidesPerView === 'auto' &amp;&amp; !params.loopedSlides) { params.loopedSlides = slides.length; }\n\n    swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n    swiper.loopedSlides += params.loopAdditionalSlides;\n    if (swiper.loopedSlides &gt; slides.length) {\n      swiper.loopedSlides = slides.length;\n    }\n\n    var prependSlides = [];\n    var appendSlides = [];\n    slides.each(function (index, el) {\n      var slide = $(el);\n      if (index &lt; swiper.loopedSlides) { appendSlides.push(el); }\n      if (index &lt; slides.length &amp;&amp; index &gt;= slides.length - swiper.loopedSlides) { prependSlides.push(el); }\n      slide.attr('data-swiper-slide-index', index);\n    });\n    for (var i$1 = 0; i$1 &lt; appendSlides.length; i$1 += 1) {\n      $wrapperEl.append($(appendSlides[i$1].cloneNode(true)).addClass(params.slideDuplicateClass));\n    }\n    for (var i$2 = prependSlides.length - 1; i$2 &gt;= 0; i$2 -= 1) {\n      $wrapperEl.prepend($(prependSlides[i$2].cloneNode(true)).addClass(params.slideDuplicateClass));\n    }\n  }\n\n  function loopFix () {\n    var swiper = this;\n\n    swiper.emit('beforeLoopFix');\n\n    var activeIndex = swiper.activeIndex;\n    var slides = swiper.slides;\n    var loopedSlides = swiper.loopedSlides;\n    var allowSlidePrev = swiper.allowSlidePrev;\n    var allowSlideNext = swiper.allowSlideNext;\n    var snapGrid = swiper.snapGrid;\n    var rtl = swiper.rtlTranslate;\n    var newIndex;\n    swiper.allowSlidePrev = true;\n    swiper.allowSlideNext = true;\n\n    var snapTranslate = -snapGrid[activeIndex];\n    var diff = snapTranslate - swiper.getTranslate();\n\n    // Fix For Negative Oversliding\n    if (activeIndex &lt; loopedSlides) {\n      newIndex = (slides.length - (loopedSlides * 3)) + activeIndex;\n      newIndex += loopedSlides;\n      var slideChanged = swiper.slideTo(newIndex, 0, false, true);\n      if (slideChanged &amp;&amp; diff !== 0) {\n        swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n      }\n    } else if (activeIndex &gt;= slides.length - loopedSlides) {\n      // Fix For Positive Oversliding\n      newIndex = -slides.length + activeIndex + loopedSlides;\n      newIndex += loopedSlides;\n      var slideChanged$1 = swiper.slideTo(newIndex, 0, false, true);\n      if (slideChanged$1 &amp;&amp; diff !== 0) {\n        swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n      }\n    }\n    swiper.allowSlidePrev = allowSlidePrev;\n    swiper.allowSlideNext = allowSlideNext;\n\n    swiper.emit('loopFix');\n  }\n\n  function loopDestroy () {\n    var swiper = this;\n    var $wrapperEl = swiper.$wrapperEl;\n    var params = swiper.params;\n    var slides = swiper.slides;\n    $wrapperEl.children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \",.\" + (params.slideClass) + \".\" + (params.slideBlankClass))).remove();\n    slides.removeAttr('data-swiper-slide-index');\n  }\n\n  var loop = {\n    loopCreate: loopCreate,\n    loopFix: loopFix,\n    loopDestroy: loopDestroy,\n  };\n\n  function setGrabCursor (moving) {\n    var swiper = this;\n    if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow &amp;&amp; swiper.isLocked) || swiper.params.cssMode) { return; }\n    var el = swiper.el;\n    el.style.cursor = 'move';\n    el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n    el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n    el.style.cursor = moving ? 'grabbing' : 'grab';\n  }\n\n  function unsetGrabCursor () {\n    var swiper = this;\n    if (Support.touch || (swiper.params.watchOverflow &amp;&amp; swiper.isLocked) || swiper.params.cssMode) { return; }\n    swiper.el.style.cursor = '';\n  }\n\n  var grabCursor = {\n    setGrabCursor: setGrabCursor,\n    unsetGrabCursor: unsetGrabCursor,\n  };\n\n  function appendSlide (slides) {\n    var swiper = this;\n    var $wrapperEl = swiper.$wrapperEl;\n    var params = swiper.params;\n    if (params.loop) {\n      swiper.loopDestroy();\n    }\n    if (typeof slides === 'object' &amp;&amp; 'length' in slides) {\n      for (var i = 0; i &lt; slides.length; i += 1) {\n        if (slides[i]) { $wrapperEl.append(slides[i]); }\n      }\n    } else {\n      $wrapperEl.append(slides);\n    }\n    if (params.loop) {\n      swiper.loopCreate();\n    }\n    if (!(params.observer &amp;&amp; Support.observer)) {\n      swiper.update();\n    }\n  }\n\n  function prependSlide (slides) {\n    var swiper = this;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n    var activeIndex = swiper.activeIndex;\n\n    if (params.loop) {\n      swiper.loopDestroy();\n    }\n    var newActiveIndex = activeIndex + 1;\n    if (typeof slides === 'object' &amp;&amp; 'length' in slides) {\n      for (var i = 0; i &lt; slides.length; i += 1) {\n        if (slides[i]) { $wrapperEl.prepend(slides[i]); }\n      }\n      newActiveIndex = activeIndex + slides.length;\n    } else {\n      $wrapperEl.prepend(slides);\n    }\n    if (params.loop) {\n      swiper.loopCreate();\n    }\n    if (!(params.observer &amp;&amp; Support.observer)) {\n      swiper.update();\n    }\n    swiper.slideTo(newActiveIndex, 0, false);\n  }\n\n  function addSlide (index, slides) {\n    var swiper = this;\n    var $wrapperEl = swiper.$wrapperEl;\n    var params = swiper.params;\n    var activeIndex = swiper.activeIndex;\n    var activeIndexBuffer = activeIndex;\n    if (params.loop) {\n      activeIndexBuffer -= swiper.loopedSlides;\n      swiper.loopDestroy();\n      swiper.slides = $wrapperEl.children((\".\" + (params.slideClass)));\n    }\n    var baseLength = swiper.slides.length;\n    if (index &lt;= 0) {\n      swiper.prependSlide(slides);\n      return;\n    }\n    if (index &gt;= baseLength) {\n      swiper.appendSlide(slides);\n      return;\n    }\n    var newActiveIndex = activeIndexBuffer &gt; index ? activeIndexBuffer + 1 : activeIndexBuffer;\n\n    var slidesBuffer = [];\n    for (var i = baseLength - 1; i &gt;= index; i -= 1) {\n      var currentSlide = swiper.slides.eq(i);\n      currentSlide.remove();\n      slidesBuffer.unshift(currentSlide);\n    }\n\n    if (typeof slides === 'object' &amp;&amp; 'length' in slides) {\n      for (var i$1 = 0; i$1 &lt; slides.length; i$1 += 1) {\n        if (slides[i$1]) { $wrapperEl.append(slides[i$1]); }\n      }\n      newActiveIndex = activeIndexBuffer &gt; index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n    } else {\n      $wrapperEl.append(slides);\n    }\n\n    for (var i$2 = 0; i$2 &lt; slidesBuffer.length; i$2 += 1) {\n      $wrapperEl.append(slidesBuffer[i$2]);\n    }\n\n    if (params.loop) {\n      swiper.loopCreate();\n    }\n    if (!(params.observer &amp;&amp; Support.observer)) {\n      swiper.update();\n    }\n    if (params.loop) {\n      swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n    } else {\n      swiper.slideTo(newActiveIndex, 0, false);\n    }\n  }\n\n  function removeSlide (slidesIndexes) {\n    var swiper = this;\n    var params = swiper.params;\n    var $wrapperEl = swiper.$wrapperEl;\n    var activeIndex = swiper.activeIndex;\n\n    var activeIndexBuffer = activeIndex;\n    if (params.loop) {\n      activeIndexBuffer -= swiper.loopedSlides;\n      swiper.loopDestroy();\n      swiper.slides = $wrapperEl.children((\".\" + (params.slideClass)));\n    }\n    var newActiveIndex = activeIndexBuffer;\n    var indexToRemove;\n\n    if (typeof slidesIndexes === 'object' &amp;&amp; 'length' in slidesIndexes) {\n      for (var i = 0; i &lt; slidesIndexes.length; i += 1) {\n        indexToRemove = slidesIndexes[i];\n        if (swiper.slides[indexToRemove]) { swiper.slides.eq(indexToRemove).remove(); }\n        if (indexToRemove &lt; newActiveIndex) { newActiveIndex -= 1; }\n      }\n      newActiveIndex = Math.max(newActiveIndex, 0);\n    } else {\n      indexToRemove = slidesIndexes;\n      if (swiper.slides[indexToRemove]) { swiper.slides.eq(indexToRemove).remove(); }\n      if (indexToRemove &lt; newActiveIndex) { newActiveIndex -= 1; }\n      newActiveIndex = Math.max(newActiveIndex, 0);\n    }\n\n    if (params.loop) {\n      swiper.loopCreate();\n    }\n\n    if (!(params.observer &amp;&amp; Support.observer)) {\n      swiper.update();\n    }\n    if (params.loop) {\n      swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n    } else {\n      swiper.slideTo(newActiveIndex, 0, false);\n    }\n  }\n\n  function removeAllSlides () {\n    var swiper = this;\n\n    var slidesIndexes = [];\n    for (var i = 0; i &lt; swiper.slides.length; i += 1) {\n      slidesIndexes.push(i);\n    }\n    swiper.removeSlide(slidesIndexes);\n  }\n\n  var manipulation = {\n    appendSlide: appendSlide,\n    prependSlide: prependSlide,\n    addSlide: addSlide,\n    removeSlide: removeSlide,\n    removeAllSlides: removeAllSlides,\n  };\n\n  var Device = (function Device() {\n    var platform = win.navigator.platform;\n    var ua = win.navigator.userAgent;\n\n    var device = {\n      ios: false,\n      android: false,\n      androidChrome: false,\n      desktop: false,\n      iphone: false,\n      ipod: false,\n      ipad: false,\n      edge: false,\n      ie: false,\n      firefox: false,\n      macos: false,\n      windows: false,\n      cordova: !!(win.cordova || win.phonegap),\n      phonegap: !!(win.cordova || win.phonegap),\n      electron: false,\n    };\n\n    var screenWidth = win.screen.width;\n    var screenHeight = win.screen.height;\n\n    var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n    var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n    var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n    var iphone = !ipad &amp;&amp; ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n    var ie = ua.indexOf('MSIE ') &gt;= 0 || ua.indexOf('Trident/') &gt;= 0;\n    var edge = ua.indexOf('Edge/') &gt;= 0;\n    var firefox = ua.indexOf('Gecko/') &gt;= 0 &amp;&amp; ua.indexOf('Firefox/') &gt;= 0;\n    var windows = platform === 'Win32';\n    var electron = ua.toLowerCase().indexOf('electron') &gt;= 0;\n    var macos = platform === 'MacIntel';\n\n    // iPadOs 13 fix\n    if (!ipad\n      &amp;&amp; macos\n      &amp;&amp; Support.touch\n      &amp;&amp; (\n        (screenWidth === 1024 &amp;&amp; screenHeight === 1366) // Pro 12.9\n        || (screenWidth === 834 &amp;&amp; screenHeight === 1194) // Pro 11\n        || (screenWidth === 834 &amp;&amp; screenHeight === 1112) // Pro 10.5\n        || (screenWidth === 768 &amp;&amp; screenHeight === 1024) // other\n      )\n    ) {\n      ipad = ua.match(/(Version)\\/([\\d.]+)/);\n      macos = false;\n    }\n\n    device.ie = ie;\n    device.edge = edge;\n    device.firefox = firefox;\n\n    // Android\n    if (android &amp;&amp; !windows) {\n      device.os = 'android';\n      device.osVersion = android[2];\n      device.android = true;\n      device.androidChrome = ua.toLowerCase().indexOf('chrome') &gt;= 0;\n    }\n    if (ipad || iphone || ipod) {\n      device.os = 'ios';\n      device.ios = true;\n    }\n    // iOS\n    if (iphone &amp;&amp; !ipod) {\n      device.osVersion = iphone[2].replace(/_/g, '.');\n      device.iphone = true;\n    }\n    if (ipad) {\n      device.osVersion = ipad[2].replace(/_/g, '.');\n      device.ipad = true;\n    }\n    if (ipod) {\n      device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n      device.ipod = true;\n    }\n    // iOS 8+ changed UA\n    if (device.ios &amp;&amp; device.osVersion &amp;&amp; ua.indexOf('Version/') &gt;= 0) {\n      if (device.osVersion.split('.')[0] === '10') {\n        device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\n      }\n    }\n\n    // Webview\n    device.webView = !!((iphone || ipad || ipod) &amp;&amp; (ua.match(/.*AppleWebKit(?!.*Safari)/i) || win.navigator.standalone))\n      || (win.matchMedia &amp;&amp; win.matchMedia('(display-mode: standalone)').matches);\n    device.webview = device.webView;\n    device.standalone = device.webView;\n\n    // Desktop\n    device.desktop = !(device.ios || device.android) || electron;\n    if (device.desktop) {\n      device.electron = electron;\n      device.macos = macos;\n      device.windows = windows;\n      if (device.macos) {\n        device.os = 'macos';\n      }\n      if (device.windows) {\n        device.os = 'windows';\n      }\n    }\n\n    // Pixel Ratio\n    device.pixelRatio = win.devicePixelRatio || 1;\n\n    // Export object\n    return device;\n  }());\n\n  function onTouchStart (event) {\n    var swiper = this;\n    var data = swiper.touchEventsData;\n    var params = swiper.params;\n    var touches = swiper.touches;\n\n    if (swiper.animating &amp;&amp; params.preventInteractionOnTransition) {\n      return;\n    }\n    var e = event;\n    if (e.originalEvent) { e = e.originalEvent; }\n    var $targetEl = $(e.target);\n\n    if (params.touchEventsTarget === 'wrapper') {\n      if (!$targetEl.closest(swiper.wrapperEl).length) { return; }\n    }\n    data.isTouchEvent = e.type === 'touchstart';\n    if (!data.isTouchEvent &amp;&amp; 'which' in e &amp;&amp; e.which === 3) { return; }\n    if (!data.isTouchEvent &amp;&amp; 'button' in e &amp;&amp; e.button &gt; 0) { return; }\n    if (data.isTouched &amp;&amp; data.isMoved) { return; }\n    if (params.noSwiping &amp;&amp; $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : (\".\" + (params.noSwipingClass)))[0]) {\n      swiper.allowClick = true;\n      return;\n    }\n    if (params.swipeHandler) {\n      if (!$targetEl.closest(params.swipeHandler)[0]) { return; }\n    }\n\n    touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n    touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n    var startX = touches.currentX;\n    var startY = touches.currentY;\n\n    // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n\n    var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n    var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n    if (\n      edgeSwipeDetection\n      &amp;&amp; ((startX &lt;= edgeSwipeThreshold)\n      || (startX &gt;= win.screen.width - edgeSwipeThreshold))\n    ) {\n      return;\n    }\n\n    Utils.extend(data, {\n      isTouched: true,\n      isMoved: false,\n      allowTouchCallbacks: true,\n      isScrolling: undefined,\n      startMoving: undefined,\n    });\n\n    touches.startX = startX;\n    touches.startY = startY;\n    data.touchStartTime = Utils.now();\n    swiper.allowClick = true;\n    swiper.updateSize();\n    swiper.swipeDirection = undefined;\n    if (params.threshold &gt; 0) { data.allowThresholdMove = false; }\n    if (e.type !== 'touchstart') {\n      var preventDefault = true;\n      if ($targetEl.is(data.formElements)) { preventDefault = false; }\n      if (\n        doc.activeElement\n        &amp;&amp; $(doc.activeElement).is(data.formElements)\n        &amp;&amp; doc.activeElement !== $targetEl[0]\n      ) {\n        doc.activeElement.blur();\n      }\n\n      var shouldPreventDefault = preventDefault &amp;&amp; swiper.allowTouchMove &amp;&amp; params.touchStartPreventDefault;\n      if (params.touchStartForcePreventDefault || shouldPreventDefault) {\n        e.preventDefault();\n      }\n    }\n    swiper.emit('touchStart', e);\n  }\n\n  function onTouchMove (event) {\n    var swiper = this;\n    var data = swiper.touchEventsData;\n    var params = swiper.params;\n    var touches = swiper.touches;\n    var rtl = swiper.rtlTranslate;\n    var e = event;\n    if (e.originalEvent) { e = e.originalEvent; }\n    if (!data.isTouched) {\n      if (data.startMoving &amp;&amp; data.isScrolling) {\n        swiper.emit('touchMoveOpposite', e);\n      }\n      return;\n    }\n    if (data.isTouchEvent &amp;&amp; e.type === 'mousemove') { return; }\n    var targetTouch = e.type === 'touchmove' &amp;&amp; e.targetTouches &amp;&amp; (e.targetTouches[0] || e.changedTouches[0]);\n    var pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n    var pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n    if (e.preventedByNestedSwiper) {\n      touches.startX = pageX;\n      touches.startY = pageY;\n      return;\n    }\n    if (!swiper.allowTouchMove) {\n      // isMoved = true;\n      swiper.allowClick = false;\n      if (data.isTouched) {\n        Utils.extend(touches, {\n          startX: pageX,\n          startY: pageY,\n          currentX: pageX,\n          currentY: pageY,\n        });\n        data.touchStartTime = Utils.now();\n      }\n      return;\n    }\n    if (data.isTouchEvent &amp;&amp; params.touchReleaseOnEdges &amp;&amp; !params.loop) {\n      if (swiper.isVertical()) {\n        // Vertical\n        if (\n          (pageY &lt; touches.startY &amp;&amp; swiper.translate &lt;= swiper.maxTranslate())\n          || (pageY &gt; touches.startY &amp;&amp; swiper.translate &gt;= swiper.minTranslate())\n        ) {\n          data.isTouched = false;\n          data.isMoved = false;\n          return;\n        }\n      } else if (\n        (pageX &lt; touches.startX &amp;&amp; swiper.translate &lt;= swiper.maxTranslate())\n        || (pageX &gt; touches.startX &amp;&amp; swiper.translate &gt;= swiper.minTranslate())\n      ) {\n        return;\n      }\n    }\n    if (data.isTouchEvent &amp;&amp; doc.activeElement) {\n      if (e.target === doc.activeElement &amp;&amp; $(e.target).is(data.formElements)) {\n        data.isMoved = true;\n        swiper.allowClick = false;\n        return;\n      }\n    }\n    if (data.allowTouchCallbacks) {\n      swiper.emit('touchMove', e);\n    }\n    if (e.targetTouches &amp;&amp; e.targetTouches.length &gt; 1) { return; }\n\n    touches.currentX = pageX;\n    touches.currentY = pageY;\n\n    var diffX = touches.currentX - touches.startX;\n    var diffY = touches.currentY - touches.startY;\n    if (swiper.params.threshold &amp;&amp; Math.sqrt((Math.pow( diffX, 2 )) + (Math.pow( diffY, 2 ))) &lt; swiper.params.threshold) { return; }\n\n    if (typeof data.isScrolling === 'undefined') {\n      var touchAngle;\n      if ((swiper.isHorizontal() &amp;&amp; touches.currentY === touches.startY) || (swiper.isVertical() &amp;&amp; touches.currentX === touches.startX)) {\n        data.isScrolling = false;\n      } else {\n        // eslint-disable-next-line\n        if ((diffX * diffX) + (diffY * diffY) &gt;= 25) {\n          touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;\n          data.isScrolling = swiper.isHorizontal() ? touchAngle &gt; params.touchAngle : (90 - touchAngle &gt; params.touchAngle);\n        }\n      }\n    }\n    if (data.isScrolling) {\n      swiper.emit('touchMoveOpposite', e);\n    }\n    if (typeof data.startMoving === 'undefined') {\n      if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n        data.startMoving = true;\n      }\n    }\n    if (data.isScrolling) {\n      data.isTouched = false;\n      return;\n    }\n    if (!data.startMoving) {\n      return;\n    }\n    swiper.allowClick = false;\n    if (!params.cssMode) {\n      e.preventDefault();\n    }\n    if (params.touchMoveStopPropagation &amp;&amp; !params.nested) {\n      e.stopPropagation();\n    }\n\n    if (!data.isMoved) {\n      if (params.loop) {\n        swiper.loopFix();\n      }\n      data.startTranslate = swiper.getTranslate();\n      swiper.setTransition(0);\n      if (swiper.animating) {\n        swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n      }\n      data.allowMomentumBounce = false;\n      // Grab Cursor\n      if (params.grabCursor &amp;&amp; (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n        swiper.setGrabCursor(true);\n      }\n      swiper.emit('sliderFirstMove', e);\n    }\n    swiper.emit('sliderMove', e);\n    data.isMoved = true;\n\n    var diff = swiper.isHorizontal() ? diffX : diffY;\n    touches.diff = diff;\n\n    diff *= params.touchRatio;\n    if (rtl) { diff = -diff; }\n\n    swiper.swipeDirection = diff &gt; 0 ? 'prev' : 'next';\n    data.currentTranslate = diff + data.startTranslate;\n\n    var disableParentSwiper = true;\n    var resistanceRatio = params.resistanceRatio;\n    if (params.touchReleaseOnEdges) {\n      resistanceRatio = 0;\n    }\n    if ((diff &gt; 0 &amp;&amp; data.currentTranslate &gt; swiper.minTranslate())) {\n      disableParentSwiper = false;\n      if (params.resistance) { data.currentTranslate = (swiper.minTranslate() - 1) + (Math.pow( (-swiper.minTranslate() + data.startTranslate + diff), resistanceRatio )); }\n    } else if (diff &lt; 0 &amp;&amp; data.currentTranslate &lt; swiper.maxTranslate()) {\n      disableParentSwiper = false;\n      if (params.resistance) { data.currentTranslate = (swiper.maxTranslate() + 1) - (Math.pow( (swiper.maxTranslate() - data.startTranslate - diff), resistanceRatio )); }\n    }\n\n    if (disableParentSwiper) {\n      e.preventedByNestedSwiper = true;\n    }\n\n    // Directions locks\n    if (!swiper.allowSlideNext &amp;&amp; swiper.swipeDirection === 'next' &amp;&amp; data.currentTranslate &lt; data.startTranslate) {\n      data.currentTranslate = data.startTranslate;\n    }\n    if (!swiper.allowSlidePrev &amp;&amp; swiper.swipeDirection === 'prev' &amp;&amp; data.currentTranslate &gt; data.startTranslate) {\n      data.currentTranslate = data.startTranslate;\n    }\n\n\n    // Threshold\n    if (params.threshold &gt; 0) {\n      if (Math.abs(diff) &gt; params.threshold || data.allowThresholdMove) {\n        if (!data.allowThresholdMove) {\n          data.allowThresholdMove = true;\n          touches.startX = touches.currentX;\n          touches.startY = touches.currentY;\n          data.currentTranslate = data.startTranslate;\n          touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n          return;\n        }\n      } else {\n        data.currentTranslate = data.startTranslate;\n        return;\n      }\n    }\n\n    if (!params.followFinger || params.cssMode) { return; }\n\n    // Update active index in free mode\n    if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n    if (params.freeMode) {\n      // Velocity\n      if (data.velocities.length === 0) {\n        data.velocities.push({\n          position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n          time: data.touchStartTime,\n        });\n      }\n      data.velocities.push({\n        position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n        time: Utils.now(),\n      });\n    }\n    // Update progress\n    swiper.updateProgress(data.currentTranslate);\n    // Update translate\n    swiper.setTranslate(data.currentTranslate);\n  }\n\n  function onTouchEnd (event) {\n    var swiper = this;\n    var data = swiper.touchEventsData;\n\n    var params = swiper.params;\n    var touches = swiper.touches;\n    var rtl = swiper.rtlTranslate;\n    var $wrapperEl = swiper.$wrapperEl;\n    var slidesGrid = swiper.slidesGrid;\n    var snapGrid = swiper.snapGrid;\n    var e = event;\n    if (e.originalEvent) { e = e.originalEvent; }\n    if (data.allowTouchCallbacks) {\n      swiper.emit('touchEnd', e);\n    }\n    data.allowTouchCallbacks = false;\n    if (!data.isTouched) {\n      if (data.isMoved &amp;&amp; params.grabCursor) {\n        swiper.setGrabCursor(false);\n      }\n      data.isMoved = false;\n      data.startMoving = false;\n      return;\n    }\n    // Return Grab Cursor\n    if (params.grabCursor &amp;&amp; data.isMoved &amp;&amp; data.isTouched &amp;&amp; (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n      swiper.setGrabCursor(false);\n    }\n\n    // Time diff\n    var touchEndTime = Utils.now();\n    var timeDiff = touchEndTime - data.touchStartTime;\n\n    // Tap, doubleTap, Click\n    if (swiper.allowClick) {\n      swiper.updateClickedSlide(e);\n      swiper.emit('tap click', e);\n      if (timeDiff &lt; 300 &amp;&amp; (touchEndTime - data.lastClickTime) &lt; 300) {\n        swiper.emit('doubleTap doubleClick', e);\n      }\n    }\n\n    data.lastClickTime = Utils.now();\n    Utils.nextTick(function () {\n      if (!swiper.destroyed) { swiper.allowClick = true; }\n    });\n\n    if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n      data.isTouched = false;\n      data.isMoved = false;\n      data.startMoving = false;\n      return;\n    }\n    data.isTouched = false;\n    data.isMoved = false;\n    data.startMoving = false;\n\n    var currentPos;\n    if (params.followFinger) {\n      currentPos = rtl ? swiper.translate : -swiper.translate;\n    } else {\n      currentPos = -data.currentTranslate;\n    }\n\n    if (params.cssMode) {\n      return;\n    }\n\n    if (params.freeMode) {\n      if (currentPos &lt; -swiper.minTranslate()) {\n        swiper.slideTo(swiper.activeIndex);\n        return;\n      }\n      if (currentPos &gt; -swiper.maxTranslate()) {\n        if (swiper.slides.length &lt; snapGrid.length) {\n          swiper.slideTo(snapGrid.length - 1);\n        } else {\n          swiper.slideTo(swiper.slides.length - 1);\n        }\n        return;\n      }\n\n      if (params.freeModeMomentum) {\n        if (data.velocities.length &gt; 1) {\n          var lastMoveEvent = data.velocities.pop();\n          var velocityEvent = data.velocities.pop();\n\n          var distance = lastMoveEvent.position - velocityEvent.position;\n          var time = lastMoveEvent.time - velocityEvent.time;\n          swiper.velocity = distance / time;\n          swiper.velocity /= 2;\n          if (Math.abs(swiper.velocity) &lt; params.freeModeMinimumVelocity) {\n            swiper.velocity = 0;\n          }\n          // this implies that the user stopped moving a finger then released.\n          // There would be no events with distance zero, so the last event is stale.\n          if (time &gt; 150 || (Utils.now() - lastMoveEvent.time) &gt; 300) {\n            swiper.velocity = 0;\n          }\n        } else {\n          swiper.velocity = 0;\n        }\n        swiper.velocity *= params.freeModeMomentumVelocityRatio;\n\n        data.velocities.length = 0;\n        var momentumDuration = 1000 * params.freeModeMomentumRatio;\n        var momentumDistance = swiper.velocity * momentumDuration;\n\n        var newPosition = swiper.translate + momentumDistance;\n        if (rtl) { newPosition = -newPosition; }\n\n        var doBounce = false;\n        var afterBouncePosition;\n        var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;\n        var needsLoopFix;\n        if (newPosition &lt; swiper.maxTranslate()) {\n          if (params.freeModeMomentumBounce) {\n            if (newPosition + swiper.maxTranslate() &lt; -bounceAmount) {\n              newPosition = swiper.maxTranslate() - bounceAmount;\n            }\n            afterBouncePosition = swiper.maxTranslate();\n            doBounce = true;\n            data.allowMomentumBounce = true;\n          } else {\n            newPosition = swiper.maxTranslate();\n          }\n          if (params.loop &amp;&amp; params.centeredSlides) { needsLoopFix = true; }\n        } else if (newPosition &gt; swiper.minTranslate()) {\n          if (params.freeModeMomentumBounce) {\n            if (newPosition - swiper.minTranslate() &gt; bounceAmount) {\n              newPosition = swiper.minTranslate() + bounceAmount;\n            }\n            afterBouncePosition = swiper.minTranslate();\n            doBounce = true;\n            data.allowMomentumBounce = true;\n          } else {\n            newPosition = swiper.minTranslate();\n          }\n          if (params.loop &amp;&amp; params.centeredSlides) { needsLoopFix = true; }\n        } else if (params.freeModeSticky) {\n          var nextSlide;\n          for (var j = 0; j &lt; snapGrid.length; j += 1) {\n            if (snapGrid[j] &gt; -newPosition) {\n              nextSlide = j;\n              break;\n            }\n          }\n\n          if (Math.abs(snapGrid[nextSlide] - newPosition) &lt; Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n            newPosition = snapGrid[nextSlide];\n          } else {\n            newPosition = snapGrid[nextSlide - 1];\n          }\n          newPosition = -newPosition;\n        }\n        if (needsLoopFix) {\n          swiper.once('transitionEnd', function () {\n            swiper.loopFix();\n          });\n        }\n        // Fix duration\n        if (swiper.velocity !== 0) {\n          if (rtl) {\n            momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n          } else {\n            momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n          }\n          if (params.freeModeSticky) {\n            // If freeModeSticky is active and the user ends a swipe with a slow-velocity\n            // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n            // It's easy to see this when simulating touch with mouse events. To fix this,\n            // limit single-slide swipes to the default slide duration. This also has the\n            // nice side effect of matching slide speed if the user stopped moving before\n            // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n            // For faster swipes, also apply limits (albeit higher ones).\n            var moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n            var currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n            if (moveDistance &lt; currentSlideSize) {\n              momentumDuration = params.speed;\n            } else if (moveDistance &lt; 2 * currentSlideSize) {\n              momentumDuration = params.speed * 1.5;\n            } else {\n              momentumDuration = params.speed * 2.5;\n            }\n          }\n        } else if (params.freeModeSticky) {\n          swiper.slideToClosest();\n          return;\n        }\n\n        if (params.freeModeMomentumBounce &amp;&amp; doBounce) {\n          swiper.updateProgress(afterBouncePosition);\n          swiper.setTransition(momentumDuration);\n          swiper.setTranslate(newPosition);\n          swiper.transitionStart(true, swiper.swipeDirection);\n          swiper.animating = true;\n          $wrapperEl.transitionEnd(function () {\n            if (!swiper || swiper.destroyed || !data.allowMomentumBounce) { return; }\n            swiper.emit('momentumBounce');\n\n            swiper.setTransition(params.speed);\n            swiper.setTranslate(afterBouncePosition);\n            $wrapperEl.transitionEnd(function () {\n              if (!swiper || swiper.destroyed) { return; }\n              swiper.transitionEnd();\n            });\n          });\n        } else if (swiper.velocity) {\n          swiper.updateProgress(newPosition);\n          swiper.setTransition(momentumDuration);\n          swiper.setTranslate(newPosition);\n          swiper.transitionStart(true, swiper.swipeDirection);\n          if (!swiper.animating) {\n            swiper.animating = true;\n            $wrapperEl.transitionEnd(function () {\n              if (!swiper || swiper.destroyed) { return; }\n              swiper.transitionEnd();\n            });\n          }\n        } else {\n          swiper.updateProgress(newPosition);\n        }\n\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n      } else if (params.freeModeSticky) {\n        swiper.slideToClosest();\n        return;\n      }\n\n      if (!params.freeModeMomentum || timeDiff &gt;= params.longSwipesMs) {\n        swiper.updateProgress();\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n      }\n      return;\n    }\n\n    // Find current slide\n    var stopIndex = 0;\n    var groupSize = swiper.slidesSizesGrid[0];\n    for (var i = 0; i &lt; slidesGrid.length; i += (i &lt; params.slidesPerGroupSkip ? 1 : params.slidesPerGroup)) {\n      var increment$1 = (i &lt; params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);\n      if (typeof slidesGrid[i + increment$1] !== 'undefined') {\n        if (currentPos &gt;= slidesGrid[i] &amp;&amp; currentPos &lt; slidesGrid[i + increment$1]) {\n          stopIndex = i;\n          groupSize = slidesGrid[i + increment$1] - slidesGrid[i];\n        }\n      } else if (currentPos &gt;= slidesGrid[i]) {\n        stopIndex = i;\n        groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n      }\n    }\n\n    // Find current slide size\n    var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n    var increment = (stopIndex &lt; params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);\n\n    if (timeDiff &gt; params.longSwipesMs) {\n      // Long touches\n      if (!params.longSwipes) {\n        swiper.slideTo(swiper.activeIndex);\n        return;\n      }\n      if (swiper.swipeDirection === 'next') {\n        if (ratio &gt;= params.longSwipesRatio) { swiper.slideTo(stopIndex + increment); }\n        else { swiper.slideTo(stopIndex); }\n      }\n      if (swiper.swipeDirection === 'prev') {\n        if (ratio &gt; (1 - params.longSwipesRatio)) { swiper.slideTo(stopIndex + increment); }\n        else { swiper.slideTo(stopIndex); }\n      }\n    } else {\n      // Short swipes\n      if (!params.shortSwipes) {\n        swiper.slideTo(swiper.activeIndex);\n        return;\n      }\n      var isNavButtonTarget = swiper.navigation &amp;&amp; (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n      if (!isNavButtonTarget) {\n        if (swiper.swipeDirection === 'next') {\n          swiper.slideTo(stopIndex + increment);\n        }\n        if (swiper.swipeDirection === 'prev') {\n          swiper.slideTo(stopIndex);\n        }\n      } else if (e.target === swiper.navigation.nextEl) {\n        swiper.slideTo(stopIndex + increment);\n      } else {\n        swiper.slideTo(stopIndex);\n      }\n    }\n  }\n\n  function onResize () {\n    var swiper = this;\n\n    var params = swiper.params;\n    var el = swiper.el;\n\n    if (el &amp;&amp; el.offsetWidth === 0) { return; }\n\n    // Breakpoints\n    if (params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n\n    // Save locks\n    var allowSlideNext = swiper.allowSlideNext;\n    var allowSlidePrev = swiper.allowSlidePrev;\n    var snapGrid = swiper.snapGrid;\n\n    // Disable locks on resize\n    swiper.allowSlideNext = true;\n    swiper.allowSlidePrev = true;\n\n    swiper.updateSize();\n    swiper.updateSlides();\n\n    swiper.updateSlidesClasses();\n    if ((params.slidesPerView === 'auto' || params.slidesPerView &gt; 1) &amp;&amp; swiper.isEnd &amp;&amp; !swiper.params.centeredSlides) {\n      swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n    } else {\n      swiper.slideTo(swiper.activeIndex, 0, false, true);\n    }\n\n    if (swiper.autoplay &amp;&amp; swiper.autoplay.running &amp;&amp; swiper.autoplay.paused) {\n      swiper.autoplay.run();\n    }\n    // Return locks after resize\n    swiper.allowSlidePrev = allowSlidePrev;\n    swiper.allowSlideNext = allowSlideNext;\n\n    if (swiper.params.watchOverflow &amp;&amp; snapGrid !== swiper.snapGrid) {\n      swiper.checkOverflow();\n    }\n  }\n\n  function onClick (e) {\n    var swiper = this;\n    if (!swiper.allowClick) {\n      if (swiper.params.preventClicks) { e.preventDefault(); }\n      if (swiper.params.preventClicksPropagation &amp;&amp; swiper.animating) {\n        e.stopPropagation();\n        e.stopImmediatePropagation();\n      }\n    }\n  }\n\n  function onScroll () {\n    var swiper = this;\n    var wrapperEl = swiper.wrapperEl;\n    swiper.previousTranslate = swiper.translate;\n    swiper.translate = swiper.isHorizontal() ? -wrapperEl.scrollLeft : -wrapperEl.scrollTop;\n    // eslint-disable-next-line\n    if (swiper.translate === -0) { swiper.translate = 0; }\n\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n\n    var newProgress;\n    var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n    if (translatesDiff === 0) {\n      newProgress = 0;\n    } else {\n      newProgress = (swiper.translate - swiper.minTranslate()) / (translatesDiff);\n    }\n    if (newProgress !== swiper.progress) {\n      swiper.updateProgress(swiper.translate);\n    }\n\n    swiper.emit('setTranslate', swiper.translate, false);\n  }\n\n  var dummyEventAttached = false;\n  function dummyEventListener() {}\n\n  function attachEvents() {\n    var swiper = this;\n    var params = swiper.params;\n    var touchEvents = swiper.touchEvents;\n    var el = swiper.el;\n    var wrapperEl = swiper.wrapperEl;\n\n    swiper.onTouchStart = onTouchStart.bind(swiper);\n    swiper.onTouchMove = onTouchMove.bind(swiper);\n    swiper.onTouchEnd = onTouchEnd.bind(swiper);\n    if (params.cssMode) {\n      swiper.onScroll = onScroll.bind(swiper);\n    }\n\n    swiper.onClick = onClick.bind(swiper);\n\n    var capture = !!params.nested;\n\n    // Touch Events\n    if (!Support.touch &amp;&amp; Support.pointerEvents) {\n      el.addEventListener(touchEvents.start, swiper.onTouchStart, false);\n      doc.addEventListener(touchEvents.move, swiper.onTouchMove, capture);\n      doc.addEventListener(touchEvents.end, swiper.onTouchEnd, false);\n    } else {\n      if (Support.touch) {\n        var passiveListener = touchEvents.start === 'touchstart' &amp;&amp; Support.passiveListener &amp;&amp; params.passiveListeners ? { passive: true, capture: false } : false;\n        el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n        el.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture: capture } : capture);\n        el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n        if (touchEvents.cancel) {\n          el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n        }\n        if (!dummyEventAttached) {\n          doc.addEventListener('touchstart', dummyEventListener);\n          dummyEventAttached = true;\n        }\n      }\n      if ((params.simulateTouch &amp;&amp; !Device.ios &amp;&amp; !Device.android) || (params.simulateTouch &amp;&amp; !Support.touch &amp;&amp; Device.ios)) {\n        el.addEventListener('mousedown', swiper.onTouchStart, false);\n        doc.addEventListener('mousemove', swiper.onTouchMove, capture);\n        doc.addEventListener('mouseup', swiper.onTouchEnd, false);\n      }\n    }\n    // Prevent Links Clicks\n    if (params.preventClicks || params.preventClicksPropagation) {\n      el.addEventListener('click', swiper.onClick, true);\n    }\n    if (params.cssMode) {\n      wrapperEl.addEventListener('scroll', swiper.onScroll);\n    }\n\n    // Resize handler\n    if (params.updateOnWindowResize) {\n      swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true);\n    } else {\n      swiper.on('observerUpdate', onResize, true);\n    }\n  }\n\n  function detachEvents() {\n    var swiper = this;\n\n    var params = swiper.params;\n    var touchEvents = swiper.touchEvents;\n    var el = swiper.el;\n    var wrapperEl = swiper.wrapperEl;\n\n    var capture = !!params.nested;\n\n    // Touch Events\n    if (!Support.touch &amp;&amp; Support.pointerEvents) {\n      el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);\n      doc.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n      doc.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);\n    } else {\n      if (Support.touch) {\n        var passiveListener = touchEvents.start === 'onTouchStart' &amp;&amp; Support.passiveListener &amp;&amp; params.passiveListeners ? { passive: true, capture: false } : false;\n        el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n        el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n        el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n        if (touchEvents.cancel) {\n          el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n        }\n      }\n      if ((params.simulateTouch &amp;&amp; !Device.ios &amp;&amp; !Device.android) || (params.simulateTouch &amp;&amp; !Support.touch &amp;&amp; Device.ios)) {\n        el.removeEventListener('mousedown', swiper.onTouchStart, false);\n        doc.removeEventListener('mousemove', swiper.onTouchMove, capture);\n        doc.removeEventListener('mouseup', swiper.onTouchEnd, false);\n      }\n    }\n    // Prevent Links Clicks\n    if (params.preventClicks || params.preventClicksPropagation) {\n      el.removeEventListener('click', swiper.onClick, true);\n    }\n\n    if (params.cssMode) {\n      wrapperEl.removeEventListener('scroll', swiper.onScroll);\n    }\n\n    // Resize handler\n    swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize);\n  }\n\n  var events = {\n    attachEvents: attachEvents,\n    detachEvents: detachEvents,\n  };\n\n  function setBreakpoint () {\n    var swiper = this;\n    var activeIndex = swiper.activeIndex;\n    var initialized = swiper.initialized;\n    var loopedSlides = swiper.loopedSlides; if ( loopedSlides === void 0 ) loopedSlides = 0;\n    var params = swiper.params;\n    var $el = swiper.$el;\n    var breakpoints = params.breakpoints;\n    if (!breakpoints || (breakpoints &amp;&amp; Object.keys(breakpoints).length === 0)) { return; }\n\n    // Get breakpoint for window width and update parameters\n    var breakpoint = swiper.getBreakpoint(breakpoints);\n\n    if (breakpoint &amp;&amp; swiper.currentBreakpoint !== breakpoint) {\n      var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n      if (breakpointOnlyParams) {\n        ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach(function (param) {\n          var paramValue = breakpointOnlyParams[param];\n          if (typeof paramValue === 'undefined') { return; }\n          if (param === 'slidesPerView' &amp;&amp; (paramValue === 'AUTO' || paramValue === 'auto')) {\n            breakpointOnlyParams[param] = 'auto';\n          } else if (param === 'slidesPerView') {\n            breakpointOnlyParams[param] = parseFloat(paramValue);\n          } else {\n            breakpointOnlyParams[param] = parseInt(paramValue, 10);\n          }\n        });\n      }\n\n      var breakpointParams = breakpointOnlyParams || swiper.originalParams;\n      var wasMultiRow = params.slidesPerColumn &gt; 1;\n      var isMultiRow = breakpointParams.slidesPerColumn &gt; 1;\n      if (wasMultiRow &amp;&amp; !isMultiRow) {\n        $el.removeClass(((params.containerModifierClass) + \"multirow \" + (params.containerModifierClass) + \"multirow-column\"));\n      } else if (!wasMultiRow &amp;&amp; isMultiRow) {\n        $el.addClass(((params.containerModifierClass) + \"multirow\"));\n        if (breakpointParams.slidesPerColumnFill === 'column') {\n          $el.addClass(((params.containerModifierClass) + \"multirow-column\"));\n        }\n      }\n\n      var directionChanged = breakpointParams.direction &amp;&amp; breakpointParams.direction !== params.direction;\n      var needsReLoop = params.loop &amp;&amp; (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n      if (directionChanged &amp;&amp; initialized) {\n        swiper.changeDirection();\n      }\n\n      Utils.extend(swiper.params, breakpointParams);\n\n      Utils.extend(swiper, {\n        allowTouchMove: swiper.params.allowTouchMove,\n        allowSlideNext: swiper.params.allowSlideNext,\n        allowSlidePrev: swiper.params.allowSlidePrev,\n      });\n\n      swiper.currentBreakpoint = breakpoint;\n\n      if (needsReLoop &amp;&amp; initialized) {\n        swiper.loopDestroy();\n        swiper.loopCreate();\n        swiper.updateSlides();\n        swiper.slideTo((activeIndex - loopedSlides) + swiper.loopedSlides, 0, false);\n      }\n\n      swiper.emit('breakpoint', breakpointParams);\n    }\n  }\n\n  function getBreakpoint (breakpoints) {\n    // Get breakpoint for window width\n    if (!breakpoints) { return undefined; }\n    var breakpoint = false;\n\n    var points = Object.keys(breakpoints).map(function (point) {\n      if (typeof point === 'string' &amp;&amp; point.startsWith('@')) {\n        var minRatio = parseFloat(point.substr(1));\n        var value = win.innerHeight * minRatio;\n        return { value: value, point: point };\n      }\n      return { value: point, point: point };\n    });\n\n    points.sort(function (a, b) { return parseInt(a.value, 10) - parseInt(b.value, 10); });\n    for (var i = 0; i &lt; points.length; i += 1) {\n      var ref = points[i];\n      var point = ref.point;\n      var value = ref.value;\n      if (value &lt;= win.innerWidth) {\n        breakpoint = point;\n      }\n    }\n    return breakpoint || 'max';\n  }\n\n  var breakpoints = { setBreakpoint: setBreakpoint, getBreakpoint: getBreakpoint };\n\n  function addClasses () {\n    var swiper = this;\n    var classNames = swiper.classNames;\n    var params = swiper.params;\n    var rtl = swiper.rtl;\n    var $el = swiper.$el;\n    var suffixes = [];\n\n    suffixes.push('initialized');\n    suffixes.push(params.direction);\n\n    if (params.freeMode) {\n      suffixes.push('free-mode');\n    }\n    if (params.autoHeight) {\n      suffixes.push('autoheight');\n    }\n    if (rtl) {\n      suffixes.push('rtl');\n    }\n    if (params.slidesPerColumn &gt; 1) {\n      suffixes.push('multirow');\n      if (params.slidesPerColumnFill === 'column') {\n        suffixes.push('multirow-column');\n      }\n    }\n    if (Device.android) {\n      suffixes.push('android');\n    }\n    if (Device.ios) {\n      suffixes.push('ios');\n    }\n\n    if (params.cssMode) {\n      suffixes.push('css-mode');\n    }\n\n    suffixes.forEach(function (suffix) {\n      classNames.push(params.containerModifierClass + suffix);\n    });\n\n    $el.addClass(classNames.join(' '));\n  }\n\n  function removeClasses () {\n    var swiper = this;\n    var $el = swiper.$el;\n    var classNames = swiper.classNames;\n\n    $el.removeClass(classNames.join(' '));\n  }\n\n  var classes = { addClasses: addClasses, removeClasses: removeClasses };\n\n  function loadImage (imageEl, src, srcset, sizes, checkForComplete, callback) {\n    var image;\n    function onReady() {\n      if (callback) { callback(); }\n    }\n    if (!imageEl.complete || !checkForComplete) {\n      if (src) {\n        image = new win.Image();\n        image.onload = onReady;\n        image.onerror = onReady;\n        if (sizes) {\n          image.sizes = sizes;\n        }\n        if (srcset) {\n          image.srcset = srcset;\n        }\n        if (src) {\n          image.src = src;\n        }\n      } else {\n        onReady();\n      }\n    } else {\n      // image already loaded...\n      onReady();\n    }\n  }\n\n  function preloadImages () {\n    var swiper = this;\n    swiper.imagesToLoad = swiper.$el.find('img');\n    function onReady() {\n      if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) { return; }\n      if (swiper.imagesLoaded !== undefined) { swiper.imagesLoaded += 1; }\n      if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n        if (swiper.params.updateOnImagesReady) { swiper.update(); }\n        swiper.emit('imagesReady');\n      }\n    }\n    for (var i = 0; i &lt; swiper.imagesToLoad.length; i += 1) {\n      var imageEl = swiper.imagesToLoad[i];\n      swiper.loadImage(\n        imageEl,\n        imageEl.currentSrc || imageEl.getAttribute('src'),\n        imageEl.srcset || imageEl.getAttribute('srcset'),\n        imageEl.sizes || imageEl.getAttribute('sizes'),\n        true,\n        onReady\n      );\n    }\n  }\n\n  var images = {\n    loadImage: loadImage,\n    preloadImages: preloadImages,\n  };\n\n  function checkOverflow() {\n    var swiper = this;\n    var params = swiper.params;\n    var wasLocked = swiper.isLocked;\n    var lastSlidePosition = swiper.slides.length &gt; 0 &amp;&amp; (params.slidesOffsetBefore + (params.spaceBetween * (swiper.slides.length - 1)) + ((swiper.slides[0]).offsetWidth) * swiper.slides.length);\n\n    if (params.slidesOffsetBefore &amp;&amp; params.slidesOffsetAfter &amp;&amp; lastSlidePosition) {\n      swiper.isLocked = lastSlidePosition &lt;= swiper.size;\n    } else {\n      swiper.isLocked = swiper.snapGrid.length === 1;\n    }\n\n    swiper.allowSlideNext = !swiper.isLocked;\n    swiper.allowSlidePrev = !swiper.isLocked;\n\n    // events\n    if (wasLocked !== swiper.isLocked) { swiper.emit(swiper.isLocked ? 'lock' : 'unlock'); }\n\n    if (wasLocked &amp;&amp; wasLocked !== swiper.isLocked) {\n      swiper.isEnd = false;\n      swiper.navigation.update();\n    }\n  }\n\n  var checkOverflow$1 = { checkOverflow: checkOverflow };\n\n  var defaults = {\n    init: true,\n    direction: 'horizontal',\n    touchEventsTarget: 'container',\n    initialSlide: 0,\n    speed: 300,\n    cssMode: false,\n    updateOnWindowResize: true,\n    //\n    preventInteractionOnTransition: false,\n\n    // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n    edgeSwipeDetection: false,\n    edgeSwipeThreshold: 20,\n\n    // Free mode\n    freeMode: false,\n    freeModeMomentum: true,\n    freeModeMomentumRatio: 1,\n    freeModeMomentumBounce: true,\n    freeModeMomentumBounceRatio: 1,\n    freeModeMomentumVelocityRatio: 1,\n    freeModeSticky: false,\n    freeModeMinimumVelocity: 0.02,\n\n    // Autoheight\n    autoHeight: false,\n\n    // Set wrapper width\n    setWrapperSize: false,\n\n    // Virtual Translate\n    virtualTranslate: false,\n\n    // Effects\n    effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n    // Breakpoints\n    breakpoints: undefined,\n\n    // Slides grid\n    spaceBetween: 0,\n    slidesPerView: 1,\n    slidesPerColumn: 1,\n    slidesPerColumnFill: 'column',\n    slidesPerGroup: 1,\n    slidesPerGroupSkip: 0,\n    centeredSlides: false,\n    centeredSlidesBounds: false,\n    slidesOffsetBefore: 0, // in px\n    slidesOffsetAfter: 0, // in px\n    normalizeSlideIndex: true,\n    centerInsufficientSlides: false,\n\n    // Disable swiper and hide navigation when container not overflow\n    watchOverflow: false,\n\n    // Round length\n    roundLengths: false,\n\n    // Touches\n    touchRatio: 1,\n    touchAngle: 45,\n    simulateTouch: true,\n    shortSwipes: true,\n    longSwipes: true,\n    longSwipesRatio: 0.5,\n    longSwipesMs: 300,\n    followFinger: true,\n    allowTouchMove: true,\n    threshold: 0,\n    touchMoveStopPropagation: false,\n    touchStartPreventDefault: true,\n    touchStartForcePreventDefault: false,\n    touchReleaseOnEdges: false,\n\n    // Unique Navigation Elements\n    uniqueNavElements: true,\n\n    // Resistance\n    resistance: true,\n    resistanceRatio: 0.85,\n\n    // Progress\n    watchSlidesProgress: false,\n    watchSlidesVisibility: false,\n\n    // Cursor\n    grabCursor: false,\n\n    // Clicks\n    preventClicks: true,\n    preventClicksPropagation: true,\n    slideToClickedSlide: false,\n\n    // Images\n    preloadImages: true,\n    updateOnImagesReady: true,\n\n    // loop\n    loop: false,\n    loopAdditionalSlides: 0,\n    loopedSlides: null,\n    loopFillGroupWithBlank: false,\n\n    // Swiping/no swiping\n    allowSlidePrev: true,\n    allowSlideNext: true,\n    swipeHandler: null, // '.swipe-handler',\n    noSwiping: true,\n    noSwipingClass: 'swiper-no-swiping',\n    noSwipingSelector: null,\n\n    // Passive Listeners\n    passiveListeners: true,\n\n    // NS\n    containerModifierClass: 'swiper-container-', // NEW\n    slideClass: 'swiper-slide',\n    slideBlankClass: 'swiper-slide-invisible-blank',\n    slideActiveClass: 'swiper-slide-active',\n    slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n    slideVisibleClass: 'swiper-slide-visible',\n    slideDuplicateClass: 'swiper-slide-duplicate',\n    slideNextClass: 'swiper-slide-next',\n    slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n    slidePrevClass: 'swiper-slide-prev',\n    slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n    wrapperClass: 'swiper-wrapper',\n\n    // Callbacks\n    runCallbacksOnInit: true,\n  };\n\n  /* eslint no-param-reassign: \"off\" */\n\n  var prototypes = {\n    update: update,\n    translate: translate,\n    transition: transition$1,\n    slide: slide,\n    loop: loop,\n    grabCursor: grabCursor,\n    manipulation: manipulation,\n    events: events,\n    breakpoints: breakpoints,\n    checkOverflow: checkOverflow$1,\n    classes: classes,\n    images: images,\n  };\n\n  var extendedDefaults = {};\n\n  var Swiper = /*@__PURE__*/(function (SwiperClass) {\n    function Swiper() {\n      var assign;\n\n      var args = [], len = arguments.length;\n      while ( len-- ) args[ len ] = arguments[ len ];\n      var el;\n      var params;\n      if (args.length === 1 &amp;&amp; args[0].constructor &amp;&amp; args[0].constructor === Object) {\n        params = args[0];\n      } else {\n        (assign = args, el = assign[0], params = assign[1]);\n      }\n      if (!params) { params = {}; }\n\n      params = Utils.extend({}, params);\n      if (el &amp;&amp; !params.el) { params.el = el; }\n\n      SwiperClass.call(this, params);\n\n      Object.keys(prototypes).forEach(function (prototypeGroup) {\n        Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) {\n          if (!Swiper.prototype[protoMethod]) {\n            Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n          }\n        });\n      });\n\n      // Swiper Instance\n      var swiper = this;\n      if (typeof swiper.modules === 'undefined') {\n        swiper.modules = {};\n      }\n      Object.keys(swiper.modules).forEach(function (moduleName) {\n        var module = swiper.modules[moduleName];\n        if (module.params) {\n          var moduleParamName = Object.keys(module.params)[0];\n          var moduleParams = module.params[moduleParamName];\n          if (typeof moduleParams !== 'object' || moduleParams === null) { return; }\n          if (!(moduleParamName in params &amp;&amp; 'enabled' in moduleParams)) { return; }\n          if (params[moduleParamName] === true) {\n            params[moduleParamName] = { enabled: true };\n          }\n          if (\n            typeof params[moduleParamName] === 'object'\n            &amp;&amp; !('enabled' in params[moduleParamName])\n          ) {\n            params[moduleParamName].enabled = true;\n          }\n          if (!params[moduleParamName]) { params[moduleParamName] = { enabled: false }; }\n        }\n      });\n\n      // Extend defaults with modules params\n      var swiperParams = Utils.extend({}, defaults);\n      swiper.useModulesParams(swiperParams);\n\n      // Extend defaults with passed params\n      swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);\n      swiper.originalParams = Utils.extend({}, swiper.params);\n      swiper.passedParams = Utils.extend({}, params);\n\n      // Save Dom lib\n      swiper.$ = $;\n\n      // Find el\n      var $el = $(swiper.params.el);\n      el = $el[0];\n\n      if (!el) {\n        return undefined;\n      }\n\n      if ($el.length &gt; 1) {\n        var swipers = [];\n        $el.each(function (index, containerEl) {\n          var newParams = Utils.extend({}, params, { el: containerEl });\n          swipers.push(new Swiper(newParams));\n        });\n        return swipers;\n      }\n\n      el.swiper = swiper;\n      $el.data('swiper', swiper);\n\n      // Find Wrapper\n      var $wrapperEl;\n      if (el &amp;&amp; el.shadowRoot &amp;&amp; el.shadowRoot.querySelector) {\n        $wrapperEl = $(el.shadowRoot.querySelector((\".\" + (swiper.params.wrapperClass))));\n        // Children needs to return slot items\n        $wrapperEl.children = function (options) { return $el.children(options); };\n      } else {\n        $wrapperEl = $el.children((\".\" + (swiper.params.wrapperClass)));\n      }\n      // Extend Swiper\n      Utils.extend(swiper, {\n        $el: $el,\n        el: el,\n        $wrapperEl: $wrapperEl,\n        wrapperEl: $wrapperEl[0],\n\n        // Classes\n        classNames: [],\n\n        // Slides\n        slides: $(),\n        slidesGrid: [],\n        snapGrid: [],\n        slidesSizesGrid: [],\n\n        // isDirection\n        isHorizontal: function isHorizontal() {\n          return swiper.params.direction === 'horizontal';\n        },\n        isVertical: function isVertical() {\n          return swiper.params.direction === 'vertical';\n        },\n        // RTL\n        rtl: (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n        rtlTranslate: swiper.params.direction === 'horizontal' &amp;&amp; (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n        wrongRTL: $wrapperEl.css('display') === '-webkit-box',\n\n        // Indexes\n        activeIndex: 0,\n        realIndex: 0,\n\n        //\n        isBeginning: true,\n        isEnd: false,\n\n        // Props\n        translate: 0,\n        previousTranslate: 0,\n        progress: 0,\n        velocity: 0,\n        animating: false,\n\n        // Locks\n        allowSlideNext: swiper.params.allowSlideNext,\n        allowSlidePrev: swiper.params.allowSlidePrev,\n\n        // Touch Events\n        touchEvents: (function touchEvents() {\n          var touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n          var desktop = ['mousedown', 'mousemove', 'mouseup'];\n          if (Support.pointerEvents) {\n            desktop = ['pointerdown', 'pointermove', 'pointerup'];\n          }\n          swiper.touchEventsTouch = {\n            start: touch[0],\n            move: touch[1],\n            end: touch[2],\n            cancel: touch[3],\n          };\n          swiper.touchEventsDesktop = {\n            start: desktop[0],\n            move: desktop[1],\n            end: desktop[2],\n          };\n          return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n        }()),\n        touchEventsData: {\n          isTouched: undefined,\n          isMoved: undefined,\n          allowTouchCallbacks: undefined,\n          touchStartTime: undefined,\n          isScrolling: undefined,\n          currentTranslate: undefined,\n          startTranslate: undefined,\n          allowThresholdMove: undefined,\n          // Form elements to match\n          formElements: 'input, select, option, textarea, button, video, label',\n          // Last click time\n          lastClickTime: Utils.now(),\n          clickTimeout: undefined,\n          // Velocities\n          velocities: [],\n          allowMomentumBounce: undefined,\n          isTouchEvent: undefined,\n          startMoving: undefined,\n        },\n\n        // Clicks\n        allowClick: true,\n\n        // Touches\n        allowTouchMove: swiper.params.allowTouchMove,\n\n        touches: {\n          startX: 0,\n          startY: 0,\n          currentX: 0,\n          currentY: 0,\n          diff: 0,\n        },\n\n        // Images\n        imagesToLoad: [],\n        imagesLoaded: 0,\n\n      });\n\n      // Install Modules\n      swiper.useModules();\n\n      // Init\n      if (swiper.params.init) {\n        swiper.init();\n      }\n\n      // Return app instance\n      return swiper;\n    }\n\n    if ( SwiperClass ) Swiper.__proto__ = SwiperClass;\n    Swiper.prototype = Object.create( SwiperClass &amp;&amp; SwiperClass.prototype );\n    Swiper.prototype.constructor = Swiper;\n\n    var staticAccessors = { extendedDefaults: { configurable: true },defaults: { configurable: true },Class: { configurable: true },$: { configurable: true } };\n\n    Swiper.prototype.slidesPerViewDynamic = function slidesPerViewDynamic () {\n      var swiper = this;\n      var params = swiper.params;\n      var slides = swiper.slides;\n      var slidesGrid = swiper.slidesGrid;\n      var swiperSize = swiper.size;\n      var activeIndex = swiper.activeIndex;\n      var spv = 1;\n      if (params.centeredSlides) {\n        var slideSize = slides[activeIndex].swiperSlideSize;\n        var breakLoop;\n        for (var i = activeIndex + 1; i &lt; slides.length; i += 1) {\n          if (slides[i] &amp;&amp; !breakLoop) {\n            slideSize += slides[i].swiperSlideSize;\n            spv += 1;\n            if (slideSize &gt; swiperSize) { breakLoop = true; }\n          }\n        }\n        for (var i$1 = activeIndex - 1; i$1 &gt;= 0; i$1 -= 1) {\n          if (slides[i$1] &amp;&amp; !breakLoop) {\n            slideSize += slides[i$1].swiperSlideSize;\n            spv += 1;\n            if (slideSize &gt; swiperSize) { breakLoop = true; }\n          }\n        }\n      } else {\n        for (var i$2 = activeIndex + 1; i$2 &lt; slides.length; i$2 += 1) {\n          if (slidesGrid[i$2] - slidesGrid[activeIndex] &lt; swiperSize) {\n            spv += 1;\n          }\n        }\n      }\n      return spv;\n    };\n\n    Swiper.prototype.update = function update () {\n      var swiper = this;\n      if (!swiper || swiper.destroyed) { return; }\n      var snapGrid = swiper.snapGrid;\n      var params = swiper.params;\n      // Breakpoints\n      if (params.breakpoints) {\n        swiper.setBreakpoint();\n      }\n      swiper.updateSize();\n      swiper.updateSlides();\n      swiper.updateProgress();\n      swiper.updateSlidesClasses();\n\n      function setTranslate() {\n        var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n        var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n        swiper.setTranslate(newTranslate);\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n      }\n      var translated;\n      if (swiper.params.freeMode) {\n        setTranslate();\n        if (swiper.params.autoHeight) {\n          swiper.updateAutoHeight();\n        }\n      } else {\n        if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView &gt; 1) &amp;&amp; swiper.isEnd &amp;&amp; !swiper.params.centeredSlides) {\n          translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n        } else {\n          translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n        }\n        if (!translated) {\n          setTranslate();\n        }\n      }\n      if (params.watchOverflow &amp;&amp; snapGrid !== swiper.snapGrid) {\n        swiper.checkOverflow();\n      }\n      swiper.emit('update');\n    };\n\n    Swiper.prototype.changeDirection = function changeDirection (newDirection, needUpdate) {\n      if ( needUpdate === void 0 ) needUpdate = true;\n\n      var swiper = this;\n      var currentDirection = swiper.params.direction;\n      if (!newDirection) {\n        // eslint-disable-next-line\n        newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n      }\n      if ((newDirection === currentDirection) || (newDirection !== 'horizontal' &amp;&amp; newDirection !== 'vertical')) {\n        return swiper;\n      }\n\n      swiper.$el\n        .removeClass((\"\" + (swiper.params.containerModifierClass) + currentDirection))\n        .addClass((\"\" + (swiper.params.containerModifierClass) + newDirection));\n\n      swiper.params.direction = newDirection;\n\n      swiper.slides.each(function (slideIndex, slideEl) {\n        if (newDirection === 'vertical') {\n          slideEl.style.width = '';\n        } else {\n          slideEl.style.height = '';\n        }\n      });\n\n      swiper.emit('changeDirection');\n      if (needUpdate) { swiper.update(); }\n\n      return swiper;\n    };\n\n    Swiper.prototype.init = function init () {\n      var swiper = this;\n      if (swiper.initialized) { return; }\n\n      swiper.emit('beforeInit');\n\n      // Set breakpoint\n      if (swiper.params.breakpoints) {\n        swiper.setBreakpoint();\n      }\n\n      // Add Classes\n      swiper.addClasses();\n\n      // Create loop\n      if (swiper.params.loop) {\n        swiper.loopCreate();\n      }\n\n      // Update size\n      swiper.updateSize();\n\n      // Update slides\n      swiper.updateSlides();\n\n      if (swiper.params.watchOverflow) {\n        swiper.checkOverflow();\n      }\n\n      // Set Grab Cursor\n      if (swiper.params.grabCursor) {\n        swiper.setGrabCursor();\n      }\n\n      if (swiper.params.preloadImages) {\n        swiper.preloadImages();\n      }\n\n      // Slide To Initial Slide\n      if (swiper.params.loop) {\n        swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);\n      } else {\n        swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);\n      }\n\n      // Attach events\n      swiper.attachEvents();\n\n      // Init Flag\n      swiper.initialized = true;\n\n      // Emit\n      swiper.emit('init');\n    };\n\n    Swiper.prototype.destroy = function destroy (deleteInstance, cleanStyles) {\n      if ( deleteInstance === void 0 ) deleteInstance = true;\n      if ( cleanStyles === void 0 ) cleanStyles = true;\n\n      var swiper = this;\n      var params = swiper.params;\n      var $el = swiper.$el;\n      var $wrapperEl = swiper.$wrapperEl;\n      var slides = swiper.slides;\n\n      if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n        return null;\n      }\n\n      swiper.emit('beforeDestroy');\n\n      // Init Flag\n      swiper.initialized = false;\n\n      // Detach events\n      swiper.detachEvents();\n\n      // Destroy loop\n      if (params.loop) {\n        swiper.loopDestroy();\n      }\n\n      // Cleanup styles\n      if (cleanStyles) {\n        swiper.removeClasses();\n        $el.removeAttr('style');\n        $wrapperEl.removeAttr('style');\n        if (slides &amp;&amp; slides.length) {\n          slides\n            .removeClass([\n              params.slideVisibleClass,\n              params.slideActiveClass,\n              params.slideNextClass,\n              params.slidePrevClass ].join(' '))\n            .removeAttr('style')\n            .removeAttr('data-swiper-slide-index');\n        }\n      }\n\n      swiper.emit('destroy');\n\n      // Detach emitter events\n      Object.keys(swiper.eventsListeners).forEach(function (eventName) {\n        swiper.off(eventName);\n      });\n\n      if (deleteInstance !== false) {\n        swiper.$el[0].swiper = null;\n        swiper.$el.data('swiper', null);\n        Utils.deleteProps(swiper);\n      }\n      swiper.destroyed = true;\n\n      return null;\n    };\n\n    Swiper.extendDefaults = function extendDefaults (newDefaults) {\n      Utils.extend(extendedDefaults, newDefaults);\n    };\n\n    staticAccessors.extendedDefaults.get = function () {\n      return extendedDefaults;\n    };\n\n    staticAccessors.defaults.get = function () {\n      return defaults;\n    };\n\n    staticAccessors.Class.get = function () {\n      return SwiperClass;\n    };\n\n    staticAccessors.$.get = function () {\n      return $;\n    };\n\n    Object.defineProperties( Swiper, staticAccessors );\n\n    return Swiper;\n  }(SwiperClass));\n\n  var Device$1 = {\n    name: 'device',\n    proto: {\n      device: Device,\n    },\n    static: {\n      device: Device,\n    },\n  };\n\n  var Support$1 = {\n    name: 'support',\n    proto: {\n      support: Support,\n    },\n    static: {\n      support: Support,\n    },\n  };\n\n  var Browser = (function Browser() {\n    function isSafari() {\n      var ua = win.navigator.userAgent.toLowerCase();\n      return (ua.indexOf('safari') &gt;= 0 &amp;&amp; ua.indexOf('chrome') &lt; 0 &amp;&amp; ua.indexOf('android') &lt; 0);\n    }\n    return {\n      isEdge: !!win.navigator.userAgent.match(/Edge/g),\n      isSafari: isSafari(),\n      isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(win.navigator.userAgent),\n    };\n  }());\n\n  var Browser$1 = {\n    name: 'browser',\n    proto: {\n      browser: Browser,\n    },\n    static: {\n      browser: Browser,\n    },\n  };\n\n  var Resize = {\n    name: 'resize',\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        resize: {\n          resizeHandler: function resizeHandler() {\n            if (!swiper || swiper.destroyed || !swiper.initialized) { return; }\n            swiper.emit('beforeResize');\n            swiper.emit('resize');\n          },\n          orientationChangeHandler: function orientationChangeHandler() {\n            if (!swiper || swiper.destroyed || !swiper.initialized) { return; }\n            swiper.emit('orientationchange');\n          },\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        // Emit resize\n        win.addEventListener('resize', swiper.resize.resizeHandler);\n\n        // Emit orientationchange\n        win.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        win.removeEventListener('resize', swiper.resize.resizeHandler);\n        win.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n      },\n    },\n  };\n\n  var Observer = {\n    func: win.MutationObserver || win.WebkitMutationObserver,\n    attach: function attach(target, options) {\n      if ( options === void 0 ) options = {};\n\n      var swiper = this;\n\n      var ObserverFunc = Observer.func;\n      var observer = new ObserverFunc(function (mutations) {\n        // The observerUpdate event should only be triggered\n        // once despite the number of mutations.  Additional\n        // triggers are redundant and are very costly\n        if (mutations.length === 1) {\n          swiper.emit('observerUpdate', mutations[0]);\n          return;\n        }\n        var observerUpdate = function observerUpdate() {\n          swiper.emit('observerUpdate', mutations[0]);\n        };\n\n        if (win.requestAnimationFrame) {\n          win.requestAnimationFrame(observerUpdate);\n        } else {\n          win.setTimeout(observerUpdate, 0);\n        }\n      });\n\n      observer.observe(target, {\n        attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n        childList: typeof options.childList === 'undefined' ? true : options.childList,\n        characterData: typeof options.characterData === 'undefined' ? true : options.characterData,\n      });\n\n      swiper.observer.observers.push(observer);\n    },\n    init: function init() {\n      var swiper = this;\n      if (!Support.observer || !swiper.params.observer) { return; }\n      if (swiper.params.observeParents) {\n        var containerParents = swiper.$el.parents();\n        for (var i = 0; i &lt; containerParents.length; i += 1) {\n          swiper.observer.attach(containerParents[i]);\n        }\n      }\n      // Observe container\n      swiper.observer.attach(swiper.$el[0], { childList: swiper.params.observeSlideChildren });\n\n      // Observe wrapper\n      swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      swiper.observer.observers.forEach(function (observer) {\n        observer.disconnect();\n      });\n      swiper.observer.observers = [];\n    },\n  };\n\n  var Observer$1 = {\n    name: 'observer',\n    params: {\n      observer: false,\n      observeParents: false,\n      observeSlideChildren: false,\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        observer: {\n          init: Observer.init.bind(swiper),\n          attach: Observer.attach.bind(swiper),\n          destroy: Observer.destroy.bind(swiper),\n          observers: [],\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        swiper.observer.init();\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        swiper.observer.destroy();\n      },\n    },\n  };\n\n  var Virtual = {\n    update: function update(force) {\n      var swiper = this;\n      var ref = swiper.params;\n      var slidesPerView = ref.slidesPerView;\n      var slidesPerGroup = ref.slidesPerGroup;\n      var centeredSlides = ref.centeredSlides;\n      var ref$1 = swiper.params.virtual;\n      var addSlidesBefore = ref$1.addSlidesBefore;\n      var addSlidesAfter = ref$1.addSlidesAfter;\n      var ref$2 = swiper.virtual;\n      var previousFrom = ref$2.from;\n      var previousTo = ref$2.to;\n      var slides = ref$2.slides;\n      var previousSlidesGrid = ref$2.slidesGrid;\n      var renderSlide = ref$2.renderSlide;\n      var previousOffset = ref$2.offset;\n      swiper.updateActiveIndex();\n      var activeIndex = swiper.activeIndex || 0;\n\n      var offsetProp;\n      if (swiper.rtlTranslate) { offsetProp = 'right'; }\n      else { offsetProp = swiper.isHorizontal() ? 'left' : 'top'; }\n\n      var slidesAfter;\n      var slidesBefore;\n      if (centeredSlides) {\n        slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n        slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n      } else {\n        slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesBefore;\n        slidesBefore = slidesPerGroup + addSlidesAfter;\n      }\n      var from = Math.max((activeIndex || 0) - slidesBefore, 0);\n      var to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n      var offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n\n      Utils.extend(swiper.virtual, {\n        from: from,\n        to: to,\n        offset: offset,\n        slidesGrid: swiper.slidesGrid,\n      });\n\n      function onRendered() {\n        swiper.updateSlides();\n        swiper.updateProgress();\n        swiper.updateSlidesClasses();\n        if (swiper.lazy &amp;&amp; swiper.params.lazy.enabled) {\n          swiper.lazy.load();\n        }\n      }\n\n      if (previousFrom === from &amp;&amp; previousTo === to &amp;&amp; !force) {\n        if (swiper.slidesGrid !== previousSlidesGrid &amp;&amp; offset !== previousOffset) {\n          swiper.slides.css(offsetProp, (offset + \"px\"));\n        }\n        swiper.updateProgress();\n        return;\n      }\n      if (swiper.params.virtual.renderExternal) {\n        swiper.params.virtual.renderExternal.call(swiper, {\n          offset: offset,\n          from: from,\n          to: to,\n          slides: (function getSlides() {\n            var slidesToRender = [];\n            for (var i = from; i &lt;= to; i += 1) {\n              slidesToRender.push(slides[i]);\n            }\n            return slidesToRender;\n          }()),\n        });\n        onRendered();\n        return;\n      }\n      var prependIndexes = [];\n      var appendIndexes = [];\n      if (force) {\n        swiper.$wrapperEl.find((\".\" + (swiper.params.slideClass))).remove();\n      } else {\n        for (var i = previousFrom; i &lt;= previousTo; i += 1) {\n          if (i &lt; from || i &gt; to) {\n            swiper.$wrapperEl.find((\".\" + (swiper.params.slideClass) + \"[data-swiper-slide-index=\\\"\" + i + \"\\\"]\")).remove();\n          }\n        }\n      }\n      for (var i$1 = 0; i$1 &lt; slides.length; i$1 += 1) {\n        if (i$1 &gt;= from &amp;&amp; i$1 &lt;= to) {\n          if (typeof previousTo === 'undefined' || force) {\n            appendIndexes.push(i$1);\n          } else {\n            if (i$1 &gt; previousTo) { appendIndexes.push(i$1); }\n            if (i$1 &lt; previousFrom) { prependIndexes.push(i$1); }\n          }\n        }\n      }\n      appendIndexes.forEach(function (index) {\n        swiper.$wrapperEl.append(renderSlide(slides[index], index));\n      });\n      prependIndexes.sort(function (a, b) { return b - a; }).forEach(function (index) {\n        swiper.$wrapperEl.prepend(renderSlide(slides[index], index));\n      });\n      swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, (offset + \"px\"));\n      onRendered();\n    },\n    renderSlide: function renderSlide(slide, index) {\n      var swiper = this;\n      var params = swiper.params.virtual;\n      if (params.cache &amp;&amp; swiper.virtual.cache[index]) {\n        return swiper.virtual.cache[index];\n      }\n      var $slideEl = params.renderSlide\n        ? $(params.renderSlide.call(swiper, slide, index))\n        : $((\"&lt;div class=\\\"\" + (swiper.params.slideClass) + \"\\\" data-swiper-slide-index=\\\"\" + index + \"\\\"&gt;\" + slide + \"&lt;/div&gt;\"));\n      if (!$slideEl.attr('data-swiper-slide-index')) { $slideEl.attr('data-swiper-slide-index', index); }\n      if (params.cache) { swiper.virtual.cache[index] = $slideEl; }\n      return $slideEl;\n    },\n    appendSlide: function appendSlide(slides) {\n      var swiper = this;\n      if (typeof slides === 'object' &amp;&amp; 'length' in slides) {\n        for (var i = 0; i &lt; slides.length; i += 1) {\n          if (slides[i]) { swiper.virtual.slides.push(slides[i]); }\n        }\n      } else {\n        swiper.virtual.slides.push(slides);\n      }\n      swiper.virtual.update(true);\n    },\n    prependSlide: function prependSlide(slides) {\n      var swiper = this;\n      var activeIndex = swiper.activeIndex;\n      var newActiveIndex = activeIndex + 1;\n      var numberOfNewSlides = 1;\n\n      if (Array.isArray(slides)) {\n        for (var i = 0; i &lt; slides.length; i += 1) {\n          if (slides[i]) { swiper.virtual.slides.unshift(slides[i]); }\n        }\n        newActiveIndex = activeIndex + slides.length;\n        numberOfNewSlides = slides.length;\n      } else {\n        swiper.virtual.slides.unshift(slides);\n      }\n      if (swiper.params.virtual.cache) {\n        var cache = swiper.virtual.cache;\n        var newCache = {};\n        Object.keys(cache).forEach(function (cachedIndex) {\n          var $cachedEl = cache[cachedIndex];\n          var cachedElIndex = $cachedEl.attr('data-swiper-slide-index');\n          if (cachedElIndex) {\n            $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1);\n          }\n          newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;\n        });\n        swiper.virtual.cache = newCache;\n      }\n      swiper.virtual.update(true);\n      swiper.slideTo(newActiveIndex, 0);\n    },\n    removeSlide: function removeSlide(slidesIndexes) {\n      var swiper = this;\n      if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) { return; }\n      var activeIndex = swiper.activeIndex;\n      if (Array.isArray(slidesIndexes)) {\n        for (var i = slidesIndexes.length - 1; i &gt;= 0; i -= 1) {\n          swiper.virtual.slides.splice(slidesIndexes[i], 1);\n          if (swiper.params.virtual.cache) {\n            delete swiper.virtual.cache[slidesIndexes[i]];\n          }\n          if (slidesIndexes[i] &lt; activeIndex) { activeIndex -= 1; }\n          activeIndex = Math.max(activeIndex, 0);\n        }\n      } else {\n        swiper.virtual.slides.splice(slidesIndexes, 1);\n        if (swiper.params.virtual.cache) {\n          delete swiper.virtual.cache[slidesIndexes];\n        }\n        if (slidesIndexes &lt; activeIndex) { activeIndex -= 1; }\n        activeIndex = Math.max(activeIndex, 0);\n      }\n      swiper.virtual.update(true);\n      swiper.slideTo(activeIndex, 0);\n    },\n    removeAllSlides: function removeAllSlides() {\n      var swiper = this;\n      swiper.virtual.slides = [];\n      if (swiper.params.virtual.cache) {\n        swiper.virtual.cache = {};\n      }\n      swiper.virtual.update(true);\n      swiper.slideTo(0, 0);\n    },\n  };\n\n  var Virtual$1 = {\n    name: 'virtual',\n    params: {\n      virtual: {\n        enabled: false,\n        slides: [],\n        cache: true,\n        renderSlide: null,\n        renderExternal: null,\n        addSlidesBefore: 0,\n        addSlidesAfter: 0,\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        virtual: {\n          update: Virtual.update.bind(swiper),\n          appendSlide: Virtual.appendSlide.bind(swiper),\n          prependSlide: Virtual.prependSlide.bind(swiper),\n          removeSlide: Virtual.removeSlide.bind(swiper),\n          removeAllSlides: Virtual.removeAllSlides.bind(swiper),\n          renderSlide: Virtual.renderSlide.bind(swiper),\n          slides: swiper.params.virtual.slides,\n          cache: {},\n        },\n      });\n    },\n    on: {\n      beforeInit: function beforeInit() {\n        var swiper = this;\n        if (!swiper.params.virtual.enabled) { return; }\n        swiper.classNames.push(((swiper.params.containerModifierClass) + \"virtual\"));\n        var overwriteParams = {\n          watchSlidesProgress: true,\n        };\n        Utils.extend(swiper.params, overwriteParams);\n        Utils.extend(swiper.originalParams, overwriteParams);\n\n        if (!swiper.params.initialSlide) {\n          swiper.virtual.update();\n        }\n      },\n      setTranslate: function setTranslate() {\n        var swiper = this;\n        if (!swiper.params.virtual.enabled) { return; }\n        swiper.virtual.update();\n      },\n    },\n  };\n\n  var Keyboard = {\n    handle: function handle(event) {\n      var swiper = this;\n      var rtl = swiper.rtlTranslate;\n      var e = event;\n      if (e.originalEvent) { e = e.originalEvent; } // jquery fix\n      var kc = e.keyCode || e.charCode;\n      // Directions locks\n      if (!swiper.allowSlideNext &amp;&amp; ((swiper.isHorizontal() &amp;&amp; kc === 39) || (swiper.isVertical() &amp;&amp; kc === 40) || kc === 34)) {\n        return false;\n      }\n      if (!swiper.allowSlidePrev &amp;&amp; ((swiper.isHorizontal() &amp;&amp; kc === 37) || (swiper.isVertical() &amp;&amp; kc === 38) || kc === 33)) {\n        return false;\n      }\n      if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n        return undefined;\n      }\n      if (doc.activeElement &amp;&amp; doc.activeElement.nodeName &amp;&amp; (doc.activeElement.nodeName.toLowerCase() === 'input' || doc.activeElement.nodeName.toLowerCase() === 'textarea')) {\n        return undefined;\n      }\n      if (swiper.params.keyboard.onlyInViewport &amp;&amp; (kc === 33 || kc === 34 || kc === 37 || kc === 39 || kc === 38 || kc === 40)) {\n        var inView = false;\n        // Check that swiper should be inside of visible area of window\n        if (swiper.$el.parents((\".\" + (swiper.params.slideClass))).length &gt; 0 &amp;&amp; swiper.$el.parents((\".\" + (swiper.params.slideActiveClass))).length === 0) {\n          return undefined;\n        }\n        var windowWidth = win.innerWidth;\n        var windowHeight = win.innerHeight;\n        var swiperOffset = swiper.$el.offset();\n        if (rtl) { swiperOffset.left -= swiper.$el[0].scrollLeft; }\n        var swiperCoord = [\n          [swiperOffset.left, swiperOffset.top],\n          [swiperOffset.left + swiper.width, swiperOffset.top],\n          [swiperOffset.left, swiperOffset.top + swiper.height],\n          [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height] ];\n        for (var i = 0; i &lt; swiperCoord.length; i += 1) {\n          var point = swiperCoord[i];\n          if (\n            point[0] &gt;= 0 &amp;&amp; point[0] &lt;= windowWidth\n            &amp;&amp; point[1] &gt;= 0 &amp;&amp; point[1] &lt;= windowHeight\n          ) {\n            inView = true;\n          }\n        }\n        if (!inView) { return undefined; }\n      }\n      if (swiper.isHorizontal()) {\n        if (kc === 33 || kc === 34 || kc === 37 || kc === 39) {\n          if (e.preventDefault) { e.preventDefault(); }\n          else { e.returnValue = false; }\n        }\n        if (((kc === 34 || kc === 39) &amp;&amp; !rtl) || ((kc === 33 || kc === 37) &amp;&amp; rtl)) { swiper.slideNext(); }\n        if (((kc === 33 || kc === 37) &amp;&amp; !rtl) || ((kc === 34 || kc === 39) &amp;&amp; rtl)) { swiper.slidePrev(); }\n      } else {\n        if (kc === 33 || kc === 34 || kc === 38 || kc === 40) {\n          if (e.preventDefault) { e.preventDefault(); }\n          else { e.returnValue = false; }\n        }\n        if (kc === 34 || kc === 40) { swiper.slideNext(); }\n        if (kc === 33 || kc === 38) { swiper.slidePrev(); }\n      }\n      swiper.emit('keyPress', kc);\n      return undefined;\n    },\n    enable: function enable() {\n      var swiper = this;\n      if (swiper.keyboard.enabled) { return; }\n      $(doc).on('keydown', swiper.keyboard.handle);\n      swiper.keyboard.enabled = true;\n    },\n    disable: function disable() {\n      var swiper = this;\n      if (!swiper.keyboard.enabled) { return; }\n      $(doc).off('keydown', swiper.keyboard.handle);\n      swiper.keyboard.enabled = false;\n    },\n  };\n\n  var Keyboard$1 = {\n    name: 'keyboard',\n    params: {\n      keyboard: {\n        enabled: false,\n        onlyInViewport: true,\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        keyboard: {\n          enabled: false,\n          enable: Keyboard.enable.bind(swiper),\n          disable: Keyboard.disable.bind(swiper),\n          handle: Keyboard.handle.bind(swiper),\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        if (swiper.params.keyboard.enabled) {\n          swiper.keyboard.enable();\n        }\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        if (swiper.keyboard.enabled) {\n          swiper.keyboard.disable();\n        }\n      },\n    },\n  };\n\n  function isEventSupported() {\n    var eventName = 'onwheel';\n    var isSupported = eventName in doc;\n\n    if (!isSupported) {\n      var element = doc.createElement('div');\n      element.setAttribute(eventName, 'return;');\n      isSupported = typeof element[eventName] === 'function';\n    }\n\n    if (!isSupported\n      &amp;&amp; doc.implementation\n      &amp;&amp; doc.implementation.hasFeature\n      // always returns true in newer browsers as per the standard.\n      // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n      &amp;&amp; doc.implementation.hasFeature('', '') !== true\n    ) {\n      // This is the only way to test support for the `wheel` event in IE9+.\n      isSupported = doc.implementation.hasFeature('Events.wheel', '3.0');\n    }\n\n    return isSupported;\n  }\n  var Mousewheel = {\n    lastScrollTime: Utils.now(),\n    lastEventBeforeSnap: undefined,\n    recentWheelEvents: [],\n    event: function event() {\n      if (win.navigator.userAgent.indexOf('firefox') &gt; -1) { return 'DOMMouseScroll'; }\n      return isEventSupported() ? 'wheel' : 'mousewheel';\n    },\n    normalize: function normalize(e) {\n      // Reasonable defaults\n      var PIXEL_STEP = 10;\n      var LINE_HEIGHT = 40;\n      var PAGE_HEIGHT = 800;\n\n      var sX = 0;\n      var sY = 0; // spinX, spinY\n      var pX = 0;\n      var pY = 0; // pixelX, pixelY\n\n      // Legacy\n      if ('detail' in e) {\n        sY = e.detail;\n      }\n      if ('wheelDelta' in e) {\n        sY = -e.wheelDelta / 120;\n      }\n      if ('wheelDeltaY' in e) {\n        sY = -e.wheelDeltaY / 120;\n      }\n      if ('wheelDeltaX' in e) {\n        sX = -e.wheelDeltaX / 120;\n      }\n\n      // side scrolling on FF with DOMMouseScroll\n      if ('axis' in e &amp;&amp; e.axis === e.HORIZONTAL_AXIS) {\n        sX = sY;\n        sY = 0;\n      }\n\n      pX = sX * PIXEL_STEP;\n      pY = sY * PIXEL_STEP;\n\n      if ('deltaY' in e) {\n        pY = e.deltaY;\n      }\n      if ('deltaX' in e) {\n        pX = e.deltaX;\n      }\n\n      if (e.shiftKey &amp;&amp; !pX) { // if user scrolls with shift he wants horizontal scroll\n        pX = pY;\n        pY = 0;\n      }\n\n      if ((pX || pY) &amp;&amp; e.deltaMode) {\n        if (e.deltaMode === 1) { // delta in LINE units\n          pX *= LINE_HEIGHT;\n          pY *= LINE_HEIGHT;\n        } else { // delta in PAGE units\n          pX *= PAGE_HEIGHT;\n          pY *= PAGE_HEIGHT;\n        }\n      }\n\n      // Fall-back if spin cannot be determined\n      if (pX &amp;&amp; !sX) {\n        sX = (pX &lt; 1) ? -1 : 1;\n      }\n      if (pY &amp;&amp; !sY) {\n        sY = (pY &lt; 1) ? -1 : 1;\n      }\n\n      return {\n        spinX: sX,\n        spinY: sY,\n        pixelX: pX,\n        pixelY: pY,\n      };\n    },\n    handleMouseEnter: function handleMouseEnter() {\n      var swiper = this;\n      swiper.mouseEntered = true;\n    },\n    handleMouseLeave: function handleMouseLeave() {\n      var swiper = this;\n      swiper.mouseEntered = false;\n    },\n    handle: function handle(event) {\n      var e = event;\n      var swiper = this;\n      var params = swiper.params.mousewheel;\n\n      if (swiper.params.cssMode) {\n        e.preventDefault();\n      }\n\n      var target = swiper.$el;\n      if (swiper.params.mousewheel.eventsTarged !== 'container') {\n        target = $(swiper.params.mousewheel.eventsTarged);\n      }\n      if (!swiper.mouseEntered &amp;&amp; !target[0].contains(e.target) &amp;&amp; !params.releaseOnEdges) { return true; }\n\n      if (e.originalEvent) { e = e.originalEvent; } // jquery fix\n      var delta = 0;\n      var rtlFactor = swiper.rtlTranslate ? -1 : 1;\n\n      var data = Mousewheel.normalize(e);\n\n      if (params.forceToAxis) {\n        if (swiper.isHorizontal()) {\n          if (Math.abs(data.pixelX) &gt; Math.abs(data.pixelY)) { delta = data.pixelX * rtlFactor; }\n          else { return true; }\n        } else if (Math.abs(data.pixelY) &gt; Math.abs(data.pixelX)) { delta = data.pixelY; }\n        else { return true; }\n      } else {\n        delta = Math.abs(data.pixelX) &gt; Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n      }\n\n      if (delta === 0) { return true; }\n\n      if (params.invert) { delta = -delta; }\n\n      if (!swiper.params.freeMode) {\n        // Register the new event in a variable which stores the relevant data\n        var newEvent = {\n          time: Utils.now(),\n          delta: Math.abs(delta),\n          direction: Math.sign(delta),\n          raw: event,\n        };\n\n        // Keep the most recent events\n        var recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n        if (recentWheelEvents.length &gt;= 2) {\n          recentWheelEvents.shift(); // only store the last N events\n        }\n        var prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n        recentWheelEvents.push(newEvent);\n\n        // If there is at least one previous recorded event:\n        //   If direction has changed or\n        //   if the scroll is quicker than the previous one:\n        //     Animate the slider.\n        // Else (this is the first time the wheel is moved):\n        //     Animate the slider.\n        if (prevEvent) {\n          if (newEvent.direction !== prevEvent.direction || newEvent.delta &gt; prevEvent.delta) {\n            swiper.mousewheel.animateSlider(newEvent);\n          }\n        } else {\n          swiper.mousewheel.animateSlider(newEvent);\n        }\n\n        // If it's time to release the scroll:\n        //   Return now so you don't hit the preventDefault.\n        if (swiper.mousewheel.releaseScroll(newEvent)) {\n          return true;\n        }\n      } else {\n        // Freemode or scrollContainer:\n\n        // If we recently snapped after a momentum scroll, then ignore wheel events\n        // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n        // or if it's a new scroll (larger delta or inverse sign as last event before\n        // an end-of-momentum snap).\n        var newEvent$1 = { time: Utils.now(), delta: Math.abs(delta), direction: Math.sign(delta) };\n        var ref = swiper.mousewheel;\n        var lastEventBeforeSnap = ref.lastEventBeforeSnap;\n        var ignoreWheelEvents = lastEventBeforeSnap\n          &amp;&amp; newEvent$1.time &lt; lastEventBeforeSnap.time + 500\n          &amp;&amp; newEvent$1.delta &lt;= lastEventBeforeSnap.delta\n          &amp;&amp; newEvent$1.direction === lastEventBeforeSnap.direction;\n        if (!ignoreWheelEvents) {\n          swiper.mousewheel.lastEventBeforeSnap = undefined;\n\n          if (swiper.params.loop) {\n            swiper.loopFix();\n          }\n          var position = swiper.getTranslate() + (delta * params.sensitivity);\n          var wasBeginning = swiper.isBeginning;\n          var wasEnd = swiper.isEnd;\n\n          if (position &gt;= swiper.minTranslate()) { position = swiper.minTranslate(); }\n          if (position &lt;= swiper.maxTranslate()) { position = swiper.maxTranslate(); }\n\n          swiper.setTransition(0);\n          swiper.setTranslate(position);\n          swiper.updateProgress();\n          swiper.updateActiveIndex();\n          swiper.updateSlidesClasses();\n\n          if ((!wasBeginning &amp;&amp; swiper.isBeginning) || (!wasEnd &amp;&amp; swiper.isEnd)) {\n            swiper.updateSlidesClasses();\n          }\n\n          if (swiper.params.freeModeSticky) {\n            // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n            // the end of a momentum scroll by storing recent (N=15?) wheel events.\n            // 1. do all N events have decreasing or same (absolute value) delta?\n            // 2. did all N events arrive in the last M (M=500?) msecs?\n            // 3. does the earliest event have an (absolute value) delta that's\n            //    at least P (P=1?) larger than the most recent event's delta?\n            // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n            // If 1-4 are \"yes\" then we're near the end of a momuntum scroll deceleration.\n            // Snap immediately and ignore remaining wheel events in this scroll.\n            // See comment above for \"remaining wheel events in this scroll\" determination.\n            // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n            clearTimeout(swiper.mousewheel.timeout);\n            swiper.mousewheel.timeout = undefined;\n            var recentWheelEvents$1 = swiper.mousewheel.recentWheelEvents;\n            if (recentWheelEvents$1.length &gt;= 15) {\n              recentWheelEvents$1.shift(); // only store the last N events\n            }\n            var prevEvent$1 = recentWheelEvents$1.length ? recentWheelEvents$1[recentWheelEvents$1.length - 1] : undefined;\n            var firstEvent = recentWheelEvents$1[0];\n            recentWheelEvents$1.push(newEvent$1);\n            if (prevEvent$1 &amp;&amp; (newEvent$1.delta &gt; prevEvent$1.delta || newEvent$1.direction !== prevEvent$1.direction)) {\n              // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n              recentWheelEvents$1.splice(0);\n            } else if (recentWheelEvents$1.length &gt;= 15\n                &amp;&amp; newEvent$1.time - firstEvent.time &lt; 500\n                &amp;&amp; firstEvent.delta - newEvent$1.delta &gt;= 1\n                &amp;&amp; newEvent$1.delta &lt;= 6\n            ) {\n              // We're at the end of the deceleration of a momentum scroll, so there's no need\n              // to wait for more events. Snap ASAP on the next tick.\n              // Also, because there's some remaining momentum we'll bias the snap in the\n              // direction of the ongoing scroll because it's better UX for the scroll to snap\n              // in the same direction as the scroll instead of reversing to snap.  Therefore,\n              // if it's already scrolled more than 20% in the current direction, keep going.\n              var snapToThreshold = delta &gt; 0 ? 0.8 : 0.2;\n              swiper.mousewheel.lastEventBeforeSnap = newEvent$1;\n              recentWheelEvents$1.splice(0);\n              swiper.mousewheel.timeout = Utils.nextTick(function () {\n                swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n              }, 0); // no delay; move on next tick\n            }\n            if (!swiper.mousewheel.timeout) {\n              // if we get here, then we haven't detected the end of a momentum scroll, so\n              // we'll consider a scroll \"complete\" when there haven't been any wheel events\n              // for 500ms.\n              swiper.mousewheel.timeout = Utils.nextTick(function () {\n                var snapToThreshold = 0.5;\n                swiper.mousewheel.lastEventBeforeSnap = newEvent$1;\n                recentWheelEvents$1.splice(0);\n                swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n              }, 500);\n            }\n          }\n\n          // Emit event\n          if (!ignoreWheelEvents) { swiper.emit('scroll', e); }\n\n          // Stop autoplay\n          if (swiper.params.autoplay &amp;&amp; swiper.params.autoplayDisableOnInteraction) { swiper.autoplay.stop(); }\n          // Return page scroll on edge positions\n          if (position === swiper.minTranslate() || position === swiper.maxTranslate()) { return true; }\n        }\n      }\n\n      if (e.preventDefault) { e.preventDefault(); }\n      else { e.returnValue = false; }\n      return false;\n    },\n    animateSlider: function animateSlider(newEvent) {\n      var swiper = this;\n      // If the movement is NOT big enough and\n      // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n      //   Don't go any further (avoid insignificant scroll movement).\n      if (newEvent.delta &gt;= 6 &amp;&amp; Utils.now() - swiper.mousewheel.lastScrollTime &lt; 60) {\n        // Return false as a default\n        return true;\n      }\n      // If user is scrolling towards the end:\n      //   If the slider hasn't hit the latest slide or\n      //   if the slider is a loop and\n      //   if the slider isn't moving right now:\n      //     Go to next slide and\n      //     emit a scroll event.\n      // Else (the user is scrolling towards the beginning) and\n      // if the slider hasn't hit the first slide or\n      // if the slider is a loop and\n      // if the slider isn't moving right now:\n      //   Go to prev slide and\n      //   emit a scroll event.\n      if (newEvent.direction &lt; 0) {\n        if ((!swiper.isEnd || swiper.params.loop) &amp;&amp; !swiper.animating) {\n          swiper.slideNext();\n          swiper.emit('scroll', newEvent.raw);\n        }\n      } else if ((!swiper.isBeginning || swiper.params.loop) &amp;&amp; !swiper.animating) {\n        swiper.slidePrev();\n        swiper.emit('scroll', newEvent.raw);\n      }\n      // If you got here is because an animation has been triggered so store the current time\n      swiper.mousewheel.lastScrollTime = (new win.Date()).getTime();\n      // Return false as a default\n      return false;\n    },\n    releaseScroll: function releaseScroll(newEvent) {\n      var swiper = this;\n      var params = swiper.params.mousewheel;\n      if (newEvent.direction &lt; 0) {\n        if (swiper.isEnd &amp;&amp; !swiper.params.loop &amp;&amp; params.releaseOnEdges) {\n          // Return true to animate scroll on edges\n          return true;\n        }\n      } else if (swiper.isBeginning &amp;&amp; !swiper.params.loop &amp;&amp; params.releaseOnEdges) {\n        // Return true to animate scroll on edges\n        return true;\n      }\n      return false;\n    },\n    enable: function enable() {\n      var swiper = this;\n      var event = Mousewheel.event();\n      if (swiper.params.cssMode) {\n        swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);\n        return true;\n      }\n      if (!event) { return false; }\n      if (swiper.mousewheel.enabled) { return false; }\n      var target = swiper.$el;\n      if (swiper.params.mousewheel.eventsTarged !== 'container') {\n        target = $(swiper.params.mousewheel.eventsTarged);\n      }\n      target.on('mouseenter', swiper.mousewheel.handleMouseEnter);\n      target.on('mouseleave', swiper.mousewheel.handleMouseLeave);\n      target.on(event, swiper.mousewheel.handle);\n      swiper.mousewheel.enabled = true;\n      return true;\n    },\n    disable: function disable() {\n      var swiper = this;\n      var event = Mousewheel.event();\n      if (swiper.params.cssMode) {\n        swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);\n        return true;\n      }\n      if (!event) { return false; }\n      if (!swiper.mousewheel.enabled) { return false; }\n      var target = swiper.$el;\n      if (swiper.params.mousewheel.eventsTarged !== 'container') {\n        target = $(swiper.params.mousewheel.eventsTarged);\n      }\n      target.off(event, swiper.mousewheel.handle);\n      swiper.mousewheel.enabled = false;\n      return true;\n    },\n  };\n\n  var Mousewheel$1 = {\n    name: 'mousewheel',\n    params: {\n      mousewheel: {\n        enabled: false,\n        releaseOnEdges: false,\n        invert: false,\n        forceToAxis: false,\n        sensitivity: 1,\n        eventsTarged: 'container',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        mousewheel: {\n          enabled: false,\n          enable: Mousewheel.enable.bind(swiper),\n          disable: Mousewheel.disable.bind(swiper),\n          handle: Mousewheel.handle.bind(swiper),\n          handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),\n          handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),\n          animateSlider: Mousewheel.animateSlider.bind(swiper),\n          releaseScroll: Mousewheel.releaseScroll.bind(swiper),\n          lastScrollTime: Utils.now(),\n          lastEventBeforeSnap: undefined,\n          recentWheelEvents: [],\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        if (!swiper.params.mousewheel.enabled &amp;&amp; swiper.params.cssMode) {\n          swiper.mousewheel.disable();\n        }\n        if (swiper.params.mousewheel.enabled) { swiper.mousewheel.enable(); }\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        if (swiper.params.cssMode) {\n          swiper.mousewheel.enable();\n        }\n        if (swiper.mousewheel.enabled) { swiper.mousewheel.disable(); }\n      },\n    },\n  };\n\n  var Navigation = {\n    update: function update() {\n      // Update Navigation Buttons\n      var swiper = this;\n      var params = swiper.params.navigation;\n\n      if (swiper.params.loop) { return; }\n      var ref = swiper.navigation;\n      var $nextEl = ref.$nextEl;\n      var $prevEl = ref.$prevEl;\n\n      if ($prevEl &amp;&amp; $prevEl.length &gt; 0) {\n        if (swiper.isBeginning) {\n          $prevEl.addClass(params.disabledClass);\n        } else {\n          $prevEl.removeClass(params.disabledClass);\n        }\n        $prevEl[swiper.params.watchOverflow &amp;&amp; swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n      }\n      if ($nextEl &amp;&amp; $nextEl.length &gt; 0) {\n        if (swiper.isEnd) {\n          $nextEl.addClass(params.disabledClass);\n        } else {\n          $nextEl.removeClass(params.disabledClass);\n        }\n        $nextEl[swiper.params.watchOverflow &amp;&amp; swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n      }\n    },\n    onPrevClick: function onPrevClick(e) {\n      var swiper = this;\n      e.preventDefault();\n      if (swiper.isBeginning &amp;&amp; !swiper.params.loop) { return; }\n      swiper.slidePrev();\n    },\n    onNextClick: function onNextClick(e) {\n      var swiper = this;\n      e.preventDefault();\n      if (swiper.isEnd &amp;&amp; !swiper.params.loop) { return; }\n      swiper.slideNext();\n    },\n    init: function init() {\n      var swiper = this;\n      var params = swiper.params.navigation;\n      if (!(params.nextEl || params.prevEl)) { return; }\n\n      var $nextEl;\n      var $prevEl;\n      if (params.nextEl) {\n        $nextEl = $(params.nextEl);\n        if (\n          swiper.params.uniqueNavElements\n          &amp;&amp; typeof params.nextEl === 'string'\n          &amp;&amp; $nextEl.length &gt; 1\n          &amp;&amp; swiper.$el.find(params.nextEl).length === 1\n        ) {\n          $nextEl = swiper.$el.find(params.nextEl);\n        }\n      }\n      if (params.prevEl) {\n        $prevEl = $(params.prevEl);\n        if (\n          swiper.params.uniqueNavElements\n          &amp;&amp; typeof params.prevEl === 'string'\n          &amp;&amp; $prevEl.length &gt; 1\n          &amp;&amp; swiper.$el.find(params.prevEl).length === 1\n        ) {\n          $prevEl = swiper.$el.find(params.prevEl);\n        }\n      }\n\n      if ($nextEl &amp;&amp; $nextEl.length &gt; 0) {\n        $nextEl.on('click', swiper.navigation.onNextClick);\n      }\n      if ($prevEl &amp;&amp; $prevEl.length &gt; 0) {\n        $prevEl.on('click', swiper.navigation.onPrevClick);\n      }\n\n      Utils.extend(swiper.navigation, {\n        $nextEl: $nextEl,\n        nextEl: $nextEl &amp;&amp; $nextEl[0],\n        $prevEl: $prevEl,\n        prevEl: $prevEl &amp;&amp; $prevEl[0],\n      });\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      var ref = swiper.navigation;\n      var $nextEl = ref.$nextEl;\n      var $prevEl = ref.$prevEl;\n      if ($nextEl &amp;&amp; $nextEl.length) {\n        $nextEl.off('click', swiper.navigation.onNextClick);\n        $nextEl.removeClass(swiper.params.navigation.disabledClass);\n      }\n      if ($prevEl &amp;&amp; $prevEl.length) {\n        $prevEl.off('click', swiper.navigation.onPrevClick);\n        $prevEl.removeClass(swiper.params.navigation.disabledClass);\n      }\n    },\n  };\n\n  var Navigation$1 = {\n    name: 'navigation',\n    params: {\n      navigation: {\n        nextEl: null,\n        prevEl: null,\n\n        hideOnClick: false,\n        disabledClass: 'swiper-button-disabled',\n        hiddenClass: 'swiper-button-hidden',\n        lockClass: 'swiper-button-lock',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        navigation: {\n          init: Navigation.init.bind(swiper),\n          update: Navigation.update.bind(swiper),\n          destroy: Navigation.destroy.bind(swiper),\n          onNextClick: Navigation.onNextClick.bind(swiper),\n          onPrevClick: Navigation.onPrevClick.bind(swiper),\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        swiper.navigation.init();\n        swiper.navigation.update();\n      },\n      toEdge: function toEdge() {\n        var swiper = this;\n        swiper.navigation.update();\n      },\n      fromEdge: function fromEdge() {\n        var swiper = this;\n        swiper.navigation.update();\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        swiper.navigation.destroy();\n      },\n      click: function click(e) {\n        var swiper = this;\n        var ref = swiper.navigation;\n        var $nextEl = ref.$nextEl;\n        var $prevEl = ref.$prevEl;\n        if (\n          swiper.params.navigation.hideOnClick\n          &amp;&amp; !$(e.target).is($prevEl)\n          &amp;&amp; !$(e.target).is($nextEl)\n        ) {\n          var isHidden;\n          if ($nextEl) {\n            isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n          } else if ($prevEl) {\n            isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n          }\n          if (isHidden === true) {\n            swiper.emit('navigationShow', swiper);\n          } else {\n            swiper.emit('navigationHide', swiper);\n          }\n          if ($nextEl) {\n            $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n          }\n          if ($prevEl) {\n            $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n          }\n        }\n      },\n    },\n  };\n\n  var Pagination = {\n    update: function update() {\n      // Render || Update Pagination bullets/items\n      var swiper = this;\n      var rtl = swiper.rtl;\n      var params = swiper.params.pagination;\n      if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n      var slidesLength = swiper.virtual &amp;&amp; swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n      var $el = swiper.pagination.$el;\n      // Current/Total\n      var current;\n      var total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n      if (swiper.params.loop) {\n        current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n        if (current &gt; slidesLength - 1 - (swiper.loopedSlides * 2)) {\n          current -= (slidesLength - (swiper.loopedSlides * 2));\n        }\n        if (current &gt; total - 1) { current -= total; }\n        if (current &lt; 0 &amp;&amp; swiper.params.paginationType !== 'bullets') { current = total + current; }\n      } else if (typeof swiper.snapIndex !== 'undefined') {\n        current = swiper.snapIndex;\n      } else {\n        current = swiper.activeIndex || 0;\n      }\n      // Types\n      if (params.type === 'bullets' &amp;&amp; swiper.pagination.bullets &amp;&amp; swiper.pagination.bullets.length &gt; 0) {\n        var bullets = swiper.pagination.bullets;\n        var firstIndex;\n        var lastIndex;\n        var midIndex;\n        if (params.dynamicBullets) {\n          swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n          $el.css(swiper.isHorizontal() ? 'width' : 'height', ((swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)) + \"px\"));\n          if (params.dynamicMainBullets &gt; 1 &amp;&amp; swiper.previousIndex !== undefined) {\n            swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex);\n            if (swiper.pagination.dynamicBulletIndex &gt; (params.dynamicMainBullets - 1)) {\n              swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;\n            } else if (swiper.pagination.dynamicBulletIndex &lt; 0) {\n              swiper.pagination.dynamicBulletIndex = 0;\n            }\n          }\n          firstIndex = current - swiper.pagination.dynamicBulletIndex;\n          lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n          midIndex = (lastIndex + firstIndex) / 2;\n        }\n        bullets.removeClass(((params.bulletActiveClass) + \" \" + (params.bulletActiveClass) + \"-next \" + (params.bulletActiveClass) + \"-next-next \" + (params.bulletActiveClass) + \"-prev \" + (params.bulletActiveClass) + \"-prev-prev \" + (params.bulletActiveClass) + \"-main\"));\n        if ($el.length &gt; 1) {\n          bullets.each(function (index, bullet) {\n            var $bullet = $(bullet);\n            var bulletIndex = $bullet.index();\n            if (bulletIndex === current) {\n              $bullet.addClass(params.bulletActiveClass);\n            }\n            if (params.dynamicBullets) {\n              if (bulletIndex &gt;= firstIndex &amp;&amp; bulletIndex &lt;= lastIndex) {\n                $bullet.addClass(((params.bulletActiveClass) + \"-main\"));\n              }\n              if (bulletIndex === firstIndex) {\n                $bullet\n                  .prev()\n                  .addClass(((params.bulletActiveClass) + \"-prev\"))\n                  .prev()\n                  .addClass(((params.bulletActiveClass) + \"-prev-prev\"));\n              }\n              if (bulletIndex === lastIndex) {\n                $bullet\n                  .next()\n                  .addClass(((params.bulletActiveClass) + \"-next\"))\n                  .next()\n                  .addClass(((params.bulletActiveClass) + \"-next-next\"));\n              }\n            }\n          });\n        } else {\n          var $bullet = bullets.eq(current);\n          var bulletIndex = $bullet.index();\n          $bullet.addClass(params.bulletActiveClass);\n          if (params.dynamicBullets) {\n            var $firstDisplayedBullet = bullets.eq(firstIndex);\n            var $lastDisplayedBullet = bullets.eq(lastIndex);\n            for (var i = firstIndex; i &lt;= lastIndex; i += 1) {\n              bullets.eq(i).addClass(((params.bulletActiveClass) + \"-main\"));\n            }\n            if (swiper.params.loop) {\n              if (bulletIndex &gt;= bullets.length - params.dynamicMainBullets) {\n                for (var i$1 = params.dynamicMainBullets; i$1 &gt;= 0; i$1 -= 1) {\n                  bullets.eq(bullets.length - i$1).addClass(((params.bulletActiveClass) + \"-main\"));\n                }\n                bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(((params.bulletActiveClass) + \"-prev\"));\n              } else {\n                $firstDisplayedBullet\n                  .prev()\n                  .addClass(((params.bulletActiveClass) + \"-prev\"))\n                  .prev()\n                  .addClass(((params.bulletActiveClass) + \"-prev-prev\"));\n                $lastDisplayedBullet\n                  .next()\n                  .addClass(((params.bulletActiveClass) + \"-next\"))\n                  .next()\n                  .addClass(((params.bulletActiveClass) + \"-next-next\"));\n              }\n            } else {\n              $firstDisplayedBullet\n                .prev()\n                .addClass(((params.bulletActiveClass) + \"-prev\"))\n                .prev()\n                .addClass(((params.bulletActiveClass) + \"-prev-prev\"));\n              $lastDisplayedBullet\n                .next()\n                .addClass(((params.bulletActiveClass) + \"-next\"))\n                .next()\n                .addClass(((params.bulletActiveClass) + \"-next-next\"));\n            }\n          }\n        }\n        if (params.dynamicBullets) {\n          var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n          var bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize);\n          var offsetProp = rtl ? 'right' : 'left';\n          bullets.css(swiper.isHorizontal() ? offsetProp : 'top', (bulletsOffset + \"px\"));\n        }\n      }\n      if (params.type === 'fraction') {\n        $el.find((\".\" + (params.currentClass))).text(params.formatFractionCurrent(current + 1));\n        $el.find((\".\" + (params.totalClass))).text(params.formatFractionTotal(total));\n      }\n      if (params.type === 'progressbar') {\n        var progressbarDirection;\n        if (params.progressbarOpposite) {\n          progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n        } else {\n          progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n        }\n        var scale = (current + 1) / total;\n        var scaleX = 1;\n        var scaleY = 1;\n        if (progressbarDirection === 'horizontal') {\n          scaleX = scale;\n        } else {\n          scaleY = scale;\n        }\n        $el.find((\".\" + (params.progressbarFillClass))).transform((\"translate3d(0,0,0) scaleX(\" + scaleX + \") scaleY(\" + scaleY + \")\")).transition(swiper.params.speed);\n      }\n      if (params.type === 'custom' &amp;&amp; params.renderCustom) {\n        $el.html(params.renderCustom(swiper, current + 1, total));\n        swiper.emit('paginationRender', swiper, $el[0]);\n      } else {\n        swiper.emit('paginationUpdate', swiper, $el[0]);\n      }\n      $el[swiper.params.watchOverflow &amp;&amp; swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n    },\n    render: function render() {\n      // Render Container\n      var swiper = this;\n      var params = swiper.params.pagination;\n      if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n      var slidesLength = swiper.virtual &amp;&amp; swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n\n      var $el = swiper.pagination.$el;\n      var paginationHTML = '';\n      if (params.type === 'bullets') {\n        var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n        for (var i = 0; i &lt; numberOfBullets; i += 1) {\n          if (params.renderBullet) {\n            paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n          } else {\n            paginationHTML += \"&lt;\" + (params.bulletElement) + \" class=\\\"\" + (params.bulletClass) + \"\\\"&gt;&lt;/\" + (params.bulletElement) + \"&gt;\";\n          }\n        }\n        $el.html(paginationHTML);\n        swiper.pagination.bullets = $el.find((\".\" + (params.bulletClass)));\n      }\n      if (params.type === 'fraction') {\n        if (params.renderFraction) {\n          paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n        } else {\n          paginationHTML = \"&lt;span class=\\\"\" + (params.currentClass) + \"\\\"&gt;&lt;/span&gt;\"\n          + ' / '\n          + \"&lt;span class=\\\"\" + (params.totalClass) + \"\\\"&gt;&lt;/span&gt;\";\n        }\n        $el.html(paginationHTML);\n      }\n      if (params.type === 'progressbar') {\n        if (params.renderProgressbar) {\n          paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n        } else {\n          paginationHTML = \"&lt;span class=\\\"\" + (params.progressbarFillClass) + \"\\\"&gt;&lt;/span&gt;\";\n        }\n        $el.html(paginationHTML);\n      }\n      if (params.type !== 'custom') {\n        swiper.emit('paginationRender', swiper.pagination.$el[0]);\n      }\n    },\n    init: function init() {\n      var swiper = this;\n      var params = swiper.params.pagination;\n      if (!params.el) { return; }\n\n      var $el = $(params.el);\n      if ($el.length === 0) { return; }\n\n      if (\n        swiper.params.uniqueNavElements\n        &amp;&amp; typeof params.el === 'string'\n        &amp;&amp; $el.length &gt; 1\n        &amp;&amp; swiper.$el.find(params.el).length === 1\n      ) {\n        $el = swiper.$el.find(params.el);\n      }\n\n      if (params.type === 'bullets' &amp;&amp; params.clickable) {\n        $el.addClass(params.clickableClass);\n      }\n\n      $el.addClass(params.modifierClass + params.type);\n\n      if (params.type === 'bullets' &amp;&amp; params.dynamicBullets) {\n        $el.addClass((\"\" + (params.modifierClass) + (params.type) + \"-dynamic\"));\n        swiper.pagination.dynamicBulletIndex = 0;\n        if (params.dynamicMainBullets &lt; 1) {\n          params.dynamicMainBullets = 1;\n        }\n      }\n      if (params.type === 'progressbar' &amp;&amp; params.progressbarOpposite) {\n        $el.addClass(params.progressbarOppositeClass);\n      }\n\n      if (params.clickable) {\n        $el.on('click', (\".\" + (params.bulletClass)), function onClick(e) {\n          e.preventDefault();\n          var index = $(this).index() * swiper.params.slidesPerGroup;\n          if (swiper.params.loop) { index += swiper.loopedSlides; }\n          swiper.slideTo(index);\n        });\n      }\n\n      Utils.extend(swiper.pagination, {\n        $el: $el,\n        el: $el[0],\n      });\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      var params = swiper.params.pagination;\n      if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n      var $el = swiper.pagination.$el;\n\n      $el.removeClass(params.hiddenClass);\n      $el.removeClass(params.modifierClass + params.type);\n      if (swiper.pagination.bullets) { swiper.pagination.bullets.removeClass(params.bulletActiveClass); }\n      if (params.clickable) {\n        $el.off('click', (\".\" + (params.bulletClass)));\n      }\n    },\n  };\n\n  var Pagination$1 = {\n    name: 'pagination',\n    params: {\n      pagination: {\n        el: null,\n        bulletElement: 'span',\n        clickable: false,\n        hideOnClick: false,\n        renderBullet: null,\n        renderProgressbar: null,\n        renderFraction: null,\n        renderCustom: null,\n        progressbarOpposite: false,\n        type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n        dynamicBullets: false,\n        dynamicMainBullets: 1,\n        formatFractionCurrent: function (number) { return number; },\n        formatFractionTotal: function (number) { return number; },\n        bulletClass: 'swiper-pagination-bullet',\n        bulletActiveClass: 'swiper-pagination-bullet-active',\n        modifierClass: 'swiper-pagination-', // NEW\n        currentClass: 'swiper-pagination-current',\n        totalClass: 'swiper-pagination-total',\n        hiddenClass: 'swiper-pagination-hidden',\n        progressbarFillClass: 'swiper-pagination-progressbar-fill',\n        progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',\n        clickableClass: 'swiper-pagination-clickable', // NEW\n        lockClass: 'swiper-pagination-lock',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        pagination: {\n          init: Pagination.init.bind(swiper),\n          render: Pagination.render.bind(swiper),\n          update: Pagination.update.bind(swiper),\n          destroy: Pagination.destroy.bind(swiper),\n          dynamicBulletIndex: 0,\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        swiper.pagination.init();\n        swiper.pagination.render();\n        swiper.pagination.update();\n      },\n      activeIndexChange: function activeIndexChange() {\n        var swiper = this;\n        if (swiper.params.loop) {\n          swiper.pagination.update();\n        } else if (typeof swiper.snapIndex === 'undefined') {\n          swiper.pagination.update();\n        }\n      },\n      snapIndexChange: function snapIndexChange() {\n        var swiper = this;\n        if (!swiper.params.loop) {\n          swiper.pagination.update();\n        }\n      },\n      slidesLengthChange: function slidesLengthChange() {\n        var swiper = this;\n        if (swiper.params.loop) {\n          swiper.pagination.render();\n          swiper.pagination.update();\n        }\n      },\n      snapGridLengthChange: function snapGridLengthChange() {\n        var swiper = this;\n        if (!swiper.params.loop) {\n          swiper.pagination.render();\n          swiper.pagination.update();\n        }\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        swiper.pagination.destroy();\n      },\n      click: function click(e) {\n        var swiper = this;\n        if (\n          swiper.params.pagination.el\n          &amp;&amp; swiper.params.pagination.hideOnClick\n          &amp;&amp; swiper.pagination.$el.length &gt; 0\n          &amp;&amp; !$(e.target).hasClass(swiper.params.pagination.bulletClass)\n        ) {\n          var isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);\n          if (isHidden === true) {\n            swiper.emit('paginationShow', swiper);\n          } else {\n            swiper.emit('paginationHide', swiper);\n          }\n          swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);\n        }\n      },\n    },\n  };\n\n  var Scrollbar = {\n    setTranslate: function setTranslate() {\n      var swiper = this;\n      if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; }\n      var scrollbar = swiper.scrollbar;\n      var rtl = swiper.rtlTranslate;\n      var progress = swiper.progress;\n      var dragSize = scrollbar.dragSize;\n      var trackSize = scrollbar.trackSize;\n      var $dragEl = scrollbar.$dragEl;\n      var $el = scrollbar.$el;\n      var params = swiper.params.scrollbar;\n\n      var newSize = dragSize;\n      var newPos = (trackSize - dragSize) * progress;\n      if (rtl) {\n        newPos = -newPos;\n        if (newPos &gt; 0) {\n          newSize = dragSize - newPos;\n          newPos = 0;\n        } else if (-newPos + dragSize &gt; trackSize) {\n          newSize = trackSize + newPos;\n        }\n      } else if (newPos &lt; 0) {\n        newSize = dragSize + newPos;\n        newPos = 0;\n      } else if (newPos + dragSize &gt; trackSize) {\n        newSize = trackSize - newPos;\n      }\n      if (swiper.isHorizontal()) {\n        $dragEl.transform((\"translate3d(\" + newPos + \"px, 0, 0)\"));\n        $dragEl[0].style.width = newSize + \"px\";\n      } else {\n        $dragEl.transform((\"translate3d(0px, \" + newPos + \"px, 0)\"));\n        $dragEl[0].style.height = newSize + \"px\";\n      }\n      if (params.hide) {\n        clearTimeout(swiper.scrollbar.timeout);\n        $el[0].style.opacity = 1;\n        swiper.scrollbar.timeout = setTimeout(function () {\n          $el[0].style.opacity = 0;\n          $el.transition(400);\n        }, 1000);\n      }\n    },\n    setTransition: function setTransition(duration) {\n      var swiper = this;\n      if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; }\n      swiper.scrollbar.$dragEl.transition(duration);\n    },\n    updateSize: function updateSize() {\n      var swiper = this;\n      if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; }\n\n      var scrollbar = swiper.scrollbar;\n      var $dragEl = scrollbar.$dragEl;\n      var $el = scrollbar.$el;\n\n      $dragEl[0].style.width = '';\n      $dragEl[0].style.height = '';\n      var trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n\n      var divider = swiper.size / swiper.virtualSize;\n      var moveDivider = divider * (trackSize / swiper.size);\n      var dragSize;\n      if (swiper.params.scrollbar.dragSize === 'auto') {\n        dragSize = trackSize * divider;\n      } else {\n        dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n      }\n\n      if (swiper.isHorizontal()) {\n        $dragEl[0].style.width = dragSize + \"px\";\n      } else {\n        $dragEl[0].style.height = dragSize + \"px\";\n      }\n\n      if (divider &gt;= 1) {\n        $el[0].style.display = 'none';\n      } else {\n        $el[0].style.display = '';\n      }\n      if (swiper.params.scrollbar.hide) {\n        $el[0].style.opacity = 0;\n      }\n      Utils.extend(scrollbar, {\n        trackSize: trackSize,\n        divider: divider,\n        moveDivider: moveDivider,\n        dragSize: dragSize,\n      });\n      scrollbar.$el[swiper.params.watchOverflow &amp;&amp; swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n    },\n    getPointerPosition: function getPointerPosition(e) {\n      var swiper = this;\n      if (swiper.isHorizontal()) {\n        return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientX : e.clientX);\n      }\n      return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientY : e.clientY);\n    },\n    setDragPosition: function setDragPosition(e) {\n      var swiper = this;\n      var scrollbar = swiper.scrollbar;\n      var rtl = swiper.rtlTranslate;\n      var $el = scrollbar.$el;\n      var dragSize = scrollbar.dragSize;\n      var trackSize = scrollbar.trackSize;\n      var dragStartPos = scrollbar.dragStartPos;\n\n      var positionRatio;\n      positionRatio = ((scrollbar.getPointerPosition(e)) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top']\n        - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n      positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n      if (rtl) {\n        positionRatio = 1 - positionRatio;\n      }\n\n      var position = swiper.minTranslate() + ((swiper.maxTranslate() - swiper.minTranslate()) * positionRatio);\n\n      swiper.updateProgress(position);\n      swiper.setTranslate(position);\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    },\n    onDragStart: function onDragStart(e) {\n      var swiper = this;\n      var params = swiper.params.scrollbar;\n      var scrollbar = swiper.scrollbar;\n      var $wrapperEl = swiper.$wrapperEl;\n      var $el = scrollbar.$el;\n      var $dragEl = scrollbar.$dragEl;\n      swiper.scrollbar.isTouched = true;\n      swiper.scrollbar.dragStartPos = (e.target === $dragEl[0] || e.target === $dragEl)\n        ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n      e.preventDefault();\n      e.stopPropagation();\n\n      $wrapperEl.transition(100);\n      $dragEl.transition(100);\n      scrollbar.setDragPosition(e);\n\n      clearTimeout(swiper.scrollbar.dragTimeout);\n\n      $el.transition(0);\n      if (params.hide) {\n        $el.css('opacity', 1);\n      }\n      if (swiper.params.cssMode) {\n        swiper.$wrapperEl.css('scroll-snap-type', 'none');\n      }\n      swiper.emit('scrollbarDragStart', e);\n    },\n    onDragMove: function onDragMove(e) {\n      var swiper = this;\n      var scrollbar = swiper.scrollbar;\n      var $wrapperEl = swiper.$wrapperEl;\n      var $el = scrollbar.$el;\n      var $dragEl = scrollbar.$dragEl;\n\n      if (!swiper.scrollbar.isTouched) { return; }\n      if (e.preventDefault) { e.preventDefault(); }\n      else { e.returnValue = false; }\n      scrollbar.setDragPosition(e);\n      $wrapperEl.transition(0);\n      $el.transition(0);\n      $dragEl.transition(0);\n      swiper.emit('scrollbarDragMove', e);\n    },\n    onDragEnd: function onDragEnd(e) {\n      var swiper = this;\n\n      var params = swiper.params.scrollbar;\n      var scrollbar = swiper.scrollbar;\n      var $wrapperEl = swiper.$wrapperEl;\n      var $el = scrollbar.$el;\n\n      if (!swiper.scrollbar.isTouched) { return; }\n      swiper.scrollbar.isTouched = false;\n      if (swiper.params.cssMode) {\n        swiper.$wrapperEl.css('scroll-snap-type', '');\n        $wrapperEl.transition('');\n      }\n      if (params.hide) {\n        clearTimeout(swiper.scrollbar.dragTimeout);\n        swiper.scrollbar.dragTimeout = Utils.nextTick(function () {\n          $el.css('opacity', 0);\n          $el.transition(400);\n        }, 1000);\n      }\n      swiper.emit('scrollbarDragEnd', e);\n      if (params.snapOnRelease) {\n        swiper.slideToClosest();\n      }\n    },\n    enableDraggable: function enableDraggable() {\n      var swiper = this;\n      if (!swiper.params.scrollbar.el) { return; }\n      var scrollbar = swiper.scrollbar;\n      var touchEventsTouch = swiper.touchEventsTouch;\n      var touchEventsDesktop = swiper.touchEventsDesktop;\n      var params = swiper.params;\n      var $el = scrollbar.$el;\n      var target = $el[0];\n      var activeListener = Support.passiveListener &amp;&amp; params.passiveListeners ? { passive: false, capture: false } : false;\n      var passiveListener = Support.passiveListener &amp;&amp; params.passiveListeners ? { passive: true, capture: false } : false;\n      if (!Support.touch) {\n        target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n        doc.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n        doc.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n      } else {\n        target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n        target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n        target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n      }\n    },\n    disableDraggable: function disableDraggable() {\n      var swiper = this;\n      if (!swiper.params.scrollbar.el) { return; }\n      var scrollbar = swiper.scrollbar;\n      var touchEventsTouch = swiper.touchEventsTouch;\n      var touchEventsDesktop = swiper.touchEventsDesktop;\n      var params = swiper.params;\n      var $el = scrollbar.$el;\n      var target = $el[0];\n      var activeListener = Support.passiveListener &amp;&amp; params.passiveListeners ? { passive: false, capture: false } : false;\n      var passiveListener = Support.passiveListener &amp;&amp; params.passiveListeners ? { passive: true, capture: false } : false;\n      if (!Support.touch) {\n        target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n        doc.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n        doc.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n      } else {\n        target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n        target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n        target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n      }\n    },\n    init: function init() {\n      var swiper = this;\n      if (!swiper.params.scrollbar.el) { return; }\n      var scrollbar = swiper.scrollbar;\n      var $swiperEl = swiper.$el;\n      var params = swiper.params.scrollbar;\n\n      var $el = $(params.el);\n      if (swiper.params.uniqueNavElements &amp;&amp; typeof params.el === 'string' &amp;&amp; $el.length &gt; 1 &amp;&amp; $swiperEl.find(params.el).length === 1) {\n        $el = $swiperEl.find(params.el);\n      }\n\n      var $dragEl = $el.find((\".\" + (swiper.params.scrollbar.dragClass)));\n      if ($dragEl.length === 0) {\n        $dragEl = $((\"&lt;div class=\\\"\" + (swiper.params.scrollbar.dragClass) + \"\\\"&gt;&lt;/div&gt;\"));\n        $el.append($dragEl);\n      }\n\n      Utils.extend(scrollbar, {\n        $el: $el,\n        el: $el[0],\n        $dragEl: $dragEl,\n        dragEl: $dragEl[0],\n      });\n\n      if (params.draggable) {\n        scrollbar.enableDraggable();\n      }\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      swiper.scrollbar.disableDraggable();\n    },\n  };\n\n  var Scrollbar$1 = {\n    name: 'scrollbar',\n    params: {\n      scrollbar: {\n        el: null,\n        dragSize: 'auto',\n        hide: false,\n        draggable: false,\n        snapOnRelease: true,\n        lockClass: 'swiper-scrollbar-lock',\n        dragClass: 'swiper-scrollbar-drag',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        scrollbar: {\n          init: Scrollbar.init.bind(swiper),\n          destroy: Scrollbar.destroy.bind(swiper),\n          updateSize: Scrollbar.updateSize.bind(swiper),\n          setTranslate: Scrollbar.setTranslate.bind(swiper),\n          setTransition: Scrollbar.setTransition.bind(swiper),\n          enableDraggable: Scrollbar.enableDraggable.bind(swiper),\n          disableDraggable: Scrollbar.disableDraggable.bind(swiper),\n          setDragPosition: Scrollbar.setDragPosition.bind(swiper),\n          getPointerPosition: Scrollbar.getPointerPosition.bind(swiper),\n          onDragStart: Scrollbar.onDragStart.bind(swiper),\n          onDragMove: Scrollbar.onDragMove.bind(swiper),\n          onDragEnd: Scrollbar.onDragEnd.bind(swiper),\n          isTouched: false,\n          timeout: null,\n          dragTimeout: null,\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        swiper.scrollbar.init();\n        swiper.scrollbar.updateSize();\n        swiper.scrollbar.setTranslate();\n      },\n      update: function update() {\n        var swiper = this;\n        swiper.scrollbar.updateSize();\n      },\n      resize: function resize() {\n        var swiper = this;\n        swiper.scrollbar.updateSize();\n      },\n      observerUpdate: function observerUpdate() {\n        var swiper = this;\n        swiper.scrollbar.updateSize();\n      },\n      setTranslate: function setTranslate() {\n        var swiper = this;\n        swiper.scrollbar.setTranslate();\n      },\n      setTransition: function setTransition(duration) {\n        var swiper = this;\n        swiper.scrollbar.setTransition(duration);\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        swiper.scrollbar.destroy();\n      },\n    },\n  };\n\n  var Parallax = {\n    setTransform: function setTransform(el, progress) {\n      var swiper = this;\n      var rtl = swiper.rtl;\n\n      var $el = $(el);\n      var rtlFactor = rtl ? -1 : 1;\n\n      var p = $el.attr('data-swiper-parallax') || '0';\n      var x = $el.attr('data-swiper-parallax-x');\n      var y = $el.attr('data-swiper-parallax-y');\n      var scale = $el.attr('data-swiper-parallax-scale');\n      var opacity = $el.attr('data-swiper-parallax-opacity');\n\n      if (x || y) {\n        x = x || '0';\n        y = y || '0';\n      } else if (swiper.isHorizontal()) {\n        x = p;\n        y = '0';\n      } else {\n        y = p;\n        x = '0';\n      }\n\n      if ((x).indexOf('%') &gt;= 0) {\n        x = (parseInt(x, 10) * progress * rtlFactor) + \"%\";\n      } else {\n        x = (x * progress * rtlFactor) + \"px\";\n      }\n      if ((y).indexOf('%') &gt;= 0) {\n        y = (parseInt(y, 10) * progress) + \"%\";\n      } else {\n        y = (y * progress) + \"px\";\n      }\n\n      if (typeof opacity !== 'undefined' &amp;&amp; opacity !== null) {\n        var currentOpacity = opacity - ((opacity - 1) * (1 - Math.abs(progress)));\n        $el[0].style.opacity = currentOpacity;\n      }\n      if (typeof scale === 'undefined' || scale === null) {\n        $el.transform((\"translate3d(\" + x + \", \" + y + \", 0px)\"));\n      } else {\n        var currentScale = scale - ((scale - 1) * (1 - Math.abs(progress)));\n        $el.transform((\"translate3d(\" + x + \", \" + y + \", 0px) scale(\" + currentScale + \")\"));\n      }\n    },\n    setTranslate: function setTranslate() {\n      var swiper = this;\n      var $el = swiper.$el;\n      var slides = swiper.slides;\n      var progress = swiper.progress;\n      var snapGrid = swiper.snapGrid;\n      $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n        .each(function (index, el) {\n          swiper.parallax.setTransform(el, progress);\n        });\n      slides.each(function (slideIndex, slideEl) {\n        var slideProgress = slideEl.progress;\n        if (swiper.params.slidesPerGroup &gt; 1 &amp;&amp; swiper.params.slidesPerView !== 'auto') {\n          slideProgress += Math.ceil(slideIndex / 2) - (progress * (snapGrid.length - 1));\n        }\n        slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n        $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n          .each(function (index, el) {\n            swiper.parallax.setTransform(el, slideProgress);\n          });\n      });\n    },\n    setTransition: function setTransition(duration) {\n      if ( duration === void 0 ) duration = this.params.speed;\n\n      var swiper = this;\n      var $el = swiper.$el;\n      $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n        .each(function (index, parallaxEl) {\n          var $parallaxEl = $(parallaxEl);\n          var parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n          if (duration === 0) { parallaxDuration = 0; }\n          $parallaxEl.transition(parallaxDuration);\n        });\n    },\n  };\n\n  var Parallax$1 = {\n    name: 'parallax',\n    params: {\n      parallax: {\n        enabled: false,\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        parallax: {\n          setTransform: Parallax.setTransform.bind(swiper),\n          setTranslate: Parallax.setTranslate.bind(swiper),\n          setTransition: Parallax.setTransition.bind(swiper),\n        },\n      });\n    },\n    on: {\n      beforeInit: function beforeInit() {\n        var swiper = this;\n        if (!swiper.params.parallax.enabled) { return; }\n        swiper.params.watchSlidesProgress = true;\n        swiper.originalParams.watchSlidesProgress = true;\n      },\n      init: function init() {\n        var swiper = this;\n        if (!swiper.params.parallax.enabled) { return; }\n        swiper.parallax.setTranslate();\n      },\n      setTranslate: function setTranslate() {\n        var swiper = this;\n        if (!swiper.params.parallax.enabled) { return; }\n        swiper.parallax.setTranslate();\n      },\n      setTransition: function setTransition(duration) {\n        var swiper = this;\n        if (!swiper.params.parallax.enabled) { return; }\n        swiper.parallax.setTransition(duration);\n      },\n    },\n  };\n\n  var Zoom = {\n    // Calc Scale From Multi-touches\n    getDistanceBetweenTouches: function getDistanceBetweenTouches(e) {\n      if (e.targetTouches.length &lt; 2) { return 1; }\n      var x1 = e.targetTouches[0].pageX;\n      var y1 = e.targetTouches[0].pageY;\n      var x2 = e.targetTouches[1].pageX;\n      var y2 = e.targetTouches[1].pageY;\n      var distance = Math.sqrt((Math.pow( (x2 - x1), 2 )) + (Math.pow( (y2 - y1), 2 )));\n      return distance;\n    },\n    // Events\n    onGestureStart: function onGestureStart(e) {\n      var swiper = this;\n      var params = swiper.params.zoom;\n      var zoom = swiper.zoom;\n      var gesture = zoom.gesture;\n      zoom.fakeGestureTouched = false;\n      zoom.fakeGestureMoved = false;\n      if (!Support.gestures) {\n        if (e.type !== 'touchstart' || (e.type === 'touchstart' &amp;&amp; e.targetTouches.length &lt; 2)) {\n          return;\n        }\n        zoom.fakeGestureTouched = true;\n        gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);\n      }\n      if (!gesture.$slideEl || !gesture.$slideEl.length) {\n        gesture.$slideEl = $(e.target).closest('.swiper-slide');\n        if (gesture.$slideEl.length === 0) { gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); }\n        gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');\n        gesture.$imageWrapEl = gesture.$imageEl.parent((\".\" + (params.containerClass)));\n        gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n        if (gesture.$imageWrapEl.length === 0) {\n          gesture.$imageEl = undefined;\n          return;\n        }\n      }\n      gesture.$imageEl.transition(0);\n      swiper.zoom.isScaling = true;\n    },\n    onGestureChange: function onGestureChange(e) {\n      var swiper = this;\n      var params = swiper.params.zoom;\n      var zoom = swiper.zoom;\n      var gesture = zoom.gesture;\n      if (!Support.gestures) {\n        if (e.type !== 'touchmove' || (e.type === 'touchmove' &amp;&amp; e.targetTouches.length &lt; 2)) {\n          return;\n        }\n        zoom.fakeGestureMoved = true;\n        gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);\n      }\n      if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n      if (Support.gestures) {\n        zoom.scale = e.scale * zoom.currentScale;\n      } else {\n        zoom.scale = (gesture.scaleMove / gesture.scaleStart) * zoom.currentScale;\n      }\n      if (zoom.scale &gt; gesture.maxRatio) {\n        zoom.scale = (gesture.maxRatio - 1) + (Math.pow( ((zoom.scale - gesture.maxRatio) + 1), 0.5 ));\n      }\n      if (zoom.scale &lt; params.minRatio) {\n        zoom.scale = (params.minRatio + 1) - (Math.pow( ((params.minRatio - zoom.scale) + 1), 0.5 ));\n      }\n      gesture.$imageEl.transform((\"translate3d(0,0,0) scale(\" + (zoom.scale) + \")\"));\n    },\n    onGestureEnd: function onGestureEnd(e) {\n      var swiper = this;\n      var params = swiper.params.zoom;\n      var zoom = swiper.zoom;\n      var gesture = zoom.gesture;\n      if (!Support.gestures) {\n        if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {\n          return;\n        }\n        if (e.type !== 'touchend' || (e.type === 'touchend' &amp;&amp; e.changedTouches.length &lt; 2 &amp;&amp; !Device.android)) {\n          return;\n        }\n        zoom.fakeGestureTouched = false;\n        zoom.fakeGestureMoved = false;\n      }\n      if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n      zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n      gesture.$imageEl.transition(swiper.params.speed).transform((\"translate3d(0,0,0) scale(\" + (zoom.scale) + \")\"));\n      zoom.currentScale = zoom.scale;\n      zoom.isScaling = false;\n      if (zoom.scale === 1) { gesture.$slideEl = undefined; }\n    },\n    onTouchStart: function onTouchStart(e) {\n      var swiper = this;\n      var zoom = swiper.zoom;\n      var gesture = zoom.gesture;\n      var image = zoom.image;\n      if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n      if (image.isTouched) { return; }\n      if (Device.android) { e.preventDefault(); }\n      image.isTouched = true;\n      image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n      image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n    },\n    onTouchMove: function onTouchMove(e) {\n      var swiper = this;\n      var zoom = swiper.zoom;\n      var gesture = zoom.gesture;\n      var image = zoom.image;\n      var velocity = zoom.velocity;\n      if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n      swiper.allowClick = false;\n      if (!image.isTouched || !gesture.$slideEl) { return; }\n\n      if (!image.isMoved) {\n        image.width = gesture.$imageEl[0].offsetWidth;\n        image.height = gesture.$imageEl[0].offsetHeight;\n        image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n        image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n        gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n        gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n        gesture.$imageWrapEl.transition(0);\n        if (swiper.rtl) {\n          image.startX = -image.startX;\n          image.startY = -image.startY;\n        }\n      }\n      // Define if we need image drag\n      var scaledWidth = image.width * zoom.scale;\n      var scaledHeight = image.height * zoom.scale;\n\n      if (scaledWidth &lt; gesture.slideWidth &amp;&amp; scaledHeight &lt; gesture.slideHeight) { return; }\n\n      image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);\n      image.maxX = -image.minX;\n      image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);\n      image.maxY = -image.minY;\n\n      image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n      image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n      if (!image.isMoved &amp;&amp; !zoom.isScaling) {\n        if (\n          swiper.isHorizontal()\n          &amp;&amp; (\n            (Math.floor(image.minX) === Math.floor(image.startX) &amp;&amp; image.touchesCurrent.x &lt; image.touchesStart.x)\n            || (Math.floor(image.maxX) === Math.floor(image.startX) &amp;&amp; image.touchesCurrent.x &gt; image.touchesStart.x)\n          )\n        ) {\n          image.isTouched = false;\n          return;\n        } if (\n          !swiper.isHorizontal()\n          &amp;&amp; (\n            (Math.floor(image.minY) === Math.floor(image.startY) &amp;&amp; image.touchesCurrent.y &lt; image.touchesStart.y)\n            || (Math.floor(image.maxY) === Math.floor(image.startY) &amp;&amp; image.touchesCurrent.y &gt; image.touchesStart.y)\n          )\n        ) {\n          image.isTouched = false;\n          return;\n        }\n      }\n      e.preventDefault();\n      e.stopPropagation();\n\n      image.isMoved = true;\n      image.currentX = (image.touchesCurrent.x - image.touchesStart.x) + image.startX;\n      image.currentY = (image.touchesCurrent.y - image.touchesStart.y) + image.startY;\n\n      if (image.currentX &lt; image.minX) {\n        image.currentX = (image.minX + 1) - (Math.pow( ((image.minX - image.currentX) + 1), 0.8 ));\n      }\n      if (image.currentX &gt; image.maxX) {\n        image.currentX = (image.maxX - 1) + (Math.pow( ((image.currentX - image.maxX) + 1), 0.8 ));\n      }\n\n      if (image.currentY &lt; image.minY) {\n        image.currentY = (image.minY + 1) - (Math.pow( ((image.minY - image.currentY) + 1), 0.8 ));\n      }\n      if (image.currentY &gt; image.maxY) {\n        image.currentY = (image.maxY - 1) + (Math.pow( ((image.currentY - image.maxY) + 1), 0.8 ));\n      }\n\n      // Velocity\n      if (!velocity.prevPositionX) { velocity.prevPositionX = image.touchesCurrent.x; }\n      if (!velocity.prevPositionY) { velocity.prevPositionY = image.touchesCurrent.y; }\n      if (!velocity.prevTime) { velocity.prevTime = Date.now(); }\n      velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n      velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n      if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) &lt; 2) { velocity.x = 0; }\n      if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) &lt; 2) { velocity.y = 0; }\n      velocity.prevPositionX = image.touchesCurrent.x;\n      velocity.prevPositionY = image.touchesCurrent.y;\n      velocity.prevTime = Date.now();\n\n      gesture.$imageWrapEl.transform((\"translate3d(\" + (image.currentX) + \"px, \" + (image.currentY) + \"px,0)\"));\n    },\n    onTouchEnd: function onTouchEnd() {\n      var swiper = this;\n      var zoom = swiper.zoom;\n      var gesture = zoom.gesture;\n      var image = zoom.image;\n      var velocity = zoom.velocity;\n      if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n      if (!image.isTouched || !image.isMoved) {\n        image.isTouched = false;\n        image.isMoved = false;\n        return;\n      }\n      image.isTouched = false;\n      image.isMoved = false;\n      var momentumDurationX = 300;\n      var momentumDurationY = 300;\n      var momentumDistanceX = velocity.x * momentumDurationX;\n      var newPositionX = image.currentX + momentumDistanceX;\n      var momentumDistanceY = velocity.y * momentumDurationY;\n      var newPositionY = image.currentY + momentumDistanceY;\n\n      // Fix duration\n      if (velocity.x !== 0) { momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x); }\n      if (velocity.y !== 0) { momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y); }\n      var momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n\n      image.currentX = newPositionX;\n      image.currentY = newPositionY;\n\n      // Define if we need image drag\n      var scaledWidth = image.width * zoom.scale;\n      var scaledHeight = image.height * zoom.scale;\n      image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);\n      image.maxX = -image.minX;\n      image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);\n      image.maxY = -image.minY;\n      image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n      image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n\n      gesture.$imageWrapEl.transition(momentumDuration).transform((\"translate3d(\" + (image.currentX) + \"px, \" + (image.currentY) + \"px,0)\"));\n    },\n    onTransitionEnd: function onTransitionEnd() {\n      var swiper = this;\n      var zoom = swiper.zoom;\n      var gesture = zoom.gesture;\n      if (gesture.$slideEl &amp;&amp; swiper.previousIndex !== swiper.activeIndex) {\n        gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n        gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n\n        zoom.scale = 1;\n        zoom.currentScale = 1;\n\n        gesture.$slideEl = undefined;\n        gesture.$imageEl = undefined;\n        gesture.$imageWrapEl = undefined;\n      }\n    },\n    // Toggle Zoom\n    toggle: function toggle(e) {\n      var swiper = this;\n      var zoom = swiper.zoom;\n\n      if (zoom.scale &amp;&amp; zoom.scale !== 1) {\n        // Zoom Out\n        zoom.out();\n      } else {\n        // Zoom In\n        zoom.in(e);\n      }\n    },\n    in: function in$1(e) {\n      var swiper = this;\n\n      var zoom = swiper.zoom;\n      var params = swiper.params.zoom;\n      var gesture = zoom.gesture;\n      var image = zoom.image;\n\n      if (!gesture.$slideEl) {\n        gesture.$slideEl = swiper.clickedSlide ? $(swiper.clickedSlide) : swiper.slides.eq(swiper.activeIndex);\n        gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');\n        gesture.$imageWrapEl = gesture.$imageEl.parent((\".\" + (params.containerClass)));\n      }\n      if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n\n      gesture.$slideEl.addClass((\"\" + (params.zoomedSlideClass)));\n\n      var touchX;\n      var touchY;\n      var offsetX;\n      var offsetY;\n      var diffX;\n      var diffY;\n      var translateX;\n      var translateY;\n      var imageWidth;\n      var imageHeight;\n      var scaledWidth;\n      var scaledHeight;\n      var translateMinX;\n      var translateMinY;\n      var translateMaxX;\n      var translateMaxY;\n      var slideWidth;\n      var slideHeight;\n\n      if (typeof image.touchesStart.x === 'undefined' &amp;&amp; e) {\n        touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n        touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n      } else {\n        touchX = image.touchesStart.x;\n        touchY = image.touchesStart.y;\n      }\n\n      zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n      zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n      if (e) {\n        slideWidth = gesture.$slideEl[0].offsetWidth;\n        slideHeight = gesture.$slideEl[0].offsetHeight;\n        offsetX = gesture.$slideEl.offset().left;\n        offsetY = gesture.$slideEl.offset().top;\n        diffX = (offsetX + (slideWidth / 2)) - touchX;\n        diffY = (offsetY + (slideHeight / 2)) - touchY;\n\n        imageWidth = gesture.$imageEl[0].offsetWidth;\n        imageHeight = gesture.$imageEl[0].offsetHeight;\n        scaledWidth = imageWidth * zoom.scale;\n        scaledHeight = imageHeight * zoom.scale;\n\n        translateMinX = Math.min(((slideWidth / 2) - (scaledWidth / 2)), 0);\n        translateMinY = Math.min(((slideHeight / 2) - (scaledHeight / 2)), 0);\n        translateMaxX = -translateMinX;\n        translateMaxY = -translateMinY;\n\n        translateX = diffX * zoom.scale;\n        translateY = diffY * zoom.scale;\n\n        if (translateX &lt; translateMinX) {\n          translateX = translateMinX;\n        }\n        if (translateX &gt; translateMaxX) {\n          translateX = translateMaxX;\n        }\n\n        if (translateY &lt; translateMinY) {\n          translateY = translateMinY;\n        }\n        if (translateY &gt; translateMaxY) {\n          translateY = translateMaxY;\n        }\n      } else {\n        translateX = 0;\n        translateY = 0;\n      }\n      gesture.$imageWrapEl.transition(300).transform((\"translate3d(\" + translateX + \"px, \" + translateY + \"px,0)\"));\n      gesture.$imageEl.transition(300).transform((\"translate3d(0,0,0) scale(\" + (zoom.scale) + \")\"));\n    },\n    out: function out() {\n      var swiper = this;\n\n      var zoom = swiper.zoom;\n      var params = swiper.params.zoom;\n      var gesture = zoom.gesture;\n\n      if (!gesture.$slideEl) {\n        gesture.$slideEl = swiper.clickedSlide ? $(swiper.clickedSlide) : swiper.slides.eq(swiper.activeIndex);\n        gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');\n        gesture.$imageWrapEl = gesture.$imageEl.parent((\".\" + (params.containerClass)));\n      }\n      if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n\n      zoom.scale = 1;\n      zoom.currentScale = 1;\n      gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n      gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n      gesture.$slideEl.removeClass((\"\" + (params.zoomedSlideClass)));\n      gesture.$slideEl = undefined;\n    },\n    // Attach/Detach Events\n    enable: function enable() {\n      var swiper = this;\n      var zoom = swiper.zoom;\n      if (zoom.enabled) { return; }\n      zoom.enabled = true;\n\n      var passiveListener = swiper.touchEvents.start === 'touchstart' &amp;&amp; Support.passiveListener &amp;&amp; swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n      var activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;\n\n      // Scale image\n      if (Support.gestures) {\n        swiper.$wrapperEl.on('gesturestart', '.swiper-slide', zoom.onGestureStart, passiveListener);\n        swiper.$wrapperEl.on('gesturechange', '.swiper-slide', zoom.onGestureChange, passiveListener);\n        swiper.$wrapperEl.on('gestureend', '.swiper-slide', zoom.onGestureEnd, passiveListener);\n      } else if (swiper.touchEvents.start === 'touchstart') {\n        swiper.$wrapperEl.on(swiper.touchEvents.start, '.swiper-slide', zoom.onGestureStart, passiveListener);\n        swiper.$wrapperEl.on(swiper.touchEvents.move, '.swiper-slide', zoom.onGestureChange, activeListenerWithCapture);\n        swiper.$wrapperEl.on(swiper.touchEvents.end, '.swiper-slide', zoom.onGestureEnd, passiveListener);\n        if (swiper.touchEvents.cancel) {\n          swiper.$wrapperEl.on(swiper.touchEvents.cancel, '.swiper-slide', zoom.onGestureEnd, passiveListener);\n        }\n      }\n\n      // Move image\n      swiper.$wrapperEl.on(swiper.touchEvents.move, (\".\" + (swiper.params.zoom.containerClass)), zoom.onTouchMove, activeListenerWithCapture);\n    },\n    disable: function disable() {\n      var swiper = this;\n      var zoom = swiper.zoom;\n      if (!zoom.enabled) { return; }\n\n      swiper.zoom.enabled = false;\n\n      var passiveListener = swiper.touchEvents.start === 'touchstart' &amp;&amp; Support.passiveListener &amp;&amp; swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n      var activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;\n\n      // Scale image\n      if (Support.gestures) {\n        swiper.$wrapperEl.off('gesturestart', '.swiper-slide', zoom.onGestureStart, passiveListener);\n        swiper.$wrapperEl.off('gesturechange', '.swiper-slide', zoom.onGestureChange, passiveListener);\n        swiper.$wrapperEl.off('gestureend', '.swiper-slide', zoom.onGestureEnd, passiveListener);\n      } else if (swiper.touchEvents.start === 'touchstart') {\n        swiper.$wrapperEl.off(swiper.touchEvents.start, '.swiper-slide', zoom.onGestureStart, passiveListener);\n        swiper.$wrapperEl.off(swiper.touchEvents.move, '.swiper-slide', zoom.onGestureChange, activeListenerWithCapture);\n        swiper.$wrapperEl.off(swiper.touchEvents.end, '.swiper-slide', zoom.onGestureEnd, passiveListener);\n        if (swiper.touchEvents.cancel) {\n          swiper.$wrapperEl.off(swiper.touchEvents.cancel, '.swiper-slide', zoom.onGestureEnd, passiveListener);\n        }\n      }\n\n      // Move image\n      swiper.$wrapperEl.off(swiper.touchEvents.move, (\".\" + (swiper.params.zoom.containerClass)), zoom.onTouchMove, activeListenerWithCapture);\n    },\n  };\n\n  var Zoom$1 = {\n    name: 'zoom',\n    params: {\n      zoom: {\n        enabled: false,\n        maxRatio: 3,\n        minRatio: 1,\n        toggle: true,\n        containerClass: 'swiper-zoom-container',\n        zoomedSlideClass: 'swiper-slide-zoomed',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      var zoom = {\n        enabled: false,\n        scale: 1,\n        currentScale: 1,\n        isScaling: false,\n        gesture: {\n          $slideEl: undefined,\n          slideWidth: undefined,\n          slideHeight: undefined,\n          $imageEl: undefined,\n          $imageWrapEl: undefined,\n          maxRatio: 3,\n        },\n        image: {\n          isTouched: undefined,\n          isMoved: undefined,\n          currentX: undefined,\n          currentY: undefined,\n          minX: undefined,\n          minY: undefined,\n          maxX: undefined,\n          maxY: undefined,\n          width: undefined,\n          height: undefined,\n          startX: undefined,\n          startY: undefined,\n          touchesStart: {},\n          touchesCurrent: {},\n        },\n        velocity: {\n          x: undefined,\n          y: undefined,\n          prevPositionX: undefined,\n          prevPositionY: undefined,\n          prevTime: undefined,\n        },\n      };\n\n      ('onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out').split(' ').forEach(function (methodName) {\n        zoom[methodName] = Zoom[methodName].bind(swiper);\n      });\n      Utils.extend(swiper, {\n        zoom: zoom,\n      });\n\n      var scale = 1;\n      Object.defineProperty(swiper.zoom, 'scale', {\n        get: function get() {\n          return scale;\n        },\n        set: function set(value) {\n          if (scale !== value) {\n            var imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;\n            var slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;\n            swiper.emit('zoomChange', value, imageEl, slideEl);\n          }\n          scale = value;\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        if (swiper.params.zoom.enabled) {\n          swiper.zoom.enable();\n        }\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        swiper.zoom.disable();\n      },\n      touchStart: function touchStart(e) {\n        var swiper = this;\n        if (!swiper.zoom.enabled) { return; }\n        swiper.zoom.onTouchStart(e);\n      },\n      touchEnd: function touchEnd(e) {\n        var swiper = this;\n        if (!swiper.zoom.enabled) { return; }\n        swiper.zoom.onTouchEnd(e);\n      },\n      doubleTap: function doubleTap(e) {\n        var swiper = this;\n        if (swiper.params.zoom.enabled &amp;&amp; swiper.zoom.enabled &amp;&amp; swiper.params.zoom.toggle) {\n          swiper.zoom.toggle(e);\n        }\n      },\n      transitionEnd: function transitionEnd() {\n        var swiper = this;\n        if (swiper.zoom.enabled &amp;&amp; swiper.params.zoom.enabled) {\n          swiper.zoom.onTransitionEnd();\n        }\n      },\n      slideChange: function slideChange() {\n        var swiper = this;\n        if (swiper.zoom.enabled &amp;&amp; swiper.params.zoom.enabled &amp;&amp; swiper.params.cssMode) {\n          swiper.zoom.onTransitionEnd();\n        }\n      },\n    },\n  };\n\n  var Lazy = {\n    loadInSlide: function loadInSlide(index, loadInDuplicate) {\n      if ( loadInDuplicate === void 0 ) loadInDuplicate = true;\n\n      var swiper = this;\n      var params = swiper.params.lazy;\n      if (typeof index === 'undefined') { return; }\n      if (swiper.slides.length === 0) { return; }\n      var isVirtual = swiper.virtual &amp;&amp; swiper.params.virtual.enabled;\n\n      var $slideEl = isVirtual\n        ? swiper.$wrapperEl.children((\".\" + (swiper.params.slideClass) + \"[data-swiper-slide-index=\\\"\" + index + \"\\\"]\"))\n        : swiper.slides.eq(index);\n\n      var $images = $slideEl.find((\".\" + (params.elementClass) + \":not(.\" + (params.loadedClass) + \"):not(.\" + (params.loadingClass) + \")\"));\n      if ($slideEl.hasClass(params.elementClass) &amp;&amp; !$slideEl.hasClass(params.loadedClass) &amp;&amp; !$slideEl.hasClass(params.loadingClass)) {\n        $images = $images.add($slideEl[0]);\n      }\n      if ($images.length === 0) { return; }\n\n      $images.each(function (imageIndex, imageEl) {\n        var $imageEl = $(imageEl);\n        $imageEl.addClass(params.loadingClass);\n\n        var background = $imageEl.attr('data-background');\n        var src = $imageEl.attr('data-src');\n        var srcset = $imageEl.attr('data-srcset');\n        var sizes = $imageEl.attr('data-sizes');\n\n        swiper.loadImage($imageEl[0], (src || background), srcset, sizes, false, function () {\n          if (typeof swiper === 'undefined' || swiper === null || !swiper || (swiper &amp;&amp; !swiper.params) || swiper.destroyed) { return; }\n          if (background) {\n            $imageEl.css('background-image', (\"url(\\\"\" + background + \"\\\")\"));\n            $imageEl.removeAttr('data-background');\n          } else {\n            if (srcset) {\n              $imageEl.attr('srcset', srcset);\n              $imageEl.removeAttr('data-srcset');\n            }\n            if (sizes) {\n              $imageEl.attr('sizes', sizes);\n              $imageEl.removeAttr('data-sizes');\n            }\n            if (src) {\n              $imageEl.attr('src', src);\n              $imageEl.removeAttr('data-src');\n            }\n          }\n\n          $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n          $slideEl.find((\".\" + (params.preloaderClass))).remove();\n          if (swiper.params.loop &amp;&amp; loadInDuplicate) {\n            var slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n            if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n              var originalSlide = swiper.$wrapperEl.children((\"[data-swiper-slide-index=\\\"\" + slideOriginalIndex + \"\\\"]:not(.\" + (swiper.params.slideDuplicateClass) + \")\"));\n              swiper.lazy.loadInSlide(originalSlide.index(), false);\n            } else {\n              var duplicatedSlide = swiper.$wrapperEl.children((\".\" + (swiper.params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + slideOriginalIndex + \"\\\"]\"));\n              swiper.lazy.loadInSlide(duplicatedSlide.index(), false);\n            }\n          }\n          swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n        });\n\n        swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n      });\n    },\n    load: function load() {\n      var swiper = this;\n      var $wrapperEl = swiper.$wrapperEl;\n      var swiperParams = swiper.params;\n      var slides = swiper.slides;\n      var activeIndex = swiper.activeIndex;\n      var isVirtual = swiper.virtual &amp;&amp; swiperParams.virtual.enabled;\n      var params = swiperParams.lazy;\n\n      var slidesPerView = swiperParams.slidesPerView;\n      if (slidesPerView === 'auto') {\n        slidesPerView = 0;\n      }\n\n      function slideExist(index) {\n        if (isVirtual) {\n          if ($wrapperEl.children((\".\" + (swiperParams.slideClass) + \"[data-swiper-slide-index=\\\"\" + index + \"\\\"]\")).length) {\n            return true;\n          }\n        } else if (slides[index]) { return true; }\n        return false;\n      }\n      function slideIndex(slideEl) {\n        if (isVirtual) {\n          return $(slideEl).attr('data-swiper-slide-index');\n        }\n        return $(slideEl).index();\n      }\n\n      if (!swiper.lazy.initialImageLoaded) { swiper.lazy.initialImageLoaded = true; }\n      if (swiper.params.watchSlidesVisibility) {\n        $wrapperEl.children((\".\" + (swiperParams.slideVisibleClass))).each(function (elIndex, slideEl) {\n          var index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n          swiper.lazy.loadInSlide(index);\n        });\n      } else if (slidesPerView &gt; 1) {\n        for (var i = activeIndex; i &lt; activeIndex + slidesPerView; i += 1) {\n          if (slideExist(i)) { swiper.lazy.loadInSlide(i); }\n        }\n      } else {\n        swiper.lazy.loadInSlide(activeIndex);\n      }\n      if (params.loadPrevNext) {\n        if (slidesPerView &gt; 1 || (params.loadPrevNextAmount &amp;&amp; params.loadPrevNextAmount &gt; 1)) {\n          var amount = params.loadPrevNextAmount;\n          var spv = slidesPerView;\n          var maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n          var minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);\n          // Next Slides\n          for (var i$1 = activeIndex + slidesPerView; i$1 &lt; maxIndex; i$1 += 1) {\n            if (slideExist(i$1)) { swiper.lazy.loadInSlide(i$1); }\n          }\n          // Prev Slides\n          for (var i$2 = minIndex; i$2 &lt; activeIndex; i$2 += 1) {\n            if (slideExist(i$2)) { swiper.lazy.loadInSlide(i$2); }\n          }\n        } else {\n          var nextSlide = $wrapperEl.children((\".\" + (swiperParams.slideNextClass)));\n          if (nextSlide.length &gt; 0) { swiper.lazy.loadInSlide(slideIndex(nextSlide)); }\n\n          var prevSlide = $wrapperEl.children((\".\" + (swiperParams.slidePrevClass)));\n          if (prevSlide.length &gt; 0) { swiper.lazy.loadInSlide(slideIndex(prevSlide)); }\n        }\n      }\n    },\n  };\n\n  var Lazy$1 = {\n    name: 'lazy',\n    params: {\n      lazy: {\n        enabled: false,\n        loadPrevNext: false,\n        loadPrevNextAmount: 1,\n        loadOnTransitionStart: false,\n\n        elementClass: 'swiper-lazy',\n        loadingClass: 'swiper-lazy-loading',\n        loadedClass: 'swiper-lazy-loaded',\n        preloaderClass: 'swiper-lazy-preloader',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        lazy: {\n          initialImageLoaded: false,\n          load: Lazy.load.bind(swiper),\n          loadInSlide: Lazy.loadInSlide.bind(swiper),\n        },\n      });\n    },\n    on: {\n      beforeInit: function beforeInit() {\n        var swiper = this;\n        if (swiper.params.lazy.enabled &amp;&amp; swiper.params.preloadImages) {\n          swiper.params.preloadImages = false;\n        }\n      },\n      init: function init() {\n        var swiper = this;\n        if (swiper.params.lazy.enabled &amp;&amp; !swiper.params.loop &amp;&amp; swiper.params.initialSlide === 0) {\n          swiper.lazy.load();\n        }\n      },\n      scroll: function scroll() {\n        var swiper = this;\n        if (swiper.params.freeMode &amp;&amp; !swiper.params.freeModeSticky) {\n          swiper.lazy.load();\n        }\n      },\n      resize: function resize() {\n        var swiper = this;\n        if (swiper.params.lazy.enabled) {\n          swiper.lazy.load();\n        }\n      },\n      scrollbarDragMove: function scrollbarDragMove() {\n        var swiper = this;\n        if (swiper.params.lazy.enabled) {\n          swiper.lazy.load();\n        }\n      },\n      transitionStart: function transitionStart() {\n        var swiper = this;\n        if (swiper.params.lazy.enabled) {\n          if (swiper.params.lazy.loadOnTransitionStart || (!swiper.params.lazy.loadOnTransitionStart &amp;&amp; !swiper.lazy.initialImageLoaded)) {\n            swiper.lazy.load();\n          }\n        }\n      },\n      transitionEnd: function transitionEnd() {\n        var swiper = this;\n        if (swiper.params.lazy.enabled &amp;&amp; !swiper.params.lazy.loadOnTransitionStart) {\n          swiper.lazy.load();\n        }\n      },\n      slideChange: function slideChange() {\n        var swiper = this;\n        if (swiper.params.lazy.enabled &amp;&amp; swiper.params.cssMode) {\n          swiper.lazy.load();\n        }\n      },\n    },\n  };\n\n  /* eslint no-bitwise: [\"error\", { \"allow\": [\"&gt;&gt;\"] }] */\n\n  var Controller = {\n    LinearSpline: function LinearSpline(x, y) {\n      var binarySearch = (function search() {\n        var maxIndex;\n        var minIndex;\n        var guess;\n        return function (array, val) {\n          minIndex = -1;\n          maxIndex = array.length;\n          while (maxIndex - minIndex &gt; 1) {\n            guess = maxIndex + minIndex &gt;&gt; 1;\n            if (array[guess] &lt;= val) {\n              minIndex = guess;\n            } else {\n              maxIndex = guess;\n            }\n          }\n          return maxIndex;\n        };\n      }());\n      this.x = x;\n      this.y = y;\n      this.lastIndex = x.length - 1;\n      // Given an x value (x2), return the expected y2 value:\n      // (x1,y1) is the known point before given value,\n      // (x3,y3) is the known point after given value.\n      var i1;\n      var i3;\n\n      this.interpolate = function interpolate(x2) {\n        if (!x2) { return 0; }\n\n        // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n        i3 = binarySearch(this.x, x2);\n        i1 = i3 - 1;\n\n        // We have our indexes i1 &amp; i3, so we can calculate already:\n        // y2 := ((x2âˆ’x1) Ã— (y3âˆ’y1)) Ã· (x3âˆ’x1) + y1\n        return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1])) + this.y[i1];\n      };\n      return this;\n    },\n    // xxx: for now i will just save one spline function to to\n    getInterpolateFunction: function getInterpolateFunction(c) {\n      var swiper = this;\n      if (!swiper.controller.spline) {\n        swiper.controller.spline = swiper.params.loop\n          ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid)\n          : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);\n      }\n    },\n    setTranslate: function setTranslate(setTranslate$1, byController) {\n      var swiper = this;\n      var controlled = swiper.controller.control;\n      var multiplier;\n      var controlledTranslate;\n      function setControlledTranslate(c) {\n        // this will create an Interpolate function based on the snapGrids\n        // x is the Grid of the scrolled scroller and y will be the controlled scroller\n        // it makes sense to create this only once and recall it for the interpolation\n        // the function does a lot of value caching for performance\n        var translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n        if (swiper.params.controller.by === 'slide') {\n          swiper.controller.getInterpolateFunction(c);\n          // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n          // but it did not work out\n          controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n        }\n\n        if (!controlledTranslate || swiper.params.controller.by === 'container') {\n          multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n          controlledTranslate = ((translate - swiper.minTranslate()) * multiplier) + c.minTranslate();\n        }\n\n        if (swiper.params.controller.inverse) {\n          controlledTranslate = c.maxTranslate() - controlledTranslate;\n        }\n        c.updateProgress(controlledTranslate);\n        c.setTranslate(controlledTranslate, swiper);\n        c.updateActiveIndex();\n        c.updateSlidesClasses();\n      }\n      if (Array.isArray(controlled)) {\n        for (var i = 0; i &lt; controlled.length; i += 1) {\n          if (controlled[i] !== byController &amp;&amp; controlled[i] instanceof Swiper) {\n            setControlledTranslate(controlled[i]);\n          }\n        }\n      } else if (controlled instanceof Swiper &amp;&amp; byController !== controlled) {\n        setControlledTranslate(controlled);\n      }\n    },\n    setTransition: function setTransition(duration, byController) {\n      var swiper = this;\n      var controlled = swiper.controller.control;\n      var i;\n      function setControlledTransition(c) {\n        c.setTransition(duration, swiper);\n        if (duration !== 0) {\n          c.transitionStart();\n          if (c.params.autoHeight) {\n            Utils.nextTick(function () {\n              c.updateAutoHeight();\n            });\n          }\n          c.$wrapperEl.transitionEnd(function () {\n            if (!controlled) { return; }\n            if (c.params.loop &amp;&amp; swiper.params.controller.by === 'slide') {\n              c.loopFix();\n            }\n            c.transitionEnd();\n          });\n        }\n      }\n      if (Array.isArray(controlled)) {\n        for (i = 0; i &lt; controlled.length; i += 1) {\n          if (controlled[i] !== byController &amp;&amp; controlled[i] instanceof Swiper) {\n            setControlledTransition(controlled[i]);\n          }\n        }\n      } else if (controlled instanceof Swiper &amp;&amp; byController !== controlled) {\n        setControlledTransition(controlled);\n      }\n    },\n  };\n  var Controller$1 = {\n    name: 'controller',\n    params: {\n      controller: {\n        control: undefined,\n        inverse: false,\n        by: 'slide', // or 'container'\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        controller: {\n          control: swiper.params.controller.control,\n          getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),\n          setTranslate: Controller.setTranslate.bind(swiper),\n          setTransition: Controller.setTransition.bind(swiper),\n        },\n      });\n    },\n    on: {\n      update: function update() {\n        var swiper = this;\n        if (!swiper.controller.control) { return; }\n        if (swiper.controller.spline) {\n          swiper.controller.spline = undefined;\n          delete swiper.controller.spline;\n        }\n      },\n      resize: function resize() {\n        var swiper = this;\n        if (!swiper.controller.control) { return; }\n        if (swiper.controller.spline) {\n          swiper.controller.spline = undefined;\n          delete swiper.controller.spline;\n        }\n      },\n      observerUpdate: function observerUpdate() {\n        var swiper = this;\n        if (!swiper.controller.control) { return; }\n        if (swiper.controller.spline) {\n          swiper.controller.spline = undefined;\n          delete swiper.controller.spline;\n        }\n      },\n      setTranslate: function setTranslate(translate, byController) {\n        var swiper = this;\n        if (!swiper.controller.control) { return; }\n        swiper.controller.setTranslate(translate, byController);\n      },\n      setTransition: function setTransition(duration, byController) {\n        var swiper = this;\n        if (!swiper.controller.control) { return; }\n        swiper.controller.setTransition(duration, byController);\n      },\n    },\n  };\n\n  var a11y = {\n    makeElFocusable: function makeElFocusable($el) {\n      $el.attr('tabIndex', '0');\n      return $el;\n    },\n    addElRole: function addElRole($el, role) {\n      $el.attr('role', role);\n      return $el;\n    },\n    addElLabel: function addElLabel($el, label) {\n      $el.attr('aria-label', label);\n      return $el;\n    },\n    disableEl: function disableEl($el) {\n      $el.attr('aria-disabled', true);\n      return $el;\n    },\n    enableEl: function enableEl($el) {\n      $el.attr('aria-disabled', false);\n      return $el;\n    },\n    onEnterKey: function onEnterKey(e) {\n      var swiper = this;\n      var params = swiper.params.a11y;\n      if (e.keyCode !== 13) { return; }\n      var $targetEl = $(e.target);\n      if (swiper.navigation &amp;&amp; swiper.navigation.$nextEl &amp;&amp; $targetEl.is(swiper.navigation.$nextEl)) {\n        if (!(swiper.isEnd &amp;&amp; !swiper.params.loop)) {\n          swiper.slideNext();\n        }\n        if (swiper.isEnd) {\n          swiper.a11y.notify(params.lastSlideMessage);\n        } else {\n          swiper.a11y.notify(params.nextSlideMessage);\n        }\n      }\n      if (swiper.navigation &amp;&amp; swiper.navigation.$prevEl &amp;&amp; $targetEl.is(swiper.navigation.$prevEl)) {\n        if (!(swiper.isBeginning &amp;&amp; !swiper.params.loop)) {\n          swiper.slidePrev();\n        }\n        if (swiper.isBeginning) {\n          swiper.a11y.notify(params.firstSlideMessage);\n        } else {\n          swiper.a11y.notify(params.prevSlideMessage);\n        }\n      }\n      if (swiper.pagination &amp;&amp; $targetEl.is((\".\" + (swiper.params.pagination.bulletClass)))) {\n        $targetEl[0].click();\n      }\n    },\n    notify: function notify(message) {\n      var swiper = this;\n      var notification = swiper.a11y.liveRegion;\n      if (notification.length === 0) { return; }\n      notification.html('');\n      notification.html(message);\n    },\n    updateNavigation: function updateNavigation() {\n      var swiper = this;\n\n      if (swiper.params.loop || !swiper.navigation) { return; }\n      var ref = swiper.navigation;\n      var $nextEl = ref.$nextEl;\n      var $prevEl = ref.$prevEl;\n\n      if ($prevEl &amp;&amp; $prevEl.length &gt; 0) {\n        if (swiper.isBeginning) {\n          swiper.a11y.disableEl($prevEl);\n        } else {\n          swiper.a11y.enableEl($prevEl);\n        }\n      }\n      if ($nextEl &amp;&amp; $nextEl.length &gt; 0) {\n        if (swiper.isEnd) {\n          swiper.a11y.disableEl($nextEl);\n        } else {\n          swiper.a11y.enableEl($nextEl);\n        }\n      }\n    },\n    updatePagination: function updatePagination() {\n      var swiper = this;\n      var params = swiper.params.a11y;\n      if (swiper.pagination &amp;&amp; swiper.params.pagination.clickable &amp;&amp; swiper.pagination.bullets &amp;&amp; swiper.pagination.bullets.length) {\n        swiper.pagination.bullets.each(function (bulletIndex, bulletEl) {\n          var $bulletEl = $(bulletEl);\n          swiper.a11y.makeElFocusable($bulletEl);\n          swiper.a11y.addElRole($bulletEl, 'button');\n          swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/{{index}}/, $bulletEl.index() + 1));\n        });\n      }\n    },\n    init: function init() {\n      var swiper = this;\n\n      swiper.$el.append(swiper.a11y.liveRegion);\n\n      // Navigation\n      var params = swiper.params.a11y;\n      var $nextEl;\n      var $prevEl;\n      if (swiper.navigation &amp;&amp; swiper.navigation.$nextEl) {\n        $nextEl = swiper.navigation.$nextEl;\n      }\n      if (swiper.navigation &amp;&amp; swiper.navigation.$prevEl) {\n        $prevEl = swiper.navigation.$prevEl;\n      }\n      if ($nextEl) {\n        swiper.a11y.makeElFocusable($nextEl);\n        swiper.a11y.addElRole($nextEl, 'button');\n        swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);\n        $nextEl.on('keydown', swiper.a11y.onEnterKey);\n      }\n      if ($prevEl) {\n        swiper.a11y.makeElFocusable($prevEl);\n        swiper.a11y.addElRole($prevEl, 'button');\n        swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);\n        $prevEl.on('keydown', swiper.a11y.onEnterKey);\n      }\n\n      // Pagination\n      if (swiper.pagination &amp;&amp; swiper.params.pagination.clickable &amp;&amp; swiper.pagination.bullets &amp;&amp; swiper.pagination.bullets.length) {\n        swiper.pagination.$el.on('keydown', (\".\" + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey);\n      }\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      if (swiper.a11y.liveRegion &amp;&amp; swiper.a11y.liveRegion.length &gt; 0) { swiper.a11y.liveRegion.remove(); }\n\n      var $nextEl;\n      var $prevEl;\n      if (swiper.navigation &amp;&amp; swiper.navigation.$nextEl) {\n        $nextEl = swiper.navigation.$nextEl;\n      }\n      if (swiper.navigation &amp;&amp; swiper.navigation.$prevEl) {\n        $prevEl = swiper.navigation.$prevEl;\n      }\n      if ($nextEl) {\n        $nextEl.off('keydown', swiper.a11y.onEnterKey);\n      }\n      if ($prevEl) {\n        $prevEl.off('keydown', swiper.a11y.onEnterKey);\n      }\n\n      // Pagination\n      if (swiper.pagination &amp;&amp; swiper.params.pagination.clickable &amp;&amp; swiper.pagination.bullets &amp;&amp; swiper.pagination.bullets.length) {\n        swiper.pagination.$el.off('keydown', (\".\" + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey);\n      }\n    },\n  };\n  var A11y = {\n    name: 'a11y',\n    params: {\n      a11y: {\n        enabled: true,\n        notificationClass: 'swiper-notification',\n        prevSlideMessage: 'Previous slide',\n        nextSlideMessage: 'Next slide',\n        firstSlideMessage: 'This is the first slide',\n        lastSlideMessage: 'This is the last slide',\n        paginationBulletMessage: 'Go to slide {{index}}',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        a11y: {\n          liveRegion: $((\"&lt;span class=\\\"\" + (swiper.params.a11y.notificationClass) + \"\\\" aria-live=\\\"assertive\\\" aria-atomic=\\\"true\\\"&gt;&lt;/span&gt;\")),\n        },\n      });\n      Object.keys(a11y).forEach(function (methodName) {\n        swiper.a11y[methodName] = a11y[methodName].bind(swiper);\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        if (!swiper.params.a11y.enabled) { return; }\n        swiper.a11y.init();\n        swiper.a11y.updateNavigation();\n      },\n      toEdge: function toEdge() {\n        var swiper = this;\n        if (!swiper.params.a11y.enabled) { return; }\n        swiper.a11y.updateNavigation();\n      },\n      fromEdge: function fromEdge() {\n        var swiper = this;\n        if (!swiper.params.a11y.enabled) { return; }\n        swiper.a11y.updateNavigation();\n      },\n      paginationUpdate: function paginationUpdate() {\n        var swiper = this;\n        if (!swiper.params.a11y.enabled) { return; }\n        swiper.a11y.updatePagination();\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        if (!swiper.params.a11y.enabled) { return; }\n        swiper.a11y.destroy();\n      },\n    },\n  };\n\n  var History = {\n    init: function init() {\n      var swiper = this;\n      if (!swiper.params.history) { return; }\n      if (!win.history || !win.history.pushState) {\n        swiper.params.history.enabled = false;\n        swiper.params.hashNavigation.enabled = true;\n        return;\n      }\n      var history = swiper.history;\n      history.initialized = true;\n      history.paths = History.getPathValues();\n      if (!history.paths.key &amp;&amp; !history.paths.value) { return; }\n      history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);\n      if (!swiper.params.history.replaceState) {\n        win.addEventListener('popstate', swiper.history.setHistoryPopState);\n      }\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      if (!swiper.params.history.replaceState) {\n        win.removeEventListener('popstate', swiper.history.setHistoryPopState);\n      }\n    },\n    setHistoryPopState: function setHistoryPopState() {\n      var swiper = this;\n      swiper.history.paths = History.getPathValues();\n      swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);\n    },\n    getPathValues: function getPathValues() {\n      var pathArray = win.location.pathname.slice(1).split('/').filter(function (part) { return part !== ''; });\n      var total = pathArray.length;\n      var key = pathArray[total - 2];\n      var value = pathArray[total - 1];\n      return { key: key, value: value };\n    },\n    setHistory: function setHistory(key, index) {\n      var swiper = this;\n      if (!swiper.history.initialized || !swiper.params.history.enabled) { return; }\n      var slide = swiper.slides.eq(index);\n      var value = History.slugify(slide.attr('data-history'));\n      if (!win.location.pathname.includes(key)) {\n        value = key + \"/\" + value;\n      }\n      var currentState = win.history.state;\n      if (currentState &amp;&amp; currentState.value === value) {\n        return;\n      }\n      if (swiper.params.history.replaceState) {\n        win.history.replaceState({ value: value }, null, value);\n      } else {\n        win.history.pushState({ value: value }, null, value);\n      }\n    },\n    slugify: function slugify(text) {\n      return text.toString()\n        .replace(/\\s+/g, '-')\n        .replace(/[^\\w-]+/g, '')\n        .replace(/--+/g, '-')\n        .replace(/^-+/, '')\n        .replace(/-+$/, '');\n    },\n    scrollToSlide: function scrollToSlide(speed, value, runCallbacks) {\n      var swiper = this;\n      if (value) {\n        for (var i = 0, length = swiper.slides.length; i &lt; length; i += 1) {\n          var slide = swiper.slides.eq(i);\n          var slideHistory = History.slugify(slide.attr('data-history'));\n          if (slideHistory === value &amp;&amp; !slide.hasClass(swiper.params.slideDuplicateClass)) {\n            var index = slide.index();\n            swiper.slideTo(index, speed, runCallbacks);\n          }\n        }\n      } else {\n        swiper.slideTo(0, speed, runCallbacks);\n      }\n    },\n  };\n\n  var History$1 = {\n    name: 'history',\n    params: {\n      history: {\n        enabled: false,\n        replaceState: false,\n        key: 'slides',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        history: {\n          init: History.init.bind(swiper),\n          setHistory: History.setHistory.bind(swiper),\n          setHistoryPopState: History.setHistoryPopState.bind(swiper),\n          scrollToSlide: History.scrollToSlide.bind(swiper),\n          destroy: History.destroy.bind(swiper),\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        if (swiper.params.history.enabled) {\n          swiper.history.init();\n        }\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        if (swiper.params.history.enabled) {\n          swiper.history.destroy();\n        }\n      },\n      transitionEnd: function transitionEnd() {\n        var swiper = this;\n        if (swiper.history.initialized) {\n          swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n        }\n      },\n      slideChange: function slideChange() {\n        var swiper = this;\n        if (swiper.history.initialized &amp;&amp; swiper.params.cssMode) {\n          swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n        }\n      },\n    },\n  };\n\n  var HashNavigation = {\n    onHashCange: function onHashCange() {\n      var swiper = this;\n      var newHash = doc.location.hash.replace('#', '');\n      var activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n      if (newHash !== activeSlideHash) {\n        var newIndex = swiper.$wrapperEl.children((\".\" + (swiper.params.slideClass) + \"[data-hash=\\\"\" + newHash + \"\\\"]\")).index();\n        if (typeof newIndex === 'undefined') { return; }\n        swiper.slideTo(newIndex);\n      }\n    },\n    setHash: function setHash() {\n      var swiper = this;\n      if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) { return; }\n      if (swiper.params.hashNavigation.replaceState &amp;&amp; win.history &amp;&amp; win.history.replaceState) {\n        win.history.replaceState(null, null, ((\"#\" + (swiper.slides.eq(swiper.activeIndex).attr('data-hash'))) || ''));\n      } else {\n        var slide = swiper.slides.eq(swiper.activeIndex);\n        var hash = slide.attr('data-hash') || slide.attr('data-history');\n        doc.location.hash = hash || '';\n      }\n    },\n    init: function init() {\n      var swiper = this;\n      if (!swiper.params.hashNavigation.enabled || (swiper.params.history &amp;&amp; swiper.params.history.enabled)) { return; }\n      swiper.hashNavigation.initialized = true;\n      var hash = doc.location.hash.replace('#', '');\n      if (hash) {\n        var speed = 0;\n        for (var i = 0, length = swiper.slides.length; i &lt; length; i += 1) {\n          var slide = swiper.slides.eq(i);\n          var slideHash = slide.attr('data-hash') || slide.attr('data-history');\n          if (slideHash === hash &amp;&amp; !slide.hasClass(swiper.params.slideDuplicateClass)) {\n            var index = slide.index();\n            swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n          }\n        }\n      }\n      if (swiper.params.hashNavigation.watchState) {\n        $(win).on('hashchange', swiper.hashNavigation.onHashCange);\n      }\n    },\n    destroy: function destroy() {\n      var swiper = this;\n      if (swiper.params.hashNavigation.watchState) {\n        $(win).off('hashchange', swiper.hashNavigation.onHashCange);\n      }\n    },\n  };\n  var HashNavigation$1 = {\n    name: 'hash-navigation',\n    params: {\n      hashNavigation: {\n        enabled: false,\n        replaceState: false,\n        watchState: false,\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        hashNavigation: {\n          initialized: false,\n          init: HashNavigation.init.bind(swiper),\n          destroy: HashNavigation.destroy.bind(swiper),\n          setHash: HashNavigation.setHash.bind(swiper),\n          onHashCange: HashNavigation.onHashCange.bind(swiper),\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        if (swiper.params.hashNavigation.enabled) {\n          swiper.hashNavigation.init();\n        }\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        if (swiper.params.hashNavigation.enabled) {\n          swiper.hashNavigation.destroy();\n        }\n      },\n      transitionEnd: function transitionEnd() {\n        var swiper = this;\n        if (swiper.hashNavigation.initialized) {\n          swiper.hashNavigation.setHash();\n        }\n      },\n      slideChange: function slideChange() {\n        var swiper = this;\n        if (swiper.hashNavigation.initialized &amp;&amp; swiper.params.cssMode) {\n          swiper.hashNavigation.setHash();\n        }\n      },\n    },\n  };\n\n  /* eslint no-underscore-dangle: \"off\" */\n\n  var Autoplay = {\n    run: function run() {\n      var swiper = this;\n      var $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n      var delay = swiper.params.autoplay.delay;\n      if ($activeSlideEl.attr('data-swiper-autoplay')) {\n        delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n      }\n      clearTimeout(swiper.autoplay.timeout);\n      swiper.autoplay.timeout = Utils.nextTick(function () {\n        if (swiper.params.autoplay.reverseDirection) {\n          if (swiper.params.loop) {\n            swiper.loopFix();\n            swiper.slidePrev(swiper.params.speed, true, true);\n            swiper.emit('autoplay');\n          } else if (!swiper.isBeginning) {\n            swiper.slidePrev(swiper.params.speed, true, true);\n            swiper.emit('autoplay');\n          } else if (!swiper.params.autoplay.stopOnLastSlide) {\n            swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n            swiper.emit('autoplay');\n          } else {\n            swiper.autoplay.stop();\n          }\n        } else if (swiper.params.loop) {\n          swiper.loopFix();\n          swiper.slideNext(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.isEnd) {\n          swiper.slideNext(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.params.autoplay.stopOnLastSlide) {\n          swiper.slideTo(0, swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else {\n          swiper.autoplay.stop();\n        }\n        if (swiper.params.cssMode &amp;&amp; swiper.autoplay.running) { swiper.autoplay.run(); }\n      }, delay);\n    },\n    start: function start() {\n      var swiper = this;\n      if (typeof swiper.autoplay.timeout !== 'undefined') { return false; }\n      if (swiper.autoplay.running) { return false; }\n      swiper.autoplay.running = true;\n      swiper.emit('autoplayStart');\n      swiper.autoplay.run();\n      return true;\n    },\n    stop: function stop() {\n      var swiper = this;\n      if (!swiper.autoplay.running) { return false; }\n      if (typeof swiper.autoplay.timeout === 'undefined') { return false; }\n\n      if (swiper.autoplay.timeout) {\n        clearTimeout(swiper.autoplay.timeout);\n        swiper.autoplay.timeout = undefined;\n      }\n      swiper.autoplay.running = false;\n      swiper.emit('autoplayStop');\n      return true;\n    },\n    pause: function pause(speed) {\n      var swiper = this;\n      if (!swiper.autoplay.running) { return; }\n      if (swiper.autoplay.paused) { return; }\n      if (swiper.autoplay.timeout) { clearTimeout(swiper.autoplay.timeout); }\n      swiper.autoplay.paused = true;\n      if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n        swiper.autoplay.paused = false;\n        swiper.autoplay.run();\n      } else {\n        swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n        swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n      }\n    },\n  };\n\n  var Autoplay$1 = {\n    name: 'autoplay',\n    params: {\n      autoplay: {\n        enabled: false,\n        delay: 3000,\n        waitForTransition: true,\n        disableOnInteraction: true,\n        stopOnLastSlide: false,\n        reverseDirection: false,\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        autoplay: {\n          running: false,\n          paused: false,\n          run: Autoplay.run.bind(swiper),\n          start: Autoplay.start.bind(swiper),\n          stop: Autoplay.stop.bind(swiper),\n          pause: Autoplay.pause.bind(swiper),\n          onVisibilityChange: function onVisibilityChange() {\n            if (document.visibilityState === 'hidden' &amp;&amp; swiper.autoplay.running) {\n              swiper.autoplay.pause();\n            }\n            if (document.visibilityState === 'visible' &amp;&amp; swiper.autoplay.paused) {\n              swiper.autoplay.run();\n              swiper.autoplay.paused = false;\n            }\n          },\n          onTransitionEnd: function onTransitionEnd(e) {\n            if (!swiper || swiper.destroyed || !swiper.$wrapperEl) { return; }\n            if (e.target !== this) { return; }\n            swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n            swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n            swiper.autoplay.paused = false;\n            if (!swiper.autoplay.running) {\n              swiper.autoplay.stop();\n            } else {\n              swiper.autoplay.run();\n            }\n          },\n        },\n      });\n    },\n    on: {\n      init: function init() {\n        var swiper = this;\n        if (swiper.params.autoplay.enabled) {\n          swiper.autoplay.start();\n          document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n        }\n      },\n      beforeTransitionStart: function beforeTransitionStart(speed, internal) {\n        var swiper = this;\n        if (swiper.autoplay.running) {\n          if (internal || !swiper.params.autoplay.disableOnInteraction) {\n            swiper.autoplay.pause(speed);\n          } else {\n            swiper.autoplay.stop();\n          }\n        }\n      },\n      sliderFirstMove: function sliderFirstMove() {\n        var swiper = this;\n        if (swiper.autoplay.running) {\n          if (swiper.params.autoplay.disableOnInteraction) {\n            swiper.autoplay.stop();\n          } else {\n            swiper.autoplay.pause();\n          }\n        }\n      },\n      touchEnd: function touchEnd() {\n        var swiper = this;\n        if (swiper.params.cssMode &amp;&amp; swiper.autoplay.paused &amp;&amp; !swiper.params.autoplay.disableOnInteraction) {\n          swiper.autoplay.run();\n        }\n      },\n      destroy: function destroy() {\n        var swiper = this;\n        if (swiper.autoplay.running) {\n          swiper.autoplay.stop();\n        }\n        document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n      },\n    },\n  };\n\n  var Fade = {\n    setTranslate: function setTranslate() {\n      var swiper = this;\n      var slides = swiper.slides;\n      for (var i = 0; i &lt; slides.length; i += 1) {\n        var $slideEl = swiper.slides.eq(i);\n        var offset = $slideEl[0].swiperSlideOffset;\n        var tx = -offset;\n        if (!swiper.params.virtualTranslate) { tx -= swiper.translate; }\n        var ty = 0;\n        if (!swiper.isHorizontal()) {\n          ty = tx;\n          tx = 0;\n        }\n        var slideOpacity = swiper.params.fadeEffect.crossFade\n          ? Math.max(1 - Math.abs($slideEl[0].progress), 0)\n          : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n        $slideEl\n          .css({\n            opacity: slideOpacity,\n          })\n          .transform((\"translate3d(\" + tx + \"px, \" + ty + \"px, 0px)\"));\n      }\n    },\n    setTransition: function setTransition(duration) {\n      var swiper = this;\n      var slides = swiper.slides;\n      var $wrapperEl = swiper.$wrapperEl;\n      slides.transition(duration);\n      if (swiper.params.virtualTranslate &amp;&amp; duration !== 0) {\n        var eventTriggered = false;\n        slides.transitionEnd(function () {\n          if (eventTriggered) { return; }\n          if (!swiper || swiper.destroyed) { return; }\n          eventTriggered = true;\n          swiper.animating = false;\n          var triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n          for (var i = 0; i &lt; triggerEvents.length; i += 1) {\n            $wrapperEl.trigger(triggerEvents[i]);\n          }\n        });\n      }\n    },\n  };\n\n  var EffectFade = {\n    name: 'effect-fade',\n    params: {\n      fadeEffect: {\n        crossFade: false,\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        fadeEffect: {\n          setTranslate: Fade.setTranslate.bind(swiper),\n          setTransition: Fade.setTransition.bind(swiper),\n        },\n      });\n    },\n    on: {\n      beforeInit: function beforeInit() {\n        var swiper = this;\n        if (swiper.params.effect !== 'fade') { return; }\n        swiper.classNames.push(((swiper.params.containerModifierClass) + \"fade\"));\n        var overwriteParams = {\n          slidesPerView: 1,\n          slidesPerColumn: 1,\n          slidesPerGroup: 1,\n          watchSlidesProgress: true,\n          spaceBetween: 0,\n          virtualTranslate: true,\n        };\n        Utils.extend(swiper.params, overwriteParams);\n        Utils.extend(swiper.originalParams, overwriteParams);\n      },\n      setTranslate: function setTranslate() {\n        var swiper = this;\n        if (swiper.params.effect !== 'fade') { return; }\n        swiper.fadeEffect.setTranslate();\n      },\n      setTransition: function setTransition(duration) {\n        var swiper = this;\n        if (swiper.params.effect !== 'fade') { return; }\n        swiper.fadeEffect.setTransition(duration);\n      },\n    },\n  };\n\n  var Cube = {\n    setTranslate: function setTranslate() {\n      var swiper = this;\n      var $el = swiper.$el;\n      var $wrapperEl = swiper.$wrapperEl;\n      var slides = swiper.slides;\n      var swiperWidth = swiper.width;\n      var swiperHeight = swiper.height;\n      var rtl = swiper.rtlTranslate;\n      var swiperSize = swiper.size;\n      var params = swiper.params.cubeEffect;\n      var isHorizontal = swiper.isHorizontal();\n      var isVirtual = swiper.virtual &amp;&amp; swiper.params.virtual.enabled;\n      var wrapperRotate = 0;\n      var $cubeShadowEl;\n      if (params.shadow) {\n        if (isHorizontal) {\n          $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n          if ($cubeShadowEl.length === 0) {\n            $cubeShadowEl = $('&lt;div class=\"swiper-cube-shadow\"&gt;&lt;/div&gt;');\n            $wrapperEl.append($cubeShadowEl);\n          }\n          $cubeShadowEl.css({ height: (swiperWidth + \"px\") });\n        } else {\n          $cubeShadowEl = $el.find('.swiper-cube-shadow');\n          if ($cubeShadowEl.length === 0) {\n            $cubeShadowEl = $('&lt;div class=\"swiper-cube-shadow\"&gt;&lt;/div&gt;');\n            $el.append($cubeShadowEl);\n          }\n        }\n      }\n      for (var i = 0; i &lt; slides.length; i += 1) {\n        var $slideEl = slides.eq(i);\n        var slideIndex = i;\n        if (isVirtual) {\n          slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n        }\n        var slideAngle = slideIndex * 90;\n        var round = Math.floor(slideAngle / 360);\n        if (rtl) {\n          slideAngle = -slideAngle;\n          round = Math.floor(-slideAngle / 360);\n        }\n        var progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n        var tx = 0;\n        var ty = 0;\n        var tz = 0;\n        if (slideIndex % 4 === 0) {\n          tx = -round * 4 * swiperSize;\n          tz = 0;\n        } else if ((slideIndex - 1) % 4 === 0) {\n          tx = 0;\n          tz = -round * 4 * swiperSize;\n        } else if ((slideIndex - 2) % 4 === 0) {\n          tx = swiperSize + (round * 4 * swiperSize);\n          tz = swiperSize;\n        } else if ((slideIndex - 3) % 4 === 0) {\n          tx = -swiperSize;\n          tz = (3 * swiperSize) + (swiperSize * 4 * round);\n        }\n        if (rtl) {\n          tx = -tx;\n        }\n\n        if (!isHorizontal) {\n          ty = tx;\n          tx = 0;\n        }\n\n        var transform = \"rotateX(\" + (isHorizontal ? 0 : -slideAngle) + \"deg) rotateY(\" + (isHorizontal ? slideAngle : 0) + \"deg) translate3d(\" + tx + \"px, \" + ty + \"px, \" + tz + \"px)\";\n        if (progress &lt;= 1 &amp;&amp; progress &gt; -1) {\n          wrapperRotate = (slideIndex * 90) + (progress * 90);\n          if (rtl) { wrapperRotate = (-slideIndex * 90) - (progress * 90); }\n        }\n        $slideEl.transform(transform);\n        if (params.slideShadows) {\n          // Set shadows\n          var shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n          var shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n          if (shadowBefore.length === 0) {\n            shadowBefore = $((\"&lt;div class=\\\"swiper-slide-shadow-\" + (isHorizontal ? 'left' : 'top') + \"\\\"&gt;&lt;/div&gt;\"));\n            $slideEl.append(shadowBefore);\n          }\n          if (shadowAfter.length === 0) {\n            shadowAfter = $((\"&lt;div class=\\\"swiper-slide-shadow-\" + (isHorizontal ? 'right' : 'bottom') + \"\\\"&gt;&lt;/div&gt;\"));\n            $slideEl.append(shadowAfter);\n          }\n          if (shadowBefore.length) { shadowBefore[0].style.opacity = Math.max(-progress, 0); }\n          if (shadowAfter.length) { shadowAfter[0].style.opacity = Math.max(progress, 0); }\n        }\n      }\n      $wrapperEl.css({\n        '-webkit-transform-origin': (\"50% 50% -\" + (swiperSize / 2) + \"px\"),\n        '-moz-transform-origin': (\"50% 50% -\" + (swiperSize / 2) + \"px\"),\n        '-ms-transform-origin': (\"50% 50% -\" + (swiperSize / 2) + \"px\"),\n        'transform-origin': (\"50% 50% -\" + (swiperSize / 2) + \"px\"),\n      });\n\n      if (params.shadow) {\n        if (isHorizontal) {\n          $cubeShadowEl.transform((\"translate3d(0px, \" + ((swiperWidth / 2) + params.shadowOffset) + \"px, \" + (-swiperWidth / 2) + \"px) rotateX(90deg) rotateZ(0deg) scale(\" + (params.shadowScale) + \")\"));\n        } else {\n          var shadowAngle = Math.abs(wrapperRotate) - (Math.floor(Math.abs(wrapperRotate) / 90) * 90);\n          var multiplier = 1.5 - (\n            (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2)\n            + (Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2)\n          );\n          var scale1 = params.shadowScale;\n          var scale2 = params.shadowScale / multiplier;\n          var offset = params.shadowOffset;\n          $cubeShadowEl.transform((\"scale3d(\" + scale1 + \", 1, \" + scale2 + \") translate3d(0px, \" + ((swiperHeight / 2) + offset) + \"px, \" + (-swiperHeight / 2 / scale2) + \"px) rotateX(-90deg)\"));\n        }\n      }\n      var zFactor = (Browser.isSafari || Browser.isUiWebView) ? (-swiperSize / 2) : 0;\n      $wrapperEl\n        .transform((\"translate3d(0px,0,\" + zFactor + \"px) rotateX(\" + (swiper.isHorizontal() ? 0 : wrapperRotate) + \"deg) rotateY(\" + (swiper.isHorizontal() ? -wrapperRotate : 0) + \"deg)\"));\n    },\n    setTransition: function setTransition(duration) {\n      var swiper = this;\n      var $el = swiper.$el;\n      var slides = swiper.slides;\n      slides\n        .transition(duration)\n        .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n        .transition(duration);\n      if (swiper.params.cubeEffect.shadow &amp;&amp; !swiper.isHorizontal()) {\n        $el.find('.swiper-cube-shadow').transition(duration);\n      }\n    },\n  };\n\n  var EffectCube = {\n    name: 'effect-cube',\n    params: {\n      cubeEffect: {\n        slideShadows: true,\n        shadow: true,\n        shadowOffset: 20,\n        shadowScale: 0.94,\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        cubeEffect: {\n          setTranslate: Cube.setTranslate.bind(swiper),\n          setTransition: Cube.setTransition.bind(swiper),\n        },\n      });\n    },\n    on: {\n      beforeInit: function beforeInit() {\n        var swiper = this;\n        if (swiper.params.effect !== 'cube') { return; }\n        swiper.classNames.push(((swiper.params.containerModifierClass) + \"cube\"));\n        swiper.classNames.push(((swiper.params.containerModifierClass) + \"3d\"));\n        var overwriteParams = {\n          slidesPerView: 1,\n          slidesPerColumn: 1,\n          slidesPerGroup: 1,\n          watchSlidesProgress: true,\n          resistanceRatio: 0,\n          spaceBetween: 0,\n          centeredSlides: false,\n          virtualTranslate: true,\n        };\n        Utils.extend(swiper.params, overwriteParams);\n        Utils.extend(swiper.originalParams, overwriteParams);\n      },\n      setTranslate: function setTranslate() {\n        var swiper = this;\n        if (swiper.params.effect !== 'cube') { return; }\n        swiper.cubeEffect.setTranslate();\n      },\n      setTransition: function setTransition(duration) {\n        var swiper = this;\n        if (swiper.params.effect !== 'cube') { return; }\n        swiper.cubeEffect.setTransition(duration);\n      },\n    },\n  };\n\n  var Flip = {\n    setTranslate: function setTranslate() {\n      var swiper = this;\n      var slides = swiper.slides;\n      var rtl = swiper.rtlTranslate;\n      for (var i = 0; i &lt; slides.length; i += 1) {\n        var $slideEl = slides.eq(i);\n        var progress = $slideEl[0].progress;\n        if (swiper.params.flipEffect.limitRotation) {\n          progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n        }\n        var offset = $slideEl[0].swiperSlideOffset;\n        var rotate = -180 * progress;\n        var rotateY = rotate;\n        var rotateX = 0;\n        var tx = -offset;\n        var ty = 0;\n        if (!swiper.isHorizontal()) {\n          ty = tx;\n          tx = 0;\n          rotateX = -rotateY;\n          rotateY = 0;\n        } else if (rtl) {\n          rotateY = -rotateY;\n        }\n\n        $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n\n        if (swiper.params.flipEffect.slideShadows) {\n          // Set shadows\n          var shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n          var shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n          if (shadowBefore.length === 0) {\n            shadowBefore = $((\"&lt;div class=\\\"swiper-slide-shadow-\" + (swiper.isHorizontal() ? 'left' : 'top') + \"\\\"&gt;&lt;/div&gt;\"));\n            $slideEl.append(shadowBefore);\n          }\n          if (shadowAfter.length === 0) {\n            shadowAfter = $((\"&lt;div class=\\\"swiper-slide-shadow-\" + (swiper.isHorizontal() ? 'right' : 'bottom') + \"\\\"&gt;&lt;/div&gt;\"));\n            $slideEl.append(shadowAfter);\n          }\n          if (shadowBefore.length) { shadowBefore[0].style.opacity = Math.max(-progress, 0); }\n          if (shadowAfter.length) { shadowAfter[0].style.opacity = Math.max(progress, 0); }\n        }\n        $slideEl\n          .transform((\"translate3d(\" + tx + \"px, \" + ty + \"px, 0px) rotateX(\" + rotateX + \"deg) rotateY(\" + rotateY + \"deg)\"));\n      }\n    },\n    setTransition: function setTransition(duration) {\n      var swiper = this;\n      var slides = swiper.slides;\n      var activeIndex = swiper.activeIndex;\n      var $wrapperEl = swiper.$wrapperEl;\n      slides\n        .transition(duration)\n        .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n        .transition(duration);\n      if (swiper.params.virtualTranslate &amp;&amp; duration !== 0) {\n        var eventTriggered = false;\n        // eslint-disable-next-line\n        slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {\n          if (eventTriggered) { return; }\n          if (!swiper || swiper.destroyed) { return; }\n          // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;\n          eventTriggered = true;\n          swiper.animating = false;\n          var triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n          for (var i = 0; i &lt; triggerEvents.length; i += 1) {\n            $wrapperEl.trigger(triggerEvents[i]);\n          }\n        });\n      }\n    },\n  };\n\n  var EffectFlip = {\n    name: 'effect-flip',\n    params: {\n      flipEffect: {\n        slideShadows: true,\n        limitRotation: true,\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        flipEffect: {\n          setTranslate: Flip.setTranslate.bind(swiper),\n          setTransition: Flip.setTransition.bind(swiper),\n        },\n      });\n    },\n    on: {\n      beforeInit: function beforeInit() {\n        var swiper = this;\n        if (swiper.params.effect !== 'flip') { return; }\n        swiper.classNames.push(((swiper.params.containerModifierClass) + \"flip\"));\n        swiper.classNames.push(((swiper.params.containerModifierClass) + \"3d\"));\n        var overwriteParams = {\n          slidesPerView: 1,\n          slidesPerColumn: 1,\n          slidesPerGroup: 1,\n          watchSlidesProgress: true,\n          spaceBetween: 0,\n          virtualTranslate: true,\n        };\n        Utils.extend(swiper.params, overwriteParams);\n        Utils.extend(swiper.originalParams, overwriteParams);\n      },\n      setTranslate: function setTranslate() {\n        var swiper = this;\n        if (swiper.params.effect !== 'flip') { return; }\n        swiper.flipEffect.setTranslate();\n      },\n      setTransition: function setTransition(duration) {\n        var swiper = this;\n        if (swiper.params.effect !== 'flip') { return; }\n        swiper.flipEffect.setTransition(duration);\n      },\n    },\n  };\n\n  var Coverflow = {\n    setTranslate: function setTranslate() {\n      var swiper = this;\n      var swiperWidth = swiper.width;\n      var swiperHeight = swiper.height;\n      var slides = swiper.slides;\n      var $wrapperEl = swiper.$wrapperEl;\n      var slidesSizesGrid = swiper.slidesSizesGrid;\n      var params = swiper.params.coverflowEffect;\n      var isHorizontal = swiper.isHorizontal();\n      var transform = swiper.translate;\n      var center = isHorizontal ? -transform + (swiperWidth / 2) : -transform + (swiperHeight / 2);\n      var rotate = isHorizontal ? params.rotate : -params.rotate;\n      var translate = params.depth;\n      // Each slide offset from center\n      for (var i = 0, length = slides.length; i &lt; length; i += 1) {\n        var $slideEl = slides.eq(i);\n        var slideSize = slidesSizesGrid[i];\n        var slideOffset = $slideEl[0].swiperSlideOffset;\n        var offsetMultiplier = ((center - slideOffset - (slideSize / 2)) / slideSize) * params.modifier;\n\n        var rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n        var rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\n        // var rotateZ = 0\n        var translateZ = -translate * Math.abs(offsetMultiplier);\n\n        var translateY = isHorizontal ? 0 : params.stretch * (offsetMultiplier);\n        var translateX = isHorizontal ? params.stretch * (offsetMultiplier) : 0;\n\n        // Fix for ultra small values\n        if (Math.abs(translateX) &lt; 0.001) { translateX = 0; }\n        if (Math.abs(translateY) &lt; 0.001) { translateY = 0; }\n        if (Math.abs(translateZ) &lt; 0.001) { translateZ = 0; }\n        if (Math.abs(rotateY) &lt; 0.001) { rotateY = 0; }\n        if (Math.abs(rotateX) &lt; 0.001) { rotateX = 0; }\n\n        var slideTransform = \"translate3d(\" + translateX + \"px,\" + translateY + \"px,\" + translateZ + \"px)  rotateX(\" + rotateX + \"deg) rotateY(\" + rotateY + \"deg)\";\n\n        $slideEl.transform(slideTransform);\n        $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n        if (params.slideShadows) {\n          // Set shadows\n          var $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n          var $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n          if ($shadowBeforeEl.length === 0) {\n            $shadowBeforeEl = $((\"&lt;div class=\\\"swiper-slide-shadow-\" + (isHorizontal ? 'left' : 'top') + \"\\\"&gt;&lt;/div&gt;\"));\n            $slideEl.append($shadowBeforeEl);\n          }\n          if ($shadowAfterEl.length === 0) {\n            $shadowAfterEl = $((\"&lt;div class=\\\"swiper-slide-shadow-\" + (isHorizontal ? 'right' : 'bottom') + \"\\\"&gt;&lt;/div&gt;\"));\n            $slideEl.append($shadowAfterEl);\n          }\n          if ($shadowBeforeEl.length) { $shadowBeforeEl[0].style.opacity = offsetMultiplier &gt; 0 ? offsetMultiplier : 0; }\n          if ($shadowAfterEl.length) { $shadowAfterEl[0].style.opacity = (-offsetMultiplier) &gt; 0 ? -offsetMultiplier : 0; }\n        }\n      }\n\n      // Set correct perspective for IE10\n      if (Support.pointerEvents || Support.prefixedPointerEvents) {\n        var ws = $wrapperEl[0].style;\n        ws.perspectiveOrigin = center + \"px 50%\";\n      }\n    },\n    setTransition: function setTransition(duration) {\n      var swiper = this;\n      swiper.slides\n        .transition(duration)\n        .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n        .transition(duration);\n    },\n  };\n\n  var EffectCoverflow = {\n    name: 'effect-coverflow',\n    params: {\n      coverflowEffect: {\n        rotate: 50,\n        stretch: 0,\n        depth: 100,\n        modifier: 1,\n        slideShadows: true,\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        coverflowEffect: {\n          setTranslate: Coverflow.setTranslate.bind(swiper),\n          setTransition: Coverflow.setTransition.bind(swiper),\n        },\n      });\n    },\n    on: {\n      beforeInit: function beforeInit() {\n        var swiper = this;\n        if (swiper.params.effect !== 'coverflow') { return; }\n\n        swiper.classNames.push(((swiper.params.containerModifierClass) + \"coverflow\"));\n        swiper.classNames.push(((swiper.params.containerModifierClass) + \"3d\"));\n\n        swiper.params.watchSlidesProgress = true;\n        swiper.originalParams.watchSlidesProgress = true;\n      },\n      setTranslate: function setTranslate() {\n        var swiper = this;\n        if (swiper.params.effect !== 'coverflow') { return; }\n        swiper.coverflowEffect.setTranslate();\n      },\n      setTransition: function setTransition(duration) {\n        var swiper = this;\n        if (swiper.params.effect !== 'coverflow') { return; }\n        swiper.coverflowEffect.setTransition(duration);\n      },\n    },\n  };\n\n  var Thumbs = {\n    init: function init() {\n      var swiper = this;\n      var ref = swiper.params;\n      var thumbsParams = ref.thumbs;\n      var SwiperClass = swiper.constructor;\n      if (thumbsParams.swiper instanceof SwiperClass) {\n        swiper.thumbs.swiper = thumbsParams.swiper;\n        Utils.extend(swiper.thumbs.swiper.originalParams, {\n          watchSlidesProgress: true,\n          slideToClickedSlide: false,\n        });\n        Utils.extend(swiper.thumbs.swiper.params, {\n          watchSlidesProgress: true,\n          slideToClickedSlide: false,\n        });\n      } else if (Utils.isObject(thumbsParams.swiper)) {\n        swiper.thumbs.swiper = new SwiperClass(Utils.extend({}, thumbsParams.swiper, {\n          watchSlidesVisibility: true,\n          watchSlidesProgress: true,\n          slideToClickedSlide: false,\n        }));\n        swiper.thumbs.swiperCreated = true;\n      }\n      swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n      swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);\n    },\n    onThumbClick: function onThumbClick() {\n      var swiper = this;\n      var thumbsSwiper = swiper.thumbs.swiper;\n      if (!thumbsSwiper) { return; }\n      var clickedIndex = thumbsSwiper.clickedIndex;\n      var clickedSlide = thumbsSwiper.clickedSlide;\n      if (clickedSlide &amp;&amp; $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) { return; }\n      if (typeof clickedIndex === 'undefined' || clickedIndex === null) { return; }\n      var slideToIndex;\n      if (thumbsSwiper.params.loop) {\n        slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n      } else {\n        slideToIndex = clickedIndex;\n      }\n      if (swiper.params.loop) {\n        var currentIndex = swiper.activeIndex;\n        if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n          swiper.loopFix();\n          // eslint-disable-next-line\n          swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n          currentIndex = swiper.activeIndex;\n        }\n        var prevIndex = swiper.slides.eq(currentIndex).prevAll((\"[data-swiper-slide-index=\\\"\" + slideToIndex + \"\\\"]\")).eq(0).index();\n        var nextIndex = swiper.slides.eq(currentIndex).nextAll((\"[data-swiper-slide-index=\\\"\" + slideToIndex + \"\\\"]\")).eq(0).index();\n        if (typeof prevIndex === 'undefined') { slideToIndex = nextIndex; }\n        else if (typeof nextIndex === 'undefined') { slideToIndex = prevIndex; }\n        else if (nextIndex - currentIndex &lt; currentIndex - prevIndex) { slideToIndex = nextIndex; }\n        else { slideToIndex = prevIndex; }\n      }\n      swiper.slideTo(slideToIndex);\n    },\n    update: function update(initial) {\n      var swiper = this;\n      var thumbsSwiper = swiper.thumbs.swiper;\n      if (!thumbsSwiper) { return; }\n\n      var slidesPerView = thumbsSwiper.params.slidesPerView === 'auto'\n        ? thumbsSwiper.slidesPerViewDynamic()\n        : thumbsSwiper.params.slidesPerView;\n\n      if (swiper.realIndex !== thumbsSwiper.realIndex) {\n        var currentThumbsIndex = thumbsSwiper.activeIndex;\n        var newThumbsIndex;\n        if (thumbsSwiper.params.loop) {\n          if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n            thumbsSwiper.loopFix();\n            // eslint-disable-next-line\n            thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n            currentThumbsIndex = thumbsSwiper.activeIndex;\n          }\n          // Find actual thumbs index to slide to\n          var prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll((\"[data-swiper-slide-index=\\\"\" + (swiper.realIndex) + \"\\\"]\")).eq(0).index();\n          var nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll((\"[data-swiper-slide-index=\\\"\" + (swiper.realIndex) + \"\\\"]\")).eq(0).index();\n          if (typeof prevThumbsIndex === 'undefined') { newThumbsIndex = nextThumbsIndex; }\n          else if (typeof nextThumbsIndex === 'undefined') { newThumbsIndex = prevThumbsIndex; }\n          else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) { newThumbsIndex = currentThumbsIndex; }\n          else if (nextThumbsIndex - currentThumbsIndex &lt; currentThumbsIndex - prevThumbsIndex) { newThumbsIndex = nextThumbsIndex; }\n          else { newThumbsIndex = prevThumbsIndex; }\n        } else {\n          newThumbsIndex = swiper.realIndex;\n        }\n        if (thumbsSwiper.visibleSlidesIndexes &amp;&amp; thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) &lt; 0) {\n          if (thumbsSwiper.params.centeredSlides) {\n            if (newThumbsIndex &gt; currentThumbsIndex) {\n              newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n            } else {\n              newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n            }\n          } else if (newThumbsIndex &gt; currentThumbsIndex) {\n            newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n          }\n          thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n        }\n      }\n\n      // Activate thumbs\n      var thumbsToActivate = 1;\n      var thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n      if (swiper.params.slidesPerView &gt; 1 &amp;&amp; !swiper.params.centeredSlides) {\n        thumbsToActivate = swiper.params.slidesPerView;\n      }\n\n      if (!swiper.params.thumbs.multipleActiveThumbs) {\n        thumbsToActivate = 1;\n      }\n\n      thumbsToActivate = Math.floor(thumbsToActivate);\n\n      thumbsSwiper.slides.removeClass(thumbActiveClass);\n      if (thumbsSwiper.params.loop || (thumbsSwiper.params.virtual &amp;&amp; thumbsSwiper.params.virtual.enabled)) {\n        for (var i = 0; i &lt; thumbsToActivate; i += 1) {\n          thumbsSwiper.$wrapperEl.children((\"[data-swiper-slide-index=\\\"\" + (swiper.realIndex + i) + \"\\\"]\")).addClass(thumbActiveClass);\n        }\n      } else {\n        for (var i$1 = 0; i$1 &lt; thumbsToActivate; i$1 += 1) {\n          thumbsSwiper.slides.eq(swiper.realIndex + i$1).addClass(thumbActiveClass);\n        }\n      }\n    },\n  };\n  var Thumbs$1 = {\n    name: 'thumbs',\n    params: {\n      thumbs: {\n        multipleActiveThumbs: true,\n        swiper: null,\n        slideThumbActiveClass: 'swiper-slide-thumb-active',\n        thumbsContainerClass: 'swiper-container-thumbs',\n      },\n    },\n    create: function create() {\n      var swiper = this;\n      Utils.extend(swiper, {\n        thumbs: {\n          swiper: null,\n          init: Thumbs.init.bind(swiper),\n          update: Thumbs.update.bind(swiper),\n          onThumbClick: Thumbs.onThumbClick.bind(swiper),\n        },\n      });\n    },\n    on: {\n      beforeInit: function beforeInit() {\n        var swiper = this;\n        var ref = swiper.params;\n        var thumbs = ref.thumbs;\n        if (!thumbs || !thumbs.swiper) { return; }\n        swiper.thumbs.init();\n        swiper.thumbs.update(true);\n      },\n      slideChange: function slideChange() {\n        var swiper = this;\n        if (!swiper.thumbs.swiper) { return; }\n        swiper.thumbs.update();\n      },\n      update: function update() {\n        var swiper = this;\n        if (!swiper.thumbs.swiper) { return; }\n        swiper.thumbs.update();\n      },\n      resize: function resize() {\n        var swiper = this;\n        if (!swiper.thumbs.swiper) { return; }\n        swiper.thumbs.update();\n      },\n      observerUpdate: function observerUpdate() {\n        var swiper = this;\n        if (!swiper.thumbs.swiper) { return; }\n        swiper.thumbs.update();\n      },\n      setTransition: function setTransition(duration) {\n        var swiper = this;\n        var thumbsSwiper = swiper.thumbs.swiper;\n        if (!thumbsSwiper) { return; }\n        thumbsSwiper.setTransition(duration);\n      },\n      beforeDestroy: function beforeDestroy() {\n        var swiper = this;\n        var thumbsSwiper = swiper.thumbs.swiper;\n        if (!thumbsSwiper) { return; }\n        if (swiper.thumbs.swiperCreated &amp;&amp; thumbsSwiper) {\n          thumbsSwiper.destroy();\n        }\n      },\n    },\n  };\n\n  // Swiper Class\n\n  var components = [\n    Device$1,\n    Support$1,\n    Browser$1,\n    Resize,\n    Observer$1,\n    Virtual$1,\n    Keyboard$1,\n    Mousewheel$1,\n    Navigation$1,\n    Pagination$1,\n    Scrollbar$1,\n    Parallax$1,\n    Zoom$1,\n    Lazy$1,\n    Controller$1,\n    A11y,\n    History$1,\n    HashNavigation$1,\n    Autoplay$1,\n    EffectFade,\n    EffectCube,\n    EffectFlip,\n    EffectCoverflow,\n    Thumbs$1\n  ];\n\n  if (typeof Swiper.use === 'undefined') {\n    Swiper.use = Swiper.Class.use;\n    Swiper.installModule = Swiper.Class.installModule;\n  }\n\n  Swiper.use(components);\n\n  return Swiper;\n\n}));\n//# sourceMappingURL=swiper.js.map\n","/* global getHashValue, toggleHashUrl, getRestaurantCount */\n/**\n * CategoryBar Component\n */\n\nimport PropTypes from 'prop-types'\nimport { checkPropTypes, onWindowLoad } from '../lib/helpers'\nimport { ChipsList, Popup, SearchBox } from '@takeaway/ui-vanilla'\n// import { CUSTOM_EVENTS } from '../enums/customEvents'\nimport MediaQueryService from '../services/mediaquery.service'\n// import trackingService from '../services/tracking.service'\n// import { piiDataReplacer } from '../services/piiData.service'\n\nexport default class CategoryBar {\n  _classSelector = {\n    CATEGORY: 'kitchen-types__category',\n    CHIP: 'tv-chips-results__item',\n    CHIP_SELECT_ALL: 'tv-chips-results__item--select-all',\n    NO_RESULTS_BUTTON: 'tv-chips-no-results__button',\n    SELECT_ALL: 'kitchen-types__select-all',\n    SHOW_MORE: 'kitchen-types__show-more',\n    SLIDE: 'swiper-slide',\n    JS_SHOW_MORE: 'js-kitchen-types__show-more',\n    JS_CATEGORY: 'js-kitchen-types__kitchen-type',\n    JS_CATEGORY_SHOW_MORE: 'js-category-from-show-more',\n    JS_KITCHEN_BAR: 'js-kitchen-type-sticky',\n    JS_POPUP_HEADER: 'js-header-content',\n    JS_SELECT_ALL: 'js-kitchen-types__select-all',\n    JS_SELECTED_CATEGORY: 'filter-label-selected',\n    JS_KITCHEN_BAR_CONTAINER: 'js-kitchen-type-wrapper'\n  }\n\n  _dataTypeSelector = 'Cuisine'\n\n  _mediaQueryService\n\n  _propTypes = {\n    swiper: PropTypes.object.isRequired\n  }\n\n  _state = {\n    selectAllUrl: undefined,\n    maxNumberOfCategories: 0,\n    allCategories: [],\n    defaultCategories: [],\n    slideToIndex: undefined,\n    extraCategoryAtTheEnd: undefined,\n    selectedCategoryFromPopup: undefined,\n    searchString: undefined\n  }\n\n  _translations\n\n  constructor (data) {\n    checkPropTypes(this._propTypes, data, 'prop', 'KitchenBar')\n    this.props = Object.freeze(data)\n  }\n\n  init = () =&gt; {\n    this._mediaQueryService = new MediaQueryService()\n\n    const $kitchenBar = document.querySelector(`.${this._classSelector.JS_KITCHEN_BAR}`)\n\n    if ($kitchenBar) {\n      this._translations = JSON.parse($kitchenBar.dataset.translations || '{}')\n      this._state.allCategories = JSON.parse($kitchenBar.dataset.allCategories || '[]')\n      this._state.selectAllUrl = $kitchenBar.dataset.urlSelectAll || ''\n      // If there is a hash it overides the default value kitchenbar\n      if (!getHashValue(this._dataTypeSelector)) {\n        const category = JSON.parse($kitchenBar.dataset.selectedCategory || `{}`).category || ''\n        this._state.selectedCategoryFromPopup = this.getCategoryBySlug(category)\n        if (this._state.selectedCategoryFromPopup !== null) {\n          toggleHashUrl(this._dataTypeSelector, this._state.selectedCategoryFromPopup.categoryId)\n        }\n      }\n    }\n\n    // Handler event for Prev Button\n    // Slides to the starting position\n    if (this.props.swiper.navigation.prevEl) {\n      // Remove the current event listener\n      this.props.swiper.navigation.destroy('PreviousClick')\n      // Add the new event listener\n      this.props.swiper.navigation.prevEl.addEventListener(\n        'click',\n        eventHandler =&gt; {\n          eventHandler.preventDefault()\n          this.slideToStart()\n        }\n      )\n    }\n\n    // Handler event for Next Button\n    // Slides to the ending position\n    if (this.props.swiper.navigation.nextEl) {\n      // Remove the current event listener\n      this.props.swiper.navigation.destroy('NextClick')\n      // Add the new event listener\n      this.props.swiper.navigation.nextEl.addEventListener(\n        'click',\n        eventHandler =&gt; {\n          eventHandler.preventDefault()\n          this.slideToEnd()\n        }\n      )\n    }\n\n    this.props.swiper.on('resize', () =&gt; {\n      this.render()\n    })\n\n    this.render()\n\n    // To update grid calculations after load\n    onWindowLoad(() =&gt; this.props.swiper.resize.resizeHandler())\n  }\n\n  /**\n   * To update component calculations\n   */\n  update () {\n    this.setSwipingClass()\n    this.props.swiper.navigation.update()\n    this.props.swiper.update()\n  }\n\n  /**\n   * Returns the number of visible categories depending on device width\n   */\n  maxNumberOfCategories = () =&gt; {\n    let numberOfCategories = 5\n    if (this._mediaQueryService.respondTo('&gt;=desktop')) {\n      numberOfCategories = 12\n    } else if (this._mediaQueryService.respondTo('&gt;=tablet-portrait')) {\n      numberOfCategories = 8\n    }\n    return numberOfCategories\n  }\n\n  render = () =&gt; {\n    const maxNumberOfCategories = this.maxNumberOfCategories()\n    const categories = this._state.allCategories.slice(0, maxNumberOfCategories)\n    const selectedCategoryFromPopup = this._state.selectedCategoryFromPopup\n\n    // Check if re-rendering is needed\n    if (\n      maxNumberOfCategories !== this._state.maxNumberOfCategories ||\n      selectedCategoryFromPopup !== undefined\n    ) {\n      // Hide the bar\n      this.props.swiper.$el[0].classList.remove('visible')\n\n      // Fired on page load and resize\n      if (maxNumberOfCategories !== this._state.maxNumberOfCategories) {\n        this._state.maxNumberOfCategories = maxNumberOfCategories\n        this.props.swiper.removeAllSlides()\n\n        this._state.defaultCategories = []\n\n        this.addSelectAllButton()\n\n        this.addDefaultCategories(categories)\n      }\n\n      // Fired on interaction with pop-up\n      if (selectedCategoryFromPopup !== undefined) {\n        this.handleExtraCategoryAtTheEndOnPopupInteraction(selectedCategoryFromPopup)\n      } else {\n        // Hash check on page load\n        this.hashCheckOnLoad()\n      }\n\n      // Fired when a Show More button is needed\n      if (this._state.allCategories.length &gt; maxNumberOfCategories) {\n        this.addShowMoreButton()\n      }\n\n      // Show the bar\n      this.props.swiper.$el[0].classList.add('visible')\n\n      this.update()\n    }\n\n    this.handleSliderPosition()\n\n    this.addBarEventListeners()\n  }\n\n  handleSliderPosition () {\n    if (this._state.slideToIndex !== undefined) {\n      this.props.swiper.slideTo(this._state.slideToIndex)\n      this._state.slideToIndex = undefined\n    }\n  }\n\n  addShowMoreButton () {\n    let $showMore = document.querySelector(`.${this._classSelector.JS_SHOW_MORE}`)\n    if (!$showMore) {\n      this.props.swiper.appendSlide(this.renderShowMore())\n      $showMore = document.querySelector(`.${this._classSelector.JS_SHOW_MORE}`)\n      $showMore.addEventListener('click', this.openShowMore)\n    }\n  }\n\n  addSelectAllButton () {\n    this.props.swiper.appendSlide(this.renderSelectAll())\n  }\n\n  addDefaultCategories (categories) {\n    categories.forEach((category) =&gt; {\n      this.props.swiper.appendSlide(this.renderSingleCategory({ category }))\n      this._state.defaultCategories.push(category)\n    })\n  }\n\n  hashCheckOnLoad () {\n    let currentSelection = Number(getHashValue(this._dataTypeSelector))\n    if (isNaN(currentSelection)) {\n      currentSelection = 0\n    }\n\n    const activeCategory = this.getCategoryById(currentSelection)\n\n    if (activeCategory !== null) {\n      if (!this._state.defaultCategories.includes(activeCategory)) {\n        this._state.extraCategoryAtTheEnd = activeCategory\n        this.props.swiper.appendSlide(this.renderSingleCategory({ category: activeCategory }))\n      }\n      this.selectCategory(activeCategory)\n    } else {\n      // Default selection is \"Select All\" button\n      this.selectCategory()\n    }\n  }\n\n  handleExtraCategoryAtTheEndOnPopupInteraction (selectedCategoryFromPopup) {\n    // User clicked a category on pop-up\n    const extraCategoryAtTheEnd = this._state.extraCategoryAtTheEnd\n\n    if (selectedCategoryFromPopup === null) {\n      // User clicked Select All from pop-up\n      this.selectCategory()\n    } else if (extraCategoryAtTheEnd === undefined) {\n      // User clicked a category on pop-up, first time\n      if (!this._state.defaultCategories.includes(selectedCategoryFromPopup)) {\n        this.removeShowMoreButton()\n        this.props.swiper.appendSlide(this.renderSingleCategory({ category: selectedCategoryFromPopup }))\n      }\n      this.selectCategory(selectedCategoryFromPopup)\n    } else if (extraCategoryAtTheEnd === selectedCategoryFromPopup) {\n      // User clicked the active category on pop-up\n      this.selectCategory(extraCategoryAtTheEnd)\n    } else {\n      // User clicked a different category than active one on pop-up\n      if (!this._state.defaultCategories.includes(selectedCategoryFromPopup)) {\n        this.removeShowMoreButton()\n        this.removeLastCategory()\n        this.props.swiper.appendSlide(this.renderSingleCategory({ category: selectedCategoryFromPopup }))\n      }\n      this.selectCategory(selectedCategoryFromPopup)\n    }\n    this._state.selectedCategoryFromPopup = undefined\n  }\n\n  selectCategory (selectedCategory = null) {\n    const $kitchenBar = document.querySelector(`.${this._classSelector.JS_KITCHEN_BAR}`)\n    const $currentSelection = $kitchenBar.querySelector(`.${this._classSelector.JS_SELECTED_CATEGORY}`)\n    let $selectedCategory\n    let slideToIndex\n\n    // De-select current selection, if present\n    if ($currentSelection) {\n      $currentSelection.classList.remove(this._classSelector.JS_SELECTED_CATEGORY)\n    }\n\n    if (selectedCategory === null) {\n      // Select All is clicked\n      $selectedCategory = $kitchenBar.querySelector(`.${this._classSelector.JS_SELECT_ALL}`)\n      slideToIndex = 0\n    } else {\n      $selectedCategory = $kitchenBar.querySelector(`[data-value=\"${selectedCategory.categoryId}\"]`)\n      slideToIndex = this._state.defaultCategories.findIndex((category) =&gt; category.categoryId === Number(selectedCategory.categoryId))\n\n      if (!this._state.defaultCategories.includes(selectedCategory)) {\n        this._state.extraCategoryAtTheEnd = selectedCategory\n        slideToIndex = this._state.defaultCategories.length\n      }\n    }\n\n    if ($selectedCategory) {\n      $selectedCategory.classList.add(this._classSelector.JS_SELECTED_CATEGORY)\n    }\n\n    if (Number(slideToIndex) &gt;= 0) {\n      this._state.slideToIndex = slideToIndex\n    }\n  }\n\n  /**\n   * Render function for \"Select All\" button at the beginning\n   */\n  renderSelectAll = () =&gt; `\n    &lt;a\n      data-type=\"${this._dataTypeSelector}\"\n      data-value=\"reset\"\n      data-icon=\"î¤¸\"\n      class=\"\n        filter-label\n        filter-reset\n        ${this._classSelector.SLIDE}\n        ${this._classSelector.SELECT_ALL}\n        ${this._classSelector.JS_SELECT_ALL}\n      \"\n      href=\"${this._state.selectAllUrl}\"\n    &gt;&lt;span class=\"swiper-slide__context\"&gt;${this._translations.selectAllText}&lt;/span&gt;&lt;/a&gt;\n  `\n\n  /**\n   * Render function for single kitchen type\n   */\n  renderSingleCategory = ({ category }) =&gt; `\n    &lt;a\n      data-type=\"${this._dataTypeSelector}\"\n      data-value=\"${category.categoryId}\"\n      data-icon=\"${category.icon}\"\n      class=\"\n        filter-label\n        subcatlink\n        ${this._classSelector.SLIDE}\n        ${this._classSelector.CATEGORY}\n        ${this._classSelector.JS_CATEGORY}\n      \"\n      href=\"${category.href}\"\n      alt=\"${category.altText}\"\n    &gt;\n      &lt;span class=\"swiper-slide__context\"&gt;${category.categoryText}&lt;/span&gt;\n    &lt;/a&gt;\n  `\n\n  /**\n   * Render function for \"Show More\" button at the end\n   */\n  renderShowMore = () =&gt; `\n    &lt;a\n      class=\"\n        ${this._classSelector.SLIDE}\n        ${this._classSelector.SHOW_MORE}\n        ${this._classSelector.JS_SHOW_MORE}\n      \"\n      alt=\"${this._translations.showMoreText}\"\n    &gt;\n      &lt;span class=\"swiper-slide__context\"&gt;${this._translations.showMoreText}&lt;/span&gt;\n    &lt;/a&gt;\n  `\n\n  /**\n   * Scroll to the next \"page\" of categories\n   */\n  slideToNext = () =&gt; {\n    let nextIndex = this.props.swiper.activeIndex + 1\n    if (nextIndex &lt;= this.props.swiper.slides.length) {\n      this.props.swiper.slideTo(nextIndex)\n    } else {\n      this.slideToEnd()\n    }\n  }\n\n  /**\n   * Scroll to the previous \"page\" of categories\n   */\n  slideToPrevious = () =&gt; {\n    let previousIndex = this.props.swiper.activeIndex - 1\n    if (previousIndex &gt;= 0) {\n      this.props.swiper.slideTo(previousIndex)\n    } else {\n      this.slideToStart()\n    }\n  }\n\n  /**\n   * Scroll to the first element\n   */\n  slideToStart = () =&gt; {\n    this.props.swiper.slideTo(0)\n  }\n\n  /**\n   * Scroll to the last element\n   */\n  slideToEnd = () =&gt; {\n    this.props.swiper.slideTo(this.props.swiper.slides.length)\n  }\n\n  removeShowMoreButton = () =&gt; {\n    const lastButtonIndex = [\n      ...document.querySelectorAll(`.${this._classSelector.JS_KITCHEN_BAR} .${this._classSelector.SLIDE}`)\n    ].findIndex((category) =&gt; category.classList.contains(`${this._classSelector.JS_SHOW_MORE}`))\n\n    if (lastButtonIndex &gt; 0) {\n      this.props.swiper.removeSlide(lastButtonIndex)\n    }\n  }\n\n  removeLastCategory = () =&gt; {\n    const lastCategoryIndex = [\n      ...document.querySelectorAll(`.${this._classSelector.JS_KITCHEN_BAR} .${this._classSelector.SLIDE}:not(.${this._classSelector.JS_SHOW_MORE})`)\n    ].length\n\n    if (lastCategoryIndex) {\n      this.props.swiper.removeSlide(lastCategoryIndex - 1)\n      this._state.extraCategoryAtTheEnd = undefined\n    }\n  }\n\n  getCategoryByName = (categoryName) =&gt; this._state.allCategories.find(\n    ({ categoryText }) =&gt; categoryText === categoryName\n  ) || null\n\n  getCategoryBySlug = (categorySlug) =&gt; this._state.allCategories.find(\n    ({ cwSlug }) =&gt; cwSlug === categorySlug) || null\n\n  getCategoryById = (categoryId) =&gt; this._state.allCategories.find(\n    category =&gt; category.categoryId === categoryId\n  ) || null\n\n  getAllCategoryNames = () =&gt; {\n    return this._state.allCategories.map((category) =&gt; category.categoryText)\n  }\n\n  openShowMore = () =&gt; {\n    // Open the popup\n    this.popup = new Popup({\n      headerContent: `\n        &lt;div class=\"js-header-content\"&gt;\n          &lt;h1 class=\"tv-popup__header-text\"&gt;${this._translations.allCategories}&lt;/h1&gt;\n        &lt;/div&gt;\n      `,\n      mainContent: '',\n      openCallback: this.addContentToPopup,\n      closeCallback: () =&gt; {\n        this.sendClosedPopupEvent({\n          searchString: piiDataReplacer({ data: this._state.searchString }),\n          countRestaurantShown: (typeof getRestaurantCount === 'function') ? getRestaurantCount() : undefined\n        })\n      }\n    })\n    this.popup.render()\n    this.sendHasClickedMoreKitchenTypesEvent()\n  }\n\n  addContentToPopup = () =&gt; {\n    const { JS_KITCHEN_BAR_CONTAINER, JS_POPUP_HEADER, JS_SELECTED_CATEGORY } = this._classSelector\n    let resetSearch\n    const selectedItems = [...document.querySelectorAll(`.${JS_KITCHEN_BAR_CONTAINER} .${JS_SELECTED_CATEGORY}`)].map(\n      $selectedCategory =&gt; $selectedCategory.innerText.trim()\n    )\n\n    const $chipsLocation = this.popup.getMainContent()\n    const chipList = new ChipsList({\n      $container: $chipsLocation,\n      chipsList: this.getAllCategoryNames(),\n      defaultSelected: selectedItems,\n      selectAllText: this._translations.selectAllText,\n      selectedCallback: ([itemText]) =&gt; {\n        const selectedCategory = this.getCategoryByName(itemText)\n\n        this.sendHasFilteredKitchenTypeEvent({\n          kitchenTypeID: (selectedCategory === null)\n            ? 0\n            : Number(selectedCategory.categoryId),\n          kitchenTypeLocation: 'popup',\n          kitchenTypePosition: undefined\n        })\n\n        if (\n          selectedCategory === null || (\n            this._state.extraCategoryAtTheEnd === selectedCategory &amp;&amp;\n            selectedItems.includes(itemText)\n          )\n        ) {\n          // User clicked \"Select All\" or Active Category on pop-up\n          this._state.selectedCategoryFromPopup = null\n\n          toggleHashUrl(this._dataTypeSelector, 'reset')\n        } else {\n          // User clicked a valid category on pop-up\n          this._state.selectedCategoryFromPopup = selectedCategory\n\n          toggleHashUrl(this._dataTypeSelector, selectedCategory.categoryId)\n        }\n\n        this.render()\n\n        // Make the closing more visual\n        setTimeout(() =&gt; {\n          this.popup.closePopup()\n        }, 200)\n      },\n      noResultsText: this._translations.noCategoriesText,\n      position: 'beforeend',\n      resetCallback: resetSearch\n    })\n    chipList.render()\n    // @TODO: Move this logic to initialization of ChipsList with a parameter resetSearchText for the component\n    $chipsLocation.querySelector(`.${this._classSelector.NO_RESULTS_BUTTON}`).textContent = this._translations.resetSearch\n\n    document.querySelectorAll(`.${JS_POPUP_HEADER}`).forEach(($container) =&gt; {\n      let hasStartedSearch = false\n      const searchBox = new SearchBox({\n        $container: $container,\n        placeholderText: this._translations.searchCategories,\n        searchChangeFn: (searchValue) =&gt; {\n          chipList.filterChips(searchValue)\n          if (searchValue) {\n            this._state.searchString = searchValue\n\n            if (searchValue.length === 1 &amp;&amp; !hasStartedSearch) {\n              hasStartedSearch = true\n              this.sendHasStartedSearching()\n            }\n            if (!chipList.checkIfHasResults()) {\n              this.sendNoSearchResultsEvent({\n                searchString: piiDataReplacer({ data: searchValue })\n              })\n            }\n          } else {\n            if (this._state.searchString &amp;&amp; this._state.searchString.length &gt; 0) {\n              this.sendHasResetSearching()\n            }\n            this._state.searchString = undefined\n            hasStartedSearch = false\n          }\n        },\n        innerContent: '',\n        position: 'beforeend'\n      })\n      searchBox.render()\n      chipList.focusSelected()\n      resetSearch = () =&gt; searchBox.setSearch({ newValue: '' })\n    })\n  }\n\n  /**\n   * Checks if all slides are visible\n   */\n  checkIfAllSlidesAreVisible = () =&gt; {\n    const { $wrapperEl } = this.props.swiper\n\n    const containerWidth = $wrapperEl.outerWidth()\n\n    let currentWidth = 0\n\n    $wrapperEl.find('.swiper-slide').each(function () { currentWidth += this.offsetWidth })\n\n    return currentWidth &lt;= containerWidth\n  }\n\n  /**\n   * Decides when to enable/disable swiping\n   */\n  setSwipingClass = () =&gt; {\n    if (this.checkIfAllSlidesAreVisible() === true) {\n      this.disableSwiping()\n    } else {\n      this.enableSwiping()\n    }\n  }\n\n  /**\n   * Enables swiping\n   */\n  enableSwiping = () =&gt; {\n    const { $el, params: { noSwipingClass } } = this.props.swiper\n    $el.removeClass(noSwipingClass)\n  }\n\n  /**\n   * Disables swiping\n   */\n  disableSwiping = () =&gt; {\n    const { $el, params: { noSwipingClass } } = this.props.swiper\n    $el.addClass(noSwipingClass)\n  }\n\n  /**\n   * Tracking\n   */\n\n  sendNoSearchResultsEvent = ({ searchString }) =&gt; trackingService.send({\n    eventName: 'hasNoSearchResults',\n    eventData: {\n      searchString,\n      searchType: 'kitchenfilter'\n    }\n  })\n\n  sendClosedPopupEvent = ({ searchString, countRestaurantShown }) =&gt; trackingService.send({\n    eventName: 'hasClosedKitchenFilterPopup',\n    eventData: {\n      searchString,\n      countRestaurantShown\n    }\n  })\n\n  sendHasStartedSearching = () =&gt; trackingService.send({\n    eventName: 'hasStartedSearching',\n    eventData: {\n      searchType: 'kitchenfilter'\n    }\n  })\n\n  sendHasResetSearching = () =&gt; trackingService.send({\n    eventName: 'hasResetSearching',\n    eventData: {\n      searchType: 'kitchenfilter'\n    }\n  })\n\n  addBarEventListeners = () =&gt; {\n    const $selectAllButton = document.querySelector(`.${this._classSelector.JS_SELECT_ALL}`)\n    if ($selectAllButton) {\n      $selectAllButton.addEventListener('click', () =&gt; {\n        this.sendHasFilteredKitchenTypeEvent({\n          kitchenTypeID: 0,\n          kitchenTypeLocation: 'bar',\n          kitchenTypePosition: 0\n        })\n      })\n    }\n\n    const $$defaultCategories = document.querySelectorAll(`.${this._classSelector.JS_CATEGORY}`)\n    if ($$defaultCategories.length &gt; 0) {\n      $$defaultCategories.forEach(($button, index) =&gt; $button.addEventListener('click', () =&gt; {\n        this.sendHasFilteredKitchenTypeEvent({\n          kitchenTypeID: Number($button.dataset.value),\n          kitchenTypeLocation: 'bar',\n          kitchenTypePosition: index + 1\n        })\n      }))\n    }\n  }\n\n  sendHasFilteredKitchenTypeEvent = ({\n    kitchenTypeID,\n    kitchenTypeLocation,\n    kitchenTypePosition\n  }) =&gt; {\n    const { lastSelectedKitchenType } = window.app.getState()\n    if (lastSelectedKitchenType !== kitchenTypeID) {\n      window.app.setState({\n        lastSelectedKitchenType: kitchenTypeID\n      })\n      const eventToBeFired = () =&gt; {\n        trackingService.send({\n          eventName: 'hasFilteredKitchenType',\n          eventData: {\n            kitchenTypeID,\n            kitchenTypeLocation,\n            kitchenTypePosition,\n            countRestaurantShown: (typeof getRestaurantCount === 'function') ? getRestaurantCount() : undefined\n          }\n        })\n        // IE11 hack to only fire this event once, instead of using { once: true }\n        window.removeEventListener(CUSTOM_EVENTS.VISIBLE_RESTAURANTS_COUNTER_UPDATED, eventToBeFired)\n      }\n      window.addEventListener(CUSTOM_EVENTS.VISIBLE_RESTAURANTS_COUNTER_UPDATED, eventToBeFired)\n    }\n  }\n\n  sendHasClickedMoreKitchenTypesEvent = () =&gt; {\n    trackingService.send({\n      eventName: 'hasClickedMoreKitchenTypes'\n    })\n  }\n}\n","/**\n * KitchenBar Component\n *\n * @author Danny Verpoort &lt;danny.verpoort@takeaway.com&gt;\n */\n\nimport PropTypes from 'prop-types'\nimport { checkPropTypes } from '../lib/helpers'\n\nexport default class KitchenBar {\n  _propTypes = {\n    swiper: PropTypes.object.isRequired\n  }\n\n  constructor (data) {\n    checkPropTypes(this._propTypes, data, 'prop', 'KitchenBar')\n    this.props = Object.freeze(data)\n  }\n\n  init = () =&gt; {\n    if (this.props.swiper.navigation.nextEl) {\n      // Remove the current eventlistener\n      this.props.swiper.navigation.destroy('NextClick')\n      // Add the new eventlistener\n      this.props.swiper.navigation.nextEl.addEventListener(\n        'click',\n        eventHandler =&gt; {\n          eventHandler.preventDefault()\n          this.slideNext()\n        }\n      )\n    }\n\n    if (this.props.swiper.navigation.prevEl) {\n      // Remove the current eventlistener\n      this.props.swiper.navigation.destroy('PreviousClick')\n      // Add the new eventlistener\n      this.props.swiper.navigation.prevEl.addEventListener(\n        'click',\n        eventHandler =&gt; {\n          eventHandler.preventDefault()\n          this.slidePrevious()\n        }\n      )\n    }\n    // Show the items in the kitchenbar\n    this.props.swiper.$el[0].classList.add('visible')\n    this.props.swiper.on('transitionEnd', () =&gt; {\n      if (!this.props.swiper.isEnd) {\n        this.props.swiper.slideToClosest()\n      } else {\n        this.props.swiper.slideTo(\n          this.props.swiper.snapGrid.length - 1\n        )\n      }\n    })\n\n    this.props.swiper.on('resize', () =&gt; {\n      this.props.swiper.update()\n    })\n\n    this.props.swiper.navigation.update()\n    this.props.swiper.update()\n  }\n\n  /**\n   * Scroll to the next \"page\" of slides\n   */\n  slideNext = () =&gt; {\n    // slidesGrid has the left position of all elements able to scroll completely to the left side of the container\n    // activeIndex is the first visible index\n    const { slidesGrid, activeIndex, $wrapperEl, params: { spaceBetween } } = this.props.swiper\n    // Current position of the first shown element + width of the container\n    const scrollWidth = slidesGrid[activeIndex] + $wrapperEl.outerWidth()\n    // Find the item which is positioned at the scrollWidth\n    const foundIndex = slidesGrid.findIndex((position) =&gt; position - spaceBetween &gt;= scrollWidth)\n    const gotoIndex = foundIndex === -1\n      ? slidesGrid.length - 1 // No index found goto the last slide\n      : foundIndex - 2 // Goto the slide which is just before the found slide\n    this.props.swiper.slideTo(gotoIndex)\n  }\n\n  /**\n   * Scroll to the previous \"page\" of slides\n   */\n  slidePrevious = () =&gt; {\n    // activeIndex is the first visible index\n    // slidesGrid has the left position of all elements able to scroll completely to the left side of the container\n    const { slidesGrid, $wrapperEl, activeIndex, params: { spaceBetween } } = this.props.swiper\n\n    // Get the width of the kitchenBar\n    const containerWidth = $wrapperEl.outerWidth()\n    // Move from the found position minus the width of the container,\n    // because we took the right side it should be fully visible\n    let previousIndex = [...slidesGrid].findIndex((position) =&gt; {\n      let index = activeIndex\n      return position &gt;= (slidesGrid[index + 1] - spaceBetween - containerWidth)\n    })\n    // Slide to the \"previous\" index\n    this.props.swiper.slideTo(previousIndex)\n  }\n}\n","const KeyCode = {\n  DOWN: 40,\n  ENTER: 13,\n  ESCAPE: 27,\n  RIGHT: 39,\n  SPACE: 32,\n  TAB: 9,\n  UP: 38\n}\n\nexport default KeyCode\n","import { ready, getCookieByName } from './lib/helpers'\nimport Swiper from \"swiper\";\nimport CategoryBar from \"./components/categoryBarComponent\";\nimport KitchenBar from \"./components/kitchenTypeComponent\";\nimport { CookieConsent, CookieSettings, CookieSettingsGranular, CookieWall, CookieWallGranular, Notify } from '@takeaway/ui-vanilla'\nimport { JetFm } from \"./services/featuremanagement\";\n\n\nclass App {\n    components = {}\n}\n\nready(() =&gt; {\n    window.app = new App()\n    const consentCookie = getCookieByName('cookieConsent')\n    if(consentCookie == 'full'){\n        const jetfm = new JetFm();\n        jetfm.init();\n    }\n\n    $.fn.isInViewport = function () {\n        const elementTop = $(this).offset().top\n        const elementBottom = elementTop + $(this).outerHeight()\n        const viewportTop = $(window).scrollTop()\n        const viewportBottom = viewportTop + $(window).height()\n        const scroller = $('.menu-category-bar-container')\n        const scrollerHeight = scroller.length &gt; 0 ? scroller.outerHeight() : 0\n        const smartBanner = $('.smartbnr')\n        const smartBannerHeight = smartBanner.length &gt; 0 ? smartBanner.outerHeight() : 0\n        return elementBottom &gt; (viewportTop + scrollerHeight + smartBannerHeight) &amp;&amp; elementTop &lt; viewportBottom\n    }\n\n    const restaurantCategorySwiper = new Swiper('.js-swiper', {\n        slidesPerView: 'auto',\n        freeMode: true,\n        loop: false,\n        watchOverflow: true,\n        navigation: {\n            nextEl: '.swipe-next'\n        }\n    })\n\n    const kitchenBarSelector = '.js-menu-category-bar-sticky .js-swiper'\n    if (document.querySelector(kitchenBarSelector)) {\n\n        const swiper: Swiper = new Swiper(kitchenBarSelector, {\n            slidesPerView: 'auto',\n            freeMode: true,\n            speed: 1000,\n            loop: false,\n            slideToClickedSlide: true,\n            watchOverflow: true,\n            navigation: {\n                nextEl: '.swiper-button-next',\n                prevEl: '.swiper-button-prev'\n            }\n        })\n        swiper.snapGrid[swiper.snapGrid.length - 1] = swiper.slidesGrid[swiper.slidesGrid.length - 1]\n        window.app.components.kitchenBar = new KitchenBar({\n            swiper: swiper\n        })\n        window.app.components.kitchenBar.init()\n    }\n\n\n    $(document).scroll(() =&gt; {\n        stickyCategories()\n        scrollCategories()\n    })\n\n    const menuCategoryBar = document.querySelector('.menu-category-bar')\n    const menuCategoryContainer = document.querySelector('.js-menu-category-bar-sticky')\n    const menuCardMainContainer = document.querySelector('.full')\n    const scrollingClass = 'category-scrolling'\n\n    function stickyCategories () {\n        if (menuCardMainContainer &amp;&amp; menuCategoryContainer &amp;&amp; menuCategoryBar) {\n            const smartBanner = document.querySelector('.smartbnr') // added afterward, because of ajax load\n            const fromTop = smartBanner ? smartBanner.getBoundingClientRect().height : 0\n            if (menuCategoryContainer.getBoundingClientRect().top &lt;= fromTop) {\n                menuCardMainContainer.classList.add(scrollingClass)\n            } else {\n                menuCardMainContainer.classList.remove(scrollingClass)\n            }\n        }\n    }\n\n    function scrollCategories () {\n        // Find the heighest element in the viewport\n        let heighestElement\n        $('.menucard__meals-group').each(function () {\n            if ($(this).isInViewport()) {\n                if (heighestElement === undefined || $(this).position().top &lt; $(heighestElement).position().top) {\n                    heighestElement = this\n                }\n            }\n        })\n\n        // Set the active index on the category slider\n        let index = $(heighestElement).attr('anchor-id')\n        if (typeof index === 'undefined') {\n            if (restaurantCategorySwiper.slides &amp;&amp; restaurantCategorySwiper.slides.length) {\n                restaurantCategorySwiper.slideTo(0)\n                $('.swiper-slide').removeClass('slide-active')\n                $('.swiper-wrapper a:first-child').addClass('slide-active')\n            }\n        } else {\n            let $el = $('a[href=\"#' + index + '\"]')\n\n            restaurantCategorySwiper.slideTo($el.index())\n            $('.swiper-slide').removeClass('slide-active')\n            $el.addClass('slide-active')\n        }\n    }\n\n\n    const navigateToAnchor = ($anchorElement) =&gt; {\n        if ($anchorElement) {\n            const targetPosition = $anchorElement.getBoundingClientRect()\n            const barHeight = menuCategoryBar ? menuCategoryBar.getBoundingClientRect().height : 0\n            // const smartBanner = document.querySelector('.smartbnr')\n            // const smartBannerHeight = smartBanner ? smartBanner.getBoundingClientRect().height : 0\n            const windowYPosition = window.scrollY | window.pageYOffset // if IE\n            const newYPosition = windowYPosition + targetPosition.top - barHeight\n            console.log('scrollTo(0, ' + newYPosition + ')')\n            console.log(newYPosition)\n            window.scrollTo(0, newYPosition) // Options object doesn't fire in IE\n        }\n    }\n\n    // Go to a certain category\n    const swiperItems = document.querySelectorAll('.menu-category-list .swiper-slide')\n    for (let j in swiperItems) {\n        const swiperItem = swiperItems[j]\n        if (typeof swiperItem === 'object') {\n            swiperItem.addEventListener('click', function () {\n                const categoryId = this.dataset.category\n                if (categoryId) {\n                    let newTarget = null\n                    if (categoryId !== '0') { // popular products\n                        newTarget = document.getElementById(categoryId)\n                    }\n                    if (!newTarget) { // assumption c1icked on the popular dishes\n                        newTarget = document.querySelector('.menu-meals-group-populair')\n                        if (!newTarget) { // Still nothing, select the container to scroll up\n                            newTarget = document.querySelector('.menu-menucard')\n                        }\n                    }\n                    navigateToAnchor(newTarget)\n                    history.replaceState(null, null, $(this).attr('href'))\n                }\n            })\n        }\n    }\n\n    /**\n     * COMPONENT: COOKIE WALL\n     * It's an independent component, that's why we don't expose anything to global scope.\n     * @author DON'T POLLUTE GLOBAL SCOPE TEAM\n     */\n    window.dataLayer = window.dataLayer || []\n    function gtag () { dataLayer.push(arguments) }\n\n    let legacyCookieBannerLoaded = false\n    let lastLegacyCookieValue\n\n    const updateCookieFnLegacy = (newValue) =&gt; {\n\n        if (!legacyCookieBannerLoaded) {\n            lastLegacyCookieValue = newValue\n        }\n    }\n\n    let granularCookieBannerLoaded = false\n    let lastGranularCookieValue\n    const updateCookieFnGranular = (newValue) =&gt; {\n        if (!newValue) return\n        if (!granularCookieBannerLoaded) {\n            lastGranularCookieValue = newValue\n        }\n\n        const isPersonal = newValue === 'full'\n\n        gtag('consent', 'update', {\n          ad_user_data: isPersonal ? 'granted' : 'denied',\n          ad_personalization: isPersonal ? 'granted' : 'denied',\n          ad_storage: isPersonal ? 'granted' : 'denied',\n          analytics_storage: isPersonal ? 'granted' : 'denied'\n        })\n        window.dataLayer.push({ event: 'Pageview' })\n    }\n\n    /**\n     * COMPONENT: COOKIE SETTINGS\n     */\n    let legacyCookieSettingsIsLoaded = false\n    const updateLegacyCookieSettingsFn = (cookieConsent) =&gt; {\n        if (!legacyCookieSettingsIsLoaded) {\n            return // Wait until cookieSettings is loaded\n        }\n        const isPersonal = cookieConsent === 'full'\n        gtag('consent', 'update', {\n          ad_user_data: isPersonal ? 'granted' : 'denied',\n          ad_personalization: isPersonal ? 'granted' : 'denied',\n          ad_storage: isPersonal ? 'granted' : 'denied',\n          analytics_storage: isPersonal ? 'granted' : 'denied'\n        })\n        window.dataLayer.push({ event: 'Pageview' })\n    }\n\n    let granularCookieSeetingsIsLoaded = false\n    const updateGranularCookieSettingsFn = (cookieConsent) =&gt; {\n        if (!granularCookieSeetingsIsLoaded) {\n            return\n        }\n        const isPersonal = cookieConsent === 'full'\n        gtag('consent', 'update', {\n          ad_user_data: isPersonal ? 'granted' : 'denied',\n          ad_personalization: isPersonal ? 'granted' : 'denied',\n          ad_storage: isPersonal ? 'granted' : 'denied',\n          analytics_storage: isPersonal ? 'granted' : 'denied'\n        })\n        window.dataLayer.push({ event: 'Pageview' })\n    }\n\n    const $containerCookieSettings = document.querySelector('.js-container-cookie-settings')\n    if (\n        $containerCookieSettings &amp;&amp;\n        typeof _COOKIE_SETTINGS_I18N !== 'undefined'\n    ) {\n        /* eslint-disable no-new */\n        new CookieSettings({\n            $container: $containerCookieSettings,\n            i18n: _COOKIE_SETTINGS_I18N, // @see App/Layout/Page/Servicepages/CookieStatement.phtml\n            notifySuccess: Notify.notifySuccess,\n            updateCookieFn: updateLegacyCookieSettingsFn\n        })\n        legacyCookieSettingsIsLoaded = true\n    }\n\n    const $granularCookieConsentManageLink = document.querySelector('.js-manage-cookie-preferences')\n    let granularCookieSettingsPopup\n    if ($granularCookieConsentManageLink &amp;&amp;\n        typeof _COOKIE_SETTINGS_GRANULAR_I18N !== 'undefined') {\n        $granularCookieConsentManageLink.addEventListener('click', (event: Event) =&gt; {\n            event.preventDefault()\n\n            if (!granularCookieSettingsPopup) {\n                granularCookieSettingsPopup = new CookieSettingsGranular({\n                    classList: ['i-am-step-3'],\n                    // eslint-disable-next-line no-undef\n                    headerContent: `&lt;div class=\"js-header-content\"&gt;&lt;h2 class=\"cookie-consent-granular-modal-header\"&gt;${_COOKIE_SETTINGS_GRANULAR_I18N.MODAL_TITLE}&lt;/h2&gt;&lt;/div&gt;`,\n                    updateCookieFn: updateGranularCookieSettingsFn,\n                    subHeaderContents: _COOKIE_SETTINGS_GRANULAR_I18N.MODAL_CONTENT,\n                    buttons: {\n                        acceptAllText: _COOKIE_SETTINGS_GRANULAR_I18N.BUTTON_ACCEPT_ALL,\n                        onlySelectedText: _COOKIE_SETTINGS_GRANULAR_I18N.BUTTON_ONLY_SELECTED\n                    },\n                    consents: [\n                        {\n                            consentId: 103,\n                            consentCanBeAltered: false,\n                            consentGiven: true,\n                            consentDescription: _COOKIE_SETTINGS_GRANULAR_I18N.CONSENT_103_DESCRIPTION,\n                            consentTitle: _COOKIE_SETTINGS_GRANULAR_I18N.CONSENT_103_TITLE\n                        },\n                        {\n                            consentId: 104,\n                            consentTitle: _COOKIE_SETTINGS_GRANULAR_I18N.CONSENT_104_TITLE,\n                            consentCanBeAltered: true,\n                            consentDescription: _COOKIE_SETTINGS_GRANULAR_I18N.CONSENT_104_DESCRIPTION\n                        },\n                        {\n                            consentId: 105,\n                            consentTitle: _COOKIE_SETTINGS_GRANULAR_I18N.CONSENT_105_TITLE,\n                            consentCanBeAltered: true,\n                            consentDescription: _COOKIE_SETTINGS_GRANULAR_I18N.CONSENT_105_DESCRIPTION\n                        },\n                        {\n                            consentId: 106,\n                            consentTitle: _COOKIE_SETTINGS_GRANULAR_I18N.CONSENT_106_TITLE,\n                            consentCanBeAltered: true,\n                            consentDescription: _COOKIE_SETTINGS_GRANULAR_I18N.CONSENT_106_DESCRIPTION\n                        }\n                    ]\n                })\n            }\n\n            if (granularCookieSettingsPopup) {\n                granularCookieSeetingsIsLoaded = true\n                granularCookieSettingsPopup.render()\n            }\n        })\n    }\n\n    /**\n     * COMPONENT: COOKIE WALL\n     * It's an independent component, that's why we don't expose anything to global scope.\n     * @author DON'T POLLUTE GLOBAL SCOPE TEAM\n     */\n\n        // Maybe make this a featuretoggle in the future, but please make sure to test all domains before rolling out to all domains\n    const isDenmark = site.cc === '7'\n\n    if (!isDenmark) {\n        const $containerCookieWall = document.querySelector('.cc-banner')\n\n        if ($containerCookieWall) {\n            const cookieWall = new CookieWall({\n                $container: $containerCookieWall,\n                contentText: $containerCookieWall.getAttribute('data-content-text'),\n                url: $containerCookieWall.getAttribute('data-url'),\n                urlText: $containerCookieWall.getAttribute('data-url-text'),\n                buttonText: $containerCookieWall.getAttribute('data-button-text'),\n                hideLinkAfterText: true,\n                buttonEssentialPackage: $containerCookieWall.getAttribute('data-button-essential-package'),\n                buttonTextAria: $containerCookieWall.getAttribute('data-button-text-aria'),\n                buttonEssentialPackageAria: $containerCookieWall.getAttribute('data-button-essential-package-aria'),\n                updateCookieFn: updateCookieFnLegacy\n            })\n            window.app.components.cookieWall = cookieWall\n            legacyCookieBannerLoaded = true\n        }\n    } else {\n        const $containerCookieWallGranular = document.querySelector('.cc-banner-granular')\n        let primaryTitle = $containerCookieWallGranular &amp;&amp; $containerCookieWallGranular.getAttribute('data-primary-preferences-modal-title')\n            ? $containerCookieWallGranular.getAttribute('data-primary-preferences-modal-title') : ''\n        let secondaryTitle = $containerCookieWallGranular &amp;&amp; $containerCookieWallGranular.getAttribute('data-secondary-preferences-modal-title')\n            ? $containerCookieWallGranular.getAttribute('data-secondary-preferences-modal-title') : ''\n        // Weird fix for flow\n        if (!primaryTitle) {\n            primaryTitle = ''\n        }\n\n        if (!secondaryTitle) {\n            secondaryTitle = ''\n        }\n\n        if ($containerCookieWallGranular) {\n            const cookieWallGranular = new CookieWallGranular({\n                $container: $containerCookieWallGranular,\n                selectedLanguage: $containerCookieWallGranular.getAttribute('data-current-language'),\n                languageSettings: {\n                    primaryLanguage: {\n                        languageKey: $containerCookieWallGranular.getAttribute('data-primary-languagekey'),\n                        buttonText: $containerCookieWallGranular.getAttribute('data-primary-banner-button-accept-all'),\n                        contentText: $containerCookieWallGranular.getAttribute('data-primary-banner-content'),\n                        buttonNecessaryPackage: $containerCookieWallGranular.getAttribute('data-primary-banner-button-accept-necessary'),\n                        buttonNecessaryPackageAria: $containerCookieWallGranular.getAttribute('data-primary-banner-button-accept-necessary'),\n                        buttonTextAria: $containerCookieWallGranular.getAttribute('data-primary-banner-button-accept-all'),\n                        bannerTitle: $containerCookieWallGranular.getAttribute('data-primary-banner-title'),\n                        settingsModal: {\n                            headerTitle: `&lt;div class=\"js-header-content\"&gt;&lt;h2 class=\"cookie-consent-granular-modal-header\"&gt;${primaryTitle}&lt;/h2&gt;&lt;/div&gt;`,\n                            selector: 'js-granular-consent-popup',\n                            mainSelector: 'js-consent-popup-main',\n                            headerSelector: 'js-consent-popup-header',\n                            subHeaderContents: $containerCookieWallGranular.getAttribute('data-primary-preferences-modal-heading'),\n                            buttonAcceptAll: $containerCookieWallGranular.getAttribute('data-primary-preferences-modal-buttons-accept-all'),\n                            buttonOnlySelected: $containerCookieWallGranular.getAttribute('data-primary-preferences-modal-buttons-only-selected'),\n                            consents: [\n                                {\n                                    consentId: 103,\n                                    consentTitle: $containerCookieWallGranular.getAttribute('data-primary-consent-103-title'),\n                                    consentCanBeAltered: false,\n                                    consentGiven: true,\n                                    consentDescription: $containerCookieWallGranular.getAttribute('data-primary-consent-103-description')\n                                },\n                                {\n                                    consentId: 104,\n                                    consentTitle: $containerCookieWallGranular.getAttribute('data-primary-consent-104-title'),\n                                    consentCanBeAltered: true,\n                                    consentGiven: false,\n                                    consentDescription: $containerCookieWallGranular.getAttribute('data-primary-consent-104-description')\n                                },\n                                {\n                                    consentId: 105,\n                                    consentTitle: $containerCookieWallGranular.getAttribute('data-primary-consent-105-title'),\n                                    consentCanBeAltered: true,\n                                    consentGiven: false,\n                                    consentDescription: $containerCookieWallGranular.getAttribute('data-primary-consent-105-description')\n                                },\n                                {\n                                    consentId: 106,\n                                    consentTitle: $containerCookieWallGranular.getAttribute('data-primary-consent-106-title'),\n                                    consentCanBeAltered: true,\n                                    consentGiven: false,\n                                    consentDescription: $containerCookieWallGranular.getAttribute('data-primary-consent-106-description')\n                                }\n                            ]\n                        }\n                    },\n                    secondaryLanguage: {\n                        languageKey: $containerCookieWallGranular.getAttribute('data-secondary-languagekey'),\n                        buttonText: $containerCookieWallGranular.getAttribute('data-secondary-banner-button-accept-all'),\n                        contentText: $containerCookieWallGranular.getAttribute('data-secondary-banner-content'),\n                        buttonNecessaryPackage: $containerCookieWallGranular.getAttribute('data-secondary-banner-button-accept-necessary'),\n                        buttonNecessaryPackageAria: $containerCookieWallGranular.getAttribute('data-secondary-banner-button-accept-necessary'),\n                        buttonTextAria: $containerCookieWallGranular.getAttribute('data-secondary-banner-button-accept-all'),\n                        bannerTitle: $containerCookieWallGranular.getAttribute('data-secondary-banner-title'),\n                        settingsModal: {\n                            headerTitle: `&lt;div class=\"js-header-content\"&gt;&lt;h2 class=\"cookie-consent-granular-modal-header\"&gt;${secondaryTitle}&lt;/h2&gt;&lt;/div&gt;`,\n                            selector: 'js-granular-consent-popup',\n                            mainSelector: 'js-consent-popup-main',\n                            headerSelector: 'js-consent-popup-header',\n                            subHeaderContents: $containerCookieWallGranular.getAttribute('data-secondary-preferences-modal-heading'),\n                            buttonAcceptAll: $containerCookieWallGranular.getAttribute('data-secondary-preferences-modal-buttons-accept-all'),\n                            buttonOnlySelected: $containerCookieWallGranular.getAttribute('data-secondary-preferences-modal-buttons-only-selected'),\n                            consents: [\n                                {\n                                    consentId: 103,\n                                    consentTitle: $containerCookieWallGranular.getAttribute('data-secondary-consent-103-title'),\n                                    consentCanBeAltered: false,\n                                    consentGiven: true,\n                                    consentDescription: $containerCookieWallGranular.getAttribute('data-secondary-consent-103-description')\n                                },\n                                {\n                                    consentId: 104,\n                                    consentTitle: $containerCookieWallGranular.getAttribute('data-secondary-consent-104-title'),\n                                    consentCanBeAltered: true,\n                                    consentGiven: false,\n                                    consentDescription: $containerCookieWallGranular.getAttribute('data-secondary-consent-104-description')\n                                },\n                                {\n                                    consentId: 105,\n                                    consentTitle: $containerCookieWallGranular.getAttribute('data-secondary-consent-105-title'),\n                                    consentCanBeAltered: true,\n                                    consentGiven: false,\n                                    consentDescription: $containerCookieWallGranular.getAttribute('data-secondary-consent-105-description')\n                                },\n                                {\n                                    consentId: 106,\n                                    consentTitle: $containerCookieWallGranular.getAttribute('data-secondary-consent-106-title'),\n                                    consentCanBeAltered: true,\n                                    consentGiven: false,\n                                    consentDescription: $containerCookieWallGranular.getAttribute('data-secondary-consent-106-description')\n                                }\n                            ]\n                        }\n                    }\n                },\n                updateCookieFn: updateCookieFnGranular\n            })\n            window.app.components.cookieWallGranular = cookieWallGranular\n            granularCookieBannerLoaded = true\n        }\n    }\n\n    const btnElement = document.querySelector('.js-btn-ok')\n    if (btnElement instanceof HTMLElement) {\n      btnElement.addEventListener('click', function () {\n        const jetfm = new JetFm();\n        jetfm.init();\n      })\n    }\n})\n","import KeyCode from './../enums/keyCode'\nimport PropTypes from \"prop-types\";\n\n// @TODO: Sort alphabetically\n\n\n/**\n * A wrapper for checkPropTypes method from 'prop-types' package. Originally it logs errors on console. But in class\n * definitions we'd like to throw errors instead of logging. To not change 3rd party code, we temporarily overwrite\n * console.error(). If checkPropTypes return a value one day, we can remove this wrapper.\n *\n * @see https://github.com/facebook/prop-types/issues/169\n *\n * Original docs are below.\n *\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nexport function checkPropTypes (typeSpecs, values, location, componentName, getStack = undefined) {\n  const t = console.error\n  console.error = msg =&gt; { throw new Error(msg) }\n  // PropTypes.checkPropTypes() only console.error's a given message once. To reset the error warning cache in tests,\n  // call PropTypes.resetWarningCache()\n  PropTypes.resetWarningCache()\n  PropTypes.checkPropTypes(typeSpecs, values, location, componentName, getStack)\n  console.error = t\n}\n\n\nexport function isObjEmpty (obj) {\n  return Object.keys(obj).length === 0 &amp;&amp; obj.constructor === Object\n}\n\nexport function getMobileOS () {\n  const userAgent = navigator.userAgent || navigator.vendor || window.opera\n  return {\n    isAndroid: () =&gt; /android/i.test(userAgent),\n    isIOS: () =&gt; /iPad|iPhone|iPod/.test(userAgent) &amp;&amp; !window.MSStream // iOS detection from: http://stackoverflow.com/a/9039885/177710\n  }\n}\n\n/**\n * Throw a TypeError for a given type on a given subject.\n *\n * @param {string} subject\n * @param {string} expected\n * @param {*} actual\n */\nexport function throwTypeError (subject, expected, actual) {\n  const type = ({}).toString.call(actual).split(' ')[1].slice(0, -1)\n  throw new TypeError(`Given ${subject} must be of type \"${expected}\", \"${type}\" given`)\n}\n\n/**\n * Validate that all given keys are present in a given object\n *\n * @param {Object} obj\n * @param {Array} requiredKeys\n */\nexport function validateObjectKeys (obj, requiredKeys) {\n  const missingKeys = requiredKeys.filter(item =&gt; !obj.hasOwnProperty(item))\n\n  if (missingKeys.length) {\n    throw new Error(`Missing required properties: [\"${missingKeys.join('\" ,\"')}\"]`)\n  }\n}\n\n/**\n * Push a certain value to the user's clipboard.\n *\n * This is done by adding an invisible textarea, copying the value, removing the textarea and then re-select any\n * previous selections the user might have had.\n *\n * @param value\n * @param element\n */\nexport function copyToClipboard (value, element) {\n  const el = document.createElement('textarea')\n  el.value = value\n  el.setAttribute('readonly', '')\n  el.style.position = 'absolute'\n  el.style.left = '-99999px'\n  let addToElement = document.body\n  // Prevents scrolling in IE\n  if (element &amp;&amp; typeof element.appendChild === 'function') {\n    addToElement = element\n  }\n  addToElement.appendChild(el)\n  const selected =\n    document.getSelection().rangeCount &gt; 0\n      ? document.getSelection().getRangeAt(0)\n      : false\n\n  if (getMobileOS().isIOS()) {\n    // on iOS we need to take a different approach selecting the text\n    // https://gist.github.com/rproenca/64781c6a1329b48a455b645d361a9aa3\n    el.setSelectionRange(0, 999999)\n  } else {\n    el.select()\n  }\n\n  document.execCommand('copy')\n  addToElement.removeChild(el)\n  if (selected) {\n    document.getSelection().removeAllRanges()\n    document.getSelection().addRange(selected)\n  }\n}\n\n/**\n * Do a callback function after the DOM is ready.\n * @param fn\n */\nexport function ready (fn) {\n  if (document.readyState !== 'loading') {\n    fn()\n  } else {\n    document.addEventListener('DOMContentLoaded', fn)\n  }\n}\n\n/**\n * Do a callback function after the Window is loaded.\n * @param fn\n */\nexport function onWindowLoad (fn) {\n  window.addEventListener('load', fn)\n}\n\n/**\n * While using tabs in a modal the focus might go back to the elements outside\n * This function keeps the focus inside the modal\n * @param element\n */\nexport function keepFocusWithinModal ({ modalElement }) {\n  if (modalElement.querySelector('.not-focus-modal')) {\n    return\n  }\n  let focusableElements = Array.from(modalElement.querySelectorAll(`\n    a[href]:not([disabled]),\n    button:not([disabled]),\n    textarea:not([disabled]),\n    input[type=\"text\"]:not([disabled]),\n    input[type=\"radio\"]:not([disabled]),\n    input[type=\"checkbox\"]:not([disabled]),\n    select:not([disabled]),\n    [tabindex]\n  `)).filter(element =&gt; {\n    return element.offsetWidth &gt; 0 &amp;&amp; element.offsetHeight &gt; 0\n  })\n\n  focusableElements = focusableElements.filter(element =&gt; {\n    // Check if element is visible\n    if (element.offsetWidth &gt; 0 &amp;&amp; element.offsetHeight &gt; 0) {\n      return true\n    }\n  })\n\n  const lastFocusableElement = focusableElements[focusableElements.length - 1]\n  const firstFocusableElement = focusableElements[0]\n\n  lastFocusableElement.addEventListener('keydown', (event) =&gt; {\n    if (event.keyCode === KeyCode.TAB &amp;&amp; !event.shiftKey) {\n      event.preventDefault()\n      event.stopPropagation()\n      firstFocusableElement.focus()\n    }\n  })\n\n  firstFocusableElement.addEventListener('keydown', (event) =&gt; {\n    if (event.keyCode === KeyCode.TAB &amp;&amp; event.shiftKey) {\n      event.preventDefault()\n      event.stopPropagation()\n      lastFocusableElement.focus()\n    }\n  })\n\n  firstFocusableElement.focus()\n}\n\nexport function generateGuid () {\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) =&gt; {\n    const r = Math.random() * 16 | 0; const v = c === 'x' ? r : (r &amp; 0x3 | 0x8)\n    return v.toString(16)\n  })\n}\n\nexport function isStringJSON (str) {\n  try {\n    JSON.parse(str)\n  } catch (e) {\n    console.error('FAILED: isStringJSON()')\n    return false\n  }\n  return true\n}\n\n/**\n * Step 1: Feed me array of selectors.\n * Step 2: Destructure.\n * Step 3: ???\n * Step 4: Profit!\n *\n * @param selectors\n * @returns array\n */\nexport const queryMultipleSelectors = (selectors) =&gt; {\n  return selectors.map(selector =&gt; document.querySelector(selector))\n}\n\n/**\n * Get the value of a cookie by name\n * @param name\n */\nexport const getCookieByName = (name) =&gt; {\n  if (!name || typeof name !== 'string') {\n      return null;\n  }\n\n  try {\n      const foundCookie = document.cookie\n          .split(';')\n          .map(cookie =&gt; cookie.trim())\n          .find(cookie =&gt; cookie.startsWith(`${name}=`));\n          \n      return foundCookie ? foundCookie.substring(name.length + 1) : null;\n  } catch(error) {\n    console.log('error reading cookie', error)\n      return null;\n  }\n};\n","\nimport createFeatureManagementInstance from '@justeat/feature-management';\nimport axios from \"axios\";\n\nconst sixtySeconds = 60 * 1000;\nconst fiveSeconds = 5000;\n\nclass JetFmLog {\n  info(message, tags, payload = {}) {\n    console.info(\"[jetfm]\", message, tags, payload);\n  }\n\n  warn(message, tags, payload = {}) {\n    console.warn(\"[jetfm]\", message, tags, payload);\n  }\n\n  error(message, exception, tags, payload = {}) {\n    console.error(\"[jetfm]\", message, exception, tags, payload);\n  }\n}\n\nexport class JetFm {\n  constructor() {\n    this.service = null;\n  }\n\n\n  init() {\n    const config = \n    {\n      keyPrefix: 'jet-minisites',\n      cdn: {\n        host: 'https://features.api.justeattakeaway.com',\n        scope: 'jet-minisites',\n        environment: process.env.NODE_ENV || 'development',\n        key: '',\n        poll: true,\n        pollInterval: sixtySeconds, // default value in docs\n      },\n      contextGetter: () =&gt; {        \n        return { appVersion: '1.2.3', tenant: 'all' };\n      },\n      onTrack: (key, variant) =&gt; {\n        window.dataLayer = window.dataLayer || [];\n        window.dataLayer.push({\n          event: 'experiment_active',\n          tms_data: {\n              eventData: {\n                  experiment_variant: variant,\n                  experiment_key: key,\n              }\n          }\n      })\n      },\n    };\n\n    config.log = new JetFmLog();\n    const httpClient = axios.create({\n      timeout: fiveSeconds\n  });\n\nconst service = createFeatureManagementInstance(config, httpClient);\nconst self = this;\nservice.loadFromCdn()\n    .then(() =&gt; {\n        self.service = service;        \n        self.service.getBooleanValue(\"feature_show_ordermodule\");\n        return self;\n    })\n    .catch(error =&gt; {\n        config.log.error('Error loading from JETFM', error);\n    });\n  }\n}","/**\n * MediaQuery Services\n *\n * @author Roy Spekreijse &lt;roy.spekreijse@takeaway.com&gt;\n *\n */\n\n// KEEP THESE BREAKPOINTS UPTO DATE with the SASS breakpoints\n// See App\\Source\\Sass\\config\\_config.scss\nconst breakPoints = {\n  'mobile': 320,\n  'tablet-portrait': 570,\n  'tablet-landscape': 1004,\n  'desktop': 1280\n}\nexport default class MediaQueryService {\n  /**\n  * @param size1 {string}\n  * @param size2 {optional string}\n  * @returns {string}\n  * sample app.mediaQueryService.respondTo('&gt;=tablet-landscape', '&lt;desktop')\n  */\n  respondTo (size1, size2) {\n    const sizes = []\n    if (size1) {\n      sizes.push(size1)\n    }\n    if (size2) {\n      sizes.push(size2)\n    }\n    if (sizes.length) {\n      return sizes.every(size =&gt; {\n        const comparer = size.replace(/[^&lt;&gt;=]/g, '')\n        let breakpoint = breakPoints[size.replace(comparer, '')]\n        if (!breakpoint) {\n          throw new Error('Unknown breakpoint')\n        }\n        switch (comparer) {\n          case '&lt;':\n            return window.innerWidth &lt;= (breakpoint - 1)\n          case '&lt;=':\n            return window.innerWidth &lt;= breakpoint\n          case '&gt;':\n            return window.innerWidth &gt;= (breakpoint + 1)\n          case '&gt;=':\n            return window.innerWidth &gt;= breakpoint\n          default:\n            throw new Error('Unknown comparison')\n        }\n      })\n    }\n  }\n}\n"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvQGp1c3RlYXQvZmVhdHVyZS1tYW5hZ2VtZW50L2Rpc3QvZmVhdHVyZS1tYW5hZ2VtZW50LnVtZC5qcyIsIm5vZGVfbW9kdWxlcy9AdGFrZWF3YXkvdWktdmFuaWxsYS9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9jcmVhdGVFcnJvci5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZW5oYW5jZUVycm9yLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIsIm5vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzIiwibm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzIiwibm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanMiLCJub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIm5vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9oYXMuanMiLCJub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvanMvc3dpcGVyLmpzIiwic3JjL2pzL2NvbXBvbmVudHMvY2F0ZWdvcnlCYXJDb21wb25lbnQuanMiLCJzcmMvanMvY29tcG9uZW50cy9raXRjaGVuVHlwZUNvbXBvbmVudC5qcyIsInNyYy9qcy9lbnVtcy9rZXlDb2RlLmpzIiwic3JjL2pzL2luZGV4LmpzIiwic3JjL2pzL2xpYi9oZWxwZXJzLmpzIiwic3JjL2pzL3NlcnZpY2VzL2ZlYXR1cmVtYW5hZ2VtZW50LmpzIiwic3JjL2pzL3NlcnZpY2VzL21lZGlhcXVlcnkuc2VydmljZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUNBQTtBQUNBOzs7O0FDREE7QUFDQTtBQUNBOztBQ0ZBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNqR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDeExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNqRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNsbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTs7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3JMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O3FqQkN2OFFBO0FBQ0E7Ozs7QUFPQTs7O0FBSEE7Ozs7QUFDQTs7QUFDQTs7QUFFQTs7Ozs7Ozs7OztBQUNBO0FBQ0E7O0lBRXFCLFc7QUF3Q25CLHVCQUFhLElBQWIsRUFBbUI7QUFBQTs7QUFBQTs7QUFBQSxTQXZDbkIsY0F1Q21CLEdBdkNGO0FBQ2YsZ0JBQVUseUJBREs7QUFFZixZQUFNLHdCQUZTO0FBR2YsdUJBQWlCLG9DQUhGO0FBSWYseUJBQW1CLDZCQUpKO0FBS2Ysa0JBQVksMkJBTEc7QUFNZixpQkFBVywwQkFOSTtBQU9mLGFBQU8sY0FQUTtBQVFmLG9CQUFjLDZCQVJDO0FBU2YsbUJBQWEsZ0NBVEU7QUFVZiw2QkFBdUIsNEJBVlI7QUFXZixzQkFBZ0Isd0JBWEQ7QUFZZix1QkFBaUIsbUJBWkY7QUFhZixxQkFBZSw4QkFiQTtBQWNmLDRCQUFzQix1QkFkUDtBQWVmLGdDQUEwQjtBQWZYLEtBdUNFO0FBQUEsU0FyQm5CLGlCQXFCbUIsR0FyQkMsU0FxQkQ7QUFBQSxTQWpCbkIsVUFpQm1CLEdBakJOO0FBQ1gsY0FBUSxvQkFBVSxNQUFWLENBQWlCO0FBRGQsS0FpQk07QUFBQSxTQWJuQixNQWFtQixHQWJWO0FBQ1Asb0JBQWMsU0FEUDtBQUVQLDZCQUF1QixDQUZoQjtBQUdQLHFCQUFlLEVBSFI7QUFJUCx5QkFBbUIsRUFKWjtBQUtQLG9CQUFjLFNBTFA7QUFNUCw2QkFBdUIsU0FOaEI7QUFPUCxpQ0FBMkIsU0FQcEI7QUFRUCxvQkFBYztBQVJQLEtBYVU7O0FBQUEsU0FLbkIsSUFMbUIsR0FLWixZQUFNO0FBQ1gsWUFBSyxrQkFBTCxHQUEwQixJQUFJLG9CQUFKLEVBQTFCOztBQUVBLFVBQU0sY0FBYyxTQUFTLGFBQVQsT0FBMkIsTUFBSyxjQUFMLENBQW9CLGNBQS9DLENBQXBCOztBQUVBLFVBQUksV0FBSixFQUFpQjtBQUNmLGNBQUssYUFBTCxHQUFxQixLQUFLLEtBQUwsQ0FBVyxZQUFZLE9BQVosQ0FBb0IsWUFBcEIsSUFBb0MsSUFBL0MsQ0FBckI7QUFDQSxjQUFLLE1BQUwsQ0FBWSxhQUFaLEdBQTRCLEtBQUssS0FBTCxDQUFXLFlBQVksT0FBWixDQUFvQixhQUFwQixJQUFxQyxJQUFoRCxDQUE1QjtBQUNBLGNBQUssTUFBTCxDQUFZLFlBQVosR0FBMkIsWUFBWSxPQUFaLENBQW9CLFlBQXBCLElBQW9DLEVBQS9EO0FBQ0E7QUFDQSxZQUFJLENBQUMsYUFBYSxNQUFLLGlCQUFsQixDQUFMLEVBQTJDO0FBQ3pDLGNBQU0sV0FBVyxLQUFLLEtBQUwsQ0FBVyxZQUFZLE9BQVosQ0FBb0IsZ0JBQXBCLFFBQVgsRUFBeUQsUUFBekQsSUFBcUUsRUFBdEY7QUFDQSxnQkFBSyxNQUFMLENBQVkseUJBQVosR0FBd0MsTUFBSyxpQkFBTCxDQUF1QixRQUF2QixDQUF4QztBQUNBLGNBQUksTUFBSyxNQUFMLENBQVkseUJBQVosS0FBMEMsSUFBOUMsRUFBb0Q7QUFDbEQsMEJBQWMsTUFBSyxpQkFBbkIsRUFBc0MsTUFBSyxNQUFMLENBQVkseUJBQVosQ0FBc0MsVUFBNUU7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQ7QUFDQTtBQUNBLFVBQUksTUFBSyxLQUFMLENBQVcsTUFBWCxDQUFrQixVQUFsQixDQUE2QixNQUFqQyxFQUF5QztBQUN2QztBQUNBLGNBQUssS0FBTCxDQUFXLE1BQVgsQ0FBa0IsVUFBbEIsQ0FBNkIsT0FBN0IsQ0FBcUMsZUFBckM7QUFDQTtBQUNBLGNBQUssS0FBTCxDQUFXLE1BQVgsQ0FBa0IsVUFBbEIsQ0FBNkIsTUFBN0IsQ0FBb0MsZ0JBQXBDLENBQ0UsT0FERixFQUVFLHdCQUFnQjtBQUNkLHVCQUFhLGNBQWI7QUFDQSxnQkFBSyxZQUFMO0FBQ0QsU0FMSDtBQU9EOztBQUVEO0FBQ0E7QUFDQSxVQUFJLE1BQUssS0FBTCxDQUFXLE1BQVgsQ0FBa0IsVUFBbEIsQ0FBNkIsTUFBakMsRUFBeUM7QUFDdkM7QUFDQSxjQUFLLEtBQUwsQ0FBVyxNQUFYLENBQWtCLFVBQWxCLENBQTZCLE9BQTdCLENBQXFDLFdBQXJDO0FBQ0E7QUFDQSxjQUFLLEtBQUwsQ0FBVyxNQUFYLENBQWtCLFVBQWxCLENBQTZCLE1BQTdCLENBQW9DLGdCQUFwQyxDQUNFLE9BREYsRUFFRSx3QkFBZ0I7QUFDZCx1QkFBYSxjQUFiO0FBQ0EsZ0JBQUssVUFBTDtBQUNELFNBTEg7QUFPRDs7QUFFRCxZQUFLLEtBQUwsQ0FBVyxNQUFYLENBQWtCLEVBQWxCLENBQXFCLFFBQXJCLEVBQStCLFlBQU07QUFDbkMsY0FBSyxNQUFMO0FBQ0QsT0FGRDs7QUFJQSxZQUFLLE1BQUw7O0FBRUE7QUFDQSxpQ0FBYTtBQUFBLGVBQU0sTUFBSyxLQUFMLENBQVcsTUFBWCxDQUFrQixNQUFsQixDQUF5QixhQUF6QixFQUFOO0FBQUEsT0FBYjtBQUNELEtBOURrQjs7QUFBQSxTQTRFbkIscUJBNUVtQixHQTRFSyxZQUFNO0FBQzVCLFVBQUkscUJBQXFCLENBQXpCO0FBQ0EsVUFBSSxNQUFLLGtCQUFMLENBQXdCLFNBQXhCLENBQWtDLFdBQWxDLENBQUosRUFBb0Q7QUFDbEQsNkJBQXFCLEVBQXJCO0FBQ0QsT0FGRCxNQUVPLElBQUksTUFBSyxrQkFBTCxDQUF3QixTQUF4QixDQUFrQyxtQkFBbEMsQ0FBSixFQUE0RDtBQUNqRSw2QkFBcUIsQ0FBckI7QUFDRDtBQUNELGFBQU8sa0JBQVA7QUFDRCxLQXBGa0I7O0FBQUEsU0FzRm5CLE1BdEZtQixHQXNGVixZQUFNO0FBQ2IsVUFBTSx3QkFBd0IsTUFBSyxxQkFBTCxFQUE5QjtBQUNBLFVBQU0sYUFBYSxNQUFLLE1BQUwsQ0FBWSxhQUFaLENBQTBCLEtBQTFCLENBQWdDLENBQWhDLEVBQW1DLHFCQUFuQyxDQUFuQjtBQUNBLFVBQU0sNEJBQTRCLE1BQUssTUFBTCxDQUFZLHlCQUE5Qzs7QUFFQTtBQUNBLFVBQ0UsMEJBQTBCLE1BQUssTUFBTCxDQUFZLHFCQUF0QyxJQUNBLDhCQUE4QixTQUZoQyxFQUdFO0FBQ0E7QUFDQSxjQUFLLEtBQUwsQ0FBVyxNQUFYLENBQWtCLEdBQWxCLENBQXNCLENBQXRCLEVBQXlCLFNBQXpCLENBQW1DLE1BQW5DLENBQTBDLFNBQTFDOztBQUVBO0FBQ0EsWUFBSSwwQkFBMEIsTUFBSyxNQUFMLENBQVkscUJBQTFDLEVBQWlFO0FBQy9ELGdCQUFLLE1BQUwsQ0FBWSxxQkFBWixHQUFvQyxxQkFBcEM7QUFDQSxnQkFBSyxLQUFMLENBQVcsTUFBWCxDQUFrQixlQUFsQjs7QUFFQSxnQkFBSyxNQUFMLENBQVksaUJBQVosR0FBZ0MsRUFBaEM7O0FBRUEsZ0JBQUssa0JBQUw7O0FBRUEsZ0JBQUssb0JBQUwsQ0FBMEIsVUFBMUI7QUFDRDs7QUFFRDtBQUNBLFlBQUksOEJBQThCLFNBQWxDLEVBQTZDO0FBQzNDLGdCQUFLLDZDQUFMLENBQW1ELHlCQUFuRDtBQUNELFNBRkQsTUFFTztBQUNMO0FBQ0EsZ0JBQUssZUFBTDtBQUNEOztBQUVEO0FBQ0EsWUFBSSxNQUFLLE1BQUwsQ0FBWSxhQUFaLENBQTBCLE1BQTFCLEdBQW1DLHFCQUF2QyxFQUE4RDtBQUM1RCxnQkFBSyxpQkFBTDtBQUNEOztBQUVEO0FBQ0EsY0FBSyxLQUFMLENBQVcsTUFBWCxDQUFrQixHQUFsQixDQUFzQixDQUF0QixFQUF5QixTQUF6QixDQUFtQyxHQUFuQyxDQUF1QyxTQUF2Qzs7QUFFQSxjQUFLLE1BQUw7QUFDRDs7QUFFRCxZQUFLLG9CQUFMOztBQUVBLFlBQUssb0JBQUw7QUFDRCxLQXJJa0I7O0FBQUEsU0F3UG5CLGVBeFBtQixHQXdQRDtBQUFBLDZDQUVELE1BQUssaUJBRkosa0lBUVYsTUFBSyxjQUFMLENBQW9CLEtBUlYsa0JBU1YsTUFBSyxjQUFMLENBQW9CLFVBVFYsa0JBVVYsTUFBSyxjQUFMLENBQW9CLGFBVlYsK0JBWU4sTUFBSyxNQUFMLENBQVksWUFaTixvREFhdUIsTUFBSyxhQUFMLENBQW1CLGFBYjFDO0FBQUEsS0F4UEM7O0FBQUEsU0EyUW5CLG9CQTNRbUIsR0EyUUk7QUFBQSxVQUFHLFFBQUgsUUFBRyxRQUFIO0FBQUEsNkNBRU4sTUFBSyxpQkFGQyw2QkFHTCxTQUFTLFVBSEosNEJBSU4sU0FBUyxJQUpILDRFQVFmLE1BQUssY0FBTCxDQUFvQixLQVJMLGtCQVNmLE1BQUssY0FBTCxDQUFvQixRQVRMLGtCQVVmLE1BQUssY0FBTCxDQUFvQixXQVZMLCtCQVlYLFNBQVMsSUFaRSxzQkFhWixTQUFTLE9BYkcsNERBZW1CLFNBQVMsWUFmNUI7QUFBQSxLQTNRSjs7QUFBQSxTQWlTbkIsY0FqU21CLEdBaVNGO0FBQUEsbURBR1QsTUFBSyxjQUFMLENBQW9CLEtBSFgsa0JBSVQsTUFBSyxjQUFMLENBQW9CLFNBSlgsa0JBS1QsTUFBSyxjQUFMLENBQW9CLFlBTFgsOEJBT04sTUFBSyxhQUFMLENBQW1CLFlBUGIsNERBU3lCLE1BQUssYUFBTCxDQUFtQixZQVQ1QztBQUFBLEtBalNFOztBQUFBLFNBaVRuQixXQWpUbUIsR0FpVEwsWUFBTTtBQUNsQixVQUFJLFlBQVksTUFBSyxLQUFMLENBQVcsTUFBWCxDQUFrQixXQUFsQixHQUFnQyxDQUFoRDtBQUNBLFVBQUksYUFBYSxNQUFLLEtBQUwsQ0FBVyxNQUFYLENBQWtCLE1BQWxCLENBQXlCLE1BQTFDLEVBQWtEO0FBQ2hELGNBQUssS0FBTCxDQUFXLE1BQVgsQ0FBa0IsT0FBbEIsQ0FBMEIsU0FBMUI7QUFDRCxPQUZELE1BRU87QUFDTCxjQUFLLFVBQUw7QUFDRDtBQUNGLEtBeFRrQjs7QUFBQSxTQTZUbkIsZUE3VG1CLEdBNlRELFlBQU07QUFDdEIsVUFBSSxnQkFBZ0IsTUFBSyxLQUFMLENBQVcsTUFBWCxDQUFrQixXQUFsQixHQUFnQyxDQUFwRDtBQUNBLFVBQUksaUJBQWlCLENBQXJCLEVBQXdCO0FBQ3RCLGNBQUssS0FBTCxDQUFXLE1BQVgsQ0FBa0IsT0FBbEIsQ0FBMEIsYUFBMUI7QUFDRCxPQUZELE1BRU87QUFDTCxjQUFLLFlBQUw7QUFDRDtBQUNGLEtBcFVrQjs7QUFBQSxTQXlVbkIsWUF6VW1CLEdBeVVKLFlBQU07QUFDbkIsWUFBSyxLQUFMLENBQVcsTUFBWCxDQUFrQixPQUFsQixDQUEwQixDQUExQjtBQUNELEtBM1VrQjs7QUFBQSxTQWdWbkIsVUFoVm1CLEdBZ1ZOLFlBQU07QUFDakIsWUFBSyxLQUFMLENBQVcsTUFBWCxDQUFrQixPQUFsQixDQUEwQixNQUFLLEtBQUwsQ0FBVyxNQUFYLENBQWtCLE1BQWxCLENBQXlCLE1BQW5EO0FBQ0QsS0FsVmtCOztBQUFBLFNBb1ZuQixvQkFwVm1CLEdBb1ZJLFlBQU07QUFDM0IsVUFBTSxrQkFBa0IsNkJBQ25CLFNBQVMsZ0JBQVQsT0FBOEIsTUFBSyxjQUFMLENBQW9CLGNBQWxELFVBQXFFLE1BQUssY0FBTCxDQUFvQixLQUF6RixDQURtQixHQUV0QixTQUZzQixDQUVaLFVBQUMsUUFBRDtBQUFBLGVBQWMsU0FBUyxTQUFULENBQW1CLFFBQW5CLE1BQStCLE1BQUssY0FBTCxDQUFvQixZQUFuRCxDQUFkO0FBQUEsT0FGWSxDQUF4Qjs7QUFJQSxVQUFJLGtCQUFrQixDQUF0QixFQUF5QjtBQUN2QixjQUFLLEtBQUwsQ0FBVyxNQUFYLENBQWtCLFdBQWxCLENBQThCLGVBQTlCO0FBQ0Q7QUFDRixLQTVWa0I7O0FBQUEsU0E4Vm5CLGtCQTlWbUIsR0E4VkUsWUFBTTtBQUN6QixVQUFNLG9CQUFvQiw2QkFDckIsU0FBUyxnQkFBVCxPQUE4QixNQUFLLGNBQUwsQ0FBb0IsY0FBbEQsVUFBcUUsTUFBSyxjQUFMLENBQW9CLEtBQXpGLGNBQXVHLE1BQUssY0FBTCxDQUFvQixZQUEzSCxPQURxQixHQUV4QixNQUZGOztBQUlBLFVBQUksaUJBQUosRUFBdUI7QUFDckIsY0FBSyxLQUFMLENBQVcsTUFBWCxDQUFrQixXQUFsQixDQUE4QixvQkFBb0IsQ0FBbEQ7QUFDQSxjQUFLLE1BQUwsQ0FBWSxxQkFBWixHQUFvQyxTQUFwQztBQUNEO0FBQ0YsS0F2V2tCOztBQUFBLFNBeVduQixpQkF6V21CLEdBeVdDLFVBQUMsWUFBRDtBQUFBLGFBQWtCLE1BQUssTUFBTCxDQUFZLGFBQVosQ0FBMEIsSUFBMUIsQ0FDcEM7QUFBQSxZQUFHLFlBQUgsU0FBRyxZQUFIO0FBQUEsZUFBc0IsaUJBQWlCLFlBQXZDO0FBQUEsT0FEb0MsS0FFakMsSUFGZTtBQUFBLEtBeldEOztBQUFBLFNBNlduQixpQkE3V21CLEdBNldDLFVBQUMsWUFBRDtBQUFBLGFBQWtCLE1BQUssTUFBTCxDQUFZLGFBQVosQ0FBMEIsSUFBMUIsQ0FDcEM7QUFBQSxZQUFHLE1BQUgsU0FBRyxNQUFIO0FBQUEsZUFBZ0IsV0FBVyxZQUEzQjtBQUFBLE9BRG9DLEtBQ1EsSUFEMUI7QUFBQSxLQTdXRDs7QUFBQSxTQWdYbkIsZUFoWG1CLEdBZ1hELFVBQUMsVUFBRDtBQUFBLGFBQWdCLE1BQUssTUFBTCxDQUFZLGFBQVosQ0FBMEIsSUFBMUIsQ0FDaEM7QUFBQSxlQUFZLFNBQVMsVUFBVCxLQUF3QixVQUFwQztBQUFBLE9BRGdDLEtBRTdCLElBRmE7QUFBQSxLQWhYQzs7QUFBQSxTQW9YbkIsbUJBcFhtQixHQW9YRyxZQUFNO0FBQzFCLGFBQU8sTUFBSyxNQUFMLENBQVksYUFBWixDQUEwQixHQUExQixDQUE4QixVQUFDLFFBQUQ7QUFBQSxlQUFjLFNBQVMsWUFBdkI7QUFBQSxPQUE5QixDQUFQO0FBQ0QsS0F0WGtCOztBQUFBLFNBd1huQixZQXhYbUIsR0F3WEosWUFBTTtBQUNuQjtBQUNBLFlBQUssS0FBTCxHQUFhLElBQUksZ0JBQUosQ0FBVTtBQUNyQixtSEFFd0MsTUFBSyxhQUFMLENBQW1CLGFBRjNELGtDQURxQjtBQU1yQixxQkFBYSxFQU5RO0FBT3JCLHNCQUFjLE1BQUssaUJBUEU7QUFRckIsdUJBQWUseUJBQU07QUFDbkIsZ0JBQUssb0JBQUwsQ0FBMEI7QUFDeEIsMEJBQWMsZ0JBQWdCLEVBQUUsTUFBTSxNQUFLLE1BQUwsQ0FBWSxZQUFwQixFQUFoQixDQURVO0FBRXhCLGtDQUF1QixPQUFPLGtCQUFQLEtBQThCLFVBQS9CLEdBQTZDLG9CQUE3QyxHQUFvRTtBQUZsRSxXQUExQjtBQUlEO0FBYm9CLE9BQVYsQ0FBYjtBQWVBLFlBQUssS0FBTCxDQUFXLE1BQVg7QUFDQSxZQUFLLG1DQUFMO0FBQ0QsS0EzWWtCOztBQUFBLFNBNlluQixpQkE3WW1CLEdBNllDLFlBQU07QUFBQSwyQkFDb0QsTUFBSyxjQUR6RDtBQUFBLFVBQ2hCLHdCQURnQixrQkFDaEIsd0JBRGdCO0FBQUEsVUFDVSxlQURWLGtCQUNVLGVBRFY7QUFBQSxVQUMyQixvQkFEM0Isa0JBQzJCLG9CQUQzQjs7QUFFeEIsVUFBSSxvQkFBSjtBQUNBLFVBQU0sZ0JBQWdCLDZCQUFJLFNBQVMsZ0JBQVQsT0FBOEIsd0JBQTlCLFVBQTJELG9CQUEzRCxDQUFKLEdBQXdGLEdBQXhGLENBQ3BCO0FBQUEsZUFBcUIsa0JBQWtCLFNBQWxCLENBQTRCLElBQTVCLEVBQXJCO0FBQUEsT0FEb0IsQ0FBdEI7O0FBSUEsVUFBTSxpQkFBaUIsTUFBSyxLQUFMLENBQVcsY0FBWCxFQUF2QjtBQUNBLFVBQU0sV0FBVyxJQUFJLG9CQUFKLENBQWM7QUFDN0Isb0JBQVksY0FEaUI7QUFFN0IsbUJBQVcsTUFBSyxtQkFBTCxFQUZrQjtBQUc3Qix5QkFBaUIsYUFIWTtBQUk3Qix1QkFBZSxNQUFLLGFBQUwsQ0FBbUIsYUFKTDtBQUs3QiwwQkFBa0IsaUNBQWdCO0FBQUE7QUFBQSxjQUFkLFFBQWM7O0FBQ2hDLGNBQU0sbUJBQW1CLE1BQUssaUJBQUwsQ0FBdUIsUUFBdkIsQ0FBekI7O0FBRUEsZ0JBQUssK0JBQUwsQ0FBcUM7QUFDbkMsMkJBQWdCLHFCQUFxQixJQUF0QixHQUNYLENBRFcsR0FFWCxPQUFPLGlCQUFpQixVQUF4QixDQUgrQjtBQUluQyxpQ0FBcUIsT0FKYztBQUtuQyxpQ0FBcUI7QUFMYyxXQUFyQzs7QUFRQSxjQUNFLHFCQUFxQixJQUFyQixJQUNFLE1BQUssTUFBTCxDQUFZLHFCQUFaLEtBQXNDLGdCQUF0QyxJQUNBLGNBQWMsUUFBZCxDQUF1QixRQUF2QixDQUhKLEVBS0U7QUFDQTtBQUNBLGtCQUFLLE1BQUwsQ0FBWSx5QkFBWixHQUF3QyxJQUF4Qzs7QUFFQSwwQkFBYyxNQUFLLGlCQUFuQixFQUFzQyxPQUF0QztBQUNELFdBVkQsTUFVTztBQUNMO0FBQ0Esa0JBQUssTUFBTCxDQUFZLHlCQUFaLEdBQXdDLGdCQUF4Qzs7QUFFQSwwQkFBYyxNQUFLLGlCQUFuQixFQUFzQyxpQkFBaUIsVUFBdkQ7QUFDRDs7QUFFRCxnQkFBSyxNQUFMOztBQUVBO0FBQ0EscUJBQVcsWUFBTTtBQUNmLGtCQUFLLEtBQUwsQ0FBVyxVQUFYO0FBQ0QsV0FGRCxFQUVHLEdBRkg7QUFHRCxTQXZDNEI7QUF3QzdCLHVCQUFlLE1BQUssYUFBTCxDQUFtQixnQkF4Q0w7QUF5QzdCLGtCQUFVLFdBekNtQjtBQTBDN0IsdUJBQWU7QUExQ2MsT0FBZCxDQUFqQjtBQTRDQSxlQUFTLE1BQVQ7QUFDQTtBQUNBLHFCQUFlLGFBQWYsT0FBaUMsTUFBSyxjQUFMLENBQW9CLGlCQUFyRCxFQUEwRSxXQUExRSxHQUF3RixNQUFLLGFBQUwsQ0FBbUIsV0FBM0c7O0FBRUEsZUFBUyxnQkFBVCxPQUE4QixlQUE5QixFQUFpRCxPQUFqRCxDQUF5RCxVQUFDLFVBQUQsRUFBZ0I7QUFDdkUsWUFBSSxtQkFBbUIsS0FBdkI7QUFDQSxZQUFNLFlBQVksSUFBSSxvQkFBSixDQUFjO0FBQzlCLHNCQUFZLFVBRGtCO0FBRTlCLDJCQUFpQixNQUFLLGFBQUwsQ0FBbUIsZ0JBRk47QUFHOUIsMEJBQWdCLHdCQUFDLFdBQUQsRUFBaUI7QUFDL0IscUJBQVMsV0FBVCxDQUFxQixXQUFyQjtBQUNBLGdCQUFJLFdBQUosRUFBaUI7QUFDZixvQkFBSyxNQUFMLENBQVksWUFBWixHQUEyQixXQUEzQjs7QUFFQSxrQkFBSSxZQUFZLE1BQVosS0FBdUIsQ0FBdkIsSUFBNEIsQ0FBQyxnQkFBakMsRUFBbUQ7QUFDakQsbUNBQW1CLElBQW5CO0FBQ0Esc0JBQUssdUJBQUw7QUFDRDtBQUNELGtCQUFJLENBQUMsU0FBUyxpQkFBVCxFQUFMLEVBQW1DO0FBQ2pDLHNCQUFLLHdCQUFMLENBQThCO0FBQzVCLGdDQUFjLGdCQUFnQixFQUFFLE1BQU0sV0FBUixFQUFoQjtBQURjLGlCQUE5QjtBQUdEO0FBQ0YsYUFaRCxNQVlPO0FBQ0wsa0JBQUksTUFBSyxNQUFMLENBQVksWUFBWixJQUE0QixNQUFLLE1BQUwsQ0FBWSxZQUFaLENBQXlCLE1BQXpCLEdBQWtDLENBQWxFLEVBQXFFO0FBQ25FLHNCQUFLLHFCQUFMO0FBQ0Q7QUFDRCxvQkFBSyxNQUFMLENBQVksWUFBWixHQUEyQixTQUEzQjtBQUNBLGlDQUFtQixLQUFuQjtBQUNEO0FBQ0YsV0F4QjZCO0FBeUI5Qix3QkFBYyxFQXpCZ0I7QUEwQjlCLG9CQUFVO0FBMUJvQixTQUFkLENBQWxCO0FBNEJBLGtCQUFVLE1BQVY7QUFDQSxpQkFBUyxhQUFUO0FBQ0Esc0JBQWM7QUFBQSxpQkFBTSxVQUFVLFNBQVYsQ0FBb0IsRUFBRSxVQUFVLEVBQVosRUFBcEIsQ0FBTjtBQUFBLFNBQWQ7QUFDRCxPQWpDRDtBQWtDRCxLQXZla0I7O0FBQUEsU0E0ZW5CLDBCQTVlbUIsR0E0ZVUsWUFBTTtBQUFBLFVBQ3pCLFVBRHlCLEdBQ1YsTUFBSyxLQUFMLENBQVcsTUFERCxDQUN6QixVQUR5Qjs7O0FBR2pDLFVBQU0saUJBQWlCLFdBQVcsVUFBWCxFQUF2Qjs7QUFFQSxVQUFJLGVBQWUsQ0FBbkI7O0FBRUEsaUJBQVcsSUFBWCxDQUFnQixlQUFoQixFQUFpQyxJQUFqQyxDQUFzQyxZQUFZO0FBQUUsd0JBQWdCLEtBQUssV0FBckI7QUFBa0MsT0FBdEY7O0FBRUEsYUFBTyxnQkFBZ0IsY0FBdkI7QUFDRCxLQXRma0I7O0FBQUEsU0EyZm5CLGVBM2ZtQixHQTJmRCxZQUFNO0FBQ3RCLFVBQUksTUFBSywwQkFBTCxPQUFzQyxJQUExQyxFQUFnRDtBQUM5QyxjQUFLLGNBQUw7QUFDRCxPQUZELE1BRU87QUFDTCxjQUFLLGFBQUw7QUFDRDtBQUNGLEtBamdCa0I7O0FBQUEsU0FzZ0JuQixhQXRnQm1CLEdBc2dCSCxZQUFNO0FBQUEsMEJBQ3dCLE1BQUssS0FBTCxDQUFXLE1BRG5DO0FBQUEsVUFDWixHQURZLGlCQUNaLEdBRFk7QUFBQSxVQUNHLGNBREgsaUJBQ1AsTUFETyxDQUNHLGNBREg7O0FBRXBCLFVBQUksV0FBSixDQUFnQixjQUFoQjtBQUNELEtBemdCa0I7O0FBQUEsU0E4Z0JuQixjQTlnQm1CLEdBOGdCRixZQUFNO0FBQUEsMkJBQ3VCLE1BQUssS0FBTCxDQUFXLE1BRGxDO0FBQUEsVUFDYixHQURhLGtCQUNiLEdBRGE7QUFBQSxVQUNFLGNBREYsa0JBQ1IsTUFEUSxDQUNFLGNBREY7O0FBRXJCLFVBQUksUUFBSixDQUFhLGNBQWI7QUFDRCxLQWpoQmtCOztBQUFBLFNBdWhCbkIsd0JBdmhCbUIsR0F1aEJRO0FBQUEsVUFBRyxZQUFILFNBQUcsWUFBSDtBQUFBLGFBQXNCLGdCQUFnQixJQUFoQixDQUFxQjtBQUNwRSxtQkFBVyxvQkFEeUQ7QUFFcEUsbUJBQVc7QUFDVCxvQ0FEUztBQUVULHNCQUFZO0FBRkg7QUFGeUQsT0FBckIsQ0FBdEI7QUFBQSxLQXZoQlI7O0FBQUEsU0EraEJuQixvQkEvaEJtQixHQStoQkk7QUFBQSxVQUFHLFlBQUgsU0FBRyxZQUFIO0FBQUEsVUFBaUIsb0JBQWpCLFNBQWlCLG9CQUFqQjtBQUFBLGFBQTRDLGdCQUFnQixJQUFoQixDQUFxQjtBQUN0RixtQkFBVyw2QkFEMkU7QUFFdEYsbUJBQVc7QUFDVCxvQ0FEUztBQUVUO0FBRlM7QUFGMkUsT0FBckIsQ0FBNUM7QUFBQSxLQS9oQko7O0FBQUEsU0F1aUJuQix1QkF2aUJtQixHQXVpQk87QUFBQSxhQUFNLGdCQUFnQixJQUFoQixDQUFxQjtBQUNuRCxtQkFBVyxxQkFEd0M7QUFFbkQsbUJBQVc7QUFDVCxzQkFBWTtBQURIO0FBRndDLE9BQXJCLENBQU47QUFBQSxLQXZpQlA7O0FBQUEsU0E4aUJuQixxQkE5aUJtQixHQThpQks7QUFBQSxhQUFNLGdCQUFnQixJQUFoQixDQUFxQjtBQUNqRCxtQkFBVyxtQkFEc0M7QUFFakQsbUJBQVc7QUFDVCxzQkFBWTtBQURIO0FBRnNDLE9BQXJCLENBQU47QUFBQSxLQTlpQkw7O0FBQUEsU0FxakJuQixvQkFyakJtQixHQXFqQkksWUFBTTtBQUMzQixVQUFNLG1CQUFtQixTQUFTLGFBQVQsT0FBMkIsTUFBSyxjQUFMLENBQW9CLGFBQS9DLENBQXpCO0FBQ0EsVUFBSSxnQkFBSixFQUFzQjtBQUNwQix5QkFBaUIsZ0JBQWpCLENBQWtDLE9BQWxDLEVBQTJDLFlBQU07QUFDL0MsZ0JBQUssK0JBQUwsQ0FBcUM7QUFDbkMsMkJBQWUsQ0FEb0I7QUFFbkMsaUNBQXFCLEtBRmM7QUFHbkMsaUNBQXFCO0FBSGMsV0FBckM7QUFLRCxTQU5EO0FBT0Q7O0FBRUQsVUFBTSxzQkFBc0IsU0FBUyxnQkFBVCxPQUE4QixNQUFLLGNBQUwsQ0FBb0IsV0FBbEQsQ0FBNUI7QUFDQSxVQUFJLG9CQUFvQixNQUFwQixHQUE2QixDQUFqQyxFQUFvQztBQUNsQyw0QkFBb0IsT0FBcEIsQ0FBNEIsVUFBQyxPQUFELEVBQVUsS0FBVjtBQUFBLGlCQUFvQixRQUFRLGdCQUFSLENBQXlCLE9BQXpCLEVBQWtDLFlBQU07QUFDdEYsa0JBQUssK0JBQUwsQ0FBcUM7QUFDbkMsNkJBQWUsT0FBTyxRQUFRLE9BQVIsQ0FBZ0IsS0FBdkIsQ0FEb0I7QUFFbkMsbUNBQXFCLEtBRmM7QUFHbkMsbUNBQXFCLFFBQVE7QUFITSxhQUFyQztBQUtELFdBTitDLENBQXBCO0FBQUEsU0FBNUI7QUFPRDtBQUNGLEtBM2tCa0I7O0FBQUEsU0E2a0JuQiwrQkE3a0JtQixHQTZrQmUsaUJBSTVCO0FBQUEsVUFISixhQUdJLFNBSEosYUFHSTtBQUFBLFVBRkosbUJBRUksU0FGSixtQkFFSTtBQUFBLFVBREosbUJBQ0ksU0FESixtQkFDSTs7QUFBQSxpQ0FDZ0MsT0FBTyxHQUFQLENBQVcsUUFBWCxFQURoQztBQUFBLFVBQ0ksdUJBREosd0JBQ0ksdUJBREo7O0FBRUosVUFBSSw0QkFBNEIsYUFBaEMsRUFBK0M7QUFDN0MsZUFBTyxHQUFQLENBQVcsUUFBWCxDQUFvQjtBQUNsQixtQ0FBeUI7QUFEUCxTQUFwQjtBQUdBLFlBQU0saUJBQWlCLFNBQWpCLGNBQWlCLEdBQU07QUFDM0IsMEJBQWdCLElBQWhCLENBQXFCO0FBQ25CLHVCQUFXLHdCQURRO0FBRW5CLHVCQUFXO0FBQ1QsMENBRFM7QUFFVCxzREFGUztBQUdULHNEQUhTO0FBSVQsb0NBQXVCLE9BQU8sa0JBQVAsS0FBOEIsVUFBL0IsR0FBNkMsb0JBQTdDLEdBQW9FO0FBSmpGO0FBRlEsV0FBckI7QUFTQTtBQUNBLGlCQUFPLG1CQUFQLENBQTJCLGNBQWMsbUNBQXpDLEVBQThFLGNBQTlFO0FBQ0QsU0FaRDtBQWFBLGVBQU8sZ0JBQVAsQ0FBd0IsY0FBYyxtQ0FBdEMsRUFBMkUsY0FBM0U7QUFDRDtBQUNGLEtBdG1Ca0I7O0FBQUEsU0F3bUJuQixtQ0F4bUJtQixHQXdtQm1CLFlBQU07QUFDMUMsc0JBQWdCLElBQWhCLENBQXFCO0FBQ25CLG1CQUFXO0FBRFEsT0FBckI7QUFHRCxLQTVtQmtCOztBQUNqQixpQ0FBZSxLQUFLLFVBQXBCLEVBQWdDLElBQWhDLEVBQXNDLE1BQXRDLEVBQThDLFlBQTlDO0FBQ0EsU0FBSyxLQUFMLEdBQWEsT0FBTyxNQUFQLENBQWMsSUFBZCxDQUFiO0FBQ0Q7Ozs7OztBQTZERDs7OzZCQUdVO0FBQ1IsV0FBSyxlQUFMO0FBQ0EsV0FBSyxLQUFMLENBQVcsTUFBWCxDQUFrQixVQUFsQixDQUE2QixNQUE3QjtBQUNBLFdBQUssS0FBTCxDQUFXLE1BQVgsQ0FBa0IsTUFBbEI7QUFDRDs7QUFFRDs7Ozs7OzJDQThEd0I7QUFDdEIsVUFBSSxLQUFLLE1BQUwsQ0FBWSxZQUFaLEtBQTZCLFNBQWpDLEVBQTRDO0FBQzFDLGFBQUssS0FBTCxDQUFXLE1BQVgsQ0FBa0IsT0FBbEIsQ0FBMEIsS0FBSyxNQUFMLENBQVksWUFBdEM7QUFDQSxhQUFLLE1BQUwsQ0FBWSxZQUFaLEdBQTJCLFNBQTNCO0FBQ0Q7QUFDRjs7O3dDQUVvQjtBQUNuQixVQUFJLFlBQVksU0FBUyxhQUFULE9BQTJCLEtBQUssY0FBTCxDQUFvQixZQUEvQyxDQUFoQjtBQUNBLFVBQUksQ0FBQyxTQUFMLEVBQWdCO0FBQ2QsYUFBSyxLQUFMLENBQVcsTUFBWCxDQUFrQixXQUFsQixDQUE4QixLQUFLLGNBQUwsRUFBOUI7QUFDQSxvQkFBWSxTQUFTLGFBQVQsT0FBMkIsS0FBSyxjQUFMLENBQW9CLFlBQS9DLENBQVo7QUFDQSxrQkFBVSxnQkFBVixDQUEyQixPQUEzQixFQUFvQyxLQUFLLFlBQXpDO0FBQ0Q7QUFDRjs7O3lDQUVxQjtBQUNwQixXQUFLLEtBQUwsQ0FBVyxNQUFYLENBQWtCLFdBQWxCLENBQThCLEtBQUssZUFBTCxFQUE5QjtBQUNEOzs7eUNBRXFCLFUsRUFBWTtBQUFBOztBQUNoQyxpQkFBVyxPQUFYLENBQW1CLFVBQUMsUUFBRCxFQUFjO0FBQy9CLGVBQUssS0FBTCxDQUFXLE1BQVgsQ0FBa0IsV0FBbEIsQ0FBOEIsT0FBSyxvQkFBTCxDQUEwQixFQUFFLGtCQUFGLEVBQTFCLENBQTlCO0FBQ0EsZUFBSyxNQUFMLENBQVksaUJBQVosQ0FBOEIsSUFBOUIsQ0FBbUMsUUFBbkM7QUFDRCxPQUhEO0FBSUQ7OztzQ0FFa0I7QUFDakIsVUFBSSxtQkFBbUIsT0FBTyxhQUFhLEtBQUssaUJBQWxCLENBQVAsQ0FBdkI7QUFDQSxVQUFJLE1BQU0sZ0JBQU4sQ0FBSixFQUE2QjtBQUMzQiwyQkFBbUIsQ0FBbkI7QUFDRDs7QUFFRCxVQUFNLGlCQUFpQixLQUFLLGVBQUwsQ0FBcUIsZ0JBQXJCLENBQXZCOztBQUVBLFVBQUksbUJBQW1CLElBQXZCLEVBQTZCO0FBQzNCLFlBQUksQ0FBQyxLQUFLLE1BQUwsQ0FBWSxpQkFBWixDQUE4QixRQUE5QixDQUF1QyxjQUF2QyxDQUFMLEVBQTZEO0FBQzNELGVBQUssTUFBTCxDQUFZLHFCQUFaLEdBQW9DLGNBQXBDO0FBQ0EsZUFBSyxLQUFMLENBQVcsTUFBWCxDQUFrQixXQUFsQixDQUE4QixLQUFLLG9CQUFMLENBQTBCLEVBQUUsVUFBVSxjQUFaLEVBQTFCLENBQTlCO0FBQ0Q7QUFDRCxhQUFLLGNBQUwsQ0FBb0IsY0FBcEI7QUFDRCxPQU5ELE1BTU87QUFDTDtBQUNBLGFBQUssY0FBTDtBQUNEO0FBQ0Y7OztrRUFFOEMseUIsRUFBMkI7QUFDeEU7QUFDQSxVQUFNLHdCQUF3QixLQUFLLE1BQUwsQ0FBWSxxQkFBMUM7O0FBRUEsVUFBSSw4QkFBOEIsSUFBbEMsRUFBd0M7QUFDdEM7QUFDQSxhQUFLLGNBQUw7QUFDRCxPQUhELE1BR08sSUFBSSwwQkFBMEIsU0FBOUIsRUFBeUM7QUFDOUM7QUFDQSxZQUFJLENBQUMsS0FBSyxNQUFMLENBQVksaUJBQVosQ0FBOEIsUUFBOUIsQ0FBdUMseUJBQXZDLENBQUwsRUFBd0U7QUFDdEUsZUFBSyxvQkFBTDtBQUNBLGVBQUssS0FBTCxDQUFXLE1BQVgsQ0FBa0IsV0FBbEIsQ0FBOEIsS0FBSyxvQkFBTCxDQUEwQixFQUFFLFVBQVUseUJBQVosRUFBMUIsQ0FBOUI7QUFDRDtBQUNELGFBQUssY0FBTCxDQUFvQix5QkFBcEI7QUFDRCxPQVBNLE1BT0EsSUFBSSwwQkFBMEIseUJBQTlCLEVBQXlEO0FBQzlEO0FBQ0EsYUFBSyxjQUFMLENBQW9CLHFCQUFwQjtBQUNELE9BSE0sTUFHQTtBQUNMO0FBQ0EsWUFBSSxDQUFDLEtBQUssTUFBTCxDQUFZLGlCQUFaLENBQThCLFFBQTlCLENBQXVDLHlCQUF2QyxDQUFMLEVBQXdFO0FBQ3RFLGVBQUssb0JBQUw7QUFDQSxlQUFLLGtCQUFMO0FBQ0EsZUFBSyxLQUFMLENBQVcsTUFBWCxDQUFrQixXQUFsQixDQUE4QixLQUFLLG9CQUFMLENBQTBCLEVBQUUsVUFBVSx5QkFBWixFQUExQixDQUE5QjtBQUNEO0FBQ0QsYUFBSyxjQUFMLENBQW9CLHlCQUFwQjtBQUNEO0FBQ0QsV0FBSyxNQUFMLENBQVkseUJBQVosR0FBd0MsU0FBeEM7QUFDRDs7O3FDQUV3QztBQUFBLFVBQXpCLGdCQUF5Qix1RUFBTixJQUFNOztBQUN2QyxVQUFNLGNBQWMsU0FBUyxhQUFULE9BQTJCLEtBQUssY0FBTCxDQUFvQixjQUEvQyxDQUFwQjtBQUNBLFVBQU0sb0JBQW9CLFlBQVksYUFBWixPQUE4QixLQUFLLGNBQUwsQ0FBb0Isb0JBQWxELENBQTFCO0FBQ0EsVUFBSSwwQkFBSjtBQUNBLFVBQUkscUJBQUo7O0FBRUE7QUFDQSxVQUFJLGlCQUFKLEVBQXVCO0FBQ3JCLDBCQUFrQixTQUFsQixDQUE0QixNQUE1QixDQUFtQyxLQUFLLGNBQUwsQ0FBb0Isb0JBQXZEO0FBQ0Q7O0FBRUQsVUFBSSxxQkFBcUIsSUFBekIsRUFBK0I7QUFDN0I7QUFDQSw0QkFBb0IsWUFBWSxhQUFaLE9BQThCLEtBQUssY0FBTCxDQUFvQixhQUFsRCxDQUFwQjtBQUNBLHVCQUFlLENBQWY7QUFDRCxPQUpELE1BSU87QUFDTCw0QkFBb0IsWUFBWSxhQUFaLG1CQUEwQyxpQkFBaUIsVUFBM0QsUUFBcEI7QUFDQSx1QkFBZSxLQUFLLE1BQUwsQ0FBWSxpQkFBWixDQUE4QixTQUE5QixDQUF3QyxVQUFDLFFBQUQ7QUFBQSxpQkFBYyxTQUFTLFVBQVQsS0FBd0IsT0FBTyxpQkFBaUIsVUFBeEIsQ0FBdEM7QUFBQSxTQUF4QyxDQUFmOztBQUVBLFlBQUksQ0FBQyxLQUFLLE1BQUwsQ0FBWSxpQkFBWixDQUE4QixRQUE5QixDQUF1QyxnQkFBdkMsQ0FBTCxFQUErRDtBQUM3RCxlQUFLLE1BQUwsQ0FBWSxxQkFBWixHQUFvQyxnQkFBcEM7QUFDQSx5QkFBZSxLQUFLLE1BQUwsQ0FBWSxpQkFBWixDQUE4QixNQUE3QztBQUNEO0FBQ0Y7O0FBRUQsVUFBSSxpQkFBSixFQUF1QjtBQUNyQiwwQkFBa0IsU0FBbEIsQ0FBNEIsR0FBNUIsQ0FBZ0MsS0FBSyxjQUFMLENBQW9CLG9CQUFwRDtBQUNEOztBQUVELFVBQUksT0FBTyxZQUFQLEtBQXdCLENBQTVCLEVBQStCO0FBQzdCLGFBQUssTUFBTCxDQUFZLFlBQVosR0FBMkIsWUFBM0I7QUFDRDtBQUNGOztBQUVEOzs7OztBQW1CQTs7Ozs7QUFzQkE7Ozs7O0FBZ0JBOzs7OztBQVlBOzs7OztBQVlBOzs7OztBQU9BOzs7OztBQTRKQTs7Ozs7QUFlQTs7Ozs7QUFXQTs7Ozs7QUFRQTs7Ozs7QUFRQTs7Ozs7Ozs7O2tCQTNqQm1CLFc7Ozs7Ozs7QUNQckI7Ozs7QUFDQTs7Ozs7OzBKQVBBOzs7Ozs7SUFTcUIsVSxHQUtuQixvQkFBYSxJQUFiLEVBQW1CO0FBQUE7O0FBQUE7O0FBQUEsT0FKbkIsVUFJbUIsR0FKTjtBQUNYLFlBQVEsb0JBQVUsTUFBVixDQUFpQjtBQURkLEdBSU07O0FBQUEsT0FLbkIsSUFMbUIsR0FLWixZQUFNO0FBQ1gsUUFBSSxNQUFLLEtBQUwsQ0FBVyxNQUFYLENBQWtCLFVBQWxCLENBQTZCLE1BQWpDLEVBQXlDO0FBQ3ZDO0FBQ0EsWUFBSyxLQUFMLENBQVcsTUFBWCxDQUFrQixVQUFsQixDQUE2QixPQUE3QixDQUFxQyxXQUFyQztBQUNBO0FBQ0EsWUFBSyxLQUFMLENBQVcsTUFBWCxDQUFrQixVQUFsQixDQUE2QixNQUE3QixDQUFvQyxnQkFBcEMsQ0FDRSxPQURGLEVBRUUsd0JBQWdCO0FBQ2QscUJBQWEsY0FBYjtBQUNBLGNBQUssU0FBTDtBQUNELE9BTEg7QUFPRDs7QUFFRCxRQUFJLE1BQUssS0FBTCxDQUFXLE1BQVgsQ0FBa0IsVUFBbEIsQ0FBNkIsTUFBakMsRUFBeUM7QUFDdkM7QUFDQSxZQUFLLEtBQUwsQ0FBVyxNQUFYLENBQWtCLFVBQWxCLENBQTZCLE9BQTdCLENBQXFDLGVBQXJDO0FBQ0E7QUFDQSxZQUFLLEtBQUwsQ0FBVyxNQUFYLENBQWtCLFVBQWxCLENBQTZCLE1BQTdCLENBQW9DLGdCQUFwQyxDQUNFLE9BREYsRUFFRSx3QkFBZ0I7QUFDZCxxQkFBYSxjQUFiO0FBQ0EsY0FBSyxhQUFMO0FBQ0QsT0FMSDtBQU9EO0FBQ0Q7QUFDQSxVQUFLLEtBQUwsQ0FBVyxNQUFYLENBQWtCLEdBQWxCLENBQXNCLENBQXRCLEVBQXlCLFNBQXpCLENBQW1DLEdBQW5DLENBQXVDLFNBQXZDO0FBQ0EsVUFBSyxLQUFMLENBQVcsTUFBWCxDQUFrQixFQUFsQixDQUFxQixlQUFyQixFQUFzQyxZQUFNO0FBQzFDLFVBQUksQ0FBQyxNQUFLLEtBQUwsQ0FBVyxNQUFYLENBQWtCLEtBQXZCLEVBQThCO0FBQzVCLGNBQUssS0FBTCxDQUFXLE1BQVgsQ0FBa0IsY0FBbEI7QUFDRCxPQUZELE1BRU87QUFDTCxjQUFLLEtBQUwsQ0FBVyxNQUFYLENBQWtCLE9BQWxCLENBQ0UsTUFBSyxLQUFMLENBQVcsTUFBWCxDQUFrQixRQUFsQixDQUEyQixNQUEzQixHQUFvQyxDQUR0QztBQUdEO0FBQ0YsS0FSRDs7QUFVQSxVQUFLLEtBQUwsQ0FBVyxNQUFYLENBQWtCLEVBQWxCLENBQXFCLFFBQXJCLEVBQStCLFlBQU07QUFDbkMsWUFBSyxLQUFMLENBQVcsTUFBWCxDQUFrQixNQUFsQjtBQUNELEtBRkQ7O0FBSUEsVUFBSyxLQUFMLENBQVcsTUFBWCxDQUFrQixVQUFsQixDQUE2QixNQUE3QjtBQUNBLFVBQUssS0FBTCxDQUFXLE1BQVgsQ0FBa0IsTUFBbEI7QUFDRCxHQWpEa0I7O0FBQUEsT0FzRG5CLFNBdERtQixHQXNEUCxZQUFNO0FBQ2hCO0FBQ0E7QUFGZ0Isd0JBRzBELE1BQUssS0FBTCxDQUFXLE1BSHJFO0FBQUEsUUFHUixVQUhRLGlCQUdSLFVBSFE7QUFBQSxRQUdJLFdBSEosaUJBR0ksV0FISjtBQUFBLFFBR2lCLFVBSGpCLGlCQUdpQixVQUhqQjtBQUFBLFFBR3VDLFlBSHZDLGlCQUc2QixNQUg3QixDQUd1QyxZQUh2QztBQUloQjs7QUFDQSxRQUFNLGNBQWMsV0FBVyxXQUFYLElBQTBCLFdBQVcsVUFBWCxFQUE5QztBQUNBO0FBQ0EsUUFBTSxhQUFhLFdBQVcsU0FBWCxDQUFxQixVQUFDLFFBQUQ7QUFBQSxhQUFjLFdBQVcsWUFBWCxJQUEyQixXQUF6QztBQUFBLEtBQXJCLENBQW5CO0FBQ0EsUUFBTSxZQUFZLGVBQWUsQ0FBQyxDQUFoQixHQUNkLFdBQVcsTUFBWCxHQUFvQixDQUROLENBQ1E7QUFEUixNQUVkLGFBQWEsQ0FGakIsQ0FSZ0IsQ0FVRztBQUNuQixVQUFLLEtBQUwsQ0FBVyxNQUFYLENBQWtCLE9BQWxCLENBQTBCLFNBQTFCO0FBQ0QsR0FsRWtCOztBQUFBLE9BdUVuQixhQXZFbUIsR0F1RUgsWUFBTTtBQUNwQjtBQUNBO0FBRm9CLHlCQUdzRCxNQUFLLEtBQUwsQ0FBVyxNQUhqRTtBQUFBLFFBR1osVUFIWSxrQkFHWixVQUhZO0FBQUEsUUFHQSxVQUhBLGtCQUdBLFVBSEE7QUFBQSxRQUdZLFdBSFosa0JBR1ksV0FIWjtBQUFBLFFBR21DLFlBSG5DLGtCQUd5QixNQUh6QixDQUdtQyxZQUhuQzs7QUFLcEI7O0FBQ0EsUUFBTSxpQkFBaUIsV0FBVyxVQUFYLEVBQXZCO0FBQ0E7QUFDQTtBQUNBLFFBQUksZ0JBQWdCLDZCQUFJLFVBQUosR0FBZ0IsU0FBaEIsQ0FBMEIsVUFBQyxRQUFELEVBQWM7QUFDMUQsVUFBSSxRQUFRLFdBQVo7QUFDQSxhQUFPLFlBQWEsV0FBVyxRQUFRLENBQW5CLElBQXdCLFlBQXhCLEdBQXVDLGNBQTNEO0FBQ0QsS0FIbUIsQ0FBcEI7QUFJQTtBQUNBLFVBQUssS0FBTCxDQUFXLE1BQVgsQ0FBa0IsT0FBbEIsQ0FBMEIsYUFBMUI7QUFDRCxHQXRGa0I7O0FBQ2pCLCtCQUFlLEtBQUssVUFBcEIsRUFBZ0MsSUFBaEMsRUFBc0MsTUFBdEMsRUFBOEMsWUFBOUM7QUFDQSxPQUFLLEtBQUwsR0FBYSxPQUFPLE1BQVAsQ0FBYyxJQUFkLENBQWI7QUFDRDs7QUFnREQ7Ozs7O0FBaUJBOzs7OztrQkF6RW1CLFU7Ozs7OztBQ1RyQixJQUFNLFVBQVU7QUFDZCxRQUFNLEVBRFE7QUFFZCxTQUFPLEVBRk87QUFHZCxVQUFRLEVBSE07QUFJZCxTQUFPLEVBSk87QUFLZCxTQUFPLEVBTE87QUFNZCxPQUFLLENBTlM7QUFPZCxNQUFJO0FBUFUsQ0FBaEI7O2tCQVVlLE87Ozs7O0FDVmY7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7Ozs7OztJQUdNLEc7OztTQUNGLFUsR0FBYSxFOzs7QUFHakIsb0JBQU0sWUFBTTtBQUNSLFdBQU8sR0FBUCxHQUFhLElBQUksR0FBSixFQUFiO0FBQ0EsUUFBTSxnQkFBZ0IsOEJBQWdCLGVBQWhCLENBQXRCO0FBQ0EsUUFBRyxpQkFBaUIsTUFBcEIsRUFBMkI7QUFDdkIsWUFBTSxRQUFRLElBQUksd0JBQUosRUFBZDtBQUNBLGNBQU0sSUFBTjtBQUNIOztBQUVELE1BQUUsRUFBRixDQUFLLFlBQUwsR0FBb0IsWUFBWTtBQUM1QixZQUFNLGFBQWEsRUFBRSxJQUFGLEVBQVEsTUFBUixHQUFpQixHQUFwQztBQUNBLFlBQU0sZ0JBQWdCLGFBQWEsRUFBRSxJQUFGLEVBQVEsV0FBUixFQUFuQztBQUNBLFlBQU0sY0FBYyxFQUFFLE1BQUYsRUFBVSxTQUFWLEVBQXBCO0FBQ0EsWUFBTSxpQkFBaUIsY0FBYyxFQUFFLE1BQUYsRUFBVSxNQUFWLEVBQXJDO0FBQ0EsWUFBTSxXQUFXLEVBQUUsOEJBQUYsQ0FBakI7QUFDQSxZQUFNLGlCQUFpQixTQUFTLE1BQVQsR0FBa0IsQ0FBbEIsR0FBc0IsU0FBUyxXQUFULEVBQXRCLEdBQStDLENBQXRFO0FBQ0EsWUFBTSxjQUFjLEVBQUUsV0FBRixDQUFwQjtBQUNBLFlBQU0sb0JBQW9CLFlBQVksTUFBWixHQUFxQixDQUFyQixHQUF5QixZQUFZLFdBQVosRUFBekIsR0FBcUQsQ0FBL0U7QUFDQSxlQUFPLGdCQUFpQixjQUFjLGNBQWQsR0FBK0IsaUJBQWhELElBQXNFLGFBQWEsY0FBMUY7QUFDSCxLQVZEOztBQVlBLFFBQU0sMkJBQTJCLElBQUksZ0JBQUosQ0FBVyxZQUFYLEVBQXlCO0FBQ3RELHVCQUFlLE1BRHVDO0FBRXRELGtCQUFVLElBRjRDO0FBR3RELGNBQU0sS0FIZ0Q7QUFJdEQsdUJBQWUsSUFKdUM7QUFLdEQsb0JBQVk7QUFDUixvQkFBUTtBQURBO0FBTDBDLEtBQXpCLENBQWpDOztBQVVBLFFBQU0scUJBQXFCLHlDQUEzQjtBQUNBLFFBQUksU0FBUyxhQUFULENBQXVCLGtCQUF2QixDQUFKLEVBQWdEOztBQUU1QyxZQUFNLFNBQWlCLElBQUksZ0JBQUosQ0FBVyxrQkFBWCxFQUErQjtBQUNsRCwyQkFBZSxNQURtQztBQUVsRCxzQkFBVSxJQUZ3QztBQUdsRCxtQkFBTyxJQUgyQztBQUlsRCxrQkFBTSxLQUo0QztBQUtsRCxpQ0FBcUIsSUFMNkI7QUFNbEQsMkJBQWUsSUFObUM7QUFPbEQsd0JBQVk7QUFDUix3QkFBUSxxQkFEQTtBQUVSLHdCQUFRO0FBRkE7QUFQc0MsU0FBL0IsQ0FBdkI7QUFZQSxlQUFPLFFBQVAsQ0FBZ0IsT0FBTyxRQUFQLENBQWdCLE1BQWhCLEdBQXlCLENBQXpDLElBQThDLE9BQU8sVUFBUCxDQUFrQixPQUFPLFVBQVAsQ0FBa0IsTUFBbEIsR0FBMkIsQ0FBN0MsQ0FBOUM7QUFDQSxlQUFPLEdBQVAsQ0FBVyxVQUFYLENBQXNCLFVBQXRCLEdBQW1DLElBQUksOEJBQUosQ0FBZTtBQUM5QyxvQkFBUTtBQURzQyxTQUFmLENBQW5DO0FBR0EsZUFBTyxHQUFQLENBQVcsVUFBWCxDQUFzQixVQUF0QixDQUFpQyxJQUFqQztBQUNIOztBQUdELE1BQUUsUUFBRixFQUFZLE1BQVosQ0FBbUIsWUFBTTtBQUNyQjtBQUNBO0FBQ0gsS0FIRDs7QUFLQSxRQUFNLGtCQUFrQixTQUFTLGFBQVQsQ0FBdUIsb0JBQXZCLENBQXhCO0FBQ0EsUUFBTSx3QkFBd0IsU0FBUyxhQUFULENBQXVCLDhCQUF2QixDQUE5QjtBQUNBLFFBQU0sd0JBQXdCLFNBQVMsYUFBVCxDQUF1QixPQUF2QixDQUE5QjtBQUNBLFFBQU0saUJBQWlCLG9CQUF2Qjs7QUFFQSxhQUFTLGdCQUFULEdBQTZCO0FBQ3pCLFlBQUkseUJBQXlCLHFCQUF6QixJQUFrRCxlQUF0RCxFQUF1RTtBQUNuRSxnQkFBTSxjQUFjLFNBQVMsYUFBVCxDQUF1QixXQUF2QixDQUFwQixDQURtRSxDQUNYO0FBQ3hELGdCQUFNLFVBQVUsY0FBYyxZQUFZLHFCQUFaLEdBQW9DLE1BQWxELEdBQTJELENBQTNFO0FBQ0EsZ0JBQUksc0JBQXNCLHFCQUF0QixHQUE4QyxHQUE5QyxJQUFxRCxPQUF6RCxFQUFrRTtBQUM5RCxzQ0FBc0IsU0FBdEIsQ0FBZ0MsR0FBaEMsQ0FBb0MsY0FBcEM7QUFDSCxhQUZELE1BRU87QUFDSCxzQ0FBc0IsU0FBdEIsQ0FBZ0MsTUFBaEMsQ0FBdUMsY0FBdkM7QUFDSDtBQUNKO0FBQ0o7O0FBRUQsYUFBUyxnQkFBVCxHQUE2QjtBQUN6QjtBQUNBLFlBQUksd0JBQUo7QUFDQSxVQUFFLHdCQUFGLEVBQTRCLElBQTVCLENBQWlDLFlBQVk7QUFDekMsZ0JBQUksRUFBRSxJQUFGLEVBQVEsWUFBUixFQUFKLEVBQTRCO0FBQ3hCLG9CQUFJLG9CQUFvQixTQUFwQixJQUFpQyxFQUFFLElBQUYsRUFBUSxRQUFSLEdBQW1CLEdBQW5CLEdBQXlCLEVBQUUsZUFBRixFQUFtQixRQUFuQixHQUE4QixHQUE1RixFQUFpRztBQUM3RixzQ0FBa0IsSUFBbEI7QUFDSDtBQUNKO0FBQ0osU0FORDs7QUFRQTtBQUNBLFlBQUksUUFBUSxFQUFFLGVBQUYsRUFBbUIsSUFBbkIsQ0FBd0IsV0FBeEIsQ0FBWjtBQUNBLFlBQUksT0FBTyxLQUFQLEtBQWlCLFdBQXJCLEVBQWtDO0FBQzlCLGdCQUFJLHlCQUF5QixNQUF6QixJQUFtQyx5QkFBeUIsTUFBekIsQ0FBZ0MsTUFBdkUsRUFBK0U7QUFDM0UseUNBQXlCLE9BQXpCLENBQWlDLENBQWpDO0FBQ0Esa0JBQUUsZUFBRixFQUFtQixXQUFuQixDQUErQixjQUEvQjtBQUNBLGtCQUFFLCtCQUFGLEVBQW1DLFFBQW5DLENBQTRDLGNBQTVDO0FBQ0g7QUFDSixTQU5ELE1BTU87QUFDSCxnQkFBSSxNQUFNLEVBQUUsY0FBYyxLQUFkLEdBQXNCLElBQXhCLENBQVY7O0FBRUEscUNBQXlCLE9BQXpCLENBQWlDLElBQUksS0FBSixFQUFqQztBQUNBLGNBQUUsZUFBRixFQUFtQixXQUFuQixDQUErQixjQUEvQjtBQUNBLGdCQUFJLFFBQUosQ0FBYSxjQUFiO0FBQ0g7QUFDSjs7QUFHRCxRQUFNLG1CQUFtQixTQUFuQixnQkFBbUIsQ0FBQyxjQUFELEVBQW9CO0FBQ3pDLFlBQUksY0FBSixFQUFvQjtBQUNoQixnQkFBTSxpQkFBaUIsZUFBZSxxQkFBZixFQUF2QjtBQUNBLGdCQUFNLFlBQVksa0JBQWtCLGdCQUFnQixxQkFBaEIsR0FBd0MsTUFBMUQsR0FBbUUsQ0FBckY7QUFDQTtBQUNBO0FBQ0EsZ0JBQU0sa0JBQWtCLE9BQU8sT0FBUCxHQUFpQixPQUFPLFdBQWhELENBTGdCLENBSzRDO0FBQzVELGdCQUFNLGVBQWUsa0JBQWtCLGVBQWUsR0FBakMsR0FBdUMsU0FBNUQ7QUFDQSxvQkFBUSxHQUFSLENBQVksaUJBQWlCLFlBQWpCLEdBQWdDLEdBQTVDO0FBQ0Esb0JBQVEsR0FBUixDQUFZLFlBQVo7QUFDQSxtQkFBTyxRQUFQLENBQWdCLENBQWhCLEVBQW1CLFlBQW5CLEVBVGdCLENBU2lCO0FBQ3BDO0FBQ0osS0FaRDs7QUFjQTtBQUNBLFFBQU0sY0FBYyxTQUFTLGdCQUFULENBQTBCLG1DQUExQixDQUFwQjtBQUNBLFNBQUssSUFBSSxDQUFULElBQWMsV0FBZCxFQUEyQjtBQUN2QixZQUFNLGFBQWEsWUFBWSxDQUFaLENBQW5CO0FBQ0EsWUFBSSxRQUFPLFVBQVAseUNBQU8sVUFBUCxPQUFzQixRQUExQixFQUFvQztBQUNoQyx1QkFBVyxnQkFBWCxDQUE0QixPQUE1QixFQUFxQyxZQUFZO0FBQzdDLG9CQUFNLGFBQWEsS0FBSyxPQUFMLENBQWEsUUFBaEM7QUFDQSxvQkFBSSxVQUFKLEVBQWdCO0FBQ1osd0JBQUksWUFBWSxJQUFoQjtBQUNBLHdCQUFJLGVBQWUsR0FBbkIsRUFBd0I7QUFBRTtBQUN0QixvQ0FBWSxTQUFTLGNBQVQsQ0FBd0IsVUFBeEIsQ0FBWjtBQUNIO0FBQ0Qsd0JBQUksQ0FBQyxTQUFMLEVBQWdCO0FBQUU7QUFDZCxvQ0FBWSxTQUFTLGFBQVQsQ0FBdUIsNEJBQXZCLENBQVo7QUFDQSw0QkFBSSxDQUFDLFNBQUwsRUFBZ0I7QUFBRTtBQUNkLHdDQUFZLFNBQVMsYUFBVCxDQUF1QixnQkFBdkIsQ0FBWjtBQUNIO0FBQ0o7QUFDRCxxQ0FBaUIsU0FBakI7QUFDQSw0QkFBUSxZQUFSLENBQXFCLElBQXJCLEVBQTJCLElBQTNCLEVBQWlDLEVBQUUsSUFBRixFQUFRLElBQVIsQ0FBYSxNQUFiLENBQWpDO0FBQ0g7QUFDSixhQWhCRDtBQWlCSDtBQUNKOztBQUVEOzs7OztBQUtBLFdBQU8sU0FBUCxHQUFtQixPQUFPLFNBQVAsSUFBb0IsRUFBdkM7QUFDQSxhQUFTLElBQVQsR0FBaUI7QUFBRSxrQkFBVSxJQUFWLENBQWUsU0FBZjtBQUEyQjs7QUFFOUMsUUFBSSwyQkFBMkIsS0FBL0I7QUFDQSxRQUFJLDhCQUFKOztBQUVBLFFBQU0sdUJBQXVCLFNBQXZCLG9CQUF1QixDQUFDLFFBQUQsRUFBYzs7QUFFdkMsWUFBSSxDQUFDLHdCQUFMLEVBQStCO0FBQzNCLG9DQUF3QixRQUF4QjtBQUNIO0FBQ0osS0FMRDs7QUFPQSxRQUFJLDZCQUE2QixLQUFqQztBQUNBLFFBQUksZ0NBQUo7QUFDQSxRQUFNLHlCQUF5QixTQUF6QixzQkFBeUIsQ0FBQyxRQUFELEVBQWM7QUFDekMsWUFBSSxDQUFDLFFBQUwsRUFBZTtBQUNmLFlBQUksQ0FBQywwQkFBTCxFQUFpQztBQUM3QixzQ0FBMEIsUUFBMUI7QUFDSDs7QUFFRCxZQUFNLGFBQWEsYUFBYSxNQUFoQzs7QUFFQSxhQUFLLFNBQUwsRUFBZ0IsUUFBaEIsRUFBMEI7QUFDeEIsMEJBQWMsYUFBYSxTQUFiLEdBQXlCLFFBRGY7QUFFeEIsZ0NBQW9CLGFBQWEsU0FBYixHQUF5QixRQUZyQjtBQUd4Qix3QkFBWSxhQUFhLFNBQWIsR0FBeUIsUUFIYjtBQUl4QiwrQkFBbUIsYUFBYSxTQUFiLEdBQXlCO0FBSnBCLFNBQTFCO0FBTUEsZUFBTyxTQUFQLENBQWlCLElBQWpCLENBQXNCLEVBQUUsT0FBTyxVQUFULEVBQXRCO0FBQ0gsS0FmRDs7QUFpQkE7OztBQUdBLFFBQUksK0JBQStCLEtBQW5DO0FBQ0EsUUFBTSwrQkFBK0IsU0FBL0IsNEJBQStCLENBQUMsYUFBRCxFQUFtQjtBQUNwRCxZQUFJLENBQUMsNEJBQUwsRUFBbUM7QUFDL0IsbUJBRCtCLENBQ3hCO0FBQ1Y7QUFDRCxZQUFNLGFBQWEsa0JBQWtCLE1BQXJDO0FBQ0EsYUFBSyxTQUFMLEVBQWdCLFFBQWhCLEVBQTBCO0FBQ3hCLDBCQUFjLGFBQWEsU0FBYixHQUF5QixRQURmO0FBRXhCLGdDQUFvQixhQUFhLFNBQWIsR0FBeUIsUUFGckI7QUFHeEIsd0JBQVksYUFBYSxTQUFiLEdBQXlCLFFBSGI7QUFJeEIsK0JBQW1CLGFBQWEsU0FBYixHQUF5QjtBQUpwQixTQUExQjtBQU1BLGVBQU8sU0FBUCxDQUFpQixJQUFqQixDQUFzQixFQUFFLE9BQU8sVUFBVCxFQUF0QjtBQUNILEtBWkQ7O0FBY0EsUUFBSSxpQ0FBaUMsS0FBckM7QUFDQSxRQUFNLGlDQUFpQyxTQUFqQyw4QkFBaUMsQ0FBQyxhQUFELEVBQW1CO0FBQ3RELFlBQUksQ0FBQyw4QkFBTCxFQUFxQztBQUNqQztBQUNIO0FBQ0QsWUFBTSxhQUFhLGtCQUFrQixNQUFyQztBQUNBLGFBQUssU0FBTCxFQUFnQixRQUFoQixFQUEwQjtBQUN4QiwwQkFBYyxhQUFhLFNBQWIsR0FBeUIsUUFEZjtBQUV4QixnQ0FBb0IsYUFBYSxTQUFiLEdBQXlCLFFBRnJCO0FBR3hCLHdCQUFZLGFBQWEsU0FBYixHQUF5QixRQUhiO0FBSXhCLCtCQUFtQixhQUFhLFNBQWIsR0FBeUI7QUFKcEIsU0FBMUI7QUFNQSxlQUFPLFNBQVAsQ0FBaUIsSUFBakIsQ0FBc0IsRUFBRSxPQUFPLFVBQVQsRUFBdEI7QUFDSCxLQVpEOztBQWNBLFFBQU0sMkJBQTJCLFNBQVMsYUFBVCxDQUF1QiwrQkFBdkIsQ0FBakM7QUFDQSxRQUNJLDRCQUNBLE9BQU8scUJBQVAsS0FBaUMsV0FGckMsRUFHRTtBQUNFO0FBQ0EsWUFBSSx5QkFBSixDQUFtQjtBQUNmLHdCQUFZLHdCQURHO0FBRWYsa0JBQU0scUJBRlMsRUFFYztBQUM3QiwyQkFBZSxrQkFBTyxhQUhQO0FBSWYsNEJBQWdCO0FBSkQsU0FBbkI7QUFNQSx1Q0FBK0IsSUFBL0I7QUFDSDs7QUFFRCxRQUFNLG1DQUFtQyxTQUFTLGFBQVQsQ0FBdUIsK0JBQXZCLENBQXpDO0FBQ0EsUUFBSSxvQ0FBSjtBQUNBLFFBQUksb0NBQ0EsT0FBTyw4QkFBUCxLQUEwQyxXQUQ5QyxFQUMyRDtBQUN2RCx5Q0FBaUMsZ0JBQWpDLENBQWtELE9BQWxELEVBQTJELFVBQUMsS0FBRCxFQUFrQjtBQUN6RSxrQkFBTSxjQUFOOztBQUVBLGdCQUFJLENBQUMsMkJBQUwsRUFBa0M7QUFDOUIsOENBQThCLElBQUksaUNBQUosQ0FBMkI7QUFDckQsK0JBQVcsQ0FBQyxhQUFELENBRDBDO0FBRXJEO0FBQ0EsNEhBQWtHLCtCQUErQixXQUFqSSxnQkFIcUQ7QUFJckQsb0NBQWdCLDhCQUpxQztBQUtyRCx1Q0FBbUIsK0JBQStCLGFBTEc7QUFNckQsNkJBQVM7QUFDTCx1Q0FBZSwrQkFBK0IsaUJBRHpDO0FBRUwsMENBQWtCLCtCQUErQjtBQUY1QyxxQkFONEM7QUFVckQsOEJBQVUsQ0FDTjtBQUNJLG1DQUFXLEdBRGY7QUFFSSw2Q0FBcUIsS0FGekI7QUFHSSxzQ0FBYyxJQUhsQjtBQUlJLDRDQUFvQiwrQkFBK0IsdUJBSnZEO0FBS0ksc0NBQWMsK0JBQStCO0FBTGpELHFCQURNLEVBUU47QUFDSSxtQ0FBVyxHQURmO0FBRUksc0NBQWMsK0JBQStCLGlCQUZqRDtBQUdJLDZDQUFxQixJQUh6QjtBQUlJLDRDQUFvQiwrQkFBK0I7QUFKdkQscUJBUk0sRUFjTjtBQUNJLG1DQUFXLEdBRGY7QUFFSSxzQ0FBYywrQkFBK0IsaUJBRmpEO0FBR0ksNkNBQXFCLElBSHpCO0FBSUksNENBQW9CLCtCQUErQjtBQUp2RCxxQkFkTSxFQW9CTjtBQUNJLG1DQUFXLEdBRGY7QUFFSSxzQ0FBYywrQkFBK0IsaUJBRmpEO0FBR0ksNkNBQXFCLElBSHpCO0FBSUksNENBQW9CLCtCQUErQjtBQUp2RCxxQkFwQk07QUFWMkMsaUJBQTNCLENBQTlCO0FBc0NIOztBQUVELGdCQUFJLDJCQUFKLEVBQWlDO0FBQzdCLGlEQUFpQyxJQUFqQztBQUNBLDRDQUE0QixNQUE1QjtBQUNIO0FBQ0osU0FoREQ7QUFpREg7O0FBRUQ7Ozs7OztBQU1JO0FBQ0osUUFBTSxZQUFZLEtBQUssRUFBTCxLQUFZLEdBQTlCOztBQUVBLFFBQUksQ0FBQyxTQUFMLEVBQWdCO0FBQ1osWUFBTSx1QkFBdUIsU0FBUyxhQUFULENBQXVCLFlBQXZCLENBQTdCOztBQUVBLFlBQUksb0JBQUosRUFBMEI7QUFDdEIsZ0JBQU0sYUFBYSxJQUFJLHFCQUFKLENBQWU7QUFDOUIsNEJBQVksb0JBRGtCO0FBRTlCLDZCQUFhLHFCQUFxQixZQUFyQixDQUFrQyxtQkFBbEMsQ0FGaUI7QUFHOUIscUJBQUsscUJBQXFCLFlBQXJCLENBQWtDLFVBQWxDLENBSHlCO0FBSTlCLHlCQUFTLHFCQUFxQixZQUFyQixDQUFrQyxlQUFsQyxDQUpxQjtBQUs5Qiw0QkFBWSxxQkFBcUIsWUFBckIsQ0FBa0Msa0JBQWxDLENBTGtCO0FBTTlCLG1DQUFtQixJQU5XO0FBTzlCLHdDQUF3QixxQkFBcUIsWUFBckIsQ0FBa0MsK0JBQWxDLENBUE07QUFROUIsZ0NBQWdCLHFCQUFxQixZQUFyQixDQUFrQyx1QkFBbEMsQ0FSYztBQVM5Qiw0Q0FBNEIscUJBQXFCLFlBQXJCLENBQWtDLG9DQUFsQyxDQVRFO0FBVTlCLGdDQUFnQjtBQVZjLGFBQWYsQ0FBbkI7QUFZQSxtQkFBTyxHQUFQLENBQVcsVUFBWCxDQUFzQixVQUF0QixHQUFtQyxVQUFuQztBQUNBLHVDQUEyQixJQUEzQjtBQUNIO0FBQ0osS0FuQkQsTUFtQk87QUFDSCxZQUFNLCtCQUErQixTQUFTLGFBQVQsQ0FBdUIscUJBQXZCLENBQXJDO0FBQ0EsWUFBSSxlQUFlLGdDQUFnQyw2QkFBNkIsWUFBN0IsQ0FBMEMsc0NBQTFDLENBQWhDLEdBQ2IsNkJBQTZCLFlBQTdCLENBQTBDLHNDQUExQyxDQURhLEdBQ3VFLEVBRDFGO0FBRUEsWUFBSSxpQkFBaUIsZ0NBQWdDLDZCQUE2QixZQUE3QixDQUEwQyx3Q0FBMUMsQ0FBaEMsR0FDZiw2QkFBNkIsWUFBN0IsQ0FBMEMsd0NBQTFDLENBRGUsR0FDdUUsRUFENUY7QUFFQTtBQUNBLFlBQUksQ0FBQyxZQUFMLEVBQW1CO0FBQ2YsMkJBQWUsRUFBZjtBQUNIOztBQUVELFlBQUksQ0FBQyxjQUFMLEVBQXFCO0FBQ2pCLDZCQUFpQixFQUFqQjtBQUNIOztBQUVELFlBQUksNEJBQUosRUFBa0M7QUFDOUIsZ0JBQU0scUJBQXFCLElBQUksNkJBQUosQ0FBdUI7QUFDOUMsNEJBQVksNEJBRGtDO0FBRTlDLGtDQUFrQiw2QkFBNkIsWUFBN0IsQ0FBMEMsdUJBQTFDLENBRjRCO0FBRzlDLGtDQUFrQjtBQUNkLHFDQUFpQjtBQUNiLHFDQUFhLDZCQUE2QixZQUE3QixDQUEwQywwQkFBMUMsQ0FEQTtBQUViLG9DQUFZLDZCQUE2QixZQUE3QixDQUEwQyx1Q0FBMUMsQ0FGQztBQUdiLHFDQUFhLDZCQUE2QixZQUE3QixDQUEwQyw2QkFBMUMsQ0FIQTtBQUliLGdEQUF3Qiw2QkFBNkIsWUFBN0IsQ0FBMEMsNkNBQTFDLENBSlg7QUFLYixvREFBNEIsNkJBQTZCLFlBQTdCLENBQTBDLDZDQUExQyxDQUxmO0FBTWIsd0NBQWdCLDZCQUE2QixZQUE3QixDQUEwQyx1Q0FBMUMsQ0FOSDtBQU9iLHFDQUFhLDZCQUE2QixZQUE3QixDQUEwQywyQkFBMUMsQ0FQQTtBQVFiLHVDQUFlO0FBQ1gsa0lBQWdHLFlBQWhHLGdCQURXO0FBRVgsc0NBQVUsMkJBRkM7QUFHWCwwQ0FBYyx1QkFISDtBQUlYLDRDQUFnQix5QkFKTDtBQUtYLCtDQUFtQiw2QkFBNkIsWUFBN0IsQ0FBMEMsd0NBQTFDLENBTFI7QUFNWCw2Q0FBaUIsNkJBQTZCLFlBQTdCLENBQTBDLG1EQUExQyxDQU5OO0FBT1gsZ0RBQW9CLDZCQUE2QixZQUE3QixDQUEwQyxzREFBMUMsQ0FQVDtBQVFYLHNDQUFVLENBQ047QUFDSSwyQ0FBVyxHQURmO0FBRUksOENBQWMsNkJBQTZCLFlBQTdCLENBQTBDLGdDQUExQyxDQUZsQjtBQUdJLHFEQUFxQixLQUh6QjtBQUlJLDhDQUFjLElBSmxCO0FBS0ksb0RBQW9CLDZCQUE2QixZQUE3QixDQUEwQyxzQ0FBMUM7QUFMeEIsNkJBRE0sRUFRTjtBQUNJLDJDQUFXLEdBRGY7QUFFSSw4Q0FBYyw2QkFBNkIsWUFBN0IsQ0FBMEMsZ0NBQTFDLENBRmxCO0FBR0kscURBQXFCLElBSHpCO0FBSUksOENBQWMsS0FKbEI7QUFLSSxvREFBb0IsNkJBQTZCLFlBQTdCLENBQTBDLHNDQUExQztBQUx4Qiw2QkFSTSxFQWVOO0FBQ0ksMkNBQVcsR0FEZjtBQUVJLDhDQUFjLDZCQUE2QixZQUE3QixDQUEwQyxnQ0FBMUMsQ0FGbEI7QUFHSSxxREFBcUIsSUFIekI7QUFJSSw4Q0FBYyxLQUpsQjtBQUtJLG9EQUFvQiw2QkFBNkIsWUFBN0IsQ0FBMEMsc0NBQTFDO0FBTHhCLDZCQWZNLEVBc0JOO0FBQ0ksMkNBQVcsR0FEZjtBQUVJLDhDQUFjLDZCQUE2QixZQUE3QixDQUEwQyxnQ0FBMUMsQ0FGbEI7QUFHSSxxREFBcUIsSUFIekI7QUFJSSw4Q0FBYyxLQUpsQjtBQUtJLG9EQUFvQiw2QkFBNkIsWUFBN0IsQ0FBMEMsc0NBQTFDO0FBTHhCLDZCQXRCTTtBQVJDO0FBUkYscUJBREg7QUFpRGQsdUNBQW1CO0FBQ2YscUNBQWEsNkJBQTZCLFlBQTdCLENBQTBDLDRCQUExQyxDQURFO0FBRWYsb0NBQVksNkJBQTZCLFlBQTdCLENBQTBDLHlDQUExQyxDQUZHO0FBR2YscUNBQWEsNkJBQTZCLFlBQTdCLENBQTBDLCtCQUExQyxDQUhFO0FBSWYsZ0RBQXdCLDZCQUE2QixZQUE3QixDQUEwQywrQ0FBMUMsQ0FKVDtBQUtmLG9EQUE0Qiw2QkFBNkIsWUFBN0IsQ0FBMEMsK0NBQTFDLENBTGI7QUFNZix3Q0FBZ0IsNkJBQTZCLFlBQTdCLENBQTBDLHlDQUExQyxDQU5EO0FBT2YscUNBQWEsNkJBQTZCLFlBQTdCLENBQTBDLDZCQUExQyxDQVBFO0FBUWYsdUNBQWU7QUFDWCxrSUFBZ0csY0FBaEcsZ0JBRFc7QUFFWCxzQ0FBVSwyQkFGQztBQUdYLDBDQUFjLHVCQUhIO0FBSVgsNENBQWdCLHlCQUpMO0FBS1gsK0NBQW1CLDZCQUE2QixZQUE3QixDQUEwQywwQ0FBMUMsQ0FMUjtBQU1YLDZDQUFpQiw2QkFBNkIsWUFBN0IsQ0FBMEMscURBQTFDLENBTk47QUFPWCxnREFBb0IsNkJBQTZCLFlBQTdCLENBQTBDLHdEQUExQyxDQVBUO0FBUVgsc0NBQVUsQ0FDTjtBQUNJLDJDQUFXLEdBRGY7QUFFSSw4Q0FBYyw2QkFBNkIsWUFBN0IsQ0FBMEMsa0NBQTFDLENBRmxCO0FBR0kscURBQXFCLEtBSHpCO0FBSUksOENBQWMsSUFKbEI7QUFLSSxvREFBb0IsNkJBQTZCLFlBQTdCLENBQTBDLHdDQUExQztBQUx4Qiw2QkFETSxFQVFOO0FBQ0ksMkNBQVcsR0FEZjtBQUVJLDhDQUFjLDZCQUE2QixZQUE3QixDQUEwQyxrQ0FBMUMsQ0FGbEI7QUFHSSxxREFBcUIsSUFIekI7QUFJSSw4Q0FBYyxLQUpsQjtBQUtJLG9EQUFvQiw2QkFBNkIsWUFBN0IsQ0FBMEMsd0NBQTFDO0FBTHhCLDZCQVJNLEVBZU47QUFDSSwyQ0FBVyxHQURmO0FBRUksOENBQWMsNkJBQTZCLFlBQTdCLENBQTBDLGtDQUExQyxDQUZsQjtBQUdJLHFEQUFxQixJQUh6QjtBQUlJLDhDQUFjLEtBSmxCO0FBS0ksb0RBQW9CLDZCQUE2QixZQUE3QixDQUEwQyx3Q0FBMUM7QUFMeEIsNkJBZk0sRUFzQk47QUFDSSwyQ0FBVyxHQURmO0FBRUksOENBQWMsNkJBQTZCLFlBQTdCLENBQTBDLGtDQUExQyxDQUZsQjtBQUdJLHFEQUFxQixJQUh6QjtBQUlJLDhDQUFjLEtBSmxCO0FBS0ksb0RBQW9CLDZCQUE2QixZQUE3QixDQUEwQyx3Q0FBMUM7QUFMeEIsNkJBdEJNO0FBUkM7QUFSQTtBQWpETCxpQkFINEI7QUFxRzlDLGdDQUFnQjtBQXJHOEIsYUFBdkIsQ0FBM0I7QUF1R0EsbUJBQU8sR0FBUCxDQUFXLFVBQVgsQ0FBc0Isa0JBQXRCLEdBQTJDLGtCQUEzQztBQUNBLHlDQUE2QixJQUE3QjtBQUNIO0FBQ0o7O0FBRUQsUUFBTSxhQUFhLFNBQVMsYUFBVCxDQUF1QixZQUF2QixDQUFuQjtBQUNBLFFBQUksc0JBQXNCLFdBQTFCLEVBQXVDO0FBQ3JDLG1CQUFXLGdCQUFYLENBQTRCLE9BQTVCLEVBQXFDLFlBQVk7QUFDL0MsZ0JBQU0sUUFBUSxJQUFJLHdCQUFKLEVBQWQ7QUFDQSxrQkFBTSxJQUFOO0FBQ0QsU0FIRDtBQUlEO0FBQ0osQ0ExYkQ7Ozs7Ozs7UUNhZ0IsYyxHQUFBLGM7UUFXQSxVLEdBQUEsVTtRQUlBLFcsR0FBQSxXO1FBZUEsYyxHQUFBLGM7UUFXQSxrQixHQUFBLGtCO1FBaUJBLGUsR0FBQSxlO1FBcUNBLEssR0FBQSxLO1FBWUEsWSxHQUFBLFk7UUFTQSxvQixHQUFBLG9CO1FBOENBLFksR0FBQSxZO1FBT0EsWSxHQUFBLFk7O0FBbE1oQjs7OztBQUNBOzs7Ozs7QUFFQTs7O0FBR0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQk8sU0FBUyxjQUFULENBQXlCLFNBQXpCLEVBQW9DLE1BQXBDLEVBQTRDLFFBQTVDLEVBQXNELGFBQXRELEVBQTJGO0FBQUEsTUFBdEIsUUFBc0IsdUVBQVgsU0FBVzs7QUFDaEcsTUFBTSxJQUFJLFFBQVEsS0FBbEI7QUFDQSxVQUFRLEtBQVIsR0FBZ0IsZUFBTztBQUFFLFVBQU0sSUFBSSxLQUFKLENBQVUsR0FBVixDQUFOO0FBQXNCLEdBQS9DO0FBQ0E7QUFDQTtBQUNBLHNCQUFVLGlCQUFWO0FBQ0Esc0JBQVUsY0FBVixDQUF5QixTQUF6QixFQUFvQyxNQUFwQyxFQUE0QyxRQUE1QyxFQUFzRCxhQUF0RCxFQUFxRSxRQUFyRTtBQUNBLFVBQVEsS0FBUixHQUFnQixDQUFoQjtBQUNEOztBQUdNLFNBQVMsVUFBVCxDQUFxQixHQUFyQixFQUEwQjtBQUMvQixTQUFPLE9BQU8sSUFBUCxDQUFZLEdBQVosRUFBaUIsTUFBakIsS0FBNEIsQ0FBNUIsSUFBaUMsSUFBSSxXQUFKLEtBQW9CLE1BQTVEO0FBQ0Q7O0FBRU0sU0FBUyxXQUFULEdBQXdCO0FBQzdCLE1BQU0sWUFBWSxVQUFVLFNBQVYsSUFBdUIsVUFBVSxNQUFqQyxJQUEyQyxPQUFPLEtBQXBFO0FBQ0EsU0FBTztBQUNMLGVBQVc7QUFBQSxhQUFNLFlBQVcsSUFBWCxDQUFnQixTQUFoQjtBQUFOO0FBQUEsS0FETjtBQUVMLFdBQU87QUFBQSxhQUFNLG9CQUFtQixJQUFuQixDQUF3QixTQUF4QixLQUFzQyxDQUFDLE9BQU87QUFBcEQ7QUFBQSxLQUZGLENBRStEO0FBRi9ELEdBQVA7QUFJRDs7QUFFRDs7Ozs7OztBQU9PLFNBQVMsY0FBVCxDQUF5QixPQUF6QixFQUFrQyxRQUFsQyxFQUE0QyxNQUE1QyxFQUFvRDtBQUN6RCxNQUFNLE9BQVEsRUFBRCxDQUFLLFFBQUwsQ0FBYyxJQUFkLENBQW1CLE1BQW5CLEVBQTJCLEtBQTNCLENBQWlDLEdBQWpDLEVBQXNDLENBQXRDLEVBQXlDLEtBQXpDLENBQStDLENBQS9DLEVBQWtELENBQUMsQ0FBbkQsQ0FBYjtBQUNBLFFBQU0sSUFBSSxTQUFKLFlBQXVCLE9BQXZCLDBCQUFtRCxRQUFuRCxZQUFrRSxJQUFsRSxhQUFOO0FBQ0Q7O0FBRUQ7Ozs7OztBQU1PLFNBQVMsa0JBQVQsQ0FBNkIsR0FBN0IsRUFBa0MsWUFBbEMsRUFBZ0Q7QUFDckQsTUFBTSxjQUFjLGFBQWEsTUFBYixDQUFvQjtBQUFBLFdBQVEsQ0FBQyxJQUFJLGNBQUosQ0FBbUIsSUFBbkIsQ0FBVDtBQUFBLEdBQXBCLENBQXBCOztBQUVBLE1BQUksWUFBWSxNQUFoQixFQUF3QjtBQUN0QixVQUFNLElBQUksS0FBSixxQ0FBNEMsWUFBWSxJQUFaLENBQWlCLE1BQWpCLENBQTVDLFFBQU47QUFDRDtBQUNGOztBQUVEOzs7Ozs7Ozs7QUFTTyxTQUFTLGVBQVQsQ0FBMEIsS0FBMUIsRUFBaUMsT0FBakMsRUFBMEM7QUFDL0MsTUFBTSxLQUFLLFNBQVMsYUFBVCxDQUF1QixVQUF2QixDQUFYO0FBQ0EsS0FBRyxLQUFILEdBQVcsS0FBWDtBQUNBLEtBQUcsWUFBSCxDQUFnQixVQUFoQixFQUE0QixFQUE1QjtBQUNBLEtBQUcsS0FBSCxDQUFTLFFBQVQsR0FBb0IsVUFBcEI7QUFDQSxLQUFHLEtBQUgsQ0FBUyxJQUFULEdBQWdCLFVBQWhCO0FBQ0EsTUFBSSxlQUFlLFNBQVMsSUFBNUI7QUFDQTtBQUNBLE1BQUksV0FBVyxPQUFPLFFBQVEsV0FBZixLQUErQixVQUE5QyxFQUEwRDtBQUN4RCxtQkFBZSxPQUFmO0FBQ0Q7QUFDRCxlQUFhLFdBQWIsQ0FBeUIsRUFBekI7QUFDQSxNQUFNLFdBQ0osU0FBUyxZQUFULEdBQXdCLFVBQXhCLEdBQXFDLENBQXJDLEdBQ0ksU0FBUyxZQUFULEdBQXdCLFVBQXhCLENBQW1DLENBQW5DLENBREosR0FFSSxLQUhOOztBQUtBLE1BQUksY0FBYyxLQUFkLEVBQUosRUFBMkI7QUFDekI7QUFDQTtBQUNBLE9BQUcsaUJBQUgsQ0FBcUIsQ0FBckIsRUFBd0IsTUFBeEI7QUFDRCxHQUpELE1BSU87QUFDTCxPQUFHLE1BQUg7QUFDRDs7QUFFRCxXQUFTLFdBQVQsQ0FBcUIsTUFBckI7QUFDQSxlQUFhLFdBQWIsQ0FBeUIsRUFBekI7QUFDQSxNQUFJLFFBQUosRUFBYztBQUNaLGFBQVMsWUFBVCxHQUF3QixlQUF4QjtBQUNBLGFBQVMsWUFBVCxHQUF3QixRQUF4QixDQUFpQyxRQUFqQztBQUNEO0FBQ0Y7O0FBRUQ7Ozs7QUFJTyxTQUFTLEtBQVQsQ0FBZ0IsRUFBaEIsRUFBb0I7QUFDekIsTUFBSSxTQUFTLFVBQVQsS0FBd0IsU0FBNUIsRUFBdUM7QUFDckM7QUFDRCxHQUZELE1BRU87QUFDTCxhQUFTLGdCQUFULENBQTBCLGtCQUExQixFQUE4QyxFQUE5QztBQUNEO0FBQ0Y7O0FBRUQ7Ozs7QUFJTyxTQUFTLFlBQVQsQ0FBdUIsRUFBdkIsRUFBMkI7QUFDaEMsU0FBTyxnQkFBUCxDQUF3QixNQUF4QixFQUFnQyxFQUFoQztBQUNEOztBQUVEOzs7OztBQUtPLFNBQVMsb0JBQVQsT0FBaUQ7QUFBQSxNQUFoQixZQUFnQixRQUFoQixZQUFnQjs7QUFDdEQsTUFBSSxhQUFhLGFBQWIsQ0FBMkIsa0JBQTNCLENBQUosRUFBb0Q7QUFDbEQ7QUFDRDtBQUNELE1BQUksb0JBQW9CLE1BQU0sSUFBTixDQUFXLGFBQWEsZ0JBQWIsK1FBQVgsRUFTcEIsTUFUb0IsQ0FTYixtQkFBVztBQUNwQixXQUFPLFFBQVEsV0FBUixHQUFzQixDQUF0QixJQUEyQixRQUFRLFlBQVIsR0FBdUIsQ0FBekQ7QUFDRCxHQVh1QixDQUF4Qjs7QUFhQSxzQkFBb0Isa0JBQWtCLE1BQWxCLENBQXlCLG1CQUFXO0FBQ3REO0FBQ0EsUUFBSSxRQUFRLFdBQVIsR0FBc0IsQ0FBdEIsSUFBMkIsUUFBUSxZQUFSLEdBQXVCLENBQXRELEVBQXlEO0FBQ3ZELGFBQU8sSUFBUDtBQUNEO0FBQ0YsR0FMbUIsQ0FBcEI7O0FBT0EsTUFBTSx1QkFBdUIsa0JBQWtCLGtCQUFrQixNQUFsQixHQUEyQixDQUE3QyxDQUE3QjtBQUNBLE1BQU0sd0JBQXdCLGtCQUFrQixDQUFsQixDQUE5Qjs7QUFFQSx1QkFBcUIsZ0JBQXJCLENBQXNDLFNBQXRDLEVBQWlELFVBQUMsS0FBRCxFQUFXO0FBQzFELFFBQUksTUFBTSxPQUFOLEtBQWtCLGtCQUFRLEdBQTFCLElBQWlDLENBQUMsTUFBTSxRQUE1QyxFQUFzRDtBQUNwRCxZQUFNLGNBQU47QUFDQSxZQUFNLGVBQU47QUFDQSw0QkFBc0IsS0FBdEI7QUFDRDtBQUNGLEdBTkQ7O0FBUUEsd0JBQXNCLGdCQUF0QixDQUF1QyxTQUF2QyxFQUFrRCxVQUFDLEtBQUQsRUFBVztBQUMzRCxRQUFJLE1BQU0sT0FBTixLQUFrQixrQkFBUSxHQUExQixJQUFpQyxNQUFNLFFBQTNDLEVBQXFEO0FBQ25ELFlBQU0sY0FBTjtBQUNBLFlBQU0sZUFBTjtBQUNBLDJCQUFxQixLQUFyQjtBQUNEO0FBQ0YsR0FORDs7QUFRQSx3QkFBc0IsS0FBdEI7QUFDRDs7QUFFTSxTQUFTLFlBQVQsR0FBeUI7QUFDOUIsU0FBTyx1Q0FBdUMsT0FBdkMsQ0FBK0MsT0FBL0MsRUFBd0QsVUFBQyxDQUFELEVBQU87QUFDcEUsUUFBTSxJQUFJLEtBQUssTUFBTCxLQUFnQixFQUFoQixHQUFxQixDQUEvQixDQUFrQyxJQUFNLElBQUksTUFBTSxHQUFOLEdBQVksQ0FBWixHQUFpQixJQUFJLEdBQUosR0FBVSxHQUFyQztBQUNsQyxXQUFPLEVBQUUsUUFBRixDQUFXLEVBQVgsQ0FBUDtBQUNELEdBSE0sQ0FBUDtBQUlEOztBQUVNLFNBQVMsWUFBVCxDQUF1QixHQUF2QixFQUE0QjtBQUNqQyxNQUFJO0FBQ0YsU0FBSyxLQUFMLENBQVcsR0FBWDtBQUNELEdBRkQsQ0FFRSxPQUFPLENBQVAsRUFBVTtBQUNWLFlBQVEsS0FBUixDQUFjLHdCQUFkO0FBQ0EsV0FBTyxLQUFQO0FBQ0Q7QUFDRCxTQUFPLElBQVA7QUFDRDs7QUFFRDs7Ozs7Ozs7O0FBU08sSUFBTSwwREFBeUIsU0FBekIsc0JBQXlCLENBQUMsU0FBRCxFQUFlO0FBQ25ELFNBQU8sVUFBVSxHQUFWLENBQWM7QUFBQSxXQUFZLFNBQVMsYUFBVCxDQUF1QixRQUF2QixDQUFaO0FBQUEsR0FBZCxDQUFQO0FBQ0QsQ0FGTTs7QUFJUDs7OztBQUlPLElBQU0sNENBQWtCLFNBQWxCLGVBQWtCLENBQUMsSUFBRCxFQUFVO0FBQ3ZDLE1BQUksQ0FBQyxJQUFELElBQVMsT0FBTyxJQUFQLEtBQWdCLFFBQTdCLEVBQXVDO0FBQ25DLFdBQU8sSUFBUDtBQUNIOztBQUVELE1BQUk7QUFDQSxRQUFNLGNBQWMsU0FBUyxNQUFULENBQ2YsS0FEZSxDQUNULEdBRFMsRUFFZixHQUZlLENBRVg7QUFBQSxhQUFVLE9BQU8sSUFBUCxFQUFWO0FBQUEsS0FGVyxFQUdmLElBSGUsQ0FHVjtBQUFBLGFBQVUsT0FBTyxVQUFQLENBQXFCLElBQXJCLE9BQVY7QUFBQSxLQUhVLENBQXBCOztBQUtBLFdBQU8sY0FBYyxZQUFZLFNBQVosQ0FBc0IsS0FBSyxNQUFMLEdBQWMsQ0FBcEMsQ0FBZCxHQUF1RCxJQUE5RDtBQUNILEdBUEQsQ0FPRSxPQUFNLEtBQU4sRUFBYTtBQUNiLFlBQVEsR0FBUixDQUFZLHNCQUFaLEVBQW9DLEtBQXBDO0FBQ0UsV0FBTyxJQUFQO0FBQ0g7QUFDRixDQWhCTTs7Ozs7Ozs7Ozs7QUM1TlA7Ozs7QUFDQTs7Ozs7Ozs7QUFFQSxJQUFNLGVBQWUsS0FBSyxJQUExQjtBQUNBLElBQU0sY0FBYyxJQUFwQjs7SUFFTSxROzs7Ozs7O3lCQUNDLE8sRUFBUyxJLEVBQW9CO0FBQUEsVUFBZCxPQUFjLHVFQUFKLEVBQUk7O0FBQ2hDLGNBQVEsSUFBUixDQUFhLFNBQWIsRUFBd0IsT0FBeEIsRUFBaUMsSUFBakMsRUFBdUMsT0FBdkM7QUFDRDs7O3lCQUVJLE8sRUFBUyxJLEVBQW9CO0FBQUEsVUFBZCxPQUFjLHVFQUFKLEVBQUk7O0FBQ2hDLGNBQVEsSUFBUixDQUFhLFNBQWIsRUFBd0IsT0FBeEIsRUFBaUMsSUFBakMsRUFBdUMsT0FBdkM7QUFDRDs7OzBCQUVLLE8sRUFBUyxTLEVBQVcsSSxFQUFvQjtBQUFBLFVBQWQsT0FBYyx1RUFBSixFQUFJOztBQUM1QyxjQUFRLEtBQVIsQ0FBYyxTQUFkLEVBQXlCLE9BQXpCLEVBQWtDLFNBQWxDLEVBQTZDLElBQTdDLEVBQW1ELE9BQW5EO0FBQ0Q7Ozs7OztJQUdVLEssV0FBQSxLO0FBQ1gsbUJBQWM7QUFBQTs7QUFDWixTQUFLLE9BQUwsR0FBZSxJQUFmO0FBQ0Q7Ozs7MkJBR007QUFDTCxVQUFNLFNBQ047QUFDRSxtQkFBVyxlQURiO0FBRUUsYUFBSztBQUNILGdCQUFNLDBDQURIO0FBRUgsaUJBQU8sZUFGSjtBQUdILHVCQUFhLFFBQVEsR0FBUixDQUFZLFFBQVosSUFBd0IsYUFIbEM7QUFJSCxlQUFLLEVBSkY7QUFLSCxnQkFBTSxJQUxIO0FBTUgsd0JBQWMsWUFOWCxDQU15QjtBQU56QixTQUZQO0FBVUUsdUJBQWUseUJBQU07QUFDbkIsaUJBQU8sRUFBRSxZQUFZLE9BQWQsRUFBdUIsUUFBUSxLQUEvQixFQUFQO0FBQ0QsU0FaSDtBQWFFLGlCQUFTLGlCQUFDLEdBQUQsRUFBTSxPQUFOLEVBQWtCO0FBQ3pCLGlCQUFPLFNBQVAsR0FBbUIsT0FBTyxTQUFQLElBQW9CLEVBQXZDO0FBQ0EsaUJBQU8sU0FBUCxDQUFpQixJQUFqQixDQUFzQjtBQUNwQixtQkFBTyxtQkFEYTtBQUVwQixzQkFBVTtBQUNOLHlCQUFXO0FBQ1Asb0NBQW9CLE9BRGI7QUFFUCxnQ0FBZ0I7QUFGVDtBQURMO0FBRlUsV0FBdEI7QUFTRDtBQXhCSCxPQURBOztBQTRCQSxhQUFPLEdBQVAsR0FBYSxJQUFJLFFBQUosRUFBYjtBQUNBLFVBQU0sYUFBYSxnQkFBTSxNQUFOLENBQWE7QUFDOUIsaUJBQVM7QUFEcUIsT0FBYixDQUFuQjs7QUFJSixVQUFNLFVBQVUsaUNBQWdDLE1BQWhDLEVBQXdDLFVBQXhDLENBQWhCO0FBQ0EsVUFBTSxPQUFPLElBQWI7QUFDQSxjQUFRLFdBQVIsR0FDSyxJQURMLENBQ1UsWUFBTTtBQUNSLGFBQUssT0FBTCxHQUFlLE9BQWY7QUFDQSxhQUFLLE9BQUwsQ0FBYSxlQUFiLENBQTZCLDBCQUE3QjtBQUNBLGVBQU8sSUFBUDtBQUNILE9BTEwsRUFNSyxLQU5MLENBTVcsaUJBQVM7QUFDWixlQUFPLEdBQVAsQ0FBVyxLQUFYLENBQWlCLDBCQUFqQixFQUE2QyxLQUE3QztBQUNILE9BUkw7QUFTRzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4RUg7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0EsSUFBTSxjQUFjO0FBQ2xCLFlBQVUsR0FEUTtBQUVsQixxQkFBbUIsR0FGRDtBQUdsQixzQkFBb0IsSUFIRjtBQUlsQixhQUFXO0FBSk8sQ0FBcEI7O0lBTXFCLGlCOzs7Ozs7OztBQUNuQjs7Ozs7OzhCQU1XLEssRUFBTyxLLEVBQU87QUFDdkIsVUFBTSxRQUFRLEVBQWQ7QUFDQSxVQUFJLEtBQUosRUFBVztBQUNULGNBQU0sSUFBTixDQUFXLEtBQVg7QUFDRDtBQUNELFVBQUksS0FBSixFQUFXO0FBQ1QsY0FBTSxJQUFOLENBQVcsS0FBWDtBQUNEO0FBQ0QsVUFBSSxNQUFNLE1BQVYsRUFBa0I7QUFDaEIsZUFBTyxNQUFNLEtBQU4sQ0FBWSxnQkFBUTtBQUN6QixjQUFNLFdBQVcsS0FBSyxPQUFMLENBQWEsU0FBYixFQUF3QixFQUF4QixDQUFqQjtBQUNBLGNBQUksYUFBYSxZQUFZLEtBQUssT0FBTCxDQUFhLFFBQWIsRUFBdUIsRUFBdkIsQ0FBWixDQUFqQjtBQUNBLGNBQUksQ0FBQyxVQUFMLEVBQWlCO0FBQ2Ysa0JBQU0sSUFBSSxLQUFKLENBQVUsb0JBQVYsQ0FBTjtBQUNEO0FBQ0Qsa0JBQVEsUUFBUjtBQUNFLGlCQUFLLEdBQUw7QUFDRSxxQkFBTyxPQUFPLFVBQVAsSUFBc0IsYUFBYSxDQUExQztBQUNGLGlCQUFLLElBQUw7QUFDRSxxQkFBTyxPQUFPLFVBQVAsSUFBcUIsVUFBNUI7QUFDRixpQkFBSyxHQUFMO0FBQ0UscUJBQU8sT0FBTyxVQUFQLElBQXNCLGFBQWEsQ0FBMUM7QUFDRixpQkFBSyxJQUFMO0FBQ0UscUJBQU8sT0FBTyxVQUFQLElBQXFCLFVBQTVCO0FBQ0Y7QUFDRSxvQkFBTSxJQUFJLEtBQUosQ0FBVSxvQkFBVixDQUFOO0FBVko7QUFZRCxTQWxCTSxDQUFQO0FBbUJEO0FBQ0Y7Ozs7OztrQkFwQ2tCLGlCIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwidmFyIF9fYWNjZXNzQ2hlY2s9KGUsdCxuKT0+e2lmKCF0LmhhcyhlKSl0aHJvdyBUeXBlRXJyb3IoXCJDYW5ub3QgXCIrbil9LF9fcHJpdmF0ZUdldD0oZSx0LG4pPT4oX19hY2Nlc3NDaGVjayhlLHQsXCJyZWFkIGZyb20gcHJpdmF0ZSBmaWVsZFwiKSxuP24uY2FsbChlKTp0LmdldChlKSksX19wcml2YXRlQWRkPShlLHQsbik9PntpZih0LmhhcyhlKSl0aHJvdyBUeXBlRXJyb3IoXCJDYW5ub3QgYWRkIHRoZSBzYW1lIHByaXZhdGUgbWVtYmVyIG1vcmUgdGhhbiBvbmNlXCIpO3QgaW5zdGFuY2VvZiBXZWFrU2V0P3QuYWRkKGUpOnQuc2V0KGUsbil9LF9fcHJpdmF0ZVNldD0oZSx0LG4scik9PihfX2FjY2Vzc0NoZWNrKGUsdCxcIndyaXRlIHRvIHByaXZhdGUgZmllbGRcIikscj9yLmNhbGwoZSxuKTp0LnNldChlLG4pLG4pLF9fcHJpdmF0ZU1ldGhvZD0oZSx0LG4pPT4oX19hY2Nlc3NDaGVjayhlLHQsXCJhY2Nlc3MgcHJpdmF0ZSBtZXRob2RcIiksbiksX19hc3luYz0oZSx0LG4pPT5uZXcgUHJvbWlzZSgoKHIsbyk9Pnt2YXIgaT1lPT57dHJ5e2Eobi5uZXh0KGUpKX1jYXRjaCh0KXtvKHQpfX0scz1lPT57dHJ5e2Eobi50aHJvdyhlKSl9Y2F0Y2godCl7byh0KX19LGE9ZT0+ZS5kb25lP3IoZS52YWx1ZSk6UHJvbWlzZS5yZXNvbHZlKGUudmFsdWUpLnRoZW4oaSxzKTthKChuPW4uYXBwbHkoZSx0KSkubmV4dCgpKX0pKTshZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZSh0KTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpW1wiZmVhdHVyZS1tYW5hZ2VtZW50XCJdPXQoKX0odGhpcywoZnVuY3Rpb24oKXt2YXIgZSx0LG4scixvLGkscz1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gYShlKXtpZihlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbixyLmdldD9yOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW25dfX0pfSkpLHR9dmFyIHU9e2V4cG9ydHM6e319LGM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG49bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLHI9MDtyPG4ubGVuZ3RoO3IrKyluW3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4gZS5hcHBseSh0LG4pfX0sZj1jLGw9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBoKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIHZvaWQgMD09PWV9ZnVuY3Rpb24gZChlKXtyZXR1cm5cIltvYmplY3QgQXJyYXlCdWZmZXJdXCI9PT1sLmNhbGwoZSl9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gbnVsbCE9PWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlfWZ1bmN0aW9uIHkoZSl7aWYoXCJbb2JqZWN0IE9iamVjdF1cIiE9PWwuY2FsbChlKSlyZXR1cm4hMTt2YXIgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7cmV0dXJuIG51bGw9PT10fHx0PT09T2JqZWN0LnByb3RvdHlwZX1mdW5jdGlvbiBtKGUpe3JldHVyblwiW29iamVjdCBGdW5jdGlvbl1cIj09PWwuY2FsbChlKX1mdW5jdGlvbiB2KGUsdCl7aWYobnVsbCE9ZSlpZihcIm9iamVjdFwiIT10eXBlb2YgZSYmKGU9W2VdKSxoKGUpKWZvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0LmNhbGwobnVsbCxlW25dLG4sZSk7ZWxzZSBmb3IodmFyIG8gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxvKSYmdC5jYWxsKG51bGwsZVtvXSxvLGUpfXZhciB3PXtpc0FycmF5OmgsaXNBcnJheUJ1ZmZlcjpkLGlzQnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIXAoZSkmJm51bGwhPT1lLmNvbnN0cnVjdG9yJiYhcChlLmNvbnN0cnVjdG9yKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX0saXNGb3JtRGF0YTpmdW5jdGlvbihlKXtyZXR1cm5cIltvYmplY3QgRm9ybURhdGFdXCI9PT1sLmNhbGwoZSl9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uKGUpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhlKTplJiZlLmJ1ZmZlciYmZChlLmJ1ZmZlcil9LGlzU3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfSxpc051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZX0saXNPYmplY3Q6Zyxpc1BsYWluT2JqZWN0OnksaXNVbmRlZmluZWQ6cCxpc0RhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuXCJbb2JqZWN0IERhdGVdXCI9PT1sLmNhbGwoZSl9LGlzRmlsZTpmdW5jdGlvbihlKXtyZXR1cm5cIltvYmplY3QgRmlsZV1cIj09PWwuY2FsbChlKX0saXNCbG9iOmZ1bmN0aW9uKGUpe3JldHVyblwiW29iamVjdCBCbG9iXVwiPT09bC5jYWxsKGUpfSxpc0Z1bmN0aW9uOm0saXNTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIGcoZSkmJm0oZS5waXBlKX0saXNVUkxTZWFyY2hQYXJhbXM6ZnVuY3Rpb24oZSl7cmV0dXJuXCJbb2JqZWN0IFVSTFNlYXJjaFBhcmFtc11cIj09PWwuY2FsbChlKX0saXNTdGFuZGFyZEJyb3dzZXJFbnY6ZnVuY3Rpb24oKXtyZXR1cm4oXCJ1bmRlZmluZWRcIj09dHlwZW9mIG5hdmlnYXRvcnx8XCJSZWFjdE5hdGl2ZVwiIT09bmF2aWdhdG9yLnByb2R1Y3QmJlwiTmF0aXZlU2NyaXB0XCIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmXCJOU1wiIT09bmF2aWdhdG9yLnByb2R1Y3QpJiYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50KX0sZm9yRWFjaDp2LG1lcmdlOmZ1bmN0aW9uIGUoKXt2YXIgdD17fTtmdW5jdGlvbiBuKG4scil7eSh0W3JdKSYmeShuKT90W3JdPWUodFtyXSxuKTp5KG4pP3Rbcl09ZSh7fSxuKTpoKG4pP3Rbcl09bi5zbGljZSgpOnRbcl09bn1mb3IodmFyIHI9MCxvPWFyZ3VtZW50cy5sZW5ndGg7cjxvO3IrKyl2KGFyZ3VtZW50c1tyXSxuKTtyZXR1cm4gdH0sZXh0ZW5kOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdih0LChmdW5jdGlvbih0LHIpe2Vbcl09biYmXCJmdW5jdGlvblwiPT10eXBlb2YgdD9mKHQsbik6dH0pKSxlfSx0cmltOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLFwiXCIpfSxzdHJpcEJPTTpmdW5jdGlvbihlKXtyZXR1cm4gNjUyNzk9PT1lLmNoYXJDb2RlQXQoMCkmJihlPWUuc2xpY2UoMSkpLGV9fSxiPXc7ZnVuY3Rpb24gXyhlKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoLyUzQS9naSxcIjpcIikucmVwbGFjZSgvJTI0L2csXCIkXCIpLnJlcGxhY2UoLyUyQy9naSxcIixcIikucmVwbGFjZSgvJTIwL2csXCIrXCIpLnJlcGxhY2UoLyU1Qi9naSxcIltcIikucmVwbGFjZSgvJTVEL2dpLFwiXVwiKX12YXIgeD1mdW5jdGlvbihlLHQsbil7aWYoIXQpcmV0dXJuIGU7dmFyIHI7aWYobilyPW4odCk7ZWxzZSBpZihiLmlzVVJMU2VhcmNoUGFyYW1zKHQpKXI9dC50b1N0cmluZygpO2Vsc2V7dmFyIG89W107Yi5mb3JFYWNoKHQsKGZ1bmN0aW9uKGUsdCl7bnVsbCE9ZSYmKGIuaXNBcnJheShlKT90Kz1cIltdXCI6ZT1bZV0sYi5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe2IuaXNEYXRlKGUpP2U9ZS50b0lTT1N0cmluZygpOmIuaXNPYmplY3QoZSkmJihlPUpTT04uc3RyaW5naWZ5KGUpKSxvLnB1c2goXyh0KStcIj1cIitfKGUpKX0pKSl9KSkscj1vLmpvaW4oXCImXCIpfWlmKHIpe3ZhciBpPWUuaW5kZXhPZihcIiNcIik7LTEhPT1pJiYoZT1lLnNsaWNlKDAsaSkpLGUrPSgtMT09PWUuaW5kZXhPZihcIj9cIik/XCI/XCI6XCImXCIpK3J9cmV0dXJuIGV9LEU9dztmdW5jdGlvbiBTKCl7dGhpcy5oYW5kbGVycz1bXX1TLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6ISFuJiZuLnN5bmNocm9ub3VzLHJ1bldoZW46bj9uLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9LFMucHJvdG90eXBlLmVqZWN0PWZ1bmN0aW9uKGUpe3RoaXMuaGFuZGxlcnNbZV0mJih0aGlzLmhhbmRsZXJzW2VdPW51bGwpfSxTLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUpe0UuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLChmdW5jdGlvbih0KXtudWxsIT09dCYmZSh0KX0pKX07dmFyIEM9UyxPPXcsaz1mdW5jdGlvbihlLHQsbixyLG8pe3JldHVybiBlLmNvbmZpZz10LG4mJihlLmNvZGU9biksZS5yZXF1ZXN0PXIsZS5yZXNwb25zZT1vLGUuaXNBeGlvc0Vycm9yPSEwLGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOnRoaXMuY29uZmlnLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX0sZX0saj1rLEE9ZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgaT1uZXcgRXJyb3IoZSk7cmV0dXJuIGooaSx0LG4scixvKX0sQj1BLFQ9dyxQPVQuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT97d3JpdGU6ZnVuY3Rpb24oZSx0LG4scixvLGkpe3ZhciBzPVtdO3MucHVzaChlK1wiPVwiK2VuY29kZVVSSUNvbXBvbmVudCh0KSksVC5pc051bWJlcihuKSYmcy5wdXNoKFwiZXhwaXJlcz1cIituZXcgRGF0ZShuKS50b0dNVFN0cmluZygpKSxULmlzU3RyaW5nKHIpJiZzLnB1c2goXCJwYXRoPVwiK3IpLFQuaXNTdHJpbmcobykmJnMucHVzaChcImRvbWFpbj1cIitvKSwhMD09PWkmJnMucHVzaChcInNlY3VyZVwiKSxkb2N1bWVudC5jb29raWU9cy5qb2luKFwiOyBcIil9LHJlYWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoXCIoXnw7XFxcXHMqKShcIitlK1wiKT0oW147XSopXCIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3RoaXMud3JpdGUoZSxcIlwiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlOmZ1bmN0aW9uKCl7fSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHJlbW92ZTpmdW5jdGlvbigpe319LE49ZnVuY3Rpb24oZSl7cmV0dXJuL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QoZSl9LFU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9lLnJlcGxhY2UoL1xcLyskLyxcIlwiKStcIi9cIit0LnJlcGxhY2UoL15cXC8rLyxcIlwiKTplfSxSPXcsTD1bXCJhZ2VcIixcImF1dGhvcml6YXRpb25cIixcImNvbnRlbnQtbGVuZ3RoXCIsXCJjb250ZW50LXR5cGVcIixcImV0YWdcIixcImV4cGlyZXNcIixcImZyb21cIixcImhvc3RcIixcImlmLW1vZGlmaWVkLXNpbmNlXCIsXCJpZi11bm1vZGlmaWVkLXNpbmNlXCIsXCJsYXN0LW1vZGlmaWVkXCIsXCJsb2NhdGlvblwiLFwibWF4LWZvcndhcmRzXCIsXCJwcm94eS1hdXRob3JpemF0aW9uXCIsXCJyZWZlcmVyXCIsXCJyZXRyeS1hZnRlclwiLFwidXNlci1hZ2VudFwiXSxJPXcsJD1JLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgZSx0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtmdW5jdGlvbiByKGUpe3ZhciByPWU7cmV0dXJuIHQmJihuLnNldEF0dHJpYnV0ZShcImhyZWZcIixyKSxyPW4uaHJlZiksbi5zZXRBdHRyaWJ1dGUoXCJocmVmXCIscikse2hyZWY6bi5ocmVmLHByb3RvY29sOm4ucHJvdG9jb2w/bi5wcm90b2NvbC5yZXBsYWNlKC86JC8sXCJcIik6XCJcIixob3N0Om4uaG9zdCxzZWFyY2g6bi5zZWFyY2g/bi5zZWFyY2gucmVwbGFjZSgvXlxcPy8sXCJcIik6XCJcIixoYXNoOm4uaGFzaD9uLmhhc2gucmVwbGFjZSgvXiMvLFwiXCIpOlwiXCIsaG9zdG5hbWU6bi5ob3N0bmFtZSxwb3J0Om4ucG9ydCxwYXRobmFtZTpcIi9cIj09PW4ucGF0aG5hbWUuY2hhckF0KDApP24ucGF0aG5hbWU6XCIvXCIrbi5wYXRobmFtZX19cmV0dXJuIGU9cih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24odCl7dmFyIG49SS5pc1N0cmluZyh0KT9yKHQpOnQ7cmV0dXJuIG4ucHJvdG9jb2w9PT1lLnByb3RvY29sJiZuLmhvc3Q9PT1lLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuITB9O2Z1bmN0aW9uIE0oZSl7dGhpcy5tZXNzYWdlPWV9TS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIkNhbmNlbFwiKyh0aGlzLm1lc3NhZ2U/XCI6IFwiK3RoaXMubWVzc2FnZTpcIlwiKX0sTS5wcm90b3R5cGUuX19DQU5DRUxfXz0hMDt2YXIgRj1NLFY9dyxxPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztuLnN0YXR1cyYmciYmIXIobi5zdGF0dXMpP3QoQihcIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgXCIrbi5zdGF0dXMsbi5jb25maWcsbnVsbCxuLnJlcXVlc3QsbikpOmUobil9LEQ9UCxIPXgsej1mdW5jdGlvbihlLHQpe3JldHVybiBlJiYhTih0KT9VKGUsdCk6dH0sVz1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbz17fTtyZXR1cm4gZT8oUi5mb3JFYWNoKGUuc3BsaXQoXCJcXG5cIiksKGZ1bmN0aW9uKGUpe2lmKHI9ZS5pbmRleE9mKFwiOlwiKSx0PVIudHJpbShlLnN1YnN0cigwLHIpKS50b0xvd2VyQ2FzZSgpLG49Ui50cmltKGUuc3Vic3RyKHIrMSkpLHQpe2lmKG9bdF0mJkwuaW5kZXhPZih0KT49MClyZXR1cm47b1t0XT1cInNldC1jb29raWVcIj09PXQ/KG9bdF0/b1t0XTpbXSkuY29uY2F0KFtuXSk6b1t0XT9vW3RdK1wiLCBcIituOm59fSkpLG8pOm99LEo9JCxHPUEsSz1pZSxYPUYsUT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQsbil7dmFyIHIsbz1lLmRhdGEsaT1lLmhlYWRlcnMscz1lLnJlc3BvbnNlVHlwZTtmdW5jdGlvbiBhKCl7ZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShyKSxlLnNpZ25hbCYmZS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIscil9Vi5pc0Zvcm1EYXRhKG8pJiZkZWxldGUgaVtcIkNvbnRlbnQtVHlwZVwiXTt2YXIgdT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZS5hdXRoKXt2YXIgYz1lLmF1dGgudXNlcm5hbWV8fFwiXCIsZj1lLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUuYXV0aC5wYXNzd29yZCkpOlwiXCI7aS5BdXRob3JpemF0aW9uPVwiQmFzaWMgXCIrYnRvYShjK1wiOlwiK2YpfXZhciBsPXooZS5iYXNlVVJMLGUudXJsKTtmdW5jdGlvbiBoKCl7aWYodSl7dmFyIHI9XCJnZXRBbGxSZXNwb25zZUhlYWRlcnNcImluIHU/Vyh1LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTpudWxsLG89e2RhdGE6cyYmXCJ0ZXh0XCIhPT1zJiZcImpzb25cIiE9PXM/dS5yZXNwb25zZTp1LnJlc3BvbnNlVGV4dCxzdGF0dXM6dS5zdGF0dXMsc3RhdHVzVGV4dDp1LnN0YXR1c1RleHQsaGVhZGVyczpyLGNvbmZpZzplLHJlcXVlc3Q6dX07cSgoZnVuY3Rpb24oZSl7dChlKSxhKCl9KSwoZnVuY3Rpb24oZSl7bihlKSxhKCl9KSxvKSx1PW51bGx9fWlmKHUub3BlbihlLm1ldGhvZC50b1VwcGVyQ2FzZSgpLEgobCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSx1LnRpbWVvdXQ9ZS50aW1lb3V0LFwib25sb2FkZW5kXCJpbiB1P3Uub25sb2FkZW5kPWg6dS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXt1JiY0PT09dS5yZWFkeVN0YXRlJiYoMCE9PXUuc3RhdHVzfHx1LnJlc3BvbnNlVVJMJiYwPT09dS5yZXNwb25zZVVSTC5pbmRleE9mKFwiZmlsZTpcIikpJiZzZXRUaW1lb3V0KGgpfSx1Lm9uYWJvcnQ9ZnVuY3Rpb24oKXt1JiYobihHKFwiUmVxdWVzdCBhYm9ydGVkXCIsZSxcIkVDT05OQUJPUlRFRFwiLHUpKSx1PW51bGwpfSx1Lm9uZXJyb3I9ZnVuY3Rpb24oKXtuKEcoXCJOZXR3b3JrIEVycm9yXCIsZSxudWxsLHUpKSx1PW51bGx9LHUub250aW1lb3V0PWZ1bmN0aW9uKCl7dmFyIHQ9ZS50aW1lb3V0P1widGltZW91dCBvZiBcIitlLnRpbWVvdXQrXCJtcyBleGNlZWRlZFwiOlwidGltZW91dCBleGNlZWRlZFwiLHI9ZS50cmFuc2l0aW9uYWx8fEsudHJhbnNpdGlvbmFsO2UudGltZW91dEVycm9yTWVzc2FnZSYmKHQ9ZS50aW1lb3V0RXJyb3JNZXNzYWdlKSxuKEcodCxlLHIuY2xhcmlmeVRpbWVvdXRFcnJvcj9cIkVUSU1FRE9VVFwiOlwiRUNPTk5BQk9SVEVEXCIsdSkpLHU9bnVsbH0sVi5pc1N0YW5kYXJkQnJvd3NlckVudigpKXt2YXIgcD0oZS53aXRoQ3JlZGVudGlhbHN8fEoobCkpJiZlLnhzcmZDb29raWVOYW1lP0QucmVhZChlLnhzcmZDb29raWVOYW1lKTp2b2lkIDA7cCYmKGlbZS54c3JmSGVhZGVyTmFtZV09cCl9XCJzZXRSZXF1ZXN0SGVhZGVyXCJpbiB1JiZWLmZvckVhY2goaSwoZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT1vJiZcImNvbnRlbnQtdHlwZVwiPT09dC50b0xvd2VyQ2FzZSgpP2RlbGV0ZSBpW3RdOnUuc2V0UmVxdWVzdEhlYWRlcih0LGUpfSkpLFYuaXNVbmRlZmluZWQoZS53aXRoQ3JlZGVudGlhbHMpfHwodS53aXRoQ3JlZGVudGlhbHM9ISFlLndpdGhDcmVkZW50aWFscykscyYmXCJqc29uXCIhPT1zJiYodS5yZXNwb25zZVR5cGU9ZS5yZXNwb25zZVR5cGUpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUub25Eb3dubG9hZFByb2dyZXNzJiZ1LmFkZEV2ZW50TGlzdGVuZXIoXCJwcm9ncmVzc1wiLGUub25Eb3dubG9hZFByb2dyZXNzKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLm9uVXBsb2FkUHJvZ3Jlc3MmJnUudXBsb2FkJiZ1LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKFwicHJvZ3Jlc3NcIixlLm9uVXBsb2FkUHJvZ3Jlc3MpLChlLmNhbmNlbFRva2VufHxlLnNpZ25hbCkmJihyPWZ1bmN0aW9uKGUpe3UmJihuKCFlfHxlJiZlLnR5cGU/bmV3IFgoXCJjYW5jZWxlZFwiKTplKSx1LmFib3J0KCksdT1udWxsKX0sZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi5zdWJzY3JpYmUociksZS5zaWduYWwmJihlLnNpZ25hbC5hYm9ydGVkP3IoKTplLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIixyKSkpLG98fChvPW51bGwpLHUuc2VuZChvKX0pKX0sWT13LFo9ZnVuY3Rpb24oZSx0KXtPLmZvckVhY2goZSwoZnVuY3Rpb24obixyKXtyIT09dCYmci50b1VwcGVyQ2FzZSgpPT09dC50b1VwcGVyQ2FzZSgpJiYoZVt0XT1uLGRlbGV0ZSBlW3JdKX0pKX0sZWU9ayx0ZT17XCJDb250ZW50LVR5cGVcIjpcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwifTtmdW5jdGlvbiBuZShlLHQpeyFZLmlzVW5kZWZpbmVkKGUpJiZZLmlzVW5kZWZpbmVkKGVbXCJDb250ZW50LVR5cGVcIl0pJiYoZVtcIkNvbnRlbnQtVHlwZVwiXT10KX12YXIgcmUsb2U9e3RyYW5zaXRpb25hbDp7c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX0sYWRhcHRlcjooKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBYTUxIdHRwUmVxdWVzdHx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHByb2Nlc3MmJlwiW29iamVjdCBwcm9jZXNzXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3MpKSYmKHJlPVEpLHJlKSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe3JldHVybiBaKHQsXCJBY2NlcHRcIiksWih0LFwiQ29udGVudC1UeXBlXCIpLFkuaXNGb3JtRGF0YShlKXx8WS5pc0FycmF5QnVmZmVyKGUpfHxZLmlzQnVmZmVyKGUpfHxZLmlzU3RyZWFtKGUpfHxZLmlzRmlsZShlKXx8WS5pc0Jsb2IoZSk/ZTpZLmlzQXJyYXlCdWZmZXJWaWV3KGUpP2UuYnVmZmVyOlkuaXNVUkxTZWFyY2hQYXJhbXMoZSk/KG5lKHQsXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOFwiKSxlLnRvU3RyaW5nKCkpOlkuaXNPYmplY3QoZSl8fHQmJlwiYXBwbGljYXRpb24vanNvblwiPT09dFtcIkNvbnRlbnQtVHlwZVwiXT8obmUodCxcImFwcGxpY2F0aW9uL2pzb25cIiksZnVuY3Rpb24oZSx0LG4pe2lmKFkuaXNTdHJpbmcoZSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShlKSxZLnRyaW0oZSl9Y2F0Y2gocil7aWYoXCJTeW50YXhFcnJvclwiIT09ci5uYW1lKXRocm93IHJ9cmV0dXJuKG58fEpTT04uc3RyaW5naWZ5KShlKX0oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50cmFuc2l0aW9uYWx8fG9lLnRyYW5zaXRpb25hbCxuPXQmJnQuc2lsZW50SlNPTlBhcnNpbmcscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLG89IW4mJlwianNvblwiPT09dGhpcy5yZXNwb25zZVR5cGU7aWYob3x8ciYmWS5pc1N0cmluZyhlKSYmZS5sZW5ndGgpdHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGkpe2lmKG8pe2lmKFwiU3ludGF4RXJyb3JcIj09PWkubmFtZSl0aHJvdyBlZShpLHRoaXMsXCJFX0pTT05fUEFSU0VcIik7dGhyb3cgaX19cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6XCJYU1JGLVRPS0VOXCIseHNyZkhlYWRlck5hbWU6XCJYLVhTUkYtVE9LRU5cIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OlwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qXCJ9fX07WS5mb3JFYWNoKFtcImRlbGV0ZVwiLFwiZ2V0XCIsXCJoZWFkXCJdLChmdW5jdGlvbihlKXtvZS5oZWFkZXJzW2VdPXt9fSkpLFkuZm9yRWFjaChbXCJwb3N0XCIsXCJwdXRcIixcInBhdGNoXCJdLChmdW5jdGlvbihlKXtvZS5oZWFkZXJzW2VdPVkubWVyZ2UodGUpfSkpO3ZhciBpZT1vZSxzZT13LGFlPWllLHVlPWZ1bmN0aW9uKGUpe3JldHVybiEoIWV8fCFlLl9fQ0FOQ0VMX18pfSxjZT13LGZlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzfHxhZTtyZXR1cm4gc2UuZm9yRWFjaChuLChmdW5jdGlvbihuKXtlPW4uY2FsbChyLGUsdCl9KSksZX0sbGU9dWUsaGU9aWUscGU9RjtmdW5jdGlvbiBkZShlKXtpZihlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxlLnNpZ25hbCYmZS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgcGUoXCJjYW5jZWxlZFwiKX12YXIgZ2U9dyx5ZT1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIG49e307ZnVuY3Rpb24gcihlLHQpe3JldHVybiBnZS5pc1BsYWluT2JqZWN0KGUpJiZnZS5pc1BsYWluT2JqZWN0KHQpP2dlLm1lcmdlKGUsdCk6Z2UuaXNQbGFpbk9iamVjdCh0KT9nZS5tZXJnZSh7fSx0KTpnZS5pc0FycmF5KHQpP3Quc2xpY2UoKTp0fWZ1bmN0aW9uIG8obil7cmV0dXJuIGdlLmlzVW5kZWZpbmVkKHRbbl0pP2dlLmlzVW5kZWZpbmVkKGVbbl0pP3ZvaWQgMDpyKHZvaWQgMCxlW25dKTpyKGVbbl0sdFtuXSl9ZnVuY3Rpb24gaShlKXtpZighZ2UuaXNVbmRlZmluZWQodFtlXSkpcmV0dXJuIHIodm9pZCAwLHRbZV0pfWZ1bmN0aW9uIHMobil7cmV0dXJuIGdlLmlzVW5kZWZpbmVkKHRbbl0pP2dlLmlzVW5kZWZpbmVkKGVbbl0pP3ZvaWQgMDpyKHZvaWQgMCxlW25dKTpyKHZvaWQgMCx0W25dKX1mdW5jdGlvbiBhKG4pe3JldHVybiBuIGluIHQ/cihlW25dLHRbbl0pOm4gaW4gZT9yKHZvaWQgMCxlW25dKTp2b2lkIDB9dmFyIHU9e3VybDppLG1ldGhvZDppLGRhdGE6aSxiYXNlVVJMOnMsdHJhbnNmb3JtUmVxdWVzdDpzLHRyYW5zZm9ybVJlc3BvbnNlOnMscGFyYW1zU2VyaWFsaXplcjpzLHRpbWVvdXQ6cyx0aW1lb3V0TWVzc2FnZTpzLHdpdGhDcmVkZW50aWFsczpzLGFkYXB0ZXI6cyxyZXNwb25zZVR5cGU6cyx4c3JmQ29va2llTmFtZTpzLHhzcmZIZWFkZXJOYW1lOnMsb25VcGxvYWRQcm9ncmVzczpzLG9uRG93bmxvYWRQcm9ncmVzczpzLGRlY29tcHJlc3M6cyxtYXhDb250ZW50TGVuZ3RoOnMsbWF4Qm9keUxlbmd0aDpzLHRyYW5zcG9ydDpzLGh0dHBBZ2VudDpzLGh0dHBzQWdlbnQ6cyxjYW5jZWxUb2tlbjpzLHNvY2tldFBhdGg6cyxyZXNwb25zZUVuY29kaW5nOnMsdmFsaWRhdGVTdGF0dXM6YX07cmV0dXJuIGdlLmZvckVhY2goT2JqZWN0LmtleXMoZSkuY29uY2F0KE9iamVjdC5rZXlzKHQpKSwoZnVuY3Rpb24oZSl7dmFyIHQ9dVtlXXx8byxyPXQoZSk7Z2UuaXNVbmRlZmluZWQocikmJnQhPT1hfHwobltlXT1yKX0pKSxufSxtZT1cIjAuMjUuMFwiLHZlPW1lLHdlPXt9O1tcIm9iamVjdFwiLFwiYm9vbGVhblwiLFwibnVtYmVyXCIsXCJmdW5jdGlvblwiLFwic3RyaW5nXCIsXCJzeW1ib2xcIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXt3ZVtlXT1mdW5jdGlvbihuKXtyZXR1cm4gdHlwZW9mIG49PT1lfHxcImFcIisodDwxP1wibiBcIjpcIiBcIikrZX19KSk7dmFyIGJlPXt9O3dlLnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3JldHVyblwiW0F4aW9zIHZcIit2ZStcIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnXCIrZStcIidcIit0KyhuP1wiLiBcIituOlwiXCIpfXJldHVybiBmdW5jdGlvbihuLG8saSl7aWYoITE9PT1lKXRocm93IG5ldyBFcnJvcihyKG8sXCIgaGFzIGJlZW4gcmVtb3ZlZFwiKyh0P1wiIGluIFwiK3Q6XCJcIikpKTtyZXR1cm4gdCYmIWJlW29dJiYoYmVbb109ITAsY29uc29sZS53YXJuKHIobyxcIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHZcIit0K1wiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlXCIpKSksIWV8fGUobixvLGkpfX07dmFyIF9lPXcseGU9eCxFZT1DLFNlPWZ1bmN0aW9uKGUpe3JldHVybiBkZShlKSxlLmhlYWRlcnM9ZS5oZWFkZXJzfHx7fSxlLmRhdGE9ZmUuY2FsbChlLGUuZGF0YSxlLmhlYWRlcnMsZS50cmFuc2Zvcm1SZXF1ZXN0KSxlLmhlYWRlcnM9Y2UubWVyZ2UoZS5oZWFkZXJzLmNvbW1vbnx8e30sZS5oZWFkZXJzW2UubWV0aG9kXXx8e30sZS5oZWFkZXJzKSxjZS5mb3JFYWNoKFtcImRlbGV0ZVwiLFwiZ2V0XCIsXCJoZWFkXCIsXCJwb3N0XCIsXCJwdXRcIixcInBhdGNoXCIsXCJjb21tb25cIl0sKGZ1bmN0aW9uKHQpe2RlbGV0ZSBlLmhlYWRlcnNbdF19KSksKGUuYWRhcHRlcnx8aGUuYWRhcHRlcikoZSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIGRlKGUpLHQuZGF0YT1mZS5jYWxsKGUsdC5kYXRhLHQuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSx0fSksKGZ1bmN0aW9uKHQpe3JldHVybiBsZSh0KXx8KGRlKGUpLHQmJnQucmVzcG9uc2UmJih0LnJlc3BvbnNlLmRhdGE9ZmUuY2FsbChlLHQucmVzcG9uc2UuZGF0YSx0LnJlc3BvbnNlLmhlYWRlcnMsZS50cmFuc2Zvcm1SZXNwb25zZSkpKSxQcm9taXNlLnJlamVjdCh0KX0pKX0sQ2U9eWUsT2U9e2Fzc2VydE9wdGlvbnM6ZnVuY3Rpb24oZSx0LG4pe2lmKFwib2JqZWN0XCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0XCIpO2Zvcih2YXIgcj1PYmplY3Qua2V5cyhlKSxvPXIubGVuZ3RoO28tLSA+MDspe3ZhciBpPXJbb10scz10W2ldO2lmKHMpe3ZhciBhPWVbaV0sdT12b2lkIDA9PT1hfHxzKGEsaSxlKTtpZighMCE9PXUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbiBcIitpK1wiIG11c3QgYmUgXCIrdSl9ZWxzZSBpZighMCE9PW4pdGhyb3cgRXJyb3IoXCJVbmtub3duIG9wdGlvbiBcIitpKX19LHZhbGlkYXRvcnM6d2V9LGtlPU9lLnZhbGlkYXRvcnM7ZnVuY3Rpb24gamUoZSl7dGhpcy5kZWZhdWx0cz1lLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBFZSxyZXNwb25zZTpuZXcgRWV9fWplLnByb3RvdHlwZS5yZXF1ZXN0PWZ1bmN0aW9uKGUsdCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGU/KHQ9dHx8e30pLnVybD1lOnQ9ZXx8e30sIXQudXJsKXRocm93IG5ldyBFcnJvcihcIlByb3ZpZGVkIGNvbmZpZyB1cmwgaXMgbm90IHZhbGlkXCIpOyh0PUNlKHRoaXMuZGVmYXVsdHMsdCkpLm1ldGhvZD90Lm1ldGhvZD10Lm1ldGhvZC50b0xvd2VyQ2FzZSgpOnRoaXMuZGVmYXVsdHMubWV0aG9kP3QubWV0aG9kPXRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk6dC5tZXRob2Q9XCJnZXRcIjt2YXIgbj10LnRyYW5zaXRpb25hbDt2b2lkIDAhPT1uJiZPZS5hc3NlcnRPcHRpb25zKG4se3NpbGVudEpTT05QYXJzaW5nOmtlLnRyYW5zaXRpb25hbChrZS5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzprZS50cmFuc2l0aW9uYWwoa2UuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjprZS50cmFuc2l0aW9uYWwoa2UuYm9vbGVhbil9LCExKTt2YXIgcj1bXSxvPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7XCJmdW5jdGlvblwiPT10eXBlb2YgZS5ydW5XaGVuJiYhMT09PWUucnVuV2hlbih0KXx8KG89byYmZS5zeW5jaHJvbm91cyxyLnVuc2hpZnQoZS5mdWxmaWxsZWQsZS5yZWplY3RlZCkpfSkpO3ZhciBpLHM9W107aWYodGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cy5wdXNoKGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpfSkpLCFvKXt2YXIgYT1bU2Usdm9pZCAwXTtmb3IoQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYSxyKSxhPWEuY29uY2F0KHMpLGk9UHJvbWlzZS5yZXNvbHZlKHQpO2EubGVuZ3RoOylpPWkudGhlbihhLnNoaWZ0KCksYS5zaGlmdCgpKTtyZXR1cm4gaX1mb3IodmFyIHU9dDtyLmxlbmd0aDspe3ZhciBjPXIuc2hpZnQoKSxmPXIuc2hpZnQoKTt0cnl7dT1jKHUpfWNhdGNoKGwpe2YobCk7YnJlYWt9fXRyeXtpPVNlKHUpfWNhdGNoKGwpe3JldHVybiBQcm9taXNlLnJlamVjdChsKX1mb3IoO3MubGVuZ3RoOylpPWkudGhlbihzLnNoaWZ0KCkscy5zaGlmdCgpKTtyZXR1cm4gaX0samUucHJvdG90eXBlLmdldFVyaT1mdW5jdGlvbihlKXtpZighZS51cmwpdGhyb3cgbmV3IEVycm9yKFwiUHJvdmlkZWQgY29uZmlnIHVybCBpcyBub3QgdmFsaWRcIik7cmV0dXJuIGU9Q2UodGhpcy5kZWZhdWx0cyxlKSx4ZShlLnVybCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cXD8vLFwiXCIpfSxfZS5mb3JFYWNoKFtcImRlbGV0ZVwiLFwiZ2V0XCIsXCJoZWFkXCIsXCJvcHRpb25zXCJdLChmdW5jdGlvbihlKXtqZS5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KENlKG58fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihufHx7fSkuZGF0YX0pKX19KSksX2UuZm9yRWFjaChbXCJwb3N0XCIsXCJwdXRcIixcInBhdGNoXCJdLChmdW5jdGlvbihlKXtqZS5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0aGlzLnJlcXVlc3QoQ2Uocnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6bn0pKX19KSk7dmFyIEFlPWplLEJlPUY7ZnVuY3Rpb24gVGUoZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLlwiKTt2YXIgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3Q9ZX0pKTt2YXIgbj10aGlzO3RoaXMucHJvbWlzZS50aGVuKChmdW5jdGlvbihlKXtpZihuLl9saXN0ZW5lcnMpe3ZhciB0LHI9bi5fbGlzdGVuZXJzLmxlbmd0aDtmb3IodD0wO3Q8cjt0Kyspbi5fbGlzdGVuZXJzW3RdKGUpO24uX2xpc3RlbmVycz1udWxsfX0pKSx0aGlzLnByb21pc2UudGhlbj1mdW5jdGlvbihlKXt2YXIgdCxyPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXtuLnN1YnNjcmliZShlKSx0PWV9KSkudGhlbihlKTtyZXR1cm4gci5jYW5jZWw9ZnVuY3Rpb24oKXtuLnVuc3Vic2NyaWJlKHQpfSxyfSxlKChmdW5jdGlvbihlKXtuLnJlYXNvbnx8KG4ucmVhc29uPW5ldyBCZShlKSx0KG4ucmVhc29uKSl9KSl9VGUucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn0sVGUucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihlKXt0aGlzLnJlYXNvbj9lKHRoaXMucmVhc29uKTp0aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goZSk6dGhpcy5fbGlzdGVuZXJzPVtlXX0sVGUucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2xpc3RlbmVycyl7dmFyIHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7LTEhPT10JiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9fSxUZS5zb3VyY2U9ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm57dG9rZW46bmV3IFRlKChmdW5jdGlvbih0KXtlPXR9KSksY2FuY2VsOmV9fTt2YXIgUGU9VGUsTmU9dyxVZT13LFJlPWMsTGU9QWUsSWU9eWU7dmFyICRlPWZ1bmN0aW9uIGUodCl7dmFyIG49bmV3IExlKHQpLHI9UmUoTGUucHJvdG90eXBlLnJlcXVlc3Qsbik7cmV0dXJuIFVlLmV4dGVuZChyLExlLnByb3RvdHlwZSxuKSxVZS5leHRlbmQocixuKSxyLmNyZWF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gZShJZSh0LG4pKX0scn0oaWUpOyRlLkF4aW9zPUxlLCRlLkNhbmNlbD1GLCRlLkNhbmNlbFRva2VuPVBlLCRlLmlzQ2FuY2VsPXVlLCRlLlZFUlNJT049bWUsJGUuYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX0sJGUuc3ByZWFkPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseShudWxsLHQpfX0sJGUuaXNBeGlvc0Vycm9yPWZ1bmN0aW9uKGUpe3JldHVybiBOZS5pc09iamVjdChlKSYmITA9PT1lLmlzQXhpb3NFcnJvcn0sdS5leHBvcnRzPSRlLHUuZXhwb3J0cy5kZWZhdWx0PSRlO3ZhciBNZT11LmV4cG9ydHM7Y29uc3QgRmU9e2xvZ0Vycm9yKGUpe2NvbnNvbGUmJmNvbnNvbGUuZXJyb3ImJmNvbnNvbGUuZXJyb3IoZSl9LGxvZ1dhcm4oZSl7Y29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oZSl9LGxvZ0luZm8oZSl7Y29uc29sZSYmY29uc29sZS5pbmZvJiZjb25zb2xlLmluZm8oZSl9fTtsZXQgVmU9e30scWU9bnVsbCxEZT1udWxsO2Z1bmN0aW9uIEhlKGUsdCl7aWYoZSl7Y29uc3Qgbj1cInN0cmluZ1wiPT10eXBlb2YgZT9KU09OLnBhcnNlKGUpOmU7cmV0dXJuIHFlJiZxZT49bi5jcmVhdGVkQXQ/e306KHFlPW4uY3JlYXRlZEF0LHFlPyhGZS5sb2dJbmZvKGBMb2FkaW5nIG5ldyBmZWF0dXJlIGNvbmZpZyAtIGNyZWF0ZWQgYXQ6ICR7cWV9YCksVmU9e30sbi5mZWF0dXJlcy5mb3JFYWNoKChlPT57VmVbZS5rZXldPWV9KSksXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmdCgpLG4pOnt9KX1yZXR1cm57fX1mdW5jdGlvbiB6ZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIFdlKGUsdCl7c3dpdGNoKGUucHJvcGVydHkpe2Nhc2VcIkNvdW50cnlcIjpyZXR1cm4gdC5jb3VudHJ5O2Nhc2VcIkFwcFZlcnNpb25cIjpyZXR1cm4gdC5hcHBWZXJzaW9uO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHJlc3RyaWN0aW9uIHByb3BlcnR5OiAke2UucHJvcGVydHl9YCl9fWZ1bmN0aW9uIEplKGUsdCxuKXtjb25zdCByPVdlKHQsbik7c3dpdGNoKHQucHJvcGVydHkpe2Nhc2VcIkNvdW50cnlcIjpyZXR1cm4gZS50b0xvd2VyQ2FzZSgpPT09ci50b0xvd2VyQ2FzZSgpO2Nhc2VcIkFwcFZlcnNpb25cIjpyZXR1cm4gZT09PXI7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHJlc3RyaWN0aW9uIHByb3BlcnR5OiBcIix0LnByb3BlcnR5KX19ZnVuY3Rpb24gR2UoZSx0LG4pe3N3aXRjaChuLnByb3BlcnR5KXtjYXNlXCJBcHBWZXJzaW9uXCI6cmV0dXJuIDE9PT1mdW5jdGlvbihlLHQpe2NvbnN0IG49ZS5zcGxpdChcIi5cIikubWFwKChlPT5wYXJzZUludChlKSkpLHI9dC5zcGxpdChcIi5cIikubWFwKChlPT5wYXJzZUludChlKSkpO2xldCBvPTA7Zm9yKDs7KXtpZihvPj1uLmxlbmd0aClyZXR1cm4gbz49ci5sZW5ndGg/MDotMTtpZihvPj1yLmxlbmd0aClyZXR1cm4gMTtpZihuW29dPnJbb10pcmV0dXJuIDE7aWYocltvXT5uW29dKXJldHVybi0xO28rK319KGUsdCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJQcm9wZXJ0eSBpcyBub3QgY29tcGFyYWJsZTogXCIsbi5wcm9wZXJ0eSl9fWZ1bmN0aW9uIEtlKGUsdCxuKXtjb25zdCByPVdlKHQsbiksbz10W2VdO3N3aXRjaChlKXtjYXNlXCJndFwiOnJldHVybiBHZShyLG8sdCk7Y2FzZVwiZ3RlXCI6cmV0dXJuIEdlKHIsbyx0KXx8SmUobyx0LG4pO2Nhc2VcImx0XCI6cmV0dXJuIEdlKG8scix0KTtjYXNlXCJsdGVcIjpyZXR1cm4gR2UobyxyLHQpfHxKZShvLHQsbik7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gWGUoZSx0KXt0cnl7cmV0dXJuIGZ1bmN0aW9uKGUpe2NvbnN0IHQ9W1wiYW5kXCIsXCJvclwiLFwiZXFcIixcIm5lcVwiLFwiaW5cIixcIm5pblwiLFwiZ3RcIixcImd0ZVwiLFwibHRcIixcImx0ZVwiXS5maWx0ZXIoKHQ9PmVbdF0pKTtpZih0Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcihgJHt0Lmxlbmd0aH0gb3BlcmF0b3JzIHNwZWNpZmllZGAsdCl9KGUpLGUuYW5kP2UuYW5kLmV2ZXJ5KChlPT5YZShlLHQpKSk6ZS5vcj9lLm9yLnNvbWUoKGU9PlhlKGUsdCkpKTplLmVxP0plKGUuZXEsZSx0KTplLm5lcT8hSmUoZS5uZXEsZSx0KTplLmluP2UuaW4uc29tZSgobj0+SmUobixlLHQpKSk6ZS5uaW4/ZS5uaW4uZXZlcnkoKG49PiFKZShuLGUsdCkpKTplLmd0P0tlKFwiZ3RcIixlLHQpOmUuZ3RlP0tlKFwiZ3RlXCIsZSx0KTplLmx0P0tlKFwibHRcIixlLHQpOiFlLmx0ZXx8S2UoXCJsdGVcIixlLHQpfWNhdGNoKG4pe3JldHVybiBGZS5sb2dXYXJuKG4ubWVzc2FnZSxudWxsLHtlcnJvcjpufSksITF9fXZhciBRZSxZZT17ZXhwb3J0czp7fX0sWmU9e2V4cG9ydHM6e319LGV0PWEoT2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsW1N5bWJvbC50b1N0cmluZ1RhZ106XCJNb2R1bGVcIixkZWZhdWx0Ont9fSkpO1plLmV4cG9ydHM9UWU9UWV8fGZ1bmN0aW9uKGUsdCl7dmFyIG47aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93LmNyeXB0byYmKG49d2luZG93LmNyeXB0byksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGYuY3J5cHRvJiYobj1zZWxmLmNyeXB0byksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMuY3J5cHRvJiYobj1nbG9iYWxUaGlzLmNyeXB0byksIW4mJlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5tc0NyeXB0byYmKG49d2luZG93Lm1zQ3J5cHRvKSwhbiYmdm9pZCAwIT09cyYmcy5jcnlwdG8mJihuPXMuY3J5cHRvKSwhbil0cnl7bj1ldH1jYXRjaCh5KXt9dmFyIHI9ZnVuY3Rpb24oKXtpZihuKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLmdldFJhbmRvbVZhbHVlcyl0cnl7cmV0dXJuIG4uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheSgxKSlbMF19Y2F0Y2goeSl7fWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4ucmFuZG9tQnl0ZXMpdHJ5e3JldHVybiBuLnJhbmRvbUJ5dGVzKDQpLnJlYWRJbnQzMkxFKCl9Y2F0Y2goeSl7fX10aHJvdyBuZXcgRXJyb3IoXCJOYXRpdmUgY3J5cHRvIG1vZHVsZSBjb3VsZCBub3QgYmUgdXNlZCB0byBnZXQgc2VjdXJlIHJhbmRvbSBudW1iZXIuXCIpfSxvPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIGUucHJvdG90eXBlPXQsbj1uZXcgZSxlLnByb3RvdHlwZT1udWxsLG59fSgpLGk9e30sYT1pLmxpYj17fSx1PWEuQmFzZT17ZXh0ZW5kOmZ1bmN0aW9uKGUpe3ZhciB0PW8odGhpcyk7cmV0dXJuIGUmJnQubWl4SW4oZSksdC5oYXNPd25Qcm9wZXJ0eShcImluaXRcIikmJnRoaXMuaW5pdCE9PXQuaW5pdHx8KHQuaW5pdD1mdW5jdGlvbigpe3QuJHN1cGVyLmluaXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksdC5pbml0LnByb3RvdHlwZT10LHQuJHN1cGVyPXRoaXMsdH0sY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5leHRlbmQoKTtyZXR1cm4gZS5pbml0LmFwcGx5KGUsYXJndW1lbnRzKSxlfSxpbml0OmZ1bmN0aW9uKCl7fSxtaXhJbjpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSllLmhhc093blByb3BlcnR5KHQpJiYodGhpc1t0XT1lW3RdKTtlLmhhc093blByb3BlcnR5KFwidG9TdHJpbmdcIikmJih0aGlzLnRvU3RyaW5nPWUudG9TdHJpbmcpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXQucHJvdG90eXBlLmV4dGVuZCh0aGlzKX19LGM9YS5Xb3JkQXJyYXk9dS5leHRlbmQoe2luaXQ6ZnVuY3Rpb24oZSxuKXtlPXRoaXMud29yZHM9ZXx8W10sdGhpcy5zaWdCeXRlcz1uIT10P246NCplLmxlbmd0aH0sdG9TdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuKGV8fGwpLnN0cmluZ2lmeSh0aGlzKX0sY29uY2F0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMud29yZHMsbj1lLndvcmRzLHI9dGhpcy5zaWdCeXRlcyxvPWUuc2lnQnl0ZXM7aWYodGhpcy5jbGFtcCgpLHIlNClmb3IodmFyIGk9MDtpPG87aSsrKXt2YXIgcz1uW2k+Pj4yXT4+PjI0LWklNCo4JjI1NTt0W3IraT4+PjJdfD1zPDwyNC0ocitpKSU0Kjh9ZWxzZSBmb3IodmFyIGE9MDthPG87YSs9NCl0W3IrYT4+PjJdPW5bYT4+PjJdO3JldHVybiB0aGlzLnNpZ0J5dGVzKz1vLHRoaXN9LGNsYW1wOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3JkcyxuPXRoaXMuc2lnQnl0ZXM7dFtuPj4+Ml0mPTQyOTQ5NjcyOTU8PDMyLW4lNCo4LHQubGVuZ3RoPWUuY2VpbChuLzQpfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBlPXUuY2xvbmUuY2FsbCh0aGlzKTtyZXR1cm4gZS53b3Jkcz10aGlzLndvcmRzLnNsaWNlKDApLGV9LHJhbmRvbTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZTtuKz00KXQucHVzaChyKCkpO3JldHVybiBuZXcgYy5pbml0KHQsZSl9fSksZj1pLmVuYz17fSxsPWYuSGV4PXtzdHJpbmdpZnk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUud29yZHMsbj1lLnNpZ0J5dGVzLHI9W10sbz0wO288bjtvKyspe3ZhciBpPXRbbz4+PjJdPj4+MjQtbyU0KjgmMjU1O3IucHVzaCgoaT4+PjQpLnRvU3RyaW5nKDE2KSksci5wdXNoKCgxNSZpKS50b1N0cmluZygxNikpfXJldHVybiByLmpvaW4oXCJcIil9LHBhcnNlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxuPVtdLHI9MDtyPHQ7cis9MiluW3I+Pj4zXXw9cGFyc2VJbnQoZS5zdWJzdHIociwyKSwxNik8PDI0LXIlOCo0O3JldHVybiBuZXcgYy5pbml0KG4sdC8yKX19LGg9Zi5MYXRpbjE9e3N0cmluZ2lmeTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS53b3JkcyxuPWUuc2lnQnl0ZXMscj1bXSxvPTA7bzxuO28rKyl7dmFyIGk9dFtvPj4+Ml0+Pj4yNC1vJTQqOCYyNTU7ci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaSkpfXJldHVybiByLmpvaW4oXCJcIil9LHBhcnNlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxuPVtdLHI9MDtyPHQ7cisrKW5bcj4+PjJdfD0oMjU1JmUuY2hhckNvZGVBdChyKSk8PDI0LXIlNCo4O3JldHVybiBuZXcgYy5pbml0KG4sdCl9fSxwPWYuVXRmOD17c3RyaW5naWZ5OmZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShoLnN0cmluZ2lmeShlKSkpfWNhdGNoKHQpe3Rocm93IG5ldyBFcnJvcihcIk1hbGZvcm1lZCBVVEYtOCBkYXRhXCIpfX0scGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGgucGFyc2UodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUpKSl9fSxkPWEuQnVmZmVyZWRCbG9ja0FsZ29yaXRobT11LmV4dGVuZCh7cmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9kYXRhPW5ldyBjLmluaXQsdGhpcy5fbkRhdGFCeXRlcz0wfSxfYXBwZW5kOmZ1bmN0aW9uKGUpe1wic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1wLnBhcnNlKGUpKSx0aGlzLl9kYXRhLmNvbmNhdChlKSx0aGlzLl9uRGF0YUJ5dGVzKz1lLnNpZ0J5dGVzfSxfcHJvY2VzczpmdW5jdGlvbih0KXt2YXIgbixyPXRoaXMuX2RhdGEsbz1yLndvcmRzLGk9ci5zaWdCeXRlcyxzPXRoaXMuYmxvY2tTaXplLGE9aS8oNCpzKSx1PShhPXQ/ZS5jZWlsKGEpOmUubWF4KCgwfGEpLXRoaXMuX21pbkJ1ZmZlclNpemUsMCkpKnMsZj1lLm1pbig0KnUsaSk7aWYodSl7Zm9yKHZhciBsPTA7bDx1O2wrPXMpdGhpcy5fZG9Qcm9jZXNzQmxvY2sobyxsKTtuPW8uc3BsaWNlKDAsdSksci5zaWdCeXRlcy09Zn1yZXR1cm4gbmV3IGMuaW5pdChuLGYpfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBlPXUuY2xvbmUuY2FsbCh0aGlzKTtyZXR1cm4gZS5fZGF0YT10aGlzLl9kYXRhLmNsb25lKCksZX0sX21pbkJ1ZmZlclNpemU6MH0pO2EuSGFzaGVyPWQuZXh0ZW5kKHtjZmc6dS5leHRlbmQoKSxpbml0OmZ1bmN0aW9uKGUpe3RoaXMuY2ZnPXRoaXMuY2ZnLmV4dGVuZChlKSx0aGlzLnJlc2V0KCl9LHJlc2V0OmZ1bmN0aW9uKCl7ZC5yZXNldC5jYWxsKHRoaXMpLHRoaXMuX2RvUmVzZXQoKX0sdXBkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9hcHBlbmQoZSksdGhpcy5fcHJvY2VzcygpLHRoaXN9LGZpbmFsaXplOmZ1bmN0aW9uKGUpe3JldHVybiBlJiZ0aGlzLl9hcHBlbmQoZSksdGhpcy5fZG9GaW5hbGl6ZSgpfSxibG9ja1NpemU6MTYsX2NyZWF0ZUhlbHBlcjpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3IGUuaW5pdChuKS5maW5hbGl6ZSh0KX19LF9jcmVhdGVIbWFjSGVscGVyOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiBuZXcgZy5ITUFDLmluaXQoZSxuKS5maW5hbGl6ZSh0KX19fSk7dmFyIGc9aS5hbGdvPXt9O3JldHVybiBpfShNYXRoKTt2YXIgdHQ9WmUuZXhwb3J0czshZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPWUscj1uLmxpYixvPXIuV29yZEFycmF5LGk9ci5IYXNoZXIscz1uLmFsZ28sYT1bXTshZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPDY0O2UrKylhW2VdPTQyOTQ5NjcyOTYqdC5hYnModC5zaW4oZSsxKSl8MH0oKTt2YXIgdT1zLk1ENT1pLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyBvLmluaXQoWzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OF0pfSxfZG9Qcm9jZXNzQmxvY2s6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPDE2O24rKyl7dmFyIHI9dCtuLG89ZVtyXTtlW3JdPTE2NzExOTM1JihvPDw4fG8+Pj4yNCl8NDI3ODI1NTM2MCYobzw8MjR8bz4+PjgpfXZhciBpPXRoaXMuX2hhc2gud29yZHMscz1lW3QrMF0sdT1lW3QrMV0scD1lW3QrMl0sZD1lW3QrM10sZz1lW3QrNF0seT1lW3QrNV0sbT1lW3QrNl0sdj1lW3QrN10sdz1lW3QrOF0sYj1lW3QrOV0sXz1lW3QrMTBdLHg9ZVt0KzExXSxFPWVbdCsxMl0sUz1lW3QrMTNdLEM9ZVt0KzE0XSxPPWVbdCsxNV0saz1pWzBdLGo9aVsxXSxBPWlbMl0sQj1pWzNdO2s9YyhrLGosQSxCLHMsNyxhWzBdKSxCPWMoQixrLGosQSx1LDEyLGFbMV0pLEE9YyhBLEIsayxqLHAsMTcsYVsyXSksaj1jKGosQSxCLGssZCwyMixhWzNdKSxrPWMoayxqLEEsQixnLDcsYVs0XSksQj1jKEIsayxqLEEseSwxMixhWzVdKSxBPWMoQSxCLGssaixtLDE3LGFbNl0pLGo9YyhqLEEsQixrLHYsMjIsYVs3XSksaz1jKGssaixBLEIsdyw3LGFbOF0pLEI9YyhCLGssaixBLGIsMTIsYVs5XSksQT1jKEEsQixrLGosXywxNyxhWzEwXSksaj1jKGosQSxCLGsseCwyMixhWzExXSksaz1jKGssaixBLEIsRSw3LGFbMTJdKSxCPWMoQixrLGosQSxTLDEyLGFbMTNdKSxBPWMoQSxCLGssaixDLDE3LGFbMTRdKSxrPWYoayxqPWMoaixBLEIsayxPLDIyLGFbMTVdKSxBLEIsdSw1LGFbMTZdKSxCPWYoQixrLGosQSxtLDksYVsxN10pLEE9ZihBLEIsayxqLHgsMTQsYVsxOF0pLGo9ZihqLEEsQixrLHMsMjAsYVsxOV0pLGs9ZihrLGosQSxCLHksNSxhWzIwXSksQj1mKEIsayxqLEEsXyw5LGFbMjFdKSxBPWYoQSxCLGssaixPLDE0LGFbMjJdKSxqPWYoaixBLEIsayxnLDIwLGFbMjNdKSxrPWYoayxqLEEsQixiLDUsYVsyNF0pLEI9ZihCLGssaixBLEMsOSxhWzI1XSksQT1mKEEsQixrLGosZCwxNCxhWzI2XSksaj1mKGosQSxCLGssdywyMCxhWzI3XSksaz1mKGssaixBLEIsUyw1LGFbMjhdKSxCPWYoQixrLGosQSxwLDksYVsyOV0pLEE9ZihBLEIsayxqLHYsMTQsYVszMF0pLGs9bChrLGo9ZihqLEEsQixrLEUsMjAsYVszMV0pLEEsQix5LDQsYVszMl0pLEI9bChCLGssaixBLHcsMTEsYVszM10pLEE9bChBLEIsayxqLHgsMTYsYVszNF0pLGo9bChqLEEsQixrLEMsMjMsYVszNV0pLGs9bChrLGosQSxCLHUsNCxhWzM2XSksQj1sKEIsayxqLEEsZywxMSxhWzM3XSksQT1sKEEsQixrLGosdiwxNixhWzM4XSksaj1sKGosQSxCLGssXywyMyxhWzM5XSksaz1sKGssaixBLEIsUyw0LGFbNDBdKSxCPWwoQixrLGosQSxzLDExLGFbNDFdKSxBPWwoQSxCLGssaixkLDE2LGFbNDJdKSxqPWwoaixBLEIsayxtLDIzLGFbNDNdKSxrPWwoayxqLEEsQixiLDQsYVs0NF0pLEI9bChCLGssaixBLEUsMTEsYVs0NV0pLEE9bChBLEIsayxqLE8sMTYsYVs0Nl0pLGs9aChrLGo9bChqLEEsQixrLHAsMjMsYVs0N10pLEEsQixzLDYsYVs0OF0pLEI9aChCLGssaixBLHYsMTAsYVs0OV0pLEE9aChBLEIsayxqLEMsMTUsYVs1MF0pLGo9aChqLEEsQixrLHksMjEsYVs1MV0pLGs9aChrLGosQSxCLEUsNixhWzUyXSksQj1oKEIsayxqLEEsZCwxMCxhWzUzXSksQT1oKEEsQixrLGosXywxNSxhWzU0XSksaj1oKGosQSxCLGssdSwyMSxhWzU1XSksaz1oKGssaixBLEIsdyw2LGFbNTZdKSxCPWgoQixrLGosQSxPLDEwLGFbNTddKSxBPWgoQSxCLGssaixtLDE1LGFbNThdKSxqPWgoaixBLEIsayxTLDIxLGFbNTldKSxrPWgoayxqLEEsQixnLDYsYVs2MF0pLEI9aChCLGssaixBLHgsMTAsYVs2MV0pLEE9aChBLEIsayxqLHAsMTUsYVs2Ml0pLGo9aChqLEEsQixrLGIsMjEsYVs2M10pLGlbMF09aVswXStrfDAsaVsxXT1pWzFdK2p8MCxpWzJdPWlbMl0rQXwwLGlbM109aVszXStCfDB9LF9kb0ZpbmFsaXplOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZGF0YSxuPWUud29yZHMscj04KnRoaXMuX25EYXRhQnl0ZXMsbz04KmUuc2lnQnl0ZXM7bltvPj4+NV18PTEyODw8MjQtbyUzMjt2YXIgaT10LmZsb29yKHIvNDI5NDk2NzI5Nikscz1yO25bMTUrKG8rNjQ+Pj45PDw0KV09MTY3MTE5MzUmKGk8PDh8aT4+PjI0KXw0Mjc4MjU1MzYwJihpPDwyNHxpPj4+OCksblsxNCsobys2ND4+Pjk8PDQpXT0xNjcxMTkzNSYoczw8OHxzPj4+MjQpfDQyNzgyNTUzNjAmKHM8PDI0fHM+Pj44KSxlLnNpZ0J5dGVzPTQqKG4ubGVuZ3RoKzEpLHRoaXMuX3Byb2Nlc3MoKTtmb3IodmFyIGE9dGhpcy5faGFzaCx1PWEud29yZHMsYz0wO2M8NDtjKyspe3ZhciBmPXVbY107dVtjXT0xNjcxMTkzNSYoZjw8OHxmPj4+MjQpfDQyNzgyNTUzNjAmKGY8PDI0fGY+Pj44KX1yZXR1cm4gYX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgZT1pLmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIGUuX2hhc2g9dGhpcy5faGFzaC5jbG9uZSgpLGV9fSk7ZnVuY3Rpb24gYyhlLHQsbixyLG8saSxzKXt2YXIgYT1lKyh0Jm58fnQmcikrbytzO3JldHVybihhPDxpfGE+Pj4zMi1pKSt0fWZ1bmN0aW9uIGYoZSx0LG4scixvLGkscyl7dmFyIGE9ZSsodCZyfG4mfnIpK28rcztyZXR1cm4oYTw8aXxhPj4+MzItaSkrdH1mdW5jdGlvbiBsKGUsdCxuLHIsbyxpLHMpe3ZhciBhPWUrKHRebl5yKStvK3M7cmV0dXJuKGE8PGl8YT4+PjMyLWkpK3R9ZnVuY3Rpb24gaChlLHQsbixyLG8saSxzKXt2YXIgYT1lKyhuXih0fH5yKSkrbytzO3JldHVybihhPDxpfGE+Pj4zMi1pKSt0fW4uTUQ1PWkuX2NyZWF0ZUhlbHBlcih1KSxuLkhtYWNNRDU9aS5fY3JlYXRlSG1hY0hlbHBlcih1KX0oTWF0aCksZS5NRDV9KFplLmV4cG9ydHMpfShZZSk7dmFyIG50PVllLmV4cG9ydHM7ZnVuY3Rpb24gcnQoZSx0KXtjb25zdCBuPVtdO3JldHVybiB0PjAmJm4ucHVzaChlPj4+MjQpLHQ+MSYmbi5wdXNoKGU+Pj4xNiYyNTUpLHQ+MiYmbi5wdXNoKGU+Pj44JjI1NSksdD4zJiZuLnB1c2goMjU1JmUpLG59ZnVuY3Rpb24gb3QoZSx0KXtsZXQgbj1lLHI9dDtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixcInNpZ0J5dGVzXCIpJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixcIndvcmRzXCIpJiYocj1uLnNpZ0J5dGVzLG49bi53b3Jkcyk7Y29uc3Qgbz1bXTtsZXQgaSxzPTA7Zm9yKDtyPjA7KWk9cnQobltzXSxNYXRoLm1pbig0LHIpKSxyLT1pLmxlbmd0aCxvLnB1c2goaSkscysrO3JldHVybltdLmNvbmNhdC5hcHBseShbXSxvKX1mdW5jdGlvbiBpdChlKXtjb25zdCB0PW90KG50KGUpKTtyZXR1cm4oKHRbMV08PDgpK3RbMF0pLzY1NTM1fWZ1bmN0aW9uIHN0KGUpe2NvbnN0IHQ9dHQuZW5jLlV0ZjgucGFyc2UoZSksbj1pdCh0KSxyPW90KHQpO3JbMF1ePTE7cmV0dXJue2F1ZGllbmNlRnJhY3Rpb246bix2YXJpYW50RnJhY3Rpb246aXQoZnVuY3Rpb24oZSl7Y29uc3QgdD1bXTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0W24vNHwwXXw9ZVtuXTw8MjQtOCpuO3JldHVybiB0dC5saWIuV29yZEFycmF5LmNyZWF0ZSh0LGUubGVuZ3RoKX0ocikpfX1mdW5jdGlvbiBhdChlLHQpe2NvbnN0IG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5ydWxlcy5maW5kKChlPT5YZShlLnJlc3RyaWN0aW9ucyx0KSkpfHxudWxsfShlLHQpO2lmKCFuKXJldHVybiBudWxsO2NvbnN0e2F1ZGllbmNlRnJhY3Rpb246cix2YXJpYW50RnJhY3Rpb246b309c3QoZS5wcmVmaXgrZnVuY3Rpb24oZSx0KXtzd2l0Y2goZS5idWNrZXRCeSl7Y2FzZVwiQW5vblVzZXJJZFwiOnJldHVybiB0LmFub25Vc2VySWQ7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGJ1Y2tldEJ5IFwiLGUuYnVja2V0QnkpfX0oZSx0KSk7aWYobi5hdWRpZW5jZUZyYWN0aW9uPHIpcmV0dXJuIG51bGw7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodD4xKXRocm93IG5ldyBFcnJvcihgVmFyaWFudCBmcmFjdGlvbiB3YXMgJHt0fSBidXQgc2hvdWxkbid0IGJlID4gMWApO2xldCBuPTA7ZS52YXJpYW50cy5mb3JFYWNoKChlPT57bis9ZS53ZWlnaHR9KSk7bGV0IHI9MDtjb25zdCBvPWUudmFyaWFudHMuZmluZCgoZT0+KHIrPWUud2VpZ2h0L24scj49dCkpKTtpZihvKXJldHVybiBvO3Rocm93IG5ldyBFcnJvcihcIk5vIG1hdGNoaW5nIHZhcmlhbnQgZm91bmQuXCIpfShuLG8pfWNsYXNzIHV0e2NvbnN0cnVjdG9yKGUpe3RoaXMuZmVhdHVyZU1hbmFnZW1lbnRJbnN0YW5jZT1lfXBlZWtFeHBlcmltZW50cygpe2NvbnN0IGU9VmU7bGV0IHQ9W107cmV0dXJuIE9iamVjdC5rZXlzKGUpLnNvcnQoKS5mb3JFYWNoKChlPT57Y29uc3Qgbj1lLnJlcGxhY2UoYCR7dGhpcy5mZWF0dXJlTWFuYWdlbWVudEluc3RhbmNlLl9rZXlQcmVmaXh9OjpgLFwiXCIpO3Q9Wy4uLnQse2tleTplLHZhbHVlOnRoaXMuZmVhdHVyZU1hbmFnZW1lbnRJbnN0YW5jZS5nZXRWYWx1ZShuLCExKX1dfSkpLHR9fWNvbnN0IGN0PVwiYm9vbGVhblwiLGZ0PVwibnVtYmVyXCIsbHQ9XCJzdHJpbmdcIixodD1cImJvb2xcIixwdD1cImludFwiO2NsYXNzIGR0e2NvbnN0cnVjdG9yKG4pe19fcHJpdmF0ZUFkZCh0aGlzLHQpLF9fcHJpdmF0ZUFkZCh0aGlzLHIpLF9fcHJpdmF0ZUFkZCh0aGlzLGUsdm9pZCAwKTt0cnl7X19wcml2YXRlU2V0KHRoaXMsZSxuZXcgVVJMKG4pKX1jYXRjaChvKXtGZS5sb2dXYXJuKGBbRmVhdHVyZU92ZXJyaWRlXSBJbnZhbGlkIFVSTCBzdHJpbmcgJyR7bn0nLiBDaGVjayB5b3VyIHNldHRpbmdzIGZvciB0aGUgcGx1Z2luYCx7ZXJyb3I6b30pfX1nZXRPdmVycmlkZShpLHMpe2lmKCFfX3ByaXZhdGVHZXQodGhpcyxlKSlyZXR1cm4gbnVsbDtjb25zdCBhPV9fcHJpdmF0ZUdldCh0aGlzLGUpLnNlYXJjaFBhcmFtcy5nZXQoYGpldC1mbS0ke2l9YCk7aWYoIWEpcmV0dXJuIG51bGw7dHJ5e2xldCBlO3N3aXRjaChzKXtjYXNlIGh0OmU9X19wcml2YXRlTWV0aG9kKHRoaXMsdCxuKS5jYWxsKHRoaXMsYSk7YnJlYWs7Y2FzZSBwdDplPV9fcHJpdmF0ZU1ldGhvZCh0aGlzLHIsbykuY2FsbCh0aGlzLGEpO2JyZWFrO2RlZmF1bHQ6ZT1hfXJldHVybiBjb25zb2xlLmxvZyhgW0ZlYXR1cmVPdmVycmlkZV0gVGhlIEZlYXR1cmUgJyR7aX0nIGhhcyBiZWVuIG92ZXJyaWRkZW4gd2l0aCB0aGUgdmFsdWUgJyR7ZX0nYCksZX1jYXRjaCh1KXtyZXR1cm4gY29uc29sZS5sb2coYFtGZWF0dXJlT3ZlcnJpZGVdIFRoZSBGZWF0dXJlICcke2l9JyBoYXMgYW4gb3ZlcnJpZGUgdmFsdWUgJyR7YX0nIGJ1dCBjYW5ub3QgYmUgY2FzdGVkIHRvICcke3N9JyBbRXJyb3I6ICcke3UubWVzc2FnZX0nXWApLG51bGx9fX1lPW5ldyBXZWFrTWFwLHQ9bmV3IFdlYWtTZXQsbj1mdW5jdGlvbihlKXtpZihcInRydWVcIj09PWUudG9Mb3dlckNhc2UoKSlyZXR1cm4hMDtpZihcImZhbHNlXCI9PT1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuITE7dGhyb3cgbmV3IEVycm9yKFwiQ2FzdCBlcnJvcjogTm90IGEgYm9vbGVhblwiKX0scj1uZXcgV2Vha1NldCxvPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9TnVtYmVyKGUpO2lmKGlzTmFOKHQpKXRocm93IG5ldyBFcnJvcihcIkNhc3QgZXJyb3I6IE5vdCBhIG51bWJlclwiKTtyZXR1cm4gdH07Y29uc3QgZ3Q9KGUsdCxuKT0+e0ZlLmxvZ0luZm8oYCR7ZS5uYW1lfTogJHt0fSA9PiAke259YCl9O2NsYXNzIHl0e2NvbnN0cnVjdG9yKGUsdCl7X19wcml2YXRlQWRkKHRoaXMsaSx2b2lkIDApLHRoaXMuX2tleVByZWZpeD1lLmtleVByZWZpeCx0aGlzLl9vblRyYWNrPWUub25UcmFjayx0aGlzLl9vblVwZGF0ZWQ9ZS5vblVwZGF0ZWQsdGhpcy5fY2RuPWUuY2RuLHRoaXMuX2h0dHBDbGllbnQ9dCx0aGlzLmdldENvbnRleHQ9ZS5jb250ZXh0R2V0dGVyLHRoaXMub2JzZXJ2ZXI9bmV3IHV0KHRoaXMpLF9fcHJpdmF0ZVNldCh0aGlzLGksZS51cmxTdHJpbmc/bmV3IGR0KGUudXJsU3RyaW5nKTpudWxsKX1jcmVhdGVGdWxsS2V5KGUpe3JldHVybiBlLmluY2x1ZGVzKFwiOjpcIik/ZTp0aGlzLl9rZXlQcmVmaXg/YCR7dGhpcy5fa2V5UHJlZml4fTo6JHtlfWA6ZX1nZXRWYWx1ZShlLHQ9ITApe3RyeXtjb25zdCByPShuPXRoaXMuY3JlYXRlRnVsbEtleShlKSxWZVtuXSk7aWYoIXIpcmV0dXJuIG51bGw7Y29uc3Qgbz1fX3ByaXZhdGVHZXQodGhpcyxpKT9fX3ByaXZhdGVHZXQodGhpcyxpKS5nZXRPdmVycmlkZShlLHIudmFsdWVUeXBlKTpudWxsO2lmKG51bGwhPT1vKXJldHVybiBvO2NvbnN0IHM9dGhpcy5nZXRDb250ZXh0KCk7aWYoIXMpcmV0dXJuIEZlLmxvZ0Vycm9yKFwiVW5hYmxlIHRvIHByb3ZpZGUgZmVhdHVyZSB2YWx1ZXMgYXMgbm8gY29udGV4dCB3YXMgcHJvdmlkZWQuIENoZWNrIHlvdXIgc2V0dGluZ3MgZm9yIHRoZSBwbHVnaW5cIiksbnVsbDtjb25zdCBhPWZ1bmN0aW9uKGUsdCl7aWYoIWUuZXZhbHVhdGlvbkxvZ2ljKXJldHVybiBudWxsO3N3aXRjaChlLmV2YWx1YXRpb25Mb2dpYy50eXBlKXtjYXNlXCJJZEhhc2hcIjpyZXR1cm4gYXQoZS5ldmFsdWF0aW9uTG9naWMuZGV0YWlsLHQpO2RlZmF1bHQ6cmV0dXJuIG51bGx9fShyLHMpO2lmKGEpcmV0dXJuIHQmJmEuZXhwZXJpbWVudEtleSYmYS5leHBlcmltZW50VmFyaWFudCYmZnVuY3Rpb24oZSx0KXtpZighZS5leHBlcmltZW50S2V5fHwhZS5leHBlcmltZW50VmFyaWFudClyZXR1cm47Y29uc3Qgbj1lLmV4cGVyaW1lbnRLZXkscj1lLmV4cGVyaW1lbnRWYXJpYW50O2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpe0ZlLmxvZ0luZm8oYFRyYWNraW5nIGV4cGVyaW1lbnQgLSBrZXk6ICR7bn0sIHZhcmlhbnQ6ICR7cn1gKTt0cnl7dChuLHIpfWNhdGNoKG8pe0ZlLmxvZ0Vycm9yKFwiQW4gZXhjZXB0aW9uIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byBzZW5kIGFuIGV4cGVyaW1lbnQgZXZlbnRcIix7ZXJyb3I6b30pfX1lbHNlIEZlLmxvZ1dhcm4oYEV4cGVyaW1lbnQgd2lsbCBub3QgYmUgdHJhY2tlZCBhcyBubyBcXGBvblRyYWNrXFxgIGNhbGxiYWNrIHdhcyBwcm92aWRlZCAoa2V5OiAke259LCB2YXJpYW50OiAke3J9KWApfShhLHRoaXMuX29uVHJhY2spLGEudmFsdWU7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1lLmRlZmF1bHRWYWx1ZVJ1bGVzLmZpbmQoKGU9PlhlKGUucmVzdHJpY3Rpb25zLHQpKSk7cmV0dXJuIG4/bi52YWx1ZTpudWxsfShyLHMpfWNhdGNoKHIpe3JldHVybiBGZS5sb2dFcnJvcihyLm1lc3NhZ2Use2Vycm9yOnJ9KSxudWxsfXZhciBufWdldEJvb2xlYW5WYWx1ZShlKXtjb25zdCB0PXRoaXMuZ2V0VmFsdWUoZSk7cmV0dXJuIHR5cGVvZiB0PT09Y3Q/KGd0KHRoaXMuZ2V0Qm9vbGVhblZhbHVlLGUsdCksdCk6bnVsbH1nZXRJbnRlZ2VyVmFsdWUoZSl7Y29uc3QgdD10aGlzLmdldFZhbHVlKGUpO3JldHVybiB0eXBlb2YgdD09PWZ0PyhndCh0aGlzLmdldEludGVnZXJWYWx1ZSxlLHQpLHQpOm51bGx9Z2V0U3RyaW5nVmFsdWUoZSl7Y29uc3QgdD10aGlzLmdldFZhbHVlKGUpO3JldHVybiB0eXBlb2YgdD09PWx0PyhndCh0aGlzLmdldFN0cmluZ1ZhbHVlLGUsdCksdCk6bnVsbH1sb2FkRnJvbUNkbigpe2lmKHRoaXMuX2NkbilyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gX19hc3luYyh0aGlzLGFyZ3VtZW50cywoZnVuY3Rpb24qKGUsdCxuPU1lLmNyZWF0ZSgpKXtjb25zdCByPWUua2V5P2AtJHtlLmtleX1gOlwiXCIsbz1gJHtlLmhvc3R8fFwiaHR0cHM6Ly9mZWF0dXJlcy5hcGkuanVzdGVhdHRha2Vhd2F5LmNvbVwifS9jb25maWcvdjEvJHtlLnNjb3BlfS8ke2UuZW52aXJvbm1lbnR9JHtyfWA7ZnVuY3Rpb24gaSgpe3JldHVybiBfX2FzeW5jKHRoaXMsbnVsbCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCBuLmdldChvKTtyZXR1cm4gSGUoZS5kYXRhLHQpLGUuZGF0YX0pKX1jb25zdCBzPXlpZWxkIGkoKTtyZXR1cm4gY2xlYXJJbnRlcnZhbChEZSksZS5wb2xsJiYoRGU9c2V0SW50ZXJ2YWwoKCgpPT5fX2FzeW5jKHRoaXMsbnVsbCwoZnVuY3Rpb24qKCl7eWllbGQgaSgpfSkpKSxlLnBvbGxJbnRlcnZhbHx8M2U0KSksc30pKX0odGhpcy5fY2RuLHRoaXMuX29uVXBkYXRlZCx0aGlzLl9odHRwQ2xpZW50KTt0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IHByb3ZpZGUgQ0ROIHNldHRpbmdzIGZvciBDRE4gbG9hZCB0byB3b3JrIGNvcnJlY3RseVwiKX11cGRhdGVDb25maWcoZSl7SGUoZSl9fWk9bmV3IFdlYWtNYXA7bGV0IG10PW51bGw7ZnVuY3Rpb24gdnQoZSx0KXtyZXR1cm4gbXQmJiEwIT09ZS5yZWluaXRpYWxpc2V8fChlLmxvZ2dlciYmKG49ZS5sb2dnZXIsT2JqZWN0LmFzc2lnbihGZSxuKSksZS5pbml0aWFsQ29uZmlnQXNKc29uJiZIZShlLmluaXRpYWxDb25maWdBc0pzb24pLGUuY29udGV4dEdldHRlcnx8KGUuY29udGV4dEdldHRlcj16ZSksbXQ9bmV3IHl0KGUsdCkpLG10O3ZhciBufXJldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiB2dChlLHQpfX0pKTtcbiIsIi8qISBGb3IgbGljZW5zZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIGluZGV4LmpzLkxJQ0VOU0UgKi9cbiFmdW5jdGlvbihyb290LGZhY3Rvcnkpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlKW1vZHVsZS5leHBvcnRzPWZhY3RvcnkoKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sZmFjdG9yeSk7ZWxzZXt2YXIgYT1mYWN0b3J5KCk7Zm9yKHZhciBpIGluIGEpKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHM6cm9vdClbaV09YVtpXX19KHdpbmRvdywoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obW9kdWxlcyl7dmFyIGluc3RhbGxlZE1vZHVsZXM9e307ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCl7aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pcmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7dmFyIG1vZHVsZT1pbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXT17aTptb2R1bGVJZCxsOiExLGV4cG9ydHM6e319O3JldHVybiBtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLG1vZHVsZSxtb2R1bGUuZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKSxtb2R1bGUubD0hMCxtb2R1bGUuZXhwb3J0c31yZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXy5tPW1vZHVsZXMsX193ZWJwYWNrX3JlcXVpcmVfXy5jPWluc3RhbGxlZE1vZHVsZXMsX193ZWJwYWNrX3JlcXVpcmVfXy5kPWZ1bmN0aW9uKGV4cG9ydHMsbmFtZSxnZXR0ZXIpe19fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLG5hbWUpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cyxuYW1lLHtlbnVtZXJhYmxlOiEwLGdldDpnZXR0ZXJ9KX0sX193ZWJwYWNrX3JlcXVpcmVfXy5yPWZ1bmN0aW9uKGV4cG9ydHMpe1widW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LF9fd2VicGFja19yZXF1aXJlX18udD1mdW5jdGlvbih2YWx1ZSxtb2RlKXtpZigxJm1vZGUmJih2YWx1ZT1fX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKSksOCZtb2RlKXJldHVybiB2YWx1ZTtpZig0Jm1vZGUmJlwib2JqZWN0XCI9PXR5cGVvZiB2YWx1ZSYmdmFsdWUmJnZhbHVlLl9fZXNNb2R1bGUpcmV0dXJuIHZhbHVlO3ZhciBucz1PYmplY3QuY3JlYXRlKG51bGwpO2lmKF9fd2VicGFja19yZXF1aXJlX18ucihucyksT2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnZhbHVlfSksMiZtb2RlJiZcInN0cmluZ1wiIT10eXBlb2YgdmFsdWUpZm9yKHZhciBrZXkgaW4gdmFsdWUpX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLGtleSxmdW5jdGlvbihrZXkpe3JldHVybiB2YWx1ZVtrZXldfS5iaW5kKG51bGwsa2V5KSk7cmV0dXJuIG5zfSxfX3dlYnBhY2tfcmVxdWlyZV9fLm49ZnVuY3Rpb24obW9kdWxlKXt2YXIgZ2V0dGVyPW1vZHVsZSYmbW9kdWxlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gbW9kdWxlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIG1vZHVsZX07cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsXCJhXCIsZ2V0dGVyKSxnZXR0ZXJ9LF9fd2VicGFja19yZXF1aXJlX18ubz1mdW5jdGlvbihvYmplY3QscHJvcGVydHkpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LHByb3BlcnR5KX0sX193ZWJwYWNrX3JlcXVpcmVfXy5wPVwiXCIsX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnM9MTg3KX0oW2Z1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyhmdW5jdGlvbihtb2R1bGUpe21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGhvb2tDYWxsYmFjayxzb21lO2Z1bmN0aW9uIGhvb2tzKCl7cmV0dXJuIGhvb2tDYWxsYmFjay5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gaXNBcnJheShpbnB1dCl7cmV0dXJuIGlucHV0IGluc3RhbmNlb2YgQXJyYXl8fFwiW29iamVjdCBBcnJheV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCl9ZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpe3JldHVybiBudWxsIT1pbnB1dCYmXCJbb2JqZWN0IE9iamVjdF1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCl9ZnVuY3Rpb24gaGFzT3duUHJvcChhLGIpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxiKX1mdW5jdGlvbiBpc09iamVjdEVtcHR5KG9iail7aWYoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpcmV0dXJuIDA9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aDt2YXIgaztmb3IoayBpbiBvYmopaWYoaGFzT3duUHJvcChvYmosaykpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gaXNVbmRlZmluZWQoaW5wdXQpe3JldHVybiB2b2lkIDA9PT1pbnB1dH1mdW5jdGlvbiBpc051bWJlcihpbnB1dCl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGlucHV0fHxcIltvYmplY3QgTnVtYmVyXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KX1mdW5jdGlvbiBpc0RhdGUoaW5wdXQpe3JldHVybiBpbnB1dCBpbnN0YW5jZW9mIERhdGV8fFwiW29iamVjdCBEYXRlXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KX1mdW5jdGlvbiBtYXAoYXJyLGZuKXt2YXIgaSxyZXM9W107Zm9yKGk9MDtpPGFyci5sZW5ndGg7KytpKXJlcy5wdXNoKGZuKGFycltpXSxpKSk7cmV0dXJuIHJlc31mdW5jdGlvbiBleHRlbmQoYSxiKXtmb3IodmFyIGkgaW4gYiloYXNPd25Qcm9wKGIsaSkmJihhW2ldPWJbaV0pO3JldHVybiBoYXNPd25Qcm9wKGIsXCJ0b1N0cmluZ1wiKSYmKGEudG9TdHJpbmc9Yi50b1N0cmluZyksaGFzT3duUHJvcChiLFwidmFsdWVPZlwiKSYmKGEudmFsdWVPZj1iLnZhbHVlT2YpLGF9ZnVuY3Rpb24gY3JlYXRlVVRDKGlucHV0LGZvcm1hdCxsb2NhbGUsc3RyaWN0KXtyZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCxmb3JtYXQsbG9jYWxlLHN0cmljdCwhMCkudXRjKCl9ZnVuY3Rpb24gZ2V0UGFyc2luZ0ZsYWdzKG0pe3JldHVybiBudWxsPT1tLl9wZiYmKG0uX3BmPXtlbXB0eTohMSx1bnVzZWRUb2tlbnM6W10sdW51c2VkSW5wdXQ6W10sb3ZlcmZsb3c6LTIsY2hhcnNMZWZ0T3ZlcjowLG51bGxJbnB1dDohMSxpbnZhbGlkRXJhOm51bGwsaW52YWxpZE1vbnRoOm51bGwsaW52YWxpZEZvcm1hdDohMSx1c2VySW52YWxpZGF0ZWQ6ITEsaXNvOiExLHBhcnNlZERhdGVQYXJ0czpbXSxlcmE6bnVsbCxtZXJpZGllbTpudWxsLHJmYzI4MjI6ITEsd2Vla2RheU1pc21hdGNoOiExfSksbS5fcGZ9ZnVuY3Rpb24gaXNWYWxpZChtKXtpZihudWxsPT1tLl9pc1ZhbGlkKXt2YXIgZmxhZ3M9Z2V0UGFyc2luZ0ZsYWdzKG0pLHBhcnNlZFBhcnRzPXNvbWUuY2FsbChmbGFncy5wYXJzZWREYXRlUGFydHMsKGZ1bmN0aW9uKGkpe3JldHVybiBudWxsIT1pfSkpLGlzTm93VmFsaWQ9IWlzTmFOKG0uX2QuZ2V0VGltZSgpKSYmZmxhZ3Mub3ZlcmZsb3c8MCYmIWZsYWdzLmVtcHR5JiYhZmxhZ3MuaW52YWxpZEVyYSYmIWZsYWdzLmludmFsaWRNb250aCYmIWZsYWdzLmludmFsaWRXZWVrZGF5JiYhZmxhZ3Mud2Vla2RheU1pc21hdGNoJiYhZmxhZ3MubnVsbElucHV0JiYhZmxhZ3MuaW52YWxpZEZvcm1hdCYmIWZsYWdzLnVzZXJJbnZhbGlkYXRlZCYmKCFmbGFncy5tZXJpZGllbXx8ZmxhZ3MubWVyaWRpZW0mJnBhcnNlZFBhcnRzKTtpZihtLl9zdHJpY3QmJihpc05vd1ZhbGlkPWlzTm93VmFsaWQmJjA9PT1mbGFncy5jaGFyc0xlZnRPdmVyJiYwPT09ZmxhZ3MudW51c2VkVG9rZW5zLmxlbmd0aCYmdm9pZCAwPT09ZmxhZ3MuYmlnSG91ciksbnVsbCE9T2JqZWN0LmlzRnJvemVuJiZPYmplY3QuaXNGcm96ZW4obSkpcmV0dXJuIGlzTm93VmFsaWQ7bS5faXNWYWxpZD1pc05vd1ZhbGlkfXJldHVybiBtLl9pc1ZhbGlkfWZ1bmN0aW9uIGNyZWF0ZUludmFsaWQoZmxhZ3Mpe3ZhciBtPWNyZWF0ZVVUQyhOYU4pO3JldHVybiBudWxsIT1mbGFncz9leHRlbmQoZ2V0UGFyc2luZ0ZsYWdzKG0pLGZsYWdzKTpnZXRQYXJzaW5nRmxhZ3MobSkudXNlckludmFsaWRhdGVkPSEwLG19c29tZT1BcnJheS5wcm90b3R5cGUuc29tZT9BcnJheS5wcm90b3R5cGUuc29tZTpmdW5jdGlvbihmdW4pe3ZhciBpLHQ9T2JqZWN0KHRoaXMpLGxlbj10Lmxlbmd0aD4+PjA7Zm9yKGk9MDtpPGxlbjtpKyspaWYoaSBpbiB0JiZmdW4uY2FsbCh0aGlzLHRbaV0saSx0KSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIG1vbWVudFByb3BlcnRpZXM9aG9va3MubW9tZW50UHJvcGVydGllcz1bXSx1cGRhdGVJblByb2dyZXNzPSExO2Z1bmN0aW9uIGNvcHlDb25maWcodG8sZnJvbSl7dmFyIGkscHJvcCx2YWw7aWYoaXNVbmRlZmluZWQoZnJvbS5faXNBTW9tZW50T2JqZWN0KXx8KHRvLl9pc0FNb21lbnRPYmplY3Q9ZnJvbS5faXNBTW9tZW50T2JqZWN0KSxpc1VuZGVmaW5lZChmcm9tLl9pKXx8KHRvLl9pPWZyb20uX2kpLGlzVW5kZWZpbmVkKGZyb20uX2YpfHwodG8uX2Y9ZnJvbS5fZiksaXNVbmRlZmluZWQoZnJvbS5fbCl8fCh0by5fbD1mcm9tLl9sKSxpc1VuZGVmaW5lZChmcm9tLl9zdHJpY3QpfHwodG8uX3N0cmljdD1mcm9tLl9zdHJpY3QpLGlzVW5kZWZpbmVkKGZyb20uX3R6bSl8fCh0by5fdHptPWZyb20uX3R6bSksaXNVbmRlZmluZWQoZnJvbS5faXNVVEMpfHwodG8uX2lzVVRDPWZyb20uX2lzVVRDKSxpc1VuZGVmaW5lZChmcm9tLl9vZmZzZXQpfHwodG8uX29mZnNldD1mcm9tLl9vZmZzZXQpLGlzVW5kZWZpbmVkKGZyb20uX3BmKXx8KHRvLl9wZj1nZXRQYXJzaW5nRmxhZ3MoZnJvbSkpLGlzVW5kZWZpbmVkKGZyb20uX2xvY2FsZSl8fCh0by5fbG9jYWxlPWZyb20uX2xvY2FsZSksbW9tZW50UHJvcGVydGllcy5sZW5ndGg+MClmb3IoaT0wO2k8bW9tZW50UHJvcGVydGllcy5sZW5ndGg7aSsrKWlzVW5kZWZpbmVkKHZhbD1mcm9tW3Byb3A9bW9tZW50UHJvcGVydGllc1tpXV0pfHwodG9bcHJvcF09dmFsKTtyZXR1cm4gdG99ZnVuY3Rpb24gTW9tZW50KGNvbmZpZyl7Y29weUNvbmZpZyh0aGlzLGNvbmZpZyksdGhpcy5fZD1uZXcgRGF0ZShudWxsIT1jb25maWcuX2Q/Y29uZmlnLl9kLmdldFRpbWUoKTpOYU4pLHRoaXMuaXNWYWxpZCgpfHwodGhpcy5fZD1uZXcgRGF0ZShOYU4pKSwhMT09PXVwZGF0ZUluUHJvZ3Jlc3MmJih1cGRhdGVJblByb2dyZXNzPSEwLGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzKSx1cGRhdGVJblByb2dyZXNzPSExKX1mdW5jdGlvbiBpc01vbWVudChvYmope3JldHVybiBvYmogaW5zdGFuY2VvZiBNb21lbnR8fG51bGwhPW9iaiYmbnVsbCE9b2JqLl9pc0FNb21lbnRPYmplY3R9ZnVuY3Rpb24gd2Fybihtc2cpeyExPT09aG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oXCJEZXByZWNhdGlvbiB3YXJuaW5nOiBcIittc2cpfWZ1bmN0aW9uIGRlcHJlY2F0ZShtc2csZm4pe3ZhciBmaXJzdFRpbWU9ITA7cmV0dXJuIGV4dGVuZCgoZnVuY3Rpb24oKXtpZihudWxsIT1ob29rcy5kZXByZWNhdGlvbkhhbmRsZXImJmhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihudWxsLG1zZyksZmlyc3RUaW1lKXt2YXIgYXJnLGksa2V5LGFyZ3M9W107Zm9yKGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXtpZihhcmc9XCJcIixcIm9iamVjdFwiPT10eXBlb2YgYXJndW1lbnRzW2ldKXtmb3Ioa2V5IGluIGFyZys9XCJcXG5bXCIraStcIl0gXCIsYXJndW1lbnRzWzBdKWhhc093blByb3AoYXJndW1lbnRzWzBdLGtleSkmJihhcmcrPWtleStcIjogXCIrYXJndW1lbnRzWzBdW2tleV0rXCIsIFwiKTthcmc9YXJnLnNsaWNlKDAsLTIpfWVsc2UgYXJnPWFyZ3VtZW50c1tpXTthcmdzLnB1c2goYXJnKX13YXJuKG1zZytcIlxcbkFyZ3VtZW50czogXCIrQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncykuam9pbihcIlwiKStcIlxcblwiKyhuZXcgRXJyb3IpLnN0YWNrKSxmaXJzdFRpbWU9ITF9cmV0dXJuIGZuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZuKX12YXIga2V5cyxkZXByZWNhdGlvbnM9e307ZnVuY3Rpb24gZGVwcmVjYXRlU2ltcGxlKG5hbWUsbXNnKXtudWxsIT1ob29rcy5kZXByZWNhdGlvbkhhbmRsZXImJmhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihuYW1lLG1zZyksZGVwcmVjYXRpb25zW25hbWVdfHwod2Fybihtc2cpLGRlcHJlY2F0aW9uc1tuYW1lXT0hMCl9ZnVuY3Rpb24gaXNGdW5jdGlvbihpbnB1dCl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEZ1bmN0aW9uJiZpbnB1dCBpbnN0YW5jZW9mIEZ1bmN0aW9ufHxcIltvYmplY3QgRnVuY3Rpb25dXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpfWZ1bmN0aW9uIG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsY2hpbGRDb25maWcpe3ZhciBwcm9wLHJlcz1leHRlbmQoe30scGFyZW50Q29uZmlnKTtmb3IocHJvcCBpbiBjaGlsZENvbmZpZyloYXNPd25Qcm9wKGNoaWxkQ29uZmlnLHByb3ApJiYoaXNPYmplY3QocGFyZW50Q29uZmlnW3Byb3BdKSYmaXNPYmplY3QoY2hpbGRDb25maWdbcHJvcF0pPyhyZXNbcHJvcF09e30sZXh0ZW5kKHJlc1twcm9wXSxwYXJlbnRDb25maWdbcHJvcF0pLGV4dGVuZChyZXNbcHJvcF0sY2hpbGRDb25maWdbcHJvcF0pKTpudWxsIT1jaGlsZENvbmZpZ1twcm9wXT9yZXNbcHJvcF09Y2hpbGRDb25maWdbcHJvcF06ZGVsZXRlIHJlc1twcm9wXSk7Zm9yKHByb3AgaW4gcGFyZW50Q29uZmlnKWhhc093blByb3AocGFyZW50Q29uZmlnLHByb3ApJiYhaGFzT3duUHJvcChjaGlsZENvbmZpZyxwcm9wKSYmaXNPYmplY3QocGFyZW50Q29uZmlnW3Byb3BdKSYmKHJlc1twcm9wXT1leHRlbmQoe30scmVzW3Byb3BdKSk7cmV0dXJuIHJlc31mdW5jdGlvbiBMb2NhbGUoY29uZmlnKXtudWxsIT1jb25maWcmJnRoaXMuc2V0KGNvbmZpZyl9ZnVuY3Rpb24gemVyb0ZpbGwobnVtYmVyLHRhcmdldExlbmd0aCxmb3JjZVNpZ24pe3ZhciBhYnNOdW1iZXI9XCJcIitNYXRoLmFicyhudW1iZXIpLHplcm9zVG9GaWxsPXRhcmdldExlbmd0aC1hYnNOdW1iZXIubGVuZ3RoO3JldHVybihudW1iZXI+PTA/Zm9yY2VTaWduP1wiK1wiOlwiXCI6XCItXCIpK01hdGgucG93KDEwLE1hdGgubWF4KDAsemVyb3NUb0ZpbGwpKS50b1N0cmluZygpLnN1YnN0cigxKSthYnNOdW1iZXJ9aG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzPSExLGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcj1udWxsLGtleXM9T2JqZWN0LmtleXM/T2JqZWN0LmtleXM6ZnVuY3Rpb24ob2JqKXt2YXIgaSxyZXM9W107Zm9yKGkgaW4gb2JqKWhhc093blByb3Aob2JqLGkpJiZyZXMucHVzaChpKTtyZXR1cm4gcmVzfTt2YXIgZm9ybWF0dGluZ1Rva2Vucz0vKFxcW1teXFxbXSpcXF0pfChcXFxcKT8oW0hoXW1tKHNzKT98TW98TU0/TT9NP3xEb3xERERvfEREP0Q/RD98ZGRkP2Q/fGRvP3x3W298d10/fFdbb3xXXT98UW8/fE57MSw1fXxZWVlZWVl8WVlZWVl8WVlZWXxZWXx5ezIsNH18eW8/fGdnKGdnZz8pP3xHRyhHR0c/KT98ZXxFfGF8QXxoaD98SEg/fGtrP3xtbT98c3M/fFN7MSw5fXx4fFh8eno/fFpaP3wuKS9nLGxvY2FsRm9ybWF0dGluZ1Rva2Vucz0vKFxcW1teXFxbXSpcXF0pfChcXFxcKT8oTFRTfExUfExMP0w/TD98bHsxLDR9KS9nLGZvcm1hdEZ1bmN0aW9ucz17fSxmb3JtYXRUb2tlbkZ1bmN0aW9ucz17fTtmdW5jdGlvbiBhZGRGb3JtYXRUb2tlbih0b2tlbixwYWRkZWQsb3JkaW5hbCxjYWxsYmFjayl7dmFyIGZ1bmM9Y2FsbGJhY2s7XCJzdHJpbmdcIj09dHlwZW9mIGNhbGxiYWNrJiYoZnVuYz1mdW5jdGlvbigpe3JldHVybiB0aGlzW2NhbGxiYWNrXSgpfSksdG9rZW4mJihmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl09ZnVuYykscGFkZGVkJiYoZm9ybWF0VG9rZW5GdW5jdGlvbnNbcGFkZGVkWzBdXT1mdW5jdGlvbigpe3JldHVybiB6ZXJvRmlsbChmdW5jLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxwYWRkZWRbMV0scGFkZGVkWzJdKX0pLG9yZGluYWwmJihmb3JtYXRUb2tlbkZ1bmN0aW9uc1tvcmRpbmFsXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKGZ1bmMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRva2VuKX0pfWZ1bmN0aW9uIGZvcm1hdE1vbWVudChtLGZvcm1hdCl7cmV0dXJuIG0uaXNWYWxpZCgpPyhmb3JtYXQ9ZXhwYW5kRm9ybWF0KGZvcm1hdCxtLmxvY2FsZURhdGEoKSksZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF09Zm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF18fGZ1bmN0aW9uKGZvcm1hdCl7dmFyIGksbGVuZ3RoLGlucHV0LGFycmF5PWZvcm1hdC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKTtmb3IoaT0wLGxlbmd0aD1hcnJheS5sZW5ndGg7aTxsZW5ndGg7aSsrKWZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXT9hcnJheVtpXT1mb3JtYXRUb2tlbkZ1bmN0aW9uc1thcnJheVtpXV06YXJyYXlbaV09KGlucHV0PWFycmF5W2ldKS5tYXRjaCgvXFxbW1xcc1xcU10vKT9pbnB1dC5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKTppbnB1dC5yZXBsYWNlKC9cXFxcL2csXCJcIik7cmV0dXJuIGZ1bmN0aW9uKG1vbSl7dmFyIGksb3V0cHV0PVwiXCI7Zm9yKGk9MDtpPGxlbmd0aDtpKyspb3V0cHV0Kz1pc0Z1bmN0aW9uKGFycmF5W2ldKT9hcnJheVtpXS5jYWxsKG1vbSxmb3JtYXQpOmFycmF5W2ldO3JldHVybiBvdXRwdXR9fShmb3JtYXQpLGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdKG0pKTptLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfWZ1bmN0aW9uIGV4cGFuZEZvcm1hdChmb3JtYXQsbG9jYWxlKXt2YXIgaT01O2Z1bmN0aW9uIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2VucyhpbnB1dCl7cmV0dXJuIGxvY2FsZS5sb25nRGF0ZUZvcm1hdChpbnB1dCl8fGlucHV0fWZvcihsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4PTA7aT49MCYmbG9jYWxGb3JtYXR0aW5nVG9rZW5zLnRlc3QoZm9ybWF0KTspZm9ybWF0PWZvcm1hdC5yZXBsYWNlKGxvY2FsRm9ybWF0dGluZ1Rva2VucyxyZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnMpLGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXg9MCxpLT0xO3JldHVybiBmb3JtYXR9dmFyIGFsaWFzZXM9e307ZnVuY3Rpb24gYWRkVW5pdEFsaWFzKHVuaXQsc2hvcnRoYW5kKXt2YXIgbG93ZXJDYXNlPXVuaXQudG9Mb3dlckNhc2UoKTthbGlhc2VzW2xvd2VyQ2FzZV09YWxpYXNlc1tsb3dlckNhc2UrXCJzXCJdPWFsaWFzZXNbc2hvcnRoYW5kXT11bml0fWZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXRzKHVuaXRzKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdW5pdHM/YWxpYXNlc1t1bml0c118fGFsaWFzZXNbdW5pdHMudG9Mb3dlckNhc2UoKV06dm9pZCAwfWZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdFVuaXRzKGlucHV0T2JqZWN0KXt2YXIgbm9ybWFsaXplZFByb3AscHJvcCxub3JtYWxpemVkSW5wdXQ9e307Zm9yKHByb3AgaW4gaW5wdXRPYmplY3QpaGFzT3duUHJvcChpbnB1dE9iamVjdCxwcm9wKSYmKG5vcm1hbGl6ZWRQcm9wPW5vcm1hbGl6ZVVuaXRzKHByb3ApKSYmKG5vcm1hbGl6ZWRJbnB1dFtub3JtYWxpemVkUHJvcF09aW5wdXRPYmplY3RbcHJvcF0pO3JldHVybiBub3JtYWxpemVkSW5wdXR9dmFyIHByaW9yaXRpZXM9e307ZnVuY3Rpb24gYWRkVW5pdFByaW9yaXR5KHVuaXQscHJpb3JpdHkpe3ByaW9yaXRpZXNbdW5pdF09cHJpb3JpdHl9ZnVuY3Rpb24gaXNMZWFwWWVhcih5ZWFyKXtyZXR1cm4geWVhciU0PT0wJiZ5ZWFyJTEwMCE9MHx8eWVhciU0MDA9PTB9ZnVuY3Rpb24gYWJzRmxvb3IobnVtYmVyKXtyZXR1cm4gbnVtYmVyPDA/TWF0aC5jZWlsKG51bWJlcil8fDA6TWF0aC5mbG9vcihudW1iZXIpfWZ1bmN0aW9uIHRvSW50KGFyZ3VtZW50Rm9yQ29lcmNpb24pe3ZhciBjb2VyY2VkTnVtYmVyPSthcmd1bWVudEZvckNvZXJjaW9uLHZhbHVlPTA7cmV0dXJuIDAhPT1jb2VyY2VkTnVtYmVyJiZpc0Zpbml0ZShjb2VyY2VkTnVtYmVyKSYmKHZhbHVlPWFic0Zsb29yKGNvZXJjZWROdW1iZXIpKSx2YWx1ZX1mdW5jdGlvbiBtYWtlR2V0U2V0KHVuaXQsa2VlcFRpbWUpe3JldHVybiBmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIG51bGwhPXZhbHVlPyhzZXQkMSh0aGlzLHVuaXQsdmFsdWUpLGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLGtlZXBUaW1lKSx0aGlzKTpnZXQodGhpcyx1bml0KX19ZnVuY3Rpb24gZ2V0KG1vbSx1bml0KXtyZXR1cm4gbW9tLmlzVmFsaWQoKT9tb20uX2RbXCJnZXRcIisobW9tLl9pc1VUQz9cIlVUQ1wiOlwiXCIpK3VuaXRdKCk6TmFOfWZ1bmN0aW9uIHNldCQxKG1vbSx1bml0LHZhbHVlKXttb20uaXNWYWxpZCgpJiYhaXNOYU4odmFsdWUpJiYoXCJGdWxsWWVhclwiPT09dW5pdCYmaXNMZWFwWWVhcihtb20ueWVhcigpKSYmMT09PW1vbS5tb250aCgpJiYyOT09PW1vbS5kYXRlKCk/KHZhbHVlPXRvSW50KHZhbHVlKSxtb20uX2RbXCJzZXRcIisobW9tLl9pc1VUQz9cIlVUQ1wiOlwiXCIpK3VuaXRdKHZhbHVlLG1vbS5tb250aCgpLGRheXNJbk1vbnRoKHZhbHVlLG1vbS5tb250aCgpKSkpOm1vbS5fZFtcInNldFwiKyhtb20uX2lzVVRDP1wiVVRDXCI6XCJcIikrdW5pdF0odmFsdWUpKX12YXIgcmVnZXhlcyxtYXRjaDE9L1xcZC8sbWF0Y2gyPS9cXGRcXGQvLG1hdGNoMz0vXFxkezN9LyxtYXRjaDQ9L1xcZHs0fS8sbWF0Y2g2PS9bKy1dP1xcZHs2fS8sbWF0Y2gxdG8yPS9cXGRcXGQ/LyxtYXRjaDN0bzQ9L1xcZFxcZFxcZFxcZD8vLG1hdGNoNXRvNj0vXFxkXFxkXFxkXFxkXFxkXFxkPy8sbWF0Y2gxdG8zPS9cXGR7MSwzfS8sbWF0Y2gxdG80PS9cXGR7MSw0fS8sbWF0Y2gxdG82PS9bKy1dP1xcZHsxLDZ9LyxtYXRjaFVuc2lnbmVkPS9cXGQrLyxtYXRjaFNpZ25lZD0vWystXT9cXGQrLyxtYXRjaE9mZnNldD0vWnxbKy1dXFxkXFxkOj9cXGRcXGQvZ2ksbWF0Y2hTaG9ydE9mZnNldD0vWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy9naSxtYXRjaFdvcmQ9L1swLTldezAsMjU2fVsnYS16XFx1MDBBMC1cXHUwNUZGXFx1MDcwMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRjA3XFx1RkYxMC1cXHVGRkVGXXsxLDI1Nn18W1xcdTA2MDAtXFx1MDZGRlxcL117MSwyNTZ9KFxccyo/W1xcdTA2MDAtXFx1MDZGRl17MSwyNTZ9KXsxLDJ9L2k7ZnVuY3Rpb24gYWRkUmVnZXhUb2tlbih0b2tlbixyZWdleCxzdHJpY3RSZWdleCl7cmVnZXhlc1t0b2tlbl09aXNGdW5jdGlvbihyZWdleCk/cmVnZXg6ZnVuY3Rpb24oaXNTdHJpY3QsbG9jYWxlRGF0YSl7cmV0dXJuIGlzU3RyaWN0JiZzdHJpY3RSZWdleD9zdHJpY3RSZWdleDpyZWdleH19ZnVuY3Rpb24gZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLGNvbmZpZyl7cmV0dXJuIGhhc093blByb3AocmVnZXhlcyx0b2tlbik/cmVnZXhlc1t0b2tlbl0oY29uZmlnLl9zdHJpY3QsY29uZmlnLl9sb2NhbGUpOm5ldyBSZWdFeHAocmVnZXhFc2NhcGUodG9rZW4ucmVwbGFjZShcIlxcXFxcIixcIlwiKS5yZXBsYWNlKC9cXFxcKFxcWyl8XFxcXChcXF0pfFxcWyhbXlxcXVxcW10qKVxcXXxcXFxcKC4pL2csKGZ1bmN0aW9uKG1hdGNoZWQscDEscDIscDMscDQpe3JldHVybiBwMXx8cDJ8fHAzfHxwNH0pKSkpfWZ1bmN0aW9uIHJlZ2V4RXNjYXBlKHMpe3JldHVybiBzLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZyxcIlxcXFwkJlwiKX1yZWdleGVzPXt9O3ZhciBpbmRleE9mLHRva2Vucz17fTtmdW5jdGlvbiBhZGRQYXJzZVRva2VuKHRva2VuLGNhbGxiYWNrKXt2YXIgaSxmdW5jPWNhbGxiYWNrO2ZvcihcInN0cmluZ1wiPT10eXBlb2YgdG9rZW4mJih0b2tlbj1bdG9rZW5dKSxpc051bWJlcihjYWxsYmFjaykmJihmdW5jPWZ1bmN0aW9uKGlucHV0LGFycmF5KXthcnJheVtjYWxsYmFja109dG9JbnQoaW5wdXQpfSksaT0wO2k8dG9rZW4ubGVuZ3RoO2krKyl0b2tlbnNbdG9rZW5baV1dPWZ1bmN9ZnVuY3Rpb24gYWRkV2Vla1BhcnNlVG9rZW4odG9rZW4sY2FsbGJhY2spe2FkZFBhcnNlVG9rZW4odG9rZW4sKGZ1bmN0aW9uKGlucHV0LGFycmF5LGNvbmZpZyx0b2tlbil7Y29uZmlnLl93PWNvbmZpZy5fd3x8e30sY2FsbGJhY2soaW5wdXQsY29uZmlnLl93LGNvbmZpZyx0b2tlbil9KSl9ZnVuY3Rpb24gYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4saW5wdXQsY29uZmlnKXtudWxsIT1pbnB1dCYmaGFzT3duUHJvcCh0b2tlbnMsdG9rZW4pJiZ0b2tlbnNbdG9rZW5dKGlucHV0LGNvbmZpZy5fYSxjb25maWcsdG9rZW4pfWZ1bmN0aW9uIGRheXNJbk1vbnRoKHllYXIsbW9udGgpe2lmKGlzTmFOKHllYXIpfHxpc05hTihtb250aCkpcmV0dXJuIE5hTjt2YXIgeCxtb2RNb250aD0obW9udGglKHg9MTIpK3gpJXg7cmV0dXJuIHllYXIrPShtb250aC1tb2RNb250aCkvMTIsMT09PW1vZE1vbnRoP2lzTGVhcFllYXIoeWVhcik/Mjk6Mjg6MzEtbW9kTW9udGglNyUyfWluZGV4T2Y9QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/QXJyYXkucHJvdG90eXBlLmluZGV4T2Y6ZnVuY3Rpb24obyl7dmFyIGk7Zm9yKGk9MDtpPHRoaXMubGVuZ3RoOysraSlpZih0aGlzW2ldPT09bylyZXR1cm4gaTtyZXR1cm4tMX0sYWRkRm9ybWF0VG9rZW4oXCJNXCIsW1wiTU1cIiwyXSxcIk1vXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9udGgoKSsxfSkpLGFkZEZvcm1hdFRva2VuKFwiTU1NXCIsMCwwLChmdW5jdGlvbihmb3JtYXQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHNTaG9ydCh0aGlzLGZvcm1hdCl9KSksYWRkRm9ybWF0VG9rZW4oXCJNTU1NXCIsMCwwLChmdW5jdGlvbihmb3JtYXQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHModGhpcyxmb3JtYXQpfSkpLGFkZFVuaXRBbGlhcyhcIm1vbnRoXCIsXCJNXCIpLGFkZFVuaXRQcmlvcml0eShcIm1vbnRoXCIsOCksYWRkUmVnZXhUb2tlbihcIk1cIixtYXRjaDF0bzIpLGFkZFJlZ2V4VG9rZW4oXCJNTVwiLG1hdGNoMXRvMixtYXRjaDIpLGFkZFJlZ2V4VG9rZW4oXCJNTU1cIiwoZnVuY3Rpb24oaXNTdHJpY3QsbG9jYWxlKXtyZXR1cm4gbG9jYWxlLm1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpfSkpLGFkZFJlZ2V4VG9rZW4oXCJNTU1NXCIsKGZ1bmN0aW9uKGlzU3RyaWN0LGxvY2FsZSl7cmV0dXJuIGxvY2FsZS5tb250aHNSZWdleChpc1N0cmljdCl9KSksYWRkUGFyc2VUb2tlbihbXCJNXCIsXCJNTVwiXSwoZnVuY3Rpb24oaW5wdXQsYXJyYXkpe2FycmF5WzFdPXRvSW50KGlucHV0KS0xfSkpLGFkZFBhcnNlVG9rZW4oW1wiTU1NXCIsXCJNTU1NXCJdLChmdW5jdGlvbihpbnB1dCxhcnJheSxjb25maWcsdG9rZW4pe3ZhciBtb250aD1jb25maWcuX2xvY2FsZS5tb250aHNQYXJzZShpbnB1dCx0b2tlbixjb25maWcuX3N0cmljdCk7bnVsbCE9bW9udGg/YXJyYXlbMV09bW9udGg6Z2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZE1vbnRoPWlucHV0fSkpO3ZhciBkZWZhdWx0TG9jYWxlTW9udGhzPVwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQ9XCJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlY1wiLnNwbGl0KFwiX1wiKSxNT05USFNfSU5fRk9STUFUPS9EW29EXT8oXFxbW15cXFtcXF1dKlxcXXxcXHMpK01NTU0/LyxkZWZhdWx0TW9udGhzU2hvcnRSZWdleD1tYXRjaFdvcmQsZGVmYXVsdE1vbnRoc1JlZ2V4PW1hdGNoV29yZDtmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZShtb250aE5hbWUsZm9ybWF0LHN0cmljdCl7dmFyIGksaWksbW9tLGxsYz1tb250aE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtpZighdGhpcy5fbW9udGhzUGFyc2UpZm9yKHRoaXMuX21vbnRoc1BhcnNlPVtdLHRoaXMuX2xvbmdNb250aHNQYXJzZT1bXSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlPVtdLGk9MDtpPDEyOysraSltb209Y3JlYXRlVVRDKFsyZTMsaV0pLHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV09dGhpcy5tb250aHNTaG9ydChtb20sXCJcIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl9sb25nTW9udGhzUGFyc2VbaV09dGhpcy5tb250aHMobW9tLFwiXCIpLnRvTG9jYWxlTG93ZXJDYXNlKCk7cmV0dXJuIHN0cmljdD9cIk1NTVwiPT09Zm9ybWF0Py0xIT09KGlpPWluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLGxsYykpP2lpOm51bGw6LTEhPT0oaWk9aW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxsbGMpKT9paTpudWxsOlwiTU1NXCI9PT1mb3JtYXQ/LTEhPT0oaWk9aW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsbGxjKSk/aWk6LTEhPT0oaWk9aW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxsbGMpKT9paTpudWxsOi0xIT09KGlpPWluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsbGxjKSk/aWk6LTEhPT0oaWk9aW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsbGxjKSk/aWk6bnVsbH1mdW5jdGlvbiBzZXRNb250aChtb20sdmFsdWUpe3ZhciBkYXlPZk1vbnRoO2lmKCFtb20uaXNWYWxpZCgpKXJldHVybiBtb207aWYoXCJzdHJpbmdcIj09dHlwZW9mIHZhbHVlKWlmKC9eXFxkKyQvLnRlc3QodmFsdWUpKXZhbHVlPXRvSW50KHZhbHVlKTtlbHNlIGlmKCFpc051bWJlcih2YWx1ZT1tb20ubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKHZhbHVlKSkpcmV0dXJuIG1vbTtyZXR1cm4gZGF5T2ZNb250aD1NYXRoLm1pbihtb20uZGF0ZSgpLGRheXNJbk1vbnRoKG1vbS55ZWFyKCksdmFsdWUpKSxtb20uX2RbXCJzZXRcIisobW9tLl9pc1VUQz9cIlVUQ1wiOlwiXCIpK1wiTW9udGhcIl0odmFsdWUsZGF5T2ZNb250aCksbW9tfWZ1bmN0aW9uIGdldFNldE1vbnRoKHZhbHVlKXtyZXR1cm4gbnVsbCE9dmFsdWU/KHNldE1vbnRoKHRoaXMsdmFsdWUpLGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzKTpnZXQodGhpcyxcIk1vbnRoXCIpfWZ1bmN0aW9uIGNvbXB1dGVNb250aHNQYXJzZSgpe2Z1bmN0aW9uIGNtcExlblJldihhLGIpe3JldHVybiBiLmxlbmd0aC1hLmxlbmd0aH12YXIgaSxtb20sc2hvcnRQaWVjZXM9W10sbG9uZ1BpZWNlcz1bXSxtaXhlZFBpZWNlcz1bXTtmb3IoaT0wO2k8MTI7aSsrKW1vbT1jcmVhdGVVVEMoWzJlMyxpXSksc2hvcnRQaWVjZXMucHVzaCh0aGlzLm1vbnRoc1Nob3J0KG1vbSxcIlwiKSksbG9uZ1BpZWNlcy5wdXNoKHRoaXMubW9udGhzKG1vbSxcIlwiKSksbWl4ZWRQaWVjZXMucHVzaCh0aGlzLm1vbnRocyhtb20sXCJcIikpLG1peGVkUGllY2VzLnB1c2godGhpcy5tb250aHNTaG9ydChtb20sXCJcIikpO2ZvcihzaG9ydFBpZWNlcy5zb3J0KGNtcExlblJldiksbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldiksbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpLGk9MDtpPDEyO2krKylzaG9ydFBpZWNlc1tpXT1yZWdleEVzY2FwZShzaG9ydFBpZWNlc1tpXSksbG9uZ1BpZWNlc1tpXT1yZWdleEVzY2FwZShsb25nUGllY2VzW2ldKTtmb3IoaT0wO2k8MjQ7aSsrKW1peGVkUGllY2VzW2ldPXJlZ2V4RXNjYXBlKG1peGVkUGllY2VzW2ldKTt0aGlzLl9tb250aHNSZWdleD1uZXcgUmVnRXhwKFwiXihcIittaXhlZFBpZWNlcy5qb2luKFwifFwiKStcIilcIixcImlcIiksdGhpcy5fbW9udGhzU2hvcnRSZWdleD10aGlzLl9tb250aHNSZWdleCx0aGlzLl9tb250aHNTdHJpY3RSZWdleD1uZXcgUmVnRXhwKFwiXihcIitsb25nUGllY2VzLmpvaW4oXCJ8XCIpK1wiKVwiLFwiaVwiKSx0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4PW5ldyBSZWdFeHAoXCJeKFwiK3Nob3J0UGllY2VzLmpvaW4oXCJ8XCIpK1wiKVwiLFwiaVwiKX1mdW5jdGlvbiBkYXlzSW5ZZWFyKHllYXIpe3JldHVybiBpc0xlYXBZZWFyKHllYXIpPzM2NjozNjV9YWRkRm9ybWF0VG9rZW4oXCJZXCIsMCwwLChmdW5jdGlvbigpe3ZhciB5PXRoaXMueWVhcigpO3JldHVybiB5PD05OTk5P3plcm9GaWxsKHksNCk6XCIrXCIreX0pKSxhZGRGb3JtYXRUb2tlbigwLFtcIllZXCIsMl0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55ZWFyKCklMTAwfSkpLGFkZEZvcm1hdFRva2VuKDAsW1wiWVlZWVwiLDRdLDAsXCJ5ZWFyXCIpLGFkZEZvcm1hdFRva2VuKDAsW1wiWVlZWVlcIiw1XSwwLFwieWVhclwiKSxhZGRGb3JtYXRUb2tlbigwLFtcIllZWVlZWVwiLDYsITBdLDAsXCJ5ZWFyXCIpLGFkZFVuaXRBbGlhcyhcInllYXJcIixcInlcIiksYWRkVW5pdFByaW9yaXR5KFwieWVhclwiLDEpLGFkZFJlZ2V4VG9rZW4oXCJZXCIsbWF0Y2hTaWduZWQpLGFkZFJlZ2V4VG9rZW4oXCJZWVwiLG1hdGNoMXRvMixtYXRjaDIpLGFkZFJlZ2V4VG9rZW4oXCJZWVlZXCIsbWF0Y2gxdG80LG1hdGNoNCksYWRkUmVnZXhUb2tlbihcIllZWVlZXCIsbWF0Y2gxdG82LG1hdGNoNiksYWRkUmVnZXhUb2tlbihcIllZWVlZWVwiLG1hdGNoMXRvNixtYXRjaDYpLGFkZFBhcnNlVG9rZW4oW1wiWVlZWVlcIixcIllZWVlZWVwiXSwwKSxhZGRQYXJzZVRva2VuKFwiWVlZWVwiLChmdW5jdGlvbihpbnB1dCxhcnJheSl7YXJyYXlbMF09Mj09PWlucHV0Lmxlbmd0aD9ob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk6dG9JbnQoaW5wdXQpfSkpLGFkZFBhcnNlVG9rZW4oXCJZWVwiLChmdW5jdGlvbihpbnB1dCxhcnJheSl7YXJyYXlbMF09aG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpfSkpLGFkZFBhcnNlVG9rZW4oXCJZXCIsKGZ1bmN0aW9uKGlucHV0LGFycmF5KXthcnJheVswXT1wYXJzZUludChpbnB1dCwxMCl9KSksaG9va3MucGFyc2VUd29EaWdpdFllYXI9ZnVuY3Rpb24oaW5wdXQpe3JldHVybiB0b0ludChpbnB1dCkrKHRvSW50KGlucHV0KT42OD8xOTAwOjJlMyl9O3ZhciBnZXRTZXRZZWFyPW1ha2VHZXRTZXQoXCJGdWxsWWVhclwiLCEwKTtmdW5jdGlvbiBjcmVhdGVEYXRlKHksbSxkLGgsTSxzLG1zKXt2YXIgZGF0ZTtyZXR1cm4geTwxMDAmJnk+PTA/KGRhdGU9bmV3IERhdGUoeSs0MDAsbSxkLGgsTSxzLG1zKSxpc0Zpbml0ZShkYXRlLmdldEZ1bGxZZWFyKCkpJiZkYXRlLnNldEZ1bGxZZWFyKHkpKTpkYXRlPW5ldyBEYXRlKHksbSxkLGgsTSxzLG1zKSxkYXRlfWZ1bmN0aW9uIGNyZWF0ZVVUQ0RhdGUoeSl7dmFyIGRhdGUsYXJncztyZXR1cm4geTwxMDAmJnk+PTA/KChhcmdzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpWzBdPXkrNDAwLGRhdGU9bmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCxhcmdzKSksaXNGaW5pdGUoZGF0ZS5nZXRVVENGdWxsWWVhcigpKSYmZGF0ZS5zZXRVVENGdWxsWWVhcih5KSk6ZGF0ZT1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLGFyZ3VtZW50cykpLGRhdGV9ZnVuY3Rpb24gZmlyc3RXZWVrT2Zmc2V0KHllYXIsZG93LGRveSl7dmFyIGZ3ZD03K2Rvdy1kb3k7cmV0dXJuLSg3K2NyZWF0ZVVUQ0RhdGUoeWVhciwwLGZ3ZCkuZ2V0VVRDRGF5KCktZG93KSU3K2Z3ZC0xfWZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrcyh5ZWFyLHdlZWssd2Vla2RheSxkb3csZG95KXt2YXIgcmVzWWVhcixyZXNEYXlPZlllYXIsZGF5T2ZZZWFyPTErNyood2Vlay0xKSsoNyt3ZWVrZGF5LWRvdyklNytmaXJzdFdlZWtPZmZzZXQoeWVhcixkb3csZG95KTtyZXR1cm4gZGF5T2ZZZWFyPD0wP3Jlc0RheU9mWWVhcj1kYXlzSW5ZZWFyKHJlc1llYXI9eWVhci0xKStkYXlPZlllYXI6ZGF5T2ZZZWFyPmRheXNJblllYXIoeWVhcik/KHJlc1llYXI9eWVhcisxLHJlc0RheU9mWWVhcj1kYXlPZlllYXItZGF5c0luWWVhcih5ZWFyKSk6KHJlc1llYXI9eWVhcixyZXNEYXlPZlllYXI9ZGF5T2ZZZWFyKSx7eWVhcjpyZXNZZWFyLGRheU9mWWVhcjpyZXNEYXlPZlllYXJ9fWZ1bmN0aW9uIHdlZWtPZlllYXIobW9tLGRvdyxkb3kpe3ZhciByZXNXZWVrLHJlc1llYXIsd2Vla09mZnNldD1maXJzdFdlZWtPZmZzZXQobW9tLnllYXIoKSxkb3csZG95KSx3ZWVrPU1hdGguZmxvb3IoKG1vbS5kYXlPZlllYXIoKS13ZWVrT2Zmc2V0LTEpLzcpKzE7cmV0dXJuIHdlZWs8MT9yZXNXZWVrPXdlZWsrd2Vla3NJblllYXIocmVzWWVhcj1tb20ueWVhcigpLTEsZG93LGRveSk6d2Vlaz53ZWVrc0luWWVhcihtb20ueWVhcigpLGRvdyxkb3kpPyhyZXNXZWVrPXdlZWstd2Vla3NJblllYXIobW9tLnllYXIoKSxkb3csZG95KSxyZXNZZWFyPW1vbS55ZWFyKCkrMSk6KHJlc1llYXI9bW9tLnllYXIoKSxyZXNXZWVrPXdlZWspLHt3ZWVrOnJlc1dlZWsseWVhcjpyZXNZZWFyfX1mdW5jdGlvbiB3ZWVrc0luWWVhcih5ZWFyLGRvdyxkb3kpe3ZhciB3ZWVrT2Zmc2V0PWZpcnN0V2Vla09mZnNldCh5ZWFyLGRvdyxkb3kpLHdlZWtPZmZzZXROZXh0PWZpcnN0V2Vla09mZnNldCh5ZWFyKzEsZG93LGRveSk7cmV0dXJuKGRheXNJblllYXIoeWVhciktd2Vla09mZnNldCt3ZWVrT2Zmc2V0TmV4dCkvN31mdW5jdGlvbiBzaGlmdFdlZWtkYXlzKHdzLG4pe3JldHVybiB3cy5zbGljZShuLDcpLmNvbmNhdCh3cy5zbGljZSgwLG4pKX1hZGRGb3JtYXRUb2tlbihcIndcIixbXCJ3d1wiLDJdLFwid29cIixcIndlZWtcIiksYWRkRm9ybWF0VG9rZW4oXCJXXCIsW1wiV1dcIiwyXSxcIldvXCIsXCJpc29XZWVrXCIpLGFkZFVuaXRBbGlhcyhcIndlZWtcIixcIndcIiksYWRkVW5pdEFsaWFzKFwiaXNvV2Vla1wiLFwiV1wiKSxhZGRVbml0UHJpb3JpdHkoXCJ3ZWVrXCIsNSksYWRkVW5pdFByaW9yaXR5KFwiaXNvV2Vla1wiLDUpLGFkZFJlZ2V4VG9rZW4oXCJ3XCIsbWF0Y2gxdG8yKSxhZGRSZWdleFRva2VuKFwid3dcIixtYXRjaDF0bzIsbWF0Y2gyKSxhZGRSZWdleFRva2VuKFwiV1wiLG1hdGNoMXRvMiksYWRkUmVnZXhUb2tlbihcIldXXCIsbWF0Y2gxdG8yLG1hdGNoMiksYWRkV2Vla1BhcnNlVG9rZW4oW1wid1wiLFwid3dcIixcIldcIixcIldXXCJdLChmdW5jdGlvbihpbnB1dCx3ZWVrLGNvbmZpZyx0b2tlbil7d2Vla1t0b2tlbi5zdWJzdHIoMCwxKV09dG9JbnQoaW5wdXQpfSkpLGFkZEZvcm1hdFRva2VuKFwiZFwiLDAsXCJkb1wiLFwiZGF5XCIpLGFkZEZvcm1hdFRva2VuKFwiZGRcIiwwLDAsKGZ1bmN0aW9uKGZvcm1hdCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsZm9ybWF0KX0pKSxhZGRGb3JtYXRUb2tlbihcImRkZFwiLDAsMCwoZnVuY3Rpb24oZm9ybWF0KXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLGZvcm1hdCl9KSksYWRkRm9ybWF0VG9rZW4oXCJkZGRkXCIsMCwwLChmdW5jdGlvbihmb3JtYXQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLGZvcm1hdCl9KSksYWRkRm9ybWF0VG9rZW4oXCJlXCIsMCwwLFwid2Vla2RheVwiKSxhZGRGb3JtYXRUb2tlbihcIkVcIiwwLDAsXCJpc29XZWVrZGF5XCIpLGFkZFVuaXRBbGlhcyhcImRheVwiLFwiZFwiKSxhZGRVbml0QWxpYXMoXCJ3ZWVrZGF5XCIsXCJlXCIpLGFkZFVuaXRBbGlhcyhcImlzb1dlZWtkYXlcIixcIkVcIiksYWRkVW5pdFByaW9yaXR5KFwiZGF5XCIsMTEpLGFkZFVuaXRQcmlvcml0eShcIndlZWtkYXlcIiwxMSksYWRkVW5pdFByaW9yaXR5KFwiaXNvV2Vla2RheVwiLDExKSxhZGRSZWdleFRva2VuKFwiZFwiLG1hdGNoMXRvMiksYWRkUmVnZXhUb2tlbihcImVcIixtYXRjaDF0bzIpLGFkZFJlZ2V4VG9rZW4oXCJFXCIsbWF0Y2gxdG8yKSxhZGRSZWdleFRva2VuKFwiZGRcIiwoZnVuY3Rpb24oaXNTdHJpY3QsbG9jYWxlKXtyZXR1cm4gbG9jYWxlLndlZWtkYXlzTWluUmVnZXgoaXNTdHJpY3QpfSkpLGFkZFJlZ2V4VG9rZW4oXCJkZGRcIiwoZnVuY3Rpb24oaXNTdHJpY3QsbG9jYWxlKXtyZXR1cm4gbG9jYWxlLndlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCl9KSksYWRkUmVnZXhUb2tlbihcImRkZGRcIiwoZnVuY3Rpb24oaXNTdHJpY3QsbG9jYWxlKXtyZXR1cm4gbG9jYWxlLndlZWtkYXlzUmVnZXgoaXNTdHJpY3QpfSkpLGFkZFdlZWtQYXJzZVRva2VuKFtcImRkXCIsXCJkZGRcIixcImRkZGRcIl0sKGZ1bmN0aW9uKGlucHV0LHdlZWssY29uZmlnLHRva2VuKXt2YXIgd2Vla2RheT1jb25maWcuX2xvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0LHRva2VuLGNvbmZpZy5fc3RyaWN0KTtudWxsIT13ZWVrZGF5P3dlZWsuZD13ZWVrZGF5OmdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRXZWVrZGF5PWlucHV0fSkpLGFkZFdlZWtQYXJzZVRva2VuKFtcImRcIixcImVcIixcIkVcIl0sKGZ1bmN0aW9uKGlucHV0LHdlZWssY29uZmlnLHRva2VuKXt3ZWVrW3Rva2VuXT10b0ludChpbnB1dCl9KSk7dmFyIGRlZmF1bHRMb2NhbGVXZWVrZGF5cz1cIlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5XCIuc3BsaXQoXCJfXCIpLGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0PVwiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0XCIuc3BsaXQoXCJfXCIpLGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbj1cIlN1X01vX1R1X1dlX1RoX0ZyX1NhXCIuc3BsaXQoXCJfXCIpLGRlZmF1bHRXZWVrZGF5c1JlZ2V4PW1hdGNoV29yZCxkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4PW1hdGNoV29yZCxkZWZhdWx0V2Vla2RheXNNaW5SZWdleD1tYXRjaFdvcmQ7ZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UkMSh3ZWVrZGF5TmFtZSxmb3JtYXQsc3RyaWN0KXt2YXIgaSxpaSxtb20sbGxjPXdlZWtkYXlOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7aWYoIXRoaXMuX3dlZWtkYXlzUGFyc2UpZm9yKHRoaXMuX3dlZWtkYXlzUGFyc2U9W10sdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlPVtdLHRoaXMuX21pbldlZWtkYXlzUGFyc2U9W10saT0wO2k8NzsrK2kpbW9tPWNyZWF0ZVVUQyhbMmUzLDFdKS5kYXkoaSksdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXT10aGlzLndlZWtkYXlzTWluKG1vbSxcIlwiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXT10aGlzLndlZWtkYXlzU2hvcnQobW9tLFwiXCIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhpcy5fd2Vla2RheXNQYXJzZVtpXT10aGlzLndlZWtkYXlzKG1vbSxcIlwiKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybiBzdHJpY3Q/XCJkZGRkXCI9PT1mb3JtYXQ/LTEhPT0oaWk9aW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsbGxjKSk/aWk6bnVsbDpcImRkZFwiPT09Zm9ybWF0Py0xIT09KGlpPWluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsbGxjKSk/aWk6bnVsbDotMSE9PShpaT1pbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxsbGMpKT9paTpudWxsOlwiZGRkZFwiPT09Zm9ybWF0Py0xIT09KGlpPWluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLGxsYykpP2lpOi0xIT09KGlpPWluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsbGxjKSk/aWk6LTEhPT0oaWk9aW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsbGxjKSk/aWk6bnVsbDpcImRkZFwiPT09Zm9ybWF0Py0xIT09KGlpPWluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsbGxjKSk/aWk6LTEhPT0oaWk9aW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsbGxjKSk/aWk6LTEhPT0oaWk9aW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsbGxjKSk/aWk6bnVsbDotMSE9PShpaT1pbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxsbGMpKT9paTotMSE9PShpaT1pbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxsbGMpKT9paTotMSE9PShpaT1pbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLGxsYykpP2lpOm51bGx9ZnVuY3Rpb24gY29tcHV0ZVdlZWtkYXlzUGFyc2UoKXtmdW5jdGlvbiBjbXBMZW5SZXYoYSxiKXtyZXR1cm4gYi5sZW5ndGgtYS5sZW5ndGh9dmFyIGksbW9tLG1pbnAsc2hvcnRwLGxvbmdwLG1pblBpZWNlcz1bXSxzaG9ydFBpZWNlcz1bXSxsb25nUGllY2VzPVtdLG1peGVkUGllY2VzPVtdO2ZvcihpPTA7aTw3O2krKyltb209Y3JlYXRlVVRDKFsyZTMsMV0pLmRheShpKSxtaW5wPXJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNNaW4obW9tLFwiXCIpKSxzaG9ydHA9cmVnZXhFc2NhcGUodGhpcy53ZWVrZGF5c1Nob3J0KG1vbSxcIlwiKSksbG9uZ3A9cmVnZXhFc2NhcGUodGhpcy53ZWVrZGF5cyhtb20sXCJcIikpLG1pblBpZWNlcy5wdXNoKG1pbnApLHNob3J0UGllY2VzLnB1c2goc2hvcnRwKSxsb25nUGllY2VzLnB1c2gobG9uZ3ApLG1peGVkUGllY2VzLnB1c2gobWlucCksbWl4ZWRQaWVjZXMucHVzaChzaG9ydHApLG1peGVkUGllY2VzLnB1c2gobG9uZ3ApO21pblBpZWNlcy5zb3J0KGNtcExlblJldiksc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpLGxvbmdQaWVjZXMuc29ydChjbXBMZW5SZXYpLG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KSx0aGlzLl93ZWVrZGF5c1JlZ2V4PW5ldyBSZWdFeHAoXCJeKFwiK21peGVkUGllY2VzLmpvaW4oXCJ8XCIpK1wiKVwiLFwiaVwiKSx0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg9dGhpcy5fd2Vla2RheXNSZWdleCx0aGlzLl93ZWVrZGF5c01pblJlZ2V4PXRoaXMuX3dlZWtkYXlzUmVnZXgsdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleD1uZXcgUmVnRXhwKFwiXihcIitsb25nUGllY2VzLmpvaW4oXCJ8XCIpK1wiKVwiLFwiaVwiKSx0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg9bmV3IFJlZ0V4cChcIl4oXCIrc2hvcnRQaWVjZXMuam9pbihcInxcIikrXCIpXCIsXCJpXCIpLHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cChcIl4oXCIrbWluUGllY2VzLmpvaW4oXCJ8XCIpK1wiKVwiLFwiaVwiKX1mdW5jdGlvbiBoRm9ybWF0KCl7cmV0dXJuIHRoaXMuaG91cnMoKSUxMnx8MTJ9ZnVuY3Rpb24gbWVyaWRpZW0odG9rZW4sbG93ZXJjYXNlKXthZGRGb3JtYXRUb2tlbih0b2tlbiwwLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1lcmlkaWVtKHRoaXMuaG91cnMoKSx0aGlzLm1pbnV0ZXMoKSxsb3dlcmNhc2UpfSkpfWZ1bmN0aW9uIG1hdGNoTWVyaWRpZW0oaXNTdHJpY3QsbG9jYWxlKXtyZXR1cm4gbG9jYWxlLl9tZXJpZGllbVBhcnNlfWFkZEZvcm1hdFRva2VuKFwiSFwiLFtcIkhIXCIsMl0sMCxcImhvdXJcIiksYWRkRm9ybWF0VG9rZW4oXCJoXCIsW1wiaGhcIiwyXSwwLGhGb3JtYXQpLGFkZEZvcm1hdFRva2VuKFwia1wiLFtcImtrXCIsMl0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ob3VycygpfHwyNH0pKSxhZGRGb3JtYXRUb2tlbihcImhtbVwiLDAsMCwoZnVuY3Rpb24oKXtyZXR1cm5cIlwiK2hGb3JtYXQuYXBwbHkodGhpcykremVyb0ZpbGwodGhpcy5taW51dGVzKCksMil9KSksYWRkRm9ybWF0VG9rZW4oXCJobW1zc1wiLDAsMCwoZnVuY3Rpb24oKXtyZXR1cm5cIlwiK2hGb3JtYXQuYXBwbHkodGhpcykremVyb0ZpbGwodGhpcy5taW51dGVzKCksMikremVyb0ZpbGwodGhpcy5zZWNvbmRzKCksMil9KSksYWRkRm9ybWF0VG9rZW4oXCJIbW1cIiwwLDAsKGZ1bmN0aW9uKCl7cmV0dXJuXCJcIit0aGlzLmhvdXJzKCkremVyb0ZpbGwodGhpcy5taW51dGVzKCksMil9KSksYWRkRm9ybWF0VG9rZW4oXCJIbW1zc1wiLDAsMCwoZnVuY3Rpb24oKXtyZXR1cm5cIlwiK3RoaXMuaG91cnMoKSt6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwyKSt6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwyKX0pKSxtZXJpZGllbShcImFcIiwhMCksbWVyaWRpZW0oXCJBXCIsITEpLGFkZFVuaXRBbGlhcyhcImhvdXJcIixcImhcIiksYWRkVW5pdFByaW9yaXR5KFwiaG91clwiLDEzKSxhZGRSZWdleFRva2VuKFwiYVwiLG1hdGNoTWVyaWRpZW0pLGFkZFJlZ2V4VG9rZW4oXCJBXCIsbWF0Y2hNZXJpZGllbSksYWRkUmVnZXhUb2tlbihcIkhcIixtYXRjaDF0bzIpLGFkZFJlZ2V4VG9rZW4oXCJoXCIsbWF0Y2gxdG8yKSxhZGRSZWdleFRva2VuKFwia1wiLG1hdGNoMXRvMiksYWRkUmVnZXhUb2tlbihcIkhIXCIsbWF0Y2gxdG8yLG1hdGNoMiksYWRkUmVnZXhUb2tlbihcImhoXCIsbWF0Y2gxdG8yLG1hdGNoMiksYWRkUmVnZXhUb2tlbihcImtrXCIsbWF0Y2gxdG8yLG1hdGNoMiksYWRkUmVnZXhUb2tlbihcImhtbVwiLG1hdGNoM3RvNCksYWRkUmVnZXhUb2tlbihcImhtbXNzXCIsbWF0Y2g1dG82KSxhZGRSZWdleFRva2VuKFwiSG1tXCIsbWF0Y2gzdG80KSxhZGRSZWdleFRva2VuKFwiSG1tc3NcIixtYXRjaDV0bzYpLGFkZFBhcnNlVG9rZW4oW1wiSFwiLFwiSEhcIl0sMyksYWRkUGFyc2VUb2tlbihbXCJrXCIsXCJra1wiXSwoZnVuY3Rpb24oaW5wdXQsYXJyYXksY29uZmlnKXt2YXIga0lucHV0PXRvSW50KGlucHV0KTthcnJheVszXT0yND09PWtJbnB1dD8wOmtJbnB1dH0pKSxhZGRQYXJzZVRva2VuKFtcImFcIixcIkFcIl0sKGZ1bmN0aW9uKGlucHV0LGFycmF5LGNvbmZpZyl7Y29uZmlnLl9pc1BtPWNvbmZpZy5fbG9jYWxlLmlzUE0oaW5wdXQpLGNvbmZpZy5fbWVyaWRpZW09aW5wdXR9KSksYWRkUGFyc2VUb2tlbihbXCJoXCIsXCJoaFwiXSwoZnVuY3Rpb24oaW5wdXQsYXJyYXksY29uZmlnKXthcnJheVszXT10b0ludChpbnB1dCksZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91cj0hMH0pKSxhZGRQYXJzZVRva2VuKFwiaG1tXCIsKGZ1bmN0aW9uKGlucHV0LGFycmF5LGNvbmZpZyl7dmFyIHBvcz1pbnB1dC5sZW5ndGgtMjthcnJheVszXT10b0ludChpbnB1dC5zdWJzdHIoMCxwb3MpKSxhcnJheVs0XT10b0ludChpbnB1dC5zdWJzdHIocG9zKSksZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91cj0hMH0pKSxhZGRQYXJzZVRva2VuKFwiaG1tc3NcIiwoZnVuY3Rpb24oaW5wdXQsYXJyYXksY29uZmlnKXt2YXIgcG9zMT1pbnB1dC5sZW5ndGgtNCxwb3MyPWlucHV0Lmxlbmd0aC0yO2FycmF5WzNdPXRvSW50KGlucHV0LnN1YnN0cigwLHBvczEpKSxhcnJheVs0XT10b0ludChpbnB1dC5zdWJzdHIocG9zMSwyKSksYXJyYXlbNV09dG9JbnQoaW5wdXQuc3Vic3RyKHBvczIpKSxnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyPSEwfSkpLGFkZFBhcnNlVG9rZW4oXCJIbW1cIiwoZnVuY3Rpb24oaW5wdXQsYXJyYXksY29uZmlnKXt2YXIgcG9zPWlucHV0Lmxlbmd0aC0yO2FycmF5WzNdPXRvSW50KGlucHV0LnN1YnN0cigwLHBvcykpLGFycmF5WzRdPXRvSW50KGlucHV0LnN1YnN0cihwb3MpKX0pKSxhZGRQYXJzZVRva2VuKFwiSG1tc3NcIiwoZnVuY3Rpb24oaW5wdXQsYXJyYXksY29uZmlnKXt2YXIgcG9zMT1pbnB1dC5sZW5ndGgtNCxwb3MyPWlucHV0Lmxlbmd0aC0yO2FycmF5WzNdPXRvSW50KGlucHV0LnN1YnN0cigwLHBvczEpKSxhcnJheVs0XT10b0ludChpbnB1dC5zdWJzdHIocG9zMSwyKSksYXJyYXlbNV09dG9JbnQoaW5wdXQuc3Vic3RyKHBvczIpKX0pKTt2YXIgZ2xvYmFsTG9jYWxlLGdldFNldEhvdXI9bWFrZUdldFNldChcIkhvdXJzXCIsITApLGJhc2VDb25maWc9e2NhbGVuZGFyOntzYW1lRGF5OlwiW1RvZGF5IGF0XSBMVFwiLG5leHREYXk6XCJbVG9tb3Jyb3cgYXRdIExUXCIsbmV4dFdlZWs6XCJkZGRkIFthdF0gTFRcIixsYXN0RGF5OlwiW1llc3RlcmRheSBhdF0gTFRcIixsYXN0V2VlazpcIltMYXN0XSBkZGRkIFthdF0gTFRcIixzYW1lRWxzZTpcIkxcIn0sbG9uZ0RhdGVGb3JtYXQ6e0xUUzpcImg6bW06c3MgQVwiLExUOlwiaDptbSBBXCIsTDpcIk1NL0REL1lZWVlcIixMTDpcIk1NTU0gRCwgWVlZWVwiLExMTDpcIk1NTU0gRCwgWVlZWSBoOm1tIEFcIixMTExMOlwiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQVwifSxpbnZhbGlkRGF0ZTpcIkludmFsaWQgZGF0ZVwiLG9yZGluYWw6XCIlZFwiLGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9LyxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImluICVzXCIscGFzdDpcIiVzIGFnb1wiLHM6XCJhIGZldyBzZWNvbmRzXCIsc3M6XCIlZCBzZWNvbmRzXCIsbTpcImEgbWludXRlXCIsbW06XCIlZCBtaW51dGVzXCIsaDpcImFuIGhvdXJcIixoaDpcIiVkIGhvdXJzXCIsZDpcImEgZGF5XCIsZGQ6XCIlZCBkYXlzXCIsdzpcImEgd2Vla1wiLHd3OlwiJWQgd2Vla3NcIixNOlwiYSBtb250aFwiLE1NOlwiJWQgbW9udGhzXCIseTpcImEgeWVhclwiLHl5OlwiJWQgeWVhcnNcIn0sbW9udGhzOmRlZmF1bHRMb2NhbGVNb250aHMsbW9udGhzU2hvcnQ6ZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0LHdlZWs6e2RvdzowLGRveTo2fSx3ZWVrZGF5czpkZWZhdWx0TG9jYWxlV2Vla2RheXMsd2Vla2RheXNNaW46ZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluLHdlZWtkYXlzU2hvcnQ6ZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQsbWVyaWRpZW1QYXJzZTovW2FwXVxcLj9tP1xcLj8vaX0sbG9jYWxlcz17fSxsb2NhbGVGYW1pbGllcz17fTtmdW5jdGlvbiBjb21tb25QcmVmaXgoYXJyMSxhcnIyKXt2YXIgaSxtaW5sPU1hdGgubWluKGFycjEubGVuZ3RoLGFycjIubGVuZ3RoKTtmb3IoaT0wO2k8bWlubDtpKz0xKWlmKGFycjFbaV0hPT1hcnIyW2ldKXJldHVybiBpO3JldHVybiBtaW5sfWZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZShrZXkpe3JldHVybiBrZXk/a2V5LnRvTG93ZXJDYXNlKCkucmVwbGFjZShcIl9cIixcIi1cIik6a2V5fWZ1bmN0aW9uIGxvYWRMb2NhbGUobmFtZSl7dmFyIG9sZExvY2FsZT1udWxsO2lmKHZvaWQgMD09PWxvY2FsZXNbbmFtZV0mJnZvaWQgMCE9PW1vZHVsZSYmbW9kdWxlJiZtb2R1bGUuZXhwb3J0cyl0cnl7b2xkTG9jYWxlPWdsb2JhbExvY2FsZS5fYWJicixfX3dlYnBhY2tfcmVxdWlyZV9fKDE1NykoXCIuL1wiK25hbWUpLGdldFNldEdsb2JhbExvY2FsZShvbGRMb2NhbGUpfWNhdGNoKGUpe2xvY2FsZXNbbmFtZV09bnVsbH1yZXR1cm4gbG9jYWxlc1tuYW1lXX1mdW5jdGlvbiBnZXRTZXRHbG9iYWxMb2NhbGUoa2V5LHZhbHVlcyl7dmFyIGRhdGE7cmV0dXJuIGtleSYmKChkYXRhPWlzVW5kZWZpbmVkKHZhbHVlcyk/Z2V0TG9jYWxlKGtleSk6ZGVmaW5lTG9jYWxlKGtleSx2YWx1ZXMpKT9nbG9iYWxMb2NhbGU9ZGF0YTpcInVuZGVmaW5lZFwiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oXCJMb2NhbGUgXCIra2V5K1wiIG5vdCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD9cIikpLGdsb2JhbExvY2FsZS5fYWJicn1mdW5jdGlvbiBkZWZpbmVMb2NhbGUobmFtZSxjb25maWcpe2lmKG51bGwhPT1jb25maWcpe3ZhciBsb2NhbGUscGFyZW50Q29uZmlnPWJhc2VDb25maWc7aWYoY29uZmlnLmFiYnI9bmFtZSxudWxsIT1sb2NhbGVzW25hbWVdKWRlcHJlY2F0ZVNpbXBsZShcImRlZmluZUxvY2FsZU92ZXJyaWRlXCIsXCJ1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSBhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby5cIikscGFyZW50Q29uZmlnPWxvY2FsZXNbbmFtZV0uX2NvbmZpZztlbHNlIGlmKG51bGwhPWNvbmZpZy5wYXJlbnRMb2NhbGUpaWYobnVsbCE9bG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXSlwYXJlbnRDb25maWc9bG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXS5fY29uZmlnO2Vsc2V7aWYobnVsbD09KGxvY2FsZT1sb2FkTG9jYWxlKGNvbmZpZy5wYXJlbnRMb2NhbGUpKSlyZXR1cm4gbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV18fChsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXT1bXSksbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0ucHVzaCh7bmFtZTpuYW1lLGNvbmZpZzpjb25maWd9KSxudWxsO3BhcmVudENvbmZpZz1sb2NhbGUuX2NvbmZpZ31yZXR1cm4gbG9jYWxlc1tuYW1lXT1uZXcgTG9jYWxlKG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsY29uZmlnKSksbG9jYWxlRmFtaWxpZXNbbmFtZV0mJmxvY2FsZUZhbWlsaWVzW25hbWVdLmZvckVhY2goKGZ1bmN0aW9uKHgpe2RlZmluZUxvY2FsZSh4Lm5hbWUseC5jb25maWcpfSkpLGdldFNldEdsb2JhbExvY2FsZShuYW1lKSxsb2NhbGVzW25hbWVdfXJldHVybiBkZWxldGUgbG9jYWxlc1tuYW1lXSxudWxsfWZ1bmN0aW9uIGdldExvY2FsZShrZXkpe3ZhciBsb2NhbGU7aWYoa2V5JiZrZXkuX2xvY2FsZSYma2V5Ll9sb2NhbGUuX2FiYnImJihrZXk9a2V5Ll9sb2NhbGUuX2FiYnIpLCFrZXkpcmV0dXJuIGdsb2JhbExvY2FsZTtpZighaXNBcnJheShrZXkpKXtpZihsb2NhbGU9bG9hZExvY2FsZShrZXkpKXJldHVybiBsb2NhbGU7a2V5PVtrZXldfXJldHVybiBmdW5jdGlvbihuYW1lcyl7Zm9yKHZhciBqLG5leHQsbG9jYWxlLHNwbGl0LGk9MDtpPG5hbWVzLmxlbmd0aDspe2ZvcihqPShzcGxpdD1ub3JtYWxpemVMb2NhbGUobmFtZXNbaV0pLnNwbGl0KFwiLVwiKSkubGVuZ3RoLG5leHQ9KG5leHQ9bm9ybWFsaXplTG9jYWxlKG5hbWVzW2krMV0pKT9uZXh0LnNwbGl0KFwiLVwiKTpudWxsO2o+MDspe2lmKGxvY2FsZT1sb2FkTG9jYWxlKHNwbGl0LnNsaWNlKDAsaikuam9pbihcIi1cIikpKXJldHVybiBsb2NhbGU7aWYobmV4dCYmbmV4dC5sZW5ndGg+PWomJmNvbW1vblByZWZpeChzcGxpdCxuZXh0KT49ai0xKWJyZWFrO2otLX1pKyt9cmV0dXJuIGdsb2JhbExvY2FsZX0oa2V5KX1mdW5jdGlvbiBjaGVja092ZXJmbG93KG0pe3ZhciBvdmVyZmxvdyxhPW0uX2E7cmV0dXJuIGEmJi0yPT09Z2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93JiYob3ZlcmZsb3c9YVsxXTwwfHxhWzFdPjExPzE6YVsyXTwxfHxhWzJdPmRheXNJbk1vbnRoKGFbMF0sYVsxXSk/MjphWzNdPDB8fGFbM10+MjR8fDI0PT09YVszXSYmKDAhPT1hWzRdfHwwIT09YVs1XXx8MCE9PWFbNl0pPzM6YVs0XTwwfHxhWzRdPjU5PzQ6YVs1XTwwfHxhWzVdPjU5PzU6YVs2XTwwfHxhWzZdPjk5OT82Oi0xLGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dEYXlPZlllYXImJihvdmVyZmxvdzwwfHxvdmVyZmxvdz4yKSYmKG92ZXJmbG93PTIpLGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrcyYmLTE9PT1vdmVyZmxvdyYmKG92ZXJmbG93PTcpLGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrZGF5JiYtMT09PW92ZXJmbG93JiYob3ZlcmZsb3c9OCksZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93PW92ZXJmbG93KSxtfXZhciBleHRlbmRlZElzb1JlZ2V4PS9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSktKD86XFxkXFxkLVxcZFxcZHxXXFxkXFxkLVxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGQpKSg/OihUfCApKFxcZFxcZCg/OjpcXGRcXGQoPzo6XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLGJhc2ljSXNvUmVnZXg9L15cXHMqKCg/OlsrLV1cXGR7Nn18XFxkezR9KSg/OlxcZFxcZFxcZFxcZHxXXFxkXFxkXFxkfFdcXGRcXGR8XFxkXFxkXFxkfFxcZFxcZHwpKSg/OihUfCApKFxcZFxcZCg/OlxcZFxcZCg/OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbKy1dXFxkXFxkKD86Oj9cXGRcXGQpP3xcXHMqWik/KT8kLyx0elJlZ2V4PS9afFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/Lyxpc29EYXRlcz1bW1wiWVlZWVlZLU1NLUREXCIsL1srLV1cXGR7Nn0tXFxkXFxkLVxcZFxcZC9dLFtcIllZWVktTU0tRERcIiwvXFxkezR9LVxcZFxcZC1cXGRcXGQvXSxbXCJHR0dHLVtXXVdXLUVcIiwvXFxkezR9LVdcXGRcXGQtXFxkL10sW1wiR0dHRy1bV11XV1wiLC9cXGR7NH0tV1xcZFxcZC8sITFdLFtcIllZWVktREREXCIsL1xcZHs0fS1cXGR7M30vXSxbXCJZWVlZLU1NXCIsL1xcZHs0fS1cXGRcXGQvLCExXSxbXCJZWVlZWVlNTUREXCIsL1srLV1cXGR7MTB9L10sW1wiWVlZWU1NRERcIiwvXFxkezh9L10sW1wiR0dHR1tXXVdXRVwiLC9cXGR7NH1XXFxkezN9L10sW1wiR0dHR1tXXVdXXCIsL1xcZHs0fVdcXGR7Mn0vLCExXSxbXCJZWVlZREREXCIsL1xcZHs3fS9dLFtcIllZWVlNTVwiLC9cXGR7Nn0vLCExXSxbXCJZWVlZXCIsL1xcZHs0fS8sITFdXSxpc29UaW1lcz1bW1wiSEg6bW06c3MuU1NTU1wiLC9cXGRcXGQ6XFxkXFxkOlxcZFxcZFxcLlxcZCsvXSxbXCJISDptbTpzcyxTU1NTXCIsL1xcZFxcZDpcXGRcXGQ6XFxkXFxkLFxcZCsvXSxbXCJISDptbTpzc1wiLC9cXGRcXGQ6XFxkXFxkOlxcZFxcZC9dLFtcIkhIOm1tXCIsL1xcZFxcZDpcXGRcXGQvXSxbXCJISG1tc3MuU1NTU1wiLC9cXGRcXGRcXGRcXGRcXGRcXGRcXC5cXGQrL10sW1wiSEhtbXNzLFNTU1NcIiwvXFxkXFxkXFxkXFxkXFxkXFxkLFxcZCsvXSxbXCJISG1tc3NcIiwvXFxkXFxkXFxkXFxkXFxkXFxkL10sW1wiSEhtbVwiLC9cXGRcXGRcXGRcXGQvXSxbXCJISFwiLC9cXGRcXGQvXV0sYXNwTmV0SnNvblJlZ2V4PS9eXFwvP0RhdGVcXCgoLT9cXGQrKS9pLHJmYzI4MjI9L14oPzooTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSw/XFxzKT8oXFxkezEsMn0pXFxzKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxccyhcXGR7Miw0fSlcXHMoXFxkXFxkKTooXFxkXFxkKSg/OjooXFxkXFxkKSk/XFxzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfChbKy1dXFxkezR9KSkkLyxvYnNPZmZzZXRzPXtVVDowLEdNVDowLEVEVDotMjQwLEVTVDotMzAwLENEVDotMzAwLENTVDotMzYwLE1EVDotMzYwLE1TVDotNDIwLFBEVDotNDIwLFBTVDotNDgwfTtmdW5jdGlvbiBjb25maWdGcm9tSVNPKGNvbmZpZyl7dmFyIGksbCxhbGxvd1RpbWUsZGF0ZUZvcm1hdCx0aW1lRm9ybWF0LHR6Rm9ybWF0LHN0cmluZz1jb25maWcuX2ksbWF0Y2g9ZXh0ZW5kZWRJc29SZWdleC5leGVjKHN0cmluZyl8fGJhc2ljSXNvUmVnZXguZXhlYyhzdHJpbmcpO2lmKG1hdGNoKXtmb3IoZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaXNvPSEwLGk9MCxsPWlzb0RhdGVzLmxlbmd0aDtpPGw7aSsrKWlmKGlzb0RhdGVzW2ldWzFdLmV4ZWMobWF0Y2hbMV0pKXtkYXRlRm9ybWF0PWlzb0RhdGVzW2ldWzBdLGFsbG93VGltZT0hMSE9PWlzb0RhdGVzW2ldWzJdO2JyZWFrfWlmKG51bGw9PWRhdGVGb3JtYXQpcmV0dXJuIHZvaWQoY29uZmlnLl9pc1ZhbGlkPSExKTtpZihtYXRjaFszXSl7Zm9yKGk9MCxsPWlzb1RpbWVzLmxlbmd0aDtpPGw7aSsrKWlmKGlzb1RpbWVzW2ldWzFdLmV4ZWMobWF0Y2hbM10pKXt0aW1lRm9ybWF0PShtYXRjaFsyXXx8XCIgXCIpK2lzb1RpbWVzW2ldWzBdO2JyZWFrfWlmKG51bGw9PXRpbWVGb3JtYXQpcmV0dXJuIHZvaWQoY29uZmlnLl9pc1ZhbGlkPSExKX1pZighYWxsb3dUaW1lJiZudWxsIT10aW1lRm9ybWF0KXJldHVybiB2b2lkKGNvbmZpZy5faXNWYWxpZD0hMSk7aWYobWF0Y2hbNF0pe2lmKCF0elJlZ2V4LmV4ZWMobWF0Y2hbNF0pKXJldHVybiB2b2lkKGNvbmZpZy5faXNWYWxpZD0hMSk7dHpGb3JtYXQ9XCJaXCJ9Y29uZmlnLl9mPWRhdGVGb3JtYXQrKHRpbWVGb3JtYXR8fFwiXCIpKyh0ekZvcm1hdHx8XCJcIiksY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpfWVsc2UgY29uZmlnLl9pc1ZhbGlkPSExfWZ1bmN0aW9uIHVudHJ1bmNhdGVZZWFyKHllYXJTdHIpe3ZhciB5ZWFyPXBhcnNlSW50KHllYXJTdHIsMTApO3JldHVybiB5ZWFyPD00OT8yZTMreWVhcjp5ZWFyPD05OTk/MTkwMCt5ZWFyOnllYXJ9ZnVuY3Rpb24gY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKXt2YXIgcGFyc2VkQXJyYXkseWVhclN0cixtb250aFN0cixkYXlTdHIsaG91clN0cixtaW51dGVTdHIsc2Vjb25kU3RyLHJlc3VsdCxtYXRjaD1yZmMyODIyLmV4ZWMoY29uZmlnLl9pLnJlcGxhY2UoL1xcKFteKV0qXFwpfFtcXG5cXHRdL2csXCIgXCIpLnJlcGxhY2UoLyhcXHNcXHMrKS9nLFwiIFwiKS5yZXBsYWNlKC9eXFxzXFxzKi8sXCJcIikucmVwbGFjZSgvXFxzXFxzKiQvLFwiXCIpKTtpZihtYXRjaCl7aWYoeWVhclN0cj1tYXRjaFs0XSxtb250aFN0cj1tYXRjaFszXSxkYXlTdHI9bWF0Y2hbMl0saG91clN0cj1tYXRjaFs1XSxtaW51dGVTdHI9bWF0Y2hbNl0sc2Vjb25kU3RyPW1hdGNoWzddLHJlc3VsdD1bdW50cnVuY2F0ZVllYXIoeWVhclN0ciksZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0LmluZGV4T2YobW9udGhTdHIpLHBhcnNlSW50KGRheVN0ciwxMCkscGFyc2VJbnQoaG91clN0ciwxMCkscGFyc2VJbnQobWludXRlU3RyLDEwKV0sc2Vjb25kU3RyJiZyZXN1bHQucHVzaChwYXJzZUludChzZWNvbmRTdHIsMTApKSxwYXJzZWRBcnJheT1yZXN1bHQsIWZ1bmN0aW9uKHdlZWtkYXlTdHIscGFyc2VkSW5wdXQsY29uZmlnKXtyZXR1cm4hd2Vla2RheVN0cnx8ZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKT09PW5ldyBEYXRlKHBhcnNlZElucHV0WzBdLHBhcnNlZElucHV0WzFdLHBhcnNlZElucHV0WzJdKS5nZXREYXkoKXx8KGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaD0hMCxjb25maWcuX2lzVmFsaWQ9ITEsITEpfShtYXRjaFsxXSxwYXJzZWRBcnJheSxjb25maWcpKXJldHVybjtjb25maWcuX2E9cGFyc2VkQXJyYXksY29uZmlnLl90em09ZnVuY3Rpb24ob2JzT2Zmc2V0LG1pbGl0YXJ5T2Zmc2V0LG51bU9mZnNldCl7aWYob2JzT2Zmc2V0KXJldHVybiBvYnNPZmZzZXRzW29ic09mZnNldF07aWYobWlsaXRhcnlPZmZzZXQpcmV0dXJuIDA7dmFyIGhtPXBhcnNlSW50KG51bU9mZnNldCwxMCksbT1obSUxMDA7cmV0dXJuKGhtLW0pLzEwMCo2MCttfShtYXRjaFs4XSxtYXRjaFs5XSxtYXRjaFsxMF0pLGNvbmZpZy5fZD1jcmVhdGVVVENEYXRlLmFwcGx5KG51bGwsY29uZmlnLl9hKSxjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpLWNvbmZpZy5fdHptKSxnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5yZmMyODIyPSEwfWVsc2UgY29uZmlnLl9pc1ZhbGlkPSExfWZ1bmN0aW9uIGRlZmF1bHRzKGEsYixjKXtyZXR1cm4gbnVsbCE9YT9hOm51bGwhPWI/YjpjfWZ1bmN0aW9uIGNvbmZpZ0Zyb21BcnJheShjb25maWcpe3ZhciBpLGRhdGUsY3VycmVudERhdGUsZXhwZWN0ZWRXZWVrZGF5LHllYXJUb1VzZSxpbnB1dD1bXTtpZighY29uZmlnLl9kKXtmb3IoY3VycmVudERhdGU9ZnVuY3Rpb24oY29uZmlnKXt2YXIgbm93VmFsdWU9bmV3IERhdGUoaG9va3Mubm93KCkpO3JldHVybiBjb25maWcuX3VzZVVUQz9bbm93VmFsdWUuZ2V0VVRDRnVsbFllYXIoKSxub3dWYWx1ZS5nZXRVVENNb250aCgpLG5vd1ZhbHVlLmdldFVUQ0RhdGUoKV06W25vd1ZhbHVlLmdldEZ1bGxZZWFyKCksbm93VmFsdWUuZ2V0TW9udGgoKSxub3dWYWx1ZS5nZXREYXRlKCldfShjb25maWcpLGNvbmZpZy5fdyYmbnVsbD09Y29uZmlnLl9hWzJdJiZudWxsPT1jb25maWcuX2FbMV0mJmZ1bmN0aW9uKGNvbmZpZyl7dmFyIHcsd2Vla1llYXIsd2Vlayx3ZWVrZGF5LGRvdyxkb3ksdGVtcCx3ZWVrZGF5T3ZlcmZsb3csY3VyV2VlaztudWxsIT0odz1jb25maWcuX3cpLkdHfHxudWxsIT13Lld8fG51bGwhPXcuRT8oZG93PTEsZG95PTQsd2Vla1llYXI9ZGVmYXVsdHMody5HRyxjb25maWcuX2FbMF0sd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLDEsNCkueWVhciksd2Vlaz1kZWZhdWx0cyh3LlcsMSksKCh3ZWVrZGF5PWRlZmF1bHRzKHcuRSwxKSk8MXx8d2Vla2RheT43KSYmKHdlZWtkYXlPdmVyZmxvdz0hMCkpOihkb3c9Y29uZmlnLl9sb2NhbGUuX3dlZWsuZG93LGRveT1jb25maWcuX2xvY2FsZS5fd2Vlay5kb3ksY3VyV2Vlaz13ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksZG93LGRveSksd2Vla1llYXI9ZGVmYXVsdHMody5nZyxjb25maWcuX2FbMF0sY3VyV2Vlay55ZWFyKSx3ZWVrPWRlZmF1bHRzKHcudyxjdXJXZWVrLndlZWspLG51bGwhPXcuZD8oKHdlZWtkYXk9dy5kKTwwfHx3ZWVrZGF5PjYpJiYod2Vla2RheU92ZXJmbG93PSEwKTpudWxsIT13LmU/KHdlZWtkYXk9dy5lK2Rvdywody5lPDB8fHcuZT42KSYmKHdlZWtkYXlPdmVyZmxvdz0hMCkpOndlZWtkYXk9ZG93KSx3ZWVrPDF8fHdlZWs+d2Vla3NJblllYXIod2Vla1llYXIsZG93LGRveSk/Z2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93V2Vla3M9ITA6bnVsbCE9d2Vla2RheU92ZXJmbG93P2dldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtkYXk9ITA6KHRlbXA9ZGF5T2ZZZWFyRnJvbVdlZWtzKHdlZWtZZWFyLHdlZWssd2Vla2RheSxkb3csZG95KSxjb25maWcuX2FbMF09dGVtcC55ZWFyLGNvbmZpZy5fZGF5T2ZZZWFyPXRlbXAuZGF5T2ZZZWFyKX0oY29uZmlnKSxudWxsIT1jb25maWcuX2RheU9mWWVhciYmKHllYXJUb1VzZT1kZWZhdWx0cyhjb25maWcuX2FbMF0sY3VycmVudERhdGVbMF0pLChjb25maWcuX2RheU9mWWVhcj5kYXlzSW5ZZWFyKHllYXJUb1VzZSl8fDA9PT1jb25maWcuX2RheU9mWWVhcikmJihnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dEYXlPZlllYXI9ITApLGRhdGU9Y3JlYXRlVVRDRGF0ZSh5ZWFyVG9Vc2UsMCxjb25maWcuX2RheU9mWWVhciksY29uZmlnLl9hWzFdPWRhdGUuZ2V0VVRDTW9udGgoKSxjb25maWcuX2FbMl09ZGF0ZS5nZXRVVENEYXRlKCkpLGk9MDtpPDMmJm51bGw9PWNvbmZpZy5fYVtpXTsrK2kpY29uZmlnLl9hW2ldPWlucHV0W2ldPWN1cnJlbnREYXRlW2ldO2Zvcig7aTw3O2krKyljb25maWcuX2FbaV09aW5wdXRbaV09bnVsbD09Y29uZmlnLl9hW2ldPzI9PT1pPzE6MDpjb25maWcuX2FbaV07MjQ9PT1jb25maWcuX2FbM10mJjA9PT1jb25maWcuX2FbNF0mJjA9PT1jb25maWcuX2FbNV0mJjA9PT1jb25maWcuX2FbNl0mJihjb25maWcuX25leHREYXk9ITAsY29uZmlnLl9hWzNdPTApLGNvbmZpZy5fZD0oY29uZmlnLl91c2VVVEM/Y3JlYXRlVVRDRGF0ZTpjcmVhdGVEYXRlKS5hcHBseShudWxsLGlucHV0KSxleHBlY3RlZFdlZWtkYXk9Y29uZmlnLl91c2VVVEM/Y29uZmlnLl9kLmdldFVUQ0RheSgpOmNvbmZpZy5fZC5nZXREYXkoKSxudWxsIT1jb25maWcuX3R6bSYmY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKS1jb25maWcuX3R6bSksY29uZmlnLl9uZXh0RGF5JiYoY29uZmlnLl9hWzNdPTI0KSxjb25maWcuX3cmJnZvaWQgMCE9PWNvbmZpZy5fdy5kJiZjb25maWcuX3cuZCE9PWV4cGVjdGVkV2Vla2RheSYmKGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaD0hMCl9fWZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKXtpZihjb25maWcuX2YhPT1ob29rcy5JU09fODYwMSlpZihjb25maWcuX2YhPT1ob29rcy5SRkNfMjgyMil7Y29uZmlnLl9hPVtdLGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5PSEwO3ZhciBpLHBhcnNlZElucHV0LHRva2Vucyx0b2tlbixza2lwcGVkLGVyYSxzdHJpbmc9XCJcIitjb25maWcuX2ksc3RyaW5nTGVuZ3RoPXN0cmluZy5sZW5ndGgsdG90YWxQYXJzZWRJbnB1dExlbmd0aD0wO2Zvcih0b2tlbnM9ZXhwYW5kRm9ybWF0KGNvbmZpZy5fZixjb25maWcuX2xvY2FsZSkubWF0Y2goZm9ybWF0dGluZ1Rva2Vucyl8fFtdLGk9MDtpPHRva2Vucy5sZW5ndGg7aSsrKXRva2VuPXRva2Vuc1tpXSwocGFyc2VkSW5wdXQ9KHN0cmluZy5tYXRjaChnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sY29uZmlnKSl8fFtdKVswXSkmJigoc2tpcHBlZD1zdHJpbmcuc3Vic3RyKDAsc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpKSkubGVuZ3RoPjAmJmdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc2tpcHBlZCksc3RyaW5nPXN0cmluZy5zbGljZShzdHJpbmcuaW5kZXhPZihwYXJzZWRJbnB1dCkrcGFyc2VkSW5wdXQubGVuZ3RoKSx0b3RhbFBhcnNlZElucHV0TGVuZ3RoKz1wYXJzZWRJbnB1dC5sZW5ndGgpLGZvcm1hdFRva2VuRnVuY3Rpb25zW3Rva2VuXT8ocGFyc2VkSW5wdXQ/Z2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHk9ITE6Z2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pLGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLHBhcnNlZElucHV0LGNvbmZpZykpOmNvbmZpZy5fc3RyaWN0JiYhcGFyc2VkSW5wdXQmJmdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5jaGFyc0xlZnRPdmVyPXN0cmluZ0xlbmd0aC10b3RhbFBhcnNlZElucHV0TGVuZ3RoLHN0cmluZy5sZW5ndGg+MCYmZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChzdHJpbmcpLGNvbmZpZy5fYVszXTw9MTImJiEwPT09Z2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciYmY29uZmlnLl9hWzNdPjAmJihnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyPXZvaWQgMCksZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucGFyc2VkRGF0ZVBhcnRzPWNvbmZpZy5fYS5zbGljZSgwKSxnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5tZXJpZGllbT1jb25maWcuX21lcmlkaWVtLGNvbmZpZy5fYVszXT1mdW5jdGlvbihsb2NhbGUsaG91cixtZXJpZGllbSl7dmFyIGlzUG07cmV0dXJuIG51bGw9PW1lcmlkaWVtP2hvdXI6bnVsbCE9bG9jYWxlLm1lcmlkaWVtSG91cj9sb2NhbGUubWVyaWRpZW1Ib3VyKGhvdXIsbWVyaWRpZW0pOm51bGwhPWxvY2FsZS5pc1BNPygoaXNQbT1sb2NhbGUuaXNQTShtZXJpZGllbSkpJiZob3VyPDEyJiYoaG91cis9MTIpLGlzUG18fDEyIT09aG91cnx8KGhvdXI9MCksaG91cik6aG91cn0oY29uZmlnLl9sb2NhbGUsY29uZmlnLl9hWzNdLGNvbmZpZy5fbWVyaWRpZW0pLG51bGwhPT0oZXJhPWdldFBhcnNpbmdGbGFncyhjb25maWcpLmVyYSkmJihjb25maWcuX2FbMF09Y29uZmlnLl9sb2NhbGUuZXJhc0NvbnZlcnRZZWFyKGVyYSxjb25maWcuX2FbMF0pKSxjb25maWdGcm9tQXJyYXkoY29uZmlnKSxjaGVja092ZXJmbG93KGNvbmZpZyl9ZWxzZSBjb25maWdGcm9tUkZDMjgyMihjb25maWcpO2Vsc2UgY29uZmlnRnJvbUlTTyhjb25maWcpfWZ1bmN0aW9uIHByZXBhcmVDb25maWcoY29uZmlnKXt2YXIgaW5wdXQ9Y29uZmlnLl9pLGZvcm1hdD1jb25maWcuX2Y7cmV0dXJuIGNvbmZpZy5fbG9jYWxlPWNvbmZpZy5fbG9jYWxlfHxnZXRMb2NhbGUoY29uZmlnLl9sKSxudWxsPT09aW5wdXR8fHZvaWQgMD09PWZvcm1hdCYmXCJcIj09PWlucHV0P2NyZWF0ZUludmFsaWQoe251bGxJbnB1dDohMH0pOihcInN0cmluZ1wiPT10eXBlb2YgaW5wdXQmJihjb25maWcuX2k9aW5wdXQ9Y29uZmlnLl9sb2NhbGUucHJlcGFyc2UoaW5wdXQpKSxpc01vbWVudChpbnB1dCk/bmV3IE1vbWVudChjaGVja092ZXJmbG93KGlucHV0KSk6KGlzRGF0ZShpbnB1dCk/Y29uZmlnLl9kPWlucHV0OmlzQXJyYXkoZm9ybWF0KT9mdW5jdGlvbihjb25maWcpe3ZhciB0ZW1wQ29uZmlnLGJlc3RNb21lbnQsc2NvcmVUb0JlYXQsaSxjdXJyZW50U2NvcmUsdmFsaWRGb3JtYXRGb3VuZCxiZXN0Rm9ybWF0SXNWYWxpZD0hMTtpZigwPT09Y29uZmlnLl9mLmxlbmd0aClyZXR1cm4gZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEZvcm1hdD0hMCx2b2lkKGNvbmZpZy5fZD1uZXcgRGF0ZShOYU4pKTtmb3IoaT0wO2k8Y29uZmlnLl9mLmxlbmd0aDtpKyspY3VycmVudFNjb3JlPTAsdmFsaWRGb3JtYXRGb3VuZD0hMSx0ZW1wQ29uZmlnPWNvcHlDb25maWcoe30sY29uZmlnKSxudWxsIT1jb25maWcuX3VzZVVUQyYmKHRlbXBDb25maWcuX3VzZVVUQz1jb25maWcuX3VzZVVUQyksdGVtcENvbmZpZy5fZj1jb25maWcuX2ZbaV0sY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdCh0ZW1wQ29uZmlnKSxpc1ZhbGlkKHRlbXBDb25maWcpJiYodmFsaWRGb3JtYXRGb3VuZD0hMCksY3VycmVudFNjb3JlKz1nZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykuY2hhcnNMZWZ0T3ZlcixjdXJyZW50U2NvcmUrPTEwKmdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS51bnVzZWRUb2tlbnMubGVuZ3RoLGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5zY29yZT1jdXJyZW50U2NvcmUsYmVzdEZvcm1hdElzVmFsaWQ/Y3VycmVudFNjb3JlPHNjb3JlVG9CZWF0JiYoc2NvcmVUb0JlYXQ9Y3VycmVudFNjb3JlLGJlc3RNb21lbnQ9dGVtcENvbmZpZyk6KG51bGw9PXNjb3JlVG9CZWF0fHxjdXJyZW50U2NvcmU8c2NvcmVUb0JlYXR8fHZhbGlkRm9ybWF0Rm91bmQpJiYoc2NvcmVUb0JlYXQ9Y3VycmVudFNjb3JlLGJlc3RNb21lbnQ9dGVtcENvbmZpZyx2YWxpZEZvcm1hdEZvdW5kJiYoYmVzdEZvcm1hdElzVmFsaWQ9ITApKTtleHRlbmQoY29uZmlnLGJlc3RNb21lbnR8fHRlbXBDb25maWcpfShjb25maWcpOmZvcm1hdD9jb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk6ZnVuY3Rpb24oY29uZmlnKXt2YXIgaW5wdXQ9Y29uZmlnLl9pO2lzVW5kZWZpbmVkKGlucHV0KT9jb25maWcuX2Q9bmV3IERhdGUoaG9va3Mubm93KCkpOmlzRGF0ZShpbnB1dCk/Y29uZmlnLl9kPW5ldyBEYXRlKGlucHV0LnZhbHVlT2YoKSk6XCJzdHJpbmdcIj09dHlwZW9mIGlucHV0P2Z1bmN0aW9uKGNvbmZpZyl7dmFyIG1hdGNoZWQ9YXNwTmV0SnNvblJlZ2V4LmV4ZWMoY29uZmlnLl9pKTtudWxsPT09bWF0Y2hlZD8oY29uZmlnRnJvbUlTTyhjb25maWcpLCExPT09Y29uZmlnLl9pc1ZhbGlkJiYoZGVsZXRlIGNvbmZpZy5faXNWYWxpZCxjb25maWdGcm9tUkZDMjgyMihjb25maWcpLCExPT09Y29uZmlnLl9pc1ZhbGlkJiYoZGVsZXRlIGNvbmZpZy5faXNWYWxpZCxjb25maWcuX3N0cmljdD9jb25maWcuX2lzVmFsaWQ9ITE6aG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKSkpKTpjb25maWcuX2Q9bmV3IERhdGUoK21hdGNoZWRbMV0pfShjb25maWcpOmlzQXJyYXkoaW5wdXQpPyhjb25maWcuX2E9bWFwKGlucHV0LnNsaWNlKDApLChmdW5jdGlvbihvYmope3JldHVybiBwYXJzZUludChvYmosMTApfSkpLGNvbmZpZ0Zyb21BcnJheShjb25maWcpKTppc09iamVjdChpbnB1dCk/ZnVuY3Rpb24oY29uZmlnKXtpZighY29uZmlnLl9kKXt2YXIgaT1ub3JtYWxpemVPYmplY3RVbml0cyhjb25maWcuX2kpLGRheU9yRGF0ZT12b2lkIDA9PT1pLmRheT9pLmRhdGU6aS5kYXk7Y29uZmlnLl9hPW1hcChbaS55ZWFyLGkubW9udGgsZGF5T3JEYXRlLGkuaG91cixpLm1pbnV0ZSxpLnNlY29uZCxpLm1pbGxpc2Vjb25kXSwoZnVuY3Rpb24ob2JqKXtyZXR1cm4gb2JqJiZwYXJzZUludChvYmosMTApfSkpLGNvbmZpZ0Zyb21BcnJheShjb25maWcpfX0oY29uZmlnKTppc051bWJlcihpbnB1dCk/Y29uZmlnLl9kPW5ldyBEYXRlKGlucHV0KTpob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpfShjb25maWcpLGlzVmFsaWQoY29uZmlnKXx8KGNvbmZpZy5fZD1udWxsKSxjb25maWcpKX1mdW5jdGlvbiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LGZvcm1hdCxsb2NhbGUsc3RyaWN0LGlzVVRDKXt2YXIgcmVzLGM9e307cmV0dXJuITAhPT1mb3JtYXQmJiExIT09Zm9ybWF0fHwoc3RyaWN0PWZvcm1hdCxmb3JtYXQ9dm9pZCAwKSwhMCE9PWxvY2FsZSYmITEhPT1sb2NhbGV8fChzdHJpY3Q9bG9jYWxlLGxvY2FsZT12b2lkIDApLChpc09iamVjdChpbnB1dCkmJmlzT2JqZWN0RW1wdHkoaW5wdXQpfHxpc0FycmF5KGlucHV0KSYmMD09PWlucHV0Lmxlbmd0aCkmJihpbnB1dD12b2lkIDApLGMuX2lzQU1vbWVudE9iamVjdD0hMCxjLl91c2VVVEM9Yy5faXNVVEM9aXNVVEMsYy5fbD1sb2NhbGUsYy5faT1pbnB1dCxjLl9mPWZvcm1hdCxjLl9zdHJpY3Q9c3RyaWN0LChyZXM9bmV3IE1vbWVudChjaGVja092ZXJmbG93KHByZXBhcmVDb25maWcoYykpKSkuX25leHREYXkmJihyZXMuYWRkKDEsXCJkXCIpLHJlcy5fbmV4dERheT12b2lkIDApLHJlc31mdW5jdGlvbiBjcmVhdGVMb2NhbChpbnB1dCxmb3JtYXQsbG9jYWxlLHN0cmljdCl7cmV0dXJuIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsZm9ybWF0LGxvY2FsZSxzdHJpY3QsITEpfWhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrPWRlcHJlY2F0ZShcInZhbHVlIHByb3ZpZGVkIGlzIG5vdCBpbiBhIHJlY29nbml6ZWQgUkZDMjgyMiBvciBJU08gZm9ybWF0LiBtb21lbnQgY29uc3RydWN0aW9uIGZhbGxzIGJhY2sgdG8ganMgRGF0ZSgpLCB3aGljaCBpcyBub3QgcmVsaWFibGUgYWNyb3NzIGFsbCBicm93c2VycyBhbmQgdmVyc2lvbnMuIE5vbiBSRkMyODIyL0lTTyBkYXRlIGZvcm1hdHMgYXJlIGRpc2NvdXJhZ2VkLiBQbGVhc2UgcmVmZXIgdG8gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9qcy1kYXRlLyBmb3IgbW9yZSBpbmZvLlwiLChmdW5jdGlvbihjb25maWcpe2NvbmZpZy5fZD1uZXcgRGF0ZShjb25maWcuX2krKGNvbmZpZy5fdXNlVVRDP1wiIFVUQ1wiOlwiXCIpKX0pKSxob29rcy5JU09fODYwMT1mdW5jdGlvbigpe30saG9va3MuUkZDXzI4MjI9ZnVuY3Rpb24oKXt9O3ZhciBwcm90b3R5cGVNaW49ZGVwcmVjYXRlKFwibW9tZW50KCkubWluIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWF4IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC9cIiwoZnVuY3Rpb24oKXt2YXIgb3RoZXI9Y3JlYXRlTG9jYWwuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiB0aGlzLmlzVmFsaWQoKSYmb3RoZXIuaXNWYWxpZCgpP290aGVyPHRoaXM/dGhpczpvdGhlcjpjcmVhdGVJbnZhbGlkKCl9KSkscHJvdG90eXBlTWF4PWRlcHJlY2F0ZShcIm1vbWVudCgpLm1heCBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1pbiBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvXCIsKGZ1bmN0aW9uKCl7dmFyIG90aGVyPWNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJm90aGVyLmlzVmFsaWQoKT9vdGhlcj50aGlzP3RoaXM6b3RoZXI6Y3JlYXRlSW52YWxpZCgpfSkpO2Z1bmN0aW9uIHBpY2tCeShmbixtb21lbnRzKXt2YXIgcmVzLGk7aWYoMT09PW1vbWVudHMubGVuZ3RoJiZpc0FycmF5KG1vbWVudHNbMF0pJiYobW9tZW50cz1tb21lbnRzWzBdKSwhbW9tZW50cy5sZW5ndGgpcmV0dXJuIGNyZWF0ZUxvY2FsKCk7Zm9yKHJlcz1tb21lbnRzWzBdLGk9MTtpPG1vbWVudHMubGVuZ3RoOysraSltb21lbnRzW2ldLmlzVmFsaWQoKSYmIW1vbWVudHNbaV1bZm5dKHJlcyl8fChyZXM9bW9tZW50c1tpXSk7cmV0dXJuIHJlc312YXIgb3JkZXJpbmc9W1wieWVhclwiLFwicXVhcnRlclwiLFwibW9udGhcIixcIndlZWtcIixcImRheVwiLFwiaG91clwiLFwibWludXRlXCIsXCJzZWNvbmRcIixcIm1pbGxpc2Vjb25kXCJdO2Z1bmN0aW9uIER1cmF0aW9uKGR1cmF0aW9uKXt2YXIgbm9ybWFsaXplZElucHV0PW5vcm1hbGl6ZU9iamVjdFVuaXRzKGR1cmF0aW9uKSx5ZWFycz1ub3JtYWxpemVkSW5wdXQueWVhcnx8MCxxdWFydGVycz1ub3JtYWxpemVkSW5wdXQucXVhcnRlcnx8MCxtb250aHM9bm9ybWFsaXplZElucHV0Lm1vbnRofHwwLHdlZWtzPW5vcm1hbGl6ZWRJbnB1dC53ZWVrfHxub3JtYWxpemVkSW5wdXQuaXNvV2Vla3x8MCxkYXlzPW5vcm1hbGl6ZWRJbnB1dC5kYXl8fDAsaG91cnM9bm9ybWFsaXplZElucHV0LmhvdXJ8fDAsbWludXRlcz1ub3JtYWxpemVkSW5wdXQubWludXRlfHwwLHNlY29uZHM9bm9ybWFsaXplZElucHV0LnNlY29uZHx8MCxtaWxsaXNlY29uZHM9bm9ybWFsaXplZElucHV0Lm1pbGxpc2Vjb25kfHwwO3RoaXMuX2lzVmFsaWQ9ZnVuY3Rpb24obSl7dmFyIGtleSxpLHVuaXRIYXNEZWNpbWFsPSExO2ZvcihrZXkgaW4gbSlpZihoYXNPd25Qcm9wKG0sa2V5KSYmKC0xPT09aW5kZXhPZi5jYWxsKG9yZGVyaW5nLGtleSl8fG51bGwhPW1ba2V5XSYmaXNOYU4obVtrZXldKSkpcmV0dXJuITE7Zm9yKGk9MDtpPG9yZGVyaW5nLmxlbmd0aDsrK2kpaWYobVtvcmRlcmluZ1tpXV0pe2lmKHVuaXRIYXNEZWNpbWFsKXJldHVybiExO3BhcnNlRmxvYXQobVtvcmRlcmluZ1tpXV0pIT09dG9JbnQobVtvcmRlcmluZ1tpXV0pJiYodW5pdEhhc0RlY2ltYWw9ITApfXJldHVybiEwfShub3JtYWxpemVkSW5wdXQpLHRoaXMuX21pbGxpc2Vjb25kcz0rbWlsbGlzZWNvbmRzKzFlMypzZWNvbmRzKzZlNCptaW51dGVzKzFlMypob3Vycyo2MCo2MCx0aGlzLl9kYXlzPStkYXlzKzcqd2Vla3MsdGhpcy5fbW9udGhzPSttb250aHMrMypxdWFydGVycysxMip5ZWFycyx0aGlzLl9kYXRhPXt9LHRoaXMuX2xvY2FsZT1nZXRMb2NhbGUoKSx0aGlzLl9idWJibGUoKX1mdW5jdGlvbiBpc0R1cmF0aW9uKG9iail7cmV0dXJuIG9iaiBpbnN0YW5jZW9mIER1cmF0aW9ufWZ1bmN0aW9uIGFic1JvdW5kKG51bWJlcil7cmV0dXJuIG51bWJlcjwwPy0xKk1hdGgucm91bmQoLTEqbnVtYmVyKTpNYXRoLnJvdW5kKG51bWJlcil9ZnVuY3Rpb24gb2Zmc2V0KHRva2VuLHNlcGFyYXRvcil7YWRkRm9ybWF0VG9rZW4odG9rZW4sMCwwLChmdW5jdGlvbigpe3ZhciBvZmZzZXQ9dGhpcy51dGNPZmZzZXQoKSxzaWduPVwiK1wiO3JldHVybiBvZmZzZXQ8MCYmKG9mZnNldD0tb2Zmc2V0LHNpZ249XCItXCIpLHNpZ24remVyb0ZpbGwofn4ob2Zmc2V0LzYwKSwyKStzZXBhcmF0b3IremVyb0ZpbGwofn5vZmZzZXQlNjAsMil9KSl9b2Zmc2V0KFwiWlwiLFwiOlwiKSxvZmZzZXQoXCJaWlwiLFwiXCIpLGFkZFJlZ2V4VG9rZW4oXCJaXCIsbWF0Y2hTaG9ydE9mZnNldCksYWRkUmVnZXhUb2tlbihcIlpaXCIsbWF0Y2hTaG9ydE9mZnNldCksYWRkUGFyc2VUb2tlbihbXCJaXCIsXCJaWlwiXSwoZnVuY3Rpb24oaW5wdXQsYXJyYXksY29uZmlnKXtjb25maWcuX3VzZVVUQz0hMCxjb25maWcuX3R6bT1vZmZzZXRGcm9tU3RyaW5nKG1hdGNoU2hvcnRPZmZzZXQsaW5wdXQpfSkpO3ZhciBjaHVua09mZnNldD0vKFtcXCtcXC1dfFxcZFxcZCkvZ2k7ZnVuY3Rpb24gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaGVyLHN0cmluZyl7dmFyIHBhcnRzLG1pbnV0ZXMsbWF0Y2hlcz0oc3RyaW5nfHxcIlwiKS5tYXRjaChtYXRjaGVyKTtyZXR1cm4gbnVsbD09PW1hdGNoZXM/bnVsbDowPT09KG1pbnV0ZXM9NjAqKHBhcnRzPSgobWF0Y2hlc1ttYXRjaGVzLmxlbmd0aC0xXXx8W10pK1wiXCIpLm1hdGNoKGNodW5rT2Zmc2V0KXx8W1wiLVwiLDAsMF0pWzFdK3RvSW50KHBhcnRzWzJdKSk/MDpcIitcIj09PXBhcnRzWzBdP21pbnV0ZXM6LW1pbnV0ZXN9ZnVuY3Rpb24gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LG1vZGVsKXt2YXIgcmVzLGRpZmY7cmV0dXJuIG1vZGVsLl9pc1VUQz8ocmVzPW1vZGVsLmNsb25lKCksZGlmZj0oaXNNb21lbnQoaW5wdXQpfHxpc0RhdGUoaW5wdXQpP2lucHV0LnZhbHVlT2YoKTpjcmVhdGVMb2NhbChpbnB1dCkudmFsdWVPZigpKS1yZXMudmFsdWVPZigpLHJlcy5fZC5zZXRUaW1lKHJlcy5fZC52YWx1ZU9mKCkrZGlmZiksaG9va3MudXBkYXRlT2Zmc2V0KHJlcywhMSkscmVzKTpjcmVhdGVMb2NhbChpbnB1dCkubG9jYWwoKX1mdW5jdGlvbiBnZXREYXRlT2Zmc2V0KG0pe3JldHVybi1NYXRoLnJvdW5kKG0uX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSl9ZnVuY3Rpb24gaXNVdGMoKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiZ0aGlzLl9pc1VUQyYmMD09PXRoaXMuX29mZnNldH1ob29rcy51cGRhdGVPZmZzZXQ9ZnVuY3Rpb24oKXt9O3ZhciBhc3BOZXRSZWdleD0vXigtfFxcKyk/KD86KFxcZCopWy4gXSk/KFxcZCspOihcXGQrKSg/OjooXFxkKykoXFwuXFxkKik/KT8kLyxpc29SZWdleD0vXigtfFxcKyk/UCg/OihbLStdP1swLTksLl0qKVkpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVcpPyg/OihbLStdP1swLTksLl0qKUQpPyg/OlQoPzooWy0rXT9bMC05LC5dKilIKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilTKT8pPyQvO2Z1bmN0aW9uIGNyZWF0ZUR1cmF0aW9uKGlucHV0LGtleSl7dmFyIHNpZ24scmV0LGRpZmZSZXMsYmFzZSxvdGhlcixyZXMsZHVyYXRpb249aW5wdXQsbWF0Y2g9bnVsbDtyZXR1cm4gaXNEdXJhdGlvbihpbnB1dCk/ZHVyYXRpb249e21zOmlucHV0Ll9taWxsaXNlY29uZHMsZDppbnB1dC5fZGF5cyxNOmlucHV0Ll9tb250aHN9OmlzTnVtYmVyKGlucHV0KXx8IWlzTmFOKCtpbnB1dCk/KGR1cmF0aW9uPXt9LGtleT9kdXJhdGlvbltrZXldPStpbnB1dDpkdXJhdGlvbi5taWxsaXNlY29uZHM9K2lucHV0KToobWF0Y2g9YXNwTmV0UmVnZXguZXhlYyhpbnB1dCkpPyhzaWduPVwiLVwiPT09bWF0Y2hbMV0/LTE6MSxkdXJhdGlvbj17eTowLGQ6dG9JbnQobWF0Y2hbMl0pKnNpZ24saDp0b0ludChtYXRjaFszXSkqc2lnbixtOnRvSW50KG1hdGNoWzRdKSpzaWduLHM6dG9JbnQobWF0Y2hbNV0pKnNpZ24sbXM6dG9JbnQoYWJzUm91bmQoMWUzKm1hdGNoWzZdKSkqc2lnbn0pOihtYXRjaD1pc29SZWdleC5leGVjKGlucHV0KSk/KHNpZ249XCItXCI9PT1tYXRjaFsxXT8tMToxLGR1cmF0aW9uPXt5OnBhcnNlSXNvKG1hdGNoWzJdLHNpZ24pLE06cGFyc2VJc28obWF0Y2hbM10sc2lnbiksdzpwYXJzZUlzbyhtYXRjaFs0XSxzaWduKSxkOnBhcnNlSXNvKG1hdGNoWzVdLHNpZ24pLGg6cGFyc2VJc28obWF0Y2hbNl0sc2lnbiksbTpwYXJzZUlzbyhtYXRjaFs3XSxzaWduKSxzOnBhcnNlSXNvKG1hdGNoWzhdLHNpZ24pfSk6bnVsbD09ZHVyYXRpb24/ZHVyYXRpb249e306XCJvYmplY3RcIj09dHlwZW9mIGR1cmF0aW9uJiYoXCJmcm9tXCJpbiBkdXJhdGlvbnx8XCJ0b1wiaW4gZHVyYXRpb24pJiYoYmFzZT1jcmVhdGVMb2NhbChkdXJhdGlvbi5mcm9tKSxvdGhlcj1jcmVhdGVMb2NhbChkdXJhdGlvbi50byksZGlmZlJlcz1iYXNlLmlzVmFsaWQoKSYmb3RoZXIuaXNWYWxpZCgpPyhvdGhlcj1jbG9uZVdpdGhPZmZzZXQob3RoZXIsYmFzZSksYmFzZS5pc0JlZm9yZShvdGhlcik/cmVzPXBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSxvdGhlcik6KChyZXM9cG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShvdGhlcixiYXNlKSkubWlsbGlzZWNvbmRzPS1yZXMubWlsbGlzZWNvbmRzLHJlcy5tb250aHM9LXJlcy5tb250aHMpLHJlcyk6e21pbGxpc2Vjb25kczowLG1vbnRoczowfSwoZHVyYXRpb249e30pLm1zPWRpZmZSZXMubWlsbGlzZWNvbmRzLGR1cmF0aW9uLk09ZGlmZlJlcy5tb250aHMpLHJldD1uZXcgRHVyYXRpb24oZHVyYXRpb24pLGlzRHVyYXRpb24oaW5wdXQpJiZoYXNPd25Qcm9wKGlucHV0LFwiX2xvY2FsZVwiKSYmKHJldC5fbG9jYWxlPWlucHV0Ll9sb2NhbGUpLGlzRHVyYXRpb24oaW5wdXQpJiZoYXNPd25Qcm9wKGlucHV0LFwiX2lzVmFsaWRcIikmJihyZXQuX2lzVmFsaWQ9aW5wdXQuX2lzVmFsaWQpLHJldH1mdW5jdGlvbiBwYXJzZUlzbyhpbnAsc2lnbil7dmFyIHJlcz1pbnAmJnBhcnNlRmxvYXQoaW5wLnJlcGxhY2UoXCIsXCIsXCIuXCIpKTtyZXR1cm4oaXNOYU4ocmVzKT8wOnJlcykqc2lnbn1mdW5jdGlvbiBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2Usb3RoZXIpe3ZhciByZXM9e307cmV0dXJuIHJlcy5tb250aHM9b3RoZXIubW9udGgoKS1iYXNlLm1vbnRoKCkrMTIqKG90aGVyLnllYXIoKS1iYXNlLnllYXIoKSksYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLFwiTVwiKS5pc0FmdGVyKG90aGVyKSYmLS1yZXMubW9udGhzLHJlcy5taWxsaXNlY29uZHM9K290aGVyLStiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsXCJNXCIpLHJlc31mdW5jdGlvbiBjcmVhdGVBZGRlcihkaXJlY3Rpb24sbmFtZSl7cmV0dXJuIGZ1bmN0aW9uKHZhbCxwZXJpb2Qpe3ZhciB0bXA7cmV0dXJuIG51bGw9PT1wZXJpb2R8fGlzTmFOKCtwZXJpb2QpfHwoZGVwcmVjYXRlU2ltcGxlKG5hbWUsXCJtb21lbnQoKS5cIituYW1lK1wiKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLlwiK25hbWUrXCIobnVtYmVyLCBwZXJpb2QpLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9hZGQtaW52ZXJ0ZWQtcGFyYW0vIGZvciBtb3JlIGluZm8uXCIpLHRtcD12YWwsdmFsPXBlcmlvZCxwZXJpb2Q9dG1wKSxhZGRTdWJ0cmFjdCh0aGlzLGNyZWF0ZUR1cmF0aW9uKHZhbCxwZXJpb2QpLGRpcmVjdGlvbiksdGhpc319ZnVuY3Rpb24gYWRkU3VidHJhY3QobW9tLGR1cmF0aW9uLGlzQWRkaW5nLHVwZGF0ZU9mZnNldCl7dmFyIG1pbGxpc2Vjb25kcz1kdXJhdGlvbi5fbWlsbGlzZWNvbmRzLGRheXM9YWJzUm91bmQoZHVyYXRpb24uX2RheXMpLG1vbnRocz1hYnNSb3VuZChkdXJhdGlvbi5fbW9udGhzKTttb20uaXNWYWxpZCgpJiYodXBkYXRlT2Zmc2V0PW51bGw9PXVwZGF0ZU9mZnNldHx8dXBkYXRlT2Zmc2V0LG1vbnRocyYmc2V0TW9udGgobW9tLGdldChtb20sXCJNb250aFwiKSttb250aHMqaXNBZGRpbmcpLGRheXMmJnNldCQxKG1vbSxcIkRhdGVcIixnZXQobW9tLFwiRGF0ZVwiKStkYXlzKmlzQWRkaW5nKSxtaWxsaXNlY29uZHMmJm1vbS5fZC5zZXRUaW1lKG1vbS5fZC52YWx1ZU9mKCkrbWlsbGlzZWNvbmRzKmlzQWRkaW5nKSx1cGRhdGVPZmZzZXQmJmhvb2tzLnVwZGF0ZU9mZnNldChtb20sZGF5c3x8bW9udGhzKSl9Y3JlYXRlRHVyYXRpb24uZm49RHVyYXRpb24ucHJvdG90eXBlLGNyZWF0ZUR1cmF0aW9uLmludmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gY3JlYXRlRHVyYXRpb24oTmFOKX07dmFyIGFkZD1jcmVhdGVBZGRlcigxLFwiYWRkXCIpLHN1YnRyYWN0PWNyZWF0ZUFkZGVyKC0xLFwic3VidHJhY3RcIik7ZnVuY3Rpb24gaXNTdHJpbmcoaW5wdXQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBpbnB1dHx8aW5wdXQgaW5zdGFuY2VvZiBTdHJpbmd9ZnVuY3Rpb24gaXNNb21lbnRJbnB1dChpbnB1dCl7cmV0dXJuIGlzTW9tZW50KGlucHV0KXx8aXNEYXRlKGlucHV0KXx8aXNTdHJpbmcoaW5wdXQpfHxpc051bWJlcihpbnB1dCl8fGZ1bmN0aW9uKGlucHV0KXt2YXIgYXJyYXlUZXN0PWlzQXJyYXkoaW5wdXQpLGRhdGFUeXBlVGVzdD0hMTtyZXR1cm4gYXJyYXlUZXN0JiYoZGF0YVR5cGVUZXN0PTA9PT1pbnB1dC5maWx0ZXIoKGZ1bmN0aW9uKGl0ZW0pe3JldHVybiFpc051bWJlcihpdGVtKSYmaXNTdHJpbmcoaW5wdXQpfSkpLmxlbmd0aCksYXJyYXlUZXN0JiZkYXRhVHlwZVRlc3R9KGlucHV0KXx8ZnVuY3Rpb24oaW5wdXQpe3ZhciBpLHByb3BlcnR5LG9iamVjdFRlc3Q9aXNPYmplY3QoaW5wdXQpJiYhaXNPYmplY3RFbXB0eShpbnB1dCkscHJvcGVydHlUZXN0PSExLHByb3BlcnRpZXM9W1wieWVhcnNcIixcInllYXJcIixcInlcIixcIm1vbnRoc1wiLFwibW9udGhcIixcIk1cIixcImRheXNcIixcImRheVwiLFwiZFwiLFwiZGF0ZXNcIixcImRhdGVcIixcIkRcIixcImhvdXJzXCIsXCJob3VyXCIsXCJoXCIsXCJtaW51dGVzXCIsXCJtaW51dGVcIixcIm1cIixcInNlY29uZHNcIixcInNlY29uZFwiLFwic1wiLFwibWlsbGlzZWNvbmRzXCIsXCJtaWxsaXNlY29uZFwiLFwibXNcIl07Zm9yKGk9MDtpPHByb3BlcnRpZXMubGVuZ3RoO2krPTEpcHJvcGVydHk9cHJvcGVydGllc1tpXSxwcm9wZXJ0eVRlc3Q9cHJvcGVydHlUZXN0fHxoYXNPd25Qcm9wKGlucHV0LHByb3BlcnR5KTtyZXR1cm4gb2JqZWN0VGVzdCYmcHJvcGVydHlUZXN0fShpbnB1dCl8fG51bGw9PWlucHV0fWZ1bmN0aW9uIGlzQ2FsZW5kYXJTcGVjKGlucHV0KXt2YXIgaSxvYmplY3RUZXN0PWlzT2JqZWN0KGlucHV0KSYmIWlzT2JqZWN0RW1wdHkoaW5wdXQpLHByb3BlcnR5VGVzdD0hMSxwcm9wZXJ0aWVzPVtcInNhbWVEYXlcIixcIm5leHREYXlcIixcImxhc3REYXlcIixcIm5leHRXZWVrXCIsXCJsYXN0V2Vla1wiLFwic2FtZUVsc2VcIl07Zm9yKGk9MDtpPHByb3BlcnRpZXMubGVuZ3RoO2krPTEpcHJvcGVydHlUZXN0PXByb3BlcnR5VGVzdHx8aGFzT3duUHJvcChpbnB1dCxwcm9wZXJ0aWVzW2ldKTtyZXR1cm4gb2JqZWN0VGVzdCYmcHJvcGVydHlUZXN0fWZ1bmN0aW9uIG1vbnRoRGlmZihhLGIpe2lmKGEuZGF0ZSgpPGIuZGF0ZSgpKXJldHVybi1tb250aERpZmYoYixhKTt2YXIgd2hvbGVNb250aERpZmY9MTIqKGIueWVhcigpLWEueWVhcigpKSsoYi5tb250aCgpLWEubW9udGgoKSksYW5jaG9yPWEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYsXCJtb250aHNcIik7cmV0dXJuLSh3aG9sZU1vbnRoRGlmZisoYi1hbmNob3I8MD8oYi1hbmNob3IpLyhhbmNob3ItYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZi0xLFwibW9udGhzXCIpKTooYi1hbmNob3IpLyhhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmKzEsXCJtb250aHNcIiktYW5jaG9yKSkpfHwwfWZ1bmN0aW9uIGxvY2FsZShrZXkpe3ZhciBuZXdMb2NhbGVEYXRhO3JldHVybiB2b2lkIDA9PT1rZXk/dGhpcy5fbG9jYWxlLl9hYmJyOihudWxsIT0obmV3TG9jYWxlRGF0YT1nZXRMb2NhbGUoa2V5KSkmJih0aGlzLl9sb2NhbGU9bmV3TG9jYWxlRGF0YSksdGhpcyl9aG9va3MuZGVmYXVsdEZvcm1hdD1cIllZWVktTU0tRERUSEg6bW06c3NaXCIsaG9va3MuZGVmYXVsdEZvcm1hdFV0Yz1cIllZWVktTU0tRERUSEg6bW06c3NbWl1cIjt2YXIgbGFuZz1kZXByZWNhdGUoXCJtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLlwiLChmdW5jdGlvbihrZXkpe3JldHVybiB2b2lkIDA9PT1rZXk/dGhpcy5sb2NhbGVEYXRhKCk6dGhpcy5sb2NhbGUoa2V5KX0pKTtmdW5jdGlvbiBsb2NhbGVEYXRhKCl7cmV0dXJuIHRoaXMuX2xvY2FsZX1mdW5jdGlvbiBtb2QkMShkaXZpZGVuZCxkaXZpc29yKXtyZXR1cm4oZGl2aWRlbmQlZGl2aXNvcitkaXZpc29yKSVkaXZpc29yfWZ1bmN0aW9uIGxvY2FsU3RhcnRPZkRhdGUoeSxtLGQpe3JldHVybiB5PDEwMCYmeT49MD9uZXcgRGF0ZSh5KzQwMCxtLGQpLTEyNjIyNzgwOGU1Om5ldyBEYXRlKHksbSxkKS52YWx1ZU9mKCl9ZnVuY3Rpb24gdXRjU3RhcnRPZkRhdGUoeSxtLGQpe3JldHVybiB5PDEwMCYmeT49MD9EYXRlLlVUQyh5KzQwMCxtLGQpLTEyNjIyNzgwOGU1OkRhdGUuVVRDKHksbSxkKX1mdW5jdGlvbiBtYXRjaEVyYUFiYnIoaXNTdHJpY3QsbG9jYWxlKXtyZXR1cm4gbG9jYWxlLmVyYXNBYmJyUmVnZXgoaXNTdHJpY3QpfWZ1bmN0aW9uIGNvbXB1dGVFcmFzUGFyc2UoKXt2YXIgaSxsLGFiYnJQaWVjZXM9W10sbmFtZVBpZWNlcz1bXSxuYXJyb3dQaWVjZXM9W10sbWl4ZWRQaWVjZXM9W10sZXJhcz10aGlzLmVyYXMoKTtmb3IoaT0wLGw9ZXJhcy5sZW5ndGg7aTxsOysraSluYW1lUGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5uYW1lKSksYWJiclBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0uYWJicikpLG5hcnJvd1BpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFycm93KSksbWl4ZWRQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLm5hbWUpKSxtaXhlZFBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0uYWJicikpLG1peGVkUGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5uYXJyb3cpKTt0aGlzLl9lcmFzUmVnZXg9bmV3IFJlZ0V4cChcIl4oXCIrbWl4ZWRQaWVjZXMuam9pbihcInxcIikrXCIpXCIsXCJpXCIpLHRoaXMuX2VyYXNOYW1lUmVnZXg9bmV3IFJlZ0V4cChcIl4oXCIrbmFtZVBpZWNlcy5qb2luKFwifFwiKStcIilcIixcImlcIiksdGhpcy5fZXJhc0FiYnJSZWdleD1uZXcgUmVnRXhwKFwiXihcIithYmJyUGllY2VzLmpvaW4oXCJ8XCIpK1wiKVwiLFwiaVwiKSx0aGlzLl9lcmFzTmFycm93UmVnZXg9bmV3IFJlZ0V4cChcIl4oXCIrbmFycm93UGllY2VzLmpvaW4oXCJ8XCIpK1wiKVwiLFwiaVwiKX1mdW5jdGlvbiBhZGRXZWVrWWVhckZvcm1hdFRva2VuKHRva2VuLGdldHRlcil7YWRkRm9ybWF0VG9rZW4oMCxbdG9rZW4sdG9rZW4ubGVuZ3RoXSwwLGdldHRlcil9ZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXJIZWxwZXIoaW5wdXQsd2Vlayx3ZWVrZGF5LGRvdyxkb3kpe3ZhciB3ZWVrc1RhcmdldDtyZXR1cm4gbnVsbD09aW5wdXQ/d2Vla09mWWVhcih0aGlzLGRvdyxkb3kpLnllYXI6KHdlZWs+KHdlZWtzVGFyZ2V0PXdlZWtzSW5ZZWFyKGlucHV0LGRvdyxkb3kpKSYmKHdlZWs9d2Vla3NUYXJnZXQpLHNldFdlZWtBbGwuY2FsbCh0aGlzLGlucHV0LHdlZWssd2Vla2RheSxkb3csZG95KSl9ZnVuY3Rpb24gc2V0V2Vla0FsbCh3ZWVrWWVhcix3ZWVrLHdlZWtkYXksZG93LGRveSl7dmFyIGRheU9mWWVhckRhdGE9ZGF5T2ZZZWFyRnJvbVdlZWtzKHdlZWtZZWFyLHdlZWssd2Vla2RheSxkb3csZG95KSxkYXRlPWNyZWF0ZVVUQ0RhdGUoZGF5T2ZZZWFyRGF0YS55ZWFyLDAsZGF5T2ZZZWFyRGF0YS5kYXlPZlllYXIpO3JldHVybiB0aGlzLnllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpKSx0aGlzLm1vbnRoKGRhdGUuZ2V0VVRDTW9udGgoKSksdGhpcy5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKSx0aGlzfWFkZEZvcm1hdFRva2VuKFwiTlwiLDAsMCxcImVyYUFiYnJcIiksYWRkRm9ybWF0VG9rZW4oXCJOTlwiLDAsMCxcImVyYUFiYnJcIiksYWRkRm9ybWF0VG9rZW4oXCJOTk5cIiwwLDAsXCJlcmFBYmJyXCIpLGFkZEZvcm1hdFRva2VuKFwiTk5OTlwiLDAsMCxcImVyYU5hbWVcIiksYWRkRm9ybWF0VG9rZW4oXCJOTk5OTlwiLDAsMCxcImVyYU5hcnJvd1wiKSxhZGRGb3JtYXRUb2tlbihcInlcIixbXCJ5XCIsMV0sXCJ5b1wiLFwiZXJhWWVhclwiKSxhZGRGb3JtYXRUb2tlbihcInlcIixbXCJ5eVwiLDJdLDAsXCJlcmFZZWFyXCIpLGFkZEZvcm1hdFRva2VuKFwieVwiLFtcInl5eVwiLDNdLDAsXCJlcmFZZWFyXCIpLGFkZEZvcm1hdFRva2VuKFwieVwiLFtcInl5eXlcIiw0XSwwLFwiZXJhWWVhclwiKSxhZGRSZWdleFRva2VuKFwiTlwiLG1hdGNoRXJhQWJiciksYWRkUmVnZXhUb2tlbihcIk5OXCIsbWF0Y2hFcmFBYmJyKSxhZGRSZWdleFRva2VuKFwiTk5OXCIsbWF0Y2hFcmFBYmJyKSxhZGRSZWdleFRva2VuKFwiTk5OTlwiLChmdW5jdGlvbihpc1N0cmljdCxsb2NhbGUpe3JldHVybiBsb2NhbGUuZXJhc05hbWVSZWdleChpc1N0cmljdCl9KSksYWRkUmVnZXhUb2tlbihcIk5OTk5OXCIsKGZ1bmN0aW9uKGlzU3RyaWN0LGxvY2FsZSl7cmV0dXJuIGxvY2FsZS5lcmFzTmFycm93UmVnZXgoaXNTdHJpY3QpfSkpLGFkZFBhcnNlVG9rZW4oW1wiTlwiLFwiTk5cIixcIk5OTlwiLFwiTk5OTlwiLFwiTk5OTk5cIl0sKGZ1bmN0aW9uKGlucHV0LGFycmF5LGNvbmZpZyx0b2tlbil7dmFyIGVyYT1jb25maWcuX2xvY2FsZS5lcmFzUGFyc2UoaW5wdXQsdG9rZW4sY29uZmlnLl9zdHJpY3QpO2VyYT9nZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lcmE9ZXJhOmdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRFcmE9aW5wdXR9KSksYWRkUmVnZXhUb2tlbihcInlcIixtYXRjaFVuc2lnbmVkKSxhZGRSZWdleFRva2VuKFwieXlcIixtYXRjaFVuc2lnbmVkKSxhZGRSZWdleFRva2VuKFwieXl5XCIsbWF0Y2hVbnNpZ25lZCksYWRkUmVnZXhUb2tlbihcInl5eXlcIixtYXRjaFVuc2lnbmVkKSxhZGRSZWdleFRva2VuKFwieW9cIiwoZnVuY3Rpb24oaXNTdHJpY3QsbG9jYWxlKXtyZXR1cm4gbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4fHxtYXRjaFVuc2lnbmVkfSkpLGFkZFBhcnNlVG9rZW4oW1wieVwiLFwieXlcIixcInl5eVwiLFwieXl5eVwiXSwwKSxhZGRQYXJzZVRva2VuKFtcInlvXCJdLChmdW5jdGlvbihpbnB1dCxhcnJheSxjb25maWcsdG9rZW4pe3ZhciBtYXRjaDtjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCYmKG1hdGNoPWlucHV0Lm1hdGNoKGNvbmZpZy5fbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4KSksY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZT9hcnJheVswXT1jb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKGlucHV0LG1hdGNoKTphcnJheVswXT1wYXJzZUludChpbnB1dCwxMCl9KSksYWRkRm9ybWF0VG9rZW4oMCxbXCJnZ1wiLDJdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2Vla1llYXIoKSUxMDB9KSksYWRkRm9ybWF0VG9rZW4oMCxbXCJHR1wiLDJdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSUxMDB9KSksYWRkV2Vla1llYXJGb3JtYXRUb2tlbihcImdnZ2dcIixcIndlZWtZZWFyXCIpLGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oXCJnZ2dnZ1wiLFwid2Vla1llYXJcIiksYWRkV2Vla1llYXJGb3JtYXRUb2tlbihcIkdHR0dcIixcImlzb1dlZWtZZWFyXCIpLGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oXCJHR0dHR1wiLFwiaXNvV2Vla1llYXJcIiksYWRkVW5pdEFsaWFzKFwid2Vla1llYXJcIixcImdnXCIpLGFkZFVuaXRBbGlhcyhcImlzb1dlZWtZZWFyXCIsXCJHR1wiKSxhZGRVbml0UHJpb3JpdHkoXCJ3ZWVrWWVhclwiLDEpLGFkZFVuaXRQcmlvcml0eShcImlzb1dlZWtZZWFyXCIsMSksYWRkUmVnZXhUb2tlbihcIkdcIixtYXRjaFNpZ25lZCksYWRkUmVnZXhUb2tlbihcImdcIixtYXRjaFNpZ25lZCksYWRkUmVnZXhUb2tlbihcIkdHXCIsbWF0Y2gxdG8yLG1hdGNoMiksYWRkUmVnZXhUb2tlbihcImdnXCIsbWF0Y2gxdG8yLG1hdGNoMiksYWRkUmVnZXhUb2tlbihcIkdHR0dcIixtYXRjaDF0bzQsbWF0Y2g0KSxhZGRSZWdleFRva2VuKFwiZ2dnZ1wiLG1hdGNoMXRvNCxtYXRjaDQpLGFkZFJlZ2V4VG9rZW4oXCJHR0dHR1wiLG1hdGNoMXRvNixtYXRjaDYpLGFkZFJlZ2V4VG9rZW4oXCJnZ2dnZ1wiLG1hdGNoMXRvNixtYXRjaDYpLGFkZFdlZWtQYXJzZVRva2VuKFtcImdnZ2dcIixcImdnZ2dnXCIsXCJHR0dHXCIsXCJHR0dHR1wiXSwoZnVuY3Rpb24oaW5wdXQsd2Vlayxjb25maWcsdG9rZW4pe3dlZWtbdG9rZW4uc3Vic3RyKDAsMildPXRvSW50KGlucHV0KX0pKSxhZGRXZWVrUGFyc2VUb2tlbihbXCJnZ1wiLFwiR0dcIl0sKGZ1bmN0aW9uKGlucHV0LHdlZWssY29uZmlnLHRva2VuKXt3ZWVrW3Rva2VuXT1ob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCl9KSksYWRkRm9ybWF0VG9rZW4oXCJRXCIsMCxcIlFvXCIsXCJxdWFydGVyXCIpLGFkZFVuaXRBbGlhcyhcInF1YXJ0ZXJcIixcIlFcIiksYWRkVW5pdFByaW9yaXR5KFwicXVhcnRlclwiLDcpLGFkZFJlZ2V4VG9rZW4oXCJRXCIsbWF0Y2gxKSxhZGRQYXJzZVRva2VuKFwiUVwiLChmdW5jdGlvbihpbnB1dCxhcnJheSl7YXJyYXlbMV09MyoodG9JbnQoaW5wdXQpLTEpfSkpLGFkZEZvcm1hdFRva2VuKFwiRFwiLFtcIkREXCIsMl0sXCJEb1wiLFwiZGF0ZVwiKSxhZGRVbml0QWxpYXMoXCJkYXRlXCIsXCJEXCIpLGFkZFVuaXRQcmlvcml0eShcImRhdGVcIiw5KSxhZGRSZWdleFRva2VuKFwiRFwiLG1hdGNoMXRvMiksYWRkUmVnZXhUb2tlbihcIkREXCIsbWF0Y2gxdG8yLG1hdGNoMiksYWRkUmVnZXhUb2tlbihcIkRvXCIsKGZ1bmN0aW9uKGlzU3RyaWN0LGxvY2FsZSl7cmV0dXJuIGlzU3RyaWN0P2xvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZXx8bG9jYWxlLl9vcmRpbmFsUGFyc2U6bG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudH0pKSxhZGRQYXJzZVRva2VuKFtcIkRcIixcIkREXCJdLDIpLGFkZFBhcnNlVG9rZW4oXCJEb1wiLChmdW5jdGlvbihpbnB1dCxhcnJheSl7YXJyYXlbMl09dG9JbnQoaW5wdXQubWF0Y2gobWF0Y2gxdG8yKVswXSl9KSk7dmFyIGdldFNldERheU9mTW9udGg9bWFrZUdldFNldChcIkRhdGVcIiwhMCk7YWRkRm9ybWF0VG9rZW4oXCJERERcIixbXCJEREREXCIsM10sXCJERERvXCIsXCJkYXlPZlllYXJcIiksYWRkVW5pdEFsaWFzKFwiZGF5T2ZZZWFyXCIsXCJERERcIiksYWRkVW5pdFByaW9yaXR5KFwiZGF5T2ZZZWFyXCIsNCksYWRkUmVnZXhUb2tlbihcIkRERFwiLG1hdGNoMXRvMyksYWRkUmVnZXhUb2tlbihcIkRERERcIixtYXRjaDMpLGFkZFBhcnNlVG9rZW4oW1wiREREXCIsXCJEREREXCJdLChmdW5jdGlvbihpbnB1dCxhcnJheSxjb25maWcpe2NvbmZpZy5fZGF5T2ZZZWFyPXRvSW50KGlucHV0KX0pKSxhZGRGb3JtYXRUb2tlbihcIm1cIixbXCJtbVwiLDJdLDAsXCJtaW51dGVcIiksYWRkVW5pdEFsaWFzKFwibWludXRlXCIsXCJtXCIpLGFkZFVuaXRQcmlvcml0eShcIm1pbnV0ZVwiLDE0KSxhZGRSZWdleFRva2VuKFwibVwiLG1hdGNoMXRvMiksYWRkUmVnZXhUb2tlbihcIm1tXCIsbWF0Y2gxdG8yLG1hdGNoMiksYWRkUGFyc2VUb2tlbihbXCJtXCIsXCJtbVwiXSw0KTt2YXIgZ2V0U2V0TWludXRlPW1ha2VHZXRTZXQoXCJNaW51dGVzXCIsITEpO2FkZEZvcm1hdFRva2VuKFwic1wiLFtcInNzXCIsMl0sMCxcInNlY29uZFwiKSxhZGRVbml0QWxpYXMoXCJzZWNvbmRcIixcInNcIiksYWRkVW5pdFByaW9yaXR5KFwic2Vjb25kXCIsMTUpLGFkZFJlZ2V4VG9rZW4oXCJzXCIsbWF0Y2gxdG8yKSxhZGRSZWdleFRva2VuKFwic3NcIixtYXRjaDF0bzIsbWF0Y2gyKSxhZGRQYXJzZVRva2VuKFtcInNcIixcInNzXCJdLDUpO3ZhciB0b2tlbixnZXRTZXRNaWxsaXNlY29uZCxnZXRTZXRTZWNvbmQ9bWFrZUdldFNldChcIlNlY29uZHNcIiwhMSk7Zm9yKGFkZEZvcm1hdFRva2VuKFwiU1wiLDAsMCwoZnVuY3Rpb24oKXtyZXR1cm5+fih0aGlzLm1pbGxpc2Vjb25kKCkvMTAwKX0pKSxhZGRGb3JtYXRUb2tlbigwLFtcIlNTXCIsMl0sMCwoZnVuY3Rpb24oKXtyZXR1cm5+fih0aGlzLm1pbGxpc2Vjb25kKCkvMTApfSkpLGFkZEZvcm1hdFRva2VuKDAsW1wiU1NTXCIsM10sMCxcIm1pbGxpc2Vjb25kXCIpLGFkZEZvcm1hdFRva2VuKDAsW1wiU1NTU1wiLDRdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDEwKnRoaXMubWlsbGlzZWNvbmQoKX0pKSxhZGRGb3JtYXRUb2tlbigwLFtcIlNTU1NTXCIsNV0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gMTAwKnRoaXMubWlsbGlzZWNvbmQoKX0pKSxhZGRGb3JtYXRUb2tlbigwLFtcIlNTU1NTU1wiLDZdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDFlMyp0aGlzLm1pbGxpc2Vjb25kKCl9KSksYWRkRm9ybWF0VG9rZW4oMCxbXCJTU1NTU1NTXCIsN10sMCwoZnVuY3Rpb24oKXtyZXR1cm4gMWU0KnRoaXMubWlsbGlzZWNvbmQoKX0pKSxhZGRGb3JtYXRUb2tlbigwLFtcIlNTU1NTU1NTXCIsOF0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gMWU1KnRoaXMubWlsbGlzZWNvbmQoKX0pKSxhZGRGb3JtYXRUb2tlbigwLFtcIlNTU1NTU1NTU1wiLDldLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDFlNip0aGlzLm1pbGxpc2Vjb25kKCl9KSksYWRkVW5pdEFsaWFzKFwibWlsbGlzZWNvbmRcIixcIm1zXCIpLGFkZFVuaXRQcmlvcml0eShcIm1pbGxpc2Vjb25kXCIsMTYpLGFkZFJlZ2V4VG9rZW4oXCJTXCIsbWF0Y2gxdG8zLG1hdGNoMSksYWRkUmVnZXhUb2tlbihcIlNTXCIsbWF0Y2gxdG8zLG1hdGNoMiksYWRkUmVnZXhUb2tlbihcIlNTU1wiLG1hdGNoMXRvMyxtYXRjaDMpLHRva2VuPVwiU1NTU1wiO3Rva2VuLmxlbmd0aDw9OTt0b2tlbis9XCJTXCIpYWRkUmVnZXhUb2tlbih0b2tlbixtYXRjaFVuc2lnbmVkKTtmdW5jdGlvbiBwYXJzZU1zKGlucHV0LGFycmF5KXthcnJheVs2XT10b0ludCgxZTMqKFwiMC5cIitpbnB1dCkpfWZvcih0b2tlbj1cIlNcIjt0b2tlbi5sZW5ndGg8PTk7dG9rZW4rPVwiU1wiKWFkZFBhcnNlVG9rZW4odG9rZW4scGFyc2VNcyk7Z2V0U2V0TWlsbGlzZWNvbmQ9bWFrZUdldFNldChcIk1pbGxpc2Vjb25kc1wiLCExKSxhZGRGb3JtYXRUb2tlbihcInpcIiwwLDAsXCJ6b25lQWJiclwiKSxhZGRGb3JtYXRUb2tlbihcInp6XCIsMCwwLFwiem9uZU5hbWVcIik7dmFyIHByb3RvPU1vbWVudC5wcm90b3R5cGU7ZnVuY3Rpb24gcHJlUGFyc2VQb3N0Rm9ybWF0KHN0cmluZyl7cmV0dXJuIHN0cmluZ31wcm90by5hZGQ9YWRkLHByb3RvLmNhbGVuZGFyPWZ1bmN0aW9uKHRpbWUsZm9ybWF0cyl7MT09PWFyZ3VtZW50cy5sZW5ndGgmJihhcmd1bWVudHNbMF0/aXNNb21lbnRJbnB1dChhcmd1bWVudHNbMF0pPyh0aW1lPWFyZ3VtZW50c1swXSxmb3JtYXRzPXZvaWQgMCk6aXNDYWxlbmRhclNwZWMoYXJndW1lbnRzWzBdKSYmKGZvcm1hdHM9YXJndW1lbnRzWzBdLHRpbWU9dm9pZCAwKToodGltZT12b2lkIDAsZm9ybWF0cz12b2lkIDApKTt2YXIgbm93PXRpbWV8fGNyZWF0ZUxvY2FsKCksc29kPWNsb25lV2l0aE9mZnNldChub3csdGhpcykuc3RhcnRPZihcImRheVwiKSxmb3JtYXQ9aG9va3MuY2FsZW5kYXJGb3JtYXQodGhpcyxzb2QpfHxcInNhbWVFbHNlXCIsb3V0cHV0PWZvcm1hdHMmJihpc0Z1bmN0aW9uKGZvcm1hdHNbZm9ybWF0XSk/Zm9ybWF0c1tmb3JtYXRdLmNhbGwodGhpcyxub3cpOmZvcm1hdHNbZm9ybWF0XSk7cmV0dXJuIHRoaXMuZm9ybWF0KG91dHB1dHx8dGhpcy5sb2NhbGVEYXRhKCkuY2FsZW5kYXIoZm9ybWF0LHRoaXMsY3JlYXRlTG9jYWwobm93KSkpfSxwcm90by5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgTW9tZW50KHRoaXMpfSxwcm90by5kaWZmPWZ1bmN0aW9uKGlucHV0LHVuaXRzLGFzRmxvYXQpe3ZhciB0aGF0LHpvbmVEZWx0YSxvdXRwdXQ7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBOYU47aWYoISh0aGF0PWNsb25lV2l0aE9mZnNldChpbnB1dCx0aGlzKSkuaXNWYWxpZCgpKXJldHVybiBOYU47c3dpdGNoKHpvbmVEZWx0YT02ZTQqKHRoYXQudXRjT2Zmc2V0KCktdGhpcy51dGNPZmZzZXQoKSksdW5pdHM9bm9ybWFsaXplVW5pdHModW5pdHMpKXtjYXNlXCJ5ZWFyXCI6b3V0cHV0PW1vbnRoRGlmZih0aGlzLHRoYXQpLzEyO2JyZWFrO2Nhc2VcIm1vbnRoXCI6b3V0cHV0PW1vbnRoRGlmZih0aGlzLHRoYXQpO2JyZWFrO2Nhc2VcInF1YXJ0ZXJcIjpvdXRwdXQ9bW9udGhEaWZmKHRoaXMsdGhhdCkvMzticmVhaztjYXNlXCJzZWNvbmRcIjpvdXRwdXQ9KHRoaXMtdGhhdCkvMWUzO2JyZWFrO2Nhc2VcIm1pbnV0ZVwiOm91dHB1dD0odGhpcy10aGF0KS82ZTQ7YnJlYWs7Y2FzZVwiaG91clwiOm91dHB1dD0odGhpcy10aGF0KS8zNmU1O2JyZWFrO2Nhc2VcImRheVwiOm91dHB1dD0odGhpcy10aGF0LXpvbmVEZWx0YSkvODY0ZTU7YnJlYWs7Y2FzZVwid2Vla1wiOm91dHB1dD0odGhpcy10aGF0LXpvbmVEZWx0YSkvNjA0OGU1O2JyZWFrO2RlZmF1bHQ6b3V0cHV0PXRoaXMtdGhhdH1yZXR1cm4gYXNGbG9hdD9vdXRwdXQ6YWJzRmxvb3Iob3V0cHV0KX0scHJvdG8uZW5kT2Y9ZnVuY3Rpb24odW5pdHMpe3ZhciB0aW1lLHN0YXJ0T2ZEYXRlO2lmKHZvaWQgMD09PSh1bml0cz1ub3JtYWxpemVVbml0cyh1bml0cykpfHxcIm1pbGxpc2Vjb25kXCI9PT11bml0c3x8IXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzO3N3aXRjaChzdGFydE9mRGF0ZT10aGlzLl9pc1VUQz91dGNTdGFydE9mRGF0ZTpsb2NhbFN0YXJ0T2ZEYXRlLHVuaXRzKXtjYXNlXCJ5ZWFyXCI6dGltZT1zdGFydE9mRGF0ZSh0aGlzLnllYXIoKSsxLDAsMSktMTticmVhaztjYXNlXCJxdWFydGVyXCI6dGltZT1zdGFydE9mRGF0ZSh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCktdGhpcy5tb250aCgpJTMrMywxKS0xO2JyZWFrO2Nhc2VcIm1vbnRoXCI6dGltZT1zdGFydE9mRGF0ZSh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCkrMSwxKS0xO2JyZWFrO2Nhc2VcIndlZWtcIjp0aW1lPXN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS10aGlzLndlZWtkYXkoKSs3KS0xO2JyZWFrO2Nhc2VcImlzb1dlZWtcIjp0aW1lPXN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkrNyktMTticmVhaztjYXNlXCJkYXlcIjpjYXNlXCJkYXRlXCI6dGltZT1zdGFydE9mRGF0ZSh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCkrMSktMTticmVhaztjYXNlXCJob3VyXCI6dGltZT10aGlzLl9kLnZhbHVlT2YoKSx0aW1lKz0zNmU1LW1vZCQxKHRpbWUrKHRoaXMuX2lzVVRDPzA6NmU0KnRoaXMudXRjT2Zmc2V0KCkpLDM2ZTUpLTE7YnJlYWs7Y2FzZVwibWludXRlXCI6dGltZT10aGlzLl9kLnZhbHVlT2YoKSx0aW1lKz02ZTQtbW9kJDEodGltZSw2ZTQpLTE7YnJlYWs7Y2FzZVwic2Vjb25kXCI6dGltZT10aGlzLl9kLnZhbHVlT2YoKSx0aW1lKz0xZTMtbW9kJDEodGltZSwxZTMpLTF9cmV0dXJuIHRoaXMuX2Quc2V0VGltZSh0aW1lKSxob29rcy51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpc30scHJvdG8uZm9ybWF0PWZ1bmN0aW9uKGlucHV0U3RyaW5nKXtpbnB1dFN0cmluZ3x8KGlucHV0U3RyaW5nPXRoaXMuaXNVdGMoKT9ob29rcy5kZWZhdWx0Rm9ybWF0VXRjOmhvb2tzLmRlZmF1bHRGb3JtYXQpO3ZhciBvdXRwdXQ9Zm9ybWF0TW9tZW50KHRoaXMsaW5wdXRTdHJpbmcpO3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5wb3N0Zm9ybWF0KG91dHB1dCl9LHByb3RvLmZyb209ZnVuY3Rpb24odGltZSx3aXRob3V0U3VmZml4KXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJihpc01vbWVudCh0aW1lKSYmdGltZS5pc1ZhbGlkKCl8fGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSk/Y3JlYXRlRHVyYXRpb24oe3RvOnRoaXMsZnJvbTp0aW1lfSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCF3aXRob3V0U3VmZml4KTp0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfSxwcm90by5mcm9tTm93PWZ1bmN0aW9uKHdpdGhvdXRTdWZmaXgpe3JldHVybiB0aGlzLmZyb20oY3JlYXRlTG9jYWwoKSx3aXRob3V0U3VmZml4KX0scHJvdG8udG89ZnVuY3Rpb24odGltZSx3aXRob3V0U3VmZml4KXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJihpc01vbWVudCh0aW1lKSYmdGltZS5pc1ZhbGlkKCl8fGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSk/Y3JlYXRlRHVyYXRpb24oe2Zyb206dGhpcyx0bzp0aW1lfSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCF3aXRob3V0U3VmZml4KTp0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfSxwcm90by50b05vdz1mdW5jdGlvbih3aXRob3V0U3VmZml4KXtyZXR1cm4gdGhpcy50byhjcmVhdGVMb2NhbCgpLHdpdGhvdXRTdWZmaXgpfSxwcm90by5nZXQ9ZnVuY3Rpb24odW5pdHMpe3JldHVybiBpc0Z1bmN0aW9uKHRoaXNbdW5pdHM9bm9ybWFsaXplVW5pdHModW5pdHMpXSk/dGhpc1t1bml0c10oKTp0aGlzfSxwcm90by5pbnZhbGlkQXQ9ZnVuY3Rpb24oKXtyZXR1cm4gZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpLm92ZXJmbG93fSxwcm90by5pc0FmdGVyPWZ1bmN0aW9uKGlucHV0LHVuaXRzKXt2YXIgbG9jYWxJbnB1dD1pc01vbWVudChpbnB1dCk/aW5wdXQ6Y3JlYXRlTG9jYWwoaW5wdXQpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhbG9jYWxJbnB1dC5pc1ZhbGlkKCkpJiYoXCJtaWxsaXNlY29uZFwiPT09KHVuaXRzPW5vcm1hbGl6ZVVuaXRzKHVuaXRzKXx8XCJtaWxsaXNlY29uZFwiKT90aGlzLnZhbHVlT2YoKT5sb2NhbElucHV0LnZhbHVlT2YoKTpsb2NhbElucHV0LnZhbHVlT2YoKTx0aGlzLmNsb25lKCkuc3RhcnRPZih1bml0cykudmFsdWVPZigpKX0scHJvdG8uaXNCZWZvcmU9ZnVuY3Rpb24oaW5wdXQsdW5pdHMpe3ZhciBsb2NhbElucHV0PWlzTW9tZW50KGlucHV0KT9pbnB1dDpjcmVhdGVMb2NhbChpbnB1dCk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFsb2NhbElucHV0LmlzVmFsaWQoKSkmJihcIm1pbGxpc2Vjb25kXCI9PT0odW5pdHM9bm9ybWFsaXplVW5pdHModW5pdHMpfHxcIm1pbGxpc2Vjb25kXCIpP3RoaXMudmFsdWVPZigpPGxvY2FsSW5wdXQudmFsdWVPZigpOnRoaXMuY2xvbmUoKS5lbmRPZih1bml0cykudmFsdWVPZigpPGxvY2FsSW5wdXQudmFsdWVPZigpKX0scHJvdG8uaXNCZXR3ZWVuPWZ1bmN0aW9uKGZyb20sdG8sdW5pdHMsaW5jbHVzaXZpdHkpe3ZhciBsb2NhbEZyb209aXNNb21lbnQoZnJvbSk/ZnJvbTpjcmVhdGVMb2NhbChmcm9tKSxsb2NhbFRvPWlzTW9tZW50KHRvKT90bzpjcmVhdGVMb2NhbCh0byk7cmV0dXJuISEodGhpcy5pc1ZhbGlkKCkmJmxvY2FsRnJvbS5pc1ZhbGlkKCkmJmxvY2FsVG8uaXNWYWxpZCgpKSYmKChcIihcIj09PShpbmNsdXNpdml0eT1pbmNsdXNpdml0eXx8XCIoKVwiKVswXT90aGlzLmlzQWZ0ZXIobG9jYWxGcm9tLHVuaXRzKTohdGhpcy5pc0JlZm9yZShsb2NhbEZyb20sdW5pdHMpKSYmKFwiKVwiPT09aW5jbHVzaXZpdHlbMV0/dGhpcy5pc0JlZm9yZShsb2NhbFRvLHVuaXRzKTohdGhpcy5pc0FmdGVyKGxvY2FsVG8sdW5pdHMpKSl9LHByb3RvLmlzU2FtZT1mdW5jdGlvbihpbnB1dCx1bml0cyl7dmFyIGlucHV0TXMsbG9jYWxJbnB1dD1pc01vbWVudChpbnB1dCk/aW5wdXQ6Y3JlYXRlTG9jYWwoaW5wdXQpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhbG9jYWxJbnB1dC5pc1ZhbGlkKCkpJiYoXCJtaWxsaXNlY29uZFwiPT09KHVuaXRzPW5vcm1hbGl6ZVVuaXRzKHVuaXRzKXx8XCJtaWxsaXNlY29uZFwiKT90aGlzLnZhbHVlT2YoKT09PWxvY2FsSW5wdXQudmFsdWVPZigpOihpbnB1dE1zPWxvY2FsSW5wdXQudmFsdWVPZigpLHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCk8PWlucHV0TXMmJmlucHV0TXM8PXRoaXMuY2xvbmUoKS5lbmRPZih1bml0cykudmFsdWVPZigpKSl9LHByb3RvLmlzU2FtZU9yQWZ0ZXI9ZnVuY3Rpb24oaW5wdXQsdW5pdHMpe3JldHVybiB0aGlzLmlzU2FtZShpbnB1dCx1bml0cyl8fHRoaXMuaXNBZnRlcihpbnB1dCx1bml0cyl9LHByb3RvLmlzU2FtZU9yQmVmb3JlPWZ1bmN0aW9uKGlucHV0LHVuaXRzKXtyZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsdW5pdHMpfHx0aGlzLmlzQmVmb3JlKGlucHV0LHVuaXRzKX0scHJvdG8uaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiBpc1ZhbGlkKHRoaXMpfSxwcm90by5sYW5nPWxhbmcscHJvdG8ubG9jYWxlPWxvY2FsZSxwcm90by5sb2NhbGVEYXRhPWxvY2FsZURhdGEscHJvdG8ubWF4PXByb3RvdHlwZU1heCxwcm90by5taW49cHJvdG90eXBlTWluLHByb3RvLnBhcnNpbmdGbGFncz1mdW5jdGlvbigpe3JldHVybiBleHRlbmQoe30sZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpKX0scHJvdG8uc2V0PWZ1bmN0aW9uKHVuaXRzLHZhbHVlKXtpZihcIm9iamVjdFwiPT10eXBlb2YgdW5pdHMpe3ZhciBpLHByaW9yaXRpemVkPWZ1bmN0aW9uKHVuaXRzT2JqKXt2YXIgdSx1bml0cz1bXTtmb3IodSBpbiB1bml0c09iailoYXNPd25Qcm9wKHVuaXRzT2JqLHUpJiZ1bml0cy5wdXNoKHt1bml0OnUscHJpb3JpdHk6cHJpb3JpdGllc1t1XX0pO3JldHVybiB1bml0cy5zb3J0KChmdW5jdGlvbihhLGIpe3JldHVybiBhLnByaW9yaXR5LWIucHJpb3JpdHl9KSksdW5pdHN9KHVuaXRzPW5vcm1hbGl6ZU9iamVjdFVuaXRzKHVuaXRzKSk7Zm9yKGk9MDtpPHByaW9yaXRpemVkLmxlbmd0aDtpKyspdGhpc1twcmlvcml0aXplZFtpXS51bml0XSh1bml0c1twcmlvcml0aXplZFtpXS51bml0XSl9ZWxzZSBpZihpc0Z1bmN0aW9uKHRoaXNbdW5pdHM9bm9ybWFsaXplVW5pdHModW5pdHMpXSkpcmV0dXJuIHRoaXNbdW5pdHNdKHZhbHVlKTtyZXR1cm4gdGhpc30scHJvdG8uc3RhcnRPZj1mdW5jdGlvbih1bml0cyl7dmFyIHRpbWUsc3RhcnRPZkRhdGU7aWYodm9pZCAwPT09KHVuaXRzPW5vcm1hbGl6ZVVuaXRzKHVuaXRzKSl8fFwibWlsbGlzZWNvbmRcIj09PXVuaXRzfHwhdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXM7c3dpdGNoKHN0YXJ0T2ZEYXRlPXRoaXMuX2lzVVRDP3V0Y1N0YXJ0T2ZEYXRlOmxvY2FsU3RhcnRPZkRhdGUsdW5pdHMpe2Nhc2VcInllYXJcIjp0aW1lPXN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLDAsMSk7YnJlYWs7Y2FzZVwicXVhcnRlclwiOnRpbWU9c3RhcnRPZkRhdGUodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLXRoaXMubW9udGgoKSUzLDEpO2JyZWFrO2Nhc2VcIm1vbnRoXCI6dGltZT1zdGFydE9mRGF0ZSh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksMSk7YnJlYWs7Y2FzZVwid2Vla1wiOnRpbWU9c3RhcnRPZkRhdGUodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLXRoaXMud2Vla2RheSgpKTticmVhaztjYXNlXCJpc29XZWVrXCI6dGltZT1zdGFydE9mRGF0ZSh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktKHRoaXMuaXNvV2Vla2RheSgpLTEpKTticmVhaztjYXNlXCJkYXlcIjpjYXNlXCJkYXRlXCI6dGltZT1zdGFydE9mRGF0ZSh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCkpO2JyZWFrO2Nhc2VcImhvdXJcIjp0aW1lPXRoaXMuX2QudmFsdWVPZigpLHRpbWUtPW1vZCQxKHRpbWUrKHRoaXMuX2lzVVRDPzA6NmU0KnRoaXMudXRjT2Zmc2V0KCkpLDM2ZTUpO2JyZWFrO2Nhc2VcIm1pbnV0ZVwiOnRpbWU9dGhpcy5fZC52YWx1ZU9mKCksdGltZS09bW9kJDEodGltZSw2ZTQpO2JyZWFrO2Nhc2VcInNlY29uZFwiOnRpbWU9dGhpcy5fZC52YWx1ZU9mKCksdGltZS09bW9kJDEodGltZSwxZTMpfXJldHVybiB0aGlzLl9kLnNldFRpbWUodGltZSksaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXN9LHByb3RvLnN1YnRyYWN0PXN1YnRyYWN0LHByb3RvLnRvQXJyYXk9ZnVuY3Rpb24oKXt2YXIgbT10aGlzO3JldHVyblttLnllYXIoKSxtLm1vbnRoKCksbS5kYXRlKCksbS5ob3VyKCksbS5taW51dGUoKSxtLnNlY29uZCgpLG0ubWlsbGlzZWNvbmQoKV19LHByb3RvLnRvT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIG09dGhpcztyZXR1cm57eWVhcnM6bS55ZWFyKCksbW9udGhzOm0ubW9udGgoKSxkYXRlOm0uZGF0ZSgpLGhvdXJzOm0uaG91cnMoKSxtaW51dGVzOm0ubWludXRlcygpLHNlY29uZHM6bS5zZWNvbmRzKCksbWlsbGlzZWNvbmRzOm0ubWlsbGlzZWNvbmRzKCl9fSxwcm90by50b0RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpfSxwcm90by50b0lTT1N0cmluZz1mdW5jdGlvbihrZWVwT2Zmc2V0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGw7dmFyIHV0Yz0hMCE9PWtlZXBPZmZzZXQsbT11dGM/dGhpcy5jbG9uZSgpLnV0YygpOnRoaXM7cmV0dXJuIG0ueWVhcigpPDB8fG0ueWVhcigpPjk5OTk/Zm9ybWF0TW9tZW50KG0sdXRjP1wiWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdXCI6XCJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaXCIpOmlzRnVuY3Rpb24oRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpP3V0Yz90aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk6bmV3IERhdGUodGhpcy52YWx1ZU9mKCkrNjAqdGhpcy51dGNPZmZzZXQoKSoxZTMpLnRvSVNPU3RyaW5nKCkucmVwbGFjZShcIlpcIixmb3JtYXRNb21lbnQobSxcIlpcIikpOmZvcm1hdE1vbWVudChtLHV0Yz9cIllZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl1cIjpcIllZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaXCIpfSxwcm90by5pbnNwZWN0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVyblwibW9tZW50LmludmFsaWQoLyogXCIrdGhpcy5faStcIiAqLylcIjt2YXIgcHJlZml4LHllYXIsc3VmZml4LGZ1bmM9XCJtb21lbnRcIix6b25lPVwiXCI7cmV0dXJuIHRoaXMuaXNMb2NhbCgpfHwoZnVuYz0wPT09dGhpcy51dGNPZmZzZXQoKT9cIm1vbWVudC51dGNcIjpcIm1vbWVudC5wYXJzZVpvbmVcIix6b25lPVwiWlwiKSxwcmVmaXg9XCJbXCIrZnVuYysnKFwiXScseWVhcj0wPD10aGlzLnllYXIoKSYmdGhpcy55ZWFyKCk8PTk5OTk/XCJZWVlZXCI6XCJZWVlZWVlcIixzdWZmaXg9em9uZSsnW1wiKV0nLHRoaXMuZm9ybWF0KHByZWZpeCt5ZWFyK1wiLU1NLUREW1RdSEg6bW06c3MuU1NTXCIrc3VmZml4KX0sXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9U3ltYm9sLmZvciYmKHByb3RvW1N5bWJvbC5mb3IoXCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbVwiKV09ZnVuY3Rpb24oKXtyZXR1cm5cIk1vbWVudDxcIit0aGlzLmZvcm1hdCgpK1wiPlwifSkscHJvdG8udG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMudG9JU09TdHJpbmcoKTpudWxsfSxwcm90by50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkubG9jYWxlKFwiZW5cIikuZm9ybWF0KFwiZGRkIE1NTSBERCBZWVlZIEhIOm1tOnNzIFtHTVRdWlpcIil9LHByb3RvLnVuaXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxwcm90by52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QudmFsdWVPZigpLTZlNCoodGhpcy5fb2Zmc2V0fHwwKX0scHJvdG8uY3JlYXRpb25EYXRhPWZ1bmN0aW9uKCl7cmV0dXJue2lucHV0OnRoaXMuX2ksZm9ybWF0OnRoaXMuX2YsbG9jYWxlOnRoaXMuX2xvY2FsZSxpc1VUQzp0aGlzLl9pc1VUQyxzdHJpY3Q6dGhpcy5fc3RyaWN0fX0scHJvdG8uZXJhTmFtZT1mdW5jdGlvbigpe3ZhciBpLGwsdmFsLGVyYXM9dGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO2ZvcihpPTAsbD1lcmFzLmxlbmd0aDtpPGw7KytpKXtpZih2YWw9dGhpcy5jbG9uZSgpLnN0YXJ0T2YoXCJkYXlcIikudmFsdWVPZigpLGVyYXNbaV0uc2luY2U8PXZhbCYmdmFsPD1lcmFzW2ldLnVudGlsKXJldHVybiBlcmFzW2ldLm5hbWU7aWYoZXJhc1tpXS51bnRpbDw9dmFsJiZ2YWw8PWVyYXNbaV0uc2luY2UpcmV0dXJuIGVyYXNbaV0ubmFtZX1yZXR1cm5cIlwifSxwcm90by5lcmFOYXJyb3c9ZnVuY3Rpb24oKXt2YXIgaSxsLHZhbCxlcmFzPXRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtmb3IoaT0wLGw9ZXJhcy5sZW5ndGg7aTxsOysraSl7aWYodmFsPXRoaXMuY2xvbmUoKS5zdGFydE9mKFwiZGF5XCIpLnZhbHVlT2YoKSxlcmFzW2ldLnNpbmNlPD12YWwmJnZhbDw9ZXJhc1tpXS51bnRpbClyZXR1cm4gZXJhc1tpXS5uYXJyb3c7aWYoZXJhc1tpXS51bnRpbDw9dmFsJiZ2YWw8PWVyYXNbaV0uc2luY2UpcmV0dXJuIGVyYXNbaV0ubmFycm93fXJldHVyblwiXCJ9LHByb3RvLmVyYUFiYnI9ZnVuY3Rpb24oKXt2YXIgaSxsLHZhbCxlcmFzPXRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtmb3IoaT0wLGw9ZXJhcy5sZW5ndGg7aTxsOysraSl7aWYodmFsPXRoaXMuY2xvbmUoKS5zdGFydE9mKFwiZGF5XCIpLnZhbHVlT2YoKSxlcmFzW2ldLnNpbmNlPD12YWwmJnZhbDw9ZXJhc1tpXS51bnRpbClyZXR1cm4gZXJhc1tpXS5hYmJyO2lmKGVyYXNbaV0udW50aWw8PXZhbCYmdmFsPD1lcmFzW2ldLnNpbmNlKXJldHVybiBlcmFzW2ldLmFiYnJ9cmV0dXJuXCJcIn0scHJvdG8uZXJhWWVhcj1mdW5jdGlvbigpe3ZhciBpLGwsZGlyLHZhbCxlcmFzPXRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtmb3IoaT0wLGw9ZXJhcy5sZW5ndGg7aTxsOysraSlpZihkaXI9ZXJhc1tpXS5zaW5jZTw9ZXJhc1tpXS51bnRpbD8xOi0xLHZhbD10aGlzLmNsb25lKCkuc3RhcnRPZihcImRheVwiKS52YWx1ZU9mKCksZXJhc1tpXS5zaW5jZTw9dmFsJiZ2YWw8PWVyYXNbaV0udW50aWx8fGVyYXNbaV0udW50aWw8PXZhbCYmdmFsPD1lcmFzW2ldLnNpbmNlKXJldHVybih0aGlzLnllYXIoKS1ob29rcyhlcmFzW2ldLnNpbmNlKS55ZWFyKCkpKmRpcitlcmFzW2ldLm9mZnNldDtyZXR1cm4gdGhpcy55ZWFyKCl9LHByb3RvLnllYXI9Z2V0U2V0WWVhcixwcm90by5pc0xlYXBZZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIGlzTGVhcFllYXIodGhpcy55ZWFyKCkpfSxwcm90by53ZWVrWWVhcj1mdW5jdGlvbihpbnB1dCl7cmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwodGhpcyxpbnB1dCx0aGlzLndlZWsoKSx0aGlzLndlZWtkYXkoKSx0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95KX0scHJvdG8uaXNvV2Vla1llYXI9ZnVuY3Rpb24oaW5wdXQpe3JldHVybiBnZXRTZXRXZWVrWWVhckhlbHBlci5jYWxsKHRoaXMsaW5wdXQsdGhpcy5pc29XZWVrKCksdGhpcy5pc29XZWVrZGF5KCksMSw0KX0scHJvdG8ucXVhcnRlcj1wcm90by5xdWFydGVycz1mdW5jdGlvbihpbnB1dCl7cmV0dXJuIG51bGw9PWlucHV0P01hdGguY2VpbCgodGhpcy5tb250aCgpKzEpLzMpOnRoaXMubW9udGgoMyooaW5wdXQtMSkrdGhpcy5tb250aCgpJTMpfSxwcm90by5tb250aD1nZXRTZXRNb250aCxwcm90by5kYXlzSW5Nb250aD1mdW5jdGlvbigpe3JldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCkpfSxwcm90by53ZWVrPXByb3RvLndlZWtzPWZ1bmN0aW9uKGlucHV0KXt2YXIgd2Vlaz10aGlzLmxvY2FsZURhdGEoKS53ZWVrKHRoaXMpO3JldHVybiBudWxsPT1pbnB1dD93ZWVrOnRoaXMuYWRkKDcqKGlucHV0LXdlZWspLFwiZFwiKX0scHJvdG8uaXNvV2Vlaz1wcm90by5pc29XZWVrcz1mdW5jdGlvbihpbnB1dCl7dmFyIHdlZWs9d2Vla09mWWVhcih0aGlzLDEsNCkud2VlaztyZXR1cm4gbnVsbD09aW5wdXQ/d2Vlazp0aGlzLmFkZCg3KihpbnB1dC13ZWVrKSxcImRcIil9LHByb3RvLndlZWtzSW5ZZWFyPWZ1bmN0aW9uKCl7dmFyIHdlZWtJbmZvPXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO3JldHVybiB3ZWVrc0luWWVhcih0aGlzLnllYXIoKSx3ZWVrSW5mby5kb3csd2Vla0luZm8uZG95KX0scHJvdG8ud2Vla3NJbldlZWtZZWFyPWZ1bmN0aW9uKCl7dmFyIHdlZWtJbmZvPXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO3JldHVybiB3ZWVrc0luWWVhcih0aGlzLndlZWtZZWFyKCksd2Vla0luZm8uZG93LHdlZWtJbmZvLmRveSl9LHByb3RvLmlzb1dlZWtzSW5ZZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLDEsNCl9LHByb3RvLmlzb1dlZWtzSW5JU09XZWVrWWVhcj1mdW5jdGlvbigpe3JldHVybiB3ZWVrc0luWWVhcih0aGlzLmlzb1dlZWtZZWFyKCksMSw0KX0scHJvdG8uZGF0ZT1nZXRTZXREYXlPZk1vbnRoLHByb3RvLmRheT1wcm90by5kYXlzPWZ1bmN0aW9uKGlucHV0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPWlucHV0P3RoaXM6TmFOO3ZhciBkYXk9dGhpcy5faXNVVEM/dGhpcy5fZC5nZXRVVENEYXkoKTp0aGlzLl9kLmdldERheSgpO3JldHVybiBudWxsIT1pbnB1dD8oaW5wdXQ9ZnVuY3Rpb24oaW5wdXQsbG9jYWxlKXtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgaW5wdXQ/aW5wdXQ6aXNOYU4oaW5wdXQpP1wibnVtYmVyXCI9PXR5cGVvZihpbnB1dD1sb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCkpP2lucHV0Om51bGw6cGFyc2VJbnQoaW5wdXQsMTApfShpbnB1dCx0aGlzLmxvY2FsZURhdGEoKSksdGhpcy5hZGQoaW5wdXQtZGF5LFwiZFwiKSk6ZGF5fSxwcm90by53ZWVrZGF5PWZ1bmN0aW9uKGlucHV0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPWlucHV0P3RoaXM6TmFOO3ZhciB3ZWVrZGF5PSh0aGlzLmRheSgpKzctdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93KSU3O3JldHVybiBudWxsPT1pbnB1dD93ZWVrZGF5OnRoaXMuYWRkKGlucHV0LXdlZWtkYXksXCJkXCIpfSxwcm90by5pc29XZWVrZGF5PWZ1bmN0aW9uKGlucHV0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPWlucHV0P3RoaXM6TmFOO2lmKG51bGwhPWlucHV0KXt2YXIgd2Vla2RheT1mdW5jdGlvbihpbnB1dCxsb2NhbGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBpbnB1dD9sb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCklN3x8Nzppc05hTihpbnB1dCk/bnVsbDppbnB1dH0oaW5wdXQsdGhpcy5sb2NhbGVEYXRhKCkpO3JldHVybiB0aGlzLmRheSh0aGlzLmRheSgpJTc/d2Vla2RheTp3ZWVrZGF5LTcpfXJldHVybiB0aGlzLmRheSgpfHw3fSxwcm90by5kYXlPZlllYXI9ZnVuY3Rpb24oaW5wdXQpe3ZhciBkYXlPZlllYXI9TWF0aC5yb3VuZCgodGhpcy5jbG9uZSgpLnN0YXJ0T2YoXCJkYXlcIiktdGhpcy5jbG9uZSgpLnN0YXJ0T2YoXCJ5ZWFyXCIpKS84NjRlNSkrMTtyZXR1cm4gbnVsbD09aW5wdXQ/ZGF5T2ZZZWFyOnRoaXMuYWRkKGlucHV0LWRheU9mWWVhcixcImRcIil9LHByb3RvLmhvdXI9cHJvdG8uaG91cnM9Z2V0U2V0SG91cixwcm90by5taW51dGU9cHJvdG8ubWludXRlcz1nZXRTZXRNaW51dGUscHJvdG8uc2Vjb25kPXByb3RvLnNlY29uZHM9Z2V0U2V0U2Vjb25kLHByb3RvLm1pbGxpc2Vjb25kPXByb3RvLm1pbGxpc2Vjb25kcz1nZXRTZXRNaWxsaXNlY29uZCxwcm90by51dGNPZmZzZXQ9ZnVuY3Rpb24oaW5wdXQsa2VlcExvY2FsVGltZSxrZWVwTWludXRlcyl7dmFyIGxvY2FsQWRqdXN0LG9mZnNldD10aGlzLl9vZmZzZXR8fDA7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT1pbnB1dD90aGlzOk5hTjtpZihudWxsIT1pbnB1dCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGlucHV0KXtpZihudWxsPT09KGlucHV0PW9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCxpbnB1dCkpKXJldHVybiB0aGlzfWVsc2UgTWF0aC5hYnMoaW5wdXQpPDE2JiYha2VlcE1pbnV0ZXMmJihpbnB1dCo9NjApO3JldHVybiF0aGlzLl9pc1VUQyYma2VlcExvY2FsVGltZSYmKGxvY2FsQWRqdXN0PWdldERhdGVPZmZzZXQodGhpcykpLHRoaXMuX29mZnNldD1pbnB1dCx0aGlzLl9pc1VUQz0hMCxudWxsIT1sb2NhbEFkanVzdCYmdGhpcy5hZGQobG9jYWxBZGp1c3QsXCJtXCIpLG9mZnNldCE9PWlucHV0JiYoIWtlZXBMb2NhbFRpbWV8fHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M/YWRkU3VidHJhY3QodGhpcyxjcmVhdGVEdXJhdGlvbihpbnB1dC1vZmZzZXQsXCJtXCIpLDEsITEpOnRoaXMuX2NoYW5nZUluUHJvZ3Jlc3N8fCh0aGlzLl9jaGFuZ2VJblByb2dyZXNzPSEwLGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzLl9jaGFuZ2VJblByb2dyZXNzPW51bGwpKSx0aGlzfXJldHVybiB0aGlzLl9pc1VUQz9vZmZzZXQ6Z2V0RGF0ZU9mZnNldCh0aGlzKX0scHJvdG8udXRjPWZ1bmN0aW9uKGtlZXBMb2NhbFRpbWUpe3JldHVybiB0aGlzLnV0Y09mZnNldCgwLGtlZXBMb2NhbFRpbWUpfSxwcm90by5sb2NhbD1mdW5jdGlvbihrZWVwTG9jYWxUaW1lKXtyZXR1cm4gdGhpcy5faXNVVEMmJih0aGlzLnV0Y09mZnNldCgwLGtlZXBMb2NhbFRpbWUpLHRoaXMuX2lzVVRDPSExLGtlZXBMb2NhbFRpbWUmJnRoaXMuc3VidHJhY3QoZ2V0RGF0ZU9mZnNldCh0aGlzKSxcIm1cIikpLHRoaXN9LHByb3RvLnBhcnNlWm9uZT1mdW5jdGlvbigpe2lmKG51bGwhPXRoaXMuX3R6bSl0aGlzLnV0Y09mZnNldCh0aGlzLl90em0sITEsITApO2Vsc2UgaWYoXCJzdHJpbmdcIj09dHlwZW9mIHRoaXMuX2kpe3ZhciB0Wm9uZT1vZmZzZXRGcm9tU3RyaW5nKG1hdGNoT2Zmc2V0LHRoaXMuX2kpO251bGwhPXRab25lP3RoaXMudXRjT2Zmc2V0KHRab25lKTp0aGlzLnV0Y09mZnNldCgwLCEwKX1yZXR1cm4gdGhpc30scHJvdG8uaGFzQWxpZ25lZEhvdXJPZmZzZXQ9ZnVuY3Rpb24oaW5wdXQpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJihpbnB1dD1pbnB1dD9jcmVhdGVMb2NhbChpbnB1dCkudXRjT2Zmc2V0KCk6MCwodGhpcy51dGNPZmZzZXQoKS1pbnB1dCklNjA9PTApfSxwcm90by5pc0RTVD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnV0Y09mZnNldCgpPnRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKXx8dGhpcy51dGNPZmZzZXQoKT50aGlzLmNsb25lKCkubW9udGgoNSkudXRjT2Zmc2V0KCl9LHByb3RvLmlzTG9jYWw9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiYhdGhpcy5faXNVVEN9LHByb3RvLmlzVXRjT2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmdGhpcy5faXNVVEN9LHByb3RvLmlzVXRjPWlzVXRjLHByb3RvLmlzVVRDPWlzVXRjLHByb3RvLnpvbmVBYmJyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzVVRDP1wiVVRDXCI6XCJcIn0scHJvdG8uem9uZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNVVEM/XCJDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZVwiOlwiXCJ9LHByb3RvLmRhdGVzPWRlcHJlY2F0ZShcImRhdGVzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBkYXRlIGluc3RlYWQuXCIsZ2V0U2V0RGF5T2ZNb250aCkscHJvdG8ubW9udGhzPWRlcHJlY2F0ZShcIm1vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZFwiLGdldFNldE1vbnRoKSxwcm90by55ZWFycz1kZXByZWNhdGUoXCJ5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgeWVhciBpbnN0ZWFkXCIsZ2V0U2V0WWVhcikscHJvdG8uem9uZT1kZXByZWNhdGUoXCJtb21lbnQoKS56b25lIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQoKS51dGNPZmZzZXQgaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy96b25lL1wiLChmdW5jdGlvbihpbnB1dCxrZWVwTG9jYWxUaW1lKXtyZXR1cm4gbnVsbCE9aW5wdXQ/KFwic3RyaW5nXCIhPXR5cGVvZiBpbnB1dCYmKGlucHV0PS1pbnB1dCksdGhpcy51dGNPZmZzZXQoaW5wdXQsa2VlcExvY2FsVGltZSksdGhpcyk6LXRoaXMudXRjT2Zmc2V0KCl9KSkscHJvdG8uaXNEU1RTaGlmdGVkPWRlcHJlY2F0ZShcImlzRFNUU2hpZnRlZCBpcyBkZXByZWNhdGVkLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kc3Qtc2hpZnRlZC8gZm9yIG1vcmUgaW5mb3JtYXRpb25cIiwoZnVuY3Rpb24oKXtpZighaXNVbmRlZmluZWQodGhpcy5faXNEU1RTaGlmdGVkKSlyZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO3ZhciBvdGhlcixjPXt9O3JldHVybiBjb3B5Q29uZmlnKGMsdGhpcyksKGM9cHJlcGFyZUNvbmZpZyhjKSkuX2E/KG90aGVyPWMuX2lzVVRDP2NyZWF0ZVVUQyhjLl9hKTpjcmVhdGVMb2NhbChjLl9hKSx0aGlzLl9pc0RTVFNoaWZ0ZWQ9dGhpcy5pc1ZhbGlkKCkmJmZ1bmN0aW9uKGFycmF5MSxhcnJheTIsZG9udENvbnZlcnQpe3ZhciBpLGxlbj1NYXRoLm1pbihhcnJheTEubGVuZ3RoLGFycmF5Mi5sZW5ndGgpLGxlbmd0aERpZmY9TWF0aC5hYnMoYXJyYXkxLmxlbmd0aC1hcnJheTIubGVuZ3RoKSxkaWZmcz0wO2ZvcihpPTA7aTxsZW47aSsrKShkb250Q29udmVydCYmYXJyYXkxW2ldIT09YXJyYXkyW2ldfHwhZG9udENvbnZlcnQmJnRvSW50KGFycmF5MVtpXSkhPT10b0ludChhcnJheTJbaV0pKSYmZGlmZnMrKztyZXR1cm4gZGlmZnMrbGVuZ3RoRGlmZn0oYy5fYSxvdGhlci50b0FycmF5KCkpPjApOnRoaXMuX2lzRFNUU2hpZnRlZD0hMSx0aGlzLl9pc0RTVFNoaWZ0ZWR9KSk7dmFyIHByb3RvJDE9TG9jYWxlLnByb3RvdHlwZTtmdW5jdGlvbiBnZXQkMShmb3JtYXQsaW5kZXgsZmllbGQsc2V0dGVyKXt2YXIgbG9jYWxlPWdldExvY2FsZSgpLHV0Yz1jcmVhdGVVVEMoKS5zZXQoc2V0dGVyLGluZGV4KTtyZXR1cm4gbG9jYWxlW2ZpZWxkXSh1dGMsZm9ybWF0KX1mdW5jdGlvbiBsaXN0TW9udGhzSW1wbChmb3JtYXQsaW5kZXgsZmllbGQpe2lmKGlzTnVtYmVyKGZvcm1hdCkmJihpbmRleD1mb3JtYXQsZm9ybWF0PXZvaWQgMCksZm9ybWF0PWZvcm1hdHx8XCJcIixudWxsIT1pbmRleClyZXR1cm4gZ2V0JDEoZm9ybWF0LGluZGV4LGZpZWxkLFwibW9udGhcIik7dmFyIGksb3V0PVtdO2ZvcihpPTA7aTwxMjtpKyspb3V0W2ldPWdldCQxKGZvcm1hdCxpLGZpZWxkLFwibW9udGhcIik7cmV0dXJuIG91dH1mdW5jdGlvbiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCxmb3JtYXQsaW5kZXgsZmllbGQpe1wiYm9vbGVhblwiPT10eXBlb2YgbG9jYWxlU29ydGVkPyhpc051bWJlcihmb3JtYXQpJiYoaW5kZXg9Zm9ybWF0LGZvcm1hdD12b2lkIDApLGZvcm1hdD1mb3JtYXR8fFwiXCIpOihpbmRleD1mb3JtYXQ9bG9jYWxlU29ydGVkLGxvY2FsZVNvcnRlZD0hMSxpc051bWJlcihmb3JtYXQpJiYoaW5kZXg9Zm9ybWF0LGZvcm1hdD12b2lkIDApLGZvcm1hdD1mb3JtYXR8fFwiXCIpO3ZhciBpLGxvY2FsZT1nZXRMb2NhbGUoKSxzaGlmdD1sb2NhbGVTb3J0ZWQ/bG9jYWxlLl93ZWVrLmRvdzowLG91dD1bXTtpZihudWxsIT1pbmRleClyZXR1cm4gZ2V0JDEoZm9ybWF0LChpbmRleCtzaGlmdCklNyxmaWVsZCxcImRheVwiKTtmb3IoaT0wO2k8NztpKyspb3V0W2ldPWdldCQxKGZvcm1hdCwoaStzaGlmdCklNyxmaWVsZCxcImRheVwiKTtyZXR1cm4gb3V0fXByb3RvJDEuY2FsZW5kYXI9ZnVuY3Rpb24oa2V5LG1vbSxub3cpe3ZhciBvdXRwdXQ9dGhpcy5fY2FsZW5kYXJba2V5XXx8dGhpcy5fY2FsZW5kYXIuc2FtZUVsc2U7cmV0dXJuIGlzRnVuY3Rpb24ob3V0cHV0KT9vdXRwdXQuY2FsbChtb20sbm93KTpvdXRwdXR9LHByb3RvJDEubG9uZ0RhdGVGb3JtYXQ9ZnVuY3Rpb24oa2V5KXt2YXIgZm9ybWF0PXRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0sZm9ybWF0VXBwZXI9dGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5LnRvVXBwZXJDYXNlKCldO3JldHVybiBmb3JtYXR8fCFmb3JtYXRVcHBlcj9mb3JtYXQ6KHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV09Zm9ybWF0VXBwZXIubWF0Y2goZm9ybWF0dGluZ1Rva2VucykubWFwKChmdW5jdGlvbih0b2spe3JldHVyblwiTU1NTVwiPT09dG9rfHxcIk1NXCI9PT10b2t8fFwiRERcIj09PXRva3x8XCJkZGRkXCI9PT10b2s/dG9rLnNsaWNlKDEpOnRva30pKS5qb2luKFwiXCIpLHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0pfSxwcm90byQxLmludmFsaWREYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ludmFsaWREYXRlfSxwcm90byQxLm9yZGluYWw9ZnVuY3Rpb24obnVtYmVyKXtyZXR1cm4gdGhpcy5fb3JkaW5hbC5yZXBsYWNlKFwiJWRcIixudW1iZXIpfSxwcm90byQxLnByZXBhcnNlPXByZVBhcnNlUG9zdEZvcm1hdCxwcm90byQxLnBvc3Rmb3JtYXQ9cHJlUGFyc2VQb3N0Rm9ybWF0LHByb3RvJDEucmVsYXRpdmVUaW1lPWZ1bmN0aW9uKG51bWJlcix3aXRob3V0U3VmZml4LHN0cmluZyxpc0Z1dHVyZSl7dmFyIG91dHB1dD10aGlzLl9yZWxhdGl2ZVRpbWVbc3RyaW5nXTtyZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpP291dHB1dChudW1iZXIsd2l0aG91dFN1ZmZpeCxzdHJpbmcsaXNGdXR1cmUpOm91dHB1dC5yZXBsYWNlKC8lZC9pLG51bWJlcil9LHByb3RvJDEucGFzdEZ1dHVyZT1mdW5jdGlvbihkaWZmLG91dHB1dCl7dmFyIGZvcm1hdD10aGlzLl9yZWxhdGl2ZVRpbWVbZGlmZj4wP1wiZnV0dXJlXCI6XCJwYXN0XCJdO3JldHVybiBpc0Z1bmN0aW9uKGZvcm1hdCk/Zm9ybWF0KG91dHB1dCk6Zm9ybWF0LnJlcGxhY2UoLyVzL2ksb3V0cHV0KX0scHJvdG8kMS5zZXQ9ZnVuY3Rpb24oY29uZmlnKXt2YXIgcHJvcCxpO2ZvcihpIGluIGNvbmZpZyloYXNPd25Qcm9wKGNvbmZpZyxpKSYmKGlzRnVuY3Rpb24ocHJvcD1jb25maWdbaV0pP3RoaXNbaV09cHJvcDp0aGlzW1wiX1wiK2ldPXByb3ApO3RoaXMuX2NvbmZpZz1jb25maWcsdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ9bmV3IFJlZ0V4cCgodGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZS5zb3VyY2V8fHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpK1wifFwiKy9cXGR7MSwyfS8uc291cmNlKX0scHJvdG8kMS5lcmFzPWZ1bmN0aW9uKG0sZm9ybWF0KXt2YXIgaSxsLGRhdGUsZXJhcz10aGlzLl9lcmFzfHxnZXRMb2NhbGUoXCJlblwiKS5fZXJhcztmb3IoaT0wLGw9ZXJhcy5sZW5ndGg7aTxsOysraSl7c3dpdGNoKHR5cGVvZiBlcmFzW2ldLnNpbmNlKXtjYXNlXCJzdHJpbmdcIjpkYXRlPWhvb2tzKGVyYXNbaV0uc2luY2UpLnN0YXJ0T2YoXCJkYXlcIiksZXJhc1tpXS5zaW5jZT1kYXRlLnZhbHVlT2YoKX1zd2l0Y2godHlwZW9mIGVyYXNbaV0udW50aWwpe2Nhc2VcInVuZGVmaW5lZFwiOmVyYXNbaV0udW50aWw9MS8wO2JyZWFrO2Nhc2VcInN0cmluZ1wiOmRhdGU9aG9va3MoZXJhc1tpXS51bnRpbCkuc3RhcnRPZihcImRheVwiKS52YWx1ZU9mKCksZXJhc1tpXS51bnRpbD1kYXRlLnZhbHVlT2YoKX19cmV0dXJuIGVyYXN9LHByb3RvJDEuZXJhc1BhcnNlPWZ1bmN0aW9uKGVyYU5hbWUsZm9ybWF0LHN0cmljdCl7dmFyIGksbCxuYW1lLGFiYnIsbmFycm93LGVyYXM9dGhpcy5lcmFzKCk7Zm9yKGVyYU5hbWU9ZXJhTmFtZS50b1VwcGVyQ2FzZSgpLGk9MCxsPWVyYXMubGVuZ3RoO2k8bDsrK2kpaWYobmFtZT1lcmFzW2ldLm5hbWUudG9VcHBlckNhc2UoKSxhYmJyPWVyYXNbaV0uYWJici50b1VwcGVyQ2FzZSgpLG5hcnJvdz1lcmFzW2ldLm5hcnJvdy50b1VwcGVyQ2FzZSgpLHN0cmljdClzd2l0Y2goZm9ybWF0KXtjYXNlXCJOXCI6Y2FzZVwiTk5cIjpjYXNlXCJOTk5cIjppZihhYmJyPT09ZXJhTmFtZSlyZXR1cm4gZXJhc1tpXTticmVhaztjYXNlXCJOTk5OXCI6aWYobmFtZT09PWVyYU5hbWUpcmV0dXJuIGVyYXNbaV07YnJlYWs7Y2FzZVwiTk5OTk5cIjppZihuYXJyb3c9PT1lcmFOYW1lKXJldHVybiBlcmFzW2ldfWVsc2UgaWYoW25hbWUsYWJicixuYXJyb3ddLmluZGV4T2YoZXJhTmFtZSk+PTApcmV0dXJuIGVyYXNbaV19LHByb3RvJDEuZXJhc0NvbnZlcnRZZWFyPWZ1bmN0aW9uKGVyYSx5ZWFyKXt2YXIgZGlyPWVyYS5zaW5jZTw9ZXJhLnVudGlsPzE6LTE7cmV0dXJuIHZvaWQgMD09PXllYXI/aG9va3MoZXJhLnNpbmNlKS55ZWFyKCk6aG9va3MoZXJhLnNpbmNlKS55ZWFyKCkrKHllYXItZXJhLm9mZnNldCkqZGlyfSxwcm90byQxLmVyYXNBYmJyUmVnZXg9ZnVuY3Rpb24oaXNTdHJpY3Qpe3JldHVybiBoYXNPd25Qcm9wKHRoaXMsXCJfZXJhc0FiYnJSZWdleFwiKXx8Y29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpLGlzU3RyaWN0P3RoaXMuX2VyYXNBYmJyUmVnZXg6dGhpcy5fZXJhc1JlZ2V4fSxwcm90byQxLmVyYXNOYW1lUmVnZXg9ZnVuY3Rpb24oaXNTdHJpY3Qpe3JldHVybiBoYXNPd25Qcm9wKHRoaXMsXCJfZXJhc05hbWVSZWdleFwiKXx8Y29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpLGlzU3RyaWN0P3RoaXMuX2VyYXNOYW1lUmVnZXg6dGhpcy5fZXJhc1JlZ2V4fSxwcm90byQxLmVyYXNOYXJyb3dSZWdleD1mdW5jdGlvbihpc1N0cmljdCl7cmV0dXJuIGhhc093blByb3AodGhpcyxcIl9lcmFzTmFycm93UmVnZXhcIil8fGNvbXB1dGVFcmFzUGFyc2UuY2FsbCh0aGlzKSxpc1N0cmljdD90aGlzLl9lcmFzTmFycm93UmVnZXg6dGhpcy5fZXJhc1JlZ2V4fSxwcm90byQxLm1vbnRocz1mdW5jdGlvbihtLGZvcm1hdCl7cmV0dXJuIG0/aXNBcnJheSh0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoc1ttLm1vbnRoKCldOnRoaXMuX21vbnRoc1sodGhpcy5fbW9udGhzLmlzRm9ybWF0fHxNT05USFNfSU5fRk9STUFUKS50ZXN0KGZvcm1hdCk/XCJmb3JtYXRcIjpcInN0YW5kYWxvbmVcIl1bbS5tb250aCgpXTppc0FycmF5KHRoaXMuX21vbnRocyk/dGhpcy5fbW9udGhzOnRoaXMuX21vbnRocy5zdGFuZGFsb25lfSxwcm90byQxLm1vbnRoc1Nob3J0PWZ1bmN0aW9uKG0sZm9ybWF0KXtyZXR1cm4gbT9pc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KT90aGlzLl9tb250aHNTaG9ydFttLm1vbnRoKCldOnRoaXMuX21vbnRoc1Nob3J0W01PTlRIU19JTl9GT1JNQVQudGVzdChmb3JtYXQpP1wiZm9ybWF0XCI6XCJzdGFuZGFsb25lXCJdW20ubW9udGgoKV06aXNBcnJheSh0aGlzLl9tb250aHNTaG9ydCk/dGhpcy5fbW9udGhzU2hvcnQ6dGhpcy5fbW9udGhzU2hvcnQuc3RhbmRhbG9uZX0scHJvdG8kMS5tb250aHNQYXJzZT1mdW5jdGlvbihtb250aE5hbWUsZm9ybWF0LHN0cmljdCl7dmFyIGksbW9tLHJlZ2V4O2lmKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlLmNhbGwodGhpcyxtb250aE5hbWUsZm9ybWF0LHN0cmljdCk7Zm9yKHRoaXMuX21vbnRoc1BhcnNlfHwodGhpcy5fbW9udGhzUGFyc2U9W10sdGhpcy5fbG9uZ01vbnRoc1BhcnNlPVtdLHRoaXMuX3Nob3J0TW9udGhzUGFyc2U9W10pLGk9MDtpPDEyO2krKyl7aWYobW9tPWNyZWF0ZVVUQyhbMmUzLGldKSxzdHJpY3QmJiF0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0mJih0aGlzLl9sb25nTW9udGhzUGFyc2VbaV09bmV3IFJlZ0V4cChcIl5cIit0aGlzLm1vbnRocyhtb20sXCJcIikucmVwbGFjZShcIi5cIixcIlwiKStcIiRcIixcImlcIiksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXT1uZXcgUmVnRXhwKFwiXlwiK3RoaXMubW9udGhzU2hvcnQobW9tLFwiXCIpLnJlcGxhY2UoXCIuXCIsXCJcIikrXCIkXCIsXCJpXCIpKSxzdHJpY3R8fHRoaXMuX21vbnRoc1BhcnNlW2ldfHwocmVnZXg9XCJeXCIrdGhpcy5tb250aHMobW9tLFwiXCIpK1wifF5cIit0aGlzLm1vbnRoc1Nob3J0KG1vbSxcIlwiKSx0aGlzLl9tb250aHNQYXJzZVtpXT1uZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoXCIuXCIsXCJcIiksXCJpXCIpKSxzdHJpY3QmJlwiTU1NTVwiPT09Zm9ybWF0JiZ0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKXJldHVybiBpO2lmKHN0cmljdCYmXCJNTU1cIj09PWZvcm1hdCYmdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSkpcmV0dXJuIGk7aWYoIXN0cmljdCYmdGhpcy5fbW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKXJldHVybiBpfX0scHJvdG8kMS5tb250aHNSZWdleD1mdW5jdGlvbihpc1N0cmljdCl7cmV0dXJuIHRoaXMuX21vbnRoc1BhcnNlRXhhY3Q/KGhhc093blByb3AodGhpcyxcIl9tb250aHNSZWdleFwiKXx8Y29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyksaXNTdHJpY3Q/dGhpcy5fbW9udGhzU3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzUmVnZXgpOihoYXNPd25Qcm9wKHRoaXMsXCJfbW9udGhzUmVnZXhcIil8fCh0aGlzLl9tb250aHNSZWdleD1kZWZhdWx0TW9udGhzUmVnZXgpLHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4JiZpc1N0cmljdD90aGlzLl9tb250aHNTdHJpY3RSZWdleDp0aGlzLl9tb250aHNSZWdleCl9LHByb3RvJDEubW9udGhzU2hvcnRSZWdleD1mdW5jdGlvbihpc1N0cmljdCl7cmV0dXJuIHRoaXMuX21vbnRoc1BhcnNlRXhhY3Q/KGhhc093blByb3AodGhpcyxcIl9tb250aHNSZWdleFwiKXx8Y29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyksaXNTdHJpY3Q/dGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl9tb250aHNTaG9ydFJlZ2V4KTooaGFzT3duUHJvcCh0aGlzLFwiX21vbnRoc1Nob3J0UmVnZXhcIil8fCh0aGlzLl9tb250aHNTaG9ydFJlZ2V4PWRlZmF1bHRNb250aHNTaG9ydFJlZ2V4KSx0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4JiZpc1N0cmljdD90aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1Nob3J0UmVnZXgpfSxwcm90byQxLndlZWs9ZnVuY3Rpb24obW9tKXtyZXR1cm4gd2Vla09mWWVhcihtb20sdGhpcy5fd2Vlay5kb3csdGhpcy5fd2Vlay5kb3kpLndlZWt9LHByb3RvJDEuZmlyc3REYXlPZlllYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2Vlay5kb3l9LHByb3RvJDEuZmlyc3REYXlPZldlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2Vlay5kb3d9LHByb3RvJDEud2Vla2RheXM9ZnVuY3Rpb24obSxmb3JtYXQpe3ZhciB3ZWVrZGF5cz1pc0FycmF5KHRoaXMuX3dlZWtkYXlzKT90aGlzLl93ZWVrZGF5czp0aGlzLl93ZWVrZGF5c1ttJiYhMCE9PW0mJnRoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3QoZm9ybWF0KT9cImZvcm1hdFwiOlwic3RhbmRhbG9uZVwiXTtyZXR1cm4hMD09PW0/c2hpZnRXZWVrZGF5cyh3ZWVrZGF5cyx0aGlzLl93ZWVrLmRvdyk6bT93ZWVrZGF5c1ttLmRheSgpXTp3ZWVrZGF5c30scHJvdG8kMS53ZWVrZGF5c01pbj1mdW5jdGlvbihtKXtyZXR1cm4hMD09PW0/c2hpZnRXZWVrZGF5cyh0aGlzLl93ZWVrZGF5c01pbix0aGlzLl93ZWVrLmRvdyk6bT90aGlzLl93ZWVrZGF5c01pblttLmRheSgpXTp0aGlzLl93ZWVrZGF5c01pbn0scHJvdG8kMS53ZWVrZGF5c1Nob3J0PWZ1bmN0aW9uKG0pe3JldHVybiEwPT09bT9zaGlmdFdlZWtkYXlzKHRoaXMuX3dlZWtkYXlzU2hvcnQsdGhpcy5fd2Vlay5kb3cpOm0/dGhpcy5fd2Vla2RheXNTaG9ydFttLmRheSgpXTp0aGlzLl93ZWVrZGF5c1Nob3J0fSxwcm90byQxLndlZWtkYXlzUGFyc2U9ZnVuY3Rpb24od2Vla2RheU5hbWUsZm9ybWF0LHN0cmljdCl7dmFyIGksbW9tLHJlZ2V4O2lmKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdClyZXR1cm4gaGFuZGxlU3RyaWN0UGFyc2UkMS5jYWxsKHRoaXMsd2Vla2RheU5hbWUsZm9ybWF0LHN0cmljdCk7Zm9yKHRoaXMuX3dlZWtkYXlzUGFyc2V8fCh0aGlzLl93ZWVrZGF5c1BhcnNlPVtdLHRoaXMuX21pbldlZWtkYXlzUGFyc2U9W10sdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlPVtdLHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlPVtdKSxpPTA7aTw3O2krKyl7aWYobW9tPWNyZWF0ZVVUQyhbMmUzLDFdKS5kYXkoaSksc3RyaWN0JiYhdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0mJih0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXT1uZXcgUmVnRXhwKFwiXlwiK3RoaXMud2Vla2RheXMobW9tLFwiXCIpLnJlcGxhY2UoXCIuXCIsXCJcXFxcLj9cIikrXCIkXCIsXCJpXCIpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXT1uZXcgUmVnRXhwKFwiXlwiK3RoaXMud2Vla2RheXNTaG9ydChtb20sXCJcIikucmVwbGFjZShcIi5cIixcIlxcXFwuP1wiKStcIiRcIixcImlcIiksdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXT1uZXcgUmVnRXhwKFwiXlwiK3RoaXMud2Vla2RheXNNaW4obW9tLFwiXCIpLnJlcGxhY2UoXCIuXCIsXCJcXFxcLj9cIikrXCIkXCIsXCJpXCIpKSx0aGlzLl93ZWVrZGF5c1BhcnNlW2ldfHwocmVnZXg9XCJeXCIrdGhpcy53ZWVrZGF5cyhtb20sXCJcIikrXCJ8XlwiK3RoaXMud2Vla2RheXNTaG9ydChtb20sXCJcIikrXCJ8XlwiK3RoaXMud2Vla2RheXNNaW4obW9tLFwiXCIpLHRoaXMuX3dlZWtkYXlzUGFyc2VbaV09bmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKFwiLlwiLFwiXCIpLFwiaVwiKSksc3RyaWN0JiZcImRkZGRcIj09PWZvcm1hdCYmdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpcmV0dXJuIGk7aWYoc3RyaWN0JiZcImRkZFwiPT09Zm9ybWF0JiZ0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpcmV0dXJuIGk7aWYoc3RyaWN0JiZcImRkXCI9PT1mb3JtYXQmJnRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpcmV0dXJuIGk7aWYoIXN0cmljdCYmdGhpcy5fd2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKSlyZXR1cm4gaX19LHByb3RvJDEud2Vla2RheXNSZWdleD1mdW5jdGlvbihpc1N0cmljdCl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdD8oaGFzT3duUHJvcCh0aGlzLFwiX3dlZWtkYXlzUmVnZXhcIil8fGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyksaXNTdHJpY3Q/dGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1JlZ2V4KTooaGFzT3duUHJvcCh0aGlzLFwiX3dlZWtkYXlzUmVnZXhcIil8fCh0aGlzLl93ZWVrZGF5c1JlZ2V4PWRlZmF1bHRXZWVrZGF5c1JlZ2V4KSx0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4JiZpc1N0cmljdD90aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzUmVnZXgpfSxwcm90byQxLndlZWtkYXlzU2hvcnRSZWdleD1mdW5jdGlvbihpc1N0cmljdCl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdD8oaGFzT3duUHJvcCh0aGlzLFwiX3dlZWtkYXlzUmVnZXhcIil8fGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyksaXNTdHJpY3Q/dGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCk6KGhhc093blByb3AodGhpcyxcIl93ZWVrZGF5c1Nob3J0UmVnZXhcIil8fCh0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg9ZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleCksdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4JiZpc1N0cmljdD90aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KX0scHJvdG8kMS53ZWVrZGF5c01pblJlZ2V4PWZ1bmN0aW9uKGlzU3RyaWN0KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhoYXNPd25Qcm9wKHRoaXMsXCJfd2Vla2RheXNSZWdleFwiKXx8Y29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKSxpc1N0cmljdD90aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzTWluUmVnZXgpOihoYXNPd25Qcm9wKHRoaXMsXCJfd2Vla2RheXNNaW5SZWdleFwiKXx8KHRoaXMuX3dlZWtkYXlzTWluUmVnZXg9ZGVmYXVsdFdlZWtkYXlzTWluUmVnZXgpLHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXgmJmlzU3RyaWN0P3RoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNNaW5SZWdleCl9LHByb3RvJDEuaXNQTT1mdW5jdGlvbihpbnB1dCl7cmV0dXJuXCJwXCI9PT0oaW5wdXQrXCJcIikudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCl9LHByb3RvJDEubWVyaWRpZW09ZnVuY3Rpb24oaG91cnMsbWludXRlcyxpc0xvd2VyKXtyZXR1cm4gaG91cnM+MTE/aXNMb3dlcj9cInBtXCI6XCJQTVwiOmlzTG93ZXI/XCJhbVwiOlwiQU1cIn0sZ2V0U2V0R2xvYmFsTG9jYWxlKFwiZW5cIix7ZXJhczpbe3NpbmNlOlwiMDAwMS0wMS0wMVwiLHVudGlsOjEvMCxvZmZzZXQ6MSxuYW1lOlwiQW5ubyBEb21pbmlcIixuYXJyb3c6XCJBRFwiLGFiYnI6XCJBRFwifSx7c2luY2U6XCIwMDAwLTEyLTMxXCIsdW50aWw6LTEvMCxvZmZzZXQ6MSxuYW1lOlwiQmVmb3JlIENocmlzdFwiLG5hcnJvdzpcIkJDXCIsYWJicjpcIkJDXCJ9XSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfSh0aHxzdHxuZHxyZCkvLG9yZGluYWw6ZnVuY3Rpb24obnVtYmVyKXt2YXIgYj1udW1iZXIlMTA7cmV0dXJuIG51bWJlcisoMT09PXRvSW50KG51bWJlciUxMDAvMTApP1widGhcIjoxPT09Yj9cInN0XCI6Mj09PWI/XCJuZFwiOjM9PT1iP1wicmRcIjpcInRoXCIpfX0pLGhvb2tzLmxhbmc9ZGVwcmVjYXRlKFwibW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC5cIixnZXRTZXRHbG9iYWxMb2NhbGUpLGhvb2tzLmxhbmdEYXRhPWRlcHJlY2F0ZShcIm1vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC5cIixnZXRMb2NhbGUpO3ZhciBtYXRoQWJzPU1hdGguYWJzO2Z1bmN0aW9uIGFkZFN1YnRyYWN0JDEoZHVyYXRpb24saW5wdXQsdmFsdWUsZGlyZWN0aW9uKXt2YXIgb3RoZXI9Y3JlYXRlRHVyYXRpb24oaW5wdXQsdmFsdWUpO3JldHVybiBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzKz1kaXJlY3Rpb24qb3RoZXIuX21pbGxpc2Vjb25kcyxkdXJhdGlvbi5fZGF5cys9ZGlyZWN0aW9uKm90aGVyLl9kYXlzLGR1cmF0aW9uLl9tb250aHMrPWRpcmVjdGlvbipvdGhlci5fbW9udGhzLGR1cmF0aW9uLl9idWJibGUoKX1mdW5jdGlvbiBhYnNDZWlsKG51bWJlcil7cmV0dXJuIG51bWJlcjwwP01hdGguZmxvb3IobnVtYmVyKTpNYXRoLmNlaWwobnVtYmVyKX1mdW5jdGlvbiBkYXlzVG9Nb250aHMoZGF5cyl7cmV0dXJuIDQ4MDAqZGF5cy8xNDYwOTd9ZnVuY3Rpb24gbW9udGhzVG9EYXlzKG1vbnRocyl7cmV0dXJuIDE0NjA5Nyptb250aHMvNDgwMH1mdW5jdGlvbiBtYWtlQXMoYWxpYXMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmFzKGFsaWFzKX19dmFyIGFzTWlsbGlzZWNvbmRzPW1ha2VBcyhcIm1zXCIpLGFzU2Vjb25kcz1tYWtlQXMoXCJzXCIpLGFzTWludXRlcz1tYWtlQXMoXCJtXCIpLGFzSG91cnM9bWFrZUFzKFwiaFwiKSxhc0RheXM9bWFrZUFzKFwiZFwiKSxhc1dlZWtzPW1ha2VBcyhcIndcIiksYXNNb250aHM9bWFrZUFzKFwiTVwiKSxhc1F1YXJ0ZXJzPW1ha2VBcyhcIlFcIiksYXNZZWFycz1tYWtlQXMoXCJ5XCIpO2Z1bmN0aW9uIG1ha2VHZXR0ZXIobmFtZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMuX2RhdGFbbmFtZV06TmFOfX12YXIgbWlsbGlzZWNvbmRzPW1ha2VHZXR0ZXIoXCJtaWxsaXNlY29uZHNcIiksc2Vjb25kcz1tYWtlR2V0dGVyKFwic2Vjb25kc1wiKSxtaW51dGVzPW1ha2VHZXR0ZXIoXCJtaW51dGVzXCIpLGhvdXJzPW1ha2VHZXR0ZXIoXCJob3Vyc1wiKSxkYXlzPW1ha2VHZXR0ZXIoXCJkYXlzXCIpLG1vbnRocz1tYWtlR2V0dGVyKFwibW9udGhzXCIpLHllYXJzPW1ha2VHZXR0ZXIoXCJ5ZWFyc1wiKSxyb3VuZD1NYXRoLnJvdW5kLHRocmVzaG9sZHM9e3NzOjQ0LHM6NDUsbTo0NSxoOjIyLGQ6MjYsdzpudWxsLE06MTF9O2Z1bmN0aW9uIHN1YnN0aXR1dGVUaW1lQWdvKHN0cmluZyxudW1iZXIsd2l0aG91dFN1ZmZpeCxpc0Z1dHVyZSxsb2NhbGUpe3JldHVybiBsb2NhbGUucmVsYXRpdmVUaW1lKG51bWJlcnx8MSwhIXdpdGhvdXRTdWZmaXgsc3RyaW5nLGlzRnV0dXJlKX12YXIgYWJzJDE9TWF0aC5hYnM7ZnVuY3Rpb24gc2lnbih4KXtyZXR1cm4oeD4wKS0oeDwwKXx8K3h9ZnVuY3Rpb24gdG9JU09TdHJpbmckMSgpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTt2YXIgbWludXRlcyxob3Vycyx5ZWFycyxzLHRvdGFsU2lnbix5bVNpZ24sZGF5c1NpZ24saG1zU2lnbixzZWNvbmRzPWFicyQxKHRoaXMuX21pbGxpc2Vjb25kcykvMWUzLGRheXM9YWJzJDEodGhpcy5fZGF5cyksbW9udGhzPWFicyQxKHRoaXMuX21vbnRocyksdG90YWw9dGhpcy5hc1NlY29uZHMoKTtyZXR1cm4gdG90YWw/KG1pbnV0ZXM9YWJzRmxvb3Ioc2Vjb25kcy82MCksaG91cnM9YWJzRmxvb3IobWludXRlcy82MCksc2Vjb25kcyU9NjAsbWludXRlcyU9NjAseWVhcnM9YWJzRmxvb3IobW9udGhzLzEyKSxtb250aHMlPTEyLHM9c2Vjb25kcz9zZWNvbmRzLnRvRml4ZWQoMykucmVwbGFjZSgvXFwuPzArJC8sXCJcIik6XCJcIix0b3RhbFNpZ249dG90YWw8MD9cIi1cIjpcIlwiLHltU2lnbj1zaWduKHRoaXMuX21vbnRocykhPT1zaWduKHRvdGFsKT9cIi1cIjpcIlwiLGRheXNTaWduPXNpZ24odGhpcy5fZGF5cykhPT1zaWduKHRvdGFsKT9cIi1cIjpcIlwiLGhtc1NpZ249c2lnbih0aGlzLl9taWxsaXNlY29uZHMpIT09c2lnbih0b3RhbCk/XCItXCI6XCJcIix0b3RhbFNpZ24rXCJQXCIrKHllYXJzP3ltU2lnbit5ZWFycytcIllcIjpcIlwiKSsobW9udGhzP3ltU2lnbittb250aHMrXCJNXCI6XCJcIikrKGRheXM/ZGF5c1NpZ24rZGF5cytcIkRcIjpcIlwiKSsoaG91cnN8fG1pbnV0ZXN8fHNlY29uZHM/XCJUXCI6XCJcIikrKGhvdXJzP2htc1NpZ24raG91cnMrXCJIXCI6XCJcIikrKG1pbnV0ZXM/aG1zU2lnbittaW51dGVzK1wiTVwiOlwiXCIpKyhzZWNvbmRzP2htc1NpZ24rcytcIlNcIjpcIlwiKSk6XCJQMERcIn12YXIgcHJvdG8kMj1EdXJhdGlvbi5wcm90b3R5cGU7cmV0dXJuIHByb3RvJDIuaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZhbGlkfSxwcm90byQyLmFicz1mdW5jdGlvbigpe3ZhciBkYXRhPXRoaXMuX2RhdGE7cmV0dXJuIHRoaXMuX21pbGxpc2Vjb25kcz1tYXRoQWJzKHRoaXMuX21pbGxpc2Vjb25kcyksdGhpcy5fZGF5cz1tYXRoQWJzKHRoaXMuX2RheXMpLHRoaXMuX21vbnRocz1tYXRoQWJzKHRoaXMuX21vbnRocyksZGF0YS5taWxsaXNlY29uZHM9bWF0aEFicyhkYXRhLm1pbGxpc2Vjb25kcyksZGF0YS5zZWNvbmRzPW1hdGhBYnMoZGF0YS5zZWNvbmRzKSxkYXRhLm1pbnV0ZXM9bWF0aEFicyhkYXRhLm1pbnV0ZXMpLGRhdGEuaG91cnM9bWF0aEFicyhkYXRhLmhvdXJzKSxkYXRhLm1vbnRocz1tYXRoQWJzKGRhdGEubW9udGhzKSxkYXRhLnllYXJzPW1hdGhBYnMoZGF0YS55ZWFycyksdGhpc30scHJvdG8kMi5hZGQ9ZnVuY3Rpb24oaW5wdXQsdmFsdWUpe3JldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsaW5wdXQsdmFsdWUsMSl9LHByb3RvJDIuc3VidHJhY3Q9ZnVuY3Rpb24oaW5wdXQsdmFsdWUpe3JldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsaW5wdXQsdmFsdWUsLTEpfSxwcm90byQyLmFzPWZ1bmN0aW9uKHVuaXRzKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjt2YXIgZGF5cyxtb250aHMsbWlsbGlzZWNvbmRzPXRoaXMuX21pbGxpc2Vjb25kcztpZihcIm1vbnRoXCI9PT0odW5pdHM9bm9ybWFsaXplVW5pdHModW5pdHMpKXx8XCJxdWFydGVyXCI9PT11bml0c3x8XCJ5ZWFyXCI9PT11bml0cylzd2l0Y2goZGF5cz10aGlzLl9kYXlzK21pbGxpc2Vjb25kcy84NjRlNSxtb250aHM9dGhpcy5fbW9udGhzK2RheXNUb01vbnRocyhkYXlzKSx1bml0cyl7Y2FzZVwibW9udGhcIjpyZXR1cm4gbW9udGhzO2Nhc2VcInF1YXJ0ZXJcIjpyZXR1cm4gbW9udGhzLzM7Y2FzZVwieWVhclwiOnJldHVybiBtb250aHMvMTJ9ZWxzZSBzd2l0Y2goZGF5cz10aGlzLl9kYXlzK01hdGgucm91bmQobW9udGhzVG9EYXlzKHRoaXMuX21vbnRocykpLHVuaXRzKXtjYXNlXCJ3ZWVrXCI6cmV0dXJuIGRheXMvNyttaWxsaXNlY29uZHMvNjA0OGU1O2Nhc2VcImRheVwiOnJldHVybiBkYXlzK21pbGxpc2Vjb25kcy84NjRlNTtjYXNlXCJob3VyXCI6cmV0dXJuIDI0KmRheXMrbWlsbGlzZWNvbmRzLzM2ZTU7Y2FzZVwibWludXRlXCI6cmV0dXJuIDE0NDAqZGF5cyttaWxsaXNlY29uZHMvNmU0O2Nhc2VcInNlY29uZFwiOnJldHVybiA4NjQwMCpkYXlzK21pbGxpc2Vjb25kcy8xZTM7Y2FzZVwibWlsbGlzZWNvbmRcIjpyZXR1cm4gTWF0aC5mbG9vcig4NjRlNSpkYXlzKSttaWxsaXNlY29uZHM7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHVuaXQgXCIrdW5pdHMpfX0scHJvdG8kMi5hc01pbGxpc2Vjb25kcz1hc01pbGxpc2Vjb25kcyxwcm90byQyLmFzU2Vjb25kcz1hc1NlY29uZHMscHJvdG8kMi5hc01pbnV0ZXM9YXNNaW51dGVzLHByb3RvJDIuYXNIb3Vycz1hc0hvdXJzLHByb3RvJDIuYXNEYXlzPWFzRGF5cyxwcm90byQyLmFzV2Vla3M9YXNXZWVrcyxwcm90byQyLmFzTW9udGhzPWFzTW9udGhzLHByb3RvJDIuYXNRdWFydGVycz1hc1F1YXJ0ZXJzLHByb3RvJDIuYXNZZWFycz1hc1llYXJzLHByb3RvJDIudmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLl9taWxsaXNlY29uZHMrODY0ZTUqdGhpcy5fZGF5cyt0aGlzLl9tb250aHMlMTIqMjU5MmU2KzMxNTM2ZTYqdG9JbnQodGhpcy5fbW9udGhzLzEyKTpOYU59LHByb3RvJDIuX2J1YmJsZT1mdW5jdGlvbigpe3ZhciBzZWNvbmRzLG1pbnV0ZXMsaG91cnMseWVhcnMsbW9udGhzRnJvbURheXMsbWlsbGlzZWNvbmRzPXRoaXMuX21pbGxpc2Vjb25kcyxkYXlzPXRoaXMuX2RheXMsbW9udGhzPXRoaXMuX21vbnRocyxkYXRhPXRoaXMuX2RhdGE7cmV0dXJuIG1pbGxpc2Vjb25kcz49MCYmZGF5cz49MCYmbW9udGhzPj0wfHxtaWxsaXNlY29uZHM8PTAmJmRheXM8PTAmJm1vbnRoczw9MHx8KG1pbGxpc2Vjb25kcys9ODY0ZTUqYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzKStkYXlzKSxkYXlzPTAsbW9udGhzPTApLGRhdGEubWlsbGlzZWNvbmRzPW1pbGxpc2Vjb25kcyUxZTMsc2Vjb25kcz1hYnNGbG9vcihtaWxsaXNlY29uZHMvMWUzKSxkYXRhLnNlY29uZHM9c2Vjb25kcyU2MCxtaW51dGVzPWFic0Zsb29yKHNlY29uZHMvNjApLGRhdGEubWludXRlcz1taW51dGVzJTYwLGhvdXJzPWFic0Zsb29yKG1pbnV0ZXMvNjApLGRhdGEuaG91cnM9aG91cnMlMjQsZGF5cys9YWJzRmxvb3IoaG91cnMvMjQpLG1vbnRoc0Zyb21EYXlzPWFic0Zsb29yKGRheXNUb01vbnRocyhkYXlzKSksbW9udGhzKz1tb250aHNGcm9tRGF5cyxkYXlzLT1hYnNDZWlsKG1vbnRoc1RvRGF5cyhtb250aHNGcm9tRGF5cykpLHllYXJzPWFic0Zsb29yKG1vbnRocy8xMiksbW9udGhzJT0xMixkYXRhLmRheXM9ZGF5cyxkYXRhLm1vbnRocz1tb250aHMsZGF0YS55ZWFycz15ZWFycyx0aGlzfSxwcm90byQyLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHRoaXMpfSxwcm90byQyLmdldD1mdW5jdGlvbih1bml0cyl7cmV0dXJuIHVuaXRzPW5vcm1hbGl6ZVVuaXRzKHVuaXRzKSx0aGlzLmlzVmFsaWQoKT90aGlzW3VuaXRzK1wic1wiXSgpOk5hTn0scHJvdG8kMi5taWxsaXNlY29uZHM9bWlsbGlzZWNvbmRzLHByb3RvJDIuc2Vjb25kcz1zZWNvbmRzLHByb3RvJDIubWludXRlcz1taW51dGVzLHByb3RvJDIuaG91cnM9aG91cnMscHJvdG8kMi5kYXlzPWRheXMscHJvdG8kMi53ZWVrcz1mdW5jdGlvbigpe3JldHVybiBhYnNGbG9vcih0aGlzLmRheXMoKS83KX0scHJvdG8kMi5tb250aHM9bW9udGhzLHByb3RvJDIueWVhcnM9eWVhcnMscHJvdG8kMi5odW1hbml6ZT1mdW5jdGlvbihhcmdXaXRoU3VmZml4LGFyZ1RocmVzaG9sZHMpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTt2YXIgbG9jYWxlLG91dHB1dCx3aXRoU3VmZml4PSExLHRoPXRocmVzaG9sZHM7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGFyZ1dpdGhTdWZmaXgmJihhcmdUaHJlc2hvbGRzPWFyZ1dpdGhTdWZmaXgsYXJnV2l0aFN1ZmZpeD0hMSksXCJib29sZWFuXCI9PXR5cGVvZiBhcmdXaXRoU3VmZml4JiYod2l0aFN1ZmZpeD1hcmdXaXRoU3VmZml4KSxcIm9iamVjdFwiPT10eXBlb2YgYXJnVGhyZXNob2xkcyYmKHRoPU9iamVjdC5hc3NpZ24oe30sdGhyZXNob2xkcyxhcmdUaHJlc2hvbGRzKSxudWxsIT1hcmdUaHJlc2hvbGRzLnMmJm51bGw9PWFyZ1RocmVzaG9sZHMuc3MmJih0aC5zcz1hcmdUaHJlc2hvbGRzLnMtMSkpLGxvY2FsZT10aGlzLmxvY2FsZURhdGEoKSxvdXRwdXQ9ZnVuY3Rpb24ocG9zTmVnRHVyYXRpb24sd2l0aG91dFN1ZmZpeCx0aHJlc2hvbGRzLGxvY2FsZSl7dmFyIGR1cmF0aW9uPWNyZWF0ZUR1cmF0aW9uKHBvc05lZ0R1cmF0aW9uKS5hYnMoKSxzZWNvbmRzPXJvdW5kKGR1cmF0aW9uLmFzKFwic1wiKSksbWludXRlcz1yb3VuZChkdXJhdGlvbi5hcyhcIm1cIikpLGhvdXJzPXJvdW5kKGR1cmF0aW9uLmFzKFwiaFwiKSksZGF5cz1yb3VuZChkdXJhdGlvbi5hcyhcImRcIikpLG1vbnRocz1yb3VuZChkdXJhdGlvbi5hcyhcIk1cIikpLHdlZWtzPXJvdW5kKGR1cmF0aW9uLmFzKFwid1wiKSkseWVhcnM9cm91bmQoZHVyYXRpb24uYXMoXCJ5XCIpKSxhPXNlY29uZHM8PXRocmVzaG9sZHMuc3MmJltcInNcIixzZWNvbmRzXXx8c2Vjb25kczx0aHJlc2hvbGRzLnMmJltcInNzXCIsc2Vjb25kc118fG1pbnV0ZXM8PTEmJltcIm1cIl18fG1pbnV0ZXM8dGhyZXNob2xkcy5tJiZbXCJtbVwiLG1pbnV0ZXNdfHxob3Vyczw9MSYmW1wiaFwiXXx8aG91cnM8dGhyZXNob2xkcy5oJiZbXCJoaFwiLGhvdXJzXXx8ZGF5czw9MSYmW1wiZFwiXXx8ZGF5czx0aHJlc2hvbGRzLmQmJltcImRkXCIsZGF5c107cmV0dXJuIG51bGwhPXRocmVzaG9sZHMudyYmKGE9YXx8d2Vla3M8PTEmJltcIndcIl18fHdlZWtzPHRocmVzaG9sZHMudyYmW1wid3dcIix3ZWVrc10pLChhPWF8fG1vbnRoczw9MSYmW1wiTVwiXXx8bW9udGhzPHRocmVzaG9sZHMuTSYmW1wiTU1cIixtb250aHNdfHx5ZWFyczw9MSYmW1wieVwiXXx8W1wieXlcIix5ZWFyc10pWzJdPXdpdGhvdXRTdWZmaXgsYVszXT0rcG9zTmVnRHVyYXRpb24+MCxhWzRdPWxvY2FsZSxzdWJzdGl0dXRlVGltZUFnby5hcHBseShudWxsLGEpfSh0aGlzLCF3aXRoU3VmZml4LHRoLGxvY2FsZSksd2l0aFN1ZmZpeCYmKG91dHB1dD1sb2NhbGUucGFzdEZ1dHVyZSgrdGhpcyxvdXRwdXQpKSxsb2NhbGUucG9zdGZvcm1hdChvdXRwdXQpfSxwcm90byQyLnRvSVNPU3RyaW5nPXRvSVNPU3RyaW5nJDEscHJvdG8kMi50b1N0cmluZz10b0lTT1N0cmluZyQxLHByb3RvJDIudG9KU09OPXRvSVNPU3RyaW5nJDEscHJvdG8kMi5sb2NhbGU9bG9jYWxlLHByb3RvJDIubG9jYWxlRGF0YT1sb2NhbGVEYXRhLHByb3RvJDIudG9Jc29TdHJpbmc9ZGVwcmVjYXRlKFwidG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscylcIix0b0lTT1N0cmluZyQxKSxwcm90byQyLmxhbmc9bGFuZyxhZGRGb3JtYXRUb2tlbihcIlhcIiwwLDAsXCJ1bml4XCIpLGFkZEZvcm1hdFRva2VuKFwieFwiLDAsMCxcInZhbHVlT2ZcIiksYWRkUmVnZXhUb2tlbihcInhcIixtYXRjaFNpZ25lZCksYWRkUmVnZXhUb2tlbihcIlhcIiwvWystXT9cXGQrKFxcLlxcZHsxLDN9KT8vKSxhZGRQYXJzZVRva2VuKFwiWFwiLChmdW5jdGlvbihpbnB1dCxhcnJheSxjb25maWcpe2NvbmZpZy5fZD1uZXcgRGF0ZSgxZTMqcGFyc2VGbG9hdChpbnB1dCkpfSkpLGFkZFBhcnNlVG9rZW4oXCJ4XCIsKGZ1bmN0aW9uKGlucHV0LGFycmF5LGNvbmZpZyl7Y29uZmlnLl9kPW5ldyBEYXRlKHRvSW50KGlucHV0KSl9KSksaG9va3MudmVyc2lvbj1cIjIuMjkuMVwiLGhvb2tDYWxsYmFjaz1jcmVhdGVMb2NhbCxob29rcy5mbj1wcm90byxob29rcy5taW49ZnVuY3Rpb24oKXt2YXIgYXJncz1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gcGlja0J5KFwiaXNCZWZvcmVcIixhcmdzKX0saG9va3MubWF4PWZ1bmN0aW9uKCl7dmFyIGFyZ3M9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIHBpY2tCeShcImlzQWZ0ZXJcIixhcmdzKX0saG9va3Mubm93PWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93P0RhdGUubm93KCk6K25ldyBEYXRlfSxob29rcy51dGM9Y3JlYXRlVVRDLGhvb2tzLnVuaXg9ZnVuY3Rpb24oaW5wdXQpe3JldHVybiBjcmVhdGVMb2NhbCgxZTMqaW5wdXQpfSxob29rcy5tb250aHM9ZnVuY3Rpb24oZm9ybWF0LGluZGV4KXtyZXR1cm4gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LGluZGV4LFwibW9udGhzXCIpfSxob29rcy5pc0RhdGU9aXNEYXRlLGhvb2tzLmxvY2FsZT1nZXRTZXRHbG9iYWxMb2NhbGUsaG9va3MuaW52YWxpZD1jcmVhdGVJbnZhbGlkLGhvb2tzLmR1cmF0aW9uPWNyZWF0ZUR1cmF0aW9uLGhvb2tzLmlzTW9tZW50PWlzTW9tZW50LGhvb2tzLndlZWtkYXlzPWZ1bmN0aW9uKGxvY2FsZVNvcnRlZCxmb3JtYXQsaW5kZXgpe3JldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCxmb3JtYXQsaW5kZXgsXCJ3ZWVrZGF5c1wiKX0saG9va3MucGFyc2Vab25lPWZ1bmN0aW9uKCl7cmV0dXJuIGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYXJzZVpvbmUoKX0saG9va3MubG9jYWxlRGF0YT1nZXRMb2NhbGUsaG9va3MuaXNEdXJhdGlvbj1pc0R1cmF0aW9uLGhvb2tzLm1vbnRoc1Nob3J0PWZ1bmN0aW9uKGZvcm1hdCxpbmRleCl7cmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCxpbmRleCxcIm1vbnRoc1Nob3J0XCIpfSxob29rcy53ZWVrZGF5c01pbj1mdW5jdGlvbihsb2NhbGVTb3J0ZWQsZm9ybWF0LGluZGV4KXtyZXR1cm4gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsZm9ybWF0LGluZGV4LFwid2Vla2RheXNNaW5cIil9LGhvb2tzLmRlZmluZUxvY2FsZT1kZWZpbmVMb2NhbGUsaG9va3MudXBkYXRlTG9jYWxlPWZ1bmN0aW9uKG5hbWUsY29uZmlnKXtpZihudWxsIT1jb25maWcpe3ZhciBsb2NhbGUsdG1wTG9jYWxlLHBhcmVudENvbmZpZz1iYXNlQ29uZmlnO251bGwhPWxvY2FsZXNbbmFtZV0mJm51bGwhPWxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlP2xvY2FsZXNbbmFtZV0uc2V0KG1lcmdlQ29uZmlncyhsb2NhbGVzW25hbWVdLl9jb25maWcsY29uZmlnKSk6KG51bGwhPSh0bXBMb2NhbGU9bG9hZExvY2FsZShuYW1lKSkmJihwYXJlbnRDb25maWc9dG1wTG9jYWxlLl9jb25maWcpLGNvbmZpZz1tZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLGNvbmZpZyksbnVsbD09dG1wTG9jYWxlJiYoY29uZmlnLmFiYnI9bmFtZSksKGxvY2FsZT1uZXcgTG9jYWxlKGNvbmZpZykpLnBhcmVudExvY2FsZT1sb2NhbGVzW25hbWVdLGxvY2FsZXNbbmFtZV09bG9jYWxlKSxnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSl9ZWxzZSBudWxsIT1sb2NhbGVzW25hbWVdJiYobnVsbCE9bG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGU/KGxvY2FsZXNbbmFtZV09bG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUsbmFtZT09PWdldFNldEdsb2JhbExvY2FsZSgpJiZnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSkpOm51bGwhPWxvY2FsZXNbbmFtZV0mJmRlbGV0ZSBsb2NhbGVzW25hbWVdKTtyZXR1cm4gbG9jYWxlc1tuYW1lXX0saG9va3MubG9jYWxlcz1mdW5jdGlvbigpe3JldHVybiBrZXlzKGxvY2FsZXMpfSxob29rcy53ZWVrZGF5c1Nob3J0PWZ1bmN0aW9uKGxvY2FsZVNvcnRlZCxmb3JtYXQsaW5kZXgpe3JldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCxmb3JtYXQsaW5kZXgsXCJ3ZWVrZGF5c1Nob3J0XCIpfSxob29rcy5ub3JtYWxpemVVbml0cz1ub3JtYWxpemVVbml0cyxob29rcy5yZWxhdGl2ZVRpbWVSb3VuZGluZz1mdW5jdGlvbihyb3VuZGluZ0Z1bmN0aW9uKXtyZXR1cm4gdm9pZCAwPT09cm91bmRpbmdGdW5jdGlvbj9yb3VuZDpcImZ1bmN0aW9uXCI9PXR5cGVvZiByb3VuZGluZ0Z1bmN0aW9uJiYocm91bmQ9cm91bmRpbmdGdW5jdGlvbiwhMCl9LGhvb2tzLnJlbGF0aXZlVGltZVRocmVzaG9sZD1mdW5jdGlvbih0aHJlc2hvbGQsbGltaXQpe3JldHVybiB2b2lkIDAhPT10aHJlc2hvbGRzW3RocmVzaG9sZF0mJih2b2lkIDA9PT1saW1pdD90aHJlc2hvbGRzW3RocmVzaG9sZF06KHRocmVzaG9sZHNbdGhyZXNob2xkXT1saW1pdCxcInNcIj09PXRocmVzaG9sZCYmKHRocmVzaG9sZHMuc3M9bGltaXQtMSksITApKX0saG9va3MuY2FsZW5kYXJGb3JtYXQ9ZnVuY3Rpb24obXlNb21lbnQsbm93KXt2YXIgZGlmZj1teU1vbWVudC5kaWZmKG5vdyxcImRheXNcIiwhMCk7cmV0dXJuIGRpZmY8LTY/XCJzYW1lRWxzZVwiOmRpZmY8LTE/XCJsYXN0V2Vla1wiOmRpZmY8MD9cImxhc3REYXlcIjpkaWZmPDE/XCJzYW1lRGF5XCI6ZGlmZjwyP1wibmV4dERheVwiOmRpZmY8Nz9cIm5leHRXZWVrXCI6XCJzYW1lRWxzZVwifSxob29rcy5wcm90b3R5cGU9cHJvdG8saG9va3MuSFRNTDVfRk1UPXtEQVRFVElNRV9MT0NBTDpcIllZWVktTU0tRERUSEg6bW1cIixEQVRFVElNRV9MT0NBTF9TRUNPTkRTOlwiWVlZWS1NTS1ERFRISDptbTpzc1wiLERBVEVUSU1FX0xPQ0FMX01TOlwiWVlZWS1NTS1ERFRISDptbTpzcy5TU1NcIixEQVRFOlwiWVlZWS1NTS1ERFwiLFRJTUU6XCJISDptbVwiLFRJTUVfU0VDT05EUzpcIkhIOm1tOnNzXCIsVElNRV9NUzpcIkhIOm1tOnNzLlNTU1wiLFdFRUs6XCJHR0dHLVtXXVdXXCIsTU9OVEg6XCJZWVlZLU1NXCJ9LGhvb2tzfSgpfSkuY2FsbCh0aGlzLF9fd2VicGFja19yZXF1aXJlX18oMTU2KShtb2R1bGUpKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7bW9kdWxlLmV4cG9ydHM9X193ZWJwYWNrX3JlcXVpcmVfXygxNzYpKCl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe1widXNlIHN0cmljdFwiO3ZhciBtZW1vLGlzT2xkSUU9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09bWVtbyYmKG1lbW89Qm9vbGVhbih3aW5kb3cmJmRvY3VtZW50JiZkb2N1bWVudC5hbGwmJiF3aW5kb3cuYXRvYikpLG1lbW99LGdldFRhcmdldD1mdW5jdGlvbigpe3ZhciBtZW1vPXt9O3JldHVybiBmdW5jdGlvbih0YXJnZXQpe2lmKHZvaWQgMD09PW1lbW9bdGFyZ2V0XSl7dmFyIHN0eWxlVGFyZ2V0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTtpZih3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQmJnN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KXRyeXtzdHlsZVRhcmdldD1zdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZH1jYXRjaChlKXtzdHlsZVRhcmdldD1udWxsfW1lbW9bdGFyZ2V0XT1zdHlsZVRhcmdldH1yZXR1cm4gbWVtb1t0YXJnZXRdfX0oKSxzdHlsZXNJbkRvbT1bXTtmdW5jdGlvbiBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKXtmb3IodmFyIHJlc3VsdD0tMSxpPTA7aTxzdHlsZXNJbkRvbS5sZW5ndGg7aSsrKWlmKHN0eWxlc0luRG9tW2ldLmlkZW50aWZpZXI9PT1pZGVudGlmaWVyKXtyZXN1bHQ9aTticmVha31yZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LG9wdGlvbnMpe2Zvcih2YXIgaWRDb3VudE1hcD17fSxpZGVudGlmaWVycz1bXSxpPTA7aTxsaXN0Lmxlbmd0aDtpKyspe3ZhciBpdGVtPWxpc3RbaV0saWQ9b3B0aW9ucy5iYXNlP2l0ZW1bMF0rb3B0aW9ucy5iYXNlOml0ZW1bMF0sY291bnQ9aWRDb3VudE1hcFtpZF18fDAsaWRlbnRpZmllcj1cIlwiLmNvbmNhdChpZCxcIiBcIikuY29uY2F0KGNvdW50KTtpZENvdW50TWFwW2lkXT1jb3VudCsxO3ZhciBpbmRleD1nZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKSxvYmo9e2NzczppdGVtWzFdLG1lZGlhOml0ZW1bMl0sc291cmNlTWFwOml0ZW1bM119Oy0xIT09aW5kZXg/KHN0eWxlc0luRG9tW2luZGV4XS5yZWZlcmVuY2VzKyssc3R5bGVzSW5Eb21baW5kZXhdLnVwZGF0ZXIob2JqKSk6c3R5bGVzSW5Eb20ucHVzaCh7aWRlbnRpZmllcjppZGVudGlmaWVyLHVwZGF0ZXI6YWRkU3R5bGUob2JqLG9wdGlvbnMpLHJlZmVyZW5jZXM6MX0pLGlkZW50aWZpZXJzLnB1c2goaWRlbnRpZmllcil9cmV0dXJuIGlkZW50aWZpZXJzfWZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKXt2YXIgc3R5bGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpLGF0dHJpYnV0ZXM9b3B0aW9ucy5hdHRyaWJ1dGVzfHx7fTtpZih2b2lkIDA9PT1hdHRyaWJ1dGVzLm5vbmNlKXt2YXIgbm9uY2U9X193ZWJwYWNrX3JlcXVpcmVfXy5uYztub25jZSYmKGF0dHJpYnV0ZXMubm9uY2U9bm9uY2UpfWlmKE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goKGZ1bmN0aW9uKGtleSl7c3R5bGUuc2V0QXR0cmlidXRlKGtleSxhdHRyaWJ1dGVzW2tleV0pfSkpLFwiZnVuY3Rpb25cIj09dHlwZW9mIG9wdGlvbnMuaW5zZXJ0KW9wdGlvbnMuaW5zZXJ0KHN0eWxlKTtlbHNle3ZhciB0YXJnZXQ9Z2V0VGFyZ2V0KG9wdGlvbnMuaW5zZXJ0fHxcImhlYWRcIik7aWYoIXRhcmdldCl0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydCcgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpO3RhcmdldC5hcHBlbmRDaGlsZChzdHlsZSl9cmV0dXJuIHN0eWxlfXZhciB0ZXh0U3RvcmUscmVwbGFjZVRleHQ9KHRleHRTdG9yZT1bXSxmdW5jdGlvbihpbmRleCxyZXBsYWNlbWVudCl7cmV0dXJuIHRleHRTdG9yZVtpbmRleF09cmVwbGFjZW1lbnQsdGV4dFN0b3JlLmZpbHRlcihCb29sZWFuKS5qb2luKFwiXFxuXCIpfSk7ZnVuY3Rpb24gYXBwbHlUb1NpbmdsZXRvblRhZyhzdHlsZSxpbmRleCxyZW1vdmUsb2JqKXt2YXIgY3NzPXJlbW92ZT9cIlwiOm9iai5tZWRpYT9cIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLFwiIHtcIikuY29uY2F0KG9iai5jc3MsXCJ9XCIpOm9iai5jc3M7aWYoc3R5bGUuc3R5bGVTaGVldClzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQ9cmVwbGFjZVRleHQoaW5kZXgsY3NzKTtlbHNle3ZhciBjc3NOb2RlPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcyksY2hpbGROb2Rlcz1zdHlsZS5jaGlsZE5vZGVzO2NoaWxkTm9kZXNbaW5kZXhdJiZzdHlsZS5yZW1vdmVDaGlsZChjaGlsZE5vZGVzW2luZGV4XSksY2hpbGROb2Rlcy5sZW5ndGg/c3R5bGUuaW5zZXJ0QmVmb3JlKGNzc05vZGUsY2hpbGROb2Rlc1tpbmRleF0pOnN0eWxlLmFwcGVuZENoaWxkKGNzc05vZGUpfX1mdW5jdGlvbiBhcHBseVRvVGFnKHN0eWxlLG9wdGlvbnMsb2JqKXt2YXIgY3NzPW9iai5jc3MsbWVkaWE9b2JqLm1lZGlhLHNvdXJjZU1hcD1vYmouc291cmNlTWFwO2lmKG1lZGlhP3N0eWxlLnNldEF0dHJpYnV0ZShcIm1lZGlhXCIsbWVkaWEpOnN0eWxlLnJlbW92ZUF0dHJpYnV0ZShcIm1lZGlhXCIpLHNvdXJjZU1hcCYmYnRvYSYmKGNzcys9XCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpLFwiICovXCIpKSxzdHlsZS5zdHlsZVNoZWV0KXN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dD1jc3M7ZWxzZXtmb3IoO3N0eWxlLmZpcnN0Q2hpbGQ7KXN0eWxlLnJlbW92ZUNoaWxkKHN0eWxlLmZpcnN0Q2hpbGQpO3N0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpfX12YXIgc2luZ2xldG9uPW51bGwsc2luZ2xldG9uQ291bnRlcj0wO2Z1bmN0aW9uIGFkZFN0eWxlKG9iaixvcHRpb25zKXt2YXIgc3R5bGUsdXBkYXRlLHJlbW92ZTtpZihvcHRpb25zLnNpbmdsZXRvbil7dmFyIHN0eWxlSW5kZXg9c2luZ2xldG9uQ291bnRlcisrO3N0eWxlPXNpbmdsZXRvbnx8KHNpbmdsZXRvbj1pbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykpLHVwZGF0ZT1hcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCxzdHlsZSxzdHlsZUluZGV4LCExKSxyZW1vdmU9YXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsc3R5bGUsc3R5bGVJbmRleCwhMCl9ZWxzZSBzdHlsZT1pbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucyksdXBkYXRlPWFwcGx5VG9UYWcuYmluZChudWxsLHN0eWxlLG9wdGlvbnMpLHJlbW92ZT1mdW5jdGlvbigpeyFmdW5jdGlvbihzdHlsZSl7aWYobnVsbD09PXN0eWxlLnBhcmVudE5vZGUpcmV0dXJuITE7c3R5bGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZSl9KHN0eWxlKX07cmV0dXJuIHVwZGF0ZShvYmopLGZ1bmN0aW9uKG5ld09iail7aWYobmV3T2JqKXtpZihuZXdPYmouY3NzPT09b2JqLmNzcyYmbmV3T2JqLm1lZGlhPT09b2JqLm1lZGlhJiZuZXdPYmouc291cmNlTWFwPT09b2JqLnNvdXJjZU1hcClyZXR1cm47dXBkYXRlKG9iaj1uZXdPYmopfWVsc2UgcmVtb3ZlKCl9fW1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKGxpc3Qsb3B0aW9ucyl7KG9wdGlvbnM9b3B0aW9uc3x8e30pLnNpbmdsZXRvbnx8XCJib29sZWFuXCI9PXR5cGVvZiBvcHRpb25zLnNpbmdsZXRvbnx8KG9wdGlvbnMuc2luZ2xldG9uPWlzT2xkSUUoKSk7dmFyIGxhc3RJZGVudGlmaWVycz1tb2R1bGVzVG9Eb20obGlzdD1saXN0fHxbXSxvcHRpb25zKTtyZXR1cm4gZnVuY3Rpb24obmV3TGlzdCl7aWYobmV3TGlzdD1uZXdMaXN0fHxbXSxcIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3TGlzdCkpe2Zvcih2YXIgaT0wO2k8bGFzdElkZW50aWZpZXJzLmxlbmd0aDtpKyspe3ZhciBpbmRleD1nZXRJbmRleEJ5SWRlbnRpZmllcihsYXN0SWRlbnRpZmllcnNbaV0pO3N0eWxlc0luRG9tW2luZGV4XS5yZWZlcmVuY2VzLS19Zm9yKHZhciBuZXdMYXN0SWRlbnRpZmllcnM9bW9kdWxlc1RvRG9tKG5ld0xpc3Qsb3B0aW9ucyksX2k9MDtfaTxsYXN0SWRlbnRpZmllcnMubGVuZ3RoO19pKyspe3ZhciBfaW5kZXg9Z2V0SW5kZXhCeUlkZW50aWZpZXIobGFzdElkZW50aWZpZXJzW19pXSk7MD09PXN0eWxlc0luRG9tW19pbmRleF0ucmVmZXJlbmNlcyYmKHN0eWxlc0luRG9tW19pbmRleF0udXBkYXRlcigpLHN0eWxlc0luRG9tLnNwbGljZShfaW5kZXgsMSkpfWxhc3RJZGVudGlmaWVycz1uZXdMYXN0SWRlbnRpZmllcnN9fX19LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe1widXNlIHN0cmljdFwiO21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKHVzZVNvdXJjZU1hcCl7dmFyIGxpc3Q9W107cmV0dXJuIGxpc3QudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoKGZ1bmN0aW9uKGl0ZW0pe3ZhciBjb250ZW50PWZ1bmN0aW9uKGl0ZW0sdXNlU291cmNlTWFwKXt2YXIgY29udGVudD1pdGVtWzFdfHxcIlwiLGNzc01hcHBpbmc9aXRlbVszXTtpZighY3NzTWFwcGluZylyZXR1cm4gY29udGVudDtpZih1c2VTb3VyY2VNYXAmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGJ0b2Epe3ZhciBzb3VyY2VNYXBwaW5nPShzb3VyY2VNYXA9Y3NzTWFwcGluZyxiYXNlNjQ9YnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSxkYXRhPVwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCksXCIvKiMgXCIuY29uY2F0KGRhdGEsXCIgKi9cIikpLHNvdXJjZVVSTHM9Y3NzTWFwcGluZy5zb3VyY2VzLm1hcCgoZnVuY3Rpb24oc291cmNlKXtyZXR1cm5cIi8qIyBzb3VyY2VVUkw9XCIuY29uY2F0KGNzc01hcHBpbmcuc291cmNlUm9vdHx8XCJcIikuY29uY2F0KHNvdXJjZSxcIiAqL1wiKX0pKTtyZXR1cm5bY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oXCJcXG5cIil9dmFyIHNvdXJjZU1hcCxiYXNlNjQsZGF0YTtyZXR1cm5bY29udGVudF0uam9pbihcIlxcblwiKX0oaXRlbSx1c2VTb3VyY2VNYXApO3JldHVybiBpdGVtWzJdP1wiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLFwiIHtcIikuY29uY2F0KGNvbnRlbnQsXCJ9XCIpOmNvbnRlbnR9KSkuam9pbihcIlwiKX0sbGlzdC5pPWZ1bmN0aW9uKG1vZHVsZXMsbWVkaWFRdWVyeSxkZWR1cGUpe1wic3RyaW5nXCI9PXR5cGVvZiBtb2R1bGVzJiYobW9kdWxlcz1bW251bGwsbW9kdWxlcyxcIlwiXV0pO3ZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzPXt9O2lmKGRlZHVwZSlmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKyl7dmFyIGlkPXRoaXNbaV1bMF07bnVsbCE9aWQmJihhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXT0hMCl9Zm9yKHZhciBfaT0wO19pPG1vZHVsZXMubGVuZ3RoO19pKyspe3ZhciBpdGVtPVtdLmNvbmNhdChtb2R1bGVzW19pXSk7ZGVkdXBlJiZhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dfHwobWVkaWFRdWVyeSYmKGl0ZW1bMl0/aXRlbVsyXT1cIlwiLmNvbmNhdChtZWRpYVF1ZXJ5LFwiIGFuZCBcIikuY29uY2F0KGl0ZW1bMl0pOml0ZW1bMl09bWVkaWFRdWVyeSksbGlzdC5wdXNoKGl0ZW0pKX19LGxpc3R9fSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fLF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fOyFmdW5jdGlvbihmYWN0b3J5KXtpZih2b2lkIDA9PT0oX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX189XCJmdW5jdGlvblwiPT10eXBlb2YoX19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fPWZhY3RvcnkpP19fV0VCUEFDS19BTURfREVGSU5FX0ZBQ1RPUllfXy5jYWxsKGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyxleHBvcnRzLG1vZHVsZSk6X19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fKXx8KG1vZHVsZS5leHBvcnRzPV9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fKSwhMCxtb2R1bGUuZXhwb3J0cz1mYWN0b3J5KCksISEwKXt2YXIgT2xkQ29va2llcz13aW5kb3cuQ29va2llcyxhcGk9d2luZG93LkNvb2tpZXM9ZmFjdG9yeSgpO2FwaS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5Db29raWVzPU9sZENvb2tpZXMsYXBpfX19KChmdW5jdGlvbigpe2Z1bmN0aW9uIGV4dGVuZCgpe2Zvcih2YXIgaT0wLHJlc3VsdD17fTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXt2YXIgYXR0cmlidXRlcz1hcmd1bWVudHNbaV07Zm9yKHZhciBrZXkgaW4gYXR0cmlidXRlcylyZXN1bHRba2V5XT1hdHRyaWJ1dGVzW2tleV19cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBkZWNvZGUocyl7cmV0dXJuIHMucmVwbGFjZSgvKCVbMC05QS1aXXsyfSkrL2csZGVjb2RlVVJJQ29tcG9uZW50KX1yZXR1cm4gZnVuY3Rpb24gaW5pdChjb252ZXJ0ZXIpe2Z1bmN0aW9uIGFwaSgpe31mdW5jdGlvbiBzZXQoa2V5LHZhbHVlLGF0dHJpYnV0ZXMpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCl7XCJudW1iZXJcIj09dHlwZW9mKGF0dHJpYnV0ZXM9ZXh0ZW5kKHtwYXRoOlwiL1wifSxhcGkuZGVmYXVsdHMsYXR0cmlidXRlcykpLmV4cGlyZXMmJihhdHRyaWJ1dGVzLmV4cGlyZXM9bmV3IERhdGUoMSpuZXcgRGF0ZSs4NjRlNSphdHRyaWJ1dGVzLmV4cGlyZXMpKSxhdHRyaWJ1dGVzLmV4cGlyZXM9YXR0cmlidXRlcy5leHBpcmVzP2F0dHJpYnV0ZXMuZXhwaXJlcy50b1VUQ1N0cmluZygpOlwiXCI7dHJ5e3ZhciByZXN1bHQ9SlNPTi5zdHJpbmdpZnkodmFsdWUpOy9eW1xce1xcW10vLnRlc3QocmVzdWx0KSYmKHZhbHVlPXJlc3VsdCl9Y2F0Y2goZSl7fXZhbHVlPWNvbnZlcnRlci53cml0ZT9jb252ZXJ0ZXIud3JpdGUodmFsdWUsa2V5KTplbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKHZhbHVlKSkucmVwbGFjZSgvJSgyM3wyNHwyNnwyQnwzQXwzQ3wzRXwzRHwyRnwzRnw0MHw1Qnw1RHw1RXw2MHw3Qnw3RHw3QykvZyxkZWNvZGVVUklDb21wb25lbnQpLGtleT1lbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGtleSkpLnJlcGxhY2UoLyUoMjN8MjR8MjZ8MkJ8NUV8NjB8N0MpL2csZGVjb2RlVVJJQ29tcG9uZW50KS5yZXBsYWNlKC9bXFwoXFwpXS9nLGVzY2FwZSk7dmFyIHN0cmluZ2lmaWVkQXR0cmlidXRlcz1cIlwiO2Zvcih2YXIgYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVzKWF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0mJihzdHJpbmdpZmllZEF0dHJpYnV0ZXMrPVwiOyBcIithdHRyaWJ1dGVOYW1lLCEwIT09YXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXSYmKHN0cmluZ2lmaWVkQXR0cmlidXRlcys9XCI9XCIrYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXS5zcGxpdChcIjtcIilbMF0pKTtyZXR1cm4gZG9jdW1lbnQuY29va2llPWtleStcIj1cIit2YWx1ZStzdHJpbmdpZmllZEF0dHJpYnV0ZXN9fWZ1bmN0aW9uIGdldChrZXksanNvbil7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50KXtmb3IodmFyIGphcj17fSxjb29raWVzPWRvY3VtZW50LmNvb2tpZT9kb2N1bWVudC5jb29raWUuc3BsaXQoXCI7IFwiKTpbXSxpPTA7aTxjb29raWVzLmxlbmd0aDtpKyspe3ZhciBwYXJ0cz1jb29raWVzW2ldLnNwbGl0KFwiPVwiKSxjb29raWU9cGFydHMuc2xpY2UoMSkuam9pbihcIj1cIik7anNvbnx8J1wiJyE9PWNvb2tpZS5jaGFyQXQoMCl8fChjb29raWU9Y29va2llLnNsaWNlKDEsLTEpKTt0cnl7dmFyIG5hbWU9ZGVjb2RlKHBhcnRzWzBdKTtpZihjb29raWU9KGNvbnZlcnRlci5yZWFkfHxjb252ZXJ0ZXIpKGNvb2tpZSxuYW1lKXx8ZGVjb2RlKGNvb2tpZSksanNvbil0cnl7Y29va2llPUpTT04ucGFyc2UoY29va2llKX1jYXRjaChlKXt9aWYoamFyW25hbWVdPWNvb2tpZSxrZXk9PT1uYW1lKWJyZWFrfWNhdGNoKGUpe319cmV0dXJuIGtleT9qYXJba2V5XTpqYXJ9fXJldHVybiBhcGkuc2V0PXNldCxhcGkuZ2V0PWZ1bmN0aW9uKGtleSl7cmV0dXJuIGdldChrZXksITEpfSxhcGkuZ2V0SlNPTj1mdW5jdGlvbihrZXkpe3JldHVybiBnZXQoa2V5LCEwKX0sYXBpLnJlbW92ZT1mdW5jdGlvbihrZXksYXR0cmlidXRlcyl7c2V0KGtleSxcIlwiLGV4dGVuZChhdHRyaWJ1dGVzLHtleHBpcmVzOi0xfSkpfSxhcGkuZGVmYXVsdHM9e30sYXBpLndpdGhDb252ZXJ0ZXI9aW5pdCxhcGl9KChmdW5jdGlvbigpe30pKX0pKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7bW9tZW50LmRlZmluZUxvY2FsZShcImFmXCIse21vbnRoczpcIkphbnVhcmllX0ZlYnJ1YXJpZV9NYWFydF9BcHJpbF9NZWlfSnVuaWVfSnVsaWVfQXVndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGVzZW1iZXJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJKYW5fRmViX01ydF9BcHJfTWVpX0p1bl9KdWxfQXVnX1NlcF9Pa3RfTm92X0Rlc1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcIlNvbmRhZ19NYWFuZGFnX0RpbnNkYWdfV29lbnNkYWdfRG9uZGVyZGFnX1ZyeWRhZ19TYXRlcmRhZ1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiU29uX01hYV9EaW5fV29lX0Rvbl9WcnlfU2F0XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiU29fTWFfRGlfV29fRG9fVnJfU2FcIi5zcGxpdChcIl9cIiksbWVyaWRpZW1QYXJzZTovdm18bm0vaSxpc1BNOmZ1bmN0aW9uKGlucHV0KXtyZXR1cm4vXm5tJC9pLnRlc3QoaW5wdXQpfSxtZXJpZGllbTpmdW5jdGlvbihob3VycyxtaW51dGVzLGlzTG93ZXIpe3JldHVybiBob3VyczwxMj9pc0xvd2VyP1widm1cIjpcIlZNXCI6aXNMb3dlcj9cIm5tXCI6XCJOTVwifSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJbVmFuZGFnIG9tXSBMVFwiLG5leHREYXk6XCJbTcO0cmUgb21dIExUXCIsbmV4dFdlZWs6XCJkZGRkIFtvbV0gTFRcIixsYXN0RGF5OlwiW0dpc3RlciBvbV0gTFRcIixsYXN0V2VlazpcIltMYWFzXSBkZGRkIFtvbV0gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJvb3IgJXNcIixwYXN0OlwiJXMgZ2VsZWRlXCIsczpcIiduIHBhYXIgc2Vrb25kZXNcIixzczpcIiVkIHNla29uZGVzXCIsbTpcIiduIG1pbnV1dFwiLG1tOlwiJWQgbWludXRlXCIsaDpcIiduIHV1clwiLGhoOlwiJWQgdXJlXCIsZDpcIiduIGRhZ1wiLGRkOlwiJWQgZGFlXCIsTTpcIiduIG1hYW5kXCIsTU06XCIlZCBtYWFuZGVcIix5OlwiJ24gamFhclwiLHl5OlwiJWQgamFhclwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfShzdGV8ZGUpLyxvcmRpbmFsOmZ1bmN0aW9uKG51bWJlcil7cmV0dXJuIG51bWJlcisoMT09PW51bWJlcnx8OD09PW51bWJlcnx8bnVtYmVyPj0yMD9cInN0ZVwiOlwiZGVcIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHN5bWJvbE1hcD17MTpcItmhXCIsMjpcItmiXCIsMzpcItmjXCIsNDpcItmkXCIsNTpcItmlXCIsNjpcItmmXCIsNzpcItmnXCIsODpcItmoXCIsOTpcItmpXCIsMDpcItmgXCJ9LG51bWJlck1hcD17XCLZoVwiOlwiMVwiLFwi2aJcIjpcIjJcIixcItmjXCI6XCIzXCIsXCLZpFwiOlwiNFwiLFwi2aVcIjpcIjVcIixcItmmXCI6XCI2XCIsXCLZp1wiOlwiN1wiLFwi2ahcIjpcIjhcIixcItmpXCI6XCI5XCIsXCLZoFwiOlwiMFwifSxwbHVyYWxGb3JtPWZ1bmN0aW9uKG4pe3JldHVybiAwPT09bj8wOjE9PT1uPzE6Mj09PW4/MjpuJTEwMD49MyYmbiUxMDA8PTEwPzM6biUxMDA+PTExPzQ6NX0scGx1cmFscz17czpbXCLYo9mC2YQg2YXZhiDYq9in2YbZitipXCIsXCLYq9in2YbZitipINmI2KfYrdiv2KlcIixbXCLYq9in2YbZitiq2KfZhlwiLFwi2KvYp9mG2YrYqtmK2YZcIl0sXCIlZCDYq9mI2KfZhlwiLFwiJWQg2KvYp9mG2YrYqVwiLFwiJWQg2KvYp9mG2YrYqVwiXSxtOltcItij2YLZhCDZhdmGINiv2YLZitmC2KlcIixcItiv2YLZitmC2Kkg2YjYp9it2K/YqVwiLFtcItiv2YLZitmC2KrYp9mGXCIsXCLYr9mC2YrZgtiq2YrZhlwiXSxcIiVkINiv2YLYp9im2YJcIixcIiVkINiv2YLZitmC2KlcIixcIiVkINiv2YLZitmC2KlcIl0saDpbXCLYo9mC2YQg2YXZhiDYs9in2LnYqVwiLFwi2LPYp9i52Kkg2YjYp9it2K/YqVwiLFtcItiz2KfYudiq2KfZhlwiLFwi2LPYp9i52KrZitmGXCJdLFwiJWQg2LPYp9i52KfYqlwiLFwiJWQg2LPYp9i52KlcIixcIiVkINiz2KfYudipXCJdLGQ6W1wi2KPZgtmEINmF2YYg2YrZiNmFXCIsXCLZitmI2YUg2YjYp9it2K9cIixbXCLZitmI2YXYp9mGXCIsXCLZitmI2YXZitmGXCJdLFwiJWQg2KPZitin2YVcIixcIiVkINmK2YjZhdmL2KdcIixcIiVkINmK2YjZhVwiXSxNOltcItij2YLZhCDZhdmGINi02YfYsVwiLFwi2LTZh9ixINmI2KfYrdivXCIsW1wi2LTZh9ix2KfZhlwiLFwi2LTZh9ix2YrZhlwiXSxcIiVkINij2LTZh9ixXCIsXCIlZCDYtNmH2LHYp1wiLFwiJWQg2LTZh9ixXCJdLHk6W1wi2KPZgtmEINmF2YYg2LnYp9mFXCIsXCLYudin2YUg2YjYp9it2K9cIixbXCLYudin2YXYp9mGXCIsXCLYudin2YXZitmGXCJdLFwiJWQg2KPYudmI2KfZhVwiLFwiJWQg2LnYp9mF2YvYp1wiLFwiJWQg2LnYp9mFXCJdfSxwbHVyYWxpemU9ZnVuY3Rpb24odSl7cmV0dXJuIGZ1bmN0aW9uKG51bWJlcix3aXRob3V0U3VmZml4LHN0cmluZyxpc0Z1dHVyZSl7dmFyIGY9cGx1cmFsRm9ybShudW1iZXIpLHN0cj1wbHVyYWxzW3VdW3BsdXJhbEZvcm0obnVtYmVyKV07cmV0dXJuIDI9PT1mJiYoc3RyPXN0clt3aXRob3V0U3VmZml4PzA6MV0pLHN0ci5yZXBsYWNlKC8lZC9pLG51bWJlcil9fSxtb250aHM9W1wi2YrZhtin2YrYsVwiLFwi2YHYqNix2KfZitixXCIsXCLZhdin2LHYs1wiLFwi2KPYqNix2YrZhFwiLFwi2YXYp9mK2YhcIixcItmK2YjZhtmK2YhcIixcItmK2YjZhNmK2YhcIixcItij2LrYs9i32LNcIixcItiz2KjYqtmF2KjYsVwiLFwi2KPZg9iq2YjYqNixXCIsXCLZhtmI2YHZhdio2LFcIixcItiv2YrYs9mF2KjYsVwiXTttb21lbnQuZGVmaW5lTG9jYWxlKFwiYXJcIix7bW9udGhzOm1vbnRocyxtb250aHNTaG9ydDptb250aHMsd2Vla2RheXM6XCLYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KpcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcItij2K3Yr1/Ypdir2YbZitmGX9ir2YTYp9ir2KfYoV/Yo9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi2K1f2YZf2Ktf2LFf2K5f2Kxf2LNcIi5zcGxpdChcIl9cIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiRC/igI9NL+KAj1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCBEIE1NTU0gWVlZWSBISDptbVwifSxtZXJpZGllbVBhcnNlOi/YtXzZhS8saXNQTTpmdW5jdGlvbihpbnB1dCl7cmV0dXJuXCLZhVwiPT09aW5wdXR9LG1lcmlkaWVtOmZ1bmN0aW9uKGhvdXIsbWludXRlLGlzTG93ZXIpe3JldHVybiBob3VyPDEyP1wi2LVcIjpcItmFXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW9in2YTZitmI2YUg2LnZhtivINin2YTYs9in2LnYqV0gTFRcIixuZXh0RGF5OlwiW9i62K/Zi9inINi52YbYryDYp9mE2LPYp9i52KldIExUXCIsbmV4dFdlZWs6XCJkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVFwiLGxhc3REYXk6XCJb2KPZhdizINi52YbYryDYp9mE2LPYp9i52KldIExUXCIsbGFzdFdlZWs6XCJkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcItio2LnYryAlc1wiLHBhc3Q6XCLZhdmG2LAgJXNcIixzOnBsdXJhbGl6ZShcInNcIiksc3M6cGx1cmFsaXplKFwic1wiKSxtOnBsdXJhbGl6ZShcIm1cIiksbW06cGx1cmFsaXplKFwibVwiKSxoOnBsdXJhbGl6ZShcImhcIiksaGg6cGx1cmFsaXplKFwiaFwiKSxkOnBsdXJhbGl6ZShcImRcIiksZGQ6cGx1cmFsaXplKFwiZFwiKSxNOnBsdXJhbGl6ZShcIk1cIiksTU06cGx1cmFsaXplKFwiTVwiKSx5OnBsdXJhbGl6ZShcInlcIikseXk6cGx1cmFsaXplKFwieVwiKX0scHJlcGFyc2U6ZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vZodmi2aPZpNml2abZp9mo2anZoF0vZywoZnVuY3Rpb24obWF0Y2gpe3JldHVybiBudW1iZXJNYXBbbWF0Y2hdfSkpLnJlcGxhY2UoL9iML2csXCIsXCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywoZnVuY3Rpb24obWF0Y2gpe3JldHVybiBzeW1ib2xNYXBbbWF0Y2hdfSkpLnJlcGxhY2UoLywvZyxcItiMXCIpfSx3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjt2YXIgcGx1cmFsRm9ybT1mdW5jdGlvbihuKXtyZXR1cm4gMD09PW4/MDoxPT09bj8xOjI9PT1uPzI6biUxMDA+PTMmJm4lMTAwPD0xMD8zOm4lMTAwPj0xMT80OjV9LHBsdXJhbHM9e3M6W1wi2KPZgtmEINmF2YYg2KvYp9mG2YrYqVwiLFwi2KvYp9mG2YrYqSDZiNin2K3Yr9ipXCIsW1wi2KvYp9mG2YrYqtin2YZcIixcItir2KfZhtmK2KrZitmGXCJdLFwiJWQg2KvZiNin2YZcIixcIiVkINir2KfZhtmK2KlcIixcIiVkINir2KfZhtmK2KlcIl0sbTpbXCLYo9mC2YQg2YXZhiDYr9mC2YrZgtipXCIsXCLYr9mC2YrZgtipINmI2KfYrdiv2KlcIixbXCLYr9mC2YrZgtiq2KfZhlwiLFwi2K/ZgtmK2YLYqtmK2YZcIl0sXCIlZCDYr9mC2KfYptmCXCIsXCIlZCDYr9mC2YrZgtipXCIsXCIlZCDYr9mC2YrZgtipXCJdLGg6W1wi2KPZgtmEINmF2YYg2LPYp9i52KlcIixcItiz2KfYudipINmI2KfYrdiv2KlcIixbXCLYs9in2LnYqtin2YZcIixcItiz2KfYudiq2YrZhlwiXSxcIiVkINiz2KfYudin2KpcIixcIiVkINiz2KfYudipXCIsXCIlZCDYs9in2LnYqVwiXSxkOltcItij2YLZhCDZhdmGINmK2YjZhVwiLFwi2YrZiNmFINmI2KfYrdivXCIsW1wi2YrZiNmF2KfZhlwiLFwi2YrZiNmF2YrZhlwiXSxcIiVkINij2YrYp9mFXCIsXCIlZCDZitmI2YXZi9inXCIsXCIlZCDZitmI2YVcIl0sTTpbXCLYo9mC2YQg2YXZhiDYtNmH2LFcIixcIti02YfYsSDZiNin2K3Yr1wiLFtcIti02YfYsdin2YZcIixcIti02YfYsdmK2YZcIl0sXCIlZCDYo9i02YfYsVwiLFwiJWQg2LTZh9ix2KdcIixcIiVkINi02YfYsVwiXSx5OltcItij2YLZhCDZhdmGINi52KfZhVwiLFwi2LnYp9mFINmI2KfYrdivXCIsW1wi2LnYp9mF2KfZhlwiLFwi2LnYp9mF2YrZhlwiXSxcIiVkINij2LnZiNin2YVcIixcIiVkINi52KfZhdmL2KdcIixcIiVkINi52KfZhVwiXX0scGx1cmFsaXplPWZ1bmN0aW9uKHUpe3JldHVybiBmdW5jdGlvbihudW1iZXIsd2l0aG91dFN1ZmZpeCxzdHJpbmcsaXNGdXR1cmUpe3ZhciBmPXBsdXJhbEZvcm0obnVtYmVyKSxzdHI9cGx1cmFsc1t1XVtwbHVyYWxGb3JtKG51bWJlcildO3JldHVybiAyPT09ZiYmKHN0cj1zdHJbd2l0aG91dFN1ZmZpeD8wOjFdKSxzdHIucmVwbGFjZSgvJWQvaSxudW1iZXIpfX0sbW9udGhzPVtcItis2KfZhtmB2YpcIixcItmB2YrZgdix2YpcIixcItmF2KfYsdizXCIsXCLYo9mB2LHZitmEXCIsXCLZhdin2YpcIixcItis2YjYp9mGXCIsXCLYrNmI2YrZhNmK2KlcIixcItij2YjYqlwiLFwi2LPYqNiq2YXYqNixXCIsXCLYo9mD2KrZiNio2LFcIixcItmG2YjZgdmF2KjYsVwiLFwi2K/Zitiz2YXYqNixXCJdO21vbWVudC5kZWZpbmVMb2NhbGUoXCJhci1kelwiLHttb250aHM6bW9udGhzLG1vbnRoc1Nob3J0Om1vbnRocyx3ZWVrZGF5czpcItin2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi2KPYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9ij2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KpcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLYrV/Zhl/Yq1/YsV/Yrl/YrF/Ys1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJEL+KAj00v4oCPWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LG1lcmlkaWVtUGFyc2U6L9i1fNmFLyxpc1BNOmZ1bmN0aW9uKGlucHV0KXtyZXR1cm5cItmFXCI9PT1pbnB1dH0sbWVyaWRpZW06ZnVuY3Rpb24oaG91cixtaW51dGUsaXNMb3dlcil7cmV0dXJuIGhvdXI8MTI/XCLYtVwiOlwi2YVcIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJb2KfZhNmK2YjZhSDYudmG2K8g2KfZhNiz2KfYudipXSBMVFwiLG5leHREYXk6XCJb2LrYr9mL2Kcg2LnZhtivINin2YTYs9in2LnYqV0gTFRcIixuZXh0V2VlazpcImRkZGQgW9i52YbYryDYp9mE2LPYp9i52KldIExUXCIsbGFzdERheTpcIlvYo9mF2LMg2LnZhtivINin2YTYs9in2LnYqV0gTFRcIixsYXN0V2VlazpcImRkZGQgW9i52YbYryDYp9mE2LPYp9i52KldIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwi2KjYudivICVzXCIscGFzdDpcItmF2YbYsCAlc1wiLHM6cGx1cmFsaXplKFwic1wiKSxzczpwbHVyYWxpemUoXCJzXCIpLG06cGx1cmFsaXplKFwibVwiKSxtbTpwbHVyYWxpemUoXCJtXCIpLGg6cGx1cmFsaXplKFwiaFwiKSxoaDpwbHVyYWxpemUoXCJoXCIpLGQ6cGx1cmFsaXplKFwiZFwiKSxkZDpwbHVyYWxpemUoXCJkXCIpLE06cGx1cmFsaXplKFwiTVwiKSxNTTpwbHVyYWxpemUoXCJNXCIpLHk6cGx1cmFsaXplKFwieVwiKSx5eTpwbHVyYWxpemUoXCJ5XCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csXCLYjFwiKX0sd2Vlazp7ZG93OjAsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwiYXIta3dcIix7bW9udGhzOlwi2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2Ypf2YrZiNmG2YrZiF/ZitmI2YTZitmI2LJf2LrYtNiqX9i02KrZhtio2LFf2KPZg9iq2YjYqNixX9mG2YjZhtio2LFf2K/YrNmG2KjYsVwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcItmK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mKX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiNiyX9i62LTYql/YtNiq2YbYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YbYqNixX9iv2KzZhtio2LFcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCLYp9mE2KPYrdivX9in2YTYpdiq2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KpcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcItin2K3Yr1/Yp9iq2YbZitmGX9ir2YTYp9ir2KfYoV/Yp9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi2K1f2YZf2Ktf2LFf2K5f2Kxf2LNcIi5zcGxpdChcIl9cIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW9in2YTZitmI2YUg2LnZhNmJINin2YTYs9in2LnYqV0gTFRcIixuZXh0RGF5OlwiW9i62K/YpyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVFwiLG5leHRXZWVrOlwiZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFRcIixsYXN0RGF5OlwiW9ij2YXYsyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVFwiLGxhc3RXZWVrOlwiZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCLZgdmKICVzXCIscGFzdDpcItmF2YbYsCAlc1wiLHM6XCLYq9mI2KfZhlwiLHNzOlwiJWQg2KvYp9mG2YrYqVwiLG06XCLYr9mC2YrZgtipXCIsbW06XCIlZCDYr9mC2KfYptmCXCIsaDpcItiz2KfYudipXCIsaGg6XCIlZCDYs9in2LnYp9iqXCIsZDpcItmK2YjZhVwiLGRkOlwiJWQg2KPZitin2YVcIixNOlwi2LTZh9ixXCIsTU06XCIlZCDYo9i02YfYsVwiLHk6XCLYs9mG2KlcIix5eTpcIiVkINiz2YbZiNin2KpcIn0sd2Vlazp7ZG93OjAsZG95OjEyfX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHN5bWJvbE1hcD17MTpcIjFcIiwyOlwiMlwiLDM6XCIzXCIsNDpcIjRcIiw1OlwiNVwiLDY6XCI2XCIsNzpcIjdcIiw4OlwiOFwiLDk6XCI5XCIsMDpcIjBcIn0scGx1cmFsRm9ybT1mdW5jdGlvbihuKXtyZXR1cm4gMD09PW4/MDoxPT09bj8xOjI9PT1uPzI6biUxMDA+PTMmJm4lMTAwPD0xMD8zOm4lMTAwPj0xMT80OjV9LHBsdXJhbHM9e3M6W1wi2KPZgtmEINmF2YYg2KvYp9mG2YrYqVwiLFwi2KvYp9mG2YrYqSDZiNin2K3Yr9ipXCIsW1wi2KvYp9mG2YrYqtin2YZcIixcItir2KfZhtmK2KrZitmGXCJdLFwiJWQg2KvZiNin2YZcIixcIiVkINir2KfZhtmK2KlcIixcIiVkINir2KfZhtmK2KlcIl0sbTpbXCLYo9mC2YQg2YXZhiDYr9mC2YrZgtipXCIsXCLYr9mC2YrZgtipINmI2KfYrdiv2KlcIixbXCLYr9mC2YrZgtiq2KfZhlwiLFwi2K/ZgtmK2YLYqtmK2YZcIl0sXCIlZCDYr9mC2KfYptmCXCIsXCIlZCDYr9mC2YrZgtipXCIsXCIlZCDYr9mC2YrZgtipXCJdLGg6W1wi2KPZgtmEINmF2YYg2LPYp9i52KlcIixcItiz2KfYudipINmI2KfYrdiv2KlcIixbXCLYs9in2LnYqtin2YZcIixcItiz2KfYudiq2YrZhlwiXSxcIiVkINiz2KfYudin2KpcIixcIiVkINiz2KfYudipXCIsXCIlZCDYs9in2LnYqVwiXSxkOltcItij2YLZhCDZhdmGINmK2YjZhVwiLFwi2YrZiNmFINmI2KfYrdivXCIsW1wi2YrZiNmF2KfZhlwiLFwi2YrZiNmF2YrZhlwiXSxcIiVkINij2YrYp9mFXCIsXCIlZCDZitmI2YXZi9inXCIsXCIlZCDZitmI2YVcIl0sTTpbXCLYo9mC2YQg2YXZhiDYtNmH2LFcIixcIti02YfYsSDZiNin2K3Yr1wiLFtcIti02YfYsdin2YZcIixcIti02YfYsdmK2YZcIl0sXCIlZCDYo9i02YfYsVwiLFwiJWQg2LTZh9ix2KdcIixcIiVkINi02YfYsVwiXSx5OltcItij2YLZhCDZhdmGINi52KfZhVwiLFwi2LnYp9mFINmI2KfYrdivXCIsW1wi2LnYp9mF2KfZhlwiLFwi2LnYp9mF2YrZhlwiXSxcIiVkINij2LnZiNin2YVcIixcIiVkINi52KfZhdmL2KdcIixcIiVkINi52KfZhVwiXX0scGx1cmFsaXplPWZ1bmN0aW9uKHUpe3JldHVybiBmdW5jdGlvbihudW1iZXIsd2l0aG91dFN1ZmZpeCxzdHJpbmcsaXNGdXR1cmUpe3ZhciBmPXBsdXJhbEZvcm0obnVtYmVyKSxzdHI9cGx1cmFsc1t1XVtwbHVyYWxGb3JtKG51bWJlcildO3JldHVybiAyPT09ZiYmKHN0cj1zdHJbd2l0aG91dFN1ZmZpeD8wOjFdKSxzdHIucmVwbGFjZSgvJWQvaSxudW1iZXIpfX0sbW9udGhzPVtcItmK2YbYp9mK2LFcIixcItmB2KjYsdin2YrYsVwiLFwi2YXYp9ix2LNcIixcItij2KjYsdmK2YRcIixcItmF2KfZitmIXCIsXCLZitmI2YbZitmIXCIsXCLZitmI2YTZitmIXCIsXCLYo9i62LPYt9izXCIsXCLYs9io2KrZhdio2LFcIixcItij2YPYqtmI2KjYsVwiLFwi2YbZiNmB2YXYqNixXCIsXCLYr9mK2LPZhdio2LFcIl07bW9tZW50LmRlZmluZUxvY2FsZShcImFyLWx5XCIse21vbnRoczptb250aHMsbW9udGhzU2hvcnQ6bW9udGhzLHdlZWtkYXlzOlwi2KfZhNij2K3Yr1/Yp9mE2KXYq9mG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLYo9it2K9f2KXYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KPYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcItitX9mGX9irX9ixX9iuX9isX9izXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkQv4oCPTS/igI9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQgRCBNTU1NIFlZWVkgSEg6bW1cIn0sbWVyaWRpZW1QYXJzZTov2LV82YUvLGlzUE06ZnVuY3Rpb24oaW5wdXQpe3JldHVyblwi2YVcIj09PWlucHV0fSxtZXJpZGllbTpmdW5jdGlvbihob3VyLG1pbnV0ZSxpc0xvd2VyKXtyZXR1cm4gaG91cjwxMj9cIti1XCI6XCLZhVwifSxjYWxlbmRhcjp7c2FtZURheTpcIlvYp9mE2YrZiNmFINi52YbYryDYp9mE2LPYp9i52KldIExUXCIsbmV4dERheTpcIlvYutiv2YvYpyDYudmG2K8g2KfZhNiz2KfYudipXSBMVFwiLG5leHRXZWVrOlwiZGRkZCBb2LnZhtivINin2YTYs9in2LnYqV0gTFRcIixsYXN0RGF5OlwiW9ij2YXYsyDYudmG2K8g2KfZhNiz2KfYudipXSBMVFwiLGxhc3RXZWVrOlwiZGRkZCBb2LnZhtivINin2YTYs9in2LnYqV0gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCLYqNi52K8gJXNcIixwYXN0Olwi2YXZhtiwICVzXCIsczpwbHVyYWxpemUoXCJzXCIpLHNzOnBsdXJhbGl6ZShcInNcIiksbTpwbHVyYWxpemUoXCJtXCIpLG1tOnBsdXJhbGl6ZShcIm1cIiksaDpwbHVyYWxpemUoXCJoXCIpLGhoOnBsdXJhbGl6ZShcImhcIiksZDpwbHVyYWxpemUoXCJkXCIpLGRkOnBsdXJhbGl6ZShcImRcIiksTTpwbHVyYWxpemUoXCJNXCIpLE1NOnBsdXJhbGl6ZShcIk1cIikseTpwbHVyYWxpemUoXCJ5XCIpLHl5OnBsdXJhbGl6ZShcInlcIil9LHByZXBhcnNlOmZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5yZXBsYWNlKC/YjC9nLFwiLFwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihzdHJpbmcpe3JldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csKGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gc3ltYm9sTWFwW21hdGNoXX0pKS5yZXBsYWNlKC8sL2csXCLYjFwiKX0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7bW9tZW50LmRlZmluZUxvY2FsZShcImFyLW1hXCIse21vbnRoczpcItmK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mKX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiNiyX9i62LTYql/YtNiq2YbYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YbYqNixX9iv2KzZhtio2LFcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZil/ZitmI2YbZitmIX9mK2YjZhNmK2YjYsl/Yuti02Kpf2LTYqtmG2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmG2KjYsV/Yr9is2YbYqNixXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwi2KfZhNij2K3Yr1/Yp9mE2KXYq9mG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLYp9it2K9f2KfYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KfYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcItitX9mGX9irX9ixX9iuX9isX9izXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCBEIE1NTU0gWVlZWSBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIlvYp9mE2YrZiNmFINi52YTZiSDYp9mE2LPYp9i52KldIExUXCIsbmV4dERheTpcIlvYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFRcIixuZXh0V2VlazpcImRkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUXCIsbGFzdERheTpcIlvYo9mF2LMg2LnZhNmJINin2YTYs9in2LnYqV0gTFRcIixsYXN0V2VlazpcImRkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwi2YHZiiAlc1wiLHBhc3Q6XCLZhdmG2LAgJXNcIixzOlwi2KvZiNin2YZcIixzczpcIiVkINir2KfZhtmK2KlcIixtOlwi2K/ZgtmK2YLYqVwiLG1tOlwiJWQg2K/Zgtin2KbZglwiLGg6XCLYs9in2LnYqVwiLGhoOlwiJWQg2LPYp9i52KfYqlwiLGQ6XCLZitmI2YVcIixkZDpcIiVkINij2YrYp9mFXCIsTTpcIti02YfYsVwiLE1NOlwiJWQg2KPYtNmH2LFcIix5Olwi2LPZhtipXCIseXk6XCIlZCDYs9mG2YjYp9iqXCJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHN5bWJvbE1hcD17MTpcItmhXCIsMjpcItmiXCIsMzpcItmjXCIsNDpcItmkXCIsNTpcItmlXCIsNjpcItmmXCIsNzpcItmnXCIsODpcItmoXCIsOTpcItmpXCIsMDpcItmgXCJ9LG51bWJlck1hcD17XCLZoVwiOlwiMVwiLFwi2aJcIjpcIjJcIixcItmjXCI6XCIzXCIsXCLZpFwiOlwiNFwiLFwi2aVcIjpcIjVcIixcItmmXCI6XCI2XCIsXCLZp1wiOlwiN1wiLFwi2ahcIjpcIjhcIixcItmpXCI6XCI5XCIsXCLZoFwiOlwiMFwifTttb21lbnQuZGVmaW5lTG9jYWxlKFwiYXItc2FcIix7bW9udGhzOlwi2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2YrZiF/ZitmI2YbZitmIX9mK2YjZhNmK2Yhf2KPYutiz2LfYs1/Ys9io2KrZhdio2LFf2KPZg9iq2YjYqNixX9mG2YjZgdmF2KjYsV/Yr9mK2LPZhdio2LFcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZitmIX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiF/Yo9i62LPYt9izX9iz2KjYqtmF2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmB2YXYqNixX9iv2YrYs9mF2KjYsVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcItin2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi2KPYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9ij2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KpcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLYrV/Zhl/Yq1/YsV/Yrl/YrF/Ys1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQgRCBNTU1NIFlZWVkgSEg6bW1cIn0sbWVyaWRpZW1QYXJzZTov2LV82YUvLGlzUE06ZnVuY3Rpb24oaW5wdXQpe3JldHVyblwi2YVcIj09PWlucHV0fSxtZXJpZGllbTpmdW5jdGlvbihob3VyLG1pbnV0ZSxpc0xvd2VyKXtyZXR1cm4gaG91cjwxMj9cIti1XCI6XCLZhVwifSxjYWxlbmRhcjp7c2FtZURheTpcIlvYp9mE2YrZiNmFINi52YTZiSDYp9mE2LPYp9i52KldIExUXCIsbmV4dERheTpcIlvYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFRcIixuZXh0V2VlazpcImRkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUXCIsbGFzdERheTpcIlvYo9mF2LMg2LnZhNmJINin2YTYs9in2LnYqV0gTFRcIixsYXN0V2VlazpcImRkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwi2YHZiiAlc1wiLHBhc3Q6XCLZhdmG2LAgJXNcIixzOlwi2KvZiNin2YZcIixzczpcIiVkINir2KfZhtmK2KlcIixtOlwi2K/ZgtmK2YLYqVwiLG1tOlwiJWQg2K/Zgtin2KbZglwiLGg6XCLYs9in2LnYqVwiLGhoOlwiJWQg2LPYp9i52KfYqlwiLGQ6XCLZitmI2YVcIixkZDpcIiVkINij2YrYp9mFXCIsTTpcIti02YfYsVwiLE1NOlwiJWQg2KPYtNmH2LFcIix5Olwi2LPZhtipXCIseXk6XCIlZCDYs9mG2YjYp9iqXCJ9LHByZXBhcnNlOmZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b2aHZotmj2aTZpdmm2afZqNmp2aBdL2csKGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gbnVtYmVyTWFwW21hdGNoXX0pKS5yZXBsYWNlKC/YjC9nLFwiLFwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihzdHJpbmcpe3JldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csKGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gc3ltYm9sTWFwW21hdGNoXX0pKS5yZXBsYWNlKC8sL2csXCLYjFwiKX0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwiYXItdG5cIix7bW9udGhzOlwi2KzYp9mG2YHZil/ZgdmK2YHYsdmKX9mF2KfYsdizX9ij2YHYsdmK2YRf2YXYp9mKX9is2YjYp9mGX9is2YjZitmE2YrYqV/Yo9mI2Kpf2LPYqNiq2YXYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YHZhdio2LFf2K/Zitiz2YXYqNixXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0Olwi2KzYp9mG2YHZil/ZgdmK2YHYsdmKX9mF2KfYsdizX9ij2YHYsdmK2YRf2YXYp9mKX9is2YjYp9mGX9is2YjZitmE2YrYqV/Yo9mI2Kpf2LPYqNiq2YXYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YHZhdio2LFf2K/Zitiz2YXYqNixXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwi2KfZhNij2K3Yr1/Yp9mE2KXYq9mG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLYo9it2K9f2KXYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KPYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcItitX9mGX9irX9ixX9iuX9isX9izXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCBEIE1NTU0gWVlZWSBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIlvYp9mE2YrZiNmFINi52YTZiSDYp9mE2LPYp9i52KldIExUXCIsbmV4dERheTpcIlvYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFRcIixuZXh0V2VlazpcImRkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUXCIsbGFzdERheTpcIlvYo9mF2LMg2LnZhNmJINin2YTYs9in2LnYqV0gTFRcIixsYXN0V2VlazpcImRkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwi2YHZiiAlc1wiLHBhc3Q6XCLZhdmG2LAgJXNcIixzOlwi2KvZiNin2YZcIixzczpcIiVkINir2KfZhtmK2KlcIixtOlwi2K/ZgtmK2YLYqVwiLG1tOlwiJWQg2K/Zgtin2KbZglwiLGg6XCLYs9in2LnYqVwiLGhoOlwiJWQg2LPYp9i52KfYqlwiLGQ6XCLZitmI2YVcIixkZDpcIiVkINij2YrYp9mFXCIsTTpcIti02YfYsVwiLE1NOlwiJWQg2KPYtNmH2LFcIix5Olwi2LPZhtipXCIseXk6XCIlZCDYs9mG2YjYp9iqXCJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHN1ZmZpeGVzPXsxOlwiLWluY2lcIiw1OlwiLWluY2lcIiw4OlwiLWluY2lcIiw3MDpcIi1pbmNpXCIsODA6XCItaW5jaVwiLDI6XCItbmNpXCIsNzpcIi1uY2lcIiwyMDpcIi1uY2lcIiw1MDpcIi1uY2lcIiwzOlwiLcO8bmPDvFwiLDQ6XCItw7xuY8O8XCIsMTAwOlwiLcO8bmPDvFwiLDY6XCItbmPEsVwiLDk6XCItdW5jdVwiLDEwOlwiLXVuY3VcIiwzMDpcIi11bmN1XCIsNjA6XCItxLFuY8SxXCIsOTA6XCItxLFuY8SxXCJ9O21vbWVudC5kZWZpbmVMb2NhbGUoXCJhelwiLHttb250aHM6XCJ5YW52YXJfZmV2cmFsX21hcnRfYXByZWxfbWF5X2l5dW5faXl1bF9hdnF1c3Rfc2VudHlhYnJfb2t0eWFicl9ub3lhYnJfZGVrYWJyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwieWFuX2Zldl9tYXJfYXByX21heV9peW5faXlsX2F2cV9zZW5fb2t0X25veV9kZWtcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCJCYXphcl9CYXphciBlcnTJmXNpX8OHyZlyxZ/JmW5iyZkgYXjFn2FtxLFfw4fJmXLFn8mZbmLJmV9Dw7xtyZkgYXjFn2FtxLFfQ8O8bcmZX8WeyZluYsmZXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJCYXpfQnpFX8OHQXhfw4fJmXJfQ0F4X0PDvG1fxZ7JmW5cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJCel9CRV/Dh0Ffw4fJmV9DQV9Dw7xfxZ7JmVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW2J1Z8O8biBzYWF0XSBMVFwiLG5leHREYXk6XCJbc2FiYWggc2FhdF0gTFRcIixuZXh0V2VlazpcIltnyZlsyZluIGjJmWZ0yZldIGRkZGQgW3NhYXRdIExUXCIsbGFzdERheTpcIltkw7xuyZluXSBMVFwiLGxhc3RXZWVrOlwiW2tlw6fJmW4gaMmZZnTJmV0gZGRkZCBbc2FhdF0gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlcyBzb25yYVwiLHBhc3Q6XCIlcyDJmXZ2yZlsXCIsczpcImJpciBuZcOnyZkgc2FuaXnJmVwiLHNzOlwiJWQgc2FuaXnJmVwiLG06XCJiaXIgZMmZcWlxyZlcIixtbTpcIiVkIGTJmXFpccmZXCIsaDpcImJpciBzYWF0XCIsaGg6XCIlZCBzYWF0XCIsZDpcImJpciBnw7xuXCIsZGQ6XCIlZCBnw7xuXCIsTTpcImJpciBheVwiLE1NOlwiJWQgYXlcIix5OlwiYmlyIGlsXCIseXk6XCIlZCBpbFwifSxtZXJpZGllbVBhcnNlOi9nZWPJmXxzyZloyZlyfGfDvG5kw7x6fGF4xZ9hbS8saXNQTTpmdW5jdGlvbihpbnB1dCl7cmV0dXJuL14oZ8O8bmTDvHp8YXjFn2FtKSQvLnRlc3QoaW5wdXQpfSxtZXJpZGllbTpmdW5jdGlvbihob3VyLG1pbnV0ZSxpc0xvd2VyKXtyZXR1cm4gaG91cjw0P1wiZ2VjyZlcIjpob3VyPDEyP1wic8mZaMmZclwiOmhvdXI8MTc/XCJnw7xuZMO8elwiOlwiYXjFn2FtXCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9LSjEsW5jxLF8aW5jaXxuY2l8w7xuY8O8fG5jxLF8dW5jdSkvLG9yZGluYWw6ZnVuY3Rpb24obnVtYmVyKXtpZigwPT09bnVtYmVyKXJldHVybiBudW1iZXIrXCItxLFuY8SxXCI7dmFyIGE9bnVtYmVyJTEwO3JldHVybiBudW1iZXIrKHN1ZmZpeGVzW2FdfHxzdWZmaXhlc1tudW1iZXIlMTAwLWFdfHxzdWZmaXhlc1tudW1iZXI+PTEwMD8xMDA6bnVsbF0pfSx3ZWVrOntkb3c6MSxkb3k6N319KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHJlbGF0aXZlVGltZVdpdGhQbHVyYWwobnVtYmVyLHdpdGhvdXRTdWZmaXgsa2V5KXt2YXIgbnVtLGZvcm1zO3JldHVyblwibVwiPT09a2V5P3dpdGhvdXRTdWZmaXg/XCLRhdCy0ZbQu9GW0L3QsFwiOlwi0YXQstGW0LvRltC90YNcIjpcImhcIj09PWtleT93aXRob3V0U3VmZml4P1wi0LPQsNC00LfRltC90LBcIjpcItCz0LDQtNC30ZbQvdGDXCI6bnVtYmVyK1wiIFwiKyhudW09K251bWJlcixmb3Jtcz17c3M6d2l0aG91dFN1ZmZpeD9cItGB0LXQutGD0L3QtNCwX9GB0LXQutGD0L3QtNGLX9GB0LXQutGD0L3QtFwiOlwi0YHQtdC60YPQvdC00YNf0YHQtdC60YPQvdC00Ytf0YHQtdC60YPQvdC0XCIsbW06d2l0aG91dFN1ZmZpeD9cItGF0LLRltC70ZbQvdCwX9GF0LLRltC70ZbQvdGLX9GF0LLRltC70ZbQvVwiOlwi0YXQstGW0LvRltC90YNf0YXQstGW0LvRltC90Ytf0YXQstGW0LvRltC9XCIsaGg6d2l0aG91dFN1ZmZpeD9cItCz0LDQtNC30ZbQvdCwX9Cz0LDQtNC30ZbQvdGLX9Cz0LDQtNC30ZbQvVwiOlwi0LPQsNC00LfRltC90YNf0LPQsNC00LfRltC90Ytf0LPQsNC00LfRltC9XCIsZGQ6XCLQtNC30LXQvdGMX9C00L3Rll/QtNC30ZHQvVwiLE1NOlwi0LzQtdGB0Y/Rhl/QvNC10YHRj9GG0Ytf0LzQtdGB0Y/RhtCw0Z5cIix5eTpcItCz0L7QtF/Qs9Cw0LTRi1/Qs9Cw0LTQvtGeXCJ9W2tleV0uc3BsaXQoXCJfXCIpLG51bSUxMD09MSYmbnVtJTEwMCE9MTE/Zm9ybXNbMF06bnVtJTEwPj0yJiZudW0lMTA8PTQmJihudW0lMTAwPDEwfHxudW0lMTAwPj0yMCk/Zm9ybXNbMV06Zm9ybXNbMl0pfW1vbWVudC5kZWZpbmVMb2NhbGUoXCJiZVwiLHttb250aHM6e2Zvcm1hdDpcItGB0YLRg9C00LfQtdC90Y9f0LvRjtGC0LDQs9CwX9GB0LDQutCw0LLRltC60LBf0LrRgNCw0YHQsNCy0ZbQutCwX9GC0YDQsNGe0L3Rj1/Rh9GN0YDQstC10L3Rj1/Qu9GW0L/QtdC90Y9f0LbQvdGW0Z7QvdGPX9Cy0LXRgNCw0YHQvdGPX9C60LDRgdGC0YDRi9GH0L3RltC60LBf0LvRltGB0YLQsNC/0LDQtNCwX9GB0L3QtdC20L3Rj1wiLnNwbGl0KFwiX1wiKSxzdGFuZGFsb25lOlwi0YHRgtGD0LTQt9C10L3RjF/Qu9GO0YLRi1/RgdCw0LrQsNCy0ZbQul/QutGA0LDRgdCw0LLRltC6X9GC0YDQsNCy0LXQvdGMX9GH0Y3RgNCy0LXQvdGMX9C70ZbQv9C10L3RjF/QttC90ZbQstC10L3RjF/QstC10YDQsNGB0LXQvdGMX9C60LDRgdGC0YDRi9GH0L3RltC6X9C70ZbRgdGC0LDQv9Cw0LRf0YHQvdC10LbQsNC90YxcIi5zcGxpdChcIl9cIil9LG1vbnRoc1Nob3J0Olwi0YHRgtGD0LRf0LvRjtGCX9GB0LDQul/QutGA0LDRgV/RgtGA0LDQsl/Rh9GN0YDQsl/Qu9GW0L9f0LbQvdGW0LJf0LLQtdGAX9C60LDRgdGCX9C70ZbRgdGCX9GB0L3QtdC2XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOntmb3JtYXQ6XCLQvdGP0LTQt9C10LvRjl/Qv9Cw0L3Rj9C00LfQtdC70LDQul/QsNGe0YLQvtGA0LDQul/RgdC10YDQsNC00YNf0YfQsNGG0LLQtdGAX9C/0Y/RgtC90ZbRhtGDX9GB0YPQsdC+0YLRg1wiLnNwbGl0KFwiX1wiKSxzdGFuZGFsb25lOlwi0L3Rj9C00LfQtdC70Y9f0L/QsNC90Y/QtNC30LXQu9Cw0Lpf0LDRntGC0L7RgNCw0Lpf0YHQtdGA0LDQtNCwX9GH0LDRhtCy0LXRgF/Qv9GP0YLQvdGW0YbQsF/RgdGD0LHQvtGC0LBcIi5zcGxpdChcIl9cIiksaXNGb3JtYXQ6L1xcWyA/W9Cj0YPRnl0gPyg/OtC80ZbQvdGD0LvRg9GOfNC90LDRgdGC0YPQv9C90YPRjik/ID9cXF0gP2RkZGQvfSx3ZWVrZGF5c1Nob3J0Olwi0L3QtF/Qv9C9X9Cw0YJf0YHRgF/Rh9GGX9C/0YJf0YHQsVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcItC90LRf0L/QvV/QsNGCX9GB0YBf0YfRhl/Qv9GCX9GB0LFcIi5zcGxpdChcIl9cIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWSDQsy5cIixMTEw6XCJEIE1NTU0gWVlZWSDQsy4sIEhIOm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZINCzLiwgSEg6bW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJb0KHRkdC90L3RjyDRnl0gTFRcIixuZXh0RGF5OlwiW9CX0LDRntGC0YDQsCDRnl0gTFRcIixsYXN0RGF5OlwiW9Cj0YfQvtGA0LAg0Z5dIExUXCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm5cIlvQo10gZGRkZCBb0Z5dIExUXCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm5cIlvQoyDQvNGW0L3Rg9C70YPRjl0gZGRkZCBb0Z5dIExUXCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6cmV0dXJuXCJb0KMg0LzRltC90YPQu9GLXSBkZGRkIFvRnl0gTFRcIn19LHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcItC/0YDQsNC3ICVzXCIscGFzdDpcIiVzINGC0LDQvNGDXCIsczpcItC90LXQutCw0LvRjNC60ZYg0YHQtdC60YPQvdC0XCIsbTpyZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLG1tOnJlbGF0aXZlVGltZVdpdGhQbHVyYWwsaDpyZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLGhoOnJlbGF0aXZlVGltZVdpdGhQbHVyYWwsZDpcItC00LfQtdC90YxcIixkZDpyZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLE06XCLQvNC10YHRj9GGXCIsTU06cmVsYXRpdmVUaW1lV2l0aFBsdXJhbCx5Olwi0LPQvtC0XCIseXk6cmVsYXRpdmVUaW1lV2l0aFBsdXJhbH0sbWVyaWRpZW1QYXJzZTov0L3QvtGH0Yt80YDQsNC90ZbRhtGLfNC00L3Rj3zQstC10YfQsNGA0LAvLGlzUE06ZnVuY3Rpb24oaW5wdXQpe3JldHVybi9eKNC00L3Rj3zQstC10YfQsNGA0LApJC8udGVzdChpbnB1dCl9LG1lcmlkaWVtOmZ1bmN0aW9uKGhvdXIsbWludXRlLGlzTG93ZXIpe3JldHVybiBob3VyPDQ/XCLQvdC+0YfRi1wiOmhvdXI8MTI/XCLRgNCw0L3RltGG0YtcIjpob3VyPDE3P1wi0LTQvdGPXCI6XCLQstC10YfQsNGA0LBcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn0tKNGWfNGLfNCz0LApLyxvcmRpbmFsOmZ1bmN0aW9uKG51bWJlcixwZXJpb2Qpe3N3aXRjaChwZXJpb2Qpe2Nhc2VcIk1cIjpjYXNlXCJkXCI6Y2FzZVwiREREXCI6Y2FzZVwid1wiOmNhc2VcIldcIjpyZXR1cm4gbnVtYmVyJTEwIT0yJiZudW1iZXIlMTAhPTN8fG51bWJlciUxMDA9PTEyfHxudW1iZXIlMTAwPT0xMz9udW1iZXIrXCIt0YtcIjpudW1iZXIrXCIt0ZZcIjtjYXNlXCJEXCI6cmV0dXJuIG51bWJlcitcIi3Qs9CwXCI7ZGVmYXVsdDpyZXR1cm4gbnVtYmVyfX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwiYmdcIix7bW9udGhzOlwi0Y/QvdGD0LDRgNC4X9GE0LXQstGA0YPQsNGA0Lhf0LzQsNGA0YJf0LDQv9GA0LjQu1/QvNCw0Llf0Y7QvdC4X9GO0LvQuF/QsNCy0LPRg9GB0YJf0YHQtdC/0YLQtdC80LLRgNC4X9C+0LrRgtC+0LzQstGA0Lhf0L3QvtC10LzQstGA0Lhf0LTQtdC60LXQvNCy0YDQuFwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcItGP0L3Rg1/RhNC10LJf0LzQsNGAX9Cw0L/RgF/QvNCw0Llf0Y7QvdC4X9GO0LvQuF/QsNCy0LNf0YHQtdC/X9C+0LrRgl/QvdC+0LVf0LTQtdC6XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwi0L3QtdC00LXQu9GPX9C/0L7QvdC10LTQtdC70L3QuNC6X9Cy0YLQvtGA0L3QuNC6X9GB0YDRj9C00LBf0YfQtdGC0LLRitGA0YLRitC6X9C/0LXRgtGK0Lpf0YHRitCx0L7RgtCwXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLQvdC10LRf0L/QvtC9X9Cy0YLQvl/RgdGA0Y9f0YfQtdGCX9C/0LXRgl/RgdGK0LFcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLQvdC0X9C/0L1f0LLRgl/RgdGAX9GH0YJf0L/Rgl/RgdCxXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkg6bW1cIixMVFM6XCJIOm1tOnNzXCIsTDpcIkQuTU0uWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBIOm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIEg6bW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJb0JTQvdC10YEg0LJdIExUXCIsbmV4dERheTpcIlvQo9GC0YDQtSDQsl0gTFRcIixuZXh0V2VlazpcImRkZGQgW9CyXSBMVFwiLGxhc3REYXk6XCJb0JLRh9C10YDQsCDQsl0gTFRcIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNjpyZXR1cm5cIlvQnNC40L3QsNC70LDRgtCwXSBkZGRkIFvQsl0gTFRcIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuXCJb0JzQuNC90LDQu9C40Y9dIGRkZGQgW9CyXSBMVFwifX0sc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwi0YHQu9C10LQgJXNcIixwYXN0Olwi0L/RgNC10LTQuCAlc1wiLHM6XCLQvdGP0LrQvtC70LrQviDRgdC10LrRg9C90LTQuFwiLHNzOlwiJWQg0YHQtdC60YPQvdC00LhcIixtOlwi0LzQuNC90YPRgtCwXCIsbW06XCIlZCDQvNC40L3Rg9GC0LhcIixoOlwi0YfQsNGBXCIsaGg6XCIlZCDRh9Cw0YHQsFwiLGQ6XCLQtNC10L1cIixkZDpcIiVkINC00LXQvdCwXCIsdzpcItGB0LXQtNC80LjRhtCwXCIsd3c6XCIlZCDRgdC10LTQvNC40YbQuFwiLE06XCLQvNC10YHQtdGGXCIsTU06XCIlZCDQvNC10YHQtdGG0LBcIix5Olwi0LPQvtC00LjQvdCwXCIseXk6XCIlZCDQs9C+0LTQuNC90LhcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn0tKNC10LJ80LXQvXzRgtC4fNCy0Lh80YDQuHzQvNC4KS8sb3JkaW5hbDpmdW5jdGlvbihudW1iZXIpe3ZhciBsYXN0RGlnaXQ9bnVtYmVyJTEwLGxhc3QyRGlnaXRzPW51bWJlciUxMDA7cmV0dXJuIDA9PT1udW1iZXI/bnVtYmVyK1wiLdC10LJcIjowPT09bGFzdDJEaWdpdHM/bnVtYmVyK1wiLdC10L1cIjpsYXN0MkRpZ2l0cz4xMCYmbGFzdDJEaWdpdHM8MjA/bnVtYmVyK1wiLdGC0LhcIjoxPT09bGFzdERpZ2l0P251bWJlcitcIi3QstC4XCI6Mj09PWxhc3REaWdpdD9udW1iZXIrXCIt0YDQuFwiOjc9PT1sYXN0RGlnaXR8fDg9PT1sYXN0RGlnaXQ/bnVtYmVyK1wiLdC80LhcIjpudW1iZXIrXCIt0YLQuFwifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO21vbWVudC5kZWZpbmVMb2NhbGUoXCJibVwiLHttb250aHM6XCJaYW53dXlla2Fsb19GZXd1cnV5ZWthbG9fTWFyaXNpa2Fsb19Bd2lyaWxpa2Fsb19NyZtrYWxvX1p1d8mbbmthbG9fWnVsdXlla2Fsb19VdGlrYWxvX1PJm3RhbmJ1cnVrYWxvX8mUa3V0yZRidXJ1a2Fsb19Ob3dhbmJ1cnVrYWxvX0Rlc2FuYnVydWthbG9cIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJaYW5fRmV3X01hcl9Bd2lfTcmbX1p1d19adWxfVXRpX1PJm3RfyZRrdV9Ob3dfRGVzXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwiS2FyaV9OdMmbbsmbbl9UYXJhdGFfQXJhYmFfQWxhbWlzYV9KdW1hX1NpYmlyaVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiS2FyX050yZtfVGFyX0FyYV9BbGFfSnVtX1NpYlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIkthX050X1RhX0FyX0FsX0p1X1NpXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZXCIsTExMOlwiTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIFtsyZtyyZtdIEhIOm1tXCIsTExMTDpcImRkZGQgTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIFtsyZtyyZtdIEhIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW0JpIGzJm3LJm10gTFRcIixuZXh0RGF5OlwiW1NpbmkgbMmbcsmbXSBMVFwiLG5leHRXZWVrOlwiZGRkZCBbZG9uIGzJm3LJm10gTFRcIixsYXN0RGF5OlwiW0t1bnUgbMmbcsmbXSBMVFwiLGxhc3RXZWVrOlwiZGRkZCBbdMmbbcmbbmVuIGzJm3LJm10gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlcyBryZRuyZRcIixwYXN0OlwiYSBiyZsgJXMgYsmUXCIsczpcInNhbmdhIGRhbWEgZGFtYVwiLHNzOlwic2Vrb25kaSAlZFwiLG06XCJtaW5pdGkga2VsZW5cIixtbTpcIm1pbml0aSAlZFwiLGg6XCJsyZtyyZsga2VsZW5cIixoaDpcImzJm3LJmyAlZFwiLGQ6XCJ0aWxlIGtlbGVuXCIsZGQ6XCJ0aWxlICVkXCIsTTpcImthbG8ga2VsZW5cIixNTTpcImthbG8gJWRcIix5Olwic2FuIGtlbGVuXCIseXk6XCJzYW4gJWRcIn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjt2YXIgc3ltYm9sTWFwPXsxOlwi4KenXCIsMjpcIuCnqFwiLDM6XCLgp6lcIiw0Olwi4KeqXCIsNTpcIuCnq1wiLDY6XCLgp6xcIiw3Olwi4KetXCIsODpcIuCnrlwiLDk6XCLgp69cIiwwOlwi4KemXCJ9LG51bWJlck1hcD17XCLgp6dcIjpcIjFcIixcIuCnqFwiOlwiMlwiLFwi4KepXCI6XCIzXCIsXCLgp6pcIjpcIjRcIixcIuCnq1wiOlwiNVwiLFwi4KesXCI6XCI2XCIsXCLgp61cIjpcIjdcIixcIuCnrlwiOlwiOFwiLFwi4KevXCI6XCI5XCIsXCLgp6ZcIjpcIjBcIn07bW9tZW50LmRlZmluZUxvY2FsZShcImJuXCIse21vbnRoczpcIuCmnOCmvuCmqOCngeCnn+CmvuCmsOCmv1/gpqvgp4fgpqzgp43gprDgp4Hgp5/gpr7gprDgpr9f4Kau4Ka+4Kaw4KeN4KaaX+Cmj+CmquCnjeCmsOCmv+Cmsl/gpq7gp4df4Kac4KeB4KaoX+CmnOCngeCmsuCmvuCmh1/gpobgppfgprjgp43gpp9f4Ka44KeH4Kaq4KeN4Kaf4KeH4Kau4KeN4Kas4KawX+CmheCmleCnjeCmn+Cni+CmrOCmsF/gpqjgpq3gp4fgpq7gp43gpqzgprBf4Kah4Ka/4Ka44KeH4Kau4KeN4Kas4KawXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0Olwi4Kac4Ka+4Kao4KeBX+Cmq+Cnh+CmrOCnjeCmsOCngV/gpq7gpr7gprDgp43gpppf4KaP4Kaq4KeN4Kaw4Ka/4KayX+CmruCnh1/gppzgp4Hgpqhf4Kac4KeB4Kay4Ka+4KaHX+CmhuCml+CmuOCnjeCmn1/gprjgp4fgpqrgp43gpp9f4KaF4KaV4KeN4Kaf4KeLX+CmqOCmreCnh1/gpqHgpr/gprjgp4dcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCLgprDgpqzgpr/gpqzgpr7gprBf4Ka44KeL4Kau4Kas4Ka+4KawX+CmruCmmeCnjeCml+CmsuCmrOCmvuCmsF/gpqzgp4Hgpqfgpqzgpr7gprBf4Kas4KeD4Ka54Ka44KeN4Kaq4Kak4Ka/4Kas4Ka+4KawX+CmtuCngeCmleCnjeCmsOCmrOCmvuCmsF/gprbgpqjgpr/gpqzgpr7gprBcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIuCmsOCmrOCmv1/gprjgp4vgpq5f4Kau4KaZ4KeN4KaX4KayX+CmrOCngeCmp1/gpqzgp4Pgprngprjgp43gpqrgpqTgpr9f4Ka24KeB4KaV4KeN4KawX+CmtuCmqOCmv1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuCmsOCmrOCmv1/gprjgp4vgpq5f4Kau4KaZ4KeN4KaX4KayX+CmrOCngeCmp1/gpqzgp4Pgprlf4Ka24KeB4KaV4KeN4KawX+CmtuCmqOCmv1wiLnNwbGl0KFwiX1wiKSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJBIGg6bW0g4Ka44Kau4KefXCIsTFRTOlwiQSBoOm1tOnNzIOCmuOCmruCnn1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZLCBBIGg6bW0g4Ka44Kau4KefXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0g4Ka44Kau4KefXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW+CmhuCmnF0gTFRcIixuZXh0RGF5OlwiW+CmhuCml+CmvuCmruCngOCmleCmvuCmsl0gTFRcIixuZXh0V2VlazpcImRkZGQsIExUXCIsbGFzdERheTpcIlvgppfgpqTgppXgpr7gprJdIExUXCIsbGFzdFdlZWs6XCJb4KaX4KakXSBkZGRkLCBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVzIOCmquCmsOCnh1wiLHBhc3Q6XCIlcyDgpobgppfgp4dcIixzOlwi4KaV4Kef4KeH4KaVIOCmuOCnh+CmleCnh+CmqOCnjeCmoVwiLHNzOlwiJWQg4Ka44KeH4KaV4KeH4Kao4KeN4KahXCIsbTpcIuCmj+CmlSDgpq7gpr/gpqjgpr/gpp9cIixtbTpcIiVkIOCmruCmv+CmqOCmv+Cmn1wiLGg6XCLgpo/gppUg4KaY4Kao4KeN4Kaf4Ka+XCIsaGg6XCIlZCDgppjgpqjgp43gpp/gpr5cIixkOlwi4KaP4KaVIOCmpuCmv+CmqFwiLGRkOlwiJWQg4Kam4Ka/4KaoXCIsTTpcIuCmj+CmlSDgpq7gpr7gprhcIixNTTpcIiVkIOCmruCmvuCmuFwiLHk6XCLgpo/gppUg4Kas4Kab4KawXCIseXk6XCIlZCDgpqzgppvgprBcIn0scHJlcGFyc2U6ZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgp6fgp6jgp6ngp6rgp6vgp6zgp63gp67gp6/gp6ZdL2csKGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gbnVtYmVyTWFwW21hdGNoXX0pKX0scG9zdGZvcm1hdDpmdW5jdGlvbihzdHJpbmcpe3JldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csKGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gc3ltYm9sTWFwW21hdGNoXX0pKX0sbWVyaWRpZW1QYXJzZTov4Kaw4Ka+4KakfOCmuOCmleCmvuCmsnzgpqbgp4Hgpqrgp4HgprB84Kas4Ka/4KaV4Ka+4KayfOCmsOCmvuCmpC8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGhvdXIsbWVyaWRpZW0pe3JldHVybiAxMj09PWhvdXImJihob3VyPTApLFwi4Kaw4Ka+4KakXCI9PT1tZXJpZGllbSYmaG91cj49NHx8XCLgpqbgp4Hgpqrgp4HgprBcIj09PW1lcmlkaWVtJiZob3VyPDV8fFwi4Kas4Ka/4KaV4Ka+4KayXCI9PT1tZXJpZGllbT9ob3VyKzEyOmhvdXJ9LG1lcmlkaWVtOmZ1bmN0aW9uKGhvdXIsbWludXRlLGlzTG93ZXIpe3JldHVybiBob3VyPDQ/XCLgprDgpr7gpqRcIjpob3VyPDEwP1wi4Ka44KaV4Ka+4KayXCI6aG91cjwxNz9cIuCmpuCngeCmquCngeCmsFwiOmhvdXI8MjA/XCLgpqzgpr/gppXgpr7gprJcIjpcIuCmsOCmvuCmpFwifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO3ZhciBzeW1ib2xNYXA9ezE6XCLgp6dcIiwyOlwi4KeoXCIsMzpcIuCnqVwiLDQ6XCLgp6pcIiw1Olwi4KerXCIsNjpcIuCnrFwiLDc6XCLgp61cIiw4Olwi4KeuXCIsOTpcIuCnr1wiLDA6XCLgp6ZcIn0sbnVtYmVyTWFwPXtcIuCnp1wiOlwiMVwiLFwi4KeoXCI6XCIyXCIsXCLgp6lcIjpcIjNcIixcIuCnqlwiOlwiNFwiLFwi4KerXCI6XCI1XCIsXCLgp6xcIjpcIjZcIixcIuCnrVwiOlwiN1wiLFwi4KeuXCI6XCI4XCIsXCLgp69cIjpcIjlcIixcIuCnplwiOlwiMFwifTttb21lbnQuZGVmaW5lTG9jYWxlKFwiYm4tYmRcIix7bW9udGhzOlwi4Kac4Ka+4Kao4KeB4Kef4Ka+4Kaw4Ka/X+Cmq+Cnh+CmrOCnjeCmsOCngeCnn+CmvuCmsOCmv1/gpq7gpr7gprDgp43gpppf4KaP4Kaq4KeN4Kaw4Ka/4KayX+CmruCnh1/gppzgp4Hgpqhf4Kac4KeB4Kay4Ka+4KaHX+CmhuCml+CmuOCnjeCmn1/gprjgp4fgpqrgp43gpp/gp4fgpq7gp43gpqzgprBf4KaF4KaV4KeN4Kaf4KeL4Kas4KawX+CmqOCmreCnh+CmruCnjeCmrOCmsF/gpqHgpr/gprjgp4fgpq7gp43gpqzgprBcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLgppzgpr7gpqjgp4Ff4Kar4KeH4Kas4KeN4Kaw4KeBX+CmruCmvuCmsOCnjeCmml/gpo/gpqrgp43gprDgpr/gprJf4Kau4KeHX+CmnOCngeCmqF/gppzgp4HgprLgpr7gpodf4KaG4KaX4Ka44KeN4KafX+CmuOCnh+CmquCnjeCmn1/gpoXgppXgp43gpp/gp4tf4Kao4Kat4KeHX+CmoeCmv+CmuOCnh1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcIuCmsOCmrOCmv+CmrOCmvuCmsF/gprjgp4vgpq7gpqzgpr7gprBf4Kau4KaZ4KeN4KaX4Kay4Kas4Ka+4KawX+CmrOCngeCmp+CmrOCmvuCmsF/gpqzgp4Pgprngprjgp43gpqrgpqTgpr/gpqzgpr7gprBf4Ka24KeB4KaV4KeN4Kaw4Kas4Ka+4KawX+CmtuCmqOCmv+CmrOCmvuCmsFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi4Kaw4Kas4Ka/X+CmuOCni+Cmrl/gpq7gppngp43gppfgprJf4Kas4KeB4KanX+CmrOCng+CmueCmuOCnjeCmquCmpOCmv1/gprbgp4HgppXgp43gprBf4Ka24Kao4Ka/XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi4Kaw4Kas4Ka/X+CmuOCni+Cmrl/gpq7gppngp43gppfgprJf4Kas4KeB4KanX+CmrOCng+CmuV/gprbgp4HgppXgp43gprBf4Ka24Kao4Ka/XCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkEgaDptbSDgprjgpq7gp59cIixMVFM6XCJBIGg6bW06c3Mg4Ka44Kau4KefXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVksIEEgaDptbSDgprjgpq7gp59cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgprjgpq7gp59cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJb4KaG4KacXSBMVFwiLG5leHREYXk6XCJb4KaG4KaX4Ka+4Kau4KeA4KaV4Ka+4KayXSBMVFwiLG5leHRXZWVrOlwiZGRkZCwgTFRcIixsYXN0RGF5OlwiW+Cml+CmpOCmleCmvuCmsl0gTFRcIixsYXN0V2VlazpcIlvgppfgpqRdIGRkZGQsIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXMg4Kaq4Kaw4KeHXCIscGFzdDpcIiVzIOCmhuCml+Cnh1wiLHM6XCLgppXgp5/gp4fgppUg4Ka44KeH4KaV4KeH4Kao4KeN4KahXCIsc3M6XCIlZCDgprjgp4fgppXgp4fgpqjgp43gpqFcIixtOlwi4KaP4KaVIOCmruCmv+CmqOCmv+Cmn1wiLG1tOlwiJWQg4Kau4Ka/4Kao4Ka/4KafXCIsaDpcIuCmj+CmlSDgppjgpqjgp43gpp/gpr5cIixoaDpcIiVkIOCmmOCmqOCnjeCmn+CmvlwiLGQ6XCLgpo/gppUg4Kam4Ka/4KaoXCIsZGQ6XCIlZCDgpqbgpr/gpqhcIixNOlwi4KaP4KaVIOCmruCmvuCmuFwiLE1NOlwiJWQg4Kau4Ka+4Ka4XCIseTpcIuCmj+CmlSDgpqzgppvgprBcIix5eTpcIiVkIOCmrOCmm+CmsFwifSxwcmVwYXJzZTpmdW5jdGlvbihzdHJpbmcpe3JldHVybiBzdHJpbmcucmVwbGFjZSgvW+Cnp+CnqOCnqeCnquCnq+CnrOCnreCnruCnr+Cnpl0vZywoZnVuY3Rpb24obWF0Y2gpe3JldHVybiBudW1iZXJNYXBbbWF0Y2hdfSkpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywoZnVuY3Rpb24obWF0Y2gpe3JldHVybiBzeW1ib2xNYXBbbWF0Y2hdfSkpfSxtZXJpZGllbVBhcnNlOi/gprDgpr7gpqR84Kat4KeL4KawfOCmuOCmleCmvuCmsnzgpqbgp4Hgpqrgp4HgprB84Kas4Ka/4KaV4Ka+4KayfOCmuOCmqOCnjeCmp+CnjeCmr+CmvnzgprDgpr7gpqQvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihob3VyLG1lcmlkaWVtKXtyZXR1cm4gMTI9PT1ob3VyJiYoaG91cj0wKSxcIuCmsOCmvuCmpFwiPT09bWVyaWRpZW0/aG91cjw0P2hvdXI6aG91cisxMjpcIuCmreCni+CmsFwiPT09bWVyaWRpZW0/aG91cjpcIuCmuOCmleCmvuCmslwiPT09bWVyaWRpZW0/aG91cjpcIuCmpuCngeCmquCngeCmsFwiPT09bWVyaWRpZW0/aG91cj49Mz9ob3VyOmhvdXIrMTI6XCLgpqzgpr/gppXgpr7gprJcIj09PW1lcmlkaWVtP2hvdXIrMTI6XCLgprjgpqjgp43gpqfgp43gpq/gpr5cIj09PW1lcmlkaWVtP2hvdXIrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihob3VyLG1pbnV0ZSxpc0xvd2VyKXtyZXR1cm4gaG91cjw0P1wi4Kaw4Ka+4KakXCI6aG91cjw2P1wi4Kat4KeL4KawXCI6aG91cjwxMj9cIuCmuOCmleCmvuCmslwiOmhvdXI8MTU/XCLgpqbgp4Hgpqrgp4HgprBcIjpob3VyPDE4P1wi4Kas4Ka/4KaV4Ka+4KayXCI6aG91cjwyMD9cIuCmuOCmqOCnjeCmp+CnjeCmr+CmvlwiOlwi4Kaw4Ka+4KakXCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHN5bWJvbE1hcD17MTpcIuC8oVwiLDI6XCLgvKJcIiwzOlwi4LyjXCIsNDpcIuC8pFwiLDU6XCLgvKVcIiw2Olwi4LymXCIsNzpcIuC8p1wiLDg6XCLgvKhcIiw5Olwi4LypXCIsMDpcIuC8oFwifSxudW1iZXJNYXA9e1wi4LyhXCI6XCIxXCIsXCLgvKJcIjpcIjJcIixcIuC8o1wiOlwiM1wiLFwi4LykXCI6XCI0XCIsXCLgvKVcIjpcIjVcIixcIuC8plwiOlwiNlwiLFwi4LynXCI6XCI3XCIsXCLgvKhcIjpcIjhcIixcIuC8qVwiOlwiOVwiLFwi4LygXCI6XCIwXCJ9O21vbWVudC5kZWZpbmVMb2NhbGUoXCJib1wiLHttb250aHM6XCLgvZ/gvrPgvIvgvZbgvIvgvZHgvYTgvIvgvZTgvbxf4L2f4L6z4LyL4L2W4LyL4L2C4L2J4L2y4L2m4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9guC9puC9tOC9mOC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvZ7gvbLgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2j4L6U4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9keC+suC9tOC9guC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvZHgvbTgvZPgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2i4L6S4L6x4L2R4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9keC9guC9tOC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvYXgvbTgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2F4L204LyL4L2C4L2F4L2y4L2C4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9heC9tOC8i+C9guC9ieC9suC9puC8i+C9lFwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIuC9n+C+s+C8izFf4L2f4L6z4LyLMl/gvZ/gvrPgvIszX+C9n+C+s+C8izRf4L2f4L6z4LyLNV/gvZ/gvrPgvIs2X+C9n+C+s+C8izdf4L2f4L6z4LyLOF/gvZ/gvrPgvIs5X+C9n+C+s+C8izEwX+C9n+C+s+C8izExX+C9n+C+s+C8izEyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0UmVnZXg6L14o4L2f4L6z4LyLXFxkezEsMn0pLyxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOlwi4L2C4L2f4L2g4LyL4L2J4L2y4LyL4L2Y4LyLX+C9guC9n+C9oOC8i+C9n+C+s+C8i+C9luC8i1/gvYLgvZ/gvaDgvIvgvZjgvbLgvYLgvIvgvZHgvZjgvaLgvItf4L2C4L2f4L2g4LyL4L2j4L634L2C4LyL4L2U4LyLX+C9guC9n+C9oOC8i+C9leC9tOC9ouC8i+C9luC9tF/gvYLgvZ/gvaDgvIvgvZTgvIvgvabgvYTgvabgvItf4L2C4L2f4L2g4LyL4L2m4L6k4L264L2T4LyL4L2U4LyLXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLgvYngvbLgvIvgvZjgvItf4L2f4L6z4LyL4L2W4LyLX+C9mOC9suC9guC8i+C9keC9mOC9ouC8i1/gvaPgvrfgvYLgvIvgvZTgvItf4L2V4L204L2i4LyL4L2W4L20X+C9lOC8i+C9puC9hOC9puC8i1/gvabgvqTgvbrgvZPgvIvgvZTgvItcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLgvYngvbJf4L2f4L6zX+C9mOC9suC9gl/gvaPgvrfgvYJf4L2V4L204L2iX+C9puC9hOC9pl/gvabgvqTgvbrgvZNcIi5zcGxpdChcIl9cIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiQSBoOm1tXCIsTFRTOlwiQSBoOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVksIEEgaDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW+C9keC9suC8i+C9ouC9suC9hF0gTFRcIixuZXh0RGF5OlwiW+C9puC9hOC8i+C9ieC9suC9k10gTFRcIixuZXh0V2VlazpcIlvgvZbgvZHgvbTgvZPgvIvgvZXgvrLgvYLgvIvgvaLgvpfgvbrgvabgvIvgvZhdLCBMVFwiLGxhc3REYXk6XCJb4L2B4LyL4L2m4L2EXSBMVFwiLGxhc3RXZWVrOlwiW+C9luC9keC9tOC9k+C8i+C9leC+suC9guC8i+C9mOC9kOC9oOC8i+C9mF0gZGRkZCwgTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlcyDgvaPgvItcIixwYXN0OlwiJXMg4L2m4L6U4L2T4LyL4L2jXCIsczpcIuC9o+C9mOC8i+C9puC9hFwiLHNzOlwiJWQg4L2m4L6Q4L2i4LyL4L2G4LyNXCIsbTpcIuC9puC+kOC9ouC8i+C9mOC8i+C9guC9heC9suC9glwiLG1tOlwiJWQg4L2m4L6Q4L2i4LyL4L2YXCIsaDpcIuC9huC9tOC8i+C9muC9vOC9keC8i+C9guC9heC9suC9glwiLGhoOlwiJWQg4L2G4L204LyL4L2a4L284L2RXCIsZDpcIuC9ieC9suC9k+C8i+C9guC9heC9suC9glwiLGRkOlwiJWQg4L2J4L2y4L2T4LyLXCIsTTpcIuC9n+C+s+C8i+C9luC8i+C9guC9heC9suC9glwiLE1NOlwiJWQg4L2f4L6z4LyL4L2WXCIseTpcIuC9o+C9vOC8i+C9guC9heC9suC9glwiLHl5OlwiJWQg4L2j4L28XCJ9LHByZXBhcnNlOmZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4Lyh4Lyi4Lyj4Lyk4Lyl4Lym4Lyn4Lyo4Lyp4LygXS9nLChmdW5jdGlvbihtYXRjaCl7cmV0dXJuIG51bWJlck1hcFttYXRjaF19KSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLChmdW5jdGlvbihtYXRjaCl7cmV0dXJuIHN5bWJvbE1hcFttYXRjaF19KSl9LG1lcmlkaWVtUGFyc2U6L+C9mOC9muC9k+C8i+C9mOC9vHzgvZ7gvbzgvYLgvabgvIvgvYDgvaZ84L2J4L2y4L2T4LyL4L2C4L204L2EfOC9keC9guC9vOC9hOC8i+C9keC9gnzgvZjgvZrgvZPgvIvgvZjgvbwvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihob3VyLG1lcmlkaWVtKXtyZXR1cm4gMTI9PT1ob3VyJiYoaG91cj0wKSxcIuC9mOC9muC9k+C8i+C9mOC9vFwiPT09bWVyaWRpZW0mJmhvdXI+PTR8fFwi4L2J4L2y4L2T4LyL4L2C4L204L2EXCI9PT1tZXJpZGllbSYmaG91cjw1fHxcIuC9keC9guC9vOC9hOC8i+C9keC9glwiPT09bWVyaWRpZW0/aG91cisxMjpob3VyfSxtZXJpZGllbTpmdW5jdGlvbihob3VyLG1pbnV0ZSxpc0xvd2VyKXtyZXR1cm4gaG91cjw0P1wi4L2Y4L2a4L2T4LyL4L2Y4L28XCI6aG91cjwxMD9cIuC9nuC9vOC9guC9puC8i+C9gOC9plwiOmhvdXI8MTc/XCLgvYngvbLgvZPgvIvgvYLgvbTgvYRcIjpob3VyPDIwP1wi4L2R4L2C4L284L2E4LyL4L2R4L2CXCI6XCLgvZjgvZrgvZPgvIvgvZjgvbxcIn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoTXV0YXRpb24obnVtYmVyLHdpdGhvdXRTdWZmaXgsa2V5KXtyZXR1cm4gbnVtYmVyK1wiIFwiK2Z1bmN0aW9uKHRleHQsbnVtYmVyKXtyZXR1cm4gMj09PW51bWJlcj9mdW5jdGlvbih0ZXh0KXt2YXIgbXV0YXRpb25UYWJsZT17bTpcInZcIixiOlwidlwiLGQ6XCJ6XCJ9O3JldHVybiB2b2lkIDA9PT1tdXRhdGlvblRhYmxlW3RleHQuY2hhckF0KDApXT90ZXh0Om11dGF0aW9uVGFibGVbdGV4dC5jaGFyQXQoMCldK3RleHQuc3Vic3RyaW5nKDEpfSh0ZXh0KTp0ZXh0fSh7bW06XCJtdW51dGVublwiLE1NOlwibWl6XCIsZGQ6XCJkZXZlemhcIn1ba2V5XSxudW1iZXIpfXZhciBtb250aHNQYXJzZT1bL15nZW4vaSwvXmNbyrxcXCddaHdlL2ksL15tZXUvaSwvXmVici9pLC9ebWFlL2ksL14obWV6fGV2ZSkvaSwvXmdvdS9pLC9eZW9zL2ksL15nd2UvaSwvXmhlci9pLC9eZHUvaSwvXmtlci9pXSxtb250aHNSZWdleD0vXihnZW52ZXJ8Y1vKvFxcJ11od2V2cmVyfG1ldXJ6aHxlYnJlbHxtYWV8bWV6aGV2ZW58Z291ZXJlfGVvc3R8Z3dlbmdvbG98aGVyZXxkdXxrZXJ6dXxnZW58Y1vKvFxcJ11od2V8bWV1fGVicnxtYWV8ZXZlfGdvdXxlb3N8Z3dlfGhlcnxkdXxrZXIpL2ksbWluV2Vla2RheXNQYXJzZT1bL15TdS9pLC9eTHUvaSwvXk1lKFtecl18JCkvaSwvXk1lci9pLC9eWWEvaSwvXkd3L2ksL15TYS9pXTttb21lbnQuZGVmaW5lTG9jYWxlKFwiYnJcIix7bW9udGhzOlwiR2VudmVyX0PKvGh3ZXZyZXJfTWV1cnpoX0VicmVsX01hZV9NZXpoZXZlbl9Hb3VlcmVfRW9zdF9Hd2VuZ29sb19IZXJlX0R1X0tlcnp1XCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiR2VuX0PKvGh3ZV9NZXVfRWJyX01hZV9FdmVfR291X0Vvc19Hd2VfSGVyX0R1X0tlclwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcIlN1bF9MdW5fTWV1cnpoX01lcmPKvGhlcl9ZYW91X0d3ZW5lcl9TYWRvcm5cIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIlN1bF9MdW5fTWV1X01lcl9ZYW9fR3dlX1NhZFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIlN1X0x1X01lX01lcl9ZYV9Hd19TYVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1BhcnNlOm1pbldlZWtkYXlzUGFyc2UsZnVsbFdlZWtkYXlzUGFyc2U6Wy9ec3VsL2ksL15sdW4vaSwvXm1ldXJ6aC9pLC9ebWVyY1vKvFxcJ11oZXIvaSwvXnlhb3UvaSwvXmd3ZW5lci9pLC9ec2Fkb3JuL2ldLHNob3J0V2Vla2RheXNQYXJzZTpbL15TdWwvaSwvXkx1bi9pLC9eTWV1L2ksL15NZXIvaSwvXllhby9pLC9eR3dlL2ksL15TYWQvaV0sbWluV2Vla2RheXNQYXJzZTptaW5XZWVrZGF5c1BhcnNlLG1vbnRoc1JlZ2V4Om1vbnRoc1JlZ2V4LG1vbnRoc1Nob3J0UmVnZXg6bW9udGhzUmVnZXgsbW9udGhzU3RyaWN0UmVnZXg6L14oZ2VudmVyfGNbyrxcXCddaHdldnJlcnxtZXVyemh8ZWJyZWx8bWFlfG1lemhldmVufGdvdWVyZXxlb3N0fGd3ZW5nb2xvfGhlcmV8ZHV8a2VyenUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihnZW58Y1vKvFxcJ11od2V8bWV1fGVicnxtYWV8ZXZlfGdvdXxlb3N8Z3dlfGhlcnxkdXxrZXIpL2ksbW9udGhzUGFyc2U6bW9udGhzUGFyc2UsbG9uZ01vbnRoc1BhcnNlOm1vbnRoc1BhcnNlLHNob3J0TW9udGhzUGFyc2U6bW9udGhzUGFyc2UsbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIFthIHZpel0gTU1NTSBZWVlZXCIsTExMOlwiRCBbYSB2aXpdIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIFthIHZpel0gTU1NTSBZWVlZIEhIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW0hpeml2IGRhXSBMVFwiLG5leHREYXk6XCJbV2FyY8q8aG9hemggZGFdIExUXCIsbmV4dFdlZWs6XCJkZGRkIFtkYV0gTFRcIixsYXN0RGF5OlwiW0RlY8q8aCBkYV0gTFRcIixsYXN0V2VlazpcImRkZGQgW3Bhc2V0IGRhXSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImEtYmVubiAlc1wiLHBhc3Q6XCIlcyDKvHpvXCIsczpcInVuIG5lYmV1ZCBzZWdvbmRlbm5vw7lcIixzczpcIiVkIGVpbGVublwiLG06XCJ1ciB2dW51dGVublwiLG1tOnJlbGF0aXZlVGltZVdpdGhNdXRhdGlvbixoOlwidW4gZXVyXCIsaGg6XCIlZCBldXJcIixkOlwidW4gZGV2ZXpoXCIsZGQ6cmVsYXRpdmVUaW1lV2l0aE11dGF0aW9uLE06XCJ1ciBtaXpcIixNTTpyZWxhdGl2ZVRpbWVXaXRoTXV0YXRpb24seTpcInVyIGJsb2F6XCIseXk6ZnVuY3Rpb24obnVtYmVyKXtzd2l0Y2goZnVuY3Rpb24gbGFzdE51bWJlcihudW1iZXIpe3JldHVybiBudW1iZXI+OT9sYXN0TnVtYmVyKG51bWJlciUxMCk6bnVtYmVyfShudW1iZXIpKXtjYXNlIDE6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6Y2FzZSA5OnJldHVybiBudW1iZXIrXCIgYmxvYXpcIjtkZWZhdWx0OnJldHVybiBudW1iZXIrXCIgdmxvYXpcIn19fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfShhw7F8dmV0KS8sb3JkaW5hbDpmdW5jdGlvbihudW1iZXIpe3JldHVybiBudW1iZXIrKDE9PT1udW1iZXI/XCJhw7FcIjpcInZldFwiKX0sd2Vlazp7ZG93OjEsZG95OjR9LG1lcmlkaWVtUGFyc2U6L2EubS58Zy5tLi8saXNQTTpmdW5jdGlvbih0b2tlbil7cmV0dXJuXCJnLm0uXCI9PT10b2tlbn0sbWVyaWRpZW06ZnVuY3Rpb24oaG91cixtaW51dGUsaXNMb3dlcil7cmV0dXJuIGhvdXI8MTI/XCJhLm0uXCI6XCJnLm0uXCJ9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLHdpdGhvdXRTdWZmaXgsa2V5KXt2YXIgcmVzdWx0PW51bWJlcitcIiBcIjtzd2l0Y2goa2V5KXtjYXNlXCJzc1wiOnJldHVybiByZXN1bHQrPTE9PT1udW1iZXI/XCJzZWt1bmRhXCI6Mj09PW51bWJlcnx8Mz09PW51bWJlcnx8ND09PW51bWJlcj9cInNla3VuZGVcIjpcInNla3VuZGlcIjtjYXNlXCJtXCI6cmV0dXJuIHdpdGhvdXRTdWZmaXg/XCJqZWRuYSBtaW51dGFcIjpcImplZG5lIG1pbnV0ZVwiO2Nhc2VcIm1tXCI6cmV0dXJuIHJlc3VsdCs9MT09PW51bWJlcj9cIm1pbnV0YVwiOjI9PT1udW1iZXJ8fDM9PT1udW1iZXJ8fDQ9PT1udW1iZXI/XCJtaW51dGVcIjpcIm1pbnV0YVwiO2Nhc2VcImhcIjpyZXR1cm4gd2l0aG91dFN1ZmZpeD9cImplZGFuIHNhdFwiOlwiamVkbm9nIHNhdGFcIjtjYXNlXCJoaFwiOnJldHVybiByZXN1bHQrPTE9PT1udW1iZXI/XCJzYXRcIjoyPT09bnVtYmVyfHwzPT09bnVtYmVyfHw0PT09bnVtYmVyP1wic2F0YVwiOlwic2F0aVwiO2Nhc2VcImRkXCI6cmV0dXJuIHJlc3VsdCs9MT09PW51bWJlcj9cImRhblwiOlwiZGFuYVwiO2Nhc2VcIk1NXCI6cmV0dXJuIHJlc3VsdCs9MT09PW51bWJlcj9cIm1qZXNlY1wiOjI9PT1udW1iZXJ8fDM9PT1udW1iZXJ8fDQ9PT1udW1iZXI/XCJtamVzZWNhXCI6XCJtamVzZWNpXCI7Y2FzZVwieXlcIjpyZXR1cm4gcmVzdWx0Kz0xPT09bnVtYmVyP1wiZ29kaW5hXCI6Mj09PW51bWJlcnx8Mz09PW51bWJlcnx8ND09PW51bWJlcj9cImdvZGluZVwiOlwiZ29kaW5hXCJ9fW1vbWVudC5kZWZpbmVMb2NhbGUoXCJic1wiLHttb250aHM6XCJqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJhcl9va3RvYmFyX25vdmVtYmFyX2RlY2VtYmFyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiamFuLl9mZWIuX21hci5fYXByLl9tYWouX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy5cIi5zcGxpdChcIl9cIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpcIm5lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGFcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIm5lZC5fcG9uLl91dG8uX3NyaS5fxI1ldC5fcGV0Ll9zdWIuXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwibmVfcG9fdXRfc3JfxI1lX3BlX3N1XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJIOm1tXCIsTFRTOlwiSDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJELiBNTU1NIFlZWVlcIixMTEw6XCJELiBNTU1NIFlZWVkgSDptbVwiLExMTEw6XCJkZGRkLCBELiBNTU1NIFlZWVkgSDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIltkYW5hcyB1XSBMVFwiLG5leHREYXk6XCJbc3V0cmEgdV0gTFRcIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuXCJbdV0gW25lZGplbGp1XSBbdV0gTFRcIjtjYXNlIDM6cmV0dXJuXCJbdV0gW3NyaWplZHVdIFt1XSBMVFwiO2Nhc2UgNjpyZXR1cm5cIlt1XSBbc3Vib3R1XSBbdV0gTFRcIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuXCJbdV0gZGRkZCBbdV0gTFRcIn19LGxhc3REYXk6XCJbanXEjWVyIHVdIExUXCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpyZXR1cm5cIltwcm/FoWx1XSBkZGRkIFt1XSBMVFwiO2Nhc2UgNjpyZXR1cm5cIltwcm/FoWxlXSBbc3Vib3RlXSBbdV0gTFRcIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuXCJbcHJvxaFsaV0gZGRkZCBbdV0gTFRcIn19LHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcInphICVzXCIscGFzdDpcInByaWplICVzXCIsczpcInBhciBzZWt1bmRpXCIsc3M6dHJhbnNsYXRlLG06dHJhbnNsYXRlLG1tOnRyYW5zbGF0ZSxoOnRyYW5zbGF0ZSxoaDp0cmFuc2xhdGUsZDpcImRhblwiLGRkOnRyYW5zbGF0ZSxNOlwibWplc2VjXCIsTU06dHJhbnNsYXRlLHk6XCJnb2RpbnVcIix5eTp0cmFuc2xhdGV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9XFwuLyxvcmRpbmFsOlwiJWQuXCIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwiY2FcIix7bW9udGhzOntzdGFuZGFsb25lOlwiZ2VuZXJfZmVicmVyX21hcsOnX2FicmlsX21haWdfanVueV9qdWxpb2xfYWdvc3Rfc2V0ZW1icmVfb2N0dWJyZV9ub3ZlbWJyZV9kZXNlbWJyZVwiLnNwbGl0KFwiX1wiKSxmb3JtYXQ6XCJkZSBnZW5lcl9kZSBmZWJyZXJfZGUgbWFyw6dfZCdhYnJpbF9kZSBtYWlnX2RlIGp1bnlfZGUganVsaW9sX2QnYWdvc3RfZGUgc2V0ZW1icmVfZCdvY3R1YnJlX2RlIG5vdmVtYnJlX2RlIGRlc2VtYnJlXCIuc3BsaXQoXCJfXCIpLGlzRm9ybWF0Oi9EW29EXT8oXFxzKStNTU1NL30sbW9udGhzU2hvcnQ6XCJnZW4uX2ZlYnIuX21hcsOnX2Fici5fbWFpZ19qdW55X2p1bC5fYWcuX3NldC5fb2N0Ll9ub3YuX2Rlcy5cIi5zcGxpdChcIl9cIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpcImRpdW1lbmdlX2RpbGx1bnNfZGltYXJ0c19kaW1lY3Jlc19kaWpvdXNfZGl2ZW5kcmVzX2Rpc3NhYnRlXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJkZy5fZGwuX2R0Ll9kYy5fZGouX2R2Ll9kcy5cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJkZ19kbF9kdF9kY19kal9kdl9kc1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSDptbVwiLExUUzpcIkg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFtkZV0gWVlZWVwiLGxsOlwiRCBNTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBbZGVdIFlZWVkgW2EgbGVzXSBIOm1tXCIsbGxsOlwiRCBNTU0gWVlZWSwgSDptbVwiLExMTEw6XCJkZGRkIEQgTU1NTSBbZGVdIFlZWVkgW2EgbGVzXSBIOm1tXCIsbGxsbDpcImRkZCBEIE1NTSBZWVlZLCBIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuXCJbYXZ1aSBhIFwiKygxIT09dGhpcy5ob3VycygpP1wibGVzXCI6XCJsYVwiKStcIl0gTFRcIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVyblwiW2RlbcOgIGEgXCIrKDEhPT10aGlzLmhvdXJzKCk/XCJsZXNcIjpcImxhXCIpK1wiXSBMVFwifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVyblwiZGRkZCBbYSBcIisoMSE9PXRoaXMuaG91cnMoKT9cImxlc1wiOlwibGFcIikrXCJdIExUXCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm5cIlthaGlyIGEgXCIrKDEhPT10aGlzLmhvdXJzKCk/XCJsZXNcIjpcImxhXCIpK1wiXSBMVFwifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVyblwiW2VsXSBkZGRkIFtwYXNzYXQgYSBcIisoMSE9PXRoaXMuaG91cnMoKT9cImxlc1wiOlwibGFcIikrXCJdIExUXCJ9LHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImQnYXF1w60gJXNcIixwYXN0OlwiZmEgJXNcIixzOlwidW5zIHNlZ29uc1wiLHNzOlwiJWQgc2Vnb25zXCIsbTpcInVuIG1pbnV0XCIsbW06XCIlZCBtaW51dHNcIixoOlwidW5hIGhvcmFcIixoaDpcIiVkIGhvcmVzXCIsZDpcInVuIGRpYVwiLGRkOlwiJWQgZGllc1wiLE06XCJ1biBtZXNcIixNTTpcIiVkIG1lc29zXCIseTpcInVuIGFueVwiLHl5OlwiJWQgYW55c1wifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfShyfG58dHzDqHxhKS8sb3JkaW5hbDpmdW5jdGlvbihudW1iZXIscGVyaW9kKXt2YXIgb3V0cHV0PTE9PT1udW1iZXI/XCJyXCI6Mj09PW51bWJlcj9cIm5cIjozPT09bnVtYmVyP1wiclwiOjQ9PT1udW1iZXI/XCJ0XCI6XCLDqFwiO3JldHVyblwid1wiIT09cGVyaW9kJiZcIldcIiE9PXBlcmlvZHx8KG91dHB1dD1cImFcIiksbnVtYmVyK291dHB1dH0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjt2YXIgbW9udGhzPVwibGVkZW5fw7pub3JfYsWZZXplbl9kdWJlbl9rdsSbdGVuX8SNZXJ2ZW5fxI1lcnZlbmVjX3NycGVuX3rDocWZw61fxZnDrWplbl9saXN0b3BhZF9wcm9zaW5lY1wiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydD1cImxlZF/Dum5vX2LFmWVfZHViX2t2xJtfxI12bl/EjXZjX3NycF96w6HFmV/FmcOtal9saXNfcHJvXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1BhcnNlPVsvXmxlZC9pLC9ew7puby9pLC9eYsWZZS9pLC9eZHViL2ksL15rdsSbL2ksL14oxI12bnzEjWVydmVuJHzEjWVydm5hKS9pLC9eKMSNdmN8xI1lcnZlbmVjfMSNZXJ2ZW5jZSkvaSwvXnNycC9pLC9eesOhxZkvaSwvXsWZw61qL2ksL15saXMvaSwvXnByby9pXSxtb250aHNSZWdleD0vXihsZWRlbnzDum5vcnxixZllemVufGR1YmVufGt2xJt0ZW58xI1lcnZlbmVjfMSNZXJ2ZW5jZXzEjWVydmVufMSNZXJ2bmF8c3JwZW58esOhxZnDrXzFmcOtamVufGxpc3RvcGFkfHByb3NpbmVjfGxlZHzDum5vfGLFmWV8ZHVifGt2xJt8xI12bnzEjXZjfHNycHx6w6HFmXzFmcOtanxsaXN8cHJvKS9pO2Z1bmN0aW9uIHBsdXJhbChuKXtyZXR1cm4gbj4xJiZuPDUmJjEhPX5+KG4vMTApfWZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsd2l0aG91dFN1ZmZpeCxrZXksaXNGdXR1cmUpe3ZhciByZXN1bHQ9bnVtYmVyK1wiIFwiO3N3aXRjaChrZXkpe2Nhc2VcInNcIjpyZXR1cm4gd2l0aG91dFN1ZmZpeHx8aXNGdXR1cmU/XCJww6FyIHNla3VuZFwiOlwicMOhciBzZWt1bmRhbWlcIjtjYXNlXCJzc1wiOnJldHVybiB3aXRob3V0U3VmZml4fHxpc0Z1dHVyZT9yZXN1bHQrKHBsdXJhbChudW1iZXIpP1wic2VrdW5keVwiOlwic2VrdW5kXCIpOnJlc3VsdCtcInNla3VuZGFtaVwiO2Nhc2VcIm1cIjpyZXR1cm4gd2l0aG91dFN1ZmZpeD9cIm1pbnV0YVwiOmlzRnV0dXJlP1wibWludXR1XCI6XCJtaW51dG91XCI7Y2FzZVwibW1cIjpyZXR1cm4gd2l0aG91dFN1ZmZpeHx8aXNGdXR1cmU/cmVzdWx0KyhwbHVyYWwobnVtYmVyKT9cIm1pbnV0eVwiOlwibWludXRcIik6cmVzdWx0K1wibWludXRhbWlcIjtjYXNlXCJoXCI6cmV0dXJuIHdpdGhvdXRTdWZmaXg/XCJob2RpbmFcIjppc0Z1dHVyZT9cImhvZGludVwiOlwiaG9kaW5vdVwiO2Nhc2VcImhoXCI6cmV0dXJuIHdpdGhvdXRTdWZmaXh8fGlzRnV0dXJlP3Jlc3VsdCsocGx1cmFsKG51bWJlcik/XCJob2RpbnlcIjpcImhvZGluXCIpOnJlc3VsdCtcImhvZGluYW1pXCI7Y2FzZVwiZFwiOnJldHVybiB3aXRob3V0U3VmZml4fHxpc0Z1dHVyZT9cImRlblwiOlwiZG5lbVwiO2Nhc2VcImRkXCI6cmV0dXJuIHdpdGhvdXRTdWZmaXh8fGlzRnV0dXJlP3Jlc3VsdCsocGx1cmFsKG51bWJlcik/XCJkbnlcIjpcImRuw61cIik6cmVzdWx0K1wiZG55XCI7Y2FzZVwiTVwiOnJldHVybiB3aXRob3V0U3VmZml4fHxpc0Z1dHVyZT9cIm3Em3PDrWNcIjpcIm3Em3PDrWNlbVwiO2Nhc2VcIk1NXCI6cmV0dXJuIHdpdGhvdXRTdWZmaXh8fGlzRnV0dXJlP3Jlc3VsdCsocGx1cmFsKG51bWJlcik/XCJtxJtzw61jZVwiOlwibcSbc8OtY8WvXCIpOnJlc3VsdCtcIm3Em3PDrWNpXCI7Y2FzZVwieVwiOnJldHVybiB3aXRob3V0U3VmZml4fHxpc0Z1dHVyZT9cInJva1wiOlwicm9rZW1cIjtjYXNlXCJ5eVwiOnJldHVybiB3aXRob3V0U3VmZml4fHxpc0Z1dHVyZT9yZXN1bHQrKHBsdXJhbChudW1iZXIpP1wicm9reVwiOlwibGV0XCIpOnJlc3VsdCtcImxldHlcIn19bW9tZW50LmRlZmluZUxvY2FsZShcImNzXCIse21vbnRoczptb250aHMsbW9udGhzU2hvcnQ6bW9udGhzU2hvcnQsbW9udGhzUmVnZXg6bW9udGhzUmVnZXgsbW9udGhzU2hvcnRSZWdleDptb250aHNSZWdleCxtb250aHNTdHJpY3RSZWdleDovXihsZWRlbnxsZWRuYXzDum5vcmF8w7pub3J8YsWZZXplbnxixZllem5hfGR1YmVufGR1Ym5hfGt2xJt0ZW58a3bEm3RuYXzEjWVydmVuZWN8xI1lcnZlbmNlfMSNZXJ2ZW58xI1lcnZuYXxzcnBlbnxzcnBuYXx6w6HFmcOtfMWZw61qZW58xZnDrWpuYXxsaXN0b3BhZHV8bGlzdG9wYWR8cHJvc2luZWN8cHJvc2luY2UpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihsZWR8w7pub3xixZllfGR1YnxrdsSbfMSNdm58xI12Y3xzcnB8esOhxZl8xZnDrWp8bGlzfHBybykvaSxtb250aHNQYXJzZTptb250aHNQYXJzZSxsb25nTW9udGhzUGFyc2U6bW9udGhzUGFyc2Usc2hvcnRNb250aHNQYXJzZTptb250aHNQYXJzZSx3ZWVrZGF5czpcIm5lZMSbbGVfcG9uZMSbbMOtX8O6dGVyw71fc3TFmWVkYV/EjXR2cnRla19ww6F0ZWtfc29ib3RhXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJuZV9wb1/DunRfc3RfxI10X3DDoV9zb1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIm5lX3BvX8O6dF9zdF/EjXRfcMOhX3NvXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkg6bW1cIixMVFM6XCJIOm1tOnNzXCIsTDpcIkRELk1NLllZWVlcIixMTDpcIkQuIE1NTU0gWVlZWVwiLExMTDpcIkQuIE1NTU0gWVlZWSBIOm1tXCIsTExMTDpcImRkZGQgRC4gTU1NTSBZWVlZIEg6bW1cIixsOlwiRC4gTS4gWVlZWVwifSxjYWxlbmRhcjp7c2FtZURheTpcIltkbmVzIHZdIExUXCIsbmV4dERheTpcIlt6w610cmEgdl0gTFRcIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuXCJbdiBuZWTEm2xpIHZdIExUXCI7Y2FzZSAxOmNhc2UgMjpyZXR1cm5cIlt2XSBkZGRkIFt2XSBMVFwiO2Nhc2UgMzpyZXR1cm5cIlt2ZSBzdMWZZWR1IHZdIExUXCI7Y2FzZSA0OnJldHVyblwiW3ZlIMSNdHZydGVrIHZdIExUXCI7Y2FzZSA1OnJldHVyblwiW3YgcMOhdGVrIHZdIExUXCI7Y2FzZSA2OnJldHVyblwiW3Ygc29ib3R1IHZdIExUXCJ9fSxsYXN0RGF5OlwiW3bEjWVyYSB2XSBMVFwiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm5cIlttaW51bG91IG5lZMSbbGkgdl0gTFRcIjtjYXNlIDE6Y2FzZSAyOnJldHVyblwiW21pbnVsw6ldIGRkZGQgW3ZdIExUXCI7Y2FzZSAzOnJldHVyblwiW21pbnVsb3Ugc3TFmWVkdSB2XSBMVFwiO2Nhc2UgNDpjYXNlIDU6cmV0dXJuXCJbbWludWzDvV0gZGRkZCBbdl0gTFRcIjtjYXNlIDY6cmV0dXJuXCJbbWludWxvdSBzb2JvdHUgdl0gTFRcIn19LHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcInphICVzXCIscGFzdDpcInDFmWVkICVzXCIsczp0cmFuc2xhdGUsc3M6dHJhbnNsYXRlLG06dHJhbnNsYXRlLG1tOnRyYW5zbGF0ZSxoOnRyYW5zbGF0ZSxoaDp0cmFuc2xhdGUsZDp0cmFuc2xhdGUsZGQ6dHJhbnNsYXRlLE06dHJhbnNsYXRlLE1NOnRyYW5zbGF0ZSx5OnRyYW5zbGF0ZSx5eTp0cmFuc2xhdGV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9XFwuLyxvcmRpbmFsOlwiJWQuXCIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwiY3ZcIix7bW9udGhzOlwi0LrTkdGA0LvQsNGHX9C90LDRgNOR0YFf0L/Rg9GIX9Cw0LrQsF/QvNCw0Llf0qvTl9GA0YLQvNC1X9GD0YLTkV/Sq9GD0YDQu9CwX9Cw0LLTkdC9X9GO0L/QsF/Rh9Oz0Lpf0YDQsNGI0YLQsNCyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0Olwi0LrTkdGAX9C90LDRgF/Qv9GD0Yhf0LDQutCwX9C80LDQuV/Sq9OX0YBf0YPRgtORX9Kr0YPRgF/QsNCy0L1f0Y7Qv9CwX9GH07PQul/RgNCw0YhcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCLQstGL0YDRgdCw0YDQvdC40LrRg9C9X9GC0YPQvdGC0LjQutGD0L1f0YvRgtC70LDRgNC40LrRg9C9X9GO0L3QutGD0L1f0LrTl9Kr0L3QtdGA0L3QuNC60YPQvV/RjdGA0L3QtdC60YPQvV/RiNOR0LzQsNGC0LrRg9C9XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLQstGL0YBf0YLRg9C9X9GL0YLQu1/RjtC9X9C605fSq1/RjdGA0L1f0YjTkdC8XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi0LLRgF/RgtC9X9GL0YJf0Y7QvV/QutKrX9GN0YBf0YjQvFwiLnNwbGl0KFwiX1wiKSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkRELU1NLVlZWVlcIixMTDpcIllZWVkgW9Kr0YPQu9GF0LhdIE1NTU0gW9GD0LnTkdGF05fQvV0gRFst0LzTl9GI05ddXCIsTExMOlwiWVlZWSBb0qvRg9C70YXQuF0gTU1NTSBb0YPQudOR0YXTl9C9XSBEWy3QvNOX0YjTl10sIEhIOm1tXCIsTExMTDpcImRkZGQsIFlZWVkgW9Kr0YPQu9GF0LhdIE1NTU0gW9GD0LnTkdGF05fQvV0gRFst0LzTl9GI05ddLCBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIlvQn9Cw0Y/QvV0gTFQgW9GB0LXRhdC10YLRgNC1XVwiLG5leHREYXk6XCJb0KvRgNCw0L1dIExUIFvRgdC10YXQtdGC0YDQtV1cIixsYXN0RGF5OlwiW9OW0L3QtdGAXSBMVCBb0YHQtdGF0LXRgtGA0LVdXCIsbmV4dFdlZWs6XCJb0qrQuNGC0LXRgV0gZGRkZCBMVCBb0YHQtdGF0LXRgtGA0LVdXCIsbGFzdFdlZWs6XCJb0JjRgNGC0L3Tl10gZGRkZCBMVCBb0YHQtdGF0LXRgtGA0LVdXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uKG91dHB1dCl7cmV0dXJuIG91dHB1dCsoL9GB0LXRhdC10YIkL2kuZXhlYyhvdXRwdXQpP1wi0YDQtdC9XCI6L9Kr0YPQuyQvaS5leGVjKG91dHB1dCk/XCLRgtCw0L1cIjpcItGA0LDQvVwiKX0scGFzdDpcIiVzINC60LDRj9C70LvQsFwiLHM6XCLQv9OX0YAt0LjQuiDSq9C10LrQutGD0L3RglwiLHNzOlwiJWQg0qvQtdC60LrRg9C90YJcIixtOlwi0L/Tl9GAINC80LjQvdGD0YJcIixtbTpcIiVkINC80LjQvdGD0YJcIixoOlwi0L/Tl9GAINGB0LXRhdC10YJcIixoaDpcIiVkINGB0LXRhdC10YJcIixkOlwi0L/Tl9GAINC60YPQvVwiLGRkOlwiJWQg0LrRg9C9XCIsTTpcItC/05fRgCDRg9C505HRhVwiLE1NOlwiJWQg0YPQudOR0YVcIix5Olwi0L/Tl9GAINKr0YPQu1wiLHl5OlwiJWQg0qvRg9C7XCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9LdC805fRiC8sb3JkaW5hbDpcIiVkLdC805fRiFwiLHdlZWs6e2RvdzoxLGRveTo3fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7bW9tZW50LmRlZmluZUxvY2FsZShcImN5XCIse21vbnRoczpcIklvbmF3cl9DaHdlZnJvcl9NYXdydGhfRWJyaWxsX01haV9NZWhlZmluX0dvcmZmZW5uYWZfQXdzdF9NZWRpX0h5ZHJlZl9UYWNod2VkZF9SaGFnZnlyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSW9uX0Nod2VfTWF3X0Vicl9NYWlfTWVoX0dvcl9Bd3NfTWVkX0h5ZF9UYWNoX1JoYWdcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCJEeWRkIFN1bF9EeWRkIExsdW5fRHlkZCBNYXdydGhfRHlkZCBNZXJjaGVyX0R5ZGQgSWF1X0R5ZGQgR3dlbmVyX0R5ZGQgU2Fkd3JuXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJTdWxfTGx1bl9NYXdfTWVyX0lhdV9Hd2VfU2FkXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiU3VfTGxfTWFfTWVfSWFfR3dfU2FcIi5zcGxpdChcIl9cIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIltIZWRkaXcgYW1dIExUXCIsbmV4dERheTpcIltZZm9yeSBhbV0gTFRcIixuZXh0V2VlazpcImRkZGQgW2FtXSBMVFwiLGxhc3REYXk6XCJbRGRvZSBhbV0gTFRcIixsYXN0V2VlazpcImRkZGQgW2Rpd2V0aGFmIGFtXSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIm1ld24gJXNcIixwYXN0OlwiJXMgeW4gw7RsXCIsczpcInljaHlkaWcgZWlsaWFkYXVcIixzczpcIiVkIGVpbGlhZFwiLG06XCJtdW51ZFwiLG1tOlwiJWQgbXVudWRcIixoOlwiYXdyXCIsaGg6XCIlZCBhd3JcIixkOlwiZGl3cm5vZFwiLGRkOlwiJWQgZGl3cm5vZFwiLE06XCJtaXNcIixNTTpcIiVkIG1pc1wiLHk6XCJibHd5ZGR5blwiLHl5OlwiJWQgZmx5bmVkZFwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfShmZWR8YWlufGFmfGlsfHlkZHxlZHxlZykvLG9yZGluYWw6ZnVuY3Rpb24obnVtYmVyKXt2YXIgb3V0cHV0PVwiXCI7cmV0dXJuIG51bWJlcj4yMD9vdXRwdXQ9NDA9PT1udW1iZXJ8fDUwPT09bnVtYmVyfHw2MD09PW51bWJlcnx8ODA9PT1udW1iZXJ8fDEwMD09PW51bWJlcj9cImZlZFwiOlwiYWluXCI6bnVtYmVyPjAmJihvdXRwdXQ9W1wiXCIsXCJhZlwiLFwiaWxcIixcInlkZFwiLFwieWRkXCIsXCJlZFwiLFwiZWRcIixcImVkXCIsXCJmZWRcIixcImZlZFwiLFwiZmVkXCIsXCJlZ1wiLFwiZmVkXCIsXCJlZ1wiLFwiZWdcIixcImZlZFwiLFwiZWdcIixcImVnXCIsXCJmZWRcIixcImVnXCIsXCJmZWRcIl1bbnVtYmVyXSksbnVtYmVyK291dHB1dH0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwiZGFcIix7bW9udGhzOlwiamFudWFyX2ZlYnJ1YXJfbWFydHNfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJqYW5fZmViX21hcl9hcHJfbWFqX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlY1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcInPDuG5kYWdfbWFuZGFnX3RpcnNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2zDuHJkYWdcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcInPDuG5fbWFuX3Rpcl9vbnNfdG9yX2ZyZV9sw7hyXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwic8O4X21hX3RpX29uX3RvX2ZyX2zDuFwiLnNwbGl0KFwiX1wiKSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkRELk1NLllZWVlcIixMTDpcIkQuIE1NTU0gWVlZWVwiLExMTDpcIkQuIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkIFtkLl0gRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW2kgZGFnIGtsLl0gTFRcIixuZXh0RGF5OlwiW2kgbW9yZ2VuIGtsLl0gTFRcIixuZXh0V2VlazpcInDDpSBkZGRkIFtrbC5dIExUXCIsbGFzdERheTpcIltpIGfDpXIga2wuXSBMVFwiLGxhc3RXZWVrOlwiW2ldIGRkZGRbcyBrbC5dIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwib20gJXNcIixwYXN0OlwiJXMgc2lkZW5cIixzOlwiZsOlIHNla3VuZGVyXCIsc3M6XCIlZCBzZWt1bmRlclwiLG06XCJldCBtaW51dFwiLG1tOlwiJWQgbWludXR0ZXJcIixoOlwiZW4gdGltZVwiLGhoOlwiJWQgdGltZXJcIixkOlwiZW4gZGFnXCIsZGQ6XCIlZCBkYWdlXCIsTTpcImVuIG3DpW5lZFwiLE1NOlwiJWQgbcOlbmVkZXJcIix5OlwiZXQgw6VyXCIseXk6XCIlZCDDpXJcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn1cXC4vLG9yZGluYWw6XCIlZC5cIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLHdpdGhvdXRTdWZmaXgsa2V5LGlzRnV0dXJlKXt2YXIgZm9ybWF0PXttOltcImVpbmUgTWludXRlXCIsXCJlaW5lciBNaW51dGVcIl0saDpbXCJlaW5lIFN0dW5kZVwiLFwiZWluZXIgU3R1bmRlXCJdLGQ6W1wiZWluIFRhZ1wiLFwiZWluZW0gVGFnXCJdLGRkOltudW1iZXIrXCIgVGFnZVwiLG51bWJlcitcIiBUYWdlblwiXSx3OltcImVpbmUgV29jaGVcIixcImVpbmVyIFdvY2hlXCJdLE06W1wiZWluIE1vbmF0XCIsXCJlaW5lbSBNb25hdFwiXSxNTTpbbnVtYmVyK1wiIE1vbmF0ZVwiLG51bWJlcitcIiBNb25hdGVuXCJdLHk6W1wiZWluIEphaHJcIixcImVpbmVtIEphaHJcIl0seXk6W251bWJlcitcIiBKYWhyZVwiLG51bWJlcitcIiBKYWhyZW5cIl19O3JldHVybiB3aXRob3V0U3VmZml4P2Zvcm1hdFtrZXldWzBdOmZvcm1hdFtrZXldWzFdfW1vbWVudC5kZWZpbmVMb2NhbGUoXCJkZVwiLHttb250aHM6XCJKYW51YXJfRmVicnVhcl9Nw6Ryel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIkphbi5fRmViLl9Nw6Ryel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6XCJTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZ1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiU28uX01vLl9EaS5fTWkuX0RvLl9Gci5fU2EuXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiU29fTW9fRGlfTWlfRG9fRnJfU2FcIi5zcGxpdChcIl9cIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQuTU0uWVlZWVwiLExMOlwiRC4gTU1NTSBZWVlZXCIsTExMOlwiRC4gTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQsIEQuIE1NTU0gWVlZWSBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIltoZXV0ZSB1bV0gTFQgW1Vocl1cIixzYW1lRWxzZTpcIkxcIixuZXh0RGF5OlwiW21vcmdlbiB1bV0gTFQgW1Vocl1cIixuZXh0V2VlazpcImRkZGQgW3VtXSBMVCBbVWhyXVwiLGxhc3REYXk6XCJbZ2VzdGVybiB1bV0gTFQgW1Vocl1cIixsYXN0V2VlazpcIltsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJpbiAlc1wiLHBhc3Q6XCJ2b3IgJXNcIixzOlwiZWluIHBhYXIgU2VrdW5kZW5cIixzczpcIiVkIFNla3VuZGVuXCIsbTpwcm9jZXNzUmVsYXRpdmVUaW1lLG1tOlwiJWQgTWludXRlblwiLGg6cHJvY2Vzc1JlbGF0aXZlVGltZSxoaDpcIiVkIFN0dW5kZW5cIixkOnByb2Nlc3NSZWxhdGl2ZVRpbWUsZGQ6cHJvY2Vzc1JlbGF0aXZlVGltZSx3OnByb2Nlc3NSZWxhdGl2ZVRpbWUsd3c6XCIlZCBXb2NoZW5cIixNOnByb2Nlc3NSZWxhdGl2ZVRpbWUsTU06cHJvY2Vzc1JlbGF0aXZlVGltZSx5OnByb2Nlc3NSZWxhdGl2ZVRpbWUseXk6cHJvY2Vzc1JlbGF0aXZlVGltZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn1cXC4vLG9yZGluYWw6XCIlZC5cIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLHdpdGhvdXRTdWZmaXgsa2V5LGlzRnV0dXJlKXt2YXIgZm9ybWF0PXttOltcImVpbmUgTWludXRlXCIsXCJlaW5lciBNaW51dGVcIl0saDpbXCJlaW5lIFN0dW5kZVwiLFwiZWluZXIgU3R1bmRlXCJdLGQ6W1wiZWluIFRhZ1wiLFwiZWluZW0gVGFnXCJdLGRkOltudW1iZXIrXCIgVGFnZVwiLG51bWJlcitcIiBUYWdlblwiXSx3OltcImVpbmUgV29jaGVcIixcImVpbmVyIFdvY2hlXCJdLE06W1wiZWluIE1vbmF0XCIsXCJlaW5lbSBNb25hdFwiXSxNTTpbbnVtYmVyK1wiIE1vbmF0ZVwiLG51bWJlcitcIiBNb25hdGVuXCJdLHk6W1wiZWluIEphaHJcIixcImVpbmVtIEphaHJcIl0seXk6W251bWJlcitcIiBKYWhyZVwiLG51bWJlcitcIiBKYWhyZW5cIl19O3JldHVybiB3aXRob3V0U3VmZml4P2Zvcm1hdFtrZXldWzBdOmZvcm1hdFtrZXldWzFdfW1vbWVudC5kZWZpbmVMb2NhbGUoXCJkZS1hdFwiLHttb250aHM6XCJKw6RubmVyX0ZlYnJ1YXJfTcOkcnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJKw6RuLl9GZWIuX03DpHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei5cIi5zcGxpdChcIl9cIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpcIlNvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS5cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJTb19Nb19EaV9NaV9Eb19Gcl9TYVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJELiBNTU1NIFlZWVlcIixMTEw6XCJELiBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW2hldXRlIHVtXSBMVCBbVWhyXVwiLHNhbWVFbHNlOlwiTFwiLG5leHREYXk6XCJbbW9yZ2VuIHVtXSBMVCBbVWhyXVwiLG5leHRXZWVrOlwiZGRkZCBbdW1dIExUIFtVaHJdXCIsbGFzdERheTpcIltnZXN0ZXJuIHVtXSBMVCBbVWhyXVwiLGxhc3RXZWVrOlwiW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXVwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImluICVzXCIscGFzdDpcInZvciAlc1wiLHM6XCJlaW4gcGFhciBTZWt1bmRlblwiLHNzOlwiJWQgU2VrdW5kZW5cIixtOnByb2Nlc3NSZWxhdGl2ZVRpbWUsbW06XCIlZCBNaW51dGVuXCIsaDpwcm9jZXNzUmVsYXRpdmVUaW1lLGhoOlwiJWQgU3R1bmRlblwiLGQ6cHJvY2Vzc1JlbGF0aXZlVGltZSxkZDpwcm9jZXNzUmVsYXRpdmVUaW1lLHc6cHJvY2Vzc1JlbGF0aXZlVGltZSx3dzpcIiVkIFdvY2hlblwiLE06cHJvY2Vzc1JlbGF0aXZlVGltZSxNTTpwcm9jZXNzUmVsYXRpdmVUaW1lLHk6cHJvY2Vzc1JlbGF0aXZlVGltZSx5eTpwcm9jZXNzUmVsYXRpdmVUaW1lfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfVxcLi8sb3JkaW5hbDpcIiVkLlwiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsd2l0aG91dFN1ZmZpeCxrZXksaXNGdXR1cmUpe3ZhciBmb3JtYXQ9e206W1wiZWluZSBNaW51dGVcIixcImVpbmVyIE1pbnV0ZVwiXSxoOltcImVpbmUgU3R1bmRlXCIsXCJlaW5lciBTdHVuZGVcIl0sZDpbXCJlaW4gVGFnXCIsXCJlaW5lbSBUYWdcIl0sZGQ6W251bWJlcitcIiBUYWdlXCIsbnVtYmVyK1wiIFRhZ2VuXCJdLHc6W1wiZWluZSBXb2NoZVwiLFwiZWluZXIgV29jaGVcIl0sTTpbXCJlaW4gTW9uYXRcIixcImVpbmVtIE1vbmF0XCJdLE1NOltudW1iZXIrXCIgTW9uYXRlXCIsbnVtYmVyK1wiIE1vbmF0ZW5cIl0seTpbXCJlaW4gSmFoclwiLFwiZWluZW0gSmFoclwiXSx5eTpbbnVtYmVyK1wiIEphaHJlXCIsbnVtYmVyK1wiIEphaHJlblwiXX07cmV0dXJuIHdpdGhvdXRTdWZmaXg/Zm9ybWF0W2tleV1bMF06Zm9ybWF0W2tleV1bMV19bW9tZW50LmRlZmluZUxvY2FsZShcImRlLWNoXCIse21vbnRoczpcIkphbnVhcl9GZWJydWFyX03DpHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuLl9GZWIuX03DpHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei5cIi5zcGxpdChcIl9cIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpcIlNvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJTb19Nb19EaV9NaV9Eb19Gcl9TYVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIlNvX01vX0RpX01pX0RvX0ZyX1NhXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkRELk1NLllZWVlcIixMTDpcIkQuIE1NTU0gWVlZWVwiLExMTDpcIkQuIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJbaGV1dGUgdW1dIExUIFtVaHJdXCIsc2FtZUVsc2U6XCJMXCIsbmV4dERheTpcIlttb3JnZW4gdW1dIExUIFtVaHJdXCIsbmV4dFdlZWs6XCJkZGRkIFt1bV0gTFQgW1Vocl1cIixsYXN0RGF5OlwiW2dlc3Rlcm4gdW1dIExUIFtVaHJdXCIsbGFzdFdlZWs6XCJbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiaW4gJXNcIixwYXN0Olwidm9yICVzXCIsczpcImVpbiBwYWFyIFNla3VuZGVuXCIsc3M6XCIlZCBTZWt1bmRlblwiLG06cHJvY2Vzc1JlbGF0aXZlVGltZSxtbTpcIiVkIE1pbnV0ZW5cIixoOnByb2Nlc3NSZWxhdGl2ZVRpbWUsaGg6XCIlZCBTdHVuZGVuXCIsZDpwcm9jZXNzUmVsYXRpdmVUaW1lLGRkOnByb2Nlc3NSZWxhdGl2ZVRpbWUsdzpwcm9jZXNzUmVsYXRpdmVUaW1lLHd3OlwiJWQgV29jaGVuXCIsTTpwcm9jZXNzUmVsYXRpdmVUaW1lLE1NOnByb2Nlc3NSZWxhdGl2ZVRpbWUseTpwcm9jZXNzUmVsYXRpdmVUaW1lLHl5OnByb2Nlc3NSZWxhdGl2ZVRpbWV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9XFwuLyxvcmRpbmFsOlwiJWQuXCIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjt2YXIgbW9udGhzPVtcIt6W3qzegt6q3ofept6D3qlcIixcIt6K3qzehN6w3oPeqt6H3qbeg96pXCIsXCLeid6n3oPeqN6X3qpcIixcIt6H3q3eld6w3oPeqd6N3qpcIixcIt6J3q1cIixcIt6W3qvegt6wXCIsXCLelt6q3o3ept6H3qhcIixcIt6H3q/ejt6m3pDesN6T3qpcIixcIt6Q3qzeld6w3pPerN6J3rDehN6m3oPeqlwiLFwi3ofert6G3rDek96v3oTept6D3qpcIixcIt6C3q7eiN6s3onesN6E3qbeg96qXCIsXCLekd6o3pDerN6J3rDehN6m3oPeqlwiXSx3ZWVrZGF5cz1bXCLeh96n3oveqN6H3rDejN6mXCIsXCLegN6v3oneplwiLFwi3ofept6C3rDejt6n3oPeplwiLFwi3oTeqt6L3qZcIixcIt6E3qreg96n3pDesN6K3qbejN6oXCIsXCLegN6q3obeqt6D3qpcIixcIt6A3q7egt6o3oDeqN6D3qpcIl07bW9tZW50LmRlZmluZUxvY2FsZShcImR2XCIse21vbnRoczptb250aHMsbW9udGhzU2hvcnQ6bW9udGhzLHdlZWtkYXlzOndlZWtkYXlzLHdlZWtkYXlzU2hvcnQ6d2Vla2RheXMsd2Vla2RheXNNaW46XCLeh96n3oveqF/egN6v3onepl/eh96m3oLesF/ehN6q3ovepl/ehN6q3oPep1/egN6q3obeql/egN6u3oLeqFwiLnNwbGl0KFwiX1wiKSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkQvTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQgRCBNTU1NIFlZWVkgSEg6bW1cIn0sbWVyaWRpZW1QYXJzZTov3onehnzeid6KLyxpc1BNOmZ1bmN0aW9uKGlucHV0KXtyZXR1cm5cIt6J3opcIj09PWlucHV0fSxtZXJpZGllbTpmdW5jdGlvbihob3VyLG1pbnV0ZSxpc0xvd2VyKXtyZXR1cm4gaG91cjwxMj9cIt6J3oZcIjpcIt6J3opcIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJb3oneqN6H3qbei96qXSBMVFwiLG5leHREYXk6XCJb3onep96L3qbeid6nXSBMVFwiLG5leHRXZWVrOlwiZGRkZCBMVFwiLGxhc3REYXk6XCJb3ofeqN6H3rDelN6sXSBMVFwiLGxhc3RXZWVrOlwiW96K3qfeh96o3ozeqt6I3qhdIGRkZGQgTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCLejN6s3oPerd6O3qbeh96oICVzXCIscGFzdDpcIt6G3qreg96o3oLesCAlc1wiLHM6XCLekN6o3obeqt6C3rDejN6q3obert6F3qzeh96wXCIsc3M6XCJkJSDekN6o3obeqt6C3rDejN6qXCIsbTpcIt6J3qjegt6o3pPerN6H3rBcIixtbTpcIt6J3qjegt6o3pPeqiAlZFwiLGg6XCLejt6m3pHeqN6H3qjeg96s3ofesFwiLGhoOlwi3o7ept6R3qjeh96o3oPeqiAlZFwiLGQ6XCLei96q3ojept6A3qzeh96wXCIsZGQ6XCLei96q3ojept6Q3rAgJWRcIixNOlwi3onept6A3qzeh96wXCIsTU06XCLeid6m3pDesCAlZFwiLHk6XCLeh96m3oDept6D3qzeh96wXCIseXk6XCLeh96m3oDept6D3qogJWRcIn0scHJlcGFyc2U6ZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL9iML2csXCIsXCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csXCLYjFwiKX0sd2Vlazp7ZG93OjcsZG95OjEyfX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7bW9tZW50LmRlZmluZUxvY2FsZShcImVsXCIse21vbnRoc05vbWluYXRpdmVFbDpcIs6ZzrHOvc6/z4XOrM+BzrnOv8+CX86mzrXOss+Bzr/Phc6sz4HOuc6/z4JfzpzOrM+Bz4TOuc6/z4JfzpHPgM+Bzq/Ou865zr/Pgl/OnM6szrnOv8+CX86Zzr/Pjc69zrnOv8+CX86Zzr/Pjc67zrnOv8+CX86Rz43Os86/z4XPg8+Ezr/Pgl/Oo861z4DPhM6tzrzOss+BzrnOv8+CX86fzrrPhM+OzrLPgc65zr/Pgl/Onc6/zq3OvM6yz4HOuc6/z4JfzpTOtc66zq3OvM6yz4HOuc6/z4JcIi5zcGxpdChcIl9cIiksbW9udGhzR2VuaXRpdmVFbDpcIs6ZzrHOvc6/z4XOsc+Bzq/Ov8+FX86mzrXOss+Bzr/Phc6xz4HOr86/z4VfzpzOsc+Bz4TOr86/z4VfzpHPgM+BzrnOu86vzr/PhV/OnM6xzpDOv8+FX86Zzr/Phc69zq/Ov8+FX86Zzr/Phc67zq/Ov8+FX86Rz4XOs86/z43Pg8+Ezr/PhV/Oo861z4DPhM61zrzOss+Bzq/Ov8+FX86fzrrPhM+JzrLPgc6vzr/PhV/Onc6/zrXOvM6yz4HOr86/z4VfzpTOtc66zrXOvM6yz4HOr86/z4VcIi5zcGxpdChcIl9cIiksbW9udGhzOmZ1bmN0aW9uKG1vbWVudFRvRm9ybWF0LGZvcm1hdCl7cmV0dXJuIG1vbWVudFRvRm9ybWF0P1wic3RyaW5nXCI9PXR5cGVvZiBmb3JtYXQmJi9ELy50ZXN0KGZvcm1hdC5zdWJzdHJpbmcoMCxmb3JtYXQuaW5kZXhPZihcIk1NTU1cIikpKT90aGlzLl9tb250aHNHZW5pdGl2ZUVsW21vbWVudFRvRm9ybWF0Lm1vbnRoKCldOnRoaXMuX21vbnRoc05vbWluYXRpdmVFbFttb21lbnRUb0Zvcm1hdC5tb250aCgpXTp0aGlzLl9tb250aHNOb21pbmF0aXZlRWx9LG1vbnRoc1Nob3J0OlwizpnOsc69X86mzrXOsl/OnM6xz4FfzpHPgM+BX86czrHPil/Omc6/z4XOvV/Omc6/z4XOu1/Okc+FzrNfzqPOtc+AX86fzrrPhF/Onc6/zrVfzpTOtc66XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwizprPhc+BzrnOsc66zq5fzpTOtc+Fz4TOrc+BzrFfzqTPgc6vz4TOt1/OpM61z4TOrM+Bz4TOt1/OoM6tzrzPgM+EzrdfzqDOsc+BzrHPg866zrXPhc6uX86jzqzOss6yzrHPhM6/XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLOms+Fz4FfzpTOtc+FX86kz4HOuV/OpM61z4RfzqDOtc68X86gzrHPgV/Oo86xzrJcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLOms+FX86UzrVfzqTPgV/OpM61X86gzrVfzqDOsV/Oo86xXCIuc3BsaXQoXCJfXCIpLG1lcmlkaWVtOmZ1bmN0aW9uKGhvdXJzLG1pbnV0ZXMsaXNMb3dlcil7cmV0dXJuIGhvdXJzPjExP2lzTG93ZXI/XCLOvM68XCI6XCLOnM6cXCI6aXNMb3dlcj9cIs+AzrxcIjpcIs6gzpxcIn0saXNQTTpmdW5jdGlvbihpbnB1dCl7cmV0dXJuXCLOvFwiPT09KGlucHV0K1wiXCIpLnRvTG93ZXJDYXNlKClbMF19LG1lcmlkaWVtUGFyc2U6L1vOoM6cXVxcLj/OnD9cXC4/L2ksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiaDptbSBBXCIsTFRTOlwiaDptbTpzcyBBXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgaDptbSBBXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQVwifSxjYWxlbmRhckVsOntzYW1lRGF5OlwiW86jzq7OvM61z4HOsSB7fV0gTFRcIixuZXh0RGF5OlwiW86Rz43Pgc65zr8ge31dIExUXCIsbmV4dFdlZWs6XCJkZGRkIFt7fV0gTFRcIixsYXN0RGF5OlwiW86nzrjOtc+CIHt9XSBMVFwiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgNjpyZXR1cm5cIlvPhM6/IM+Az4HOv863zrPOv8+NzrzOtc69zr9dIGRkZGQgW3t9XSBMVFwiO2RlZmF1bHQ6cmV0dXJuXCJbz4TOt869IM+Az4HOv863zrPOv8+NzrzOtc69zrddIGRkZGQgW3t9XSBMVFwifX0sc2FtZUVsc2U6XCJMXCJ9LGNhbGVuZGFyOmZ1bmN0aW9uKGtleSxtb20pe3ZhciBpbnB1dCxvdXRwdXQ9dGhpcy5fY2FsZW5kYXJFbFtrZXldLGhvdXJzPW1vbSYmbW9tLmhvdXJzKCk7cmV0dXJuIGlucHV0PW91dHB1dCwoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEZ1bmN0aW9uJiZpbnB1dCBpbnN0YW5jZW9mIEZ1bmN0aW9ufHxcIltvYmplY3QgRnVuY3Rpb25dXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpKSYmKG91dHB1dD1vdXRwdXQuYXBwbHkobW9tKSksb3V0cHV0LnJlcGxhY2UoXCJ7fVwiLGhvdXJzJTEyPT0xP1wiz4PPhM63XCI6XCLPg8+EzrnPglwiKX0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCLPg861ICVzXCIscGFzdDpcIiVzIM+Az4HOuc69XCIsczpcIs67zq/Os86xIM60zrXPhc+EzrXPgc+MzrvOtc+Az4TOsVwiLHNzOlwiJWQgzrTOtc+Fz4TOtc+Bz4zOu861z4DPhM6xXCIsbTpcIs6tzr3OsSDOu861z4DPhM+MXCIsbW06XCIlZCDOu861z4DPhM6sXCIsaDpcIs68zq/OsSDPjs+BzrFcIixoaDpcIiVkIM+Oz4HOtc+CXCIsZDpcIs68zq/OsSDOvM6tz4HOsVwiLGRkOlwiJWQgzrzOrc+BzrXPglwiLE06XCLOrc69zrHPgiDOvM6uzr3Osc+CXCIsTU06XCIlZCDOvM6uzr3Otc+CXCIseTpcIs6tzr3Osc+CIM+Hz4HPjM69zr/PglwiLHl5OlwiJWQgz4fPgc+Mzr3Ouc6xXCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9zrcvLG9yZGluYWw6XCIlZM63XCIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwiZW4tYXVcIix7bW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIkphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIlN1X01vX1R1X1dlX1RoX0ZyX1NhXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcImg6bW0gQVwiLExUUzpcImg6bW06c3MgQVwiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIGg6bW0gQVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEFcIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJbVG9kYXkgYXRdIExUXCIsbmV4dERheTpcIltUb21vcnJvdyBhdF0gTFRcIixuZXh0V2VlazpcImRkZGQgW2F0XSBMVFwiLGxhc3REYXk6XCJbWWVzdGVyZGF5IGF0XSBMVFwiLGxhc3RXZWVrOlwiW0xhc3RdIGRkZGQgW2F0XSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImluICVzXCIscGFzdDpcIiVzIGFnb1wiLHM6XCJhIGZldyBzZWNvbmRzXCIsc3M6XCIlZCBzZWNvbmRzXCIsbTpcImEgbWludXRlXCIsbW06XCIlZCBtaW51dGVzXCIsaDpcImFuIGhvdXJcIixoaDpcIiVkIGhvdXJzXCIsZDpcImEgZGF5XCIsZGQ6XCIlZCBkYXlzXCIsTTpcImEgbW9udGhcIixNTTpcIiVkIG1vbnRoc1wiLHk6XCJhIHllYXJcIix5eTpcIiVkIHllYXJzXCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihudW1iZXIpe3ZhciBiPW51bWJlciUxMDtyZXR1cm4gbnVtYmVyKygxPT1+fihudW1iZXIlMTAwLzEwKT9cInRoXCI6MT09PWI/XCJzdFwiOjI9PT1iP1wibmRcIjozPT09Yj9cInJkXCI6XCJ0aFwiKX0sd2Vlazp7ZG93OjAsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwiZW4tY2FcIix7bW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIkphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIlN1X01vX1R1X1dlX1RoX0ZyX1NhXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcImg6bW0gQVwiLExUUzpcImg6bW06c3MgQVwiLEw6XCJZWVlZLU1NLUREXCIsTEw6XCJNTU1NIEQsIFlZWVlcIixMTEw6XCJNTU1NIEQsIFlZWVkgaDptbSBBXCIsTExMTDpcImRkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEFcIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJbVG9kYXkgYXRdIExUXCIsbmV4dERheTpcIltUb21vcnJvdyBhdF0gTFRcIixuZXh0V2VlazpcImRkZGQgW2F0XSBMVFwiLGxhc3REYXk6XCJbWWVzdGVyZGF5IGF0XSBMVFwiLGxhc3RXZWVrOlwiW0xhc3RdIGRkZGQgW2F0XSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImluICVzXCIscGFzdDpcIiVzIGFnb1wiLHM6XCJhIGZldyBzZWNvbmRzXCIsc3M6XCIlZCBzZWNvbmRzXCIsbTpcImEgbWludXRlXCIsbW06XCIlZCBtaW51dGVzXCIsaDpcImFuIGhvdXJcIixoaDpcIiVkIGhvdXJzXCIsZDpcImEgZGF5XCIsZGQ6XCIlZCBkYXlzXCIsTTpcImEgbW9udGhcIixNTTpcIiVkIG1vbnRoc1wiLHk6XCJhIHllYXJcIix5eTpcIiVkIHllYXJzXCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihudW1iZXIpe3ZhciBiPW51bWJlciUxMDtyZXR1cm4gbnVtYmVyKygxPT1+fihudW1iZXIlMTAwLzEwKT9cInRoXCI6MT09PWI/XCJzdFwiOjI9PT1iP1wibmRcIjozPT09Yj9cInJkXCI6XCJ0aFwiKX19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO21vbWVudC5kZWZpbmVMb2NhbGUoXCJlbi1nYlwiLHttb250aHM6XCJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWNcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiU3VfTW9fVHVfV2VfVGhfRnJfU2FcIi5zcGxpdChcIl9cIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW1RvZGF5IGF0XSBMVFwiLG5leHREYXk6XCJbVG9tb3Jyb3cgYXRdIExUXCIsbmV4dFdlZWs6XCJkZGRkIFthdF0gTFRcIixsYXN0RGF5OlwiW1llc3RlcmRheSBhdF0gTFRcIixsYXN0V2VlazpcIltMYXN0XSBkZGRkIFthdF0gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJpbiAlc1wiLHBhc3Q6XCIlcyBhZ29cIixzOlwiYSBmZXcgc2Vjb25kc1wiLHNzOlwiJWQgc2Vjb25kc1wiLG06XCJhIG1pbnV0ZVwiLG1tOlwiJWQgbWludXRlc1wiLGg6XCJhbiBob3VyXCIsaGg6XCIlZCBob3Vyc1wiLGQ6XCJhIGRheVwiLGRkOlwiJWQgZGF5c1wiLE06XCJhIG1vbnRoXCIsTU06XCIlZCBtb250aHNcIix5OlwiYSB5ZWFyXCIseXk6XCIlZCB5ZWFyc1wifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obnVtYmVyKXt2YXIgYj1udW1iZXIlMTA7cmV0dXJuIG51bWJlcisoMT09fn4obnVtYmVyJTEwMC8xMCk/XCJ0aFwiOjE9PT1iP1wic3RcIjoyPT09Yj9cIm5kXCI6Mz09PWI/XCJyZFwiOlwidGhcIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7bW9tZW50LmRlZmluZUxvY2FsZShcImVuLWllXCIse21vbnRoczpcIkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlY1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcIlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXRcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJTdV9Nb19UdV9XZV9UaF9Gcl9TYVwiLnNwbGl0KFwiX1wiKSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCBEIE1NTU0gWVlZWSBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIltUb2RheSBhdF0gTFRcIixuZXh0RGF5OlwiW1RvbW9ycm93IGF0XSBMVFwiLG5leHRXZWVrOlwiZGRkZCBbYXRdIExUXCIsbGFzdERheTpcIltZZXN0ZXJkYXkgYXRdIExUXCIsbGFzdFdlZWs6XCJbTGFzdF0gZGRkZCBbYXRdIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiaW4gJXNcIixwYXN0OlwiJXMgYWdvXCIsczpcImEgZmV3IHNlY29uZHNcIixzczpcIiVkIHNlY29uZHNcIixtOlwiYSBtaW51dGVcIixtbTpcIiVkIG1pbnV0ZXNcIixoOlwiYW4gaG91clwiLGhoOlwiJWQgaG91cnNcIixkOlwiYSBkYXlcIixkZDpcIiVkIGRheXNcIixNOlwiYSBtb250aFwiLE1NOlwiJWQgbW9udGhzXCIseTpcImEgeWVhclwiLHl5OlwiJWQgeWVhcnNcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKG51bWJlcil7dmFyIGI9bnVtYmVyJTEwO3JldHVybiBudW1iZXIrKDE9PX5+KG51bWJlciUxMDAvMTApP1widGhcIjoxPT09Yj9cInN0XCI6Mj09PWI/XCJuZFwiOjM9PT1iP1wicmRcIjpcInRoXCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO21vbWVudC5kZWZpbmVMb2NhbGUoXCJlbi1pbFwiLHttb250aHM6XCJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWNcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiU3VfTW9fVHVfV2VfVGhfRnJfU2FcIi5zcGxpdChcIl9cIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW1RvZGF5IGF0XSBMVFwiLG5leHREYXk6XCJbVG9tb3Jyb3cgYXRdIExUXCIsbmV4dFdlZWs6XCJkZGRkIFthdF0gTFRcIixsYXN0RGF5OlwiW1llc3RlcmRheSBhdF0gTFRcIixsYXN0V2VlazpcIltMYXN0XSBkZGRkIFthdF0gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJpbiAlc1wiLHBhc3Q6XCIlcyBhZ29cIixzOlwiYSBmZXcgc2Vjb25kc1wiLHNzOlwiJWQgc2Vjb25kc1wiLG06XCJhIG1pbnV0ZVwiLG1tOlwiJWQgbWludXRlc1wiLGg6XCJhbiBob3VyXCIsaGg6XCIlZCBob3Vyc1wiLGQ6XCJhIGRheVwiLGRkOlwiJWQgZGF5c1wiLE06XCJhIG1vbnRoXCIsTU06XCIlZCBtb250aHNcIix5OlwiYSB5ZWFyXCIseXk6XCIlZCB5ZWFyc1wifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obnVtYmVyKXt2YXIgYj1udW1iZXIlMTA7cmV0dXJuIG51bWJlcisoMT09fn4obnVtYmVyJTEwMC8xMCk/XCJ0aFwiOjE9PT1iP1wic3RcIjoyPT09Yj9cIm5kXCI6Mz09PWI/XCJyZFwiOlwidGhcIil9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwiZW4taW5cIix7bW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIkphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIlN1X01vX1R1X1dlX1RoX0ZyX1NhXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcImg6bW0gQVwiLExUUzpcImg6bW06c3MgQVwiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIGg6bW0gQVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEFcIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJbVG9kYXkgYXRdIExUXCIsbmV4dERheTpcIltUb21vcnJvdyBhdF0gTFRcIixuZXh0V2VlazpcImRkZGQgW2F0XSBMVFwiLGxhc3REYXk6XCJbWWVzdGVyZGF5IGF0XSBMVFwiLGxhc3RXZWVrOlwiW0xhc3RdIGRkZGQgW2F0XSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImluICVzXCIscGFzdDpcIiVzIGFnb1wiLHM6XCJhIGZldyBzZWNvbmRzXCIsc3M6XCIlZCBzZWNvbmRzXCIsbTpcImEgbWludXRlXCIsbW06XCIlZCBtaW51dGVzXCIsaDpcImFuIGhvdXJcIixoaDpcIiVkIGhvdXJzXCIsZDpcImEgZGF5XCIsZGQ6XCIlZCBkYXlzXCIsTTpcImEgbW9udGhcIixNTTpcIiVkIG1vbnRoc1wiLHk6XCJhIHllYXJcIix5eTpcIiVkIHllYXJzXCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihudW1iZXIpe3ZhciBiPW51bWJlciUxMDtyZXR1cm4gbnVtYmVyKygxPT1+fihudW1iZXIlMTAwLzEwKT9cInRoXCI6MT09PWI/XCJzdFwiOjI9PT1iP1wibmRcIjozPT09Yj9cInJkXCI6XCJ0aFwiKX0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwiZW4tbnpcIix7bW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIkphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIlN1X01vX1R1X1dlX1RoX0ZyX1NhXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcImg6bW0gQVwiLExUUzpcImg6bW06c3MgQVwiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIGg6bW0gQVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEFcIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJbVG9kYXkgYXRdIExUXCIsbmV4dERheTpcIltUb21vcnJvdyBhdF0gTFRcIixuZXh0V2VlazpcImRkZGQgW2F0XSBMVFwiLGxhc3REYXk6XCJbWWVzdGVyZGF5IGF0XSBMVFwiLGxhc3RXZWVrOlwiW0xhc3RdIGRkZGQgW2F0XSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImluICVzXCIscGFzdDpcIiVzIGFnb1wiLHM6XCJhIGZldyBzZWNvbmRzXCIsc3M6XCIlZCBzZWNvbmRzXCIsbTpcImEgbWludXRlXCIsbW06XCIlZCBtaW51dGVzXCIsaDpcImFuIGhvdXJcIixoaDpcIiVkIGhvdXJzXCIsZDpcImEgZGF5XCIsZGQ6XCIlZCBkYXlzXCIsTTpcImEgbW9udGhcIixNTTpcIiVkIG1vbnRoc1wiLHk6XCJhIHllYXJcIix5eTpcIiVkIHllYXJzXCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihudW1iZXIpe3ZhciBiPW51bWJlciUxMDtyZXR1cm4gbnVtYmVyKygxPT1+fihudW1iZXIlMTAwLzEwKT9cInRoXCI6MT09PWI/XCJzdFwiOjI9PT1iP1wibmRcIjozPT09Yj9cInJkXCI6XCJ0aFwiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwiZW4tc2dcIix7bW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIkphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIlN1X01vX1R1X1dlX1RoX0ZyX1NhXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIltUb2RheSBhdF0gTFRcIixuZXh0RGF5OlwiW1RvbW9ycm93IGF0XSBMVFwiLG5leHRXZWVrOlwiZGRkZCBbYXRdIExUXCIsbGFzdERheTpcIltZZXN0ZXJkYXkgYXRdIExUXCIsbGFzdFdlZWs6XCJbTGFzdF0gZGRkZCBbYXRdIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiaW4gJXNcIixwYXN0OlwiJXMgYWdvXCIsczpcImEgZmV3IHNlY29uZHNcIixzczpcIiVkIHNlY29uZHNcIixtOlwiYSBtaW51dGVcIixtbTpcIiVkIG1pbnV0ZXNcIixoOlwiYW4gaG91clwiLGhoOlwiJWQgaG91cnNcIixkOlwiYSBkYXlcIixkZDpcIiVkIGRheXNcIixNOlwiYSBtb250aFwiLE1NOlwiJWQgbW9udGhzXCIseTpcImEgeWVhclwiLHl5OlwiJWQgeWVhcnNcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKG51bWJlcil7dmFyIGI9bnVtYmVyJTEwO3JldHVybiBudW1iZXIrKDE9PX5+KG51bWJlciUxMDAvMTApP1widGhcIjoxPT09Yj9cInN0XCI6Mj09PWI/XCJuZFwiOjM9PT1iP1wicmRcIjpcInRoXCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO21vbWVudC5kZWZpbmVMb2NhbGUoXCJlb1wiLHttb250aHM6XCJqYW51YXJvX2ZlYnJ1YXJvX21hcnRvX2Fwcmlsb19tYWpvX2p1bmlvX2p1bGlvX2HFrWd1c3RvX3NlcHRlbWJyb19va3RvYnJvX25vdmVtYnJvX2RlY2VtYnJvXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiamFuX2ZlYl9tYXJ0X2Fwcl9tYWpfanVuX2p1bF9hxa1nX3NlcHRfb2t0X25vdl9kZWNcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCJkaW1hbsSJb19sdW5kb19tYXJkb19tZXJrcmVkb1/EtWHFrWRvX3ZlbmRyZWRvX3NhYmF0b1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiZGltX2x1bl9tYXJkX21lcmtfxLVhxa1fdmVuX3NhYlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcImRpX2x1X21hX21lX8S1YV92ZV9zYVwiLnNwbGl0KFwiX1wiKSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIllZWVktTU0tRERcIixMTDpcIltsYV0gRFstYW4gZGVdIE1NTU0sIFlZWVlcIixMTEw6XCJbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGRbbl0sIFtsYV0gRFstYW4gZGVdIE1NTU0sIFlZWVkgSEg6bW1cIixsbGxsOlwiZGRkLCBbbGFdIERbLWFuIGRlXSBNTU0sIFlZWVkgSEg6bW1cIn0sbWVyaWRpZW1QYXJzZTovW2FwXVxcLnRcXC5tL2ksaXNQTTpmdW5jdGlvbihpbnB1dCl7cmV0dXJuXCJwXCI9PT1pbnB1dC5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKX0sbWVyaWRpZW06ZnVuY3Rpb24oaG91cnMsbWludXRlcyxpc0xvd2VyKXtyZXR1cm4gaG91cnM+MTE/aXNMb3dlcj9cInAudC5tLlwiOlwiUC5ULk0uXCI6aXNMb3dlcj9cImEudC5tLlwiOlwiQS5ULk0uXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW0hvZGlhxa0gamVdIExUXCIsbmV4dERheTpcIltNb3JnYcWtIGplXSBMVFwiLG5leHRXZWVrOlwiZGRkZFtuIGplXSBMVFwiLGxhc3REYXk6XCJbSGllcmHFrSBqZV0gTFRcIixsYXN0V2VlazpcIltwYXNpbnRhbl0gZGRkZFtuIGplXSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcInBvc3QgJXNcIixwYXN0OlwiYW50YcWtICVzXCIsczpcImtlbGthaiBzZWt1bmRvalwiLHNzOlwiJWQgc2VrdW5kb2pcIixtOlwidW51IG1pbnV0b1wiLG1tOlwiJWQgbWludXRvalwiLGg6XCJ1bnUgaG9yb1wiLGhoOlwiJWQgaG9yb2pcIixkOlwidW51IHRhZ29cIixkZDpcIiVkIHRhZ29qXCIsTTpcInVudSBtb25hdG9cIixNTTpcIiVkIG1vbmF0b2pcIix5OlwidW51IGphcm9cIix5eTpcIiVkIGphcm9qXCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9YS8sb3JkaW5hbDpcIiVkYVwiLHdlZWs6e2RvdzoxLGRveTo3fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG1vbnRoc1Nob3J0RG90PVwiZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy5cIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ9XCJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpY1wiLnNwbGl0KFwiX1wiKSxtb250aHNQYXJzZT1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15vY3QvaSwvXm5vdi9pLC9eZGljL2ldLG1vbnRoc1JlZ2V4PS9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXFwuP3xmZWJcXC4/fG1hclxcLj98YWJyXFwuP3xtYXlcXC4/fGp1blxcLj98anVsXFwuP3xhZ29cXC4/fHNlcFxcLj98b2N0XFwuP3xub3ZcXC4/fGRpY1xcLj8pL2k7bW9tZW50LmRlZmluZUxvY2FsZShcImVzXCIse21vbnRoczpcImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmVcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24obSxmb3JtYXQpe3JldHVybiBtPy8tTU1NLS8udGVzdChmb3JtYXQpP21vbnRoc1Nob3J0W20ubW9udGgoKV06bW9udGhzU2hvcnREb3RbbS5tb250aCgpXTptb250aHNTaG9ydERvdH0sbW9udGhzUmVnZXg6bW9udGhzUmVnZXgsbW9udGhzU2hvcnRSZWdleDptb250aHNSZWdleCxtb250aHNTdHJpY3RSZWdleDovXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZW5lXFwuP3xmZWJcXC4/fG1hclxcLj98YWJyXFwuP3xtYXlcXC4/fGp1blxcLj98anVsXFwuP3xhZ29cXC4/fHNlcFxcLj98b2N0XFwuP3xub3ZcXC4/fGRpY1xcLj8pL2ksbW9udGhzUGFyc2U6bW9udGhzUGFyc2UsbG9uZ01vbnRoc1BhcnNlOm1vbnRoc1BhcnNlLHNob3J0TW9udGhzUGFyc2U6bW9udGhzUGFyc2Usd2Vla2RheXM6XCJkb21pbmdvX2x1bmVzX21hcnRlc19tacOpcmNvbGVzX2p1ZXZlc192aWVybmVzX3PDoWJhZG9cIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcImRvbS5fbHVuLl9tYXIuX21pw6kuX2p1ZS5fdmllLl9zw6FiLlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcImRvX2x1X21hX21pX2p1X3ZpX3PDoVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSDptbVwiLExUUzpcIkg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBbZGVdIE1NTU0gW2RlXSBZWVlZXCIsTExMOlwiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW1cIixMTExMOlwiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm5cIltob3kgYSBsYVwiKygxIT09dGhpcy5ob3VycygpP1wic1wiOlwiXCIpK1wiXSBMVFwifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuXCJbbWHDsWFuYSBhIGxhXCIrKDEhPT10aGlzLmhvdXJzKCk/XCJzXCI6XCJcIikrXCJdIExUXCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuXCJkZGRkIFthIGxhXCIrKDEhPT10aGlzLmhvdXJzKCk/XCJzXCI6XCJcIikrXCJdIExUXCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm5cIltheWVyIGEgbGFcIisoMSE9PXRoaXMuaG91cnMoKT9cInNcIjpcIlwiKStcIl0gTFRcIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm5cIltlbF0gZGRkZCBbcGFzYWRvIGEgbGFcIisoMSE9PXRoaXMuaG91cnMoKT9cInNcIjpcIlwiKStcIl0gTFRcIn0sc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiZW4gJXNcIixwYXN0OlwiaGFjZSAlc1wiLHM6XCJ1bm9zIHNlZ3VuZG9zXCIsc3M6XCIlZCBzZWd1bmRvc1wiLG06XCJ1biBtaW51dG9cIixtbTpcIiVkIG1pbnV0b3NcIixoOlwidW5hIGhvcmFcIixoaDpcIiVkIGhvcmFzXCIsZDpcInVuIGTDrWFcIixkZDpcIiVkIGTDrWFzXCIsdzpcInVuYSBzZW1hbmFcIix3dzpcIiVkIHNlbWFuYXNcIixNOlwidW4gbWVzXCIsTU06XCIlZCBtZXNlc1wiLHk6XCJ1biBhw7FvXCIseXk6XCIlZCBhw7Fvc1wifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfcK6LyxvcmRpbmFsOlwiJWTCulwiLHdlZWs6e2RvdzoxLGRveTo0fSxpbnZhbGlkRGF0ZTpcIkZlY2hhIGludsOhbGlkYVwifSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjt2YXIgbW9udGhzU2hvcnREb3Q9XCJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLlwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydD1cImVuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1BhcnNlPVsvXmVuZS9pLC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0sbW9udGhzUmVnZXg9L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaTttb21lbnQuZGVmaW5lTG9jYWxlKFwiZXMtZG9cIix7bW9udGhzOlwiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZVwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpmdW5jdGlvbihtLGZvcm1hdCl7cmV0dXJuIG0/Ly1NTU0tLy50ZXN0KGZvcm1hdCk/bW9udGhzU2hvcnRbbS5tb250aCgpXTptb250aHNTaG9ydERvdFttLm1vbnRoKCldOm1vbnRoc1Nob3J0RG90fSxtb250aHNSZWdleDptb250aHNSZWdleCxtb250aHNTaG9ydFJlZ2V4Om1vbnRoc1JlZ2V4LG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaSxtb250aHNQYXJzZTptb250aHNQYXJzZSxsb25nTW9udGhzUGFyc2U6bW9udGhzUGFyc2Usc2hvcnRNb250aHNQYXJzZTptb250aHNQYXJzZSx3ZWVrZGF5czpcImRvbWluZ29fbHVuZXNfbWFydGVzX21pw6lyY29sZXNfanVldmVzX3ZpZXJuZXNfc8OhYmFkb1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiZG9tLl9sdW4uX21hci5fbWnDqS5fanVlLl92aWUuX3PDoWIuXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiZG9fbHVfbWFfbWlfanVfdmlfc8OhXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJoOm1tIEFcIixMVFM6XCJoOm1tOnNzIEFcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBbZGVdIE1NTU0gW2RlXSBZWVlZXCIsTExMOlwiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQVwiLExMTEw6XCJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBXCJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuXCJbaG95IGEgbGFcIisoMSE9PXRoaXMuaG91cnMoKT9cInNcIjpcIlwiKStcIl0gTFRcIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVyblwiW21hw7FhbmEgYSBsYVwiKygxIT09dGhpcy5ob3VycygpP1wic1wiOlwiXCIpK1wiXSBMVFwifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVyblwiZGRkZCBbYSBsYVwiKygxIT09dGhpcy5ob3VycygpP1wic1wiOlwiXCIpK1wiXSBMVFwifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuXCJbYXllciBhIGxhXCIrKDEhPT10aGlzLmhvdXJzKCk/XCJzXCI6XCJcIikrXCJdIExUXCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuXCJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhXCIrKDEhPT10aGlzLmhvdXJzKCk/XCJzXCI6XCJcIikrXCJdIExUXCJ9LHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImVuICVzXCIscGFzdDpcImhhY2UgJXNcIixzOlwidW5vcyBzZWd1bmRvc1wiLHNzOlwiJWQgc2VndW5kb3NcIixtOlwidW4gbWludXRvXCIsbW06XCIlZCBtaW51dG9zXCIsaDpcInVuYSBob3JhXCIsaGg6XCIlZCBob3Jhc1wiLGQ6XCJ1biBkw61hXCIsZGQ6XCIlZCBkw61hc1wiLHc6XCJ1bmEgc2VtYW5hXCIsd3c6XCIlZCBzZW1hbmFzXCIsTTpcInVuIG1lc1wiLE1NOlwiJWQgbWVzZXNcIix5OlwidW4gYcOxb1wiLHl5OlwiJWQgYcOxb3NcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn3Cui8sb3JkaW5hbDpcIiVkwrpcIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO3ZhciBtb250aHNTaG9ydERvdD1cImVuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0PVwiZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWNcIi5zcGxpdChcIl9cIiksbW9udGhzUGFyc2U9Wy9eZW5lL2ksL15mZWIvaSwvXm1hci9pLC9eYWJyL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hZ28vaSwvXnNlcC9pLC9eb2N0L2ksL15ub3YvaSwvXmRpYy9pXSxtb250aHNSZWdleD0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pO21vbWVudC5kZWZpbmVMb2NhbGUoXCJlcy1teFwiLHttb250aHM6XCJlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKG0sZm9ybWF0KXtyZXR1cm4gbT8vLU1NTS0vLnRlc3QoZm9ybWF0KT9tb250aHNTaG9ydFttLm1vbnRoKCldOm1vbnRoc1Nob3J0RG90W20ubW9udGgoKV06bW9udGhzU2hvcnREb3R9LG1vbnRoc1JlZ2V4Om1vbnRoc1JlZ2V4LG1vbnRoc1Nob3J0UmVnZXg6bW9udGhzUmVnZXgsbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pLG1vbnRoc1BhcnNlOm1vbnRoc1BhcnNlLGxvbmdNb250aHNQYXJzZTptb250aHNQYXJzZSxzaG9ydE1vbnRoc1BhcnNlOm1vbnRoc1BhcnNlLHdlZWtkYXlzOlwiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWnDqXJjb2xlc19qdWV2ZXNfdmllcm5lc19zw6FiYWRvXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJkb20uX2x1bi5fbWFyLl9tacOpLl9qdWUuX3ZpZS5fc8OhYi5cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJkb19sdV9tYV9taV9qdV92aV9zw6FcIi5zcGxpdChcIl9cIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDpcIkg6bW1cIixMVFM6XCJIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgW2RlXSBNTU1NIFtkZV0gWVlZWVwiLExMTDpcIkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tXCIsTExMTDpcImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuXCJbaG95IGEgbGFcIisoMSE9PXRoaXMuaG91cnMoKT9cInNcIjpcIlwiKStcIl0gTFRcIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVyblwiW21hw7FhbmEgYSBsYVwiKygxIT09dGhpcy5ob3VycygpP1wic1wiOlwiXCIpK1wiXSBMVFwifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVyblwiZGRkZCBbYSBsYVwiKygxIT09dGhpcy5ob3VycygpP1wic1wiOlwiXCIpK1wiXSBMVFwifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuXCJbYXllciBhIGxhXCIrKDEhPT10aGlzLmhvdXJzKCk/XCJzXCI6XCJcIikrXCJdIExUXCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuXCJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhXCIrKDEhPT10aGlzLmhvdXJzKCk/XCJzXCI6XCJcIikrXCJdIExUXCJ9LHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImVuICVzXCIscGFzdDpcImhhY2UgJXNcIixzOlwidW5vcyBzZWd1bmRvc1wiLHNzOlwiJWQgc2VndW5kb3NcIixtOlwidW4gbWludXRvXCIsbW06XCIlZCBtaW51dG9zXCIsaDpcInVuYSBob3JhXCIsaGg6XCIlZCBob3Jhc1wiLGQ6XCJ1biBkw61hXCIsZGQ6XCIlZCBkw61hc1wiLHc6XCJ1bmEgc2VtYW5hXCIsd3c6XCIlZCBzZW1hbmFzXCIsTTpcInVuIG1lc1wiLE1NOlwiJWQgbWVzZXNcIix5OlwidW4gYcOxb1wiLHl5OlwiJWQgYcOxb3NcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn3Cui8sb3JkaW5hbDpcIiVkwrpcIix3ZWVrOntkb3c6MCxkb3k6NH0saW52YWxpZERhdGU6XCJGZWNoYSBpbnbDoWxpZGFcIn0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG1vbnRoc1Nob3J0RG90PVwiZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy5cIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ9XCJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpY1wiLnNwbGl0KFwiX1wiKSxtb250aHNQYXJzZT1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15vY3QvaSwvXm5vdi9pLC9eZGljL2ldLG1vbnRoc1JlZ2V4PS9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXFwuP3xmZWJcXC4/fG1hclxcLj98YWJyXFwuP3xtYXlcXC4/fGp1blxcLj98anVsXFwuP3xhZ29cXC4/fHNlcFxcLj98b2N0XFwuP3xub3ZcXC4/fGRpY1xcLj8pL2k7bW9tZW50LmRlZmluZUxvY2FsZShcImVzLXVzXCIse21vbnRoczpcImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmVcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24obSxmb3JtYXQpe3JldHVybiBtPy8tTU1NLS8udGVzdChmb3JtYXQpP21vbnRoc1Nob3J0W20ubW9udGgoKV06bW9udGhzU2hvcnREb3RbbS5tb250aCgpXTptb250aHNTaG9ydERvdH0sbW9udGhzUmVnZXg6bW9udGhzUmVnZXgsbW9udGhzU2hvcnRSZWdleDptb250aHNSZWdleCxtb250aHNTdHJpY3RSZWdleDovXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZW5lXFwuP3xmZWJcXC4/fG1hclxcLj98YWJyXFwuP3xtYXlcXC4/fGp1blxcLj98anVsXFwuP3xhZ29cXC4/fHNlcFxcLj98b2N0XFwuP3xub3ZcXC4/fGRpY1xcLj8pL2ksbW9udGhzUGFyc2U6bW9udGhzUGFyc2UsbG9uZ01vbnRoc1BhcnNlOm1vbnRoc1BhcnNlLHNob3J0TW9udGhzUGFyc2U6bW9udGhzUGFyc2Usd2Vla2RheXM6XCJkb21pbmdvX2x1bmVzX21hcnRlc19tacOpcmNvbGVzX2p1ZXZlc192aWVybmVzX3PDoWJhZG9cIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcImRvbS5fbHVuLl9tYXIuX21pw6kuX2p1ZS5fdmllLl9zw6FiLlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcImRvX2x1X21hX21pX2p1X3ZpX3PDoVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiaDptbSBBXCIsTFRTOlwiaDptbTpzcyBBXCIsTDpcIk1NL0REL1lZWVlcIixMTDpcIkQgW2RlXSBNTU1NIFtkZV0gWVlZWVwiLExMTDpcIkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEFcIixMTExMOlwiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQVwifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVyblwiW2hveSBhIGxhXCIrKDEhPT10aGlzLmhvdXJzKCk/XCJzXCI6XCJcIikrXCJdIExUXCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm5cIlttYcOxYW5hIGEgbGFcIisoMSE9PXRoaXMuaG91cnMoKT9cInNcIjpcIlwiKStcIl0gTFRcIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm5cImRkZGQgW2EgbGFcIisoMSE9PXRoaXMuaG91cnMoKT9cInNcIjpcIlwiKStcIl0gTFRcIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVyblwiW2F5ZXIgYSBsYVwiKygxIT09dGhpcy5ob3VycygpP1wic1wiOlwiXCIpK1wiXSBMVFwifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVyblwiW2VsXSBkZGRkIFtwYXNhZG8gYSBsYVwiKygxIT09dGhpcy5ob3VycygpP1wic1wiOlwiXCIpK1wiXSBMVFwifSxzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJlbiAlc1wiLHBhc3Q6XCJoYWNlICVzXCIsczpcInVub3Mgc2VndW5kb3NcIixzczpcIiVkIHNlZ3VuZG9zXCIsbTpcInVuIG1pbnV0b1wiLG1tOlwiJWQgbWludXRvc1wiLGg6XCJ1bmEgaG9yYVwiLGhoOlwiJWQgaG9yYXNcIixkOlwidW4gZMOtYVwiLGRkOlwiJWQgZMOtYXNcIix3OlwidW5hIHNlbWFuYVwiLHd3OlwiJWQgc2VtYW5hc1wiLE06XCJ1biBtZXNcIixNTTpcIiVkIG1lc2VzXCIseTpcInVuIGHDsW9cIix5eTpcIiVkIGHDsW9zXCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9wrovLG9yZGluYWw6XCIlZMK6XCIsd2Vlazp7ZG93OjAsZG95OjZ9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlcix3aXRob3V0U3VmZml4LGtleSxpc0Z1dHVyZSl7dmFyIGZvcm1hdD17czpbXCJtw7VuZSBzZWt1bmRpXCIsXCJtw7VuaSBzZWt1bmRcIixcInBhYXIgc2VrdW5kaXRcIl0sc3M6W251bWJlcitcInNla3VuZGlcIixudW1iZXIrXCJzZWt1bmRpdFwiXSxtOltcIsO8aGUgbWludXRpXCIsXCLDvGtzIG1pbnV0XCJdLG1tOltudW1iZXIrXCIgbWludXRpXCIsbnVtYmVyK1wiIG1pbnV0aXRcIl0saDpbXCLDvGhlIHR1bm5pXCIsXCJ0dW5kIGFlZ2FcIixcIsO8a3MgdHVuZFwiXSxoaDpbbnVtYmVyK1wiIHR1bm5pXCIsbnVtYmVyK1wiIHR1bmRpXCJdLGQ6W1wiw7xoZSBww6RldmFcIixcIsO8a3MgcMOkZXZcIl0sTTpbXCJrdXUgYWphXCIsXCJrdXUgYWVnYVwiLFwiw7xrcyBrdXVcIl0sTU06W251bWJlcitcIiBrdXVcIixudW1iZXIrXCIga3V1ZFwiXSx5OltcIsO8aGUgYWFzdGFcIixcImFhc3RhXCIsXCLDvGtzIGFhc3RhXCJdLHl5OltudW1iZXIrXCIgYWFzdGFcIixudW1iZXIrXCIgYWFzdGF0XCJdfTtyZXR1cm4gd2l0aG91dFN1ZmZpeD9mb3JtYXRba2V5XVsyXT9mb3JtYXRba2V5XVsyXTpmb3JtYXRba2V5XVsxXTppc0Z1dHVyZT9mb3JtYXRba2V5XVswXTpmb3JtYXRba2V5XVsxXX1tb21lbnQuZGVmaW5lTG9jYWxlKFwiZXRcIix7bW9udGhzOlwiamFhbnVhcl92ZWVicnVhcl9tw6RydHNfYXByaWxsX21haV9qdXVuaV9qdXVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9vYmVyX25vdmVtYmVyX2RldHNlbWJlclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImphYW5fdmVlYnJfbcOkcnRzX2Fwcl9tYWlfanV1bmlfanV1bGlfYXVnX3NlcHRfb2t0X25vdl9kZXRzXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwicMO8aGFww6Rldl9lc21hc3DDpGV2X3RlaXNpcMOkZXZfa29sbWFww6Rldl9uZWxqYXDDpGV2X3JlZWRlX2xhdXDDpGV2XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJQX0VfVF9LX05fUl9MXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiUF9FX1RfS19OX1JfTFwiLnNwbGl0KFwiX1wiKSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJIOm1tXCIsTFRTOlwiSDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJELiBNTU1NIFlZWVlcIixMTEw6XCJELiBNTU1NIFlZWVkgSDptbVwiLExMTEw6XCJkZGRkLCBELiBNTU1NIFlZWVkgSDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIltUw6RuYSxdIExUXCIsbmV4dERheTpcIltIb21tZSxdIExUXCIsbmV4dFdlZWs6XCJbSsOkcmdtaW5lXSBkZGRkIExUXCIsbGFzdERheTpcIltFaWxlLF0gTFRcIixsYXN0V2VlazpcIltFZWxtaW5lXSBkZGRkIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXMgcMOkcmFzdFwiLHBhc3Q6XCIlcyB0YWdhc2lcIixzOnByb2Nlc3NSZWxhdGl2ZVRpbWUsc3M6cHJvY2Vzc1JlbGF0aXZlVGltZSxtOnByb2Nlc3NSZWxhdGl2ZVRpbWUsbW06cHJvY2Vzc1JlbGF0aXZlVGltZSxoOnByb2Nlc3NSZWxhdGl2ZVRpbWUsaGg6cHJvY2Vzc1JlbGF0aXZlVGltZSxkOnByb2Nlc3NSZWxhdGl2ZVRpbWUsZGQ6XCIlZCBww6RldmFcIixNOnByb2Nlc3NSZWxhdGl2ZVRpbWUsTU06cHJvY2Vzc1JlbGF0aXZlVGltZSx5OnByb2Nlc3NSZWxhdGl2ZVRpbWUseXk6cHJvY2Vzc1JlbGF0aXZlVGltZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn1cXC4vLG9yZGluYWw6XCIlZC5cIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO21vbWVudC5kZWZpbmVMb2NhbGUoXCJldVwiLHttb250aHM6XCJ1cnRhcnJpbGFfb3RzYWlsYV9tYXJ0eG9hX2FwaXJpbGFfbWFpYXR6YV9la2FpbmFfdXp0YWlsYV9hYnV6dHVhX2lyYWlsYV91cnJpYV9hemFyb2FfYWJlbmR1YVwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcInVydC5fb3RzLl9tYXIuX2FwaS5fbWFpLl9la2EuX3V6dC5fYWJ1Ll9pcmEuX3Vyci5fYXphLl9hYmUuXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6XCJpZ2FuZGVhX2FzdGVsZWhlbmFfYXN0ZWFydGVhX2FzdGVhemtlbmFfb3N0ZWd1bmFfb3N0aXJhbGFfbGFydW5iYXRhXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJpZy5fYWwuX2FyLl9hei5fb2cuX29sLl9sci5cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJpZ19hbF9hcl9hel9vZ19vbF9sclwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJZWVlZLU1NLUREXCIsTEw6XCJZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXVwiLExMTDpcIllZWVlba29dIE1NTU1bcmVuXSBEW2FdIEhIOm1tXCIsTExMTDpcImRkZGQsIFlZWVlba29dIE1NTU1bcmVuXSBEW2FdIEhIOm1tXCIsbDpcIllZWVktTS1EXCIsbGw6XCJZWVlZW2tvXSBNTU0gRFthXVwiLGxsbDpcIllZWVlba29dIE1NTSBEW2FdIEhIOm1tXCIsbGxsbDpcImRkZCwgWVlZWVtrb10gTU1NIERbYV0gSEg6bW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJbZ2F1cl0gTFRbZXRhbl1cIixuZXh0RGF5OlwiW2JpaGFyXSBMVFtldGFuXVwiLG5leHRXZWVrOlwiZGRkZCBMVFtldGFuXVwiLGxhc3REYXk6XCJbYXR6b10gTFRbZXRhbl1cIixsYXN0V2VlazpcIlthdXJyZWtvXSBkZGRkIExUW2V0YW5dXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXMgYmFycnVcIixwYXN0OlwiZHVlbGEgJXNcIixzOlwic2VndW5kbyBiYXR6dWtcIixzczpcIiVkIHNlZ3VuZG9cIixtOlwibWludXR1IGJhdFwiLG1tOlwiJWQgbWludXR1XCIsaDpcIm9yZHUgYmF0XCIsaGg6XCIlZCBvcmR1XCIsZDpcImVndW4gYmF0XCIsZGQ6XCIlZCBlZ3VuXCIsTTpcImhpbGFiZXRlIGJhdFwiLE1NOlwiJWQgaGlsYWJldGVcIix5OlwidXJ0ZSBiYXRcIix5eTpcIiVkIHVydGVcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn1cXC4vLG9yZGluYWw6XCIlZC5cIix3ZWVrOntkb3c6MSxkb3k6N319KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO3ZhciBzeW1ib2xNYXA9ezE6XCLbsVwiLDI6XCLbslwiLDM6XCLbs1wiLDQ6XCLbtFwiLDU6XCLbtVwiLDY6XCLbtlwiLDc6XCLbt1wiLDg6XCLbuFwiLDk6XCLbuVwiLDA6XCLbsFwifSxudW1iZXJNYXA9e1wi27FcIjpcIjFcIixcItuyXCI6XCIyXCIsXCLbs1wiOlwiM1wiLFwi27RcIjpcIjRcIixcItu1XCI6XCI1XCIsXCLbtlwiOlwiNlwiLFwi27dcIjpcIjdcIixcItu4XCI6XCI4XCIsXCLbuVwiOlwiOVwiLFwi27BcIjpcIjBcIn07bW9tZW50LmRlZmluZUxvY2FsZShcImZhXCIse21vbnRoczpcItqY2KfZhtmI24zZh1/ZgdmI2LHbjNmHX9mF2KfYsdizX9ii2YjYsduM2YRf2YXZh1/amNmI2KbZhl/amNmI2KbbjNmHX9in2YjYql/Ys9m+2KrYp9mF2KjYsV/Yp9qp2KrYqNixX9mG2YjYp9mF2KjYsV/Yr9iz2KfZhdio2LFcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLamNin2YbZiNuM2Ydf2YHZiNix24zZh1/Zhdin2LHYs1/YotmI2LHbjNmEX9mF2Ydf2pjZiNim2YZf2pjZiNim24zZh1/Yp9mI2Kpf2LPZvtiq2KfZhdio2LFf2Kfaqdiq2KjYsV/ZhtmI2KfZhdio2LFf2K/Ys9in2YXYqNixXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwi24zaqeKAjNi02YbYqNmHX9iv2YjYtNmG2KjZh1/Ys9mH4oCM2LTZhtio2Ydf2obZh9in2LHYtNmG2KjZh1/ZvtmG2KzigIzYtNmG2KjZh1/YrNmF2LnZh1/YtNmG2KjZh1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi24zaqeKAjNi02YbYqNmHX9iv2YjYtNmG2KjZh1/Ys9mH4oCM2LTZhtio2Ydf2obZh9in2LHYtNmG2KjZh1/ZvtmG2KzigIzYtNmG2KjZh1/YrNmF2LnZh1/YtNmG2KjZh1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcItuMX9ivX9izX9qGX9m+X9isX9i0XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW1cIn0sbWVyaWRpZW1QYXJzZTov2YLYqNmEINin2LIg2LjZh9ixfNio2LnYryDYp9iyINi42YfYsS8saXNQTTpmdW5jdGlvbihpbnB1dCl7cmV0dXJuL9io2LnYryDYp9iyINi42YfYsS8udGVzdChpbnB1dCl9LG1lcmlkaWVtOmZ1bmN0aW9uKGhvdXIsbWludXRlLGlzTG93ZXIpe3JldHVybiBob3VyPDEyP1wi2YLYqNmEINin2LIg2LjZh9ixXCI6XCLYqNi52K8g2KfYsiDYuNmH2LFcIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJb2KfZhdix2YjYsiDYs9in2LnYql0gTFRcIixuZXh0RGF5OlwiW9mB2LHYr9inINiz2KfYudiqXSBMVFwiLG5leHRXZWVrOlwiZGRkZCBb2LPYp9i52KpdIExUXCIsbGFzdERheTpcIlvYr9uM2LHZiNiyINiz2KfYudiqXSBMVFwiLGxhc3RXZWVrOlwiZGRkZCBb2b7bjNi0XSBb2LPYp9i52KpdIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwi2K/YsSAlc1wiLHBhc3Q6XCIlcyDZvtuM2LRcIixzOlwi2obZhtivINir2KfZhtuM2YdcIixzczpcIiVkINir2KfZhtuM2YdcIixtOlwi24zaqSDYr9mC24zZgtmHXCIsbW06XCIlZCDYr9mC24zZgtmHXCIsaDpcItuM2qkg2LPYp9i52KpcIixoaDpcIiVkINiz2KfYudiqXCIsZDpcItuM2qkg2LHZiNiyXCIsZGQ6XCIlZCDYsdmI2LJcIixNOlwi24zaqSDZhdin2YdcIixNTTpcIiVkINmF2KfZh1wiLHk6XCLbjNqpINiz2KfZhFwiLHl5OlwiJWQg2LPYp9mEXCJ9LHByZXBhcnNlOmZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b27At27ldL2csKGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gbnVtYmVyTWFwW21hdGNoXX0pKS5yZXBsYWNlKC/YjC9nLFwiLFwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihzdHJpbmcpe3JldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csKGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gc3ltYm9sTWFwW21hdGNoXX0pKS5yZXBsYWNlKC8sL2csXCLYjFwiKX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn3ZhS8sb3JkaW5hbDpcIiVk2YVcIix3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjt2YXIgbnVtYmVyc1Bhc3Q9XCJub2xsYSB5a3NpIGtha3NpIGtvbG1lIG5lbGrDpCB2aWlzaSBrdXVzaSBzZWl0c2Vtw6RuIGthaGRla3NhbiB5aGRla3PDpG5cIi5zcGxpdChcIiBcIiksbnVtYmVyc0Z1dHVyZT1bXCJub2xsYVwiLFwieWhkZW5cIixcImthaGRlblwiLFwia29sbWVuXCIsXCJuZWxqw6RuXCIsXCJ2aWlkZW5cIixcImt1dWRlblwiLG51bWJlcnNQYXN0WzddLG51bWJlcnNQYXN0WzhdLG51bWJlcnNQYXN0WzldXTtmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLHdpdGhvdXRTdWZmaXgsa2V5LGlzRnV0dXJlKXt2YXIgcmVzdWx0PVwiXCI7c3dpdGNoKGtleSl7Y2FzZVwic1wiOnJldHVybiBpc0Z1dHVyZT9cIm11dXRhbWFuIHNla3VubmluXCI6XCJtdXV0YW1hIHNla3VudGlcIjtjYXNlXCJzc1wiOnJlc3VsdD1pc0Z1dHVyZT9cInNla3VubmluXCI6XCJzZWt1bnRpYVwiO2JyZWFrO2Nhc2VcIm1cIjpyZXR1cm4gaXNGdXR1cmU/XCJtaW51dXRpblwiOlwibWludXV0dGlcIjtjYXNlXCJtbVwiOnJlc3VsdD1pc0Z1dHVyZT9cIm1pbnV1dGluXCI6XCJtaW51dXR0aWFcIjticmVhaztjYXNlXCJoXCI6cmV0dXJuIGlzRnV0dXJlP1widHVubmluXCI6XCJ0dW50aVwiO2Nhc2VcImhoXCI6cmVzdWx0PWlzRnV0dXJlP1widHVubmluXCI6XCJ0dW50aWFcIjticmVhaztjYXNlXCJkXCI6cmV0dXJuIGlzRnV0dXJlP1wicMOkaXbDpG5cIjpcInDDpGl2w6RcIjtjYXNlXCJkZFwiOnJlc3VsdD1pc0Z1dHVyZT9cInDDpGl2w6RuXCI6XCJww6RpdsOkw6RcIjticmVhaztjYXNlXCJNXCI6cmV0dXJuIGlzRnV0dXJlP1wia3V1a2F1ZGVuXCI6XCJrdXVrYXVzaVwiO2Nhc2VcIk1NXCI6cmVzdWx0PWlzRnV0dXJlP1wia3V1a2F1ZGVuXCI6XCJrdXVrYXV0dGFcIjticmVhaztjYXNlXCJ5XCI6cmV0dXJuIGlzRnV0dXJlP1widnVvZGVuXCI6XCJ2dW9zaVwiO2Nhc2VcInl5XCI6cmVzdWx0PWlzRnV0dXJlP1widnVvZGVuXCI6XCJ2dW90dGFcIn1yZXR1cm4gcmVzdWx0PWZ1bmN0aW9uKG51bWJlcixpc0Z1dHVyZSl7cmV0dXJuIG51bWJlcjwxMD9pc0Z1dHVyZT9udW1iZXJzRnV0dXJlW251bWJlcl06bnVtYmVyc1Bhc3RbbnVtYmVyXTpudW1iZXJ9KG51bWJlcixpc0Z1dHVyZSkrXCIgXCIrcmVzdWx0fW1vbWVudC5kZWZpbmVMb2NhbGUoXCJmaVwiLHttb250aHM6XCJ0YW1taWt1dV9oZWxtaWt1dV9tYWFsaXNrdXVfaHVodGlrdXVfdG91a29rdXVfa2Vzw6RrdXVfaGVpbsOka3V1X2Vsb2t1dV9zeXlza3V1X2xva2FrdXVfbWFycmFza3V1X2pvdWx1a3V1XCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwidGFtbWlfaGVsbWlfbWFhbGlzX2h1aHRpX3RvdWtvX2tlc8OkX2hlaW7DpF9lbG9fc3l5c19sb2thX21hcnJhc19qb3VsdVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcInN1bm51bnRhaV9tYWFuYW50YWlfdGlpc3RhaV9rZXNraXZpaWtrb190b3JzdGFpX3BlcmphbnRhaV9sYXVhbnRhaVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwic3VfbWFfdGlfa2VfdG9fcGVfbGFcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJzdV9tYV90aV9rZV90b19wZV9sYVwiLnNwbGl0KFwiX1wiKSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISC5tbVwiLExUUzpcIkhILm1tLnNzXCIsTDpcIkRELk1NLllZWVlcIixMTDpcIkRvIE1NTU1bdGFdIFlZWVlcIixMTEw6XCJEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbVwiLExMTEw6XCJkZGRkLCBEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbVwiLGw6XCJELk0uWVlZWVwiLGxsOlwiRG8gTU1NIFlZWVlcIixsbGw6XCJEbyBNTU0gWVlZWSwgW2tsb10gSEgubW1cIixsbGxsOlwiZGRkLCBEbyBNTU0gWVlZWSwgW2tsb10gSEgubW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJbdMOkbsOkw6RuXSBba2xvXSBMVFwiLG5leHREYXk6XCJbaHVvbWVubmFdIFtrbG9dIExUXCIsbmV4dFdlZWs6XCJkZGRkIFtrbG9dIExUXCIsbGFzdERheTpcIltlaWxlbl0gW2tsb10gTFRcIixsYXN0V2VlazpcIlt2aWltZV0gZGRkZFtuYV0gW2tsb10gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlcyBww6TDpHN0w6RcIixwYXN0OlwiJXMgc2l0dGVuXCIsczp0cmFuc2xhdGUsc3M6dHJhbnNsYXRlLG06dHJhbnNsYXRlLG1tOnRyYW5zbGF0ZSxoOnRyYW5zbGF0ZSxoaDp0cmFuc2xhdGUsZDp0cmFuc2xhdGUsZGQ6dHJhbnNsYXRlLE06dHJhbnNsYXRlLE1NOnRyYW5zbGF0ZSx5OnRyYW5zbGF0ZSx5eTp0cmFuc2xhdGV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9XFwuLyxvcmRpbmFsOlwiJWQuXCIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwiZmlsXCIse21vbnRoczpcIkVuZXJvX1BlYnJlcm9fTWFyc29fQWJyaWxfTWF5b19IdW55b19IdWx5b19BZ29zdG9fU2V0eWVtYnJlX09rdHVicmVfTm9ieWVtYnJlX0Rpc3llbWJyZVwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIkVuZV9QZWJfTWFyX0Ficl9NYXlfSHVuX0h1bF9BZ29fU2V0X09rdF9Ob2JfRGlzXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwiTGluZ2dvX0x1bmVzX01hcnRlc19NaXllcmt1bGVzX0h1d2ViZXNfQml5ZXJuZXNfU2FiYWRvXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJMaW5fTHVuX01hcl9NaXlfSHV3X0JpeV9TYWJcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJMaV9MdV9NYV9NaV9IdV9CaV9TYWJcIi5zcGxpdChcIl9cIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJNTS9EL1lZWVlcIixMTDpcIk1NTU0gRCwgWVlZWVwiLExMTDpcIk1NTU0gRCwgWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBNTU1NIERELCBZWVlZIEhIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiTFQgW25nYXlvbmcgYXJhd11cIixuZXh0RGF5OlwiW0J1a2FzIG5nXSBMVFwiLG5leHRXZWVrOlwiTFQgW3NhIHN1c3Vub2QgbmFdIGRkZGRcIixsYXN0RGF5OlwiTFQgW2thaGFwb25dXCIsbGFzdFdlZWs6XCJMVCBbbm9vbmcgbmFrYXJhYW5nXSBkZGRkXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwic2EgbG9vYiBuZyAlc1wiLHBhc3Q6XCIlcyBhbmcgbmFrYWxpcGFzXCIsczpcImlsYW5nIHNlZ3VuZG9cIixzczpcIiVkIHNlZ3VuZG9cIixtOlwiaXNhbmcgbWludXRvXCIsbW06XCIlZCBtaW51dG9cIixoOlwiaXNhbmcgb3Jhc1wiLGhoOlwiJWQgb3Jhc1wiLGQ6XCJpc2FuZyBhcmF3XCIsZGQ6XCIlZCBhcmF3XCIsTTpcImlzYW5nIGJ1d2FuXCIsTU06XCIlZCBidXdhblwiLHk6XCJpc2FuZyB0YW9uXCIseXk6XCIlZCB0YW9uXCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9LyxvcmRpbmFsOmZ1bmN0aW9uKG51bWJlcil7cmV0dXJuIG51bWJlcn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwiZm9cIix7bW9udGhzOlwiamFudWFyX2ZlYnJ1YXJfbWFyc19hcHLDrWxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJqYW5fZmViX21hcl9hcHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2Rlc1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcInN1bm51ZGFndXJfbcOhbmFkYWd1cl90w71zZGFndXJfbWlrdWRhZ3VyX2jDs3NkYWd1cl9mcsOtZ2dqYWRhZ3VyX2xleWdhcmRhZ3VyXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJzdW5fbcOhbl90w71zX21pa19ow7NzX2Zyw61fbGV5XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwic3VfbcOhX3TDvV9taV9ow7NfZnJfbGVcIi5zcGxpdChcIl9cIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQgRC4gTU1NTSwgWVlZWSBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIlvDjSBkYWcga2wuXSBMVFwiLG5leHREYXk6XCJbw40gbW9yZ2luIGtsLl0gTFRcIixuZXh0V2VlazpcImRkZGQgW2tsLl0gTFRcIixsYXN0RGF5OlwiW8ONIGdqw6FyIGtsLl0gTFRcIixsYXN0V2VlazpcIltzw63DsHN0dV0gZGRkZCBba2xdIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwidW0gJXNcIixwYXN0OlwiJXMgc8Otw7BhbmlcIixzOlwiZsOhIHNla3VuZFwiLHNzOlwiJWQgc2VrdW5kaXJcIixtOlwiZWluIG1pbnV0dHVyXCIsbW06XCIlZCBtaW51dHRpclwiLGg6XCJlaW4gdMOtbWlcIixoaDpcIiVkIHTDrW1hclwiLGQ6XCJlaW4gZGFndXJcIixkZDpcIiVkIGRhZ2FyXCIsTTpcImVpbiBtw6FuYcOwdXJcIixNTTpcIiVkIG3DoW5hw7BpclwiLHk6XCJlaXR0IMOhclwiLHl5OlwiJWQgw6FyXCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9XFwuLyxvcmRpbmFsOlwiJWQuXCIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjt2YXIgbW9udGhzUmVnZXg9LyhqYW52XFwuP3xmw6l2clxcLj98bWFyc3xhdnJcXC4/fG1haXxqdWlufGp1aWxcXC4/fGFvw7t0fHNlcHRcXC4/fG9jdFxcLj98bm92XFwuP3xkw6ljXFwuP3xqYW52aWVyfGbDqXZyaWVyfG1hcnN8YXZyaWx8bWFpfGp1aW58anVpbGxldHxhb8O7dHxzZXB0ZW1icmV8b2N0b2JyZXxub3ZlbWJyZXxkw6ljZW1icmUpL2ksbW9udGhzUGFyc2U9Wy9eamFudi9pLC9eZsOpdnIvaSwvXm1hcnMvaSwvXmF2ci9pLC9ebWFpL2ksL15qdWluL2ksL15qdWlsL2ksL15hb8O7dC9pLC9ec2VwdC9pLC9eb2N0L2ksL15ub3YvaSwvXmTDqWMvaV07bW9tZW50LmRlZmluZUxvY2FsZShcImZyXCIse21vbnRoczpcImphbnZpZXJfZsOpdnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2Fvw7t0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2TDqWNlbWJyZVwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImphbnYuX2bDqXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW/Du3Rfc2VwdC5fb2N0Ll9ub3YuX2TDqWMuXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1JlZ2V4Om1vbnRoc1JlZ2V4LG1vbnRoc1Nob3J0UmVnZXg6bW9udGhzUmVnZXgsbW9udGhzU3RyaWN0UmVnZXg6L14oamFudmllcnxmw6l2cmllcnxtYXJzfGF2cmlsfG1haXxqdWlufGp1aWxsZXR8YW/Du3R8c2VwdGVtYnJlfG9jdG9icmV8bm92ZW1icmV8ZMOpY2VtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6LyhqYW52XFwuP3xmw6l2clxcLj98bWFyc3xhdnJcXC4/fG1haXxqdWlufGp1aWxcXC4/fGFvw7t0fHNlcHRcXC4/fG9jdFxcLj98bm92XFwuP3xkw6ljXFwuPykvaSxtb250aHNQYXJzZTptb250aHNQYXJzZSxsb25nTW9udGhzUGFyc2U6bW9udGhzUGFyc2Usc2hvcnRNb250aHNQYXJzZTptb250aHNQYXJzZSx3ZWVrZGF5czpcImRpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcImRpX2x1X21hX21lX2plX3ZlX3NhXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCBEIE1NTU0gWVlZWSBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIltBdWpvdXJk4oCZaHVpIMOgXSBMVFwiLG5leHREYXk6XCJbRGVtYWluIMOgXSBMVFwiLG5leHRXZWVrOlwiZGRkZCBbw6BdIExUXCIsbGFzdERheTpcIltIaWVyIMOgXSBMVFwiLGxhc3RXZWVrOlwiZGRkZCBbZGVybmllciDDoF0gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJkYW5zICVzXCIscGFzdDpcImlsIHkgYSAlc1wiLHM6XCJxdWVscXVlcyBzZWNvbmRlc1wiLHNzOlwiJWQgc2Vjb25kZXNcIixtOlwidW5lIG1pbnV0ZVwiLG1tOlwiJWQgbWludXRlc1wiLGg6XCJ1bmUgaGV1cmVcIixoaDpcIiVkIGhldXJlc1wiLGQ6XCJ1biBqb3VyXCIsZGQ6XCIlZCBqb3Vyc1wiLHc6XCJ1bmUgc2VtYWluZVwiLHd3OlwiJWQgc2VtYWluZXNcIixNOlwidW4gbW9pc1wiLE1NOlwiJWQgbW9pc1wiLHk6XCJ1biBhblwiLHl5OlwiJWQgYW5zXCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9KGVyfCkvLG9yZGluYWw6ZnVuY3Rpb24obnVtYmVyLHBlcmlvZCl7c3dpdGNoKHBlcmlvZCl7Y2FzZVwiRFwiOnJldHVybiBudW1iZXIrKDE9PT1udW1iZXI/XCJlclwiOlwiXCIpO2RlZmF1bHQ6Y2FzZVwiTVwiOmNhc2VcIlFcIjpjYXNlXCJERERcIjpjYXNlXCJkXCI6cmV0dXJuIG51bWJlcisoMT09PW51bWJlcj9cImVyXCI6XCJlXCIpO2Nhc2VcIndcIjpjYXNlXCJXXCI6cmV0dXJuIG51bWJlcisoMT09PW51bWJlcj9cInJlXCI6XCJlXCIpfX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwiZnItY2FcIix7bW9udGhzOlwiamFudmllcl9mw6l2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW/Du3Rfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZMOpY2VtYnJlXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiamFudi5fZsOpdnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb8O7dF9zZXB0Ll9vY3QuX25vdi5fZMOpYy5cIi5zcGxpdChcIl9cIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpcImRpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcImRpX2x1X21hX21lX2plX3ZlX3NhXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIllZWVktTU0tRERcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCBEIE1NTU0gWVlZWSBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIltBdWpvdXJk4oCZaHVpIMOgXSBMVFwiLG5leHREYXk6XCJbRGVtYWluIMOgXSBMVFwiLG5leHRXZWVrOlwiZGRkZCBbw6BdIExUXCIsbGFzdERheTpcIltIaWVyIMOgXSBMVFwiLGxhc3RXZWVrOlwiZGRkZCBbZGVybmllciDDoF0gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJkYW5zICVzXCIscGFzdDpcImlsIHkgYSAlc1wiLHM6XCJxdWVscXVlcyBzZWNvbmRlc1wiLHNzOlwiJWQgc2Vjb25kZXNcIixtOlwidW5lIG1pbnV0ZVwiLG1tOlwiJWQgbWludXRlc1wiLGg6XCJ1bmUgaGV1cmVcIixoaDpcIiVkIGhldXJlc1wiLGQ6XCJ1biBqb3VyXCIsZGQ6XCIlZCBqb3Vyc1wiLE06XCJ1biBtb2lzXCIsTU06XCIlZCBtb2lzXCIseTpcInVuIGFuXCIseXk6XCIlZCBhbnNcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn0oZXJ8ZSkvLG9yZGluYWw6ZnVuY3Rpb24obnVtYmVyLHBlcmlvZCl7c3dpdGNoKHBlcmlvZCl7ZGVmYXVsdDpjYXNlXCJNXCI6Y2FzZVwiUVwiOmNhc2VcIkRcIjpjYXNlXCJERERcIjpjYXNlXCJkXCI6cmV0dXJuIG51bWJlcisoMT09PW51bWJlcj9cImVyXCI6XCJlXCIpO2Nhc2VcIndcIjpjYXNlXCJXXCI6cmV0dXJuIG51bWJlcisoMT09PW51bWJlcj9cInJlXCI6XCJlXCIpfX19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO21vbWVudC5kZWZpbmVMb2NhbGUoXCJmci1jaFwiLHttb250aHM6XCJqYW52aWVyX2bDqXZyaWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVpbGxldF9hb8O7dF9zZXB0ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kw6ljZW1icmVcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJqYW52Ll9mw6l2ci5fbWFyc19hdnIuX21haV9qdWluX2p1aWwuX2Fvw7t0X3NlcHQuX29jdC5fbm92Ll9kw6ljLlwiLnNwbGl0KFwiX1wiKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOlwiZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiZGlfbHVfbWFfbWVfamVfdmVfc2FcIi5zcGxpdChcIl9cIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQuTU0uWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW0F1am91cmTigJlodWkgw6BdIExUXCIsbmV4dERheTpcIltEZW1haW4gw6BdIExUXCIsbmV4dFdlZWs6XCJkZGRkIFvDoF0gTFRcIixsYXN0RGF5OlwiW0hpZXIgw6BdIExUXCIsbGFzdFdlZWs6XCJkZGRkIFtkZXJuaWVyIMOgXSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImRhbnMgJXNcIixwYXN0OlwiaWwgeSBhICVzXCIsczpcInF1ZWxxdWVzIHNlY29uZGVzXCIsc3M6XCIlZCBzZWNvbmRlc1wiLG06XCJ1bmUgbWludXRlXCIsbW06XCIlZCBtaW51dGVzXCIsaDpcInVuZSBoZXVyZVwiLGhoOlwiJWQgaGV1cmVzXCIsZDpcInVuIGpvdXJcIixkZDpcIiVkIGpvdXJzXCIsTTpcInVuIG1vaXNcIixNTTpcIiVkIG1vaXNcIix5OlwidW4gYW5cIix5eTpcIiVkIGFuc1wifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfShlcnxlKS8sb3JkaW5hbDpmdW5jdGlvbihudW1iZXIscGVyaW9kKXtzd2l0Y2gocGVyaW9kKXtkZWZhdWx0OmNhc2VcIk1cIjpjYXNlXCJRXCI6Y2FzZVwiRFwiOmNhc2VcIkRERFwiOmNhc2VcImRcIjpyZXR1cm4gbnVtYmVyKygxPT09bnVtYmVyP1wiZXJcIjpcImVcIik7Y2FzZVwid1wiOmNhc2VcIldcIjpyZXR1cm4gbnVtYmVyKygxPT09bnVtYmVyP1wicmVcIjpcImVcIil9fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO3ZhciBtb250aHNTaG9ydFdpdGhEb3RzPVwiamFuLl9mZWIuX21ydC5fYXByLl9tYWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLlwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydFdpdGhvdXREb3RzPVwiamFuX2ZlYl9tcnRfYXByX21haV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZXNcIi5zcGxpdChcIl9cIik7bW9tZW50LmRlZmluZUxvY2FsZShcImZ5XCIse21vbnRoczpcImphbm5ld2FyaXNfZmVicmV3YXJpc19tYWFydF9hcHJpbF9tYWFpZV9qdW55X2p1bHlfYXVndXN0dXNfc2VwdGltYmVyX29rdG9iZXJfbm92aW1iZXJfZGVzaW1iZXJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24obSxmb3JtYXQpe3JldHVybiBtPy8tTU1NLS8udGVzdChmb3JtYXQpP21vbnRoc1Nob3J0V2l0aG91dERvdHNbbS5tb250aCgpXTptb250aHNTaG9ydFdpdGhEb3RzW20ubW9udGgoKV06bW9udGhzU2hvcnRXaXRoRG90c30sbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpcInNuZWluX21vYW5kZWlfdGlpc2RlaV93b2Fuc2RlaV90b25nZXJzZGVpX2ZyZWVkX3NuZW9uXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJzaS5fbW8uX3RpLl93by5fdG8uX2ZyLl9zby5cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJTaV9Nb19UaV9Xb19Ub19Gcl9Tb1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC1NTS1ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQgRCBNTU1NIFlZWVkgSEg6bW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJbaGpvZWQgb21dIExUXCIsbmV4dERheTpcIlttb2FybiBvbV0gTFRcIixuZXh0V2VlazpcImRkZGQgW29tXSBMVFwiLGxhc3REYXk6XCJbanVzdGVyIG9tXSBMVFwiLGxhc3RXZWVrOlwiW8O0ZnLDu25lXSBkZGRkIFtvbV0gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJvZXIgJXNcIixwYXN0OlwiJXMgbHluXCIsczpcImluIHBlYXIgc2Vrb25kZW5cIixzczpcIiVkIHNla29uZGVuXCIsbTpcImllbiBtaW7DunRcIixtbTpcIiVkIG1pbnV0ZW5cIixoOlwiaWVuIG9lcmVcIixoaDpcIiVkIG9lcmVuXCIsZDpcImllbiBkZWlcIixkZDpcIiVkIGRhZ2VuXCIsTTpcImllbiBtb2FubmVcIixNTTpcIiVkIG1vYW5uZW5cIix5OlwiaWVuIGppZXJcIix5eTpcIiVkIGppZXJyZW5cIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn0oc3RlfGRlKS8sb3JkaW5hbDpmdW5jdGlvbihudW1iZXIpe3JldHVybiBudW1iZXIrKDE9PT1udW1iZXJ8fDg9PT1udW1iZXJ8fG51bWJlcj49MjA/XCJzdGVcIjpcImRlXCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO21vbWVudC5kZWZpbmVMb2NhbGUoXCJnYVwiLHttb250aHM6W1wiRWFuw6FpclwiLFwiRmVhYmhyYVwiLFwiTcOhcnRhXCIsXCJBaWJyZcOhblwiLFwiQmVhbHRhaW5lXCIsXCJNZWl0aGVhbWhcIixcIknDumlsXCIsXCJMw7puYXNhXCIsXCJNZcOhbiBGw7NtaGFpclwiLFwiRGVpcmVhZGggRsOzbWhhaXJcIixcIlNhbWhhaW5cIixcIk5vbGxhaWdcIl0sbW9udGhzU2hvcnQ6W1wiRWFuXCIsXCJGZWFiaFwiLFwiTcOhcnRcIixcIkFpYlwiLFwiQmVhbFwiLFwiTWVpdGhcIixcIknDumlsXCIsXCJMw7puXCIsXCJNLkYuXCIsXCJELkYuXCIsXCJTYW1oXCIsXCJOb2xsXCJdLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6W1wiRMOpIERvbWhuYWlnaFwiLFwiRMOpIEx1YWluXCIsXCJEw6kgTcOhaXJ0XCIsXCJEw6kgQ8OpYWRhb2luXCIsXCJEw6lhcmRhb2luXCIsXCJEw6kgaEFvaW5lXCIsXCJEw6kgU2F0aGFpcm5cIl0sd2Vla2RheXNTaG9ydDpbXCJEb21oXCIsXCJMdWFuXCIsXCJNw6FpcnRcIixcIkPDqWFkXCIsXCJEw6lhclwiLFwiQW9pbmVcIixcIlNhdGhcIl0sd2Vla2RheXNNaW46W1wiRG9cIixcIkx1XCIsXCJNw6FcIixcIkPDqVwiLFwiRMOpXCIsXCJBXCIsXCJTYVwiXSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJbSW5uaXUgYWddIExUXCIsbmV4dERheTpcIltBbcOhcmFjaCBhZ10gTFRcIixuZXh0V2VlazpcImRkZGQgW2FnXSBMVFwiLGxhc3REYXk6XCJbSW5uw6kgYWddIExUXCIsbGFzdFdlZWs6XCJkZGRkIFtzZW8gY2FpdGVdIFthZ10gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJpICVzXCIscGFzdDpcIiVzIMOzIHNoaW5cIixzOlwiY8O6cGxhIHNvaWNpbmRcIixzczpcIiVkIHNvaWNpbmRcIixtOlwibsOzaW3DqWFkXCIsbW06XCIlZCBuw7NpbcOpYWRcIixoOlwidWFpciBhbiBjaGxvaWdcIixoaDpcIiVkIHVhaXIgYW4gY2hsb2lnXCIsZDpcImzDoVwiLGRkOlwiJWQgbMOhXCIsTTpcIm3DrVwiLE1NOlwiJWQgbcOtb25uYVwiLHk6XCJibGlhaW5cIix5eTpcIiVkIGJsaWFpblwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfShkfG5hfG1oKS8sb3JkaW5hbDpmdW5jdGlvbihudW1iZXIpe3JldHVybiBudW1iZXIrKDE9PT1udW1iZXI/XCJkXCI6bnVtYmVyJTEwPT0yP1wibmFcIjpcIm1oXCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO21vbWVudC5kZWZpbmVMb2NhbGUoXCJnZFwiLHttb250aHM6W1wiQW0gRmFvaWxsZWFjaFwiLFwiQW4gR2VhcnJhblwiLFwiQW0gTcOgcnRcIixcIkFuIEdpYmxlYW5cIixcIkFuIEPDqGl0ZWFuXCIsXCJBbiB0LcOSZ21oaW9zXCIsXCJBbiB0LUl1Y2hhclwiLFwiQW4gTMO5bmFzdGFsXCIsXCJBbiB0LVN1bHRhaW5cIixcIkFuIETDoG1oYWlyXCIsXCJBbiB0LVNhbWhhaW5cIixcIkFuIETDuWJobGFjaGRcIl0sbW9udGhzU2hvcnQ6W1wiRmFvaVwiLFwiR2VhclwiLFwiTcOgcnRcIixcIkdpYmxcIixcIkPDqGl0XCIsXCLDkmdtaFwiLFwiSXVjaFwiLFwiTMO5blwiLFwiU3VsdFwiLFwiRMOgbWhcIixcIlNhbWhcIixcIkTDuWJoXCJdLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6W1wiRGlkw7JtaG5haWNoXCIsXCJEaWx1YWluXCIsXCJEaW3DoGlydFwiLFwiRGljaWFkYWluXCIsXCJEaWFyZGFvaW5cIixcIkRpaGFvaW5lXCIsXCJEaXNhdGhhaXJuZVwiXSx3ZWVrZGF5c1Nob3J0OltcIkRpZFwiLFwiRGlsXCIsXCJEaW1cIixcIkRpY1wiLFwiRGlhXCIsXCJEaWhcIixcIkRpc1wiXSx3ZWVrZGF5c01pbjpbXCJEw7JcIixcIkx1XCIsXCJNw6BcIixcIkNpXCIsXCJBclwiLFwiSGFcIixcIlNhXCJdLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIltBbi1kaXVnaCBhaWddIExUXCIsbmV4dERheTpcIltBLW3DoGlyZWFjaCBhaWddIExUXCIsbmV4dFdlZWs6XCJkZGRkIFthaWddIExUXCIsbGFzdERheTpcIltBbi1kw6ggYWlnXSBMVFwiLGxhc3RXZWVrOlwiZGRkZCBbc2VvIGNoYWlkaF0gW2FpZ10gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJhbm4gYW4gJXNcIixwYXN0OlwiYmhvIGNoaW9ubiAlc1wiLHM6XCJiZWFnYW4gZGlvZ2FuXCIsc3M6XCIlZCBkaW9nYW5cIixtOlwibWlvbmFpZFwiLG1tOlwiJWQgbWlvbmFpZGVhblwiLGg6XCJ1YWlyXCIsaGg6XCIlZCB1YWlyZWFuXCIsZDpcImxhdGhhXCIsZGQ6XCIlZCBsYXRoYVwiLE06XCJtw6xvc1wiLE1NOlwiJWQgbcOsb3NhblwiLHk6XCJibGlhZGhuYVwiLHl5OlwiJWQgYmxpYWRobmFcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn0oZHxuYXxtaCkvLG9yZGluYWw6ZnVuY3Rpb24obnVtYmVyKXtyZXR1cm4gbnVtYmVyKygxPT09bnVtYmVyP1wiZFwiOm51bWJlciUxMD09Mj9cIm5hXCI6XCJtaFwiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwiZ2xcIix7bW9udGhzOlwieGFuZWlyb19mZWJyZWlyb19tYXJ6b19hYnJpbF9tYWlvX3h1w7FvX3h1bGxvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlY2VtYnJvXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwieGFuLl9mZWIuX21hci5fYWJyLl9tYWkuX3h1w7EuX3h1bC5fYWdvLl9zZXQuX291dC5fbm92Ll9kZWMuXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6XCJkb21pbmdvX2x1bnNfbWFydGVzX23DqXJjb3Jlc194b3Zlc192ZW5yZXNfc8OhYmFkb1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiZG9tLl9sdW4uX21hci5fbcOpci5feG92Ll92ZW4uX3PDoWIuXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiZG9fbHVfbWFfbcOpX3hvX3ZlX3PDoVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSDptbVwiLExUUzpcIkg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBbZGVdIE1NTU0gW2RlXSBZWVlZXCIsTExMOlwiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW1cIixMTExMOlwiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm5cIltob3hlIFwiKygxIT09dGhpcy5ob3VycygpP1wiw6FzXCI6XCLDoVwiKStcIl0gTFRcIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVyblwiW21hw7HDoSBcIisoMSE9PXRoaXMuaG91cnMoKT9cIsOhc1wiOlwiw6FcIikrXCJdIExUXCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuXCJkZGRkIFtcIisoMSE9PXRoaXMuaG91cnMoKT9cIsOhc1wiOlwiYVwiKStcIl0gTFRcIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVyblwiW29udGUgXCIrKDEhPT10aGlzLmhvdXJzKCk/XCLDoVwiOlwiYVwiKStcIl0gTFRcIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm5cIltvXSBkZGRkIFtwYXNhZG8gXCIrKDEhPT10aGlzLmhvdXJzKCk/XCLDoXNcIjpcImFcIikrXCJdIExUXCJ9LHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbihzdHIpe3JldHVybiAwPT09c3RyLmluZGV4T2YoXCJ1blwiKT9cIm5cIitzdHI6XCJlbiBcIitzdHJ9LHBhc3Q6XCJoYWkgJXNcIixzOlwidW5zIHNlZ3VuZG9zXCIsc3M6XCIlZCBzZWd1bmRvc1wiLG06XCJ1biBtaW51dG9cIixtbTpcIiVkIG1pbnV0b3NcIixoOlwidW5oYSBob3JhXCIsaGg6XCIlZCBob3Jhc1wiLGQ6XCJ1biBkw61hXCIsZGQ6XCIlZCBkw61hc1wiLE06XCJ1biBtZXNcIixNTTpcIiVkIG1lc2VzXCIseTpcInVuIGFub1wiLHl5OlwiJWQgYW5vc1wifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfcK6LyxvcmRpbmFsOlwiJWTCulwiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsd2l0aG91dFN1ZmZpeCxrZXksaXNGdXR1cmUpe3ZhciBmb3JtYXQ9e3M6W1wi4KSl4KWL4KSh4KSv4KS+IOCkuOClheCkleCkguCkoeCkvuCkguCkqOClgFwiLFwi4KSl4KWL4KSh4KWHIOCkuOClheCkleCkguCkoVwiXSxzczpbbnVtYmVyK1wiIOCkuOClheCkleCkguCkoeCkvuCkguCkqOClgFwiLG51bWJlcitcIiDgpLjgpYXgpJXgpILgpKFcIl0sbTpbXCLgpI/gpJXgpL4g4KSu4KS/4KSj4KSf4KS+4KSoXCIsXCLgpI/gpJUg4KSu4KS/4KSo4KWC4KSfXCJdLG1tOltudW1iZXIrXCIg4KSu4KS/4KSj4KSf4KS+4KSC4KSo4KWAXCIsbnVtYmVyK1wiIOCkruCkv+Cko+Ckn+CkvuCkglwiXSxoOltcIuCkj+CkleCkviDgpLXgpLDgpL7gpKhcIixcIuCkj+CklSDgpLXgpLBcIl0saGg6W251bWJlcitcIiDgpLXgpLDgpL7gpILgpKjgpYBcIixudW1iZXIrXCIg4KS14KSw4KS+4KSCXCJdLGQ6W1wi4KSP4KSV4KS+IOCkpuCkv+CkuOCkvuCkqFwiLFwi4KSP4KSVIOCkpuClgOCkuFwiXSxkZDpbbnVtYmVyK1wiIOCkpuCkv+CkuOCkvuCkguCkqOClgFwiLG51bWJlcitcIiDgpKbgpYDgpLhcIl0sTTpbXCLgpI/gpJXgpL4g4KSu4KWN4KS54KSv4KSo4KWN4KSv4KS+4KSoXCIsXCLgpI/gpJUg4KSu4KWN4KS54KSv4KSo4KWLXCJdLE1NOltudW1iZXIrXCIg4KSu4KWN4KS54KSv4KSo4KWN4KSv4KS+4KSo4KWAXCIsbnVtYmVyK1wiIOCkruCljeCkueCkr+CkqOClh1wiXSx5OltcIuCkj+CkleCkviDgpLXgpLDgpY3gpLjgpL7gpKhcIixcIuCkj+CklSDgpLXgpLDgpY3gpLhcIl0seXk6W251bWJlcitcIiDgpLXgpLDgpY3gpLjgpL7gpILgpKjgpYBcIixudW1iZXIrXCIg4KS14KSw4KWN4KS44KS+4KSCXCJdfTtyZXR1cm4gaXNGdXR1cmU/Zm9ybWF0W2tleV1bMF06Zm9ybWF0W2tleV1bMV19bW9tZW50LmRlZmluZUxvY2FsZShcImdvbS1kZXZhXCIse21vbnRoczp7c3RhbmRhbG9uZTpcIuCknOCkvuCkqOClh+CkteCkvuCksOClgF/gpKvgpYfgpKzgpY3gpLDgpYHgpLXgpL7gpLDgpYBf4KSu4KS+4KSw4KWN4KSaX+Ckj+CkquCljeCksOClgOCksl/gpK7gpYdf4KSc4KWC4KSoX+CknOClgeCksuCkr1/gpJHgpJfgpLjgpY3gpJ9f4KS44KSq4KWN4KSf4KWH4KSC4KSs4KSwX+CkkeCkleCljeCkn+Cli+CkrOCksF/gpKjgpYvgpLXgpY3gpLngpYfgpILgpKzgpLBf4KSh4KS/4KS44KWH4KSC4KSs4KSwXCIuc3BsaXQoXCJfXCIpLGZvcm1hdDpcIuCknOCkvuCkqOClh+CkteCkvuCksOClgOCkmuCljeCkr+Ckvl/gpKvgpYfgpKzgpY3gpLDgpYHgpLXgpL7gpLDgpYDgpJrgpY3gpK/gpL5f4KSu4KS+4KSw4KWN4KSa4KS+4KSa4KWN4KSv4KS+X+Ckj+CkquCljeCksOClgOCksuCkvuCkmuCljeCkr+Ckvl/gpK7gpYfgpK/gpL7gpJrgpY3gpK/gpL5f4KSc4KWC4KSo4KS+4KSa4KWN4KSv4KS+X+CknOClgeCksuCkr+CkvuCkmuCljeCkr+Ckvl/gpJHgpJfgpLjgpY3gpJ/gpL7gpJrgpY3gpK/gpL5f4KS44KSq4KWN4KSf4KWH4KSC4KSs4KSw4KS+4KSa4KWN4KSv4KS+X+CkkeCkleCljeCkn+Cli+CkrOCksOCkvuCkmuCljeCkr+Ckvl/gpKjgpYvgpLXgpY3gpLngpYfgpILgpKzgpLDgpL7gpJrgpY3gpK/gpL5f4KSh4KS/4KS44KWH4KSC4KSs4KSw4KS+4KSa4KWN4KSv4KS+XCIuc3BsaXQoXCJfXCIpLGlzRm9ybWF0Oi9NTU1NKFxccykrRFtvRF0/L30sbW9udGhzU2hvcnQ6XCLgpJzgpL7gpKjgpYcuX+Ckq+Clh+CkrOCljeCksOClgS5f4KSu4KS+4KSw4KWN4KSaX+Ckj+CkquCljeCksOClgC5f4KSu4KWHX+CknOClguCkqF/gpJzgpYHgpLIuX+CkkeCkly5f4KS44KSq4KWN4KSf4KWH4KSCLl/gpJHgpJXgpY3gpJ/gpYsuX+CkqOCli+CkteCljeCkueClh+Ckgi5f4KSh4KS/4KS44KWH4KSCLlwiLnNwbGl0KFwiX1wiKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOlwi4KSG4KSv4KSk4KS+4KSwX+CkuOCli+CkruCkvuCksF/gpK7gpILgpJfgpLPgpL7gpLBf4KSs4KWB4KSn4KS14KS+4KSwX+CkrOCkv+CksOClh+CkuOCljeCkpOCkvuCksF/gpLjgpYHgpJXgpY3gpLDgpL7gpLBf4KS24KWH4KSo4KS14KS+4KSwXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLgpIbgpK/gpKQuX+CkuOCli+Ckri5f4KSu4KSC4KSX4KSzLl/gpKzgpYHgpKcuX+CkrOCljeCksOClh+CkuOCljeCkpC5f4KS44KWB4KSV4KWN4KSwLl/gpLbgpYfgpKguXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi4KSGX+CkuOCli1/gpK7gpIJf4KSs4KWBX+CkrOCljeCksOClh1/gpLjgpYFf4KS24KWHXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJBIGg6bW0gW+CkteCkvuCknOCkpOCkvuCkgl1cIixMVFM6XCJBIGg6bW06c3MgW+CkteCkvuCknOCkpOCkvuCkgl1cIixMOlwiREQtTU0tWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBBIGg6bW0gW+CkteCkvuCknOCkpOCkvuCkgl1cIixMTExMOlwiZGRkZCwgTU1NTSBEbywgWVlZWSwgQSBoOm1tIFvgpLXgpL7gpJzgpKTgpL7gpIJdXCIsbGxsbDpcImRkZCwgRCBNTU0gWVlZWSwgQSBoOm1tIFvgpLXgpL7gpJzgpKTgpL7gpIJdXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW+CkhuCkr+CknF0gTFRcIixuZXh0RGF5OlwiW+Ckq+CkvuCksuCljeCkr+CkvuCkgl0gTFRcIixuZXh0V2VlazpcIlvgpKvgpYHgpKHgpLLgpYtdIGRkZGRbLF0gTFRcIixsYXN0RGF5OlwiW+CkleCkvuCksl0gTFRcIixsYXN0V2VlazpcIlvgpKvgpL7gpJ/gpLLgpYtdIGRkZGRbLF0gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlc1wiLHBhc3Q6XCIlcyDgpIbgpKbgpYDgpIJcIixzOnByb2Nlc3NSZWxhdGl2ZVRpbWUsc3M6cHJvY2Vzc1JlbGF0aXZlVGltZSxtOnByb2Nlc3NSZWxhdGl2ZVRpbWUsbW06cHJvY2Vzc1JlbGF0aXZlVGltZSxoOnByb2Nlc3NSZWxhdGl2ZVRpbWUsaGg6cHJvY2Vzc1JlbGF0aXZlVGltZSxkOnByb2Nlc3NSZWxhdGl2ZVRpbWUsZGQ6cHJvY2Vzc1JlbGF0aXZlVGltZSxNOnByb2Nlc3NSZWxhdGl2ZVRpbWUsTU06cHJvY2Vzc1JlbGF0aXZlVGltZSx5OnByb2Nlc3NSZWxhdGl2ZVRpbWUseXk6cHJvY2Vzc1JlbGF0aXZlVGltZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn0o4KS14KWH4KSwKS8sb3JkaW5hbDpmdW5jdGlvbihudW1iZXIscGVyaW9kKXtzd2l0Y2gocGVyaW9kKXtjYXNlXCJEXCI6cmV0dXJuIG51bWJlcitcIuCkteClh+CksFwiO2RlZmF1bHQ6Y2FzZVwiTVwiOmNhc2VcIlFcIjpjYXNlXCJERERcIjpjYXNlXCJkXCI6Y2FzZVwid1wiOmNhc2VcIldcIjpyZXR1cm4gbnVtYmVyfX0sd2Vlazp7ZG93OjAsZG95OjN9LG1lcmlkaWVtUGFyc2U6L+CksOCkvuCkpOClgHzgpLjgpJXgpL7gpLPgpYDgpIJ84KSm4KSo4KSq4KS+4KSw4KS+4KSCfOCkuOCkvuCkguCknOClhy8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGhvdXIsbWVyaWRpZW0pe3JldHVybiAxMj09PWhvdXImJihob3VyPTApLFwi4KSw4KS+4KSk4KWAXCI9PT1tZXJpZGllbT9ob3VyPDQ/aG91cjpob3VyKzEyOlwi4KS44KSV4KS+4KSz4KWA4KSCXCI9PT1tZXJpZGllbT9ob3VyOlwi4KSm4KSo4KSq4KS+4KSw4KS+4KSCXCI9PT1tZXJpZGllbT9ob3VyPjEyP2hvdXI6aG91cisxMjpcIuCkuOCkvuCkguCknOClh1wiPT09bWVyaWRpZW0/aG91cisxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGhvdXIsbWludXRlLGlzTG93ZXIpe3JldHVybiBob3VyPDQ/XCLgpLDgpL7gpKTgpYBcIjpob3VyPDEyP1wi4KS44KSV4KS+4KSz4KWA4KSCXCI6aG91cjwxNj9cIuCkpuCkqOCkquCkvuCksOCkvuCkglwiOmhvdXI8MjA/XCLgpLjgpL7gpILgpJzgpYdcIjpcIuCksOCkvuCkpOClgFwifX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsd2l0aG91dFN1ZmZpeCxrZXksaXNGdXR1cmUpe3ZhciBmb3JtYXQ9e3M6W1widGhvZGRlYSBzZWtvbmRhbW5pXCIsXCJ0aG9kZGUgc2Vrb25kXCJdLHNzOltudW1iZXIrXCIgc2Vrb25kYW1uaVwiLG51bWJlcitcIiBzZWtvbmRcIl0sbTpbXCJla2EgbWludGFuXCIsXCJlayBtaW51dFwiXSxtbTpbbnVtYmVyK1wiIG1pbnRhbW5pXCIsbnVtYmVyK1wiIG1pbnRhbVwiXSxoOltcImVrYSB2b3JhblwiLFwiZWsgdm9yXCJdLGhoOltudW1iZXIrXCIgdm9yYW1uaVwiLG51bWJlcitcIiB2b3JhbVwiXSxkOltcImVrYSBkaXNhblwiLFwiZWsgZGlzXCJdLGRkOltudW1iZXIrXCIgZGlzYW1uaVwiLG51bWJlcitcIiBkaXNcIl0sTTpbXCJla2EgbWhvaW5lYW5cIixcImVrIG1ob2lub1wiXSxNTTpbbnVtYmVyK1wiIG1ob2luZWFtbmlcIixudW1iZXIrXCIgbWhvaW5lXCJdLHk6W1wiZWthIHZvcnNhblwiLFwiZWsgdm9yb3NcIl0seXk6W251bWJlcitcIiB2b3JzYW1uaVwiLG51bWJlcitcIiB2b3JzYW1cIl19O3JldHVybiBpc0Z1dHVyZT9mb3JtYXRba2V5XVswXTpmb3JtYXRba2V5XVsxXX1tb21lbnQuZGVmaW5lTG9jYWxlKFwiZ29tLWxhdG5cIix7bW9udGhzOntzdGFuZGFsb25lOlwiSmFuZXJfRmVicmVyX01hcnNfQWJyaWxfTWFpX0p1bl9KdWxhaV9BZ29zdF9TZXRlbWJyX090dWJyX05vdmVtYnJfRGV6ZW1iclwiLnNwbGl0KFwiX1wiKSxmb3JtYXQ6XCJKYW5lcmFjaGVhX0ZlYnJlcmFjaGVhX01hcnNhY2hlYV9BYnJpbGFjaGVhX01haWFjaGVhX0p1bmFjaGVhX0p1bGFpYWNoZWFfQWdvc3RhY2hlYV9TZXRlbWJyYWNoZWFfT3R1YnJhY2hlYV9Ob3ZlbWJyYWNoZWFfRGV6ZW1icmFjaGVhXCIuc3BsaXQoXCJfXCIpLGlzRm9ybWF0Oi9NTU1NKFxccykrRFtvRF0/L30sbW9udGhzU2hvcnQ6XCJKYW4uX0ZlYi5fTWFyc19BYnIuX01haV9KdW5fSnVsLl9BZ28uX1NldC5fT3R1Ll9Ob3YuX0Rlei5cIi5zcGxpdChcIl9cIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpcIkFpdGFyX1NvbWFyX01vbmdsbGFyX0J1ZGh2YXJfQmlyZXN0YXJfU3VrcmFyX1Nvbid2YXJcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIkFpdC5fU29tLl9Nb24uX0J1ZC5fQnJlLl9TdWsuX1Nvbi5cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJBaV9TbV9Nb19CdV9Ccl9TdV9TblwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiQSBoOm1tIFt2YXp0YV1cIixMVFM6XCJBIGg6bW06c3MgW3ZhenRhXVwiLEw6XCJERC1NTS1ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEEgaDptbSBbdmF6dGFdXCIsTExMTDpcImRkZGQsIE1NTU0gRG8sIFlZWVksIEEgaDptbSBbdmF6dGFdXCIsbGxsbDpcImRkZCwgRCBNTU0gWVlZWSwgQSBoOm1tIFt2YXp0YV1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJbQWl6XSBMVFwiLG5leHREYXk6XCJbRmFsZWFtXSBMVFwiLG5leHRXZWVrOlwiW0Z1ZGRsb10gZGRkZFssXSBMVFwiLGxhc3REYXk6XCJbS2FsXSBMVFwiLGxhc3RXZWVrOlwiW0ZhdHRsb10gZGRkZFssXSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVzXCIscGFzdDpcIiVzIGFkaW1cIixzOnByb2Nlc3NSZWxhdGl2ZVRpbWUsc3M6cHJvY2Vzc1JlbGF0aXZlVGltZSxtOnByb2Nlc3NSZWxhdGl2ZVRpbWUsbW06cHJvY2Vzc1JlbGF0aXZlVGltZSxoOnByb2Nlc3NSZWxhdGl2ZVRpbWUsaGg6cHJvY2Vzc1JlbGF0aXZlVGltZSxkOnByb2Nlc3NSZWxhdGl2ZVRpbWUsZGQ6cHJvY2Vzc1JlbGF0aXZlVGltZSxNOnByb2Nlc3NSZWxhdGl2ZVRpbWUsTU06cHJvY2Vzc1JlbGF0aXZlVGltZSx5OnByb2Nlc3NSZWxhdGl2ZVRpbWUseXk6cHJvY2Vzc1JlbGF0aXZlVGltZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn0oZXIpLyxvcmRpbmFsOmZ1bmN0aW9uKG51bWJlcixwZXJpb2Qpe3N3aXRjaChwZXJpb2Qpe2Nhc2VcIkRcIjpyZXR1cm4gbnVtYmVyK1wiZXJcIjtkZWZhdWx0OmNhc2VcIk1cIjpjYXNlXCJRXCI6Y2FzZVwiREREXCI6Y2FzZVwiZFwiOmNhc2VcIndcIjpjYXNlXCJXXCI6cmV0dXJuIG51bWJlcn19LHdlZWs6e2RvdzowLGRveTozfSxtZXJpZGllbVBhcnNlOi9yYXRpfHNva2FsbGltfGRvbnBhcmFtfHNhbmplLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oaG91cixtZXJpZGllbSl7cmV0dXJuIDEyPT09aG91ciYmKGhvdXI9MCksXCJyYXRpXCI9PT1tZXJpZGllbT9ob3VyPDQ/aG91cjpob3VyKzEyOlwic29rYWxsaW1cIj09PW1lcmlkaWVtP2hvdXI6XCJkb25wYXJhbVwiPT09bWVyaWRpZW0/aG91cj4xMj9ob3VyOmhvdXIrMTI6XCJzYW5qZVwiPT09bWVyaWRpZW0/aG91cisxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGhvdXIsbWludXRlLGlzTG93ZXIpe3JldHVybiBob3VyPDQ/XCJyYXRpXCI6aG91cjwxMj9cInNva2FsbGltXCI6aG91cjwxNj9cImRvbnBhcmFtXCI6aG91cjwyMD9cInNhbmplXCI6XCJyYXRpXCJ9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjt2YXIgc3ltYm9sTWFwPXsxOlwi4KunXCIsMjpcIuCrqFwiLDM6XCLgq6lcIiw0Olwi4KuqXCIsNTpcIuCrq1wiLDY6XCLgq6xcIiw3Olwi4KutXCIsODpcIuCrrlwiLDk6XCLgq69cIiwwOlwi4KumXCJ9LG51bWJlck1hcD17XCLgq6dcIjpcIjFcIixcIuCrqFwiOlwiMlwiLFwi4KupXCI6XCIzXCIsXCLgq6pcIjpcIjRcIixcIuCrq1wiOlwiNVwiLFwi4KusXCI6XCI2XCIsXCLgq61cIjpcIjdcIixcIuCrrlwiOlwiOFwiLFwi4KuvXCI6XCI5XCIsXCLgq6ZcIjpcIjBcIn07bW9tZW50LmRlZmluZUxvY2FsZShcImd1XCIse21vbnRoczpcIuCqnOCqvuCqqOCrjeCqr+CrgeCqhuCqsOCrgF/gqqvgq4fgqqzgq43gqrDgq4HgqobgqrDgq4Bf4Kqu4Kq+4Kqw4KuN4KqaX+Cqj+CqquCrjeCqsOCqv+Cqsl/gqq7gq4df4Kqc4KuC4KqoX+CqnOCrgeCqsuCqvuCqiF/gqpHgqpfgqrjgq43gqp9f4Kq44Kqq4KuN4Kqf4KuH4Kqu4KuN4Kqs4KqwX+CqkeCqleCrjeCqn+CrjeCqrOCqsF/gqqjgqrXgq4fgqq7gq43gqqzgqrBf4Kqh4Kq/4Kq44KuH4Kqu4KuN4Kqs4KqwXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0Olwi4Kqc4Kq+4Kqo4KuN4Kqv4KuBLl/gqqvgq4fgqqzgq43gqrDgq4EuX+CqruCqvuCqsOCrjeCqml/gqo/gqqrgq43gqrDgqr8uX+CqruCrh1/gqpzgq4Lgqqhf4Kqc4KuB4Kqy4Kq+Ll/gqpHgqpcuX+CquOCqquCrjeCqn+Crhy5f4KqR4KqV4KuN4Kqf4KuNLl/gqqjgqrXgq4cuX+CqoeCqv+CquOCrhy5cIi5zcGxpdChcIl9cIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpcIuCqsOCqteCqv+CqteCqvuCqsF/gqrjgq4vgqq7gqrXgqr7gqrBf4Kqu4KqC4KqX4Kqz4Kq14Kq+4KqwX+CqrOCrgeCqp+CrjeCqteCqvuCqsF/gqpfgq4HgqrDgq4HgqrXgqr7gqrBf4Kq24KuB4KqV4KuN4Kqw4Kq14Kq+4KqwX+CqtuCqqOCqv+CqteCqvuCqsFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi4Kqw4Kq14Kq/X+CquOCri+Cqrl/gqq7gqoLgqpfgqrNf4Kqs4KuB4Kqn4KuNX+Cql+CrgeCqsOCrgV/gqrbgq4HgqpXgq43gqrBf4Kq24Kqo4Kq/XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi4KqwX+CquOCri1/gqq7gqoJf4Kqs4KuBX+Cql+CrgV/gqrbgq4Ff4Kq2XCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkEgaDptbSDgqrXgqr7gqpfgq43gqq/gq4dcIixMVFM6XCJBIGg6bW06c3Mg4Kq14Kq+4KqX4KuN4Kqv4KuHXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVksIEEgaDptbSDgqrXgqr7gqpfgq43gqq/gq4dcIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgqrXgqr7gqpfgq43gqq/gq4dcIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJb4KqG4KqcXSBMVFwiLG5leHREYXk6XCJb4KqV4Kq+4Kqy4KuHXSBMVFwiLG5leHRXZWVrOlwiZGRkZCwgTFRcIixsYXN0RGF5OlwiW+Cql+Cqh+CqleCqvuCqsuCrh10gTFRcIixsYXN0V2VlazpcIlvgqqrgqr7gqpvgqrLgqr5dIGRkZGQsIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXMg4Kqu4Kq+XCIscGFzdDpcIiVzIOCqquCqueCrh+CqsuCqvlwiLHM6XCLgqoXgqq7gq4HgqpUg4Kqq4Kqz4KuLXCIsc3M6XCIlZCDgqrjgq4fgqpXgqoLgqqFcIixtOlwi4KqP4KqVIOCqruCqv+CqqOCqv+Cqn1wiLG1tOlwiJWQg4Kqu4Kq/4Kqo4Kq/4KqfXCIsaDpcIuCqj+CqlSDgqpXgqrLgqr7gqpVcIixoaDpcIiVkIOCqleCqsuCqvuCqlVwiLGQ6XCLgqo/gqpUg4Kqm4Kq/4Kq14Kq4XCIsZGQ6XCIlZCDgqqbgqr/gqrXgqrhcIixNOlwi4KqP4KqVIOCqruCqueCqv+CqqOCri1wiLE1NOlwiJWQg4Kqu4Kq54Kq/4Kqo4KuLXCIseTpcIuCqj+CqlSDgqrXgqrDgq43gqrdcIix5eTpcIiVkIOCqteCqsOCrjeCqt1wifSxwcmVwYXJzZTpmdW5jdGlvbihzdHJpbmcpe3JldHVybiBzdHJpbmcucmVwbGFjZSgvW+Crp+CrqOCrqeCrquCrq+CrrOCrreCrruCrr+Crpl0vZywoZnVuY3Rpb24obWF0Y2gpe3JldHVybiBudW1iZXJNYXBbbWF0Y2hdfSkpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywoZnVuY3Rpb24obWF0Y2gpe3JldHVybiBzeW1ib2xNYXBbbWF0Y2hdfSkpfSxtZXJpZGllbVBhcnNlOi/gqrDgqr7gqqR84Kqs4Kqq4KuL4KqwfOCquOCqteCqvuCqsHzgqrjgqr7gqoLgqpwvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihob3VyLG1lcmlkaWVtKXtyZXR1cm4gMTI9PT1ob3VyJiYoaG91cj0wKSxcIuCqsOCqvuCqpFwiPT09bWVyaWRpZW0/aG91cjw0P2hvdXI6aG91cisxMjpcIuCquOCqteCqvuCqsFwiPT09bWVyaWRpZW0/aG91cjpcIuCqrOCqquCri+CqsFwiPT09bWVyaWRpZW0/aG91cj49MTA/aG91cjpob3VyKzEyOlwi4Kq44Kq+4KqC4KqcXCI9PT1tZXJpZGllbT9ob3VyKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oaG91cixtaW51dGUsaXNMb3dlcil7cmV0dXJuIGhvdXI8ND9cIuCqsOCqvuCqpFwiOmhvdXI8MTA/XCLgqrjgqrXgqr7gqrBcIjpob3VyPDE3P1wi4Kqs4Kqq4KuL4KqwXCI6aG91cjwyMD9cIuCquOCqvuCqguCqnFwiOlwi4Kqw4Kq+4KqkXCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7bW9tZW50LmRlZmluZUxvY2FsZShcImhlXCIse21vbnRoczpcIteZ16DXldeQ16hf16TXkdeo15XXkNeoX9ee16jXpV/XkNek16jXmdecX9ee15DXmV/XmdeV16DXmV/XmdeV15zXmV/XkNeV15LXldeh15hf16HXpNeY157XkdeoX9eQ15XXp9eY15XXkdeoX9eg15XXkdee15HXqF/Xk9em157XkdeoXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0Olwi15nXoNeV17Nf16TXkdeo17Nf157XqNelX9eQ16TXqNezX9ee15DXmV/XmdeV16DXmV/XmdeV15zXmV/XkNeV15LXs1/Xodek15jXs1/XkNeV16fXs1/XoNeV15HXs1/Xk9em157Xs1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcIteo15DXqdeV159f16nXoNeZX9ep15zXmdep15lf16jXkdeZ16LXmV/Xl9ee15nXqdeZX9ep15nXqdeZX9ep15HXqlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi15DXs1/XkdezX9eS17Nf15PXs1/XlNezX9eV17Nf16nXs1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIteQX9eRX9eSX9eTX9eUX9eVX9epXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBb15FdTU1NTSBZWVlZXCIsTExMOlwiRCBb15FdTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQsIEQgW9eRXU1NTU0gWVlZWSBISDptbVwiLGw6XCJEL00vWVlZWVwiLGxsOlwiRCBNTU0gWVlZWVwiLGxsbDpcIkQgTU1NIFlZWVkgSEg6bW1cIixsbGxsOlwiZGRkLCBEIE1NTSBZWVlZIEhIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW9eU15nXldedINeR1r5dTFRcIixuZXh0RGF5OlwiW9ee15fXqCDXkda+XUxUXCIsbmV4dFdlZWs6XCJkZGRkIFvXkdep16LXlF0gTFRcIixsYXN0RGF5OlwiW9eQ16rXnteV15wg15HWvl1MVFwiLGxhc3RXZWVrOlwiW9eR15nXldedXSBkZGRkIFvXlNeQ15fXqNeV158g15HXqdei15RdIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwi15HXoteV15MgJXNcIixwYXN0Olwi15zXpNeg15kgJXNcIixzOlwi157Xodek16gg16nXoNeZ15XXqlwiLHNzOlwiJWQg16nXoNeZ15XXqlwiLG06XCLXk9en15RcIixtbTpcIiVkINeT16fXldeqXCIsaDpcItep16LXlFwiLGhoOmZ1bmN0aW9uKG51bWJlcil7cmV0dXJuIDI9PT1udW1iZXI/XCLXqdei16rXmdeZ151cIjpudW1iZXIrXCIg16nXoteV16pcIn0sZDpcIteZ15XXnVwiLGRkOmZ1bmN0aW9uKG51bWJlcil7cmV0dXJuIDI9PT1udW1iZXI/XCLXmdeV157XmdeZ151cIjpudW1iZXIrXCIg15nXnteZ151cIn0sTTpcIteX15XXk9epXCIsTU06ZnVuY3Rpb24obnVtYmVyKXtyZXR1cm4gMj09PW51bWJlcj9cIteX15XXk9ep15nXmdedXCI6bnVtYmVyK1wiINeX15XXk9ep15nXnVwifSx5Olwi16nXoNeUXCIseXk6ZnVuY3Rpb24obnVtYmVyKXtyZXR1cm4gMj09PW51bWJlcj9cItep16DXqteZ15nXnVwiOm51bWJlciUxMD09MCYmMTAhPT1udW1iZXI/bnVtYmVyK1wiINep16DXlFwiOm51bWJlcitcIiDXqdeg15nXnVwifX0sbWVyaWRpZW1QYXJzZTov15DXl9eUXCLXpnzXnNek16DXlFwi16Z815DXl9eo15kg15TXpteU16jXmdeZ151815zXpNeg15kg15TXpteU16jXmdeZ151815zXpNeg15XXqiDXkdeV16fXqHzXkdeR15XXp9eofNeR16LXqNeRL2ksaXNQTTpmdW5jdGlvbihpbnB1dCl7cmV0dXJuL14o15DXl9eUXCLXpnzXkNeX16jXmSDXlNem15TXqNeZ15nXnXzXkdei16jXkSkkLy50ZXN0KGlucHV0KX0sbWVyaWRpZW06ZnVuY3Rpb24oaG91cixtaW51dGUsaXNMb3dlcil7cmV0dXJuIGhvdXI8NT9cItec16TXoNeV16og15HXlden16hcIjpob3VyPDEwP1wi15HXkdeV16fXqFwiOmhvdXI8MTI/aXNMb3dlcj8n15zXpNeg15RcItemJzpcItec16TXoNeZINeU16bXlNeo15nXmdedXCI6aG91cjwxOD9pc0xvd2VyPyfXkNeX15RcItemJzpcIteQ15fXqNeZINeU16bXlNeo15nXmdedXCI6XCLXkdei16jXkVwifX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHN5bWJvbE1hcD17MTpcIuClp1wiLDI6XCLgpahcIiwzOlwi4KWpXCIsNDpcIuClqlwiLDU6XCLgpatcIiw2Olwi4KWsXCIsNzpcIuClrVwiLDg6XCLgpa5cIiw5Olwi4KWvXCIsMDpcIuClplwifSxudW1iZXJNYXA9e1wi4KWnXCI6XCIxXCIsXCLgpahcIjpcIjJcIixcIuClqVwiOlwiM1wiLFwi4KWqXCI6XCI0XCIsXCLgpatcIjpcIjVcIixcIuClrFwiOlwiNlwiLFwi4KWtXCI6XCI3XCIsXCLgpa5cIjpcIjhcIixcIuClr1wiOlwiOVwiLFwi4KWmXCI6XCIwXCJ9LG1vbnRoc1BhcnNlPVsvXuCknOCkqC9pLC9e4KSr4KS84KSwfOCkq+CksC9pLC9e4KSu4KS+4KSw4KWN4KSaL2ksL17gpIXgpKrgpY3gpLDgpYgvaSwvXuCkruCkiC9pLC9e4KSc4KWC4KSoL2ksL17gpJzgpYHgpLIvaSwvXuCkheCkly9pLC9e4KS44KS/4KSk4KSCfOCkuOCkv+CkpC9pLC9e4KSF4KSV4KWN4KSf4KWCL2ksL17gpKjgpLV84KSo4KS14KSCL2ksL17gpKbgpL/gpLjgpIJ84KSm4KS/4KS4L2ldO21vbWVudC5kZWZpbmVMb2NhbGUoXCJoaVwiLHttb250aHM6e2Zvcm1hdDpcIuCknOCkqOCkteCksOClgF/gpKvgpLzgpLDgpLXgpLDgpYBf4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCliOCksl/gpK7gpIhf4KSc4KWC4KSoX+CknOClgeCksuCkvuCkiF/gpIXgpJfgpLjgpY3gpKRf4KS44KS/4KSk4KSu4KWN4KSs4KSwX+CkheCkleCljeCkn+ClguCkrOCksF/gpKjgpLXgpK7gpY3gpKzgpLBf4KSm4KS/4KS44KSu4KWN4KSs4KSwXCIuc3BsaXQoXCJfXCIpLHN0YW5kYWxvbmU6XCLgpJzgpKjgpLXgpLDgpYBf4KSr4KSw4KS14KSw4KWAX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpYjgpLJf4KSu4KSIX+CknOClguCkqF/gpJzgpYHgpLLgpL7gpIhf4KSF4KSX4KS44KWN4KSkX+CkuOCkv+CkpOCkguCkrOCksF/gpIXgpJXgpY3gpJ/gpYLgpKzgpLBf4KSo4KS14KSC4KSs4KSwX+CkpuCkv+CkuOCkguCkrOCksFwiLnNwbGl0KFwiX1wiKX0sbW9udGhzU2hvcnQ6XCLgpJzgpKguX+Ckq+CkvOCksC5f4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCliC5f4KSu4KSIX+CknOClguCkqF/gpJzgpYHgpLIuX+CkheCkly5f4KS44KS/4KSkLl/gpIXgpJXgpY3gpJ/gpYIuX+CkqOCktS5f4KSm4KS/4KS4LlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcIuCksOCkteCkv+CkteCkvuCksF/gpLjgpYvgpK7gpLXgpL7gpLBf4KSu4KSC4KSX4KSy4KS14KS+4KSwX+CkrOClgeCkp+CkteCkvuCksF/gpJfgpYHgpLDgpYLgpLXgpL7gpLBf4KS24KWB4KSV4KWN4KSw4KS14KS+4KSwX+CktuCkqOCkv+CkteCkvuCksFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi4KSw4KS14KS/X+CkuOCli+Ckrl/gpK7gpILgpJfgpLJf4KSs4KWB4KSnX+Ckl+ClgeCksOClgl/gpLbgpYHgpJXgpY3gpLBf4KS24KSo4KS/XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi4KSwX+CkuOCli1/gpK7gpIJf4KSs4KWBX+Ckl+ClgV/gpLbgpYFf4KS2XCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkEgaDptbSDgpKzgpJzgpYdcIixMVFM6XCJBIGg6bW06c3Mg4KSs4KSc4KWHXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVksIEEgaDptbSDgpKzgpJzgpYdcIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgpKzgpJzgpYdcIn0sbW9udGhzUGFyc2U6bW9udGhzUGFyc2UsbG9uZ01vbnRoc1BhcnNlOm1vbnRoc1BhcnNlLHNob3J0TW9udGhzUGFyc2U6Wy9e4KSc4KSoL2ksL17gpKvgpLzgpLAvaSwvXuCkruCkvuCksOCljeCkmi9pLC9e4KSF4KSq4KWN4KSw4KWIL2ksL17gpK7gpIgvaSwvXuCknOClguCkqC9pLC9e4KSc4KWB4KSyL2ksL17gpIXgpJcvaSwvXuCkuOCkv+CkpC9pLC9e4KSF4KSV4KWN4KSf4KWCL2ksL17gpKjgpLUvaSwvXuCkpuCkv+CkuC9pXSxtb250aHNSZWdleDovXijgpJzgpKjgpLXgpLDgpYB84KSc4KSoXFwuP3zgpKvgpLzgpLDgpLXgpLDgpYB84KSr4KSw4KS14KSw4KWAfOCkq+CkvOCksFxcLj984KSu4KS+4KSw4KWN4KSaP3zgpIXgpKrgpY3gpLDgpYjgpLJ84KSF4KSq4KWN4KSw4KWIXFwuP3zgpK7gpIg/fOCknOClguCkqD984KSc4KWB4KSy4KS+4KSIfOCknOClgeCkslxcLj984KSF4KSX4KS44KWN4KSkfOCkheCkl1xcLj984KS44KS/4KSk4KSu4KWN4KSs4KSwfOCkuOCkv+CkpOCkguCkrOCksHzgpLjgpL/gpKRcXC4/fOCkheCkleCljeCkn+ClguCkrOCksHzgpIXgpJXgpY3gpJ/gpYJcXC4/fOCkqOCkteCkruCljeCkrOCksHzgpKjgpLXgpILgpKzgpLB84KSo4KS1XFwuP3zgpKbgpL/gpLjgpK7gpY3gpKzgpLB84KSm4KS/4KS44KSC4KSs4KSwfOCkpuCkv+CkuFxcLj8pL2ksbW9udGhzU2hvcnRSZWdleDovXijgpJzgpKjgpLXgpLDgpYB84KSc4KSoXFwuP3zgpKvgpLzgpLDgpLXgpLDgpYB84KSr4KSw4KS14KSw4KWAfOCkq+CkvOCksFxcLj984KSu4KS+4KSw4KWN4KSaP3zgpIXgpKrgpY3gpLDgpYjgpLJ84KSF4KSq4KWN4KSw4KWIXFwuP3zgpK7gpIg/fOCknOClguCkqD984KSc4KWB4KSy4KS+4KSIfOCknOClgeCkslxcLj984KSF4KSX4KS44KWN4KSkfOCkheCkl1xcLj984KS44KS/4KSk4KSu4KWN4KSs4KSwfOCkuOCkv+CkpOCkguCkrOCksHzgpLjgpL/gpKRcXC4/fOCkheCkleCljeCkn+ClguCkrOCksHzgpIXgpJXgpY3gpJ/gpYJcXC4/fOCkqOCkteCkruCljeCkrOCksHzgpKjgpLXgpILgpKzgpLB84KSo4KS1XFwuP3zgpKbgpL/gpLjgpK7gpY3gpKzgpLB84KSm4KS/4KS44KSC4KSs4KSwfOCkpuCkv+CkuFxcLj8pL2ksbW9udGhzU3RyaWN0UmVnZXg6L14o4KSc4KSo4KS14KSw4KWAP3zgpKvgpLzgpLDgpLXgpLDgpYB84KSr4KSw4KS14KSw4KWAP3zgpK7gpL7gpLDgpY3gpJo/fOCkheCkquCljeCksOCliOCksj984KSu4KSIP3zgpJzgpYLgpKg/fOCknOClgeCksuCkvuCkiD984KSF4KSX4KS44KWN4KSkP3zgpLjgpL/gpKTgpK7gpY3gpKzgpLB84KS44KS/4KSk4KSC4KSs4KSwfOCkuOCkv+CkpD9cXC4/fOCkheCkleCljeCkn+ClguCkrOCksHzgpIXgpJXgpY3gpJ/gpYJcXC4/fOCkqOCkteCkruCljeCkrOCksHzgpKjgpLXgpILgpKzgpLA/fOCkpuCkv+CkuOCkruCljeCkrOCksHzgpKbgpL/gpLjgpILgpKzgpLA/KS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14o4KSc4KSoXFwuP3zgpKvgpLzgpLBcXC4/fOCkruCkvuCksOCljeCkmj984KSF4KSq4KWN4KSw4KWIXFwuP3zgpK7gpIg/fOCknOClguCkqD984KSc4KWB4KSyXFwuP3zgpIXgpJdcXC4/fOCkuOCkv+CkpFxcLj984KSF4KSV4KWN4KSf4KWCXFwuP3zgpKjgpLVcXC4/fOCkpuCkv+CkuFxcLj8pL2ksY2FsZW5kYXI6e3NhbWVEYXk6XCJb4KSG4KScXSBMVFwiLG5leHREYXk6XCJb4KSV4KSyXSBMVFwiLG5leHRXZWVrOlwiZGRkZCwgTFRcIixsYXN0RGF5OlwiW+CkleCksl0gTFRcIixsYXN0V2VlazpcIlvgpKrgpL/gpJvgpLLgpYddIGRkZGQsIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXMg4KSu4KWH4KSCXCIscGFzdDpcIiVzIOCkquCkueCksuClh1wiLHM6XCLgpJXgpYHgpJsg4KS54KWAIOCkleCljeCkt+Cko1wiLHNzOlwiJWQg4KS44KWH4KSV4KSC4KShXCIsbTpcIuCkj+CklSDgpK7gpL/gpKjgpJ9cIixtbTpcIiVkIOCkruCkv+CkqOCkn1wiLGg6XCLgpI/gpJUg4KSY4KSC4KSf4KS+XCIsaGg6XCIlZCDgpJjgpILgpJ/gpYdcIixkOlwi4KSP4KSVIOCkpuCkv+CkqFwiLGRkOlwiJWQg4KSm4KS/4KSoXCIsTTpcIuCkj+CklSDgpK7gpLngpYDgpKjgpYdcIixNTTpcIiVkIOCkruCkueClgOCkqOClh1wiLHk6XCLgpI/gpJUg4KS14KSw4KWN4KS3XCIseXk6XCIlZCDgpLXgpLDgpY3gpLdcIn0scHJlcGFyc2U6ZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgpafgpajgpangpargpavgpazgpa3gpa7gpa/gpaZdL2csKGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gbnVtYmVyTWFwW21hdGNoXX0pKX0scG9zdGZvcm1hdDpmdW5jdGlvbihzdHJpbmcpe3JldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csKGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gc3ltYm9sTWFwW21hdGNoXX0pKX0sbWVyaWRpZW1QYXJzZTov4KSw4KS+4KSkfOCkuOClgeCkrOCkuXzgpKbgpYvgpKrgpLngpLB84KS24KS+4KSuLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oaG91cixtZXJpZGllbSl7cmV0dXJuIDEyPT09aG91ciYmKGhvdXI9MCksXCLgpLDgpL7gpKRcIj09PW1lcmlkaWVtP2hvdXI8ND9ob3VyOmhvdXIrMTI6XCLgpLjgpYHgpKzgpLlcIj09PW1lcmlkaWVtP2hvdXI6XCLgpKbgpYvgpKrgpLngpLBcIj09PW1lcmlkaWVtP2hvdXI+PTEwP2hvdXI6aG91cisxMjpcIuCktuCkvuCkrlwiPT09bWVyaWRpZW0/aG91cisxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGhvdXIsbWludXRlLGlzTG93ZXIpe3JldHVybiBob3VyPDQ/XCLgpLDgpL7gpKRcIjpob3VyPDEwP1wi4KS44KWB4KSs4KS5XCI6aG91cjwxNz9cIuCkpuCli+CkquCkueCksFwiOmhvdXI8MjA/XCLgpLbgpL7gpK5cIjpcIuCksOCkvuCkpFwifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsd2l0aG91dFN1ZmZpeCxrZXkpe3ZhciByZXN1bHQ9bnVtYmVyK1wiIFwiO3N3aXRjaChrZXkpe2Nhc2VcInNzXCI6cmV0dXJuIHJlc3VsdCs9MT09PW51bWJlcj9cInNla3VuZGFcIjoyPT09bnVtYmVyfHwzPT09bnVtYmVyfHw0PT09bnVtYmVyP1wic2VrdW5kZVwiOlwic2VrdW5kaVwiO2Nhc2VcIm1cIjpyZXR1cm4gd2l0aG91dFN1ZmZpeD9cImplZG5hIG1pbnV0YVwiOlwiamVkbmUgbWludXRlXCI7Y2FzZVwibW1cIjpyZXR1cm4gcmVzdWx0Kz0xPT09bnVtYmVyP1wibWludXRhXCI6Mj09PW51bWJlcnx8Mz09PW51bWJlcnx8ND09PW51bWJlcj9cIm1pbnV0ZVwiOlwibWludXRhXCI7Y2FzZVwiaFwiOnJldHVybiB3aXRob3V0U3VmZml4P1wiamVkYW4gc2F0XCI6XCJqZWRub2cgc2F0YVwiO2Nhc2VcImhoXCI6cmV0dXJuIHJlc3VsdCs9MT09PW51bWJlcj9cInNhdFwiOjI9PT1udW1iZXJ8fDM9PT1udW1iZXJ8fDQ9PT1udW1iZXI/XCJzYXRhXCI6XCJzYXRpXCI7Y2FzZVwiZGRcIjpyZXR1cm4gcmVzdWx0Kz0xPT09bnVtYmVyP1wiZGFuXCI6XCJkYW5hXCI7Y2FzZVwiTU1cIjpyZXR1cm4gcmVzdWx0Kz0xPT09bnVtYmVyP1wibWplc2VjXCI6Mj09PW51bWJlcnx8Mz09PW51bWJlcnx8ND09PW51bWJlcj9cIm1qZXNlY2FcIjpcIm1qZXNlY2lcIjtjYXNlXCJ5eVwiOnJldHVybiByZXN1bHQrPTE9PT1udW1iZXI/XCJnb2RpbmFcIjoyPT09bnVtYmVyfHwzPT09bnVtYmVyfHw0PT09bnVtYmVyP1wiZ29kaW5lXCI6XCJnb2RpbmFcIn19bW9tZW50LmRlZmluZUxvY2FsZShcImhyXCIse21vbnRoczp7Zm9ybWF0Olwic2lqZcSNbmphX3ZlbGphxI1lX2/FvnVqa2FfdHJhdm5qYV9zdmlibmphX2xpcG5qYV9zcnBuamFfa29sb3ZvemFfcnVqbmFfbGlzdG9wYWRhX3N0dWRlbm9nYV9wcm9zaW5jYVwiLnNwbGl0KFwiX1wiKSxzdGFuZGFsb25lOlwic2lqZcSNYW5qX3ZlbGphxI1hX2/FvnVqYWtfdHJhdmFual9zdmliYW5qX2xpcGFual9zcnBhbmpfa29sb3Zvel9ydWphbl9saXN0b3BhZF9zdHVkZW5pX3Byb3NpbmFjXCIuc3BsaXQoXCJfXCIpfSxtb250aHNTaG9ydDpcInNpai5fdmVsai5fb8W+dS5fdHJhLl9zdmkuX2xpcC5fc3JwLl9rb2wuX3J1ai5fbGlzLl9zdHUuX3Byby5cIi5zcGxpdChcIl9cIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpcIm5lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGFcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIm5lZC5fcG9uLl91dG8uX3NyaS5fxI1ldC5fcGV0Ll9zdWIuXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwibmVfcG9fdXRfc3JfxI1lX3BlX3N1XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJIOm1tXCIsTFRTOlwiSDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJEbyBNTU1NIFlZWVlcIixMTEw6XCJEbyBNTU1NIFlZWVkgSDptbVwiLExMTEw6XCJkZGRkLCBEbyBNTU1NIFlZWVkgSDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIltkYW5hcyB1XSBMVFwiLG5leHREYXk6XCJbc3V0cmEgdV0gTFRcIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuXCJbdV0gW25lZGplbGp1XSBbdV0gTFRcIjtjYXNlIDM6cmV0dXJuXCJbdV0gW3NyaWplZHVdIFt1XSBMVFwiO2Nhc2UgNjpyZXR1cm5cIlt1XSBbc3Vib3R1XSBbdV0gTFRcIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuXCJbdV0gZGRkZCBbdV0gTFRcIn19LGxhc3REYXk6XCJbanXEjWVyIHVdIExUXCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVyblwiW3Byb8WhbHVdIFtuZWRqZWxqdV0gW3VdIExUXCI7Y2FzZSAzOnJldHVyblwiW3Byb8WhbHVdIFtzcmlqZWR1XSBbdV0gTFRcIjtjYXNlIDY6cmV0dXJuXCJbcHJvxaFsZV0gW3N1Ym90ZV0gW3VdIExUXCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVyblwiW3Byb8WhbGldIGRkZGQgW3VdIExUXCJ9fSxzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJ6YSAlc1wiLHBhc3Q6XCJwcmlqZSAlc1wiLHM6XCJwYXIgc2VrdW5kaVwiLHNzOnRyYW5zbGF0ZSxtOnRyYW5zbGF0ZSxtbTp0cmFuc2xhdGUsaDp0cmFuc2xhdGUsaGg6dHJhbnNsYXRlLGQ6XCJkYW5cIixkZDp0cmFuc2xhdGUsTTpcIm1qZXNlY1wiLE1NOnRyYW5zbGF0ZSx5OlwiZ29kaW51XCIseXk6dHJhbnNsYXRlfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfVxcLi8sb3JkaW5hbDpcIiVkLlwiLHdlZWs6e2RvdzoxLGRveTo3fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHdlZWtFbmRpbmdzPVwidmFzw6FybmFwIGjDqXRmxZFuIGtlZGRlbiBzemVyZMOhbiBjc8O8dMO2cnTDtmvDtm4gcMOpbnRla2VuIHN6b21iYXRvblwiLnNwbGl0KFwiIFwiKTtmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLHdpdGhvdXRTdWZmaXgsa2V5LGlzRnV0dXJlKXt2YXIgbnVtPW51bWJlcjtzd2l0Y2goa2V5KXtjYXNlXCJzXCI6cmV0dXJuIGlzRnV0dXJlfHx3aXRob3V0U3VmZml4P1wibsOpaMOhbnkgbcOhc29kcGVyY1wiOlwibsOpaMOhbnkgbcOhc29kcGVyY2VcIjtjYXNlXCJzc1wiOnJldHVybiBudW0rKGlzRnV0dXJlfHx3aXRob3V0U3VmZml4KT9cIiBtw6Fzb2RwZXJjXCI6XCIgbcOhc29kcGVyY2VcIjtjYXNlXCJtXCI6cmV0dXJuXCJlZ3lcIisoaXNGdXR1cmV8fHdpdGhvdXRTdWZmaXg/XCIgcGVyY1wiOlwiIHBlcmNlXCIpO2Nhc2VcIm1tXCI6cmV0dXJuIG51bSsoaXNGdXR1cmV8fHdpdGhvdXRTdWZmaXg/XCIgcGVyY1wiOlwiIHBlcmNlXCIpO2Nhc2VcImhcIjpyZXR1cm5cImVneVwiKyhpc0Z1dHVyZXx8d2l0aG91dFN1ZmZpeD9cIiDDs3JhXCI6XCIgw7Nyw6FqYVwiKTtjYXNlXCJoaFwiOnJldHVybiBudW0rKGlzRnV0dXJlfHx3aXRob3V0U3VmZml4P1wiIMOzcmFcIjpcIiDDs3LDoWphXCIpO2Nhc2VcImRcIjpyZXR1cm5cImVneVwiKyhpc0Z1dHVyZXx8d2l0aG91dFN1ZmZpeD9cIiBuYXBcIjpcIiBuYXBqYVwiKTtjYXNlXCJkZFwiOnJldHVybiBudW0rKGlzRnV0dXJlfHx3aXRob3V0U3VmZml4P1wiIG5hcFwiOlwiIG5hcGphXCIpO2Nhc2VcIk1cIjpyZXR1cm5cImVneVwiKyhpc0Z1dHVyZXx8d2l0aG91dFN1ZmZpeD9cIiBow7NuYXBcIjpcIiBow7NuYXBqYVwiKTtjYXNlXCJNTVwiOnJldHVybiBudW0rKGlzRnV0dXJlfHx3aXRob3V0U3VmZml4P1wiIGjDs25hcFwiOlwiIGjDs25hcGphXCIpO2Nhc2VcInlcIjpyZXR1cm5cImVneVwiKyhpc0Z1dHVyZXx8d2l0aG91dFN1ZmZpeD9cIiDDqXZcIjpcIiDDqXZlXCIpO2Nhc2VcInl5XCI6cmV0dXJuIG51bSsoaXNGdXR1cmV8fHdpdGhvdXRTdWZmaXg/XCIgw6l2XCI6XCIgw6l2ZVwiKX1yZXR1cm5cIlwifWZ1bmN0aW9uIHdlZWsoaXNGdXR1cmUpe3JldHVybihpc0Z1dHVyZT9cIlwiOlwiW23Dumx0XSBcIikrXCJbXCIrd2Vla0VuZGluZ3NbdGhpcy5kYXkoKV0rXCJdIExUWy1rb3JdXCJ9bW9tZW50LmRlZmluZUxvY2FsZShcImh1XCIse21vbnRoczpcImphbnXDoXJfZmVicnXDoXJfbcOhcmNpdXNfw6FwcmlsaXNfbcOhanVzX2rDum5pdXNfasO6bGl1c19hdWd1c3p0dXNfc3plcHRlbWJlcl9va3TDs2Jlcl9ub3ZlbWJlcl9kZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImphbi5fZmViLl9tw6FyYy5fw6Fwci5fbcOhai5fasO6bi5fasO6bC5fYXVnLl9zemVwdC5fb2t0Ll9ub3YuX2RlYy5cIi5zcGxpdChcIl9cIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpcInZhc8Ohcm5hcF9ow6l0ZsWRX2tlZGRfc3plcmRhX2Nzw7x0w7ZydMO2a19ww6ludGVrX3N6b21iYXRcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcInZhc19ow6l0X2tlZGRfc3plX2Nzw7x0X3DDqW5fc3pvXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwidl9oX2tfc3plX2NzX3Bfc3pvXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkg6bW1cIixMVFM6XCJIOm1tOnNzXCIsTDpcIllZWVkuTU0uREQuXCIsTEw6XCJZWVlZLiBNTU1NIEQuXCIsTExMOlwiWVlZWS4gTU1NTSBELiBIOm1tXCIsTExMTDpcIllZWVkuIE1NTU0gRC4sIGRkZGQgSDptbVwifSxtZXJpZGllbVBhcnNlOi9kZXxkdS9pLGlzUE06ZnVuY3Rpb24oaW5wdXQpe3JldHVyblwidVwiPT09aW5wdXQuY2hhckF0KDEpLnRvTG93ZXJDYXNlKCl9LG1lcmlkaWVtOmZ1bmN0aW9uKGhvdXJzLG1pbnV0ZXMsaXNMb3dlcil7cmV0dXJuIGhvdXJzPDEyPyEwPT09aXNMb3dlcj9cImRlXCI6XCJERVwiOiEwPT09aXNMb3dlcj9cImR1XCI6XCJEVVwifSxjYWxlbmRhcjp7c2FtZURheTpcIlttYV0gTFRbLWtvcl1cIixuZXh0RGF5OlwiW2hvbG5hcF0gTFRbLWtvcl1cIixuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiB3ZWVrLmNhbGwodGhpcywhMCl9LGxhc3REYXk6XCJbdGVnbmFwXSBMVFsta29yXVwiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIHdlZWsuY2FsbCh0aGlzLCExKX0sc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXMgbcO6bHZhXCIscGFzdDpcIiVzXCIsczp0cmFuc2xhdGUsc3M6dHJhbnNsYXRlLG06dHJhbnNsYXRlLG1tOnRyYW5zbGF0ZSxoOnRyYW5zbGF0ZSxoaDp0cmFuc2xhdGUsZDp0cmFuc2xhdGUsZGQ6dHJhbnNsYXRlLE06dHJhbnNsYXRlLE1NOnRyYW5zbGF0ZSx5OnRyYW5zbGF0ZSx5eTp0cmFuc2xhdGV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9XFwuLyxvcmRpbmFsOlwiJWQuXCIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwiaHktYW1cIix7bW9udGhzOntmb3JtYXQ6XCLVsNW41oLVttW+1aHWgNWrX9aD1aXVv9aA1b7VodaA1atf1bTVodaA1b/Vq1/VodW61oDVq9Ws1atf1bTVodW11avVvdWrX9Ww1bjWgtW21avVvdWrX9Ww1bjWgtWs1avVvdWrX9aF1aPVuNW91b/VuNW91atf1b3VpdW61b/VpdW01aLVpdaA1atf1bDVuNWv1b/VpdW01aLVpdaA1atf1bbVuNW11aXVtNWi1aXWgNWrX9Wk1aXVr9W/1aXVtNWi1aXWgNWrXCIuc3BsaXQoXCJfXCIpLHN0YW5kYWxvbmU6XCLVsNW41oLVttW+1aHWgF/Wg9Wl1b/WgNW+1aHWgF/VtNWh1oDVv1/VodW61oDVq9WsX9W01aHVtdWr1b1f1bDVuNaC1bbVq9W9X9Ww1bjWgtWs1avVvV/WhdWj1bjVvdW/1bjVvV/VvdWl1brVv9Wl1bTVotWl1oBf1bDVuNWv1b/VpdW01aLVpdaAX9W21bjVtdWl1bTVotWl1oBf1aTVpdWv1b/VpdW01aLVpdaAXCIuc3BsaXQoXCJfXCIpfSxtb250aHNTaG9ydDpcItWw1bbVvl/Wg9W/1oBf1bTWgNW/X9Wh1brWgF/VtNW11b1f1bDVttW9X9Ww1azVvV/WhdWj1b1f1b3VutW/X9Ww1a/Vv1/VttW01aJf1aTVr9W/XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwi1a/Vq9aA1aHVr9WrX9Wl1oDVr9W41oLVt9Wh1aLVqdWrX9Wl1oDVpdaE1bfVodWi1anVq1/VudW41oDVpdaE1bfVodWi1anVq1/VsNWr1bbVo9W31aHVotWp1atf1bjWgtaA1aLVodWpX9W31aHVotWh1alcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcItWv1oDVr1/VpdaA1a9f1aXWgNaEX9W51oDWhF/VsNW21aNf1bjWgtaA1aJf1bfVotWpXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi1a/WgNWvX9Wl1oDVr1/VpdaA1oRf1bnWgNaEX9Ww1bbVo1/VuNaC1oDVol/Vt9Wi1alcIi5zcGxpdChcIl9cIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWSDVqS5cIixMTEw6XCJEIE1NTU0gWVlZWSDVqS4sIEhIOm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZINWpLiwgSEg6bW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJb1aHVtdW91oXWgF0gTFRcIixuZXh0RGF5OlwiW9W+1aHVstWoXSBMVFwiLGxhc3REYXk6XCJb1aXWgNWl1a9dIExUXCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm5cImRkZGQgW9aF1oDVqCDVqtWh1bTVqF0gTFRcIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm5cIlvVodW21oHVodWuXSBkZGRkIFvWhdaA1agg1arVodW01ahdIExUXCJ9LHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVzINWw1aXVv9W4XCIscGFzdDpcIiVzINWh1bzVodW7XCIsczpcItW01asg1oTVodW21asg1b7VodW11oDVr9W11aHVtlwiLHNzOlwiJWQg1b7VodW11oDVr9W11aHVtlwiLG06XCLWgNW41brVpVwiLG1tOlwiJWQg1oDVuNW61aVcIixoOlwi1arVodW0XCIsaGg6XCIlZCDVqtWh1bRcIixkOlwi1oXWgFwiLGRkOlwiJWQg1oXWgFwiLE06XCLVodW01avVvVwiLE1NOlwiJWQg1aHVtNWr1b1cIix5Olwi1b/VodaA1atcIix5eTpcIiVkINW/1aHWgNWrXCJ9LG1lcmlkaWVtUGFyc2U6L9Wj1avVt9Wl1oDVvtWhfNWh1bzVodW+1bjVv9W+1aF81oHVpdaA1aXVr9W+1aF81aXWgNWl1a/VuNW11aHVti8saXNQTTpmdW5jdGlvbihpbnB1dCl7cmV0dXJuL14o1oHVpdaA1aXVr9W+1aF81aXWgNWl1a/VuNW11aHVtikkLy50ZXN0KGlucHV0KX0sbWVyaWRpZW06ZnVuY3Rpb24oaG91cil7cmV0dXJuIGhvdXI8ND9cItWj1avVt9Wl1oDVvtWhXCI6aG91cjwxMj9cItWh1bzVodW+1bjVv9W+1aFcIjpob3VyPDE3P1wi1oHVpdaA1aXVr9W+1aFcIjpcItWl1oDVpdWv1bjVtdWh1bZcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn18XFxkezEsMn0tKNWr1bZ81oDVpCkvLG9yZGluYWw6ZnVuY3Rpb24obnVtYmVyLHBlcmlvZCl7c3dpdGNoKHBlcmlvZCl7Y2FzZVwiREREXCI6Y2FzZVwid1wiOmNhc2VcIldcIjpjYXNlXCJERERvXCI6cmV0dXJuIDE9PT1udW1iZXI/bnVtYmVyK1wiLdWr1bZcIjpudW1iZXIrXCIt1oDVpFwiO2RlZmF1bHQ6cmV0dXJuIG51bWJlcn19LHdlZWs6e2RvdzoxLGRveTo3fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7bW9tZW50LmRlZmluZUxvY2FsZShcImlkXCIse21vbnRoczpcIkphbnVhcmlfRmVicnVhcmlfTWFyZXRfQXByaWxfTWVpX0p1bmlfSnVsaV9BZ3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rlc2VtYmVyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuX0ZlYl9NYXJfQXByX01laV9KdW5fSnVsX0FndF9TZXBfT2t0X05vdl9EZXNcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCJNaW5nZ3VfU2VuaW5fU2VsYXNhX1JhYnVfS2FtaXNfSnVtYXRfU2FidHVcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIk1pbl9TZW5fU2VsX1JhYl9LYW1fSnVtX1NhYlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIk1nX1NuX1NsX1JiX0ttX0ptX1NiXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhILm1tXCIsTFRTOlwiSEgubW0uc3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW1cIn0sbWVyaWRpZW1QYXJzZTovcGFnaXxzaWFuZ3xzb3JlfG1hbGFtLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oaG91cixtZXJpZGllbSl7cmV0dXJuIDEyPT09aG91ciYmKGhvdXI9MCksXCJwYWdpXCI9PT1tZXJpZGllbT9ob3VyOlwic2lhbmdcIj09PW1lcmlkaWVtP2hvdXI+PTExP2hvdXI6aG91cisxMjpcInNvcmVcIj09PW1lcmlkaWVtfHxcIm1hbGFtXCI9PT1tZXJpZGllbT9ob3VyKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oaG91cnMsbWludXRlcyxpc0xvd2VyKXtyZXR1cm4gaG91cnM8MTE/XCJwYWdpXCI6aG91cnM8MTU/XCJzaWFuZ1wiOmhvdXJzPDE5P1wic29yZVwiOlwibWFsYW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJbSGFyaSBpbmkgcHVrdWxdIExUXCIsbmV4dERheTpcIltCZXNvayBwdWt1bF0gTFRcIixuZXh0V2VlazpcImRkZGQgW3B1a3VsXSBMVFwiLGxhc3REYXk6XCJbS2VtYXJpbiBwdWt1bF0gTFRcIixsYXN0V2VlazpcImRkZGQgW2xhbHUgcHVrdWxdIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiZGFsYW0gJXNcIixwYXN0OlwiJXMgeWFuZyBsYWx1XCIsczpcImJlYmVyYXBhIGRldGlrXCIsc3M6XCIlZCBkZXRpa1wiLG06XCJzZW1lbml0XCIsbW06XCIlZCBtZW5pdFwiLGg6XCJzZWphbVwiLGhoOlwiJWQgamFtXCIsZDpcInNlaGFyaVwiLGRkOlwiJWQgaGFyaVwiLE06XCJzZWJ1bGFuXCIsTU06XCIlZCBidWxhblwiLHk6XCJzZXRhaHVuXCIseXk6XCIlZCB0YWh1blwifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHBsdXJhbChuKXtyZXR1cm4gbiUxMDA9PTExfHxuJTEwIT0xfWZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsd2l0aG91dFN1ZmZpeCxrZXksaXNGdXR1cmUpe3ZhciByZXN1bHQ9bnVtYmVyK1wiIFwiO3N3aXRjaChrZXkpe2Nhc2VcInNcIjpyZXR1cm4gd2l0aG91dFN1ZmZpeHx8aXNGdXR1cmU/XCJub2trcmFyIHNla8O6bmR1clwiOlwibm9ra3J1bSBzZWvDum5kdW1cIjtjYXNlXCJzc1wiOnJldHVybiBwbHVyYWwobnVtYmVyKT9yZXN1bHQrKHdpdGhvdXRTdWZmaXh8fGlzRnV0dXJlP1wic2Vrw7puZHVyXCI6XCJzZWvDum5kdW1cIik6cmVzdWx0K1wic2Vrw7puZGFcIjtjYXNlXCJtXCI6cmV0dXJuIHdpdGhvdXRTdWZmaXg/XCJtw61uw7p0YVwiOlwibcOtbsO6dHVcIjtjYXNlXCJtbVwiOnJldHVybiBwbHVyYWwobnVtYmVyKT9yZXN1bHQrKHdpdGhvdXRTdWZmaXh8fGlzRnV0dXJlP1wibcOtbsO6dHVyXCI6XCJtw61uw7p0dW1cIik6d2l0aG91dFN1ZmZpeD9yZXN1bHQrXCJtw61uw7p0YVwiOnJlc3VsdCtcIm3DrW7DunR1XCI7Y2FzZVwiaGhcIjpyZXR1cm4gcGx1cmFsKG51bWJlcik/cmVzdWx0Kyh3aXRob3V0U3VmZml4fHxpc0Z1dHVyZT9cImtsdWtrdXN0dW5kaXJcIjpcImtsdWtrdXN0dW5kdW1cIik6cmVzdWx0K1wia2x1a2t1c3R1bmRcIjtjYXNlXCJkXCI6cmV0dXJuIHdpdGhvdXRTdWZmaXg/XCJkYWd1clwiOmlzRnV0dXJlP1wiZGFnXCI6XCJkZWdpXCI7Y2FzZVwiZGRcIjpyZXR1cm4gcGx1cmFsKG51bWJlcik/d2l0aG91dFN1ZmZpeD9yZXN1bHQrXCJkYWdhclwiOnJlc3VsdCsoaXNGdXR1cmU/XCJkYWdhXCI6XCJkw7ZndW1cIik6d2l0aG91dFN1ZmZpeD9yZXN1bHQrXCJkYWd1clwiOnJlc3VsdCsoaXNGdXR1cmU/XCJkYWdcIjpcImRlZ2lcIik7Y2FzZVwiTVwiOnJldHVybiB3aXRob3V0U3VmZml4P1wibcOhbnXDsHVyXCI6aXNGdXR1cmU/XCJtw6FudcOwXCI6XCJtw6FudcOwaVwiO2Nhc2VcIk1NXCI6cmV0dXJuIHBsdXJhbChudW1iZXIpP3dpdGhvdXRTdWZmaXg/cmVzdWx0K1wibcOhbnXDsGlyXCI6cmVzdWx0Kyhpc0Z1dHVyZT9cIm3DoW51w7BpXCI6XCJtw6FudcOwdW1cIik6d2l0aG91dFN1ZmZpeD9yZXN1bHQrXCJtw6FudcOwdXJcIjpyZXN1bHQrKGlzRnV0dXJlP1wibcOhbnXDsFwiOlwibcOhbnXDsGlcIik7Y2FzZVwieVwiOnJldHVybiB3aXRob3V0U3VmZml4fHxpc0Z1dHVyZT9cIsOhclwiOlwiw6FyaVwiO2Nhc2VcInl5XCI6cmV0dXJuIHBsdXJhbChudW1iZXIpP3Jlc3VsdCsod2l0aG91dFN1ZmZpeHx8aXNGdXR1cmU/XCLDoXJcIjpcIsOhcnVtXCIpOnJlc3VsdCsod2l0aG91dFN1ZmZpeHx8aXNGdXR1cmU/XCLDoXJcIjpcIsOhcmlcIil9fW1vbWVudC5kZWZpbmVMb2NhbGUoXCJpc1wiLHttb250aHM6XCJqYW7DumFyX2ZlYnLDumFyX21hcnNfYXByw61sX21hw61fasO6bsOtX2rDumzDrV/DoWfDunN0X3NlcHRlbWJlcl9va3TDs2Jlcl9uw7N2ZW1iZXJfZGVzZW1iZXJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJqYW5fZmViX21hcl9hcHJfbWHDrV9qw7puX2rDumxfw6Fnw7pfc2VwX29rdF9uw7N2X2Rlc1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcInN1bm51ZGFndXJfbcOhbnVkYWd1cl/DvnJpw7BqdWRhZ3VyX21pw7B2aWt1ZGFndXJfZmltbXR1ZGFndXJfZsO2c3R1ZGFndXJfbGF1Z2FyZGFndXJcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcInN1bl9tw6FuX8O+cmlfbWnDsF9maW1fZsO2c19sYXVcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJTdV9Nw6Ffw55yX01pX0ZpX0bDtl9MYVwiLnNwbGl0KFwiX1wiKSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJIOm1tXCIsTFRTOlwiSDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJELiBNTU1NIFlZWVlcIixMTEw6XCJELiBNTU1NIFlZWVkgW2tsLl0gSDptbVwiLExMTEw6XCJkZGRkLCBELiBNTU1NIFlZWVkgW2tsLl0gSDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIlvDrSBkYWcga2wuXSBMVFwiLG5leHREYXk6XCJbw6EgbW9yZ3VuIGtsLl0gTFRcIixuZXh0V2VlazpcImRkZGQgW2tsLl0gTFRcIixsYXN0RGF5OlwiW8OtIGfDpnIga2wuXSBMVFwiLGxhc3RXZWVrOlwiW3PDrcOwYXN0YV0gZGRkZCBba2wuXSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImVmdGlyICVzXCIscGFzdDpcImZ5cmlyICVzIHPDrcOwYW5cIixzOnRyYW5zbGF0ZSxzczp0cmFuc2xhdGUsbTp0cmFuc2xhdGUsbW06dHJhbnNsYXRlLGg6XCJrbHVra3VzdHVuZFwiLGhoOnRyYW5zbGF0ZSxkOnRyYW5zbGF0ZSxkZDp0cmFuc2xhdGUsTTp0cmFuc2xhdGUsTU06dHJhbnNsYXRlLHk6dHJhbnNsYXRlLHl5OnRyYW5zbGF0ZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn1cXC4vLG9yZGluYWw6XCIlZC5cIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO21vbWVudC5kZWZpbmVMb2NhbGUoXCJpdFwiLHttb250aHM6XCJnZW5uYWlvX2ZlYmJyYWlvX21hcnpvX2FwcmlsZV9tYWdnaW9fZ2l1Z25vX2x1Z2xpb19hZ29zdG9fc2V0dGVtYnJlX290dG9icmVfbm92ZW1icmVfZGljZW1icmVcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJnZW5fZmViX21hcl9hcHJfbWFnX2dpdV9sdWdfYWdvX3NldF9vdHRfbm92X2RpY1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcImRvbWVuaWNhX2x1bmVkw6xfbWFydGVkw6xfbWVyY29sZWTDrF9naW92ZWTDrF92ZW5lcmTDrF9zYWJhdG9cIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcImRvbV9sdW5fbWFyX21lcl9naW9fdmVuX3NhYlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcImRvX2x1X21hX21lX2dpX3ZlX3NhXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuXCJbT2dnaSBhXCIrKHRoaXMuaG91cnMoKT4xP1wibGxlIFwiOjA9PT10aGlzLmhvdXJzKCk/XCIgXCI6XCJsbCdcIikrXCJdTFRcIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVyblwiW0RvbWFuaSBhXCIrKHRoaXMuaG91cnMoKT4xP1wibGxlIFwiOjA9PT10aGlzLmhvdXJzKCk/XCIgXCI6XCJsbCdcIikrXCJdTFRcIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm5cImRkZGQgW2FcIisodGhpcy5ob3VycygpPjE/XCJsbGUgXCI6MD09PXRoaXMuaG91cnMoKT9cIiBcIjpcImxsJ1wiKStcIl1MVFwifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuXCJbSWVyaSBhXCIrKHRoaXMuaG91cnMoKT4xP1wibGxlIFwiOjA9PT10aGlzLmhvdXJzKCk/XCIgXCI6XCJsbCdcIikrXCJdTFRcIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVyblwiW0xhIHNjb3JzYV0gZGRkZCBbYVwiKyh0aGlzLmhvdXJzKCk+MT9cImxsZSBcIjowPT09dGhpcy5ob3VycygpP1wiIFwiOlwibGwnXCIpK1wiXUxUXCI7ZGVmYXVsdDpyZXR1cm5cIltMbyBzY29yc29dIGRkZGQgW2FcIisodGhpcy5ob3VycygpPjE/XCJsbGUgXCI6MD09PXRoaXMuaG91cnMoKT9cIiBcIjpcImxsJ1wiKStcIl1MVFwifX0sc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwidHJhICVzXCIscGFzdDpcIiVzIGZhXCIsczpcImFsY3VuaSBzZWNvbmRpXCIsc3M6XCIlZCBzZWNvbmRpXCIsbTpcInVuIG1pbnV0b1wiLG1tOlwiJWQgbWludXRpXCIsaDpcInVuJ29yYVwiLGhoOlwiJWQgb3JlXCIsZDpcInVuIGdpb3Jub1wiLGRkOlwiJWQgZ2lvcm5pXCIsdzpcInVuYSBzZXR0aW1hbmFcIix3dzpcIiVkIHNldHRpbWFuZVwiLE06XCJ1biBtZXNlXCIsTU06XCIlZCBtZXNpXCIseTpcInVuIGFubm9cIix5eTpcIiVkIGFubmlcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn3Cui8sb3JkaW5hbDpcIiVkwrpcIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO21vbWVudC5kZWZpbmVMb2NhbGUoXCJpdC1jaFwiLHttb250aHM6XCJnZW5uYWlvX2ZlYmJyYWlvX21hcnpvX2FwcmlsZV9tYWdnaW9fZ2l1Z25vX2x1Z2xpb19hZ29zdG9fc2V0dGVtYnJlX290dG9icmVfbm92ZW1icmVfZGljZW1icmVcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJnZW5fZmViX21hcl9hcHJfbWFnX2dpdV9sdWdfYWdvX3NldF9vdHRfbm92X2RpY1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcImRvbWVuaWNhX2x1bmVkw6xfbWFydGVkw6xfbWVyY29sZWTDrF9naW92ZWTDrF92ZW5lcmTDrF9zYWJhdG9cIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcImRvbV9sdW5fbWFyX21lcl9naW9fdmVuX3NhYlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcImRvX2x1X21hX21lX2dpX3ZlX3NhXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQuTU0uWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW09nZ2kgYWxsZV0gTFRcIixuZXh0RGF5OlwiW0RvbWFuaSBhbGxlXSBMVFwiLG5leHRXZWVrOlwiZGRkZCBbYWxsZV0gTFRcIixsYXN0RGF5OlwiW0llcmkgYWxsZV0gTFRcIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuXCJbbGEgc2NvcnNhXSBkZGRkIFthbGxlXSBMVFwiO2RlZmF1bHQ6cmV0dXJuXCJbbG8gc2NvcnNvXSBkZGRkIFthbGxlXSBMVFwifX0sc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uKHMpe3JldHVybigvXlswLTldLiskLy50ZXN0KHMpP1widHJhXCI6XCJpblwiKStcIiBcIitzfSxwYXN0OlwiJXMgZmFcIixzOlwiYWxjdW5pIHNlY29uZGlcIixzczpcIiVkIHNlY29uZGlcIixtOlwidW4gbWludXRvXCIsbW06XCIlZCBtaW51dGlcIixoOlwidW4nb3JhXCIsaGg6XCIlZCBvcmVcIixkOlwidW4gZ2lvcm5vXCIsZGQ6XCIlZCBnaW9ybmlcIixNOlwidW4gbWVzZVwiLE1NOlwiJWQgbWVzaVwiLHk6XCJ1biBhbm5vXCIseXk6XCIlZCBhbm5pXCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9wrovLG9yZGluYWw6XCIlZMK6XCIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwiamFcIix7ZXJhczpbe3NpbmNlOlwiMjAxOS0wNS0wMVwiLG9mZnNldDoxLG5hbWU6XCLku6TlkoxcIixuYXJyb3c6XCLji79cIixhYmJyOlwiUlwifSx7c2luY2U6XCIxOTg5LTAxLTA4XCIsdW50aWw6XCIyMDE5LTA0LTMwXCIsb2Zmc2V0OjEsbmFtZTpcIuW5s+aIkFwiLG5hcnJvdzpcIuONu1wiLGFiYnI6XCJIXCJ9LHtzaW5jZTpcIjE5MjYtMTItMjVcIix1bnRpbDpcIjE5ODktMDEtMDdcIixvZmZzZXQ6MSxuYW1lOlwi5pit5ZKMXCIsbmFycm93Olwi4428XCIsYWJicjpcIlNcIn0se3NpbmNlOlwiMTkxMi0wNy0zMFwiLHVudGlsOlwiMTkyNi0xMi0yNFwiLG9mZnNldDoxLG5hbWU6XCLlpKfmraNcIixuYXJyb3c6XCLjjb1cIixhYmJyOlwiVFwifSx7c2luY2U6XCIxODczLTAxLTAxXCIsdW50aWw6XCIxOTEyLTA3LTI5XCIsb2Zmc2V0OjYsbmFtZTpcIuaYjuayu1wiLG5hcnJvdzpcIuONvlwiLGFiYnI6XCJNXCJ9LHtzaW5jZTpcIjAwMDEtMDEtMDFcIix1bnRpbDpcIjE4NzMtMTItMzFcIixvZmZzZXQ6MSxuYW1lOlwi6KW/5pqmXCIsbmFycm93OlwiQURcIixhYmJyOlwiQURcIn0se3NpbmNlOlwiMDAwMC0xMi0zMVwiLHVudGlsOi0xLzAsb2Zmc2V0OjEsbmFtZTpcIue0gOWFg+WJjVwiLG5hcnJvdzpcIkJDXCIsYWJicjpcIkJDXCJ9XSxlcmFZZWFyT3JkaW5hbFJlZ2V4Oi8o5YWDfFxcZCsp5bm0LyxlcmFZZWFyT3JkaW5hbFBhcnNlOmZ1bmN0aW9uKGlucHV0LG1hdGNoKXtyZXR1cm5cIuWFg1wiPT09bWF0Y2hbMV0/MTpwYXJzZUludChtYXRjaFsxXXx8aW5wdXQsMTApfSxtb250aHM6XCIx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciFwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIjHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwi5pel5puc5pelX+aciOabnOaXpV/ngavmm5zml6Vf5rC05puc5pelX+acqOabnOaXpV/ph5Hmm5zml6Vf5Zyf5puc5pelXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLml6Vf5pyIX+eBq1/msLRf5pyoX+mHkV/lnJ9cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLml6Vf5pyIX+eBq1/msLRf5pyoX+mHkV/lnJ9cIi5zcGxpdChcIl9cIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJZWVlZL01NL0REXCIsTEw6XCJZWVlZ5bm0TeaciETml6VcIixMTEw6XCJZWVlZ5bm0TeaciETml6UgSEg6bW1cIixMTExMOlwiWVlZWeW5tE3mnIhE5pelIGRkZGQgSEg6bW1cIixsOlwiWVlZWS9NTS9ERFwiLGxsOlwiWVlZWeW5tE3mnIhE5pelXCIsbGxsOlwiWVlZWeW5tE3mnIhE5pelIEhIOm1tXCIsbGxsbDpcIllZWVnlubRN5pyIROaXpShkZGQpIEhIOm1tXCJ9LG1lcmlkaWVtUGFyc2U6L+WNiOWJjXzljYjlvowvaSxpc1BNOmZ1bmN0aW9uKGlucHV0KXtyZXR1cm5cIuWNiOW+jFwiPT09aW5wdXR9LG1lcmlkaWVtOmZ1bmN0aW9uKGhvdXIsbWludXRlLGlzTG93ZXIpe3JldHVybiBob3VyPDEyP1wi5Y2I5YmNXCI6XCLljYjlvoxcIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJb5LuK5pelXSBMVFwiLG5leHREYXk6XCJb5piO5pelXSBMVFwiLG5leHRXZWVrOmZ1bmN0aW9uKG5vdyl7cmV0dXJuIG5vdy53ZWVrKCkhPT10aGlzLndlZWsoKT9cIlvmnaXpgLFdZGRkZCBMVFwiOlwiZGRkZCBMVFwifSxsYXN0RGF5OlwiW+aYqOaXpV0gTFRcIixsYXN0V2VlazpmdW5jdGlvbihub3cpe3JldHVybiB0aGlzLndlZWsoKSE9PW5vdy53ZWVrKCk/XCJb5YWI6YCxXWRkZGQgTFRcIjpcImRkZGQgTFRcIn0sc2FtZUVsc2U6XCJMXCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ95pelLyxvcmRpbmFsOmZ1bmN0aW9uKG51bWJlcixwZXJpb2Qpe3N3aXRjaChwZXJpb2Qpe2Nhc2VcInlcIjpyZXR1cm4gMT09PW51bWJlcj9cIuWFg+W5tFwiOm51bWJlcitcIuW5tFwiO2Nhc2VcImRcIjpjYXNlXCJEXCI6Y2FzZVwiREREXCI6cmV0dXJuIG51bWJlcitcIuaXpVwiO2RlZmF1bHQ6cmV0dXJuIG51bWJlcn19LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXPlvoxcIixwYXN0OlwiJXPliY1cIixzOlwi5pWw56eSXCIsc3M6XCIlZOenklwiLG06XCIx5YiGXCIsbW06XCIlZOWIhlwiLGg6XCIx5pmC6ZaTXCIsaGg6XCIlZOaZgumWk1wiLGQ6XCIx5pelXCIsZGQ6XCIlZOaXpVwiLE06XCIx44O25pyIXCIsTU06XCIlZOODtuaciFwiLHk6XCIx5bm0XCIseXk6XCIlZOW5tFwifX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7bW9tZW50LmRlZmluZUxvY2FsZShcImp2XCIse21vbnRoczpcIkphbnVhcmlfRmVicnVhcmlfTWFyZXRfQXByaWxfTWVpX0p1bmlfSnVsaV9BZ3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vcGVtYmVyX0Rlc2VtYmVyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuX0ZlYl9NYXJfQXByX01laV9KdW5fSnVsX0Fnc19TZXBfT2t0X05vcF9EZXNcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCJNaW5nZ3VfU2VuZW5fU2Vsb3NvX1JlYnVfS2VtaXNfSmVtdXdhaF9TZXB0dVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiTWluX1Nlbl9TZWxfUmViX0tlbV9KZW1fU2VwXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiTWdfU25fU2xfUmJfS21fSm1fU3BcIi5zcGxpdChcIl9cIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEgubW1cIixMVFM6XCJISC5tbS5zc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbVwifSxtZXJpZGllbVBhcnNlOi9lbmppbmd8c2l5YW5nfHNvbnRlbnxuZGFsdS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGhvdXIsbWVyaWRpZW0pe3JldHVybiAxMj09PWhvdXImJihob3VyPTApLFwiZW5qaW5nXCI9PT1tZXJpZGllbT9ob3VyOlwic2l5YW5nXCI9PT1tZXJpZGllbT9ob3VyPj0xMT9ob3VyOmhvdXIrMTI6XCJzb250ZW5cIj09PW1lcmlkaWVtfHxcIm5kYWx1XCI9PT1tZXJpZGllbT9ob3VyKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oaG91cnMsbWludXRlcyxpc0xvd2VyKXtyZXR1cm4gaG91cnM8MTE/XCJlbmppbmdcIjpob3VyczwxNT9cInNpeWFuZ1wiOmhvdXJzPDE5P1wic29udGVuXCI6XCJuZGFsdVwifSxjYWxlbmRhcjp7c2FtZURheTpcIltEaW50ZW4gcHVuaWtvIHB1a3VsXSBMVFwiLG5leHREYXk6XCJbTWJlbmphbmcgcHVrdWxdIExUXCIsbmV4dFdlZWs6XCJkZGRkIFtwdWt1bF0gTFRcIixsYXN0RGF5OlwiW0thbGEgd2luZ2kgcHVrdWxdIExUXCIsbGFzdFdlZWs6XCJkZGRkIFtrZXBlbmdrZXIgcHVrdWxdIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwid29udGVuIGluZyAlc1wiLHBhc3Q6XCIlcyBpbmdrYW5nIGtlcGVuZ2tlclwiLHM6XCJzYXdldGF3aXMgZGV0aWtcIixzczpcIiVkIGRldGlrXCIsbTpcInNldHVuZ2dhbCBtZW5pdFwiLG1tOlwiJWQgbWVuaXRcIixoOlwic2V0dW5nZ2FsIGphbVwiLGhoOlwiJWQgamFtXCIsZDpcInNlZGludGVuXCIsZGQ6XCIlZCBkaW50ZW5cIixNOlwic2V3dWxhblwiLE1NOlwiJWQgd3VsYW5cIix5Olwic2V0YXVuXCIseXk6XCIlZCB0YXVuXCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7bW9tZW50LmRlZmluZUxvY2FsZShcImthXCIse21vbnRoczpcIuGDmOGDkOGDnOGDleGDkOGDoOGDmF/hg5fhg5Thg5Hhg5Thg6Dhg5Xhg5Dhg5rhg5hf4YOb4YOQ4YOg4YOi4YOYX+GDkOGDnuGDoOGDmOGDmuGDmF/hg5vhg5Dhg5jhg6Hhg5hf4YOY4YOV4YOc4YOY4YOh4YOYX+GDmOGDleGDmuGDmOGDoeGDmF/hg5Dhg5Lhg5Xhg5jhg6Hhg6Lhg51f4YOh4YOU4YOl4YOi4YOU4YOb4YOR4YOU4YOg4YOYX+GDneGDpeGDouGDneGDm+GDkeGDlOGDoOGDmF/hg5zhg53hg5Thg5vhg5Hhg5Thg6Dhg5hf4YOT4YOU4YOZ4YOU4YOb4YOR4YOU4YOg4YOYXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0Olwi4YOY4YOQ4YOcX+GDl+GDlOGDkV/hg5vhg5Dhg6Bf4YOQ4YOe4YOgX+GDm+GDkOGDmF/hg5jhg5Xhg5xf4YOY4YOV4YOaX+GDkOGDkuGDlV/hg6Hhg5Thg6Vf4YOd4YOl4YOiX+GDnOGDneGDlF/hg5Phg5Thg5lcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6e3N0YW5kYWxvbmU6XCLhg5nhg5Xhg5jhg6Dhg5Bf4YOd4YOg4YOo4YOQ4YOR4YOQ4YOX4YOYX+GDoeGDkOGDm+GDqOGDkOGDkeGDkOGDl+GDmF/hg53hg5fhg67hg6jhg5Dhg5Hhg5Dhg5fhg5hf4YOu4YOj4YOX4YOo4YOQ4YOR4YOQ4YOX4YOYX+GDnuGDkOGDoOGDkOGDoeGDmeGDlOGDleGDmF/hg6jhg5Dhg5Hhg5Dhg5fhg5hcIi5zcGxpdChcIl9cIiksZm9ybWF0Olwi4YOZ4YOV4YOY4YOg4YOQ4YOhX+GDneGDoOGDqOGDkOGDkeGDkOGDl+GDoV/hg6Hhg5Dhg5vhg6jhg5Dhg5Hhg5Dhg5fhg6Ff4YOd4YOX4YOu4YOo4YOQ4YOR4YOQ4YOX4YOhX+GDruGDo+GDl+GDqOGDkOGDkeGDkOGDl+GDoV/hg57hg5Dhg6Dhg5Dhg6Hhg5nhg5Thg5Xhg6Ff4YOo4YOQ4YOR4YOQ4YOX4YOhXCIuc3BsaXQoXCJfXCIpLGlzRm9ybWF0Oi8o4YOs4YOY4YOc4YOQfOGDqOGDlOGDm+GDk+GDlOGDkikvfSx3ZWVrZGF5c1Nob3J0Olwi4YOZ4YOV4YOYX+GDneGDoOGDqF/hg6Hhg5Dhg5tf4YOd4YOX4YOuX+GDruGDo+GDl1/hg57hg5Dhg6Bf4YOo4YOQ4YORXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi4YOZ4YOVX+GDneGDoF/hg6Hhg5Bf4YOd4YOXX+GDruGDo1/hg57hg5Bf4YOo4YOQXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIlvhg5Phg6bhg5Thg6FdIExUWy3hg5bhg5RdXCIsbmV4dERheTpcIlvhg67hg5Xhg5Dhg5pdIExUWy3hg5bhg5RdXCIsbGFzdERheTpcIlvhg5Lhg6Phg6jhg5jhg5xdIExUWy3hg5bhg5RdXCIsbmV4dFdlZWs6XCJb4YOo4YOU4YOb4YOT4YOU4YOSXSBkZGRkIExUWy3hg5bhg5RdXCIsbGFzdFdlZWs6XCJb4YOs4YOY4YOc4YOQXSBkZGRkIExULeGDluGDlFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbihzKXtyZXR1cm4gcy5yZXBsYWNlKC8o4YOs4YOQ4YObfOGDrOGDo+GDl3zhg6Hhg5Dhg5Dhg5d84YOs4YOU4YOafOGDk+GDpnzhg5fhg5UpKOGDmHzhg5QpLywoZnVuY3Rpb24oJDAsJDEsJDIpe3JldHVyblwi4YOYXCI9PT0kMj8kMStcIuGDqOGDmFwiOiQxKyQyK1wi4YOo4YOYXCJ9KSl9LHBhc3Q6ZnVuY3Rpb24ocyl7cmV0dXJuLyjhg6zhg5Dhg5vhg5h84YOs4YOj4YOX4YOYfOGDoeGDkOGDkOGDl+GDmHzhg5Phg6bhg5R84YOX4YOV4YOUKS8udGVzdChzKT9zLnJlcGxhY2UoLyjhg5h84YOUKSQvLFwi4YOY4YOhIOGDrOGDmOGDnFwiKTov4YOs4YOU4YOa4YOYLy50ZXN0KHMpP3MucmVwbGFjZSgv4YOs4YOU4YOa4YOYJC8sXCLhg6zhg5rhg5jhg6Eg4YOs4YOY4YOcXCIpOnN9LHM6XCLhg6Dhg5Dhg5vhg5Phg5Thg5zhg5jhg5vhg5Qg4YOs4YOQ4YOb4YOYXCIsc3M6XCIlZCDhg6zhg5Dhg5vhg5hcIixtOlwi4YOs4YOj4YOX4YOYXCIsbW06XCIlZCDhg6zhg6Phg5fhg5hcIixoOlwi4YOh4YOQ4YOQ4YOX4YOYXCIsaGg6XCIlZCDhg6Hhg5Dhg5Dhg5fhg5hcIixkOlwi4YOT4YOm4YOUXCIsZGQ6XCIlZCDhg5Phg6bhg5RcIixNOlwi4YOX4YOV4YOUXCIsTU06XCIlZCDhg5fhg5Xhg5RcIix5Olwi4YOs4YOU4YOa4YOYXCIseXk6XCIlZCDhg6zhg5Thg5rhg5hcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovMHwxLeGDmuGDmHzhg5vhg5QtXFxkezEsMn18XFxkezEsMn0t4YOULyxvcmRpbmFsOmZ1bmN0aW9uKG51bWJlcil7cmV0dXJuIDA9PT1udW1iZXI/bnVtYmVyOjE9PT1udW1iZXI/bnVtYmVyK1wiLeGDmuGDmFwiOm51bWJlcjwyMHx8bnVtYmVyPD0xMDAmJm51bWJlciUyMD09MHx8bnVtYmVyJTEwMD09MD9cIuGDm+GDlC1cIitudW1iZXI6bnVtYmVyK1wiLeGDlFwifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO3ZhciBzdWZmaXhlcz17MDpcIi3RiNGWXCIsMTpcIi3RiNGWXCIsMjpcIi3RiNGWXCIsMzpcIi3RiNGWXCIsNDpcIi3RiNGWXCIsNTpcIi3RiNGWXCIsNjpcIi3RiNGLXCIsNzpcIi3RiNGWXCIsODpcIi3RiNGWXCIsOTpcIi3RiNGLXCIsMTA6XCIt0YjRi1wiLDIwOlwiLdGI0YtcIiwzMDpcIi3RiNGLXCIsNDA6XCIt0YjRi1wiLDUwOlwiLdGI0ZZcIiw2MDpcIi3RiNGLXCIsNzA6XCIt0YjRllwiLDgwOlwiLdGI0ZZcIiw5MDpcIi3RiNGLXCIsMTAwOlwiLdGI0ZZcIn07bW9tZW50LmRlZmluZUxvY2FsZShcImtrXCIse21vbnRoczpcItKb0LDSo9GC0LDRgF/QsNKb0L/QsNC9X9C90LDRg9GA0YvQt1/RgdOZ0YPRltGAX9C80LDQvNGL0YBf0LzQsNGD0YHRi9C8X9GI0ZbQu9C00LVf0YLQsNC80YvQt1/Sm9GL0YDQutKv0LnQtdC6X9Kb0LDQt9Cw0L1f0pvQsNGA0LDRiNCwX9C20LXQu9GC0L7Sm9GB0LDQvVwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcItKb0LDSo1/QsNKb0L9f0L3QsNGDX9GB05nRg1/QvNCw0Lxf0LzQsNGDX9GI0ZbQu1/RgtCw0Lxf0pvRi9GAX9Kb0LDQt1/Sm9Cw0YBf0LbQtdC7XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwi0LbQtdC60YHQtdC90LHRll/QtNKv0LnRgdC10L3QsdGWX9GB0LXQudGB0LXQvdCx0ZZf0YHTmdGA0YHQtdC90LHRll/QsdC10LnRgdC10L3QsdGWX9C20rHQvNCwX9GB0LXQvdCx0ZZcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcItC20LXQul/QtNKv0Llf0YHQtdC5X9GB05nRgF/QsdC10Llf0LbSsdC8X9GB0LXQvVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcItC20Lpf0LTQuV/RgdC5X9GB0YBf0LHQuV/QttC8X9GB0L1cIi5zcGxpdChcIl9cIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW9CR0q/Qs9GW0L0g0YHQsNKT0LDRgl0gTFRcIixuZXh0RGF5OlwiW9CV0YDRgtC10qMg0YHQsNKT0LDRgl0gTFRcIixuZXh0V2VlazpcImRkZGQgW9GB0LDSk9Cw0YJdIExUXCIsbGFzdERheTpcIlvQmtC10YjQtSDRgdCw0pPQsNGCXSBMVFwiLGxhc3RXZWVrOlwiW9Oo0YLQutC10L0g0LDQv9GC0LDQvdGL0qNdIGRkZGQgW9GB0LDSk9Cw0YJdIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXMg0ZbRiNGW0L3QtNC1XCIscGFzdDpcIiVzINCx0rHRgNGL0L1cIixzOlwi0LHRltGA0L3QtdGI0LUg0YHQtdC60YPQvdC0XCIsc3M6XCIlZCDRgdC10LrRg9C90LRcIixtOlwi0LHRltGAINC80LjQvdGD0YJcIixtbTpcIiVkINC80LjQvdGD0YJcIixoOlwi0LHRltGAINGB0LDSk9Cw0YJcIixoaDpcIiVkINGB0LDSk9Cw0YJcIixkOlwi0LHRltGAINC60q/QvVwiLGRkOlwiJWQg0LrSr9C9XCIsTTpcItCx0ZbRgCDQsNC5XCIsTU06XCIlZCDQsNC5XCIseTpcItCx0ZbRgCDQttGL0LtcIix5eTpcIiVkINC20YvQu1wifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfS0o0YjRlnzRiNGLKS8sb3JkaW5hbDpmdW5jdGlvbihudW1iZXIpe3JldHVybiBudW1iZXIrKHN1ZmZpeGVzW251bWJlcl18fHN1ZmZpeGVzW251bWJlciUxMF18fHN1ZmZpeGVzW251bWJlcj49MTAwPzEwMDpudWxsXSl9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHN5bWJvbE1hcD17MTpcIuGfoVwiLDI6XCLhn6JcIiwzOlwi4Z+jXCIsNDpcIuGfpFwiLDU6XCLhn6VcIiw2Olwi4Z+mXCIsNzpcIuGfp1wiLDg6XCLhn6hcIiw5Olwi4Z+pXCIsMDpcIuGfoFwifSxudW1iZXJNYXA9e1wi4Z+hXCI6XCIxXCIsXCLhn6JcIjpcIjJcIixcIuGfo1wiOlwiM1wiLFwi4Z+kXCI6XCI0XCIsXCLhn6VcIjpcIjVcIixcIuGfplwiOlwiNlwiLFwi4Z+nXCI6XCI3XCIsXCLhn6hcIjpcIjhcIixcIuGfqVwiOlwiOVwiLFwi4Z+gXCI6XCIwXCJ9O21vbWVudC5kZWZpbmVMb2NhbGUoXCJrbVwiLHttb250aHM6XCLhnpjhnoDhnprhnrZf4Z6A4Z674Z6Y4Z+S4Z6X4Z+IX+GemOGeuOGek+Getl/hnpjhn4Hhnp/hnrZf4Z6n4Z6f4Z6X4Z62X+GemOGet+GekOGeu+Gek+Getl/hnoDhnoDhn5LhnoDhnorhnrZf4Z6f4Z644Z6g4Z62X+GegOGeieGfkuGeieGetl/hno/hnrvhnpvhnrZf4Z6c4Z634Z6F4Z+S4Z6G4Z634Z6A4Z62X+GekuGfkuGek+GevFwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIuGemOGegOGemuGetl/hnoDhnrvhnpjhn5Lhnpfhn4hf4Z6Y4Z644Z6T4Z62X+GemOGfgeGen+Getl/hnqfhnp/hnpfhnrZf4Z6Y4Z634Z6Q4Z674Z6T4Z62X+GegOGegOGfkuGegOGeiuGetl/hnp/hnrjhnqDhnrZf4Z6A4Z6J4Z+S4Z6J4Z62X+Gej+Geu+Gem+Getl/hnpzhnrfhnoXhn5LhnobhnrfhnoDhnrZf4Z6S4Z+S4Z6T4Z68XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwi4Z6i4Z624Z6R4Z634Z6P4Z+S4Z6ZX+GeheGfkOGek+GfkuGekV/hnqLhnoThn5LhnoLhnrbhnppf4Z6W4Z674Z6SX+GeluGfkuGemuGeoOGen+GfkuGelOGej+Get+GfjV/hnp/hnrvhnoDhn5Lhnppf4Z6f4Z+F4Z6a4Z+NXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLhnqLhnrZf4Z6FX+Geol/hnpZf4Z6W4Z+S4Z6aX+Gen+Geu1/hnp9cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLhnqLhnrZf4Z6FX+Geol/hnpZf4Z6W4Z+S4Z6aX+Gen+Geu1/hnp9cIi5zcGxpdChcIl9cIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBISDptbVwifSxtZXJpZGllbVBhcnNlOi/hnpbhn5LhnprhnrnhnoB84Z6b4Z+S4Z6E4Z624Z6FLyxpc1BNOmZ1bmN0aW9uKGlucHV0KXtyZXR1cm5cIuGem+GfkuGehOGetuGehVwiPT09aW5wdXR9LG1lcmlkaWVtOmZ1bmN0aW9uKGhvdXIsbWludXRlLGlzTG93ZXIpe3JldHVybiBob3VyPDEyP1wi4Z6W4Z+S4Z6a4Z654Z6AXCI6XCLhnpvhn5LhnoThnrbhnoVcIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJb4Z6Q4Z+S4Z6E4Z+D4Z6T4Z+B4Z+HIOGemOGfieGfhOGehF0gTFRcIixuZXh0RGF5OlwiW+Gen+GfkuGeouGfguGegCDhnpjhn4nhn4ThnoRdIExUXCIsbmV4dFdlZWs6XCJkZGRkIFvhnpjhn4nhn4ThnoRdIExUXCIsbGFzdERheTpcIlvhnpjhn5Lhnp/hnrfhnpvhnpjhnrfhnokg4Z6Y4Z+J4Z+E4Z6EXSBMVFwiLGxhc3RXZWVrOlwiZGRkZCBb4Z6f4Z6U4Z+S4Z6P4Z624Z6g4Z+N4Z6Y4Z674Z6TXSBb4Z6Y4Z+J4Z+E4Z6EXSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVz4Z6R4Z+A4Z6PXCIscGFzdDpcIiVz4Z6Y4Z674Z6TXCIsczpcIuGelOGfieGeu+Gek+GfkuGemOGetuGek+GenOGet+Gek+GetuGekeGeuFwiLHNzOlwiJWQg4Z6c4Z634Z6T4Z624Z6R4Z64XCIsbTpcIuGemOGeveGemeGek+GetuGekeGeuFwiLG1tOlwiJWQg4Z6T4Z624Z6R4Z64XCIsaDpcIuGemOGeveGemeGemOGfieGfhOGehFwiLGhoOlwiJWQg4Z6Y4Z+J4Z+E4Z6EXCIsZDpcIuGemOGeveGemeGekOGfkuGehOGfg1wiLGRkOlwiJWQg4Z6Q4Z+S4Z6E4Z+DXCIsTTpcIuGemOGeveGemeGegeGfglwiLE1NOlwiJWQg4Z6B4Z+CXCIseTpcIuGemOGeveGemeGehuGfkuGek+GetuGfhlwiLHl5OlwiJWQg4Z6G4Z+S4Z6T4Z624Z+GXCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L+GekeGeuFxcZHsxLDJ9LyxvcmRpbmFsOlwi4Z6R4Z64JWRcIixwcmVwYXJzZTpmdW5jdGlvbihzdHJpbmcpe3JldHVybiBzdHJpbmcucmVwbGFjZSgvW+GfoeGfouGfo+GfpOGfpeGfpuGfp+GfqOGfqeGfoF0vZywoZnVuY3Rpb24obWF0Y2gpe3JldHVybiBudW1iZXJNYXBbbWF0Y2hdfSkpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywoZnVuY3Rpb24obWF0Y2gpe3JldHVybiBzeW1ib2xNYXBbbWF0Y2hdfSkpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO3ZhciBzeW1ib2xNYXA9ezE6XCLgs6dcIiwyOlwi4LOoXCIsMzpcIuCzqVwiLDQ6XCLgs6pcIiw1Olwi4LOrXCIsNjpcIuCzrFwiLDc6XCLgs61cIiw4Olwi4LOuXCIsOTpcIuCzr1wiLDA6XCLgs6ZcIn0sbnVtYmVyTWFwPXtcIuCzp1wiOlwiMVwiLFwi4LOoXCI6XCIyXCIsXCLgs6lcIjpcIjNcIixcIuCzqlwiOlwiNFwiLFwi4LOrXCI6XCI1XCIsXCLgs6xcIjpcIjZcIixcIuCzrVwiOlwiN1wiLFwi4LOuXCI6XCI4XCIsXCLgs69cIjpcIjlcIixcIuCzplwiOlwiMFwifTttb21lbnQuZGVmaW5lTG9jYWxlKFwia25cIix7bW9udGhzOlwi4LKc4LKo4LK14LKw4LK/X+Cyq+CzhuCyrOCzjeCysOCyteCysOCyv1/gsq7gsr7gsrDgs43gsprgs41f4LKP4LKq4LON4LKw4LK/4LKy4LONX+CyruCzhuCzlV/gspzgs4Lgsqjgs41f4LKc4LOB4LKy4LOG4LOWX+CyhuCyl+CyuOCzjeCyn+CzjV/gsrjgs4bgsqrgs43gsp/gs4bgsoLgsqzgsrDgs41f4LKF4LKV4LON4LKf4LOG4LOC4LOV4LKs4LKw4LONX+CyqOCyteCzhuCyguCyrOCysOCzjV/gsqHgsr/gsrjgs4bgsoLgsqzgsrDgs41cIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLgspzgsqhf4LKr4LOG4LKs4LON4LKwX+CyruCyvuCysOCzjeCymuCzjV/gso/gsqrgs43gsrDgsr/gsrLgs41f4LKu4LOG4LOVX+CynOCzguCyqOCzjV/gspzgs4HgsrLgs4bgs5Zf4LKG4LKX4LK44LON4LKf4LONX+CyuOCzhuCyquCzjeCyn+CzhuCygl/gsoXgspXgs43gsp/gs4bgs4Lgs5Vf4LKo4LK14LOG4LKCX+CyoeCyv+CyuOCzhuCyglwiLnNwbGl0KFwiX1wiKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOlwi4LKt4LK+4LKo4LOB4LK14LK+4LKwX+CyuOCzhuCzguCzleCyruCyteCyvuCysF/gsq7gsoLgspfgsrPgsrXgsr7gsrBf4LKs4LOB4LKn4LK14LK+4LKwX+Cyl+CzgeCysOCzgeCyteCyvuCysF/gsrbgs4HgspXgs43gsrDgsrXgsr7gsrBf4LK24LKo4LK/4LK14LK+4LKwXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLgsq3gsr7gsqjgs4Ff4LK44LOG4LOC4LOV4LKuX+CyruCyguCyl+Cys1/gsqzgs4Hgsqdf4LKX4LOB4LKw4LOBX+CytuCzgeCyleCzjeCysF/gsrbgsqjgsr9cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLgsq3gsr5f4LK44LOG4LOC4LOVX+CyruCygl/gsqzgs4Ff4LKX4LOBX+CytuCzgV/gsrZcIi5zcGxpdChcIl9cIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiQSBoOm1tXCIsTFRTOlwiQSBoOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVksIEEgaDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW+Cyh+CyguCypuCzgV0gTFRcIixuZXh0RGF5OlwiW+CyqOCyvuCys+Czhl0gTFRcIixuZXh0V2VlazpcImRkZGQsIExUXCIsbGFzdERheTpcIlvgsqjgsr/gsqjgs43gsqjgs4ZdIExUXCIsbGFzdFdlZWs6XCJb4LKV4LOG4LOC4LKo4LOG4LKvXSBkZGRkLCBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVzIOCyqOCyguCypOCysFwiLHBhc3Q6XCIlcyDgsrngsr/gsoLgsqbgs4ZcIixzOlwi4LKV4LOG4LKy4LK14LOBIOCyleCzjeCyt+Cyo+Cyl+Cys+CzgVwiLHNzOlwiJWQg4LK44LOG4LKV4LOG4LKC4LKh4LOB4LKX4LKz4LOBXCIsbTpcIuCykuCyguCypuCzgSDgsqjgsr/gsq7gsr/gsrdcIixtbTpcIiVkIOCyqOCyv+CyruCyv+Cyt1wiLGg6XCLgspLgsoLgsqbgs4Eg4LKX4LKC4LKf4LOGXCIsaGg6XCIlZCDgspfgsoLgsp/gs4ZcIixkOlwi4LKS4LKC4LKm4LOBIOCypuCyv+CyqFwiLGRkOlwiJWQg4LKm4LK/4LKoXCIsTTpcIuCykuCyguCypuCzgSDgsqTgsr/gsoLgspfgsrPgs4FcIixNTTpcIiVkIOCypOCyv+CyguCyl+Cys+CzgVwiLHk6XCLgspLgsoLgsqbgs4Eg4LK14LKw4LON4LK3XCIseXk6XCIlZCDgsrXgsrDgs43gsrdcIn0scHJlcGFyc2U6ZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgs6fgs6jgs6ngs6rgs6vgs6zgs63gs67gs6/gs6ZdL2csKGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gbnVtYmVyTWFwW21hdGNoXX0pKX0scG9zdGZvcm1hdDpmdW5jdGlvbihzdHJpbmcpe3JldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csKGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gc3ltYm9sTWFwW21hdGNoXX0pKX0sbWVyaWRpZW1QYXJzZTov4LKw4LK+4LKk4LON4LKw4LK/fOCyrOCzhuCys+Cyv+Cyl+CzjeCyl+Czhnzgsq7gsqfgs43gsq/gsr7gsrngs43gsqh84LK44LKC4LKc4LOGLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oaG91cixtZXJpZGllbSl7cmV0dXJuIDEyPT09aG91ciYmKGhvdXI9MCksXCLgsrDgsr7gsqTgs43gsrDgsr9cIj09PW1lcmlkaWVtP2hvdXI8ND9ob3VyOmhvdXIrMTI6XCLgsqzgs4bgsrPgsr/gspfgs43gspfgs4ZcIj09PW1lcmlkaWVtP2hvdXI6XCLgsq7gsqfgs43gsq/gsr7gsrngs43gsqhcIj09PW1lcmlkaWVtP2hvdXI+PTEwP2hvdXI6aG91cisxMjpcIuCyuOCyguCynOCzhlwiPT09bWVyaWRpZW0/aG91cisxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGhvdXIsbWludXRlLGlzTG93ZXIpe3JldHVybiBob3VyPDQ/XCLgsrDgsr7gsqTgs43gsrDgsr9cIjpob3VyPDEwP1wi4LKs4LOG4LKz4LK/4LKX4LON4LKX4LOGXCI6aG91cjwxNz9cIuCyruCyp+CzjeCyr+CyvuCyueCzjeCyqFwiOmhvdXI8MjA/XCLgsrjgsoLgspzgs4ZcIjpcIuCysOCyvuCypOCzjeCysOCyv1wifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfSjgsqjgs4bgs5UpLyxvcmRpbmFsOmZ1bmN0aW9uKG51bWJlcil7cmV0dXJuIG51bWJlcitcIuCyqOCzhuCzlVwifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO21vbWVudC5kZWZpbmVMb2NhbGUoXCJrb1wiLHttb250aHM6XCIx7JuUXzLsm5RfM+yblF807JuUXzXsm5RfNuyblF837JuUXzjsm5RfOeyblF8xMOyblF8xMeyblF8xMuyblFwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIjHsm5RfMuyblF8z7JuUXzTsm5RfNeyblF827JuUXzfsm5RfOOyblF857JuUXzEw7JuUXzEx7JuUXzEy7JuUXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwi7J287JqU7J28X+yblOyalOydvF/tmZTsmpTsnbxf7IiY7JqU7J28X+uqqeyalOydvF/quIjsmpTsnbxf7Yag7JqU7J28XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLsnbxf7JuUX+2ZlF/siJhf66qpX+q4iF/thqBcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLsnbxf7JuUX+2ZlF/siJhf66qpX+q4iF/thqBcIi5zcGxpdChcIl9cIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiQSBoOm1tXCIsTFRTOlwiQSBoOm1tOnNzXCIsTDpcIllZWVkuTU0uREQuXCIsTEw6XCJZWVlZ64WEIE1NTU0gROydvFwiLExMTDpcIllZWVnrhYQgTU1NTSBE7J28IEEgaDptbVwiLExMTEw6XCJZWVlZ64WEIE1NTU0gROydvCBkZGRkIEEgaDptbVwiLGw6XCJZWVlZLk1NLkRELlwiLGxsOlwiWVlZWeuFhCBNTU1NIETsnbxcIixsbGw6XCJZWVlZ64WEIE1NTU0gROydvCBBIGg6bW1cIixsbGxsOlwiWVlZWeuFhCBNTU1NIETsnbwgZGRkZCBBIGg6bW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCLsmKTripggTFRcIixuZXh0RGF5Olwi64K07J28IExUXCIsbmV4dFdlZWs6XCJkZGRkIExUXCIsbGFzdERheTpcIuyWtOygnCBMVFwiLGxhc3RXZWVrOlwi7KeA64Kc7KO8IGRkZGQgTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlcyDtm4RcIixwYXN0OlwiJXMg7KCEXCIsczpcIuuqhyDstIhcIixzczpcIiVk7LSIXCIsbTpcIjHrtoRcIixtbTpcIiVk67aEXCIsaDpcIu2VnCDsi5zqsIRcIixoaDpcIiVk7Iuc6rCEXCIsZDpcIu2VmOujqFwiLGRkOlwiJWTsnbxcIixNOlwi7ZWcIOuLrFwiLE1NOlwiJWTri6xcIix5Olwi7J28IOuFhFwiLHl5OlwiJWTrhYRcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn0o7J28fOyblHzso7wpLyxvcmRpbmFsOmZ1bmN0aW9uKG51bWJlcixwZXJpb2Qpe3N3aXRjaChwZXJpb2Qpe2Nhc2VcImRcIjpjYXNlXCJEXCI6Y2FzZVwiREREXCI6cmV0dXJuIG51bWJlcitcIuydvFwiO2Nhc2VcIk1cIjpyZXR1cm4gbnVtYmVyK1wi7JuUXCI7Y2FzZVwid1wiOmNhc2VcIldcIjpyZXR1cm4gbnVtYmVyK1wi7KO8XCI7ZGVmYXVsdDpyZXR1cm4gbnVtYmVyfX0sbWVyaWRpZW1QYXJzZTov7Jik7KCEfOyYpO2bhC8saXNQTTpmdW5jdGlvbih0b2tlbil7cmV0dXJuXCLsmKTtm4RcIj09PXRva2VufSxtZXJpZGllbTpmdW5jdGlvbihob3VyLG1pbnV0ZSxpc1VwcGVyKXtyZXR1cm4gaG91cjwxMj9cIuyYpOyghFwiOlwi7Jik7ZuEXCJ9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjt2YXIgc3ltYm9sTWFwPXsxOlwi2aFcIiwyOlwi2aJcIiwzOlwi2aNcIiw0Olwi2aRcIiw1Olwi2aVcIiw2Olwi2aZcIiw3Olwi2adcIiw4Olwi2ahcIiw5Olwi2alcIiwwOlwi2aBcIn0sbnVtYmVyTWFwPXtcItmhXCI6XCIxXCIsXCLZolwiOlwiMlwiLFwi2aNcIjpcIjNcIixcItmkXCI6XCI0XCIsXCLZpVwiOlwiNVwiLFwi2aZcIjpcIjZcIixcItmnXCI6XCI3XCIsXCLZqFwiOlwiOFwiLFwi2alcIjpcIjlcIixcItmgXCI6XCIwXCJ9LG1vbnRocz1bXCLaqdin2YbZiNmG24wg2K/ZiNmI25XZhVwiLFwi2LTZiNio2KfYqlwiLFwi2KbYp9iy2KfYsVwiLFwi2YbbjNiz2KfZhlwiLFwi2KbYp9uM2KfYsVwiLFwi2K3ZiNiy25XbjNix2KfZhlwiLFwi2KrbldmF2YXZiNiyXCIsXCLYptin2KhcIixcItim25XbjNmE2YjZiNmEXCIsXCLYqti02LHbjNmG24wg24zbldmD25XZhVwiLFwi2KrYtNix24zZhtuMINiv2YjZiNuV2YVcIixcItmD2KfZhtmI2YbbjCDbjNuV2qnbldmFXCJdO21vbWVudC5kZWZpbmVMb2NhbGUoXCJrdVwiLHttb250aHM6bW9udGhzLG1vbnRoc1Nob3J0Om1vbnRocyx3ZWVrZGF5czpcItuM2YfigIzZg9i02YfigIzZhdmF2YfigIxf2K/ZiNmI2LTZh+KAjNmF2YXZh+KAjF/Ys9uO2LTZh+KAjNmF2YXZh+KAjF/ahtmI2KfYsdi02YfigIzZhdmF2YfigIxf2b7bjtmG2KzYtNmH4oCM2YXZhdmH4oCMX9mH2YfigIzbjNmG24xf2LTZh+KAjNmF2YXZh+KAjFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi24zZh+KAjNmD2LTZh+KAjNmFX9iv2YjZiNi02YfigIzZhV/Ys9uO2LTZh+KAjNmFX9qG2YjYp9ix2LTZh+KAjNmFX9m+247Zhtis2LTZh+KAjNmFX9mH2YfigIzbjNmG24xf2LTZh+KAjNmF2YXZh+KAjFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcItuMX9ivX9izX9qGX9m+X9mHX9i0XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW1cIn0sbWVyaWRpZW1QYXJzZTov2KbbjtmI2KfYsdmH4oCMfNio2YfigIzbjNin2YbbjC8saXNQTTpmdW5jdGlvbihpbnB1dCl7cmV0dXJuL9im247ZiNin2LHZh+KAjC8udGVzdChpbnB1dCl9LG1lcmlkaWVtOmZ1bmN0aW9uKGhvdXIsbWludXRlLGlzTG93ZXIpe3JldHVybiBob3VyPDEyP1wi2KjZh+KAjNuM2KfZhtuMXCI6XCLYptuO2YjYp9ix2YfigIxcIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJb2KbZh+KAjNmF2LHbhiDZg9in2KramNmF247YsV0gTFRcIixuZXh0RGF5OlwiW9io2YfigIzbjNin2YbbjCDZg9in2KramNmF247YsV0gTFRcIixuZXh0V2VlazpcImRkZGQgW9mD2KfYqtqY2YXbjtixXSBMVFwiLGxhc3REYXk6XCJb2K/ZiNuO2YbbjiDZg9in2KramNmF247YsV0gTFRcIixsYXN0V2VlazpcImRkZGQgW9mD2KfYqtqY2YXbjtixXSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcItmE2YfigIwgJXNcIixwYXN0OlwiJXNcIixzOlwi2obZh+KAjNmG2K8g2obYsdmD2YfigIzbjNmH4oCM2YNcIixzczpcItqG2LHZg9mH4oCMICVkXCIsbTpcItuM2YfigIzZgyDYrtmI2YTZh+KAjNmDXCIsbW06XCIlZCDYrtmI2YTZh+KAjNmDXCIsaDpcItuM2YfigIzZgyDZg9in2KramNmF247YsVwiLGhoOlwiJWQg2YPYp9iq2pjZhduO2LFcIixkOlwi24zZh+KAjNmDINqV24bamFwiLGRkOlwiJWQg2pXbhtqYXCIsTTpcItuM2YfigIzZgyDZhdin2Ybar1wiLE1NOlwiJWQg2YXYp9mG2q9cIix5Olwi24zZh+KAjNmDINiz2KfatVwiLHl5OlwiJWQg2LPYp9q1XCJ9LHByZXBhcnNlOmZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b2aHZotmj2aTZpdmm2afZqNmp2aBdL2csKGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gbnVtYmVyTWFwW21hdGNoXX0pKS5yZXBsYWNlKC/YjC9nLFwiLFwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihzdHJpbmcpe3JldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csKGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gc3ltYm9sTWFwW21hdGNoXX0pKS5yZXBsYWNlKC8sL2csXCLYjFwiKX0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHN1ZmZpeGVzPXswOlwiLdGH0q9cIiwxOlwiLdGH0LhcIiwyOlwiLdGH0LhcIiwzOlwiLdGH0q9cIiw0OlwiLdGH0q9cIiw1OlwiLdGH0LhcIiw2OlwiLdGH0YtcIiw3OlwiLdGH0LhcIiw4OlwiLdGH0LhcIiw5OlwiLdGH0YNcIiwxMDpcIi3Rh9GDXCIsMjA6XCIt0YfRi1wiLDMwOlwiLdGH0YNcIiw0MDpcIi3Rh9GLXCIsNTA6XCIt0YfSr1wiLDYwOlwiLdGH0YtcIiw3MDpcIi3Rh9C4XCIsODA6XCIt0YfQuFwiLDkwOlwiLdGH0YNcIiwxMDA6XCIt0YfSr1wifTttb21lbnQuZGVmaW5lTG9jYWxlKFwia3lcIix7bW9udGhzOlwi0Y/QvdCy0LDRgNGMX9GE0LXQstGA0LDQu9GMX9C80LDRgNGCX9Cw0L/RgNC10LvRjF/QvNCw0Llf0LjRjtC90Yxf0LjRjtC70Yxf0LDQstCz0YPRgdGCX9GB0LXQvdGC0Y/QsdGA0Yxf0L7QutGC0Y/QsdGA0Yxf0L3QvtGP0LHRgNGMX9C00LXQutCw0LHRgNGMXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0Olwi0Y/QvdCyX9GE0LXQsl/QvNCw0YDRgl/QsNC/0YBf0LzQsNC5X9C40Y7QvdGMX9C40Y7Qu9GMX9Cw0LLQs1/RgdC10L1f0L7QutGCX9C90L7Rj1/QtNC10LpcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCLQltC10LrRiNC10LzQsdC4X9CU0q/QudGI06nQvNCx0q9f0KjQtdC50YjQtdC80LHQuF/QqNCw0YDRiNC10LzQsdC4X9CR0LXQudGI0LXQvNCx0Lhf0JbRg9C80LBf0JjRiNC10LzQsdC4XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLQltC10Lpf0JTSr9C5X9Co0LXQuV/QqNCw0YBf0JHQtdC5X9CW0YPQvF/QmNGI0LVcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLQltC6X9CU0Llf0KjQuV/QqNGAX9CR0Llf0JbQvF/QmNGIXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQuTU0uWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIlvQkdKv0LPSr9C9INGB0LDQsNGCXSBMVFwiLG5leHREYXk6XCJb0K3RgNGC0LXSoyDRgdCw0LDRgl0gTFRcIixuZXh0V2VlazpcImRkZGQgW9GB0LDQsNGCXSBMVFwiLGxhc3REYXk6XCJb0JrQtdGH0Y3RjSDRgdCw0LDRgl0gTFRcIixsYXN0V2VlazpcIlvTqNGC0LrTqdC9INCw0L/RgtCw0L3Ri9C9XSBkZGRkIFvQutKv0L3Sr10gW9GB0LDQsNGCXSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVzINC40YfQuNC90LTQtVwiLHBhc3Q6XCIlcyDQvNGD0YDRg9C9XCIsczpcItCx0LjRgNC90LXRh9C1INGB0LXQutGD0L3QtFwiLHNzOlwiJWQg0YHQtdC60YPQvdC0XCIsbTpcItCx0LjRgCDQvNKv0L3TqdGCXCIsbW06XCIlZCDQvNKv0L3TqdGCXCIsaDpcItCx0LjRgCDRgdCw0LDRglwiLGhoOlwiJWQg0YHQsNCw0YJcIixkOlwi0LHQuNGAINC60q/QvVwiLGRkOlwiJWQg0LrSr9C9XCIsTTpcItCx0LjRgCDQsNC5XCIsTU06XCIlZCDQsNC5XCIseTpcItCx0LjRgCDQttGL0LtcIix5eTpcIiVkINC20YvQu1wifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfS0o0YfQuHzRh9GLfNGH0q980YfRgykvLG9yZGluYWw6ZnVuY3Rpb24obnVtYmVyKXtyZXR1cm4gbnVtYmVyKyhzdWZmaXhlc1tudW1iZXJdfHxzdWZmaXhlc1tudW1iZXIlMTBdfHxzdWZmaXhlc1tudW1iZXI+PTEwMD8xMDA6bnVsbF0pfSx3ZWVrOntkb3c6MSxkb3k6N319KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLHdpdGhvdXRTdWZmaXgsa2V5LGlzRnV0dXJlKXt2YXIgZm9ybWF0PXttOltcImVuZyBNaW51dHRcIixcImVuZ2VyIE1pbnV0dFwiXSxoOltcImVuZyBTdG9ublwiLFwiZW5nZXIgU3Rvbm5cIl0sZDpbXCJlZW4gRGFnXCIsXCJlbmdlbSBEYWdcIl0sTTpbXCJlZSBNb3VudFwiLFwiZW5nZW0gTW91bnRcIl0seTpbXCJlZSBKb2VyXCIsXCJlbmdlbSBKb2VyXCJdfTtyZXR1cm4gd2l0aG91dFN1ZmZpeD9mb3JtYXRba2V5XVswXTpmb3JtYXRba2V5XVsxXX1mdW5jdGlvbiBlaWZlbGVyUmVnZWxBcHBsaWVzVG9OdW1iZXIobnVtYmVyKXtpZihudW1iZXI9cGFyc2VJbnQobnVtYmVyLDEwKSxpc05hTihudW1iZXIpKXJldHVybiExO2lmKG51bWJlcjwwKXJldHVybiEwO2lmKG51bWJlcjwxMClyZXR1cm4gNDw9bnVtYmVyJiZudW1iZXI8PTc7aWYobnVtYmVyPDEwMCl7dmFyIGxhc3REaWdpdD1udW1iZXIlMTA7cmV0dXJuIGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcigwPT09bGFzdERpZ2l0P251bWJlci8xMDpsYXN0RGlnaXQpfWlmKG51bWJlcjwxZTQpe2Zvcig7bnVtYmVyPj0xMDspbnVtYmVyLz0xMDtyZXR1cm4gZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyKG51bWJlcil9cmV0dXJuIGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcihudW1iZXIvPTFlMyl9bW9tZW50LmRlZmluZUxvY2FsZShcImxiXCIse21vbnRoczpcIkphbnVhcl9GZWJydWFyX03DpGVyel9BYnLDq2xsX01lZV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuLl9GZWJyLl9NcnouX0Fici5fTWVlX0p1bi5fSnVsLl9BdWcuX1NlcHQuX09rdC5fTm92Ll9EZXouXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6XCJTb25uZGVnX03DqWluZGVnX0TDq25zY2hkZWdfTcOrdHR3b2NoX0Rvbm5lc2NoZGVnX0ZyZWlkZWdfU2Ftc2NoZGVnXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJTby5fTcOpLl9Ew6suX03Dqy5fRG8uX0ZyLl9TYS5cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJTb19Nw6lfRMOrX03Dq19Eb19Gcl9TYVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSDptbSBbQXVlcl1cIixMVFM6XCJIOm1tOnNzIFtBdWVyXVwiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJELiBNTU1NIFlZWVlcIixMTEw6XCJELiBNTU1NIFlZWVkgSDptbSBbQXVlcl1cIixMTExMOlwiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0gW0F1ZXJdXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW0hhdXQgdW1dIExUXCIsc2FtZUVsc2U6XCJMXCIsbmV4dERheTpcIltNdWVyIHVtXSBMVFwiLG5leHRXZWVrOlwiZGRkZCBbdW1dIExUXCIsbGFzdERheTpcIltHw6tzY2h0ZXIgdW1dIExUXCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAyOmNhc2UgNDpyZXR1cm5cIltMZXNjaHRlbl0gZGRkZCBbdW1dIExUXCI7ZGVmYXVsdDpyZXR1cm5cIltMZXNjaHRlXSBkZGRkIFt1bV0gTFRcIn19fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbihzdHJpbmcpe3JldHVybiBlaWZlbGVyUmVnZWxBcHBsaWVzVG9OdW1iZXIoc3RyaW5nLnN1YnN0cigwLHN0cmluZy5pbmRleE9mKFwiIFwiKSkpP1wiYSBcIitzdHJpbmc6XCJhbiBcIitzdHJpbmd9LHBhc3Q6ZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyKHN0cmluZy5zdWJzdHIoMCxzdHJpbmcuaW5kZXhPZihcIiBcIikpKT9cInZpcnUgXCIrc3RyaW5nOlwidmlydW4gXCIrc3RyaW5nfSxzOlwiZSBwdWVyIFNla29ubmVuXCIsc3M6XCIlZCBTZWtvbm5lblwiLG06cHJvY2Vzc1JlbGF0aXZlVGltZSxtbTpcIiVkIE1pbnV0dGVuXCIsaDpwcm9jZXNzUmVsYXRpdmVUaW1lLGhoOlwiJWQgU3Rvbm5lblwiLGQ6cHJvY2Vzc1JlbGF0aXZlVGltZSxkZDpcIiVkIERlZWdcIixNOnByb2Nlc3NSZWxhdGl2ZVRpbWUsTU06XCIlZCBNw6lpbnRcIix5OnByb2Nlc3NSZWxhdGl2ZVRpbWUseXk6XCIlZCBKb2VyXCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9XFwuLyxvcmRpbmFsOlwiJWQuXCIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwibG9cIix7bW9udGhzOlwi4Lqh4Lqx4LqH4LqB4Lqt4LqZX+C6geC6uOC6oeC6nuC6sl/guqHgurXgupngurJf4LuA4Lqh4Lqq4LqyX+C6nuC6tuC6lOC6quC6sOC6nuC6sl/guqHgurTgupbgurjgupngurJf4LqB4LuN4Lql4Lqw4LqB4Lq74LqUX+C6quC6tOC6h+C6q+C6sl/guoHgurHgupnguo3gurJf4LqV4Lq44Lql4LqyX+C6nuC6sOC6iOC6tOC6gV/gupfgurHgupnguqfgurJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLguqHgurHguofguoHguq3guplf4LqB4Lq44Lqh4Lqe4LqyX+C6oeC6teC6meC6sl/gu4DguqHguqrgurJf4Lqe4Lq24LqU4Lqq4Lqw4Lqe4LqyX+C6oeC6tOC6luC6uOC6meC6sl/guoHgu43guqXgurDguoHgurvgupRf4Lqq4Lq04LqH4Lqr4LqyX+C6geC6seC6meC6jeC6sl/gupXgurjguqXgurJf4Lqe4Lqw4LqI4Lq04LqBX+C6l+C6seC6meC6p+C6slwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcIuC6reC6suC6l+C6tOC6lF/guojgurHguplf4Lqt4Lqx4LqH4LqE4Lqy4LqZX+C6nuC6uOC6lF/gup7gurDguqvgurHgupRf4Lqq4Lq44LqBX+C7gOC6quC6u+C6slwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi4LqX4Lq04LqUX+C6iOC6seC6mV/guq3gurHguofguoTgurLguplf4Lqe4Lq44LqUX+C6nuC6sOC6q+C6seC6lF/guqrgurjguoFf4LuA4Lqq4Lq74LqyXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi4LqXX+C6iF/guq3guoRf4LqeX+C6nuC6q1/guqrguoFf4LqqXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwi4Lqn4Lqx4LqZZGRkZCBEIE1NTU0gWVlZWSBISDptbVwifSxtZXJpZGllbVBhcnNlOi/gupXguq3gupngu4Dguorgurvgu4ngurJ84LqV4Lqt4LqZ4LuB4Lql4LqHLyxpc1BNOmZ1bmN0aW9uKGlucHV0KXtyZXR1cm5cIuC6leC6reC6meC7geC6peC6h1wiPT09aW5wdXR9LG1lcmlkaWVtOmZ1bmN0aW9uKGhvdXIsbWludXRlLGlzTG93ZXIpe3JldHVybiBob3VyPDEyP1wi4LqV4Lqt4LqZ4LuA4LqK4Lq74LuJ4LqyXCI6XCLgupXguq3gupngu4HguqXguodcIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJb4Lqh4Lq34LuJ4LqZ4Lq14LuJ4LuA4Lqn4Lql4LqyXSBMVFwiLG5leHREYXk6XCJb4Lqh4Lq34LuJ4Lqt4Lq34LuI4LqZ4LuA4Lqn4Lql4LqyXSBMVFwiLG5leHRXZWVrOlwiW+C6p+C6seC6mV1kZGRkW+C7nOC7ieC6suC7gOC6p+C6peC6sl0gTFRcIixsYXN0RGF5OlwiW+C6oeC6t+C7ieC6p+C6suC6meC6meC6teC7ieC7gOC6p+C6peC6sl0gTFRcIixsYXN0V2VlazpcIlvguqfgurHgupldZGRkZFvgu4HguqXgu4nguqfgupngurXgu4ngu4DguqfguqXgurJdIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwi4Lqt4Lq14LqBICVzXCIscGFzdDpcIiVz4Lqc4LuI4Lqy4LqZ4Lqh4LqyXCIsczpcIuC6muC7jeC7iOC7gOC6l+C6u+C7iOC6suC7g+C6lOC6p+C6tOC6meC6suC6l+C6tVwiLHNzOlwiJWQg4Lqn4Lq04LqZ4Lqy4LqX4Lq1XCIsbTpcIjEg4LqZ4Lqy4LqX4Lq1XCIsbW06XCIlZCDgupngurLgupfgurVcIixoOlwiMSDguorgurvgu4jguqfgu4LguqHguodcIixoaDpcIiVkIOC6iuC6u+C7iOC6p+C7guC6oeC6h1wiLGQ6XCIxIOC6oeC6t+C7iVwiLGRkOlwiJWQg4Lqh4Lq34LuJXCIsTTpcIjEg4LuA4LqU4Lq34Lqt4LqZXCIsTU06XCIlZCDgu4DgupTgurfguq3guplcIix5OlwiMSDgupvgurVcIix5eTpcIiVkIOC6m+C6tVwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi8o4LqX4Lq14LuIKVxcZHsxLDJ9LyxvcmRpbmFsOmZ1bmN0aW9uKG51bWJlcil7cmV0dXJuXCLgupfgurXgu4hcIitudW1iZXJ9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjt2YXIgdW5pdHM9e3NzOlwic2VrdW5kxJdfc2VrdW5kxb5pxbNfc2VrdW5kZXNcIixtOlwibWludXTEl19taW51dMSXc19taW51dMSZXCIsbW06XCJtaW51dMSXc19taW51xI1pxbNfbWludXRlc1wiLGg6XCJ2YWxhbmRhX3ZhbGFuZG9zX3ZhbGFuZMSFXCIsaGg6XCJ2YWxhbmRvc192YWxhbmTFs192YWxhbmRhc1wiLGQ6XCJkaWVuYV9kaWVub3NfZGllbsSFXCIsZGQ6XCJkaWVub3NfZGllbsWzX2RpZW5hc1wiLE06XCJtxJdudW9fbcSXbmVzaW9fbcSXbmVzxK9cIixNTTpcIm3El25lc2lhaV9txJduZXNpxbNfbcSXbmVzaXVzXCIseTpcIm1ldGFpX21ldMWzX21ldHVzXCIseXk6XCJtZXRhaV9tZXTFs19tZXR1c1wifTtmdW5jdGlvbiB0cmFuc2xhdGVTaW5ndWxhcihudW1iZXIsd2l0aG91dFN1ZmZpeCxrZXksaXNGdXR1cmUpe3JldHVybiB3aXRob3V0U3VmZml4P2Zvcm1zKGtleSlbMF06aXNGdXR1cmU/Zm9ybXMoa2V5KVsxXTpmb3JtcyhrZXkpWzJdfWZ1bmN0aW9uIHNwZWNpYWwobnVtYmVyKXtyZXR1cm4gbnVtYmVyJTEwPT0wfHxudW1iZXI+MTAmJm51bWJlcjwyMH1mdW5jdGlvbiBmb3JtcyhrZXkpe3JldHVybiB1bml0c1trZXldLnNwbGl0KFwiX1wiKX1mdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLHdpdGhvdXRTdWZmaXgsa2V5LGlzRnV0dXJlKXt2YXIgcmVzdWx0PW51bWJlcitcIiBcIjtyZXR1cm4gMT09PW51bWJlcj9yZXN1bHQrdHJhbnNsYXRlU2luZ3VsYXIoMCx3aXRob3V0U3VmZml4LGtleVswXSxpc0Z1dHVyZSk6d2l0aG91dFN1ZmZpeD9yZXN1bHQrKHNwZWNpYWwobnVtYmVyKT9mb3JtcyhrZXkpWzFdOmZvcm1zKGtleSlbMF0pOmlzRnV0dXJlP3Jlc3VsdCtmb3JtcyhrZXkpWzFdOnJlc3VsdCsoc3BlY2lhbChudW1iZXIpP2Zvcm1zKGtleSlbMV06Zm9ybXMoa2V5KVsyXSl9bW9tZW50LmRlZmluZUxvY2FsZShcImx0XCIse21vbnRoczp7Zm9ybWF0Olwic2F1c2lvX3Zhc2FyaW9fa292b19iYWxhbmTFvmlvX2dlZ3XFvsSXc19iaXLFvmVsaW9fbGllcG9zX3J1Z3BqxavEjWlvX3J1Z3PEl2pvX3NwYWxpb19sYXBrcmnEjWlvX2dydW9kxb5pb1wiLnNwbGl0KFwiX1wiKSxzdGFuZGFsb25lOlwic2F1c2lzX3Zhc2FyaXNfa292YXNfYmFsYW5kaXNfZ2VndcW+xJdfYmlyxb5lbGlzX2xpZXBhX3J1Z3Bqxat0aXNfcnVnc8SXamlzX3NwYWxpc19sYXBrcml0aXNfZ3J1b2Rpc1wiLnNwbGl0KFwiX1wiKSxpc0Zvcm1hdDovRFtvRF0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStNTU1NP3xNTU1NPyhcXFtbXlxcW1xcXV0qXFxdfFxccykrRFtvRF0/L30sbW9udGhzU2hvcnQ6XCJzYXVfdmFzX2tvdl9iYWxfZ2VnX2Jpcl9saWVfcmdwX3Jnc19zcGFfbGFwX2dyZFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czp7Zm9ybWF0Olwic2VrbWFkaWVuxK9fcGlybWFkaWVuxK9fYW50cmFkaWVuxK9fdHJlxI1pYWRpZW7Er19rZXR2aXJ0YWRpZW7Er19wZW5rdGFkaWVuxK9fxaFlxaF0YWRpZW7Er1wiLnNwbGl0KFwiX1wiKSxzdGFuZGFsb25lOlwic2VrbWFkaWVuaXNfcGlybWFkaWVuaXNfYW50cmFkaWVuaXNfdHJlxI1pYWRpZW5pc19rZXR2aXJ0YWRpZW5pc19wZW5rdGFkaWVuaXNfxaFlxaF0YWRpZW5pc1wiLnNwbGl0KFwiX1wiKSxpc0Zvcm1hdDovZGRkZCBISDptbS99LHdlZWtkYXlzU2hvcnQ6XCJTZWtfUGlyX0FudF9UcmVfS2V0X1Blbl/FoGXFoVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIlNfUF9BX1RfS19Qbl/FoFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJZWVlZLU1NLUREXCIsTEw6XCJZWVlZIFttLl0gTU1NTSBEIFtkLl1cIixMTEw6XCJZWVlZIFttLl0gTU1NTSBEIFtkLl0sIEhIOm1tIFt2YWwuXVwiLExMTEw6XCJZWVlZIFttLl0gTU1NTSBEIFtkLl0sIGRkZGQsIEhIOm1tIFt2YWwuXVwiLGw6XCJZWVlZLU1NLUREXCIsbGw6XCJZWVlZIFttLl0gTU1NTSBEIFtkLl1cIixsbGw6XCJZWVlZIFttLl0gTU1NTSBEIFtkLl0sIEhIOm1tIFt2YWwuXVwiLGxsbGw6XCJZWVlZIFttLl0gTU1NTSBEIFtkLl0sIGRkZCwgSEg6bW0gW3ZhbC5dXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW8WgaWFuZGllbl0gTFRcIixuZXh0RGF5OlwiW1J5dG9qXSBMVFwiLG5leHRXZWVrOlwiZGRkZCBMVFwiLGxhc3REYXk6XCJbVmFrYXJdIExUXCIsbGFzdFdlZWs6XCJbUHJhxJdqdXPEr10gZGRkZCBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcInBvICVzXCIscGFzdDpcInByaWXFoSAlc1wiLHM6ZnVuY3Rpb24obnVtYmVyLHdpdGhvdXRTdWZmaXgsa2V5LGlzRnV0dXJlKXtyZXR1cm4gd2l0aG91dFN1ZmZpeD9cImtlbGlvcyBzZWt1bmTEl3NcIjppc0Z1dHVyZT9cImtlbGnFsyBzZWt1bmTFvmnFs1wiOlwia2VsaWFzIHNla3VuZGVzXCJ9LHNzOnRyYW5zbGF0ZSxtOnRyYW5zbGF0ZVNpbmd1bGFyLG1tOnRyYW5zbGF0ZSxoOnRyYW5zbGF0ZVNpbmd1bGFyLGhoOnRyYW5zbGF0ZSxkOnRyYW5zbGF0ZVNpbmd1bGFyLGRkOnRyYW5zbGF0ZSxNOnRyYW5zbGF0ZVNpbmd1bGFyLE1NOnRyYW5zbGF0ZSx5OnRyYW5zbGF0ZVNpbmd1bGFyLHl5OnRyYW5zbGF0ZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn0tb2ppLyxvcmRpbmFsOmZ1bmN0aW9uKG51bWJlcil7cmV0dXJuIG51bWJlcitcIi1vamlcIn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjt2YXIgdW5pdHM9e3NzOlwic2VrdW5kZXNfc2VrdW5kxJNtX3Nla3VuZGVfc2VrdW5kZXNcIi5zcGxpdChcIl9cIiksbTpcIm1pbsWrdGVzX21pbsWrdMSTbV9taW7Fq3RlX21pbsWrdGVzXCIuc3BsaXQoXCJfXCIpLG1tOlwibWluxat0ZXNfbWluxat0xJNtX21pbsWrdGVfbWluxat0ZXNcIi5zcGxpdChcIl9cIiksaDpcInN0dW5kYXNfc3R1bmTEgW1fc3R1bmRhX3N0dW5kYXNcIi5zcGxpdChcIl9cIiksaGg6XCJzdHVuZGFzX3N0dW5kxIFtX3N0dW5kYV9zdHVuZGFzXCIuc3BsaXQoXCJfXCIpLGQ6XCJkaWVuYXNfZGllbsSBbV9kaWVuYV9kaWVuYXNcIi5zcGxpdChcIl9cIiksZGQ6XCJkaWVuYXNfZGllbsSBbV9kaWVuYV9kaWVuYXNcIi5zcGxpdChcIl9cIiksTTpcIm3Ek25lxaFhX23Ek25lxaFpZW1fbcSTbmVzaXNfbcSTbmXFoWlcIi5zcGxpdChcIl9cIiksTU06XCJtxJNuZcWhYV9txJNuZcWhaWVtX23Ek25lc2lzX23Ek25lxaFpXCIuc3BsaXQoXCJfXCIpLHk6XCJnYWRhX2dhZGllbV9nYWRzX2dhZGlcIi5zcGxpdChcIl9cIikseXk6XCJnYWRhX2dhZGllbV9nYWRzX2dhZGlcIi5zcGxpdChcIl9cIil9O2Z1bmN0aW9uIGZvcm1hdChmb3JtcyxudW1iZXIsd2l0aG91dFN1ZmZpeCl7cmV0dXJuIHdpdGhvdXRTdWZmaXg/bnVtYmVyJTEwPT0xJiZudW1iZXIlMTAwIT0xMT9mb3Jtc1syXTpmb3Jtc1szXTpudW1iZXIlMTA9PTEmJm51bWJlciUxMDAhPTExP2Zvcm1zWzBdOmZvcm1zWzFdfWZ1bmN0aW9uIHJlbGF0aXZlVGltZVdpdGhQbHVyYWwobnVtYmVyLHdpdGhvdXRTdWZmaXgsa2V5KXtyZXR1cm4gbnVtYmVyK1wiIFwiK2Zvcm1hdCh1bml0c1trZXldLG51bWJlcix3aXRob3V0U3VmZml4KX1mdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoU2luZ3VsYXIobnVtYmVyLHdpdGhvdXRTdWZmaXgsa2V5KXtyZXR1cm4gZm9ybWF0KHVuaXRzW2tleV0sbnVtYmVyLHdpdGhvdXRTdWZmaXgpfW1vbWVudC5kZWZpbmVMb2NhbGUoXCJsdlwiLHttb250aHM6XCJqYW52xIFyaXNfZmVicnXEgXJpc19tYXJ0c19hcHLEq2xpc19tYWlqc19qxatuaWpzX2rFq2xpanNfYXVndXN0c19zZXB0ZW1icmlzX29rdG9icmlzX25vdmVtYnJpc19kZWNlbWJyaXNcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJqYW5fZmViX21hcl9hcHJfbWFpX2rFq25fasWrbF9hdWdfc2VwX29rdF9ub3ZfZGVjXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwic3bEk3RkaWVuYV9waXJtZGllbmFfb3RyZGllbmFfdHJlxaFkaWVuYV9jZXR1cnRkaWVuYV9waWVrdGRpZW5hX3Nlc3RkaWVuYVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiU3ZfUF9PX1RfQ19Qa19TXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiU3ZfUF9PX1RfQ19Qa19TXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkRELk1NLllZWVkuXCIsTEw6XCJZWVlZLiBbZ2FkYV0gRC4gTU1NTVwiLExMTDpcIllZWVkuIFtnYWRhXSBELiBNTU1NLCBISDptbVwiLExMTEw6XCJZWVlZLiBbZ2FkYV0gRC4gTU1NTSwgZGRkZCwgSEg6bW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJbxaBvZGllbiBwdWxrc3Rlbl0gTFRcIixuZXh0RGF5OlwiW1LEq3QgcHVsa3N0ZW5dIExUXCIsbmV4dFdlZWs6XCJkZGRkIFtwdWxrc3Rlbl0gTFRcIixsYXN0RGF5OlwiW1Zha2FyIHB1bGtzdGVuXSBMVFwiLGxhc3RXZWVrOlwiW1BhZ8SBanXFocSBXSBkZGRkIFtwdWxrc3Rlbl0gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJwxJNjICVzXCIscGFzdDpcInBpcm1zICVzXCIsczpmdW5jdGlvbihudW1iZXIsd2l0aG91dFN1ZmZpeCl7cmV0dXJuIHdpdGhvdXRTdWZmaXg/XCJkYcW+YXMgc2VrdW5kZXNcIjpcImRhxb7EgW0gc2VrdW5kxJNtXCJ9LHNzOnJlbGF0aXZlVGltZVdpdGhQbHVyYWwsbTpyZWxhdGl2ZVRpbWVXaXRoU2luZ3VsYXIsbW06cmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxoOnJlbGF0aXZlVGltZVdpdGhTaW5ndWxhcixoaDpyZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLGQ6cmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyLGRkOnJlbGF0aXZlVGltZVdpdGhQbHVyYWwsTTpyZWxhdGl2ZVRpbWVXaXRoU2luZ3VsYXIsTU06cmVsYXRpdmVUaW1lV2l0aFBsdXJhbCx5OnJlbGF0aXZlVGltZVdpdGhTaW5ndWxhcix5eTpyZWxhdGl2ZVRpbWVXaXRoUGx1cmFsfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfVxcLi8sb3JkaW5hbDpcIiVkLlwiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHRyYW5zbGF0b3I9e3dvcmRzOntzczpbXCJzZWt1bmRcIixcInNla3VuZGFcIixcInNla3VuZGlcIl0sbTpbXCJqZWRhbiBtaW51dFwiLFwiamVkbm9nIG1pbnV0YVwiXSxtbTpbXCJtaW51dFwiLFwibWludXRhXCIsXCJtaW51dGFcIl0saDpbXCJqZWRhbiBzYXRcIixcImplZG5vZyBzYXRhXCJdLGhoOltcInNhdFwiLFwic2F0YVwiLFwic2F0aVwiXSxkZDpbXCJkYW5cIixcImRhbmFcIixcImRhbmFcIl0sTU06W1wibWplc2VjXCIsXCJtamVzZWNhXCIsXCJtamVzZWNpXCJdLHl5OltcImdvZGluYVwiLFwiZ29kaW5lXCIsXCJnb2RpbmFcIl19LGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6ZnVuY3Rpb24obnVtYmVyLHdvcmRLZXkpe3JldHVybiAxPT09bnVtYmVyP3dvcmRLZXlbMF06bnVtYmVyPj0yJiZudW1iZXI8PTQ/d29yZEtleVsxXTp3b3JkS2V5WzJdfSx0cmFuc2xhdGU6ZnVuY3Rpb24obnVtYmVyLHdpdGhvdXRTdWZmaXgsa2V5KXt2YXIgd29yZEtleT10cmFuc2xhdG9yLndvcmRzW2tleV07cmV0dXJuIDE9PT1rZXkubGVuZ3RoP3dpdGhvdXRTdWZmaXg/d29yZEtleVswXTp3b3JkS2V5WzFdOm51bWJlcitcIiBcIit0cmFuc2xhdG9yLmNvcnJlY3RHcmFtbWF0aWNhbENhc2UobnVtYmVyLHdvcmRLZXkpfX07bW9tZW50LmRlZmluZUxvY2FsZShcIm1lXCIse21vbnRoczpcImphbnVhcl9mZWJydWFyX21hcnRfYXByaWxfbWFqX2p1bl9qdWxfYXZndXN0X3NlcHRlbWJhcl9va3RvYmFyX25vdmVtYmFyX2RlY2VtYmFyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiamFuLl9mZWIuX21hci5fYXByLl9tYWpfanVuX2p1bF9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy5cIi5zcGxpdChcIl9cIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpcIm5lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGFcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIm5lZC5fcG9uLl91dG8uX3NyaS5fxI1ldC5fcGV0Ll9zdWIuXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwibmVfcG9fdXRfc3JfxI1lX3BlX3N1XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJIOm1tXCIsTFRTOlwiSDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJELiBNTU1NIFlZWVlcIixMTEw6XCJELiBNTU1NIFlZWVkgSDptbVwiLExMTEw6XCJkZGRkLCBELiBNTU1NIFlZWVkgSDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIltkYW5hcyB1XSBMVFwiLG5leHREYXk6XCJbc2p1dHJhIHVdIExUXCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVyblwiW3VdIFtuZWRqZWxqdV0gW3VdIExUXCI7Y2FzZSAzOnJldHVyblwiW3VdIFtzcmlqZWR1XSBbdV0gTFRcIjtjYXNlIDY6cmV0dXJuXCJbdV0gW3N1Ym90dV0gW3VdIExUXCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVyblwiW3VdIGRkZGQgW3VdIExUXCJ9fSxsYXN0RGF5OlwiW2p1xI1lIHVdIExUXCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm5bXCJbcHJvxaFsZV0gW25lZGplbGplXSBbdV0gTFRcIixcIltwcm/FoWxvZ10gW3BvbmVkamVsamthXSBbdV0gTFRcIixcIltwcm/FoWxvZ10gW3V0b3JrYV0gW3VdIExUXCIsXCJbcHJvxaFsZV0gW3NyaWplZGVdIFt1XSBMVFwiLFwiW3Byb8WhbG9nXSBbxI1ldHZydGthXSBbdV0gTFRcIixcIltwcm/FoWxvZ10gW3BldGthXSBbdV0gTFRcIixcIltwcm/FoWxlXSBbc3Vib3RlXSBbdV0gTFRcIl1bdGhpcy5kYXkoKV19LHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcInphICVzXCIscGFzdDpcInByaWplICVzXCIsczpcIm5la29saWtvIHNla3VuZGlcIixzczp0cmFuc2xhdG9yLnRyYW5zbGF0ZSxtOnRyYW5zbGF0b3IudHJhbnNsYXRlLG1tOnRyYW5zbGF0b3IudHJhbnNsYXRlLGg6dHJhbnNsYXRvci50cmFuc2xhdGUsaGg6dHJhbnNsYXRvci50cmFuc2xhdGUsZDpcImRhblwiLGRkOnRyYW5zbGF0b3IudHJhbnNsYXRlLE06XCJtamVzZWNcIixNTTp0cmFuc2xhdG9yLnRyYW5zbGF0ZSx5OlwiZ29kaW51XCIseXk6dHJhbnNsYXRvci50cmFuc2xhdGV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9XFwuLyxvcmRpbmFsOlwiJWQuXCIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwibWlcIix7bW9udGhzOlwiS29oaS10xIF0ZV9IdWktdGFuZ3VydV9Qb3V0xastdGUtcmFuZ2lfUGFlbmdhLXdoxIF3aMSBX0hhcmF0dWFfUGlwaXJpX0jFjW5nb2luZ29pX0hlcmUtdHVyaS1rxY1rxIFfTWFodXJ1X1doaXJpbmdhLcSBLW51a3VfV2hpcmluZ2EtxIEtcmFuZ2lfSGFraWhlYVwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIktvaGlfSHVpX1BvdV9QYWVfSGFyYV9QaXBpX0jFjW5nb2lfSGVyZV9NYWh1X1doaS1udV9XaGktcmFfSGFraVwiLnNwbGl0KFwiX1wiKSxtb250aHNSZWdleDovKD86WydhLXpcXHUwMTAxXFx1MDE0RFxcdTAxNkJdK1xcLT8pezEsM30vaSxtb250aHNTdHJpY3RSZWdleDovKD86WydhLXpcXHUwMTAxXFx1MDE0RFxcdTAxNkJdK1xcLT8pezEsM30vaSxtb250aHNTaG9ydFJlZ2V4Oi8oPzpbJ2EtelxcdTAxMDFcXHUwMTREXFx1MDE2Ql0rXFwtPyl7MSwzfS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6Lyg/OlsnYS16XFx1MDEwMVxcdTAxNERcXHUwMTZCXStcXC0/KXsxLDJ9L2ksd2Vla2RheXM6XCJSxIF0YXB1X01hbmVfVMWrcmVpX1dlbmVyZWlfVMSBaXRlX1BhcmFpcmVfSMSBdGFyZWlcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIlRhX01hX1TFq19XZV9UxIFpX1BhX0jEgVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIlRhX01hX1TFq19XZV9UxIFpX1BhX0jEgVwiLnNwbGl0KFwiX1wiKSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgW2ldIEhIOm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIFtpXSBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIltpIHRlaWUgbWFoYW5hLCBpXSBMVFwiLG5leHREYXk6XCJbYXBvcG8gaV0gTFRcIixuZXh0V2VlazpcImRkZGQgW2ldIExUXCIsbGFzdERheTpcIltpbmFuYWhpIGldIExUXCIsbGFzdFdlZWs6XCJkZGRkIFt3aGFrYW11dHVuZ2EgaV0gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJpIHJvdG8gaSAlc1wiLHBhc3Q6XCIlcyBpIG11YVwiLHM6XCJ0ZSBoxJNrb25hIHJ1YXJ1YVwiLHNzOlwiJWQgaMSTa29uYVwiLG06XCJoZSBtZW5ldGlcIixtbTpcIiVkIG1lbmV0aVwiLGg6XCJ0ZSBoYW9yYVwiLGhoOlwiJWQgaGFvcmFcIixkOlwiaGUgcmFcIixkZDpcIiVkIHJhXCIsTTpcImhlIG1hcmFtYVwiLE1NOlwiJWQgbWFyYW1hXCIseTpcImhlIHRhdVwiLHl5OlwiJWQgdGF1XCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9wrovLG9yZGluYWw6XCIlZMK6XCIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwibWtcIix7bW9udGhzOlwi0ZjQsNC90YPQsNGA0Lhf0YTQtdCy0YDRg9Cw0YDQuF/QvNCw0YDRgl/QsNC/0YDQuNC7X9C80LDRmF/RmNGD0L3QuF/RmNGD0LvQuF/QsNCy0LPRg9GB0YJf0YHQtdC/0YLQtdC80LLRgNC4X9C+0LrRgtC+0LzQstGA0Lhf0L3QvtC10LzQstGA0Lhf0LTQtdC60LXQvNCy0YDQuFwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcItGY0LDQvV/RhNC10LJf0LzQsNGAX9Cw0L/RgF/QvNCw0Zhf0ZjRg9C9X9GY0YPQu1/QsNCy0LNf0YHQtdC/X9C+0LrRgl/QvdC+0LVf0LTQtdC6XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwi0L3QtdC00LXQu9CwX9C/0L7QvdC10LTQtdC70L3QuNC6X9Cy0YLQvtGA0L3QuNC6X9GB0YDQtdC00LBf0YfQtdGC0LLRgNGC0L7Qul/Qv9C10YLQvtC6X9GB0LDQsdC+0YLQsFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi0L3QtdC0X9C/0L7QvV/QstGC0L5f0YHRgNC1X9GH0LXRgl/Qv9C10YJf0YHQsNCxXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi0L1lX9C/b1/QstGCX9GB0YBf0YfQtV/Qv9C1X9GBYVwiLnNwbGl0KFwiX1wiKSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJIOm1tXCIsTFRTOlwiSDptbTpzc1wiLEw6XCJELk1NLllZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW9CU0LXQvdC10YEg0LLQvl0gTFRcIixuZXh0RGF5OlwiW9Cj0YLRgNC1INCy0L5dIExUXCIsbmV4dFdlZWs6XCJb0JLQvl0gZGRkZCBb0LLQvl0gTFRcIixsYXN0RGF5OlwiW9CS0YfQtdGA0LAg0LLQvl0gTFRcIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNjpyZXR1cm5cIlvQmNC30LzQuNC90LDRgtCw0YLQsF0gZGRkZCBb0LLQvl0gTFRcIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuXCJb0JjQt9C80LjQvdCw0YLQuNC+0YJdIGRkZGQgW9Cy0L5dIExUXCJ9fSxzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCLQt9CwICVzXCIscGFzdDpcItC/0YDQtdC0ICVzXCIsczpcItC90LXQutC+0LvQutGDINGB0LXQutGD0L3QtNC4XCIsc3M6XCIlZCDRgdC10LrRg9C90LTQuFwiLG06XCLQtdC00L3QsCDQvNC40L3Rg9GC0LBcIixtbTpcIiVkINC80LjQvdGD0YLQuFwiLGg6XCLQtdC00LXQvSDRh9Cw0YFcIixoaDpcIiVkINGH0LDRgdCwXCIsZDpcItC10LTQtdC9INC00LXQvVwiLGRkOlwiJWQg0LTQtdC90LBcIixNOlwi0LXQtNC10L0g0LzQtdGB0LXRhlwiLE1NOlwiJWQg0LzQtdGB0LXRhtC4XCIseTpcItC10LTQvdCwINCz0L7QtNC40L3QsFwiLHl5OlwiJWQg0LPQvtC00LjQvdC4XCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9LSjQtdCyfNC10L180YLQuHzQstC4fNGA0Lh80LzQuCkvLG9yZGluYWw6ZnVuY3Rpb24obnVtYmVyKXt2YXIgbGFzdERpZ2l0PW51bWJlciUxMCxsYXN0MkRpZ2l0cz1udW1iZXIlMTAwO3JldHVybiAwPT09bnVtYmVyP251bWJlcitcIi3QtdCyXCI6MD09PWxhc3QyRGlnaXRzP251bWJlcitcIi3QtdC9XCI6bGFzdDJEaWdpdHM+MTAmJmxhc3QyRGlnaXRzPDIwP251bWJlcitcIi3RgtC4XCI6MT09PWxhc3REaWdpdD9udW1iZXIrXCIt0LLQuFwiOjI9PT1sYXN0RGlnaXQ/bnVtYmVyK1wiLdGA0LhcIjo3PT09bGFzdERpZ2l0fHw4PT09bGFzdERpZ2l0P251bWJlcitcIi3QvNC4XCI6bnVtYmVyK1wiLdGC0LhcIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwibWxcIix7bW9udGhzOlwi4LSc4LSo4LWB4LS14LSw4LS/X+C0q+C1huC0rOC1jeC0sOC1geC0teC0sOC0v1/gtK7gtL7gtbzgtJrgtY3gtJrgtY1f4LSP4LSq4LWN4LSw4LS/4LW9X+C0ruC1h+C0r+C1jV/gtJzgtYLgtbpf4LSc4LWC4LSy4LWIX+C0k+C0l+C0uOC1jeC0seC1jeC0seC1jV/gtLjgtYbgtKrgtY3gtLHgtY3gtLHgtILgtKzgtbxf4LSS4LSV4LWN4LSf4LWL4LSs4LW8X+C0qOC0teC0guC0rOC1vF/gtKHgtL/gtLjgtILgtKzgtbxcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLgtJzgtKjgtYEuX+C0q+C1huC0rOC1jeC0sOC1gS5f4LSu4LS+4LW8Ll/gtI/gtKrgtY3gtLDgtL8uX+C0ruC1h+C0r+C1jV/gtJzgtYLgtbpf4LSc4LWC4LSy4LWILl/gtJPgtJcuX+C0uOC1huC0quC1jeC0seC1jeC0sS5f4LSS4LSV4LWN4LSf4LWLLl/gtKjgtLXgtIIuX+C0oeC0v+C0uOC0gi5cIi5zcGxpdChcIl9cIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpcIuC0nuC0vuC0r+C0seC0vuC0tOC1jeC0ml/gtKTgtL/gtJngtY3gtJXgtLPgtL7gtLTgtY3gtJpf4LSa4LWK4LS14LWN4LS14LS+4LS04LWN4LSaX+C0rOC1geC0p+C0qOC0vuC0tOC1jeC0ml/gtLXgtY3gtK/gtL7gtLTgtL7gtLTgtY3gtJpf4LS14LWG4LSz4LWN4LSz4LS/4LSv4LS+4LS04LWN4LSaX+C0tuC0qOC0v+C0r+C0vuC0tOC1jeC0mlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi4LSe4LS+4LSv4LW8X+C0pOC0v+C0meC1jeC0leC1vl/gtJrgtYrgtLXgtY3gtLVf4LSs4LWB4LSn4LW7X+C0teC1jeC0r+C0vuC0tOC0gl/gtLXgtYbgtLPgtY3gtLPgtL9f4LS24LSo4LS/XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi4LSe4LS+X+C0pOC0v1/gtJrgtYpf4LSs4LWBX+C0teC1jeC0r+C0vl/gtLXgtYZf4LS2XCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkEgaDptbSAt4LSo4LWBXCIsTFRTOlwiQSBoOm1tOnNzIC3gtKjgtYFcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSwgQSBoOm1tIC3gtKjgtYFcIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSAt4LSo4LWBXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW+C0h+C0qOC1jeC0qOC1jV0gTFRcIixuZXh0RGF5OlwiW+C0qOC0vuC0s+C1hl0gTFRcIixuZXh0V2VlazpcImRkZGQsIExUXCIsbGFzdERheTpcIlvgtIfgtKjgtY3gtKjgtLLgtYZdIExUXCIsbGFzdFdlZWs6XCJb4LSV4LS04LS/4LSe4LWN4LSeXSBkZGRkLCBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVzIOC0leC0tOC0v+C0nuC1jeC0nuC1jVwiLHBhc3Q6XCIlcyDgtK7gtYHgtbvgtKrgtY1cIixzOlwi4LSF4LW94LSqIOC0qOC0v+C0ruC0v+C0t+C0meC1jeC0meC1vlwiLHNzOlwiJWQg4LS44LWG4LSV4LWN4LSV4LW74LSh4LWNXCIsbTpcIuC0kuC0sOC1gSDgtK7gtL/gtKjgtL/gtLHgtY3gtLHgtY1cIixtbTpcIiVkIOC0ruC0v+C0qOC0v+C0seC1jeC0seC1jVwiLGg6XCLgtJLgtLDgtYEg4LSu4LSj4LS/4LSV4LWN4LSV4LWC4LW8XCIsaGg6XCIlZCDgtK7gtKPgtL/gtJXgtY3gtJXgtYLgtbxcIixkOlwi4LSS4LSw4LWBIOC0puC0v+C0teC0uOC0glwiLGRkOlwiJWQg4LSm4LS/4LS14LS44LSCXCIsTTpcIuC0kuC0sOC1gSDgtK7gtL7gtLjgtIJcIixNTTpcIiVkIOC0ruC0vuC0uOC0glwiLHk6XCLgtJLgtLDgtYEg4LS14LW84LS34LSCXCIseXk6XCIlZCDgtLXgtbzgtLfgtIJcIn0sbWVyaWRpZW1QYXJzZTov4LSw4LS+4LSk4LWN4LSw4LS/fOC0sOC0vuC0teC0v+C0suC1hnzgtIngtJrgtY3gtJog4LSV4LS04LS/4LSe4LWN4LSe4LWNfOC0teC1iOC0leC1geC0qOC1jeC0qOC1h+C0sOC0gnzgtLDgtL7gtKTgtY3gtLDgtL8vaSxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oaG91cixtZXJpZGllbSl7cmV0dXJuIDEyPT09aG91ciYmKGhvdXI9MCksXCLgtLDgtL7gtKTgtY3gtLDgtL9cIj09PW1lcmlkaWVtJiZob3VyPj00fHxcIuC0ieC0muC1jeC0miDgtJXgtLTgtL/gtJ7gtY3gtJ7gtY1cIj09PW1lcmlkaWVtfHxcIuC0teC1iOC0leC1geC0qOC1jeC0qOC1h+C0sOC0glwiPT09bWVyaWRpZW0/aG91cisxMjpob3VyfSxtZXJpZGllbTpmdW5jdGlvbihob3VyLG1pbnV0ZSxpc0xvd2VyKXtyZXR1cm4gaG91cjw0P1wi4LSw4LS+4LSk4LWN4LSw4LS/XCI6aG91cjwxMj9cIuC0sOC0vuC0teC0v+C0suC1hlwiOmhvdXI8MTc/XCLgtIngtJrgtY3gtJog4LSV4LS04LS/4LSe4LWN4LSe4LWNXCI6aG91cjwyMD9cIuC0teC1iOC0leC1geC0qOC1jeC0qOC1h+C0sOC0glwiOlwi4LSw4LS+4LSk4LWN4LSw4LS/XCJ9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLHdpdGhvdXRTdWZmaXgsa2V5LGlzRnV0dXJlKXtzd2l0Y2goa2V5KXtjYXNlXCJzXCI6cmV0dXJuIHdpdGhvdXRTdWZmaXg/XCLRhdGN0LTRhdGN0L0g0YHQtdC60YPQvdC0XCI6XCLRhdGN0LTRhdGN0L0g0YHQtdC60YPQvdC00YvQvVwiO2Nhc2VcInNzXCI6cmV0dXJuIG51bWJlcisod2l0aG91dFN1ZmZpeD9cIiDRgdC10LrRg9C90LRcIjpcIiDRgdC10LrRg9C90LTRi9C9XCIpO2Nhc2VcIm1cIjpjYXNlXCJtbVwiOnJldHVybiBudW1iZXIrKHdpdGhvdXRTdWZmaXg/XCIg0LzQuNC90YPRglwiOlwiINC80LjQvdGD0YLRi9C9XCIpO2Nhc2VcImhcIjpjYXNlXCJoaFwiOnJldHVybiBudW1iZXIrKHdpdGhvdXRTdWZmaXg/XCIg0YbQsNCzXCI6XCIg0YbQsNCz0LjQudC9XCIpO2Nhc2VcImRcIjpjYXNlXCJkZFwiOnJldHVybiBudW1iZXIrKHdpdGhvdXRTdWZmaXg/XCIg06nQtNOp0YBcIjpcIiDTqdC00YDQuNC50L1cIik7Y2FzZVwiTVwiOmNhc2VcIk1NXCI6cmV0dXJuIG51bWJlcisod2l0aG91dFN1ZmZpeD9cIiDRgdCw0YBcIjpcIiDRgdCw0YDRi9C9XCIpO2Nhc2VcInlcIjpjYXNlXCJ5eVwiOnJldHVybiBudW1iZXIrKHdpdGhvdXRTdWZmaXg/XCIg0LbQuNC7XCI6XCIg0LbQuNC70LjQudC9XCIpO2RlZmF1bHQ6cmV0dXJuIG51bWJlcn19bW9tZW50LmRlZmluZUxvY2FsZShcIm1uXCIse21vbnRoczpcItCd0Y3Qs9C00q/Qs9GN0Y3RgCDRgdCw0YBf0KXQvtGR0YDQtNGD0LPQsNCw0YAg0YHQsNGAX9CT0YPRgNCw0LLQtNGD0LPQsNCw0YAg0YHQsNGAX9CU06nRgNOp0LLQtNKv0LPRjdGN0YAg0YHQsNGAX9Ci0LDQstC00YPQs9Cw0LDRgCDRgdCw0YBf0JfRg9GA0LPQsNC00YPQs9Cw0LDRgCDRgdCw0YBf0JTQvtC70LTRg9Cz0LDQsNGAINGB0LDRgF/QndCw0LnQvNC00YPQs9Cw0LDRgCDRgdCw0YBf0JXRgdC00q/Qs9GN0Y3RgCDRgdCw0YBf0JDRgNCw0LLQtNGD0LPQsNCw0YAg0YHQsNGAX9CQ0YDQstCw0L0g0L3RjdCz0LTSr9Cz0Y3RjdGAINGB0LDRgF/QkNGA0LLQsNC9INGF0L7RkdGA0LTRg9Cz0LDQsNGAINGB0LDRgFwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIjEg0YHQsNGAXzIg0YHQsNGAXzMg0YHQsNGAXzQg0YHQsNGAXzUg0YHQsNGAXzYg0YHQsNGAXzcg0YHQsNGAXzgg0YHQsNGAXzkg0YHQsNGAXzEwINGB0LDRgF8xMSDRgdCw0YBfMTIg0YHQsNGAXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6XCLQndGP0Lxf0JTQsNCy0LDQsF/QnNGP0LPQvNCw0YBf0JvRhdCw0LPQstCwX9Cf0q/RgNGN0LJf0JHQsNCw0YHQsNC9X9CR0Y/QvNCx0LBcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcItCd0Y/QvF/QlNCw0LJf0JzRj9CzX9Cb0YXQsF/Qn9Kv0YBf0JHQsNCwX9CR0Y/QvFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcItCd0Y9f0JTQsF/QnNGPX9Cb0YVf0J/Sr1/QkdCwX9CR0Y9cIi5zcGxpdChcIl9cIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiWVlZWS1NTS1ERFwiLExMOlwiWVlZWSDQvtC90YsgTU1NTdGL0L0gRFwiLExMTDpcIllZWVkg0L7QvdGLIE1NTU3Ri9C9IEQgSEg6bW1cIixMTExMOlwiZGRkZCwgWVlZWSDQvtC90YsgTU1NTdGL0L0gRCBISDptbVwifSxtZXJpZGllbVBhcnNlOi/SrtOofNKu0KUvaSxpc1BNOmZ1bmN0aW9uKGlucHV0KXtyZXR1cm5cItKu0KVcIj09PWlucHV0fSxtZXJpZGllbTpmdW5jdGlvbihob3VyLG1pbnV0ZSxpc0xvd2VyKXtyZXR1cm4gaG91cjwxMj9cItKu06hcIjpcItKu0KVcIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJb06jQvdOp06nQtNOp0YBdIExUXCIsbmV4dERheTpcIlvQnNCw0YDQs9Cw0LDRiF0gTFRcIixuZXh0V2VlazpcIlvQmNGA0Y3RhV0gZGRkZCBMVFwiLGxhc3REYXk6XCJb06jRh9C40LPQtNOp0YBdIExUXCIsbGFzdFdlZWs6XCJb06jQvdCz06nRgNGB06nQvV0gZGRkZCBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVzINC00LDRgNCw0LBcIixwYXN0OlwiJXMg06nQvNC906lcIixzOnRyYW5zbGF0ZSxzczp0cmFuc2xhdGUsbTp0cmFuc2xhdGUsbW06dHJhbnNsYXRlLGg6dHJhbnNsYXRlLGhoOnRyYW5zbGF0ZSxkOnRyYW5zbGF0ZSxkZDp0cmFuc2xhdGUsTTp0cmFuc2xhdGUsTU06dHJhbnNsYXRlLHk6dHJhbnNsYXRlLHl5OnRyYW5zbGF0ZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn0g06nQtNOp0YAvLG9yZGluYWw6ZnVuY3Rpb24obnVtYmVyLHBlcmlvZCl7c3dpdGNoKHBlcmlvZCl7Y2FzZVwiZFwiOmNhc2VcIkRcIjpjYXNlXCJERERcIjpyZXR1cm4gbnVtYmVyK1wiINOp0LTTqdGAXCI7ZGVmYXVsdDpyZXR1cm4gbnVtYmVyfX19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO3ZhciBzeW1ib2xNYXA9ezE6XCLgpadcIiwyOlwi4KWoXCIsMzpcIuClqVwiLDQ6XCLgpapcIiw1Olwi4KWrXCIsNjpcIuClrFwiLDc6XCLgpa1cIiw4Olwi4KWuXCIsOTpcIuClr1wiLDA6XCLgpaZcIn0sbnVtYmVyTWFwPXtcIuClp1wiOlwiMVwiLFwi4KWoXCI6XCIyXCIsXCLgpalcIjpcIjNcIixcIuClqlwiOlwiNFwiLFwi4KWrXCI6XCI1XCIsXCLgpaxcIjpcIjZcIixcIuClrVwiOlwiN1wiLFwi4KWuXCI6XCI4XCIsXCLgpa9cIjpcIjlcIixcIuClplwiOlwiMFwifTtmdW5jdGlvbiByZWxhdGl2ZVRpbWVNcihudW1iZXIsd2l0aG91dFN1ZmZpeCxzdHJpbmcsaXNGdXR1cmUpe3ZhciBvdXRwdXQ9XCJcIjtpZih3aXRob3V0U3VmZml4KXN3aXRjaChzdHJpbmcpe2Nhc2VcInNcIjpvdXRwdXQ9XCLgpJXgpL7gpLngpYAg4KS44KWH4KSV4KSC4KSmXCI7YnJlYWs7Y2FzZVwic3NcIjpvdXRwdXQ9XCIlZCDgpLjgpYfgpJXgpILgpKZcIjticmVhaztjYXNlXCJtXCI6b3V0cHV0PVwi4KSP4KSVIOCkruCkv+CkqOCkv+Ckn1wiO2JyZWFrO2Nhc2VcIm1tXCI6b3V0cHV0PVwiJWQg4KSu4KS/4KSo4KS/4KSf4KWHXCI7YnJlYWs7Y2FzZVwiaFwiOm91dHB1dD1cIuCkj+CklSDgpKTgpL7gpLhcIjticmVhaztjYXNlXCJoaFwiOm91dHB1dD1cIiVkIOCkpOCkvuCkuFwiO2JyZWFrO2Nhc2VcImRcIjpvdXRwdXQ9XCLgpI/gpJUg4KSm4KS/4KS14KS4XCI7YnJlYWs7Y2FzZVwiZGRcIjpvdXRwdXQ9XCIlZCDgpKbgpL/gpLXgpLhcIjticmVhaztjYXNlXCJNXCI6b3V0cHV0PVwi4KSP4KSVIOCkruCkueCkv+CkqOCkvlwiO2JyZWFrO2Nhc2VcIk1NXCI6b3V0cHV0PVwiJWQg4KSu4KS54KS/4KSo4KWHXCI7YnJlYWs7Y2FzZVwieVwiOm91dHB1dD1cIuCkj+CklSDgpLXgpLDgpY3gpLdcIjticmVhaztjYXNlXCJ5eVwiOm91dHB1dD1cIiVkIOCkteCksOCljeCkt+Clh1wifWVsc2Ugc3dpdGNoKHN0cmluZyl7Y2FzZVwic1wiOm91dHB1dD1cIuCkleCkvuCkueClgCDgpLjgpYfgpJXgpILgpKbgpL7gpIJcIjticmVhaztjYXNlXCJzc1wiOm91dHB1dD1cIiVkIOCkuOClh+CkleCkguCkpuCkvuCkglwiO2JyZWFrO2Nhc2VcIm1cIjpvdXRwdXQ9XCLgpI/gpJXgpL4g4KSu4KS/4KSo4KS/4KSf4KS+XCI7YnJlYWs7Y2FzZVwibW1cIjpvdXRwdXQ9XCIlZCDgpK7gpL/gpKjgpL/gpJ/gpL7gpIJcIjticmVhaztjYXNlXCJoXCI6b3V0cHV0PVwi4KSP4KSV4KS+IOCkpOCkvuCkuOCkvlwiO2JyZWFrO2Nhc2VcImhoXCI6b3V0cHV0PVwiJWQg4KSk4KS+4KS44KS+4KSCXCI7YnJlYWs7Y2FzZVwiZFwiOm91dHB1dD1cIuCkj+CkleCkviDgpKbgpL/gpLXgpLjgpL5cIjticmVhaztjYXNlXCJkZFwiOm91dHB1dD1cIiVkIOCkpuCkv+CkteCkuOCkvuCkglwiO2JyZWFrO2Nhc2VcIk1cIjpvdXRwdXQ9XCLgpI/gpJXgpL4g4KSu4KS54KS/4KSo4KWN4KSv4KS+XCI7YnJlYWs7Y2FzZVwiTU1cIjpvdXRwdXQ9XCIlZCDgpK7gpLngpL/gpKjgpY3gpK/gpL7gpIJcIjticmVhaztjYXNlXCJ5XCI6b3V0cHV0PVwi4KSP4KSV4KS+IOCkteCksOCljeCkt+CkvlwiO2JyZWFrO2Nhc2VcInl5XCI6b3V0cHV0PVwiJWQg4KS14KSw4KWN4KS34KS+4KSCXCJ9cmV0dXJuIG91dHB1dC5yZXBsYWNlKC8lZC9pLG51bWJlcil9bW9tZW50LmRlZmluZUxvY2FsZShcIm1yXCIse21vbnRoczpcIuCknOCkvuCkqOClh+CkteCkvuCksOClgF/gpKvgpYfgpKzgpY3gpLDgpYHgpLXgpL7gpLDgpYBf4KSu4KS+4KSw4KWN4KSaX+Ckj+CkquCljeCksOCkv+Cksl/gpK7gpYdf4KSc4KWC4KSoX+CknOClgeCksuCliF/gpJHgpJfgpLjgpY3gpJ9f4KS44KSq4KWN4KSf4KWH4KSC4KSs4KSwX+CkkeCkleCljeCkn+Cli+CkrOCksF/gpKjgpYvgpLXgpY3gpLngpYfgpILgpKzgpLBf4KSh4KS/4KS44KWH4KSC4KSs4KSwXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0Olwi4KSc4KS+4KSo4KWHLl/gpKvgpYfgpKzgpY3gpLDgpYEuX+CkruCkvuCksOCljeCkmi5f4KSP4KSq4KWN4KSw4KS/Ll/gpK7gpYcuX+CknOClguCkqC5f4KSc4KWB4KSy4KWILl/gpJHgpJcuX+CkuOCkquCljeCkn+Clh+Ckgi5f4KSR4KSV4KWN4KSf4KWLLl/gpKjgpYvgpLXgpY3gpLngpYfgpIIuX+CkoeCkv+CkuOClh+Ckgi5cIi5zcGxpdChcIl9cIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpcIuCksOCkteCkv+CkteCkvuCksF/gpLjgpYvgpK7gpLXgpL7gpLBf4KSu4KSC4KSX4KSz4KS14KS+4KSwX+CkrOClgeCkp+CkteCkvuCksF/gpJfgpYHgpLDgpYLgpLXgpL7gpLBf4KS24KWB4KSV4KWN4KSw4KS14KS+4KSwX+CktuCkqOCkv+CkteCkvuCksFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi4KSw4KS14KS/X+CkuOCli+Ckrl/gpK7gpILgpJfgpLNf4KSs4KWB4KSnX+Ckl+ClgeCksOClgl/gpLbgpYHgpJXgpY3gpLBf4KS24KSo4KS/XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi4KSwX+CkuOCli1/gpK7gpIJf4KSs4KWBX+Ckl+ClgV/gpLbgpYFf4KS2XCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkEgaDptbSDgpLXgpL7gpJzgpKTgpL5cIixMVFM6XCJBIGg6bW06c3Mg4KS14KS+4KSc4KSk4KS+XCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVksIEEgaDptbSDgpLXgpL7gpJzgpKTgpL5cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgpLXgpL7gpJzgpKTgpL5cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJb4KSG4KScXSBMVFwiLG5leHREYXk6XCJb4KSJ4KSm4KWN4KSv4KS+XSBMVFwiLG5leHRXZWVrOlwiZGRkZCwgTFRcIixsYXN0RGF5OlwiW+CkleCkvuCksl0gTFRcIixsYXN0V2VlazpcIlvgpK7gpL7gpJfgpYDgpLJdIGRkZGQsIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXPgpK7gpKfgpY3gpK/gpYdcIixwYXN0OlwiJXPgpKrgpYLgpLDgpY3gpLXgpYBcIixzOnJlbGF0aXZlVGltZU1yLHNzOnJlbGF0aXZlVGltZU1yLG06cmVsYXRpdmVUaW1lTXIsbW06cmVsYXRpdmVUaW1lTXIsaDpyZWxhdGl2ZVRpbWVNcixoaDpyZWxhdGl2ZVRpbWVNcixkOnJlbGF0aXZlVGltZU1yLGRkOnJlbGF0aXZlVGltZU1yLE06cmVsYXRpdmVUaW1lTXIsTU06cmVsYXRpdmVUaW1lTXIseTpyZWxhdGl2ZVRpbWVNcix5eTpyZWxhdGl2ZVRpbWVNcn0scHJlcGFyc2U6ZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgpafgpajgpangpargpavgpazgpa3gpa7gpa/gpaZdL2csKGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gbnVtYmVyTWFwW21hdGNoXX0pKX0scG9zdGZvcm1hdDpmdW5jdGlvbihzdHJpbmcpe3JldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csKGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gc3ltYm9sTWFwW21hdGNoXX0pKX0sbWVyaWRpZW1QYXJzZTov4KSq4KS54KS+4KSf4KWHfOCkuOCkleCkvuCks+ClgHzgpKbgpYHgpKrgpL7gpLDgpYB84KS44KS+4KSv4KSC4KSV4KS+4KSz4KWAfOCksOCkvuCkpOCljeCksOClgC8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGhvdXIsbWVyaWRpZW0pe3JldHVybiAxMj09PWhvdXImJihob3VyPTApLFwi4KSq4KS54KS+4KSf4KWHXCI9PT1tZXJpZGllbXx8XCLgpLjgpJXgpL7gpLPgpYBcIj09PW1lcmlkaWVtP2hvdXI6XCLgpKbgpYHgpKrgpL7gpLDgpYBcIj09PW1lcmlkaWVtfHxcIuCkuOCkvuCkr+CkguCkleCkvuCks+ClgFwiPT09bWVyaWRpZW18fFwi4KSw4KS+4KSk4KWN4KSw4KWAXCI9PT1tZXJpZGllbT9ob3VyPj0xMj9ob3VyOmhvdXIrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihob3VyLG1pbnV0ZSxpc0xvd2VyKXtyZXR1cm4gaG91cj49MCYmaG91cjw2P1wi4KSq4KS54KS+4KSf4KWHXCI6aG91cjwxMj9cIuCkuOCkleCkvuCks+ClgFwiOmhvdXI8MTc/XCLgpKbgpYHgpKrgpL7gpLDgpYBcIjpob3VyPDIwP1wi4KS44KS+4KSv4KSC4KSV4KS+4KSz4KWAXCI6XCLgpLDgpL7gpKTgpY3gpLDgpYBcIn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwibXNcIix7bW9udGhzOlwiSmFudWFyaV9GZWJydWFyaV9NYWNfQXByaWxfTWVpX0p1bl9KdWxhaV9PZ29zX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rpc2VtYmVyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9EaXNcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCJBaGFkX0lzbmluX1NlbGFzYV9SYWJ1X0toYW1pc19KdW1hYXRfU2FidHVcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIkFoZF9Jc25fU2VsX1JhYl9LaGFfSnVtX1NhYlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIkFoX0lzX1NsX1JiX0ttX0ptX1NiXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhILm1tXCIsTFRTOlwiSEgubW0uc3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW1cIn0sbWVyaWRpZW1QYXJzZTovcGFnaXx0ZW5nYWhhcml8cGV0YW5nfG1hbGFtLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oaG91cixtZXJpZGllbSl7cmV0dXJuIDEyPT09aG91ciYmKGhvdXI9MCksXCJwYWdpXCI9PT1tZXJpZGllbT9ob3VyOlwidGVuZ2FoYXJpXCI9PT1tZXJpZGllbT9ob3VyPj0xMT9ob3VyOmhvdXIrMTI6XCJwZXRhbmdcIj09PW1lcmlkaWVtfHxcIm1hbGFtXCI9PT1tZXJpZGllbT9ob3VyKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oaG91cnMsbWludXRlcyxpc0xvd2VyKXtyZXR1cm4gaG91cnM8MTE/XCJwYWdpXCI6aG91cnM8MTU/XCJ0ZW5nYWhhcmlcIjpob3VyczwxOT9cInBldGFuZ1wiOlwibWFsYW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJbSGFyaSBpbmkgcHVrdWxdIExUXCIsbmV4dERheTpcIltFc29rIHB1a3VsXSBMVFwiLG5leHRXZWVrOlwiZGRkZCBbcHVrdWxdIExUXCIsbGFzdERheTpcIltLZWxtYXJpbiBwdWt1bF0gTFRcIixsYXN0V2VlazpcImRkZGQgW2xlcGFzIHB1a3VsXSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImRhbGFtICVzXCIscGFzdDpcIiVzIHlhbmcgbGVwYXNcIixzOlwiYmViZXJhcGEgc2FhdFwiLHNzOlwiJWQgc2FhdFwiLG06XCJzZW1pbml0XCIsbW06XCIlZCBtaW5pdFwiLGg6XCJzZWphbVwiLGhoOlwiJWQgamFtXCIsZDpcInNlaGFyaVwiLGRkOlwiJWQgaGFyaVwiLE06XCJzZWJ1bGFuXCIsTU06XCIlZCBidWxhblwiLHk6XCJzZXRhaHVuXCIseXk6XCIlZCB0YWh1blwifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO21vbWVudC5kZWZpbmVMb2NhbGUoXCJtcy1teVwiLHttb250aHM6XCJKYW51YXJpX0ZlYnJ1YXJpX01hY19BcHJpbF9NZWlfSnVuX0p1bGFpX09nb3NfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGlzZW1iZXJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJKYW5fRmViX01hY19BcHJfTWVpX0p1bl9KdWxfT2dzX1NlcF9Pa3RfTm92X0Rpc1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcIkFoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0dVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiQWhkX0lzbl9TZWxfUmFiX0toYV9KdW1fU2FiXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiQWhfSXNfU2xfUmJfS21fSm1fU2JcIi5zcGxpdChcIl9cIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEgubW1cIixMVFM6XCJISC5tbS5zc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbVwifSxtZXJpZGllbVBhcnNlOi9wYWdpfHRlbmdhaGFyaXxwZXRhbmd8bWFsYW0vLG1lcmlkaWVtSG91cjpmdW5jdGlvbihob3VyLG1lcmlkaWVtKXtyZXR1cm4gMTI9PT1ob3VyJiYoaG91cj0wKSxcInBhZ2lcIj09PW1lcmlkaWVtP2hvdXI6XCJ0ZW5nYWhhcmlcIj09PW1lcmlkaWVtP2hvdXI+PTExP2hvdXI6aG91cisxMjpcInBldGFuZ1wiPT09bWVyaWRpZW18fFwibWFsYW1cIj09PW1lcmlkaWVtP2hvdXIrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihob3VycyxtaW51dGVzLGlzTG93ZXIpe3JldHVybiBob3VyczwxMT9cInBhZ2lcIjpob3VyczwxNT9cInRlbmdhaGFyaVwiOmhvdXJzPDE5P1wicGV0YW5nXCI6XCJtYWxhbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIltIYXJpIGluaSBwdWt1bF0gTFRcIixuZXh0RGF5OlwiW0Vzb2sgcHVrdWxdIExUXCIsbmV4dFdlZWs6XCJkZGRkIFtwdWt1bF0gTFRcIixsYXN0RGF5OlwiW0tlbG1hcmluIHB1a3VsXSBMVFwiLGxhc3RXZWVrOlwiZGRkZCBbbGVwYXMgcHVrdWxdIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiZGFsYW0gJXNcIixwYXN0OlwiJXMgeWFuZyBsZXBhc1wiLHM6XCJiZWJlcmFwYSBzYWF0XCIsc3M6XCIlZCBzYWF0XCIsbTpcInNlbWluaXRcIixtbTpcIiVkIG1pbml0XCIsaDpcInNlamFtXCIsaGg6XCIlZCBqYW1cIixkOlwic2VoYXJpXCIsZGQ6XCIlZCBoYXJpXCIsTTpcInNlYnVsYW5cIixNTTpcIiVkIGJ1bGFuXCIseTpcInNldGFodW5cIix5eTpcIiVkIHRhaHVuXCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7bW9tZW50LmRlZmluZUxvY2FsZShcIm10XCIse21vbnRoczpcIkphbm5hcl9GcmFyX01hcnp1X0FwcmlsX01lamp1X8SgdW5qdV9MdWxqdV9Bd3dpc3N1X1NldHRlbWJydV9PdHR1YnJ1X05vdmVtYnJ1X0RpxItlbWJydVwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIkphbl9GcmFfTWFyX0Fwcl9NZWpfxKB1bl9MdWxfQXd3X1NldF9PdHRfTm92X0RpxItcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCJJbC3EpmFkZF9JdC1UbmVqbl9JdC1UbGlldGFfTC1FcmJnxKdhX0lsLcSmYW1pc19JbC3EoGltZ8SnYV9Jcy1TaWJ0XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLEpmFkX1RuZV9UbGlfRXJiX8SmYW1fxKBpbV9TaWJcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLEpmFfVG5fVGxfRXJfxKZhX8SgaV9TaVwiLnNwbGl0KFwiX1wiKSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJbSWxsdW0gZmlsLV1MVFwiLG5leHREYXk6XCJbR8SnYWRhIGZpbC1dTFRcIixuZXh0V2VlazpcImRkZGQgW2ZpbC1dTFRcIixsYXN0RGF5OlwiW0lsLWJpZXJhxKcgZmlsLV1MVFwiLGxhc3RXZWVrOlwiZGRkZCBbbGkgZ8SnYWRkYV0gW2ZpbC1dTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJm4oCZICVzXCIscGFzdDpcIiVzIGlsdVwiLHM6XCJmdGl0IHNla29uZGlcIixzczpcIiVkIHNla29uZGlcIixtOlwibWludXRhXCIsbW06XCIlZCBtaW51dGlcIixoOlwic2llZ8SnYVwiLGhoOlwiJWQgc2llZ8SnYXRcIixkOlwixKF1cm5hdGFcIixkZDpcIiVkIMShcmFuZXRcIixNOlwieGFoYXJcIixNTTpcIiVkIHhodXJcIix5Olwic2VuYVwiLHl5OlwiJWQgc25pXCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9wrovLG9yZGluYWw6XCIlZMK6XCIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjt2YXIgc3ltYm9sTWFwPXsxOlwi4YGBXCIsMjpcIuGBglwiLDM6XCLhgYNcIiw0Olwi4YGEXCIsNTpcIuGBhVwiLDY6XCLhgYZcIiw3Olwi4YGHXCIsODpcIuGBiFwiLDk6XCLhgYlcIiwwOlwi4YGAXCJ9LG51bWJlck1hcD17XCLhgYFcIjpcIjFcIixcIuGBglwiOlwiMlwiLFwi4YGDXCI6XCIzXCIsXCLhgYRcIjpcIjRcIixcIuGBhVwiOlwiNVwiLFwi4YGGXCI6XCI2XCIsXCLhgYdcIjpcIjdcIixcIuGBiFwiOlwiOFwiLFwi4YGJXCI6XCI5XCIsXCLhgYBcIjpcIjBcIn07bW9tZW50LmRlZmluZUxvY2FsZShcIm15XCIse21vbnRoczpcIuGAh+GAlOGAuuGAlOGAneGAq+GAm+GArl/hgJbhgLHhgJbhgLHhgKzhgLrhgJ3hgKvhgJvhgK5f4YCZ4YCQ4YC6X+GAp+GAleGAvOGArl/hgJnhgLFf4YCH4YC94YCU4YC6X+GAh+GAsOGAnOGAreGAr+GAhOGAul/hgJ7hgLzhgILhgK/hgJDhgLpf4YCF4YCA4YC64YCQ4YCE4YC64YCY4YCsX+GAoeGAseGArOGAgOGAuuGAkOGAreGAr+GAmOGArF/hgJThgK3hgK/hgJ3hgIThgLrhgJjhgKxf4YCS4YCu4YCH4YCE4YC64YCY4YCsXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0Olwi4YCH4YCU4YC6X+GAluGAsV/hgJnhgJDhgLpf4YCV4YC84YCuX+GAmeGAsV/hgIfhgL3hgJThgLpf4YCc4YCt4YCv4YCE4YC6X+GAnuGAvF/hgIXhgIDhgLpf4YCh4YCx4YCs4YCA4YC6X+GAlOGAreGAr1/hgJLhgK5cIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCLhgJDhgJThgIThgLrhgLnhgILhgJThgL3hgLFf4YCQ4YCU4YCE4YC64YC54YCc4YCsX+GAoeGAhOGAuuGAueGAguGAq1/hgJfhgK/hgJLhgLnhgJPhgJ/hgLDhgLhf4YCA4YC84YCs4YCe4YCV4YCQ4YCx4YC4X+GAnuGAseGArOGAgOGAvOGArF/hgIXhgJThgLFcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIuGAlOGAveGAsV/hgJzhgKxf4YCC4YCrX+GAn+GAsOGAuF/hgIDhgLzhgKxf4YCe4YCx4YCsX+GAlOGAsVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuGAlOGAveGAsV/hgJzhgKxf4YCC4YCrX+GAn+GAsOGAuF/hgIDhgLzhgKxf4YCe4YCx4YCsX+GAlOGAsVwiLnNwbGl0KFwiX1wiKSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCBEIE1NTU0gWVlZWSBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIlvhgJrhgJThgLEuXSBMVCBb4YCZ4YC+4YCsXVwiLG5leHREYXk6XCJb4YCZ4YCU4YCA4YC64YCW4YC84YCU4YC6XSBMVCBb4YCZ4YC+4YCsXVwiLG5leHRXZWVrOlwiZGRkZCBMVCBb4YCZ4YC+4YCsXVwiLGxhc3REYXk6XCJb4YCZ4YCU4YCxLuGAgF0gTFQgW+GAmeGAvuGArF1cIixsYXN0V2VlazpcIlvhgJXhgLzhgK7hgLjhgIHhgLLhgLfhgJ7hgLHhgKxdIGRkZGQgTFQgW+GAmeGAvuGArF1cIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCLhgJzhgKzhgJnhgIrhgLrhgLcgJXMg4YCZ4YC+4YCsXCIscGFzdDpcIuGAnOGAveGAlOGAuuGAgeGAsuGAt+GAnuGAseGArCAlcyDhgIBcIixzOlwi4YCF4YCA4YC54YCA4YCU4YC6LuGAoeGAlOGAiuGAuuGAuOGAhOGAmuGAulwiLHNzOlwiJWQg4YCF4YCA4YC54YCA4YCU4YC34YC6XCIsbTpcIuGAkOGAheGAuuGAmeGAreGAlOGAheGAulwiLG1tOlwiJWQg4YCZ4YCt4YCU4YCF4YC6XCIsaDpcIuGAkOGAheGAuuGAlOGArOGAm+GArlwiLGhoOlwiJWQg4YCU4YCs4YCb4YCuXCIsZDpcIuGAkOGAheGAuuGAm+GAgOGAulwiLGRkOlwiJWQg4YCb4YCA4YC6XCIsTTpcIuGAkOGAheGAuuGAnFwiLE1NOlwiJWQg4YCcXCIseTpcIuGAkOGAheGAuuGAlOGAvuGAheGAulwiLHl5OlwiJWQg4YCU4YC+4YCF4YC6XCJ9LHByZXBhcnNlOmZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4YGB4YGC4YGD4YGE4YGF4YGG4YGH4YGI4YGJ4YGAXS9nLChmdW5jdGlvbihtYXRjaCl7cmV0dXJuIG51bWJlck1hcFttYXRjaF19KSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLChmdW5jdGlvbihtYXRjaCl7cmV0dXJuIHN5bWJvbE1hcFttYXRjaF19KSl9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7bW9tZW50LmRlZmluZUxvY2FsZShcIm5iXCIse21vbnRoczpcImphbnVhcl9mZWJydWFyX21hcnNfYXByaWxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJqYW4uX2ZlYi5fbWFyc19hcHIuX21haV9qdW5pX2p1bGlfYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6XCJzw7huZGFnX21hbmRhZ190aXJzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sw7hyZGFnXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJzw7guX21hLl90aS5fb24uX3RvLl9mci5fbMO4LlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcInPDuF9tYV90aV9vbl90b19mcl9sw7hcIi5zcGxpdChcIl9cIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQuTU0uWVlZWVwiLExMOlwiRC4gTU1NTSBZWVlZXCIsTExMOlwiRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tXCIsTExMTDpcImRkZGQgRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW2kgZGFnIGtsLl0gTFRcIixuZXh0RGF5OlwiW2kgbW9yZ2VuIGtsLl0gTFRcIixuZXh0V2VlazpcImRkZGQgW2tsLl0gTFRcIixsYXN0RGF5OlwiW2kgZ8OlciBrbC5dIExUXCIsbGFzdFdlZWs6XCJbZm9ycmlnZV0gZGRkZCBba2wuXSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIm9tICVzXCIscGFzdDpcIiVzIHNpZGVuXCIsczpcIm5vZW4gc2VrdW5kZXJcIixzczpcIiVkIHNla3VuZGVyXCIsbTpcImV0dCBtaW51dHRcIixtbTpcIiVkIG1pbnV0dGVyXCIsaDpcImVuIHRpbWVcIixoaDpcIiVkIHRpbWVyXCIsZDpcImVuIGRhZ1wiLGRkOlwiJWQgZGFnZXJcIix3OlwiZW4gdWtlXCIsd3c6XCIlZCB1a2VyXCIsTTpcImVuIG3DpW5lZFwiLE1NOlwiJWQgbcOlbmVkZXJcIix5OlwiZXR0IMOlclwiLHl5OlwiJWQgw6VyXCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9XFwuLyxvcmRpbmFsOlwiJWQuXCIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjt2YXIgc3ltYm9sTWFwPXsxOlwi4KWnXCIsMjpcIuClqFwiLDM6XCLgpalcIiw0Olwi4KWqXCIsNTpcIuClq1wiLDY6XCLgpaxcIiw3Olwi4KWtXCIsODpcIuClrlwiLDk6XCLgpa9cIiwwOlwi4KWmXCJ9LG51bWJlck1hcD17XCLgpadcIjpcIjFcIixcIuClqFwiOlwiMlwiLFwi4KWpXCI6XCIzXCIsXCLgpapcIjpcIjRcIixcIuClq1wiOlwiNVwiLFwi4KWsXCI6XCI2XCIsXCLgpa1cIjpcIjdcIixcIuClrlwiOlwiOFwiLFwi4KWvXCI6XCI5XCIsXCLgpaZcIjpcIjBcIn07bW9tZW50LmRlZmluZUxvY2FsZShcIm5lXCIse21vbnRoczpcIuCknOCkqOCkteCksOClgF/gpKvgpYfgpKzgpY3gpLDgpYHgpLXgpLDgpYBf4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCkv+Cksl/gpK7gpIhf4KSc4KWB4KSoX+CknOClgeCksuCkvuCkiF/gpIXgpJfgpLfgpY3gpJ9f4KS44KWH4KSq4KWN4KSf4KWH4KSu4KWN4KSs4KSwX+CkheCkleCljeCkn+Cli+CkrOCksF/gpKjgpYvgpK3gpYfgpK7gpY3gpKzgpLBf4KSh4KS/4KS44KWH4KSu4KWN4KSs4KSwXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0Olwi4KSc4KSoLl/gpKvgpYfgpKzgpY3gpLDgpYEuX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpL8uX+CkruCkiF/gpJzgpYHgpKhf4KSc4KWB4KSy4KS+4KSILl/gpIXgpJcuX+CkuOClh+CkquCljeCkny5f4KSF4KSV4KWN4KSf4KWLLl/gpKjgpYvgpK3gpYcuX+CkoeCkv+CkuOClhy5cIi5zcGxpdChcIl9cIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpcIuCkhuCkh+CkpOCkrOCkvuCksF/gpLjgpYvgpK7gpKzgpL7gpLBf4KSu4KSZ4KWN4KSX4KSy4KSs4KS+4KSwX+CkrOClgeCkp+CkrOCkvuCksF/gpKzgpL/gpLngpL/gpKzgpL7gpLBf4KS24KWB4KSV4KWN4KSw4KSs4KS+4KSwX+CktuCkqOCkv+CkrOCkvuCksFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi4KSG4KSH4KSkLl/gpLjgpYvgpK4uX+CkruCkmeCljeCkl+Cksi5f4KSs4KWB4KSnLl/gpKzgpL/gpLngpL8uX+CktuClgeCkleCljeCksC5f4KS24KSo4KS/LlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuCkhi5f4KS44KWLLl/gpK7gpIIuX+CkrOClgS5f4KSs4KS/Ll/gpLbgpYEuX+Ckti5cIi5zcGxpdChcIl9cIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDpcIkHgpJXgpYsgaDptbSDgpKzgpJzgpYdcIixMVFM6XCJB4KSV4KWLIGg6bW06c3Mg4KSs4KSc4KWHXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVksIEHgpJXgpYsgaDptbSDgpKzgpJzgpYdcIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVksIEHgpJXgpYsgaDptbSDgpKzgpJzgpYdcIn0scHJlcGFyc2U6ZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgpafgpajgpangpargpavgpazgpa3gpa7gpa/gpaZdL2csKGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gbnVtYmVyTWFwW21hdGNoXX0pKX0scG9zdGZvcm1hdDpmdW5jdGlvbihzdHJpbmcpe3JldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csKGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gc3ltYm9sTWFwW21hdGNoXX0pKX0sbWVyaWRpZW1QYXJzZTov4KSw4KS+4KSk4KS/fOCkrOCkv+CkueCkvuCkqHzgpKbgpL/gpIngpIHgpLjgpYt84KS44KS+4KSB4KSdLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oaG91cixtZXJpZGllbSl7cmV0dXJuIDEyPT09aG91ciYmKGhvdXI9MCksXCLgpLDgpL7gpKTgpL9cIj09PW1lcmlkaWVtP2hvdXI8ND9ob3VyOmhvdXIrMTI6XCLgpKzgpL/gpLngpL7gpKhcIj09PW1lcmlkaWVtP2hvdXI6XCLgpKbgpL/gpIngpIHgpLjgpYtcIj09PW1lcmlkaWVtP2hvdXI+PTEwP2hvdXI6aG91cisxMjpcIuCkuOCkvuCkgeCknVwiPT09bWVyaWRpZW0/aG91cisxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGhvdXIsbWludXRlLGlzTG93ZXIpe3JldHVybiBob3VyPDM/XCLgpLDgpL7gpKTgpL9cIjpob3VyPDEyP1wi4KSs4KS/4KS54KS+4KSoXCI6aG91cjwxNj9cIuCkpuCkv+CkieCkgeCkuOCli1wiOmhvdXI8MjA/XCLgpLjgpL7gpIHgpJ1cIjpcIuCksOCkvuCkpOCkv1wifSxjYWxlbmRhcjp7c2FtZURheTpcIlvgpIbgpJxdIExUXCIsbmV4dERheTpcIlvgpK3gpYvgpLLgpL9dIExUXCIsbmV4dFdlZWs6XCJb4KSG4KSJ4KSB4KSm4KWLXSBkZGRkWyxdIExUXCIsbGFzdERheTpcIlvgpLngpL/gpJzgpYtdIExUXCIsbGFzdFdlZWs6XCJb4KSX4KSP4KSV4KWLXSBkZGRkWyxdIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXPgpK7gpL5cIixwYXN0OlwiJXMg4KSF4KSX4KS+4KSh4KS/XCIsczpcIuCkleClh+CkueClgCDgpJXgpY3gpLfgpKNcIixzczpcIiVkIOCkuOClh+CkleClh+Cko+CljeCkoVwiLG06XCLgpI/gpJUg4KSu4KS/4KSo4KWH4KSfXCIsbW06XCIlZCDgpK7gpL/gpKjgpYfgpJ9cIixoOlwi4KSP4KSVIOCkmOCko+CljeCkn+CkvlwiLGhoOlwiJWQg4KSY4KSj4KWN4KSf4KS+XCIsZDpcIuCkj+CklSDgpKbgpL/gpKhcIixkZDpcIiVkIOCkpuCkv+CkqFwiLE06XCLgpI/gpJUg4KSu4KS54KS/4KSo4KS+XCIsTU06XCIlZCDgpK7gpLngpL/gpKjgpL5cIix5Olwi4KSP4KSVIOCkrOCksOCljeCkt1wiLHl5OlwiJWQg4KSs4KSw4KWN4KS3XCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG1vbnRoc1Nob3J0V2l0aERvdHM9XCJqYW4uX2ZlYi5fbXJ0Ll9hcHIuX21laV9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZWMuXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0V2l0aG91dERvdHM9XCJqYW5fZmViX21ydF9hcHJfbWVpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlY1wiLnNwbGl0KFwiX1wiKSxtb250aHNQYXJzZT1bL15qYW4vaSwvXmZlYi9pLC9ebWFhcnR8bXJ0Lj8kL2ksL15hcHIvaSwvXm1laSQvaSwvXmp1bltpLl0/JC9pLC9eanVsW2kuXT8kL2ksL15hdWcvaSwvXnNlcC9pLC9eb2t0L2ksL15ub3YvaSwvXmRlYy9pXSxtb250aHNSZWdleD0vXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyfGphblxcLj98ZmViXFwuP3xtcnRcXC4/fGFwclxcLj98anVbbmxdXFwuP3xhdWdcXC4/fHNlcFxcLj98b2t0XFwuP3xub3ZcXC4/fGRlY1xcLj8pL2k7bW9tZW50LmRlZmluZUxvY2FsZShcIm5sXCIse21vbnRoczpcImphbnVhcmlfZmVicnVhcmlfbWFhcnRfYXByaWxfbWVpX2p1bmlfanVsaV9hdWd1c3R1c19zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpmdW5jdGlvbihtLGZvcm1hdCl7cmV0dXJuIG0/Ly1NTU0tLy50ZXN0KGZvcm1hdCk/bW9udGhzU2hvcnRXaXRob3V0RG90c1ttLm1vbnRoKCldOm1vbnRoc1Nob3J0V2l0aERvdHNbbS5tb250aCgpXTptb250aHNTaG9ydFdpdGhEb3RzfSxtb250aHNSZWdleDptb250aHNSZWdleCxtb250aHNTaG9ydFJlZ2V4Om1vbnRoc1JlZ2V4LG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihqYW5cXC4/fGZlYlxcLj98bXJ0XFwuP3xhcHJcXC4/fG1laXxqdVtubF1cXC4/fGF1Z1xcLj98c2VwXFwuP3xva3RcXC4/fG5vdlxcLj98ZGVjXFwuPykvaSxtb250aHNQYXJzZTptb250aHNQYXJzZSxsb25nTW9udGhzUGFyc2U6bW9udGhzUGFyc2Usc2hvcnRNb250aHNQYXJzZTptb250aHNQYXJzZSx3ZWVrZGF5czpcInpvbmRhZ19tYWFuZGFnX2RpbnNkYWdfd29lbnNkYWdfZG9uZGVyZGFnX3ZyaWpkYWdfemF0ZXJkYWdcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcInpvLl9tYS5fZGkuX3dvLl9kby5fdnIuX3phLlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcInpvX21hX2RpX3dvX2RvX3ZyX3phXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkRELU1NLVlZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCBEIE1NTU0gWVlZWSBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIlt2YW5kYWFnIG9tXSBMVFwiLG5leHREYXk6XCJbbW9yZ2VuIG9tXSBMVFwiLG5leHRXZWVrOlwiZGRkZCBbb21dIExUXCIsbGFzdERheTpcIltnaXN0ZXJlbiBvbV0gTFRcIixsYXN0V2VlazpcIlthZmdlbG9wZW5dIGRkZGQgW29tXSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIm92ZXIgJXNcIixwYXN0OlwiJXMgZ2VsZWRlblwiLHM6XCJlZW4gcGFhciBzZWNvbmRlblwiLHNzOlwiJWQgc2Vjb25kZW5cIixtOlwiw6nDqW4gbWludXV0XCIsbW06XCIlZCBtaW51dGVuXCIsaDpcIsOpw6luIHV1clwiLGhoOlwiJWQgdXVyXCIsZDpcIsOpw6luIGRhZ1wiLGRkOlwiJWQgZGFnZW5cIix3Olwiw6nDqW4gd2Vla1wiLHd3OlwiJWQgd2VrZW5cIixNOlwiw6nDqW4gbWFhbmRcIixNTTpcIiVkIG1hYW5kZW5cIix5Olwiw6nDqW4gamFhclwiLHl5OlwiJWQgamFhclwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfShzdGV8ZGUpLyxvcmRpbmFsOmZ1bmN0aW9uKG51bWJlcil7cmV0dXJuIG51bWJlcisoMT09PW51bWJlcnx8OD09PW51bWJlcnx8bnVtYmVyPj0yMD9cInN0ZVwiOlwiZGVcIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG1vbnRoc1Nob3J0V2l0aERvdHM9XCJqYW4uX2ZlYi5fbXJ0Ll9hcHIuX21laV9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZWMuXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0V2l0aG91dERvdHM9XCJqYW5fZmViX21ydF9hcHJfbWVpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlY1wiLnNwbGl0KFwiX1wiKSxtb250aHNQYXJzZT1bL15qYW4vaSwvXmZlYi9pLC9ebWFhcnR8bXJ0Lj8kL2ksL15hcHIvaSwvXm1laSQvaSwvXmp1bltpLl0/JC9pLC9eanVsW2kuXT8kL2ksL15hdWcvaSwvXnNlcC9pLC9eb2t0L2ksL15ub3YvaSwvXmRlYy9pXSxtb250aHNSZWdleD0vXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyfGphblxcLj98ZmViXFwuP3xtcnRcXC4/fGFwclxcLj98anVbbmxdXFwuP3xhdWdcXC4/fHNlcFxcLj98b2t0XFwuP3xub3ZcXC4/fGRlY1xcLj8pL2k7bW9tZW50LmRlZmluZUxvY2FsZShcIm5sLWJlXCIse21vbnRoczpcImphbnVhcmlfZmVicnVhcmlfbWFhcnRfYXByaWxfbWVpX2p1bmlfanVsaV9hdWd1c3R1c19zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpmdW5jdGlvbihtLGZvcm1hdCl7cmV0dXJuIG0/Ly1NTU0tLy50ZXN0KGZvcm1hdCk/bW9udGhzU2hvcnRXaXRob3V0RG90c1ttLm1vbnRoKCldOm1vbnRoc1Nob3J0V2l0aERvdHNbbS5tb250aCgpXTptb250aHNTaG9ydFdpdGhEb3RzfSxtb250aHNSZWdleDptb250aHNSZWdleCxtb250aHNTaG9ydFJlZ2V4Om1vbnRoc1JlZ2V4LG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihqYW5cXC4/fGZlYlxcLj98bXJ0XFwuP3xhcHJcXC4/fG1laXxqdVtubF1cXC4/fGF1Z1xcLj98c2VwXFwuP3xva3RcXC4/fG5vdlxcLj98ZGVjXFwuPykvaSxtb250aHNQYXJzZTptb250aHNQYXJzZSxsb25nTW9udGhzUGFyc2U6bW9udGhzUGFyc2Usc2hvcnRNb250aHNQYXJzZTptb250aHNQYXJzZSx3ZWVrZGF5czpcInpvbmRhZ19tYWFuZGFnX2RpbnNkYWdfd29lbnNkYWdfZG9uZGVyZGFnX3ZyaWpkYWdfemF0ZXJkYWdcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcInpvLl9tYS5fZGkuX3dvLl9kby5fdnIuX3phLlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcInpvX21hX2RpX3dvX2RvX3ZyX3phXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCBEIE1NTU0gWVlZWSBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIlt2YW5kYWFnIG9tXSBMVFwiLG5leHREYXk6XCJbbW9yZ2VuIG9tXSBMVFwiLG5leHRXZWVrOlwiZGRkZCBbb21dIExUXCIsbGFzdERheTpcIltnaXN0ZXJlbiBvbV0gTFRcIixsYXN0V2VlazpcIlthZmdlbG9wZW5dIGRkZGQgW29tXSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIm92ZXIgJXNcIixwYXN0OlwiJXMgZ2VsZWRlblwiLHM6XCJlZW4gcGFhciBzZWNvbmRlblwiLHNzOlwiJWQgc2Vjb25kZW5cIixtOlwiw6nDqW4gbWludXV0XCIsbW06XCIlZCBtaW51dGVuXCIsaDpcIsOpw6luIHV1clwiLGhoOlwiJWQgdXVyXCIsZDpcIsOpw6luIGRhZ1wiLGRkOlwiJWQgZGFnZW5cIixNOlwiw6nDqW4gbWFhbmRcIixNTTpcIiVkIG1hYW5kZW5cIix5Olwiw6nDqW4gamFhclwiLHl5OlwiJWQgamFhclwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfShzdGV8ZGUpLyxvcmRpbmFsOmZ1bmN0aW9uKG51bWJlcil7cmV0dXJuIG51bWJlcisoMT09PW51bWJlcnx8OD09PW51bWJlcnx8bnVtYmVyPj0yMD9cInN0ZVwiOlwiZGVcIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7bW9tZW50LmRlZmluZUxvY2FsZShcIm5uXCIse21vbnRoczpcImphbnVhcl9mZWJydWFyX21hcnNfYXByaWxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJqYW4uX2ZlYi5fbWFyc19hcHIuX21haV9qdW5pX2p1bGlfYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6XCJzdW5kYWdfbcOlbmRhZ190eXNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2xhdXJkYWdcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcInN1Ll9tw6UuX3R5Ll9vbi5fdG8uX2ZyLl9sYXUuXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwic3VfbcOlX3R5X29uX3RvX2ZyX2xhXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkRELk1NLllZWVlcIixMTDpcIkQuIE1NTU0gWVlZWVwiLExMTDpcIkQuIE1NTU0gWVlZWSBba2wuXSBIOm1tXCIsTExMTDpcImRkZGQgRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW0kgZGFnIGtsb2trYV0gTFRcIixuZXh0RGF5OlwiW0kgbW9yZ29uIGtsb2trYV0gTFRcIixuZXh0V2VlazpcImRkZGQgW2tsb2trYV0gTFRcIixsYXN0RGF5OlwiW0kgZ8OlciBrbG9ra2FdIExUXCIsbGFzdFdlZWs6XCJbRsO4cmVnw6VhbmRlXSBkZGRkIFtrbG9ra2FdIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwib20gJXNcIixwYXN0OlwiJXMgc2lkYW5cIixzOlwibm9rcmUgc2VrdW5kXCIsc3M6XCIlZCBzZWt1bmRcIixtOlwiZWl0IG1pbnV0dFwiLG1tOlwiJWQgbWludXR0XCIsaDpcImVpbiB0aW1lXCIsaGg6XCIlZCB0aW1hclwiLGQ6XCJlaW4gZGFnXCIsZGQ6XCIlZCBkYWdhclwiLHc6XCJlaSB2ZWtlXCIsd3c6XCIlZCB2ZWtlclwiLE06XCJlaW4gbcOlbmFkXCIsTU06XCIlZCBtw6VuYWRlclwiLHk6XCJlaXQgw6VyXCIseXk6XCIlZCDDpXJcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn1cXC4vLG9yZGluYWw6XCIlZC5cIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO21vbWVudC5kZWZpbmVMb2NhbGUoXCJvYy1sbmNcIix7bW9udGhzOntzdGFuZGFsb25lOlwiZ2VuacOocl9mZWJyacOocl9tYXLDp19hYnJpbF9tYWlfanVuaF9qdWxoZXRfYWdvc3Rfc2V0ZW1icmVfb2N0w7JicmVfbm92ZW1icmVfZGVjZW1icmVcIi5zcGxpdChcIl9cIiksZm9ybWF0OlwiZGUgZ2VuacOocl9kZSBmZWJyacOocl9kZSBtYXLDp19kJ2FicmlsX2RlIG1haV9kZSBqdW5oX2RlIGp1bGhldF9kJ2Fnb3N0X2RlIHNldGVtYnJlX2Qnb2N0w7JicmVfZGUgbm92ZW1icmVfZGUgZGVjZW1icmVcIi5zcGxpdChcIl9cIiksaXNGb3JtYXQ6L0Rbb0RdPyhcXHMpK01NTU0vfSxtb250aHNTaG9ydDpcImdlbi5fZmVici5fbWFyw6dfYWJyLl9tYWlfanVuaF9qdWxoLl9hZ28uX3NldC5fb2N0Ll9ub3YuX2RlYy5cIi5zcGxpdChcIl9cIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpcImRpbWVuZ2VfZGlsdW5zX2RpbWFyc19kaW3DqGNyZXNfZGlqw7J1c19kaXZlbmRyZXNfZGlzc2FidGVcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcImRnLl9kbC5fZG0uX2RjLl9kai5fZHYuX2RzLlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcImRnX2RsX2RtX2RjX2RqX2R2X2RzXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJIOm1tXCIsTFRTOlwiSDptbTpzc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gW2RlXSBZWVlZXCIsbGw6XCJEIE1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFtkZV0gWVlZWSBbYV0gSDptbVwiLGxsbDpcIkQgTU1NIFlZWVksIEg6bW1cIixMTExMOlwiZGRkZCBEIE1NTU0gW2RlXSBZWVlZIFthXSBIOm1tXCIsbGxsbDpcImRkZCBEIE1NTSBZWVlZLCBIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW3XDqGkgYV0gTFRcIixuZXh0RGF5OlwiW2RlbWFuIGFdIExUXCIsbmV4dFdlZWs6XCJkZGRkIFthXSBMVFwiLGxhc3REYXk6XCJbacOociBhXSBMVFwiLGxhc3RXZWVrOlwiZGRkZCBbcGFzc2F0IGFdIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiZCdhcXXDrSAlc1wiLHBhc3Q6XCJmYSAlc1wiLHM6XCJ1bmFzIHNlZ29uZGFzXCIsc3M6XCIlZCBzZWdvbmRhc1wiLG06XCJ1bmEgbWludXRhXCIsbW06XCIlZCBtaW51dGFzXCIsaDpcInVuYSBvcmFcIixoaDpcIiVkIG9yYXNcIixkOlwidW4gam9yblwiLGRkOlwiJWQgam9ybnNcIixNOlwidW4gbWVzXCIsTU06XCIlZCBtZXNlc1wiLHk6XCJ1biBhblwiLHl5OlwiJWQgYW5zXCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9KHJ8bnx0fMOofGEpLyxvcmRpbmFsOmZ1bmN0aW9uKG51bWJlcixwZXJpb2Qpe3ZhciBvdXRwdXQ9MT09PW51bWJlcj9cInJcIjoyPT09bnVtYmVyP1wiblwiOjM9PT1udW1iZXI/XCJyXCI6ND09PW51bWJlcj9cInRcIjpcIsOoXCI7cmV0dXJuXCJ3XCIhPT1wZXJpb2QmJlwiV1wiIT09cGVyaW9kfHwob3V0cHV0PVwiYVwiKSxudW1iZXIrb3V0cHV0fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO3ZhciBzeW1ib2xNYXA9ezE6XCLgqadcIiwyOlwi4KmoXCIsMzpcIuCpqVwiLDQ6XCLgqapcIiw1Olwi4KmrXCIsNjpcIuCprFwiLDc6XCLgqa1cIiw4Olwi4KmuXCIsOTpcIuCpr1wiLDA6XCLgqaZcIn0sbnVtYmVyTWFwPXtcIuCpp1wiOlwiMVwiLFwi4KmoXCI6XCIyXCIsXCLgqalcIjpcIjNcIixcIuCpqlwiOlwiNFwiLFwi4KmrXCI6XCI1XCIsXCLgqaxcIjpcIjZcIixcIuCprVwiOlwiN1wiLFwi4KmuXCI6XCI4XCIsXCLgqa9cIjpcIjlcIixcIuCpplwiOlwiMFwifTttb21lbnQuZGVmaW5lTG9jYWxlKFwicGEtaW5cIix7bW9udGhzOlwi4Kic4Kio4Ki14Kiw4KmAX+Coq+CovOCosOCoteCosOCpgF/gqK7gqL7gqLDgqJpf4KiF4Kiq4KmN4Kiw4KmI4KiyX+CoruCoiF/gqJzgqYLgqKhf4Kic4KmB4Kiy4Ki+4KiIX+CoheCol+CouOCopF/gqLjgqKTgqbDgqKzgqLBf4KiF4KiV4Kik4KmC4Kis4KiwX+CoqOCoteCpsOCorOCosF/gqKbgqLjgqbDgqKzgqLBcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLgqJzgqKjgqLXgqLDgqYBf4Kir4Ki84Kiw4Ki14Kiw4KmAX+CoruCovuCosOComl/gqIXgqKrgqY3gqLDgqYjgqLJf4Kiu4KiIX+ConOCpguCoqF/gqJzgqYHgqLLgqL7gqIhf4KiF4KiX4Ki44KikX+CouOCopOCpsOCorOCosF/gqIXgqJXgqKTgqYLgqKzgqLBf4Kio4Ki14Kmw4Kis4KiwX+CopuCouOCpsOCorOCosFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcIuCokOCopOCoteCovuCosF/gqLjgqYvgqK7gqLXgqL7gqLBf4Kiu4Kmw4KiX4Kiy4Ki14Ki+4KiwX+CorOCpgeCop+CoteCovuCosF/gqLXgqYDgqLDgqLXgqL7gqLBf4Ki44Ki84KmB4Kmx4KiV4Kiw4Ki14Ki+4KiwX+CouOCovOCoqOCpgOComuCosOCoteCovuCosFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi4KiQ4KikX+CouOCpi+Corl/gqK7gqbDgqJfgqLJf4Kis4KmB4KinX+CoteCpgOCosF/gqLjgqLzgqYHgqJXgqLBf4Ki44Ki84Kio4KmAXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi4KiQ4KikX+CouOCpi+Corl/gqK7gqbDgqJfgqLJf4Kis4KmB4KinX+CoteCpgOCosF/gqLjgqLzgqYHgqJXgqLBf4Ki44Ki84Kio4KmAXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkEgaDptbSDgqLXgqJzgqYdcIixMVFM6XCJBIGg6bW06c3Mg4Ki14Kic4KmHXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVksIEEgaDptbSDgqLXgqJzgqYdcIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgqLXgqJzgqYdcIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJb4KiF4KicXSBMVFwiLG5leHREYXk6XCJb4KiV4KiyXSBMVFwiLG5leHRXZWVrOlwiW+CoheCol+CosuCovl0gZGRkZCwgTFRcIixsYXN0RGF5OlwiW+ColeCosl0gTFRcIixsYXN0V2VlazpcIlvgqKrgqL/gqJvgqLLgqYddIGRkZGQsIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXMg4Ki14Ki/4Kmx4KiaXCIscGFzdDpcIiVzIOCoquCov+Com+CosuCph1wiLHM6XCLgqJXgqYHgqJ0g4Ki44KiV4Ki/4Kmw4KifXCIsc3M6XCIlZCDgqLjgqJXgqL/gqbDgqJ9cIixtOlwi4KiH4KiVIOCoruCov+CpsOCon1wiLG1tOlwiJWQg4Kiu4Ki/4Kmw4KifXCIsaDpcIuCoh+CpseColSDgqJjgqbDgqJ/gqL5cIixoaDpcIiVkIOComOCpsOCon+Cph1wiLGQ6XCLgqIfgqbHgqJUg4Kim4Ki/4KioXCIsZGQ6XCIlZCDgqKbgqL/gqKhcIixNOlwi4KiH4Kmx4KiVIOCoruCoueCpgOCoqOCovlwiLE1NOlwiJWQg4Kiu4Ki54KmA4Kio4KmHXCIseTpcIuCoh+CpseColSDgqLjgqL7gqLJcIix5eTpcIiVkIOCouOCovuCoslwifSxwcmVwYXJzZTpmdW5jdGlvbihzdHJpbmcpe3JldHVybiBzdHJpbmcucmVwbGFjZSgvW+Cpp+CpqOCpqeCpquCpq+CprOCpreCpruCpr+Cppl0vZywoZnVuY3Rpb24obWF0Y2gpe3JldHVybiBudW1iZXJNYXBbbWF0Y2hdfSkpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywoZnVuY3Rpb24obWF0Y2gpe3JldHVybiBzeW1ib2xNYXBbbWF0Y2hdfSkpfSxtZXJpZGllbVBhcnNlOi/gqLDgqL7gqKR84Ki44Ki14KmH4KiwfOCopuCpgeCoquCoueCov+CosHzgqLjgqLzgqL7gqK4vLG1lcmlkaWVtSG91cjpmdW5jdGlvbihob3VyLG1lcmlkaWVtKXtyZXR1cm4gMTI9PT1ob3VyJiYoaG91cj0wKSxcIuCosOCovuCopFwiPT09bWVyaWRpZW0/aG91cjw0P2hvdXI6aG91cisxMjpcIuCouOCoteCph+CosFwiPT09bWVyaWRpZW0/aG91cjpcIuCopuCpgeCoquCoueCov+CosFwiPT09bWVyaWRpZW0/aG91cj49MTA/aG91cjpob3VyKzEyOlwi4Ki44Ki84Ki+4KiuXCI9PT1tZXJpZGllbT9ob3VyKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oaG91cixtaW51dGUsaXNMb3dlcil7cmV0dXJuIGhvdXI8ND9cIuCosOCovuCopFwiOmhvdXI8MTA/XCLgqLjgqLXgqYfgqLBcIjpob3VyPDE3P1wi4Kim4KmB4Kiq4Ki54Ki/4KiwXCI6aG91cjwyMD9cIuCouOCovOCovuCorlwiOlwi4Kiw4Ki+4KikXCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG1vbnRoc05vbWluYXRpdmU9XCJzdHljemXFhF9sdXR5X21hcnplY19rd2llY2llxYRfbWFqX2N6ZXJ3aWVjX2xpcGllY19zaWVycGllxYRfd3J6ZXNpZcWEX3Bhxbpkemllcm5pa19saXN0b3BhZF9ncnVkemllxYRcIi5zcGxpdChcIl9cIiksbW9udGhzU3ViamVjdGl2ZT1cInN0eWN6bmlhX2x1dGVnb19tYXJjYV9rd2lldG5pYV9tYWphX2N6ZXJ3Y2FfbGlwY2Ffc2llcnBuaWFfd3J6ZcWbbmlhX3Bhxbpkemllcm5pa2FfbGlzdG9wYWRhX2dydWRuaWFcIi5zcGxpdChcIl9cIiksbW9udGhzUGFyc2U9Wy9ec3R5L2ksL15sdXQvaSwvXm1hci9pLC9ea3dpL2ksL15tYWovaSwvXmN6ZS9pLC9ebGlwL2ksL15zaWUvaSwvXndyei9pLC9ecGHFui9pLC9ebGlzL2ksL15ncnUvaV07ZnVuY3Rpb24gcGx1cmFsKG4pe3JldHVybiBuJTEwPDUmJm4lMTA+MSYmfn4obi8xMCklMTAhPTF9ZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlcix3aXRob3V0U3VmZml4LGtleSl7dmFyIHJlc3VsdD1udW1iZXIrXCIgXCI7c3dpdGNoKGtleSl7Y2FzZVwic3NcIjpyZXR1cm4gcmVzdWx0KyhwbHVyYWwobnVtYmVyKT9cInNla3VuZHlcIjpcInNla3VuZFwiKTtjYXNlXCJtXCI6cmV0dXJuIHdpdGhvdXRTdWZmaXg/XCJtaW51dGFcIjpcIm1pbnV0xJlcIjtjYXNlXCJtbVwiOnJldHVybiByZXN1bHQrKHBsdXJhbChudW1iZXIpP1wibWludXR5XCI6XCJtaW51dFwiKTtjYXNlXCJoXCI6cmV0dXJuIHdpdGhvdXRTdWZmaXg/XCJnb2R6aW5hXCI6XCJnb2R6aW7EmVwiO2Nhc2VcImhoXCI6cmV0dXJuIHJlc3VsdCsocGx1cmFsKG51bWJlcik/XCJnb2R6aW55XCI6XCJnb2R6aW5cIik7Y2FzZVwid3dcIjpyZXR1cm4gcmVzdWx0KyhwbHVyYWwobnVtYmVyKT9cInR5Z29kbmllXCI6XCJ0eWdvZG5pXCIpO2Nhc2VcIk1NXCI6cmV0dXJuIHJlc3VsdCsocGx1cmFsKG51bWJlcik/XCJtaWVzacSFY2VcIjpcIm1pZXNpxJljeVwiKTtjYXNlXCJ5eVwiOnJldHVybiByZXN1bHQrKHBsdXJhbChudW1iZXIpP1wibGF0YVwiOlwibGF0XCIpfX1tb21lbnQuZGVmaW5lTG9jYWxlKFwicGxcIix7bW9udGhzOmZ1bmN0aW9uKG1vbWVudFRvRm9ybWF0LGZvcm1hdCl7cmV0dXJuIG1vbWVudFRvRm9ybWF0Py9EIE1NTU0vLnRlc3QoZm9ybWF0KT9tb250aHNTdWJqZWN0aXZlW21vbWVudFRvRm9ybWF0Lm1vbnRoKCldOm1vbnRoc05vbWluYXRpdmVbbW9tZW50VG9Gb3JtYXQubW9udGgoKV06bW9udGhzTm9taW5hdGl2ZX0sbW9udGhzU2hvcnQ6XCJzdHlfbHV0X21hcl9rd2lfbWFqX2N6ZV9saXBfc2llX3dyel9wYcW6X2xpc19ncnVcIi5zcGxpdChcIl9cIiksbW9udGhzUGFyc2U6bW9udGhzUGFyc2UsbG9uZ01vbnRoc1BhcnNlOm1vbnRoc1BhcnNlLHNob3J0TW9udGhzUGFyc2U6bW9udGhzUGFyc2Usd2Vla2RheXM6XCJuaWVkemllbGFfcG9uaWVkemlhxYJla193dG9yZWtfxZtyb2RhX2N6d2FydGVrX3BpxIV0ZWtfc29ib3RhXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJuZHpfcG9uX3d0X8Wbcl9jendfcHRfc29iXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiTmRfUG5fV3RfxZpyX0N6X1B0X1NvXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQuTU0uWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIltEemnFmyBvXSBMVFwiLG5leHREYXk6XCJbSnV0cm8gb10gTFRcIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuXCJbVyBuaWVkemllbMSZIG9dIExUXCI7Y2FzZSAyOnJldHVyblwiW1dlIHd0b3JlayBvXSBMVFwiO2Nhc2UgMzpyZXR1cm5cIltXIMWbcm9kxJkgb10gTFRcIjtjYXNlIDY6cmV0dXJuXCJbVyBzb2JvdMSZIG9dIExUXCI7ZGVmYXVsdDpyZXR1cm5cIltXXSBkZGRkIFtvXSBMVFwifX0sbGFzdERheTpcIltXY3pvcmFqIG9dIExUXCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVyblwiW1cgemVzesWCxIUgbmllZHppZWzEmSBvXSBMVFwiO2Nhc2UgMzpyZXR1cm5cIltXIHplc3rFgsSFIMWbcm9kxJkgb10gTFRcIjtjYXNlIDY6cmV0dXJuXCJbVyB6ZXN6xYLEhSBzb2JvdMSZIG9dIExUXCI7ZGVmYXVsdDpyZXR1cm5cIltXIHplc3rFgnldIGRkZGQgW29dIExUXCJ9fSxzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJ6YSAlc1wiLHBhc3Q6XCIlcyB0ZW11XCIsczpcImtpbGthIHNla3VuZFwiLHNzOnRyYW5zbGF0ZSxtOnRyYW5zbGF0ZSxtbTp0cmFuc2xhdGUsaDp0cmFuc2xhdGUsaGg6dHJhbnNsYXRlLGQ6XCIxIGR6aWXFhFwiLGRkOlwiJWQgZG5pXCIsdzpcInR5ZHppZcWEXCIsd3c6dHJhbnNsYXRlLE06XCJtaWVzacSFY1wiLE1NOnRyYW5zbGF0ZSx5Olwicm9rXCIseXk6dHJhbnNsYXRlfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfVxcLi8sb3JkaW5hbDpcIiVkLlwiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7bW9tZW50LmRlZmluZUxvY2FsZShcInB0XCIse21vbnRoczpcImphbmVpcm9fZmV2ZXJlaXJvX21hcsOnb19hYnJpbF9tYWlvX2p1bmhvX2p1bGhvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlemVtYnJvXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiamFuX2Zldl9tYXJfYWJyX21haV9qdW5fanVsX2Fnb19zZXRfb3V0X25vdl9kZXpcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCJEb21pbmdvX1NlZ3VuZGEtZmVpcmFfVGVyw6dhLWZlaXJhX1F1YXJ0YS1mZWlyYV9RdWludGEtZmVpcmFfU2V4dGEtZmVpcmFfU8OhYmFkb1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiRG9tX1NlZ19UZXJfUXVhX1F1aV9TZXhfU8OhYlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIkRvXzLCql8zwqpfNMKqXzXCql82wqpfU8OhXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgW2RlXSBNTU1NIFtkZV0gWVlZWVwiLExMTDpcIkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSEg6bW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJbSG9qZSDDoHNdIExUXCIsbmV4dERheTpcIltBbWFuaMOjIMOgc10gTFRcIixuZXh0V2VlazpcImRkZGQgW8Ogc10gTFRcIixsYXN0RGF5OlwiW09udGVtIMOgc10gTFRcIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5kYXkoKXx8Nj09PXRoaXMuZGF5KCk/XCJbw5psdGltb10gZGRkZCBbw6BzXSBMVFwiOlwiW8OabHRpbWFdIGRkZGQgW8Ogc10gTFRcIn0sc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiZW0gJXNcIixwYXN0OlwiaMOhICVzXCIsczpcInNlZ3VuZG9zXCIsc3M6XCIlZCBzZWd1bmRvc1wiLG06XCJ1bSBtaW51dG9cIixtbTpcIiVkIG1pbnV0b3NcIixoOlwidW1hIGhvcmFcIixoaDpcIiVkIGhvcmFzXCIsZDpcInVtIGRpYVwiLGRkOlwiJWQgZGlhc1wiLHc6XCJ1bWEgc2VtYW5hXCIsd3c6XCIlZCBzZW1hbmFzXCIsTTpcInVtIG3DqnNcIixNTTpcIiVkIG1lc2VzXCIseTpcInVtIGFub1wiLHl5OlwiJWQgYW5vc1wifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfcK6LyxvcmRpbmFsOlwiJWTCulwiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7bW9tZW50LmRlZmluZUxvY2FsZShcInB0LWJyXCIse21vbnRoczpcImphbmVpcm9fZmV2ZXJlaXJvX21hcsOnb19hYnJpbF9tYWlvX2p1bmhvX2p1bGhvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlemVtYnJvXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiamFuX2Zldl9tYXJfYWJyX21haV9qdW5fanVsX2Fnb19zZXRfb3V0X25vdl9kZXpcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCJkb21pbmdvX3NlZ3VuZGEtZmVpcmFfdGVyw6dhLWZlaXJhX3F1YXJ0YS1mZWlyYV9xdWludGEtZmVpcmFfc2V4dGEtZmVpcmFfc8OhYmFkb1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiZG9tX3NlZ190ZXJfcXVhX3F1aV9zZXhfc8OhYlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcImRvXzLCql8zwqpfNMKqXzXCql82wqpfc8OhXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgW2RlXSBNTU1NIFtkZV0gWVlZWVwiLExMTDpcIkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBbw6BzXSBISDptbVwiLExMTEw6XCJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgW8Ogc10gSEg6bW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJbSG9qZSDDoHNdIExUXCIsbmV4dERheTpcIltBbWFuaMOjIMOgc10gTFRcIixuZXh0V2VlazpcImRkZGQgW8Ogc10gTFRcIixsYXN0RGF5OlwiW09udGVtIMOgc10gTFRcIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5kYXkoKXx8Nj09PXRoaXMuZGF5KCk/XCJbw5psdGltb10gZGRkZCBbw6BzXSBMVFwiOlwiW8OabHRpbWFdIGRkZGQgW8Ogc10gTFRcIn0sc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiZW0gJXNcIixwYXN0OlwiaMOhICVzXCIsczpcInBvdWNvcyBzZWd1bmRvc1wiLHNzOlwiJWQgc2VndW5kb3NcIixtOlwidW0gbWludXRvXCIsbW06XCIlZCBtaW51dG9zXCIsaDpcInVtYSBob3JhXCIsaGg6XCIlZCBob3Jhc1wiLGQ6XCJ1bSBkaWFcIixkZDpcIiVkIGRpYXNcIixNOlwidW0gbcOqc1wiLE1NOlwiJWQgbWVzZXNcIix5OlwidW0gYW5vXCIseXk6XCIlZCBhbm9zXCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9wrovLG9yZGluYWw6XCIlZMK6XCIsaW52YWxpZERhdGU6XCJEYXRhIGludsOhbGlkYVwifSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsKG51bWJlcix3aXRob3V0U3VmZml4LGtleSl7dmFyIHNlcGFyYXRvcj1cIiBcIjtyZXR1cm4obnVtYmVyJTEwMD49MjB8fG51bWJlcj49MTAwJiZudW1iZXIlMTAwPT0wKSYmKHNlcGFyYXRvcj1cIiBkZSBcIiksbnVtYmVyK3NlcGFyYXRvcit7c3M6XCJzZWN1bmRlXCIsbW06XCJtaW51dGVcIixoaDpcIm9yZVwiLGRkOlwiemlsZVwiLHd3Olwic8SDcHTEg23Dom5pXCIsTU06XCJsdW5pXCIseXk6XCJhbmlcIn1ba2V5XX1tb21lbnQuZGVmaW5lTG9jYWxlKFwicm9cIix7bW9udGhzOlwiaWFudWFyaWVfZmVicnVhcmllX21hcnRpZV9hcHJpbGllX21haV9pdW5pZV9pdWxpZV9hdWd1c3Rfc2VwdGVtYnJpZV9vY3RvbWJyaWVfbm9pZW1icmllX2RlY2VtYnJpZVwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImlhbi5fZmViLl9tYXJ0Ll9hcHIuX21haV9pdW4uX2l1bC5fYXVnLl9zZXB0Ll9vY3QuX25vdi5fZGVjLlwiLnNwbGl0KFwiX1wiKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOlwiZHVtaW5pY8SDX2x1bmlfbWFyyJtpX21pZXJjdXJpX2pvaV92aW5lcmlfc8OibWLEg3TEg1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiRHVtX0x1bl9NYXJfTWllX0pvaV9WaW5fU8OibVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIkR1X0x1X01hX01pX0pvX1ZpX1PDolwiLnNwbGl0KFwiX1wiKSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJIOm1tXCIsTFRTOlwiSDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgSDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIlthemkgbGFdIExUXCIsbmV4dERheTpcIlttw6JpbmUgbGFdIExUXCIsbmV4dFdlZWs6XCJkZGRkIFtsYV0gTFRcIixsYXN0RGF5OlwiW2llcmkgbGFdIExUXCIsbGFzdFdlZWs6XCJbZm9zdGFdIGRkZGQgW2xhXSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcInBlc3RlICVzXCIscGFzdDpcIiVzIMOubiB1cm3Eg1wiLHM6XCJjw6J0ZXZhIHNlY3VuZGVcIixzczpyZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLG06XCJ1biBtaW51dFwiLG1tOnJlbGF0aXZlVGltZVdpdGhQbHVyYWwsaDpcIm8gb3LEg1wiLGhoOnJlbGF0aXZlVGltZVdpdGhQbHVyYWwsZDpcIm8gemlcIixkZDpyZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLHc6XCJvIHPEg3B0xINtw6JuxINcIix3dzpyZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLE06XCJvIGx1bsSDXCIsTU06cmVsYXRpdmVUaW1lV2l0aFBsdXJhbCx5OlwidW4gYW5cIix5eTpyZWxhdGl2ZVRpbWVXaXRoUGx1cmFsfSx3ZWVrOntkb3c6MSxkb3k6N319KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHJlbGF0aXZlVGltZVdpdGhQbHVyYWwobnVtYmVyLHdpdGhvdXRTdWZmaXgsa2V5KXt2YXIgbnVtLGZvcm1zO3JldHVyblwibVwiPT09a2V5P3dpdGhvdXRTdWZmaXg/XCLQvNC40L3Rg9GC0LBcIjpcItC80LjQvdGD0YLRg1wiOm51bWJlcitcIiBcIisobnVtPStudW1iZXIsZm9ybXM9e3NzOndpdGhvdXRTdWZmaXg/XCLRgdC10LrRg9C90LTQsF/RgdC10LrRg9C90LTRi1/RgdC10LrRg9C90LRcIjpcItGB0LXQutGD0L3QtNGDX9GB0LXQutGD0L3QtNGLX9GB0LXQutGD0L3QtFwiLG1tOndpdGhvdXRTdWZmaXg/XCLQvNC40L3Rg9GC0LBf0LzQuNC90YPRgtGLX9C80LjQvdGD0YJcIjpcItC80LjQvdGD0YLRg1/QvNC40L3Rg9GC0Ytf0LzQuNC90YPRglwiLGhoOlwi0YfQsNGBX9GH0LDRgdCwX9GH0LDRgdC+0LJcIixkZDpcItC00LXQvdGMX9C00L3Rj1/QtNC90LXQuVwiLHd3Olwi0L3QtdC00LXQu9GPX9C90LXQtNC10LvQuF/QvdC10LTQtdC70YxcIixNTTpcItC80LXRgdGP0YZf0LzQtdGB0Y/RhtCwX9C80LXRgdGP0YbQtdCyXCIseXk6XCLQs9C+0LRf0LPQvtC00LBf0LvQtdGCXCJ9W2tleV0uc3BsaXQoXCJfXCIpLG51bSUxMD09MSYmbnVtJTEwMCE9MTE/Zm9ybXNbMF06bnVtJTEwPj0yJiZudW0lMTA8PTQmJihudW0lMTAwPDEwfHxudW0lMTAwPj0yMCk/Zm9ybXNbMV06Zm9ybXNbMl0pfXZhciBtb250aHNQYXJzZT1bL17Rj9C90LIvaSwvXtGE0LXQsi9pLC9e0LzQsNGAL2ksL17QsNC/0YAvaSwvXtC80LBb0LnRj10vaSwvXtC40Y7QvS9pLC9e0LjRjtC7L2ksL17QsNCy0LMvaSwvXtGB0LXQvS9pLC9e0L7QutGCL2ksL17QvdC+0Y8vaSwvXtC00LXQui9pXTttb21lbnQuZGVmaW5lTG9jYWxlKFwicnVcIix7bW9udGhzOntmb3JtYXQ6XCLRj9C90LLQsNGA0Y9f0YTQtdCy0YDQsNC70Y9f0LzQsNGA0YLQsF/QsNC/0YDQtdC70Y9f0LzQsNGPX9C40Y7QvdGPX9C40Y7Qu9GPX9Cw0LLQs9GD0YHRgtCwX9GB0LXQvdGC0Y/QsdGA0Y9f0L7QutGC0Y/QsdGA0Y9f0L3QvtGP0LHRgNGPX9C00LXQutCw0LHRgNGPXCIuc3BsaXQoXCJfXCIpLHN0YW5kYWxvbmU6XCLRj9C90LLQsNGA0Yxf0YTQtdCy0YDQsNC70Yxf0LzQsNGA0YJf0LDQv9GA0LXQu9GMX9C80LDQuV/QuNGO0L3RjF/QuNGO0LvRjF/QsNCy0LPRg9GB0YJf0YHQtdC90YLRj9Cx0YDRjF/QvtC60YLRj9Cx0YDRjF/QvdC+0Y/QsdGA0Yxf0LTQtdC60LDQsdGA0YxcIi5zcGxpdChcIl9cIil9LG1vbnRoc1Nob3J0Ontmb3JtYXQ6XCLRj9C90LIuX9GE0LXQstGALl/QvNCw0YAuX9Cw0L/RgC5f0LzQsNGPX9C40Y7QvdGPX9C40Y7Qu9GPX9Cw0LLQsy5f0YHQtdC90YIuX9C+0LrRgi5f0L3QvtGP0LEuX9C00LXQui5cIi5zcGxpdChcIl9cIiksc3RhbmRhbG9uZTpcItGP0L3Qsi5f0YTQtdCy0YAuX9C80LDRgNGCX9Cw0L/RgC5f0LzQsNC5X9C40Y7QvdGMX9C40Y7Qu9GMX9Cw0LLQsy5f0YHQtdC90YIuX9C+0LrRgi5f0L3QvtGP0LEuX9C00LXQui5cIi5zcGxpdChcIl9cIil9LHdlZWtkYXlzOntzdGFuZGFsb25lOlwi0LLQvtGB0LrRgNC10YHQtdC90YzQtV/Qv9C+0L3QtdC00LXQu9GM0L3QuNC6X9Cy0YLQvtGA0L3QuNC6X9GB0YDQtdC00LBf0YfQtdGC0LLQtdGA0LNf0L/Rj9GC0L3QuNGG0LBf0YHRg9Cx0LHQvtGC0LBcIi5zcGxpdChcIl9cIiksZm9ybWF0Olwi0LLQvtGB0LrRgNC10YHQtdC90YzQtV/Qv9C+0L3QtdC00LXQu9GM0L3QuNC6X9Cy0YLQvtGA0L3QuNC6X9GB0YDQtdC00YNf0YfQtdGC0LLQtdGA0LNf0L/Rj9GC0L3QuNGG0YNf0YHRg9Cx0LHQvtGC0YNcIi5zcGxpdChcIl9cIiksaXNGb3JtYXQ6L1xcWyA/W9CS0LJdID8oPzrQv9GA0L7RiNC70YPRjnzRgdC70LXQtNGD0Y7RidGD0Y580Y3RgtGDKT8gP10gP2RkZGQvfSx3ZWVrZGF5c1Nob3J0Olwi0LLRgV/Qv9C9X9Cy0YJf0YHRgF/Rh9GCX9C/0YJf0YHQsVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcItCy0YFf0L/QvV/QstGCX9GB0YBf0YfRgl/Qv9GCX9GB0LFcIi5zcGxpdChcIl9cIiksbW9udGhzUGFyc2U6bW9udGhzUGFyc2UsbG9uZ01vbnRoc1BhcnNlOm1vbnRoc1BhcnNlLHNob3J0TW9udGhzUGFyc2U6bW9udGhzUGFyc2UsbW9udGhzUmVnZXg6L14o0Y/QvdCy0LDRgFvRjNGPXXzRj9C90LJcXC4/fNGE0LXQstGA0LDQu1vRjNGPXXzRhNC10LLRgD9cXC4/fNC80LDRgNGC0LA/fNC80LDRgFxcLj980LDQv9GA0LXQu1vRjNGPXXzQsNC/0YBcXC4/fNC80LBb0LnRj1180LjRjtC9W9GM0Y9dfNC40Y7QvVxcLj980LjRjtC7W9GM0Y9dfNC40Y7Qu1xcLj980LDQstCz0YPRgdGC0LA/fNCw0LLQs1xcLj980YHQtdC90YLRj9Cx0YBb0YzRj1180YHQtdC90YI/XFwuP3zQvtC60YLRj9Cx0YBb0YzRj1180L7QutGCXFwuP3zQvdC+0Y/QsdGAW9GM0Y9dfNC90L7Rj9CxP1xcLj980LTQtdC60LDQsdGAW9GM0Y9dfNC00LXQulxcLj8pL2ksbW9udGhzU2hvcnRSZWdleDovXijRj9C90LLQsNGAW9GM0Y9dfNGP0L3QslxcLj980YTQtdCy0YDQsNC7W9GM0Y9dfNGE0LXQstGAP1xcLj980LzQsNGA0YLQsD980LzQsNGAXFwuP3zQsNC/0YDQtdC7W9GM0Y9dfNCw0L/RgFxcLj980LzQsFvQudGPXXzQuNGO0L1b0YzRj1180LjRjtC9XFwuP3zQuNGO0Ltb0YzRj1180LjRjtC7XFwuP3zQsNCy0LPRg9GB0YLQsD980LDQstCzXFwuP3zRgdC10L3RgtGP0LHRgFvRjNGPXXzRgdC10L3Rgj9cXC4/fNC+0LrRgtGP0LHRgFvRjNGPXXzQvtC60YJcXC4/fNC90L7Rj9Cx0YBb0YzRj1180L3QvtGP0LE/XFwuP3zQtNC10LrQsNCx0YBb0YzRj1180LTQtdC6XFwuPykvaSxtb250aHNTdHJpY3RSZWdleDovXijRj9C90LLQsNGAW9GP0YxdfNGE0LXQstGA0LDQu1vRj9GMXXzQvNCw0YDRgtCwP3zQsNC/0YDQtdC7W9GP0YxdfNC80LBb0Y/QuV180LjRjtC9W9GP0YxdfNC40Y7Qu1vRj9GMXXzQsNCy0LPRg9GB0YLQsD980YHQtdC90YLRj9Cx0YBb0Y/RjF180L7QutGC0Y/QsdGAW9GP0YxdfNC90L7Rj9Cx0YBb0Y/RjF180LTQtdC60LDQsdGAW9GP0YxdKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14o0Y/QvdCyXFwufNGE0LXQstGAP1xcLnzQvNCw0YBb0YIuXXzQsNC/0YBcXC580LzQsFvRj9C5XXzQuNGO0L1b0YzRjy5dfNC40Y7Qu1vRjNGPLl180LDQstCzXFwufNGB0LXQvdGCP1xcLnzQvtC60YJcXC580L3QvtGP0LE/XFwufNC00LXQulxcLikvaSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJIOm1tXCIsTFRTOlwiSDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWSDQsy5cIixMTEw6XCJEIE1NTU0gWVlZWSDQsy4sIEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkg0LMuLCBIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW9Ch0LXQs9C+0LTQvdGPLCDQsl0gTFRcIixuZXh0RGF5OlwiW9CX0LDQstGC0YDQsCwg0LJdIExUXCIsbGFzdERheTpcIlvQktGH0LXRgNCwLCDQsl0gTFRcIixuZXh0V2VlazpmdW5jdGlvbihub3cpe2lmKG5vdy53ZWVrKCk9PT10aGlzLndlZWsoKSlyZXR1cm4gMj09PXRoaXMuZGF5KCk/XCJb0JLQvl0gZGRkZCwgW9CyXSBMVFwiOlwiW9CSXSBkZGRkLCBb0LJdIExUXCI7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm5cIlvQkiDRgdC70LXQtNGD0Y7RidC10LVdIGRkZGQsIFvQsl0gTFRcIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm5cIlvQkiDRgdC70LXQtNGD0Y7RidC40LldIGRkZGQsIFvQsl0gTFRcIjtjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm5cIlvQkiDRgdC70LXQtNGD0Y7RidGD0Y5dIGRkZGQsIFvQsl0gTFRcIn19LGxhc3RXZWVrOmZ1bmN0aW9uKG5vdyl7aWYobm93LndlZWsoKT09PXRoaXMud2VlaygpKXJldHVybiAyPT09dGhpcy5kYXkoKT9cIlvQktC+XSBkZGRkLCBb0LJdIExUXCI6XCJb0JJdIGRkZGQsIFvQsl0gTFRcIjtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVyblwiW9CSINC/0YDQvtGI0LvQvtC1XSBkZGRkLCBb0LJdIExUXCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6cmV0dXJuXCJb0JIg0L/RgNC+0YjQu9GL0LldIGRkZGQsIFvQsl0gTFRcIjtjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm5cIlvQkiDQv9GA0L7RiNC70YPRjl0gZGRkZCwgW9CyXSBMVFwifX0sc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwi0YfQtdGA0LXQtyAlc1wiLHBhc3Q6XCIlcyDQvdCw0LfQsNC0XCIsczpcItC90LXRgdC60L7Qu9GM0LrQviDRgdC10LrRg9C90LRcIixzczpyZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLG06cmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxtbTpyZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLGg6XCLRh9Cw0YFcIixoaDpyZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLGQ6XCLQtNC10L3RjFwiLGRkOnJlbGF0aXZlVGltZVdpdGhQbHVyYWwsdzpcItC90LXQtNC10LvRj1wiLHd3OnJlbGF0aXZlVGltZVdpdGhQbHVyYWwsTTpcItC80LXRgdGP0YZcIixNTTpyZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLHk6XCLQs9C+0LRcIix5eTpyZWxhdGl2ZVRpbWVXaXRoUGx1cmFsfSxtZXJpZGllbVBhcnNlOi/QvdC+0YfQuHzRg9GC0YDQsHzQtNC90Y980LLQtdGH0LXRgNCwL2ksaXNQTTpmdW5jdGlvbihpbnB1dCl7cmV0dXJuL14o0LTQvdGPfNCy0LXRh9C10YDQsCkkLy50ZXN0KGlucHV0KX0sbWVyaWRpZW06ZnVuY3Rpb24oaG91cixtaW51dGUsaXNMb3dlcil7cmV0dXJuIGhvdXI8ND9cItC90L7Rh9C4XCI6aG91cjwxMj9cItGD0YLRgNCwXCI6aG91cjwxNz9cItC00L3Rj1wiOlwi0LLQtdGH0LXRgNCwXCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9LSjQuXzQs9C+fNGPKS8sb3JkaW5hbDpmdW5jdGlvbihudW1iZXIscGVyaW9kKXtzd2l0Y2gocGVyaW9kKXtjYXNlXCJNXCI6Y2FzZVwiZFwiOmNhc2VcIkRERFwiOnJldHVybiBudW1iZXIrXCIt0LlcIjtjYXNlXCJEXCI6cmV0dXJuIG51bWJlcitcIi3Qs9C+XCI7Y2FzZVwid1wiOmNhc2VcIldcIjpyZXR1cm4gbnVtYmVyK1wiLdGPXCI7ZGVmYXVsdDpyZXR1cm4gbnVtYmVyfX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjt2YXIgbW9udGhzPVtcItis2YbZiNix2YpcIixcItmB2YrYqNix2YjYsdmKXCIsXCLZhdin2LHahlwiLFwi2KfZvtix2YrZhFwiLFwi2YXYptmKXCIsXCLYrNmI2YZcIixcItis2YjZhNin2KHZkFwiLFwi2KLar9iz2b1cIixcItiz2YrZvtm92YXYqNixXCIsXCLYotqq2b3ZiNio2LFcIixcItmG2YjZhdio2LFcIixcItqK2LPZhdio2LFcIl0sZGF5cz1bXCLYotqG2LFcIixcItiz2YjZhdixXCIsXCLYp9qx2KfYsdmIXCIsXCLYp9ix2KjYuVwiLFwi2K7ZhdmK2LNcIixcItis2YXYuVwiLFwi2ofZhtqH2LFcIl07bW9tZW50LmRlZmluZUxvY2FsZShcInNkXCIse21vbnRoczptb250aHMsbW9udGhzU2hvcnQ6bW9udGhzLHdlZWtkYXlzOmRheXMsd2Vla2RheXNTaG9ydDpkYXlzLHdlZWtkYXlzTWluOmRheXMsbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGTYjCBEIE1NTU0gWVlZWSBISDptbVwifSxtZXJpZGllbVBhcnNlOi/Ytdio2K182LTYp9mFLyxpc1BNOmZ1bmN0aW9uKGlucHV0KXtyZXR1cm5cIti02KfZhVwiPT09aW5wdXR9LG1lcmlkaWVtOmZ1bmN0aW9uKGhvdXIsbWludXRlLGlzTG93ZXIpe3JldHVybiBob3VyPDEyP1wi2LXYqNitXCI6XCLYtNin2YVcIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJb2KfahF0gTFRcIixuZXh0RGF5OlwiW9iz2oDYp9q72YpdIExUXCIsbmV4dFdlZWs6XCJkZGRkIFvYp9qz2YrZhiDZh9mB2KrZiiDYqtmKXSBMVFwiLGxhc3REYXk6XCJb2qrYp9mE2YfZh10gTFRcIixsYXN0V2VlazpcIlvar9iy2LHZitmEINmH2YHYqtmKXSBkZGRkIFvYqtmKXSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVzINm+2YjYoVwiLHBhc3Q6XCIlcyDYp9qzXCIsczpcItqG2YbYryDYs9mK2qrZhtqKXCIsc3M6XCIlZCDYs9mK2qrZhtqKXCIsbTpcItmH2qog2YXZhtm9XCIsbW06XCIlZCDZhdmG2b1cIixoOlwi2YfaqiDaqtmE2KfaqlwiLGhoOlwiJWQg2qrZhNin2qpcIixkOlwi2YfaqiDaj9mK2YbZh9mGXCIsZGQ6XCIlZCDaj9mK2YbZh9mGXCIsTTpcItmH2qog2YXZh9mK2YbZiFwiLE1NOlwiJWQg2YXZh9mK2YbYp1wiLHk6XCLZh9qqINiz2KfZhFwiLHl5OlwiJWQg2LPYp9mEXCJ9LHByZXBhcnNlOmZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5yZXBsYWNlKC/YjC9nLFwiLFwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihzdHJpbmcpe3JldHVybiBzdHJpbmcucmVwbGFjZSgvLC9nLFwi2IxcIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7bW9tZW50LmRlZmluZUxvY2FsZShcInNlXCIse21vbnRoczpcIm/EkcSRYWphZ2Vtw6FubnVfZ3VvdnZhbcOhbm51X25qdWvEjWFtw6FubnVfY3VvxYtvbcOhbm51X21pZXNzZW3DoW5udV9nZWFzc2Vtw6FubnVfc3VvaWRuZW3DoW5udV9ib3JnZW3DoW5udV/EjWFrxI1hbcOhbm51X2dvbGdnb3Rtw6FubnVfc2vDoWJtYW3DoW5udV9qdW92bGFtw6FubnVcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJvxJHEkWpfZ3Vvdl9uanVrX2N1b19taWVzX2dlYXNfc3VvaV9ib3JnX8SNYWvEjV9nb2xnX3Nrw6FiX2p1b3ZcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCJzb3RuYWJlYWl2aV92dW9zc8OhcmdhX21hxYvFi2Viw6FyZ2FfZ2Fza2F2YWhra3VfZHVvcmFzdGF0X2JlYXJqYWRhdF9sw6F2dmFyZGF0XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJzb3RuX3Z1b3NfbWHFi19nYXNrX2R1b3JfYmVhcl9sw6F2XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwic192X21fZ19kX2JfTFwiLnNwbGl0KFwiX1wiKSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkRELk1NLllZWVlcIixMTDpcIk1NTU0gRC4gW2IuXSBZWVlZXCIsTExMOlwiTU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW1cIixMTExMOlwiZGRkZCwgTU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJbb3RuZSB0aV0gTFRcIixuZXh0RGF5OlwiW2lodHRpbiB0aV0gTFRcIixuZXh0V2VlazpcImRkZGQgW3RpXSBMVFwiLGxhc3REYXk6XCJbaWt0ZSB0aV0gTFRcIixsYXN0V2VlazpcIltvdmRkaXRdIGRkZGQgW3RpXSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVzIGdlYcW+ZXNcIixwYXN0OlwibWHFi2l0ICVzXCIsczpcIm1vYWRkZSBzZWt1bmRkYXRcIixzczpcIiVkIHNla3VuZGRhdFwiLG06XCJva3RhIG1pbnVodGFcIixtbTpcIiVkIG1pbnVodGF0XCIsaDpcIm9rdGEgZGlpbW11XCIsaGg6XCIlZCBkaWltbXV0XCIsZDpcIm9rdGEgYmVhaXZpXCIsZGQ6XCIlZCBiZWFpdnZpdFwiLE06XCJva3RhIG3DoW5udVwiLE1NOlwiJWQgbcOhbnV0XCIseTpcIm9rdGEgamFoa2lcIix5eTpcIiVkIGphZ2l0XCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9XFwuLyxvcmRpbmFsOlwiJWQuXCIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwic2lcIix7bW9udGhzOlwi4Lai4Lax4LeA4LeP4La74LeSX+C2tOC3meC2tuC2u+C3gOC3j+C2u+C3kl/gtrjgt4/gtrvgt4rgtq3gt5Rf4LaF4La04LeK4oCN4La74Lea4La94LeKX+C2uOC3kOC2uuC3kl/gtqLgt5bgtrHgt5Jf4Lai4LeW4La94LeSX+C2heC2nOC3neC3g+C3iuC2reC3lF/gt4Pgt5DgtrTgt4rgtq3gt5Dgtrjgt4rgtrbgtrvgt4pf4LaU4Laa4LeK4Lat4Led4La24La74LeKX+C2seC3nOC3gOC3kOC2uOC3iuC2tuC2u+C3il/gtq/gt5ngt4Pgt5Dgtrjgt4rgtrbgtrvgt4pcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLgtqLgtrFf4La04LeZ4La2X+C2uOC3j+C2u+C3il/gtoXgtrTgt4pf4La44LeQ4La64LeSX+C2ouC3luC2seC3kl/gtqLgt5bgtr3gt5Jf4LaF4Lac4LedX+C3g+C3kOC2tOC3il/gtpTgtprgt4pf4Lax4Lec4LeA4LeQX+C2r+C3meC3g+C3kFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcIuC2ieC2u+C3kuC2r+C3j1/gt4PgtrPgt5Tgtq/gt49f4LaF4Laf4LeE4La74LeU4LeA4LeP4Lav4LePX+C2tuC2r+C3j+C2r+C3j1/gtrbgt4rigI3gtrvgt4Tgt4Pgt4rgtrTgtq3gt5LgtrHgt4rgtq/gt49f4LeD4LeS4Laa4LeU4La74LeP4Lav4LePX+C3g+C3meC2seC3g+C3lOC2u+C3j+C2r+C3j1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi4LaJ4La74LeSX+C3g+C2s+C3lF/gtoXgtp9f4La24Lav4LePX+C2tuC3iuKAjeC2u+C3hF/gt4Pgt5Lgtprgt5Rf4LeD4LeZ4LaxXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi4LaJX+C3g1/gtoVf4La2X+C2tuC3iuKAjeC2u1/gt4Pgt5Jf4LeD4LeZXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJhIGg6bW1cIixMVFM6XCJhIGg6bW06c3NcIixMOlwiWVlZWS9NTS9ERFwiLExMOlwiWVlZWSBNTU1NIERcIixMTEw6XCJZWVlZIE1NTU0gRCwgYSBoOm1tXCIsTExMTDpcIllZWVkgTU1NTSBEIFvgt4Dgt5DgtrHgt5JdIGRkZGQsIGEgaDptbTpzc1wifSxjYWxlbmRhcjp7c2FtZURheTpcIlvgtoXgtq9dIExUW+C2p11cIixuZXh0RGF5OlwiW+C3hOC3meC2p10gTFRb4LanXVwiLG5leHRXZWVrOlwiZGRkZCBMVFvgtqddXCIsbGFzdERheTpcIlvgtorgtrrgt5pdIExUW+C2p11cIixsYXN0V2VlazpcIlvgtrTgt4Pgt5Tgtpzgt5LgtrpdIGRkZGQgTFRb4LanXVwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVz4Laa4LeS4Lax4LeKXCIscGFzdDpcIiVz4Laa4LanIOC2tOC3meC2u1wiLHM6XCLgtq3gtq3gt4rgtrTgtrsg4Laa4LeS4LeE4LeS4La04La6XCIsc3M6XCLgtq3gtq3gt4rgtrTgtrsgJWRcIixtOlwi4La44LeS4Lax4LeS4Lat4LeK4Lat4LeU4LeAXCIsbW06XCLgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5QgJWRcIixoOlwi4La04LeQ4La6XCIsaGg6XCLgtrTgt5DgtrogJWRcIixkOlwi4Lav4LeS4Lax4La6XCIsZGQ6XCLgtq/gt5LgtrEgJWRcIixNOlwi4La44LeP4LeD4La6XCIsTU06XCLgtrjgt4/gt4MgJWRcIix5Olwi4LeA4LeD4La7XCIseXk6XCLgt4Dgt4PgtrsgJWRcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn0g4LeA4LeQ4Lax4LeSLyxvcmRpbmFsOmZ1bmN0aW9uKG51bWJlcil7cmV0dXJuIG51bWJlcitcIiDgt4Dgt5DgtrHgt5JcIn0sbWVyaWRpZW1QYXJzZTov4La04LeZ4La7IOC3gOC2u+C3lHzgtrTgt4Pgt4og4LeA4La74LeUfOC2tOC3mS7gt4B84La0LuC3gC4vLGlzUE06ZnVuY3Rpb24oaW5wdXQpe3JldHVyblwi4La0LuC3gC5cIj09PWlucHV0fHxcIuC2tOC3g+C3iiDgt4Dgtrvgt5RcIj09PWlucHV0fSxtZXJpZGllbTpmdW5jdGlvbihob3VycyxtaW51dGVzLGlzTG93ZXIpe3JldHVybiBob3Vycz4xMT9pc0xvd2VyP1wi4La0LuC3gC5cIjpcIuC2tOC3g+C3iiDgt4Dgtrvgt5RcIjppc0xvd2VyP1wi4La04LeZLuC3gC5cIjpcIuC2tOC3meC2uyDgt4Dgtrvgt5RcIn19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO3ZhciBtb250aHM9XCJqYW51w6FyX2ZlYnJ1w6FyX21hcmVjX2FwcsOtbF9tw6FqX2rDum5fasO6bF9hdWd1c3Rfc2VwdGVtYmVyX29rdMOzYmVyX25vdmVtYmVyX2RlY2VtYmVyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0PVwiamFuX2ZlYl9tYXJfYXByX23DoWpfasO6bl9qw7psX2F1Z19zZXBfb2t0X25vdl9kZWNcIi5zcGxpdChcIl9cIik7ZnVuY3Rpb24gcGx1cmFsKG4pe3JldHVybiBuPjEmJm48NX1mdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLHdpdGhvdXRTdWZmaXgsa2V5LGlzRnV0dXJlKXt2YXIgcmVzdWx0PW51bWJlcitcIiBcIjtzd2l0Y2goa2V5KXtjYXNlXCJzXCI6cmV0dXJuIHdpdGhvdXRTdWZmaXh8fGlzRnV0dXJlP1wicMOhciBzZWvDum5kXCI6XCJww6FyIHNla3VuZGFtaVwiO2Nhc2VcInNzXCI6cmV0dXJuIHdpdGhvdXRTdWZmaXh8fGlzRnV0dXJlP3Jlc3VsdCsocGx1cmFsKG51bWJlcik/XCJzZWt1bmR5XCI6XCJzZWvDum5kXCIpOnJlc3VsdCtcInNla3VuZGFtaVwiO2Nhc2VcIm1cIjpyZXR1cm4gd2l0aG91dFN1ZmZpeD9cIm1pbsO6dGFcIjppc0Z1dHVyZT9cIm1pbsO6dHVcIjpcIm1pbsO6dG91XCI7Y2FzZVwibW1cIjpyZXR1cm4gd2l0aG91dFN1ZmZpeHx8aXNGdXR1cmU/cmVzdWx0KyhwbHVyYWwobnVtYmVyKT9cIm1pbsO6dHlcIjpcIm1pbsO6dFwiKTpyZXN1bHQrXCJtaW7DunRhbWlcIjtjYXNlXCJoXCI6cmV0dXJuIHdpdGhvdXRTdWZmaXg/XCJob2RpbmFcIjppc0Z1dHVyZT9cImhvZGludVwiOlwiaG9kaW5vdVwiO2Nhc2VcImhoXCI6cmV0dXJuIHdpdGhvdXRTdWZmaXh8fGlzRnV0dXJlP3Jlc3VsdCsocGx1cmFsKG51bWJlcik/XCJob2RpbnlcIjpcImhvZMOtblwiKTpyZXN1bHQrXCJob2RpbmFtaVwiO2Nhc2VcImRcIjpyZXR1cm4gd2l0aG91dFN1ZmZpeHx8aXNGdXR1cmU/XCJkZcWIXCI6XCJkxYhvbVwiO2Nhc2VcImRkXCI6cmV0dXJuIHdpdGhvdXRTdWZmaXh8fGlzRnV0dXJlP3Jlc3VsdCsocGx1cmFsKG51bWJlcik/XCJkbmlcIjpcImRuw61cIik6cmVzdWx0K1wiZMWIYW1pXCI7Y2FzZVwiTVwiOnJldHVybiB3aXRob3V0U3VmZml4fHxpc0Z1dHVyZT9cIm1lc2lhY1wiOlwibWVzaWFjb21cIjtjYXNlXCJNTVwiOnJldHVybiB3aXRob3V0U3VmZml4fHxpc0Z1dHVyZT9yZXN1bHQrKHBsdXJhbChudW1iZXIpP1wibWVzaWFjZVwiOlwibWVzaWFjb3ZcIik6cmVzdWx0K1wibWVzaWFjbWlcIjtjYXNlXCJ5XCI6cmV0dXJuIHdpdGhvdXRTdWZmaXh8fGlzRnV0dXJlP1wicm9rXCI6XCJyb2tvbVwiO2Nhc2VcInl5XCI6cmV0dXJuIHdpdGhvdXRTdWZmaXh8fGlzRnV0dXJlP3Jlc3VsdCsocGx1cmFsKG51bWJlcik/XCJyb2t5XCI6XCJyb2tvdlwiKTpyZXN1bHQrXCJyb2ttaVwifX1tb21lbnQuZGVmaW5lTG9jYWxlKFwic2tcIix7bW9udGhzOm1vbnRocyxtb250aHNTaG9ydDptb250aHNTaG9ydCx3ZWVrZGF5czpcIm5lZGXEvmFfcG9uZGVsb2tfdXRvcm9rX3N0cmVkYV/FoXR2cnRva19waWF0b2tfc29ib3RhXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJuZV9wb191dF9zdF/FoXRfcGlfc29cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJuZV9wb191dF9zdF/FoXRfcGlfc29cIi5zcGxpdChcIl9cIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSDptbVwiLExUUzpcIkg6bW06c3NcIixMOlwiREQuTU0uWVlZWVwiLExMOlwiRC4gTU1NTSBZWVlZXCIsTExMOlwiRC4gTU1NTSBZWVlZIEg6bW1cIixMTExMOlwiZGRkZCBELiBNTU1NIFlZWVkgSDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIltkbmVzIG9dIExUXCIsbmV4dERheTpcIlt6YWp0cmEgb10gTFRcIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuXCJbdiBuZWRlxL51IG9dIExUXCI7Y2FzZSAxOmNhc2UgMjpyZXR1cm5cIlt2XSBkZGRkIFtvXSBMVFwiO2Nhc2UgMzpyZXR1cm5cIlt2IHN0cmVkdSBvXSBMVFwiO2Nhc2UgNDpyZXR1cm5cIlt2byDFoXR2cnRvayBvXSBMVFwiO2Nhc2UgNTpyZXR1cm5cIlt2IHBpYXRvayBvXSBMVFwiO2Nhc2UgNjpyZXR1cm5cIlt2IHNvYm90dSBvXSBMVFwifX0sbGFzdERheTpcIlt2xI1lcmEgb10gTFRcIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuXCJbbWludWzDuiBuZWRlxL51IG9dIExUXCI7Y2FzZSAxOmNhc2UgMjpyZXR1cm5cIlttaW51bMO9XSBkZGRkIFtvXSBMVFwiO2Nhc2UgMzpyZXR1cm5cIlttaW51bMO6IHN0cmVkdSBvXSBMVFwiO2Nhc2UgNDpjYXNlIDU6cmV0dXJuXCJbbWludWzDvV0gZGRkZCBbb10gTFRcIjtjYXNlIDY6cmV0dXJuXCJbbWludWzDuiBzb2JvdHUgb10gTFRcIn19LHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcInphICVzXCIscGFzdDpcInByZWQgJXNcIixzOnRyYW5zbGF0ZSxzczp0cmFuc2xhdGUsbTp0cmFuc2xhdGUsbW06dHJhbnNsYXRlLGg6dHJhbnNsYXRlLGhoOnRyYW5zbGF0ZSxkOnRyYW5zbGF0ZSxkZDp0cmFuc2xhdGUsTTp0cmFuc2xhdGUsTU06dHJhbnNsYXRlLHk6dHJhbnNsYXRlLHl5OnRyYW5zbGF0ZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn1cXC4vLG9yZGluYWw6XCIlZC5cIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLHdpdGhvdXRTdWZmaXgsa2V5LGlzRnV0dXJlKXt2YXIgcmVzdWx0PW51bWJlcitcIiBcIjtzd2l0Y2goa2V5KXtjYXNlXCJzXCI6cmV0dXJuIHdpdGhvdXRTdWZmaXh8fGlzRnV0dXJlP1wibmVrYWogc2VrdW5kXCI6XCJuZWthaiBzZWt1bmRhbWlcIjtjYXNlXCJzc1wiOnJldHVybiByZXN1bHQrPTE9PT1udW1iZXI/d2l0aG91dFN1ZmZpeD9cInNla3VuZG9cIjpcInNla3VuZGlcIjoyPT09bnVtYmVyP3dpdGhvdXRTdWZmaXh8fGlzRnV0dXJlP1wic2VrdW5kaVwiOlwic2VrdW5kYWhcIjpudW1iZXI8NT93aXRob3V0U3VmZml4fHxpc0Z1dHVyZT9cInNla3VuZGVcIjpcInNla3VuZGFoXCI6XCJzZWt1bmRcIjtjYXNlXCJtXCI6cmV0dXJuIHdpdGhvdXRTdWZmaXg/XCJlbmEgbWludXRhXCI6XCJlbm8gbWludXRvXCI7Y2FzZVwibW1cIjpyZXR1cm4gcmVzdWx0Kz0xPT09bnVtYmVyP3dpdGhvdXRTdWZmaXg/XCJtaW51dGFcIjpcIm1pbnV0b1wiOjI9PT1udW1iZXI/d2l0aG91dFN1ZmZpeHx8aXNGdXR1cmU/XCJtaW51dGlcIjpcIm1pbnV0YW1hXCI6bnVtYmVyPDU/d2l0aG91dFN1ZmZpeHx8aXNGdXR1cmU/XCJtaW51dGVcIjpcIm1pbnV0YW1pXCI6d2l0aG91dFN1ZmZpeHx8aXNGdXR1cmU/XCJtaW51dFwiOlwibWludXRhbWlcIjtjYXNlXCJoXCI6cmV0dXJuIHdpdGhvdXRTdWZmaXg/XCJlbmEgdXJhXCI6XCJlbm8gdXJvXCI7Y2FzZVwiaGhcIjpyZXR1cm4gcmVzdWx0Kz0xPT09bnVtYmVyP3dpdGhvdXRTdWZmaXg/XCJ1cmFcIjpcInVyb1wiOjI9PT1udW1iZXI/d2l0aG91dFN1ZmZpeHx8aXNGdXR1cmU/XCJ1cmlcIjpcInVyYW1hXCI6bnVtYmVyPDU/d2l0aG91dFN1ZmZpeHx8aXNGdXR1cmU/XCJ1cmVcIjpcInVyYW1pXCI6d2l0aG91dFN1ZmZpeHx8aXNGdXR1cmU/XCJ1clwiOlwidXJhbWlcIjtjYXNlXCJkXCI6cmV0dXJuIHdpdGhvdXRTdWZmaXh8fGlzRnV0dXJlP1wiZW4gZGFuXCI6XCJlbmltIGRuZW1cIjtjYXNlXCJkZFwiOnJldHVybiByZXN1bHQrPTE9PT1udW1iZXI/d2l0aG91dFN1ZmZpeHx8aXNGdXR1cmU/XCJkYW5cIjpcImRuZW1cIjoyPT09bnVtYmVyP3dpdGhvdXRTdWZmaXh8fGlzRnV0dXJlP1wiZG5pXCI6XCJkbmV2b21hXCI6d2l0aG91dFN1ZmZpeHx8aXNGdXR1cmU/XCJkbmlcIjpcImRuZXZpXCI7Y2FzZVwiTVwiOnJldHVybiB3aXRob3V0U3VmZml4fHxpc0Z1dHVyZT9cImVuIG1lc2VjXCI6XCJlbmltIG1lc2VjZW1cIjtjYXNlXCJNTVwiOnJldHVybiByZXN1bHQrPTE9PT1udW1iZXI/d2l0aG91dFN1ZmZpeHx8aXNGdXR1cmU/XCJtZXNlY1wiOlwibWVzZWNlbVwiOjI9PT1udW1iZXI/d2l0aG91dFN1ZmZpeHx8aXNGdXR1cmU/XCJtZXNlY2FcIjpcIm1lc2VjZW1hXCI6bnVtYmVyPDU/d2l0aG91dFN1ZmZpeHx8aXNGdXR1cmU/XCJtZXNlY2VcIjpcIm1lc2VjaVwiOndpdGhvdXRTdWZmaXh8fGlzRnV0dXJlP1wibWVzZWNldlwiOlwibWVzZWNpXCI7Y2FzZVwieVwiOnJldHVybiB3aXRob3V0U3VmZml4fHxpc0Z1dHVyZT9cImVubyBsZXRvXCI6XCJlbmltIGxldG9tXCI7Y2FzZVwieXlcIjpyZXR1cm4gcmVzdWx0Kz0xPT09bnVtYmVyP3dpdGhvdXRTdWZmaXh8fGlzRnV0dXJlP1wibGV0b1wiOlwibGV0b21cIjoyPT09bnVtYmVyP3dpdGhvdXRTdWZmaXh8fGlzRnV0dXJlP1wibGV0aVwiOlwibGV0b21hXCI6bnVtYmVyPDU/d2l0aG91dFN1ZmZpeHx8aXNGdXR1cmU/XCJsZXRhXCI6XCJsZXRpXCI6d2l0aG91dFN1ZmZpeHx8aXNGdXR1cmU/XCJsZXRcIjpcImxldGlcIn19bW9tZW50LmRlZmluZUxvY2FsZShcInNsXCIse21vbnRoczpcImphbnVhcl9mZWJydWFyX21hcmVjX2FwcmlsX21hal9qdW5pal9qdWxpal9hdmd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJqYW4uX2ZlYi5fbWFyLl9hcHIuX21hai5fanVuLl9qdWwuX2F2Zy5fc2VwLl9va3QuX25vdi5fZGVjLlwiLnNwbGl0KFwiX1wiKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOlwibmVkZWxqYV9wb25lZGVsamVrX3RvcmVrX3NyZWRhX8SNZXRydGVrX3BldGVrX3NvYm90YVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwibmVkLl9wb24uX3Rvci5fc3JlLl/EjWV0Ll9wZXQuX3NvYi5cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJuZV9wb190b19zcl/EjWVfcGVfc29cIi5zcGxpdChcIl9cIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDpcIkg6bW1cIixMVFM6XCJIOm1tOnNzXCIsTDpcIkRELiBNTS4gWVlZWVwiLExMOlwiRC4gTU1NTSBZWVlZXCIsTExMOlwiRC4gTU1NTSBZWVlZIEg6bW1cIixMTExMOlwiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJbZGFuZXMgb2JdIExUXCIsbmV4dERheTpcIltqdXRyaSBvYl0gTFRcIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuXCJbdl0gW25lZGVsam9dIFtvYl0gTFRcIjtjYXNlIDM6cmV0dXJuXCJbdl0gW3NyZWRvXSBbb2JdIExUXCI7Y2FzZSA2OnJldHVyblwiW3ZdIFtzb2JvdG9dIFtvYl0gTFRcIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuXCJbdl0gZGRkZCBbb2JdIExUXCJ9fSxsYXN0RGF5OlwiW3bEjWVyYWogb2JdIExUXCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVyblwiW3ByZWrFoW5qb10gW25lZGVsam9dIFtvYl0gTFRcIjtjYXNlIDM6cmV0dXJuXCJbcHJlasWhbmpvXSBbc3JlZG9dIFtvYl0gTFRcIjtjYXNlIDY6cmV0dXJuXCJbcHJlasWhbmpvXSBbc29ib3RvXSBbb2JdIExUXCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVyblwiW3ByZWrFoW5qaV0gZGRkZCBbb2JdIExUXCJ9fSxzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCLEjWV6ICVzXCIscGFzdDpcInByZWQgJXNcIixzOnByb2Nlc3NSZWxhdGl2ZVRpbWUsc3M6cHJvY2Vzc1JlbGF0aXZlVGltZSxtOnByb2Nlc3NSZWxhdGl2ZVRpbWUsbW06cHJvY2Vzc1JlbGF0aXZlVGltZSxoOnByb2Nlc3NSZWxhdGl2ZVRpbWUsaGg6cHJvY2Vzc1JlbGF0aXZlVGltZSxkOnByb2Nlc3NSZWxhdGl2ZVRpbWUsZGQ6cHJvY2Vzc1JlbGF0aXZlVGltZSxNOnByb2Nlc3NSZWxhdGl2ZVRpbWUsTU06cHJvY2Vzc1JlbGF0aXZlVGltZSx5OnByb2Nlc3NSZWxhdGl2ZVRpbWUseXk6cHJvY2Vzc1JlbGF0aXZlVGltZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn1cXC4vLG9yZGluYWw6XCIlZC5cIix3ZWVrOntkb3c6MSxkb3k6N319KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO21vbWVudC5kZWZpbmVMb2NhbGUoXCJzcVwiLHttb250aHM6XCJKYW5hcl9TaGt1cnRfTWFyc19QcmlsbF9NYWpfUWVyc2hvcl9Lb3JyaWtfR3VzaHRfU2h0YXRvcl9UZXRvcl9Ow6tudG9yX0RoamV0b3JcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJKYW5fU2hrX01hcl9QcmlfTWFqX1Flcl9Lb3JfR3VzX1NodF9UZXRfTsOrbl9EaGpcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCJFIERpZWxfRSBIw6tuw6tfRSBNYXJ0w6tfRSBNw6tya3Vyw6tfRSBFbmp0ZV9FIFByZW10ZV9FIFNodHVuw6tcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIkRpZV9Iw6tuX01hcl9Nw6tyX0Vual9QcmVfU2h0XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiRF9IX01hX03Dq19FX1BfU2hcIi5zcGxpdChcIl9cIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLG1lcmlkaWVtUGFyc2U6L1BEfE1ELyxpc1BNOmZ1bmN0aW9uKGlucHV0KXtyZXR1cm5cIk1cIj09PWlucHV0LmNoYXJBdCgwKX0sbWVyaWRpZW06ZnVuY3Rpb24oaG91cnMsbWludXRlcyxpc0xvd2VyKXtyZXR1cm4gaG91cnM8MTI/XCJQRFwiOlwiTURcIn0sbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW1NvdCBuw6tdIExUXCIsbmV4dERheTpcIltOZXPDq3IgbsOrXSBMVFwiLG5leHRXZWVrOlwiZGRkZCBbbsOrXSBMVFwiLGxhc3REYXk6XCJbRGplIG7Dq10gTFRcIixsYXN0V2VlazpcImRkZGQgW2Uga2FsdWFyIG7Dq10gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJuw6sgJXNcIixwYXN0OlwiJXMgbcOrIHBhcsOrXCIsczpcImRpc2Egc2Vrb25kYVwiLHNzOlwiJWQgc2Vrb25kYVwiLG06XCJuasOrIG1pbnV0w6tcIixtbTpcIiVkIG1pbnV0YVwiLGg6XCJuasOrIG9yw6tcIixoaDpcIiVkIG9yw6tcIixkOlwibmrDqyBkaXTDq1wiLGRkOlwiJWQgZGl0w6tcIixNOlwibmrDqyBtdWFqXCIsTU06XCIlZCBtdWFqXCIseTpcIm5qw6sgdml0XCIseXk6XCIlZCB2aXRlXCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9XFwuLyxvcmRpbmFsOlwiJWQuXCIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjt2YXIgdHJhbnNsYXRvcj17d29yZHM6e3NzOltcInNla3VuZGFcIixcInNla3VuZGVcIixcInNla3VuZGlcIl0sbTpbXCJqZWRhbiBtaW51dFwiLFwiamVkbmUgbWludXRlXCJdLG1tOltcIm1pbnV0XCIsXCJtaW51dGVcIixcIm1pbnV0YVwiXSxoOltcImplZGFuIHNhdFwiLFwiamVkbm9nIHNhdGFcIl0saGg6W1wic2F0XCIsXCJzYXRhXCIsXCJzYXRpXCJdLGRkOltcImRhblwiLFwiZGFuYVwiLFwiZGFuYVwiXSxNTTpbXCJtZXNlY1wiLFwibWVzZWNhXCIsXCJtZXNlY2lcIl0seXk6W1wiZ29kaW5hXCIsXCJnb2RpbmVcIixcImdvZGluYVwiXX0sY29ycmVjdEdyYW1tYXRpY2FsQ2FzZTpmdW5jdGlvbihudW1iZXIsd29yZEtleSl7cmV0dXJuIDE9PT1udW1iZXI/d29yZEtleVswXTpudW1iZXI+PTImJm51bWJlcjw9ND93b3JkS2V5WzFdOndvcmRLZXlbMl19LHRyYW5zbGF0ZTpmdW5jdGlvbihudW1iZXIsd2l0aG91dFN1ZmZpeCxrZXkpe3ZhciB3b3JkS2V5PXRyYW5zbGF0b3Iud29yZHNba2V5XTtyZXR1cm4gMT09PWtleS5sZW5ndGg/d2l0aG91dFN1ZmZpeD93b3JkS2V5WzBdOndvcmRLZXlbMV06bnVtYmVyK1wiIFwiK3RyYW5zbGF0b3IuY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShudW1iZXIsd29yZEtleSl9fTttb21lbnQuZGVmaW5lTG9jYWxlKFwic3JcIix7bW9udGhzOlwiamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuX2p1bF9hdmd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJqYW4uX2ZlYi5fbWFyLl9hcHIuX21hal9qdW5fanVsX2F2Zy5fc2VwLl9va3QuX25vdi5fZGVjLlwiLnNwbGl0KFwiX1wiKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOlwibmVkZWxqYV9wb25lZGVsamFrX3V0b3Jha19zcmVkYV/EjWV0dnJ0YWtfcGV0YWtfc3Vib3RhXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJuZWQuX3Bvbi5fdXRvLl9zcmUuX8SNZXQuX3BldC5fc3ViLlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIm5lX3BvX3V0X3NyX8SNZV9wZV9zdVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSDptbVwiLExUUzpcIkg6bW06c3NcIixMOlwiRC4gTS4gWVlZWS5cIixMTDpcIkQuIE1NTU0gWVlZWS5cIixMTEw6XCJELiBNTU1NIFlZWVkuIEg6bW1cIixMTExMOlwiZGRkZCwgRC4gTU1NTSBZWVlZLiBIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW2RhbmFzIHVdIExUXCIsbmV4dERheTpcIltzdXRyYSB1XSBMVFwiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm5cIlt1XSBbbmVkZWxqdV0gW3VdIExUXCI7Y2FzZSAzOnJldHVyblwiW3VdIFtzcmVkdV0gW3VdIExUXCI7Y2FzZSA2OnJldHVyblwiW3VdIFtzdWJvdHVdIFt1XSBMVFwiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm5cIlt1XSBkZGRkIFt1XSBMVFwifX0sbGFzdERheTpcIltqdcSNZSB1XSBMVFwiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuW1wiW3Byb8WhbGVdIFtuZWRlbGplXSBbdV0gTFRcIixcIltwcm/FoWxvZ10gW3BvbmVkZWxqa2FdIFt1XSBMVFwiLFwiW3Byb8WhbG9nXSBbdXRvcmthXSBbdV0gTFRcIixcIltwcm/FoWxlXSBbc3JlZGVdIFt1XSBMVFwiLFwiW3Byb8WhbG9nXSBbxI1ldHZydGthXSBbdV0gTFRcIixcIltwcm/FoWxvZ10gW3BldGthXSBbdV0gTFRcIixcIltwcm/FoWxlXSBbc3Vib3RlXSBbdV0gTFRcIl1bdGhpcy5kYXkoKV19LHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcInphICVzXCIscGFzdDpcInByZSAlc1wiLHM6XCJuZWtvbGlrbyBzZWt1bmRpXCIsc3M6dHJhbnNsYXRvci50cmFuc2xhdGUsbTp0cmFuc2xhdG9yLnRyYW5zbGF0ZSxtbTp0cmFuc2xhdG9yLnRyYW5zbGF0ZSxoOnRyYW5zbGF0b3IudHJhbnNsYXRlLGhoOnRyYW5zbGF0b3IudHJhbnNsYXRlLGQ6XCJkYW5cIixkZDp0cmFuc2xhdG9yLnRyYW5zbGF0ZSxNOlwibWVzZWNcIixNTTp0cmFuc2xhdG9yLnRyYW5zbGF0ZSx5OlwiZ29kaW51XCIseXk6dHJhbnNsYXRvci50cmFuc2xhdGV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9XFwuLyxvcmRpbmFsOlwiJWQuXCIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjt2YXIgdHJhbnNsYXRvcj17d29yZHM6e3NzOltcItGB0LXQutGD0L3QtNCwXCIsXCLRgdC10LrRg9C90LTQtVwiLFwi0YHQtdC60YPQvdC00LhcIl0sbTpbXCLRmNC10LTQsNC9INC80LjQvdGD0YJcIixcItGY0LXQtNC90LUg0LzQuNC90YPRgtC1XCJdLG1tOltcItC80LjQvdGD0YJcIixcItC80LjQvdGD0YLQtVwiLFwi0LzQuNC90YPRgtCwXCJdLGg6W1wi0ZjQtdC00LDQvSDRgdCw0YJcIixcItGY0LXQtNC90L7QsyDRgdCw0YLQsFwiXSxoaDpbXCLRgdCw0YJcIixcItGB0LDRgtCwXCIsXCLRgdCw0YLQuFwiXSxkZDpbXCLQtNCw0L1cIixcItC00LDQvdCwXCIsXCLQtNCw0L3QsFwiXSxNTTpbXCLQvNC10YHQtdGGXCIsXCLQvNC10YHQtdGG0LBcIixcItC80LXRgdC10YbQuFwiXSx5eTpbXCLQs9C+0LTQuNC90LBcIixcItCz0L7QtNC40L3QtVwiLFwi0LPQvtC00LjQvdCwXCJdfSxjb3JyZWN0R3JhbW1hdGljYWxDYXNlOmZ1bmN0aW9uKG51bWJlcix3b3JkS2V5KXtyZXR1cm4gMT09PW51bWJlcj93b3JkS2V5WzBdOm51bWJlcj49MiYmbnVtYmVyPD00P3dvcmRLZXlbMV06d29yZEtleVsyXX0sdHJhbnNsYXRlOmZ1bmN0aW9uKG51bWJlcix3aXRob3V0U3VmZml4LGtleSl7dmFyIHdvcmRLZXk9dHJhbnNsYXRvci53b3Jkc1trZXldO3JldHVybiAxPT09a2V5Lmxlbmd0aD93aXRob3V0U3VmZml4P3dvcmRLZXlbMF06d29yZEtleVsxXTpudW1iZXIrXCIgXCIrdHJhbnNsYXRvci5jb3JyZWN0R3JhbW1hdGljYWxDYXNlKG51bWJlcix3b3JkS2V5KX19O21vbWVudC5kZWZpbmVMb2NhbGUoXCJzci1jeXJsXCIse21vbnRoczpcItGY0LDQvdGD0LDRgF/RhNC10LHRgNGD0LDRgF/QvNCw0YDRgl/QsNC/0YDQuNC7X9C80LDRmF/RmNGD0L1f0ZjRg9C7X9Cw0LLQs9GD0YHRgl/RgdC10L/RgtC10LzQsdCw0YBf0L7QutGC0L7QsdCw0YBf0L3QvtCy0LXQvNCx0LDRgF/QtNC10YbQtdC80LHQsNGAXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0Olwi0ZjQsNC9Ll/RhNC10LEuX9C80LDRgC5f0LDQv9GALl/QvNCw0Zhf0ZjRg9C9X9GY0YPQu1/QsNCy0LMuX9GB0LXQvy5f0L7QutGCLl/QvdC+0LIuX9C00LXRhi5cIi5zcGxpdChcIl9cIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpcItC90LXQtNC10ZnQsF/Qv9C+0L3QtdC00LXRmdCw0Lpf0YPRgtC+0YDQsNC6X9GB0YDQtdC00LBf0YfQtdGC0LLRgNGC0LDQul/Qv9C10YLQsNC6X9GB0YPQsdC+0YLQsFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi0L3QtdC0Ll/Qv9C+0L0uX9GD0YLQvi5f0YHRgNC1Ll/Rh9C10YIuX9C/0LXRgi5f0YHRg9CxLlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcItC90LVf0L/Qvl/Rg9GCX9GB0YBf0YfQtV/Qv9C1X9GB0YNcIi5zcGxpdChcIl9cIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDpcIkg6bW1cIixMVFM6XCJIOm1tOnNzXCIsTDpcIkQuIE0uIFlZWVkuXCIsTEw6XCJELiBNTU1NIFlZWVkuXCIsTExMOlwiRC4gTU1NTSBZWVlZLiBIOm1tXCIsTExMTDpcImRkZGQsIEQuIE1NTU0gWVlZWS4gSDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIlvQtNCw0L3QsNGBINGDXSBMVFwiLG5leHREYXk6XCJb0YHRg9GC0YDQsCDRg10gTFRcIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuXCJb0YNdIFvQvdC10LTQtdGZ0YNdIFvRg10gTFRcIjtjYXNlIDM6cmV0dXJuXCJb0YNdIFvRgdGA0LXQtNGDXSBb0YNdIExUXCI7Y2FzZSA2OnJldHVyblwiW9GDXSBb0YHRg9Cx0L7RgtGDXSBb0YNdIExUXCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVyblwiW9GDXSBkZGRkIFvRg10gTFRcIn19LGxhc3REYXk6XCJb0ZjRg9GH0LUg0YNdIExUXCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm5bXCJb0L/RgNC+0YjQu9C1XSBb0L3QtdC00LXRmdC1XSBb0YNdIExUXCIsXCJb0L/RgNC+0YjQu9C+0LNdIFvQv9C+0L3QtdC00LXRmdC60LBdIFvRg10gTFRcIixcIlvQv9GA0L7RiNC70L7Qs10gW9GD0YLQvtGA0LrQsF0gW9GDXSBMVFwiLFwiW9C/0YDQvtGI0LvQtV0gW9GB0YDQtdC00LVdIFvRg10gTFRcIixcIlvQv9GA0L7RiNC70L7Qs10gW9GH0LXRgtCy0YDRgtC60LBdIFvRg10gTFRcIixcIlvQv9GA0L7RiNC70L7Qs10gW9C/0LXRgtC60LBdIFvRg10gTFRcIixcIlvQv9GA0L7RiNC70LVdIFvRgdGD0LHQvtGC0LVdIFvRg10gTFRcIl1bdGhpcy5kYXkoKV19LHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcItC30LAgJXNcIixwYXN0Olwi0L/RgNC1ICVzXCIsczpcItC90LXQutC+0LvQuNC60L4g0YHQtdC60YPQvdC00LhcIixzczp0cmFuc2xhdG9yLnRyYW5zbGF0ZSxtOnRyYW5zbGF0b3IudHJhbnNsYXRlLG1tOnRyYW5zbGF0b3IudHJhbnNsYXRlLGg6dHJhbnNsYXRvci50cmFuc2xhdGUsaGg6dHJhbnNsYXRvci50cmFuc2xhdGUsZDpcItC00LDQvVwiLGRkOnRyYW5zbGF0b3IudHJhbnNsYXRlLE06XCLQvNC10YHQtdGGXCIsTU06dHJhbnNsYXRvci50cmFuc2xhdGUseTpcItCz0L7QtNC40L3Rg1wiLHl5OnRyYW5zbGF0b3IudHJhbnNsYXRlfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfVxcLi8sb3JkaW5hbDpcIiVkLlwiLHdlZWs6e2RvdzoxLGRveTo3fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7bW9tZW50LmRlZmluZUxvY2FsZShcInNzXCIse21vbnRoczpcIkJoaW1iaWR2d2FuZV9JbmRsb3ZhbmFfSW5kbG92J2xlbmtodWx1X01hYmFzYV9Jbmtod2VraHdldGlfSW5obGFiYV9LaG9sd2FuZV9JbmdjaV9JbnlvbmlfSW1waGFsYV9Md2V0aV9JbmdvbmdvbmlcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJCaGlfSW5hX0ludV9NYWJfSW5rX0luaF9LaG9fSWdjX0lueV9JbXBfTHdlX0lnb1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcIkxpc29udGZvX1Vtc29tYnVsdWtvX0xlc2liaWxpX0xlc2l0c2F0ZnVfTGVzaW5lX0xlc2lobGFudV9VbWdjaWJlbG9cIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIkxpc19VbWJfTHNiX0xlc19Mc2lfTHNoX1VtZ1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIkxpX1VzX0xiX0x0X0xzX0xoX1VnXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJoOm1tIEFcIixMVFM6XCJoOm1tOnNzIEFcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBoOm1tIEFcIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW05hbXVobGEgbmdhXSBMVFwiLG5leHREYXk6XCJbS3VzYXNhIG5nYV0gTFRcIixuZXh0V2VlazpcImRkZGQgW25nYV0gTFRcIixsYXN0RGF5OlwiW0l0b2xvIG5nYV0gTFRcIixsYXN0V2VlazpcImRkZGQgW2xlbGlwaGVsaWxlXSBbbmdhXSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIm5nYSAlc1wiLHBhc3Q6XCJ3ZW50ZWthIG5nYSAlc1wiLHM6XCJlbWl6dXp3YW5hIGxvbWNhbmVcIixzczpcIiVkIG16dXp3YW5hXCIsbTpcInVtenV6dVwiLG1tOlwiJWQgZW1penV6dVwiLGg6XCJsaWhvcmFcIixoaDpcIiVkIGVtYWhvcmFcIixkOlwibGlsYW5nYVwiLGRkOlwiJWQgZW1hbGFuZ2FcIixNOlwiaW55YW5nYVwiLE1NOlwiJWQgdGlueWFuZ2FcIix5OlwidW1ueWFrYVwiLHl5OlwiJWQgaW1pbnlha2FcIn0sbWVyaWRpZW1QYXJzZTovZWt1c2VuaXxlbWluaXxlbnRzYW1iYW1hfGVidXN1a3UvLG1lcmlkaWVtOmZ1bmN0aW9uKGhvdXJzLG1pbnV0ZXMsaXNMb3dlcil7cmV0dXJuIGhvdXJzPDExP1wiZWt1c2VuaVwiOmhvdXJzPDE1P1wiZW1pbmlcIjpob3VyczwxOT9cImVudHNhbWJhbWFcIjpcImVidXN1a3VcIn0sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGhvdXIsbWVyaWRpZW0pe3JldHVybiAxMj09PWhvdXImJihob3VyPTApLFwiZWt1c2VuaVwiPT09bWVyaWRpZW0/aG91cjpcImVtaW5pXCI9PT1tZXJpZGllbT9ob3VyPj0xMT9ob3VyOmhvdXIrMTI6XCJlbnRzYW1iYW1hXCI9PT1tZXJpZGllbXx8XCJlYnVzdWt1XCI9PT1tZXJpZGllbT8wPT09aG91cj8wOmhvdXIrMTI6dm9pZCAwfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfS8sb3JkaW5hbDpcIiVkXCIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwic3ZcIix7bW9udGhzOlwiamFudWFyaV9mZWJydWFyaV9tYXJzX2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0aV9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImphbl9mZWJfbWFyX2Fwcl9tYWpfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwic8O2bmRhZ19tw6VuZGFnX3Rpc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbMO2cmRhZ1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwic8O2bl9tw6VuX3Rpc19vbnNfdG9yX2ZyZV9sw7ZyXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwic8O2X23DpV90aV9vbl90b19mcl9sw7ZcIi5zcGxpdChcIl9cIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJZWVlZLU1NLUREXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIFtrbC5dIEhIOm1tXCIsTExMTDpcImRkZGQgRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW1cIixsbGw6XCJEIE1NTSBZWVlZIEhIOm1tXCIsbGxsbDpcImRkZCBEIE1NTSBZWVlZIEhIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW0lkYWddIExUXCIsbmV4dERheTpcIltJbW9yZ29uXSBMVFwiLGxhc3REYXk6XCJbSWfDpXJdIExUXCIsbmV4dFdlZWs6XCJbUMOlXSBkZGRkIExUXCIsbGFzdFdlZWs6XCJbSV0gZGRkZFtzXSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIm9tICVzXCIscGFzdDpcImbDtnIgJXMgc2VkYW5cIixzOlwibsOlZ3JhIHNla3VuZGVyXCIsc3M6XCIlZCBzZWt1bmRlclwiLG06XCJlbiBtaW51dFwiLG1tOlwiJWQgbWludXRlclwiLGg6XCJlbiB0aW1tZVwiLGhoOlwiJWQgdGltbWFyXCIsZDpcImVuIGRhZ1wiLGRkOlwiJWQgZGFnYXJcIixNOlwiZW4gbcOlbmFkXCIsTU06XCIlZCBtw6VuYWRlclwiLHk6XCJldHQgw6VyXCIseXk6XCIlZCDDpXJcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn0oXFw6ZXxcXDphKS8sb3JkaW5hbDpmdW5jdGlvbihudW1iZXIpe3ZhciBiPW51bWJlciUxMDtyZXR1cm4gbnVtYmVyKygxPT1+fihudW1iZXIlMTAwLzEwKT9cIjplXCI6MT09PWI/XCI6YVwiOjI9PT1iP1wiOmFcIjpcIjplXCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO21vbWVudC5kZWZpbmVMb2NhbGUoXCJzd1wiLHttb250aHM6XCJKYW51YXJpX0ZlYnJ1YXJpX01hY2hpX0FwcmlsaV9NZWlfSnVuaV9KdWxhaV9BZ29zdGlfU2VwdGVtYmFfT2t0b2JhX05vdmVtYmFfRGVzZW1iYVwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIkphbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9BZ29fU2VwX09rdF9Ob3ZfRGVzXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwiSnVtYXBpbGlfSnVtYXRhdHVfSnVtYW5uZV9KdW1hdGFub19BbGhhbWlzaV9JanVtYWFfSnVtYW1vc2lcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIkpwbF9KdGF0X0pubmVfSnRhbl9BbGhfSWptX0ptb3NcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJKMl9KM19KNF9KNV9BbF9Jal9KMVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiaGg6bW0gQVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkRELk1NLllZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJbbGVvIHNhYV0gTFRcIixuZXh0RGF5OlwiW2tlc2hvIHNhYV0gTFRcIixuZXh0V2VlazpcIlt3aWtpIGlqYXlvXSBkZGRkIFtzYWF0XSBMVFwiLGxhc3REYXk6XCJbamFuYV0gTFRcIixsYXN0V2VlazpcIlt3aWtpIGlsaXlvcGl0YV0gZGRkZCBbc2FhdF0gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlcyBiYWFkYXllXCIscGFzdDpcInRva2VhICVzXCIsczpcImhpdmkgcHVuZGVcIixzczpcInNla3VuZGUgJWRcIixtOlwiZGFraWthIG1vamFcIixtbTpcImRha2lrYSAlZFwiLGg6XCJzYWEgbGltb2phXCIsaGg6XCJtYXNhYSAlZFwiLGQ6XCJzaWt1IG1vamFcIixkZDpcInNpa3UgJWRcIixNOlwibXdlemkgbW1vamFcIixNTTpcIm1pZXppICVkXCIseTpcIm13YWthIG1tb2phXCIseXk6XCJtaWFrYSAlZFwifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO3ZhciBzeW1ib2xNYXA9ezE6XCLgr6dcIiwyOlwi4K+oXCIsMzpcIuCvqVwiLDQ6XCLgr6pcIiw1Olwi4K+rXCIsNjpcIuCvrFwiLDc6XCLgr61cIiw4Olwi4K+uXCIsOTpcIuCvr1wiLDA6XCLgr6ZcIn0sbnVtYmVyTWFwPXtcIuCvp1wiOlwiMVwiLFwi4K+oXCI6XCIyXCIsXCLgr6lcIjpcIjNcIixcIuCvqlwiOlwiNFwiLFwi4K+rXCI6XCI1XCIsXCLgr6xcIjpcIjZcIixcIuCvrVwiOlwiN1wiLFwi4K+uXCI6XCI4XCIsXCLgr69cIjpcIjlcIixcIuCvplwiOlwiMFwifTttb21lbnQuZGVmaW5lTG9jYWxlKFwidGFcIix7bW9udGhzOlwi4K6c4K6p4K614K6w4K6/X+CuquCuv+CuquCvjeCusOCuteCusOCuv1/grq7grr7grrDgr43grprgr41f4K6P4K6q4K+N4K6w4K6y4K+NX+CuruCvh1/grpzgr4Lgrqngr41f4K6c4K+C4K6y4K+IX+CuhuCuleCuuOCvjeCun+CvjV/grprgr4bgrqrgr43grp/gr4bgrq7gr43grqrgrrDgr41f4K6F4K6V4K+N4K6f4K+H4K6+4K6q4K6w4K+NX+CuqOCuteCuruCvjeCuquCusOCvjV/grp/grr/grprgrq7gr43grqrgrrDgr41cIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLgrpzgrqngrrXgrrDgrr9f4K6q4K6/4K6q4K+N4K6w4K614K6w4K6/X+CuruCuvuCusOCvjeCumuCvjV/gro/grqrgr43grrDgrrLgr41f4K6u4K+HX+CunOCvguCuqeCvjV/grpzgr4LgrrLgr4hf4K6G4K6V4K644K+N4K6f4K+NX+CumuCvhuCuquCvjeCun+CvhuCuruCvjeCuquCusOCvjV/groXgrpXgr43grp/gr4fgrr7grqrgrrDgr41f4K6o4K614K6u4K+N4K6q4K6w4K+NX+Cun+Cuv+CumuCuruCvjeCuquCusOCvjVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcIuCunuCuvuCur+Cuv+CuseCvjeCuseCvgeCuleCvjeCuleCuv+CutOCuruCviF/grqTgrr/grpngr43grpXgrp/gr43grpXgrr/grrTgrq7gr4hf4K6a4K+G4K614K+N4K614K6+4K6v4K+N4K6V4K6/4K604K6u4K+IX+CuquCvgeCupOCuqeCvjeCuleCuv+CutOCuruCviF/grrXgrr/grq/grr7grrTgrpXgr43grpXgrr/grrTgrq7gr4hf4K614K+G4K6z4K+N4K6z4K6/4K6V4K+N4K6V4K6/4K604K6u4K+IX+CumuCuqeCuv+CuleCvjeCuleCuv+CutOCuruCviFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi4K6e4K6+4K6v4K6/4K6x4K+BX+CupOCuv+CumeCvjeCuleCus+CvjV/grprgr4bgrrXgr43grrXgrr7grq/gr41f4K6q4K+B4K6k4K6p4K+NX+CuteCuv+Cur+CuvuCutOCuqeCvjV/grrXgr4bgrrPgr43grrPgrr9f4K6a4K6p4K6/XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi4K6e4K6+X+CupOCuv1/grprgr4Zf4K6q4K+BX+CuteCuv1/grrXgr4Zf4K6aXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSwgSEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVksIEhIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW+Cuh+CuqeCvjeCuseCvgV0gTFRcIixuZXh0RGF5OlwiW+CuqOCuvuCus+CviF0gTFRcIixuZXh0V2VlazpcImRkZGQsIExUXCIsbGFzdERheTpcIlvgrqjgr4fgrrHgr43grrHgr4FdIExUXCIsbGFzdFdlZWs6XCJb4K6V4K6f4K6o4K+N4K6kIOCuteCuvuCusOCuruCvjV0gZGRkZCwgTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlcyDgrofgrrLgr41cIixwYXN0OlwiJXMg4K6u4K+B4K6p4K+NXCIsczpcIuCukuCusOCvgSDgrprgrr/grrIg4K614K6/4K6o4K6+4K6f4K6/4K6V4K6z4K+NXCIsc3M6XCIlZCDgrrXgrr/grqjgrr7grp/grr/grpXgrrPgr41cIixtOlwi4K6S4K6w4K+BIOCuqOCuv+CuruCuv+Cun+CuruCvjVwiLG1tOlwiJWQg4K6o4K6/4K6u4K6/4K6f4K6Z4K+N4K6V4K6z4K+NXCIsaDpcIuCukuCusOCvgSDgrq7grqPgrr8g4K6o4K+H4K6w4K6u4K+NXCIsaGg6XCIlZCDgrq7grqPgrr8g4K6o4K+H4K6w4K6u4K+NXCIsZDpcIuCukuCusOCvgSDgrqjgrr7grrPgr41cIixkZDpcIiVkIOCuqOCuvuCun+CvjeCuleCus+CvjVwiLE06XCLgrpLgrrDgr4Eg4K6u4K6+4K6k4K6u4K+NXCIsTU06XCIlZCDgrq7grr7grqTgrpngr43grpXgrrPgr41cIix5Olwi4K6S4K6w4K+BIOCuteCusOCvgeCun+CuruCvjVwiLHl5OlwiJWQg4K6G4K6j4K+N4K6f4K+B4K6V4K6z4K+NXCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ94K614K6k4K+BLyxvcmRpbmFsOmZ1bmN0aW9uKG51bWJlcil7cmV0dXJuIG51bWJlcitcIuCuteCupOCvgVwifSxwcmVwYXJzZTpmdW5jdGlvbihzdHJpbmcpe3JldHVybiBzdHJpbmcucmVwbGFjZSgvW+Cvp+CvqOCvqeCvquCvq+CvrOCvreCvruCvr+Cvpl0vZywoZnVuY3Rpb24obWF0Y2gpe3JldHVybiBudW1iZXJNYXBbbWF0Y2hdfSkpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywoZnVuY3Rpb24obWF0Y2gpe3JldHVybiBzeW1ib2xNYXBbbWF0Y2hdfSkpfSxtZXJpZGllbVBhcnNlOi/grq/grr7grq7grq7gr4184K614K+I4K6V4K6x4K+IfOCuleCuvuCusuCviHzgrqjgrqPgr43grqrgrpXgrrLgr4184K6O4K6x4K+N4K6q4K6+4K6f4K+BfOCuruCuvuCusuCviC8sbWVyaWRpZW06ZnVuY3Rpb24oaG91cixtaW51dGUsaXNMb3dlcil7cmV0dXJuIGhvdXI8Mj9cIiDgrq/grr7grq7grq7gr41cIjpob3VyPDY/XCIg4K614K+I4K6V4K6x4K+IXCI6aG91cjwxMD9cIiDgrpXgrr7grrLgr4hcIjpob3VyPDE0P1wiIOCuqOCuo+CvjeCuquCuleCusuCvjVwiOmhvdXI8MTg/XCIg4K6O4K6x4K+N4K6q4K6+4K6f4K+BXCI6aG91cjwyMj9cIiDgrq7grr7grrLgr4hcIjpcIiDgrq/grr7grq7grq7gr41cIn0sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGhvdXIsbWVyaWRpZW0pe3JldHVybiAxMj09PWhvdXImJihob3VyPTApLFwi4K6v4K6+4K6u4K6u4K+NXCI9PT1tZXJpZGllbT9ob3VyPDI/aG91cjpob3VyKzEyOlwi4K614K+I4K6V4K6x4K+IXCI9PT1tZXJpZGllbXx8XCLgrpXgrr7grrLgr4hcIj09PW1lcmlkaWVtP2hvdXI6XCLgrqjgrqPgr43grqrgrpXgrrLgr41cIj09PW1lcmlkaWVtJiZob3VyPj0xMD9ob3VyOmhvdXIrMTJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7bW9tZW50LmRlZmluZUxvY2FsZShcInRlXCIse21vbnRoczpcIuCwnOCwqOCwteCwsOCwv1/gsKvgsL/gsKzgsY3gsLDgsLXgsLDgsL9f4LCu4LC+4LCw4LGN4LCa4LC/X+Cwj+CwquCxjeCwsOCwv+CwsuCxjV/gsK7gsYdf4LCc4LGC4LCo4LGNX+CwnOCxgeCwsuCxiF/gsIbgsJfgsLjgsY3gsJ/gsYFf4LC44LGG4LCq4LGN4LCf4LGG4LCC4LCs4LCw4LGNX+CwheCwleCxjeCwn+Cxi+CwrOCwsOCxjV/gsKjgsLXgsILgsKzgsLDgsY1f4LCh4LC/4LC44LGG4LCC4LCs4LCw4LGNXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0Olwi4LCc4LCoLl/gsKvgsL/gsKzgsY3gsLAuX+CwruCwvuCwsOCxjeCwmuCwv1/gsI/gsKrgsY3gsLDgsL8uX+CwruCxh1/gsJzgsYLgsKjgsY1f4LCc4LGB4LCy4LGIX+CwhuCwly5f4LC44LGG4LCq4LGNLl/gsIXgsJXgsY3gsJ/gsYsuX+CwqOCwtS5f4LCh4LC/4LC44LGGLlwiLnNwbGl0KFwiX1wiKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOlwi4LCG4LCm4LC/4LC14LC+4LCw4LCCX+CwuOCxi+CwruCwteCwvuCwsOCwgl/gsK7gsILgsJfgsLPgsLXgsL7gsLDgsIJf4LCs4LGB4LCn4LC14LC+4LCw4LCCX+Cwl+CxgeCwsOCxgeCwteCwvuCwsOCwgl/gsLbgsYHgsJXgsY3gsLDgsLXgsL7gsLDgsIJf4LC24LCo4LC/4LC14LC+4LCw4LCCXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLgsIbgsKbgsL9f4LC44LGL4LCuX+CwruCwguCwl+Cws1/gsKzgsYHgsKdf4LCX4LGB4LCw4LGBX+CwtuCxgeCwleCxjeCwsF/gsLbgsKjgsL9cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLgsIZf4LC44LGLX+CwruCwgl/gsKzgsYFf4LCX4LGBX+CwtuCxgV/gsLZcIi5zcGxpdChcIl9cIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiQSBoOm1tXCIsTFRTOlwiQSBoOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVksIEEgaDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW+CwqOCxh+CwoeCxgV0gTFRcIixuZXh0RGF5OlwiW+CwsOCxh+CwquCxgV0gTFRcIixuZXh0V2VlazpcImRkZGQsIExUXCIsbGFzdERheTpcIlvgsKjgsL/gsKjgsY3gsKhdIExUXCIsbGFzdFdlZWs6XCJb4LCX4LCkXSBkZGRkLCBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVzIOCwsuCxi1wiLHBhc3Q6XCIlcyDgsJXgsY3gsLDgsL/gsKTgsIJcIixzOlwi4LCV4LGK4LCo4LGN4LCo4LC/IOCwleCxjeCwt+Cwo+CwvuCwsuCxgVwiLHNzOlwiJWQg4LC44LGG4LCV4LCo4LGN4LCy4LGBXCIsbTpcIuCwkuCwlSDgsKjgsL/gsK7gsL/gsLfgsIJcIixtbTpcIiVkIOCwqOCwv+CwruCwv+Cwt+CwvuCwsuCxgVwiLGg6XCLgsJLgsJUg4LCX4LCC4LCfXCIsaGg6XCIlZCDgsJfgsILgsJ/gsLLgsYFcIixkOlwi4LCS4LCVIOCwsOCxi+CwnOCxgVwiLGRkOlwiJWQg4LCw4LGL4LCc4LGB4LCy4LGBXCIsTTpcIuCwkuCwlSDgsKjgsYbgsLJcIixNTTpcIiVkIOCwqOCxhuCwsuCwsuCxgVwiLHk6XCLgsJLgsJUg4LC44LCC4LC14LCk4LGN4LC44LCw4LCCXCIseXk6XCIlZCDgsLjgsILgsLXgsKTgsY3gsLjgsLDgsL7gsLLgsYFcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn3gsLUvLG9yZGluYWw6XCIlZOCwtVwiLG1lcmlkaWVtUGFyc2U6L+CwsOCwvuCwpOCxjeCwsOCwv3zgsIngsKbgsK/gsIJ84LCu4LCn4LGN4LCv4LC+4LC54LGN4LCo4LCCfOCwuOCwvuCwr+CwguCwpOCxjeCwsOCwgi8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGhvdXIsbWVyaWRpZW0pe3JldHVybiAxMj09PWhvdXImJihob3VyPTApLFwi4LCw4LC+4LCk4LGN4LCw4LC/XCI9PT1tZXJpZGllbT9ob3VyPDQ/aG91cjpob3VyKzEyOlwi4LCJ4LCm4LCv4LCCXCI9PT1tZXJpZGllbT9ob3VyOlwi4LCu4LCn4LGN4LCv4LC+4LC54LGN4LCo4LCCXCI9PT1tZXJpZGllbT9ob3VyPj0xMD9ob3VyOmhvdXIrMTI6XCLgsLjgsL7gsK/gsILgsKTgsY3gsLDgsIJcIj09PW1lcmlkaWVtP2hvdXIrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihob3VyLG1pbnV0ZSxpc0xvd2VyKXtyZXR1cm4gaG91cjw0P1wi4LCw4LC+4LCk4LGN4LCw4LC/XCI6aG91cjwxMD9cIuCwieCwpuCwr+CwglwiOmhvdXI8MTc/XCLgsK7gsKfgsY3gsK/gsL7gsLngsY3gsKjgsIJcIjpob3VyPDIwP1wi4LC44LC+4LCv4LCC4LCk4LGN4LCw4LCCXCI6XCLgsLDgsL7gsKTgsY3gsLDgsL9cIn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwidGV0XCIse21vbnRoczpcIkphbmVpcnVfRmV2ZXJlaXJ1X01hcnN1X0FicmlsX01haXVfSnXDsXVfSnVsbHVfQWd1c3R1X1NldGVtYnJ1X091dHVicnVfTm92ZW1icnVfRGV6ZW1icnVcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJKYW5fRmV2X01hcl9BYnJfTWFpX0p1bl9KdWxfQWdvX1NldF9PdXRfTm92X0RlelwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcIkRvbWluZ3VfU2VndW5kYV9UZXJzYV9LdWFydGFfS2ludGFfU2VzdGFfU2FiYWR1XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJEb21fU2VnX1RlcnNfS3VhX0tpbnRfU2VzdF9TYWJcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJEb19TZWdfVGVfS3VfS2lfU2VzX1NhXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIltPaGluIGloYV0gTFRcIixuZXh0RGF5OlwiW0FiYW4gaWhhXSBMVFwiLG5leHRXZWVrOlwiZGRkZCBbaWhhXSBMVFwiLGxhc3REYXk6XCJbSG9yaXNlaWsgaWhhXSBMVFwiLGxhc3RXZWVrOlwiZGRkZCBbc2VtYW5hIGtvdHVrXSBbaWhhXSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcImloYSAlc1wiLHBhc3Q6XCIlcyBsaXViYVwiLHM6XCJzZWd1bmR1IGJhbHVuXCIsc3M6XCJzZWd1bmR1ICVkXCIsbTpcIm1pbnV0dSBpZGFcIixtbTpcIm1pbnV0dSAlZFwiLGg6XCJvcmFzIGlkYVwiLGhoOlwib3JhcyAlZFwiLGQ6XCJsb3JvbiBpZGFcIixkZDpcImxvcm9uICVkXCIsTTpcImZ1bGFuIGlkYVwiLE1NOlwiZnVsYW4gJWRcIix5OlwidGluYW4gaWRhXCIseXk6XCJ0aW5hbiAlZFwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obnVtYmVyKXt2YXIgYj1udW1iZXIlMTA7cmV0dXJuIG51bWJlcisoMT09fn4obnVtYmVyJTEwMC8xMCk/XCJ0aFwiOjE9PT1iP1wic3RcIjoyPT09Yj9cIm5kXCI6Mz09PWI/XCJyZFwiOlwidGhcIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHN1ZmZpeGVzPXswOlwiLdGD0LxcIiwxOlwiLdGD0LxcIiwyOlwiLdGO0LxcIiwzOlwiLdGO0LxcIiw0OlwiLdGD0LxcIiw1OlwiLdGD0LxcIiw2OlwiLdGD0LxcIiw3OlwiLdGD0LxcIiw4OlwiLdGD0LxcIiw5OlwiLdGD0LxcIiwxMDpcIi3Rg9C8XCIsMTI6XCIt0YPQvFwiLDEzOlwiLdGD0LxcIiwyMDpcIi3Rg9C8XCIsMzA6XCIt0Y7QvFwiLDQwOlwiLdGD0LxcIiw1MDpcIi3Rg9C8XCIsNjA6XCIt0YPQvFwiLDcwOlwiLdGD0LxcIiw4MDpcIi3Rg9C8XCIsOTA6XCIt0YPQvFwiLDEwMDpcIi3Rg9C8XCJ9O21vbWVudC5kZWZpbmVMb2NhbGUoXCJ0Z1wiLHttb250aHM6e2Zvcm1hdDpcItGP0L3QstCw0YDQuF/RhNC10LLRgNCw0LvQuF/QvNCw0YDRgtC4X9Cw0L/RgNC10LvQuF/QvNCw0LnQuF/QuNGO0L3QuF/QuNGO0LvQuF/QsNCy0LPRg9GB0YLQuF/RgdC10L3RgtGP0LHRgNC4X9C+0LrRgtGP0LHRgNC4X9C90L7Rj9Cx0YDQuF/QtNC10LrQsNCx0YDQuFwiLnNwbGl0KFwiX1wiKSxzdGFuZGFsb25lOlwi0Y/QvdCy0LDRgF/RhNC10LLRgNCw0Ltf0LzQsNGA0YJf0LDQv9GA0LXQu1/QvNCw0Llf0LjRjtC9X9C40Y7Qu1/QsNCy0LPRg9GB0YJf0YHQtdC90YLRj9Cx0YBf0L7QutGC0Y/QsdGAX9C90L7Rj9Cx0YBf0LTQtdC60LDQsdGAXCIuc3BsaXQoXCJfXCIpfSxtb250aHNTaG9ydDpcItGP0L3Qsl/RhNC10LJf0LzQsNGAX9Cw0L/RgF/QvNCw0Llf0LjRjtC9X9C40Y7Qu1/QsNCy0LNf0YHQtdC9X9C+0LrRgl/QvdC+0Y9f0LTQtdC6XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwi0Y/QutGI0LDQvdCx0LVf0LTRg9GI0LDQvdCx0LVf0YHQtdGI0LDQvdCx0LVf0YfQvtGA0YjQsNC90LHQtV/Qv9Cw0L3St9GI0LDQvdCx0LVf0rfRg9C80YrQsF/RiNCw0L3QsdC1XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLRj9GI0LFf0LTRiNCxX9GB0YjQsV/Rh9GI0LFf0L/RiNCxX9K30YPQvF/RiNC90LFcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLRj9GIX9C00Yhf0YHRiF/Rh9GIX9C/0Yhf0rfQvF/RiNCxXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQuTU0uWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIlvQmNC80YDTr9C3INGB0L7QsNGC0LhdIExUXCIsbmV4dERheTpcIlvQpNCw0YDQtNC+INGB0L7QsNGC0LhdIExUXCIsbGFzdERheTpcIlvQlNC40YDTr9C3INGB0L7QsNGC0LhdIExUXCIsbmV4dFdlZWs6XCJkZGRkW9C4XSBb0rPQsNGE0YLQsNC4INC+0Y/QvdC00LAg0YHQvtCw0YLQuF0gTFRcIixsYXN0V2VlazpcImRkZGRb0LhdIFvSs9Cw0YTRgtCw0Lgg0LPRg9C30LDRiNGC0LAg0YHQvtCw0YLQuF0gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCLQsdCw0YrQtNC4ICVzXCIscGFzdDpcIiVzINC/0LXRiFwiLHM6XCLRj9C60YfQsNC90LQg0YHQvtC90LjRj1wiLG06XCLRj9C6INC00LDSm9C40pvQsFwiLG1tOlwiJWQg0LTQsNKb0LjSm9CwXCIsaDpcItGP0Log0YHQvtCw0YJcIixoaDpcIiVkINGB0L7QsNGCXCIsZDpcItGP0Log0YDTr9C3XCIsZGQ6XCIlZCDRgNOv0LdcIixNOlwi0Y/QuiDQvNC+0rNcIixNTTpcIiVkINC80L7Ss1wiLHk6XCLRj9C6INGB0L7Qu1wiLHl5OlwiJWQg0YHQvtC7XCJ9LG1lcmlkaWVtUGFyc2U6L9GI0LDQsXzRgdGD0LHSs3zRgNOv0Ld80LHQtdCz0L7Ssy8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGhvdXIsbWVyaWRpZW0pe3JldHVybiAxMj09PWhvdXImJihob3VyPTApLFwi0YjQsNCxXCI9PT1tZXJpZGllbT9ob3VyPDQ/aG91cjpob3VyKzEyOlwi0YHRg9Cx0rNcIj09PW1lcmlkaWVtP2hvdXI6XCLRgNOv0LdcIj09PW1lcmlkaWVtP2hvdXI+PTExP2hvdXI6aG91cisxMjpcItCx0LXQs9C+0rNcIj09PW1lcmlkaWVtP2hvdXIrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihob3VyLG1pbnV0ZSxpc0xvd2VyKXtyZXR1cm4gaG91cjw0P1wi0YjQsNCxXCI6aG91cjwxMT9cItGB0YPQsdKzXCI6aG91cjwxNj9cItGA06/Qt1wiOmhvdXI8MTk/XCLQsdC10LPQvtKzXCI6XCLRiNCw0LFcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn0tKNGD0Lx80Y7QvCkvLG9yZGluYWw6ZnVuY3Rpb24obnVtYmVyKXtyZXR1cm4gbnVtYmVyKyhzdWZmaXhlc1tudW1iZXJdfHxzdWZmaXhlc1tudW1iZXIlMTBdfHxzdWZmaXhlc1tudW1iZXI+PTEwMD8xMDA6bnVsbF0pfSx3ZWVrOntkb3c6MSxkb3k6N319KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO21vbWVudC5kZWZpbmVMb2NhbGUoXCJ0aFwiLHttb250aHM6XCLguKHguIHguKPguLLguITguKFf4LiB4Li44Lih4Lig4Liy4Lie4Lix4LiZ4LiY4LmMX+C4oeC4teC4meC4suC4hOC4oV/guYDguKHguKnguLLguKLguJlf4Lie4Lik4Lip4Lig4Liy4LiE4LihX+C4oeC4tOC4luC4uOC4meC4suC4ouC4mV/guIHguKPguIHguI7guLLguITguKFf4Liq4Li04LiH4Lir4Liy4LiE4LihX+C4geC4seC4meC4ouC4suC4ouC4mV/guJXguLjguKXguLLguITguKFf4Lie4Lik4Lio4LiI4Li04LiB4Liy4Lii4LiZX+C4mOC4seC4meC4p+C4suC4hOC4oVwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIuC4oS7guIQuX+C4gS7guJ4uX+C4oeC4tS7guIQuX+C5gOC4oS7guKIuX+C4ni7guIQuX+C4oeC4tC7guKIuX+C4gS7guIQuX+C4qi7guIQuX+C4gS7guKIuX+C4lS7guIQuX+C4ni7guKIuX+C4mC7guIQuXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6XCLguK3guLLguJfguLTguJXguKLguYxf4LiI4Lix4LiZ4LiX4Lij4LmMX+C4reC4seC4h+C4hOC4suC4o1/guJ7guLjguJhf4Lie4Lik4Lir4Lix4Liq4Lia4LiU4Li1X+C4qOC4uOC4geC4o+C5jF/guYDguKrguLLguKPguYxcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIuC4reC4suC4l+C4tOC4leC4ouC5jF/guIjguLHguJnguJfguKPguYxf4Lit4Lix4LiH4LiE4Liy4LijX+C4nuC4uOC4mF/guJ7guKTguKvguLHguKpf4Lio4Li44LiB4Lij4LmMX+C5gOC4quC4suC4o+C5jFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIuC4reC4si5f4LiILl/guK0uX+C4ni5f4Lie4LikLl/guKguX+C4qi5cIi5zcGxpdChcIl9cIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDpcIkg6bW1cIixMVFM6XCJIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkg4LmA4Lin4Lil4LiyIEg6bW1cIixMTExMOlwi4Lin4Lix4LiZZGRkZOC4l+C4teC5iCBEIE1NTU0gWVlZWSDguYDguKfguKXguLIgSDptbVwifSxtZXJpZGllbVBhcnNlOi/guIHguYjguK3guJnguYDguJfguLXguYjguKLguId84Lir4Lil4Lix4LiH4LmA4LiX4Li14LmI4Lii4LiHLyxpc1BNOmZ1bmN0aW9uKGlucHV0KXtyZXR1cm5cIuC4q+C4peC4seC4h+C5gOC4l+C4teC5iOC4ouC4h1wiPT09aW5wdXR9LG1lcmlkaWVtOmZ1bmN0aW9uKGhvdXIsbWludXRlLGlzTG93ZXIpe3JldHVybiBob3VyPDEyP1wi4LiB4LmI4Lit4LiZ4LmA4LiX4Li14LmI4Lii4LiHXCI6XCLguKvguKXguLHguIfguYDguJfguLXguYjguKLguIdcIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJb4Lin4Lix4LiZ4LiZ4Li14LmJIOC5gOC4p+C4peC4sl0gTFRcIixuZXh0RGF5OlwiW+C4nuC4o+C4uOC5iOC4h+C4meC4teC5iSDguYDguKfguKXguLJdIExUXCIsbmV4dFdlZWs6XCJkZGRkW+C4q+C4meC5ieC4siDguYDguKfguKXguLJdIExUXCIsbGFzdERheTpcIlvguYDguKHguLfguYjguK3guKfguLLguJnguJnguLXguYkg4LmA4Lin4Lil4LiyXSBMVFwiLGxhc3RXZWVrOlwiW+C4p+C4seC4mV1kZGRkW+C4l+C4teC5iOC5geC4peC5ieC4pyDguYDguKfguKXguLJdIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwi4Lit4Li14LiBICVzXCIscGFzdDpcIiVz4LiX4Li14LmI4LmB4Lil4LmJ4LinXCIsczpcIuC5hOC4oeC5iOC4geC4teC5iOC4p+C4tOC4meC4suC4l+C4tVwiLHNzOlwiJWQg4Lin4Li04LiZ4Liy4LiX4Li1XCIsbTpcIjEg4LiZ4Liy4LiX4Li1XCIsbW06XCIlZCDguJnguLLguJfguLVcIixoOlwiMSDguIrguLHguYjguKfguYLguKHguIdcIixoaDpcIiVkIOC4iuC4seC5iOC4p+C5guC4oeC4h1wiLGQ6XCIxIOC4p+C4seC4mVwiLGRkOlwiJWQg4Lin4Lix4LiZXCIsdzpcIjEg4Liq4Lix4Lib4LiU4Liy4Lir4LmMXCIsd3c6XCIlZCDguKrguLHguJvguJTguLLguKvguYxcIixNOlwiMSDguYDguJTguLfguK3guJlcIixNTTpcIiVkIOC5gOC4lOC4t+C4reC4mVwiLHk6XCIxIOC4m+C4tVwiLHl5OlwiJWQg4Lib4Li1XCJ9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjt2YXIgc3VmZml4ZXM9ezE6XCInaW5qaVwiLDU6XCInaW5qaVwiLDg6XCInaW5qaVwiLDcwOlwiJ2luamlcIiw4MDpcIidpbmppXCIsMjpcIiduamlcIiw3OlwiJ25qaVwiLDIwOlwiJ25qaVwiLDUwOlwiJ25qaVwiLDM6XCInw7xuamlcIiw0OlwiJ8O8bmppXCIsMTAwOlwiJ8O8bmppXCIsNjpcIiduanlcIiw5OlwiJ3VuanlcIiwxMDpcIid1bmp5XCIsMzA6XCIndW5qeVwiLDYwOlwiJ3luanlcIiw5MDpcIid5bmp5XCJ9O21vbWVudC5kZWZpbmVMb2NhbGUoXCJ0a1wiLHttb250aHM6XCLDnWFud2FyX0Zld3JhbF9NYXJ0X0FwcmVsX01hw71fScO9dW5fScO9dWxfQXdndXN0X1NlbnTDvWFicl9Pa3TDvWFicl9Ob8O9YWJyX0Rla2FiclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIsOdYW5fRmV3X01hcl9BcHJfTWHDvV9Jw71uX0nDvWxfQXdnX1Nlbl9Pa3RfTm/DvV9EZWtcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCLDnWVrxZ9lbmJlX0R1xZ9lbmJlX1NpxZ9lbmJlX8OHYXLFn2VuYmVfUGVuxZ9lbmJlX0FubmFfxZ5lbmJlXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLDnWVrX0R1xZ9fU2nFn1/Dh2FyX1Blbl9Bbm5fxZ5lblwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIsOda19ExZ9fU8WfX8OHcl9Qbl9Bbl/Fnm5cIi5zcGxpdChcIl9cIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW2J1Z8O8biBzYWdhdF0gTFRcIixuZXh0RGF5OlwiW2VydGlyIHNhZ2F0XSBMVFwiLG5leHRXZWVrOlwiW2luZGlraV0gZGRkZCBbc2FnYXRdIExUXCIsbGFzdERheTpcIltkw7zDvW5dIExUXCIsbGFzdFdlZWs6XCJbZ2XDp2VuXSBkZGRkIFtzYWdhdF0gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlcyBzb8WIXCIscGFzdDpcIiVzIMO2xYhcIixzOlwiYmlybsOkw6dlIHNla3VudFwiLG06XCJiaXIgbWludXRcIixtbTpcIiVkIG1pbnV0XCIsaDpcImJpciBzYWdhdFwiLGhoOlwiJWQgc2FnYXRcIixkOlwiYmlyIGfDvG5cIixkZDpcIiVkIGfDvG5cIixNOlwiYmlyIGHDvVwiLE1NOlwiJWQgYcO9XCIseTpcImJpciDDvXlsXCIseXk6XCIlZCDDvXlsXCJ9LG9yZGluYWw6ZnVuY3Rpb24obnVtYmVyLHBlcmlvZCl7c3dpdGNoKHBlcmlvZCl7Y2FzZVwiZFwiOmNhc2VcIkRcIjpjYXNlXCJEb1wiOmNhc2VcIkREXCI6cmV0dXJuIG51bWJlcjtkZWZhdWx0OmlmKDA9PT1udW1iZXIpcmV0dXJuIG51bWJlcitcIid1bmp5XCI7dmFyIGE9bnVtYmVyJTEwO3JldHVybiBudW1iZXIrKHN1ZmZpeGVzW2FdfHxzdWZmaXhlc1tudW1iZXIlMTAwLWFdfHxzdWZmaXhlc1tudW1iZXI+PTEwMD8xMDA6bnVsbF0pfX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwidGwtcGhcIix7bW9udGhzOlwiRW5lcm9fUGVicmVyb19NYXJzb19BYnJpbF9NYXlvX0h1bnlvX0h1bHlvX0Fnb3N0b19TZXR5ZW1icmVfT2t0dWJyZV9Ob2J5ZW1icmVfRGlzeWVtYnJlXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiRW5lX1BlYl9NYXJfQWJyX01heV9IdW5fSHVsX0Fnb19TZXRfT2t0X05vYl9EaXNcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCJMaW5nZ29fTHVuZXNfTWFydGVzX01peWVya3VsZXNfSHV3ZWJlc19CaXllcm5lc19TYWJhZG9cIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIkxpbl9MdW5fTWFyX01peV9IdXdfQml5X1NhYlwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIkxpX0x1X01hX01pX0h1X0JpX1NhYlwiLnNwbGl0KFwiX1wiKSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIk1NL0QvWVlZWVwiLExMOlwiTU1NTSBELCBZWVlZXCIsTExMOlwiTU1NTSBELCBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQsIE1NTU0gREQsIFlZWVkgSEg6bW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJMVCBbbmdheW9uZyBhcmF3XVwiLG5leHREYXk6XCJbQnVrYXMgbmddIExUXCIsbmV4dFdlZWs6XCJMVCBbc2Egc3VzdW5vZCBuYV0gZGRkZFwiLGxhc3REYXk6XCJMVCBba2FoYXBvbl1cIixsYXN0V2VlazpcIkxUIFtub29uZyBuYWthcmFhbmddIGRkZGRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJzYSBsb29iIG5nICVzXCIscGFzdDpcIiVzIGFuZyBuYWthbGlwYXNcIixzOlwiaWxhbmcgc2VndW5kb1wiLHNzOlwiJWQgc2VndW5kb1wiLG06XCJpc2FuZyBtaW51dG9cIixtbTpcIiVkIG1pbnV0b1wiLGg6XCJpc2FuZyBvcmFzXCIsaGg6XCIlZCBvcmFzXCIsZDpcImlzYW5nIGFyYXdcIixkZDpcIiVkIGFyYXdcIixNOlwiaXNhbmcgYnV3YW5cIixNTTpcIiVkIGJ1d2FuXCIseTpcImlzYW5nIHRhb25cIix5eTpcIiVkIHRhb25cIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn0vLG9yZGluYWw6ZnVuY3Rpb24obnVtYmVyKXtyZXR1cm4gbnVtYmVyfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO3ZhciBudW1iZXJzTm91bnM9XCJwYWdoX3dh4oCZX2NoYeKAmV93ZWpfbG9TX3ZhZ2hfamF2X1NvY2hfY2hvcmdoX0h1dFwiLnNwbGl0KFwiX1wiKTtmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLHdpdGhvdXRTdWZmaXgsc3RyaW5nLGlzRnV0dXJlKXt2YXIgbnVtYmVyTm91bj1mdW5jdGlvbihudW1iZXIpe3ZhciBodW5kcmVkPU1hdGguZmxvb3IobnVtYmVyJTFlMy8xMDApLHRlbj1NYXRoLmZsb29yKG51bWJlciUxMDAvMTApLG9uZT1udW1iZXIlMTAsd29yZD1cIlwiO3JldHVybiBodW5kcmVkPjAmJih3b3JkKz1udW1iZXJzTm91bnNbaHVuZHJlZF0rXCJ2YXRsaFwiKSx0ZW4+MCYmKHdvcmQrPShcIlwiIT09d29yZD9cIiBcIjpcIlwiKStudW1iZXJzTm91bnNbdGVuXStcIm1hSFwiKSxvbmU+MCYmKHdvcmQrPShcIlwiIT09d29yZD9cIiBcIjpcIlwiKStudW1iZXJzTm91bnNbb25lXSksXCJcIj09PXdvcmQ/XCJwYWdoXCI6d29yZH0obnVtYmVyKTtzd2l0Y2goc3RyaW5nKXtjYXNlXCJzc1wiOnJldHVybiBudW1iZXJOb3VuK1wiIGx1cFwiO2Nhc2VcIm1tXCI6cmV0dXJuIG51bWJlck5vdW4rXCIgdHVwXCI7Y2FzZVwiaGhcIjpyZXR1cm4gbnVtYmVyTm91bitcIiByZXBcIjtjYXNlXCJkZFwiOnJldHVybiBudW1iZXJOb3VuK1wiIGphalwiO2Nhc2VcIk1NXCI6cmV0dXJuIG51bWJlck5vdW4rXCIgamFyXCI7Y2FzZVwieXlcIjpyZXR1cm4gbnVtYmVyTm91bitcIiBESVNcIn19bW9tZW50LmRlZmluZUxvY2FsZShcInRsaFwiLHttb250aHM6XCJ0ZXJh4oCZIGphciB3YeKAmV90ZXJh4oCZIGphciBjaGHigJlfdGVyYeKAmSBqYXIgd2VqX3RlcmHigJkgamFyIGxvU190ZXJh4oCZIGphciB2YWdoX3RlcmHigJkgamFyIGphdl90ZXJh4oCZIGphciBTb2NoX3RlcmHigJkgamFyIGNob3JnaF90ZXJh4oCZIGphciBIdXRfdGVyYeKAmSBqYXIgd2HigJltYUhfdGVyYeKAmSBqYXIgd2HigJltYUggd2HigJlfdGVyYeKAmSBqYXIgd2HigJltYUggY2hh4oCZXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiamFyIHdh4oCZX2phciBjaGHigJlfamFyIHdlal9qYXIgbG9TX2phciB2YWdoX2phciBqYXZfamFyIFNvY2hfamFyIGNob3JnaF9qYXIgSHV0X2phciB3YeKAmW1hSF9qYXIgd2HigJltYUggd2HigJlfamFyIHdh4oCZbWFIIGNoYeKAmVwiLnNwbGl0KFwiX1wiKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOlwibG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVxamFqX2doSW5qYWpcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcImxvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9naEluamFqXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwibG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVxamFqX2doSW5qYWpcIi5zcGxpdChcIl9cIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC5NTS5ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW0RhSGphal0gTFRcIixuZXh0RGF5OlwiW3dh4oCZbGVTXSBMVFwiLG5leHRXZWVrOlwiTExMXCIsbGFzdERheTpcIlt3YeKAmUh14oCZXSBMVFwiLGxhc3RXZWVrOlwiTExMXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uKG91dHB1dCl7dmFyIHRpbWU9b3V0cHV0O3JldHVybiB0aW1lPS0xIT09b3V0cHV0LmluZGV4T2YoXCJqYWpcIik/dGltZS5zbGljZSgwLC0zKStcImxlU1wiOi0xIT09b3V0cHV0LmluZGV4T2YoXCJqYXJcIik/dGltZS5zbGljZSgwLC0zKStcIndhUVwiOi0xIT09b3V0cHV0LmluZGV4T2YoXCJESVNcIik/dGltZS5zbGljZSgwLC0zKStcIm5lbVwiOnRpbWUrXCIgcElxXCJ9LHBhc3Q6ZnVuY3Rpb24ob3V0cHV0KXt2YXIgdGltZT1vdXRwdXQ7cmV0dXJuIHRpbWU9LTEhPT1vdXRwdXQuaW5kZXhPZihcImphalwiKT90aW1lLnNsaWNlKDAsLTMpK1wiSHXigJlcIjotMSE9PW91dHB1dC5pbmRleE9mKFwiamFyXCIpP3RpbWUuc2xpY2UoMCwtMykrXCJ3ZW5cIjotMSE9PW91dHB1dC5pbmRleE9mKFwiRElTXCIpP3RpbWUuc2xpY2UoMCwtMykrXCJiZW5cIjp0aW1lK1wiIHJldFwifSxzOlwicHVTIGx1cFwiLHNzOnRyYW5zbGF0ZSxtOlwid2HigJkgdHVwXCIsbW06dHJhbnNsYXRlLGg6XCJ3YeKAmSByZXBcIixoaDp0cmFuc2xhdGUsZDpcIndh4oCZIGphalwiLGRkOnRyYW5zbGF0ZSxNOlwid2HigJkgamFyXCIsTU06dHJhbnNsYXRlLHk6XCJ3YeKAmSBESVNcIix5eTp0cmFuc2xhdGV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9XFwuLyxvcmRpbmFsOlwiJWQuXCIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjt2YXIgc3VmZml4ZXM9ezE6XCInaW5jaVwiLDU6XCInaW5jaVwiLDg6XCInaW5jaVwiLDcwOlwiJ2luY2lcIiw4MDpcIidpbmNpXCIsMjpcIiduY2lcIiw3OlwiJ25jaVwiLDIwOlwiJ25jaVwiLDUwOlwiJ25jaVwiLDM6XCInw7xuY8O8XCIsNDpcIifDvG5jw7xcIiwxMDA6XCInw7xuY8O8XCIsNjpcIiduY8SxXCIsOTpcIid1bmN1XCIsMTA6XCIndW5jdVwiLDMwOlwiJ3VuY3VcIiw2MDpcIifEsW5jxLFcIiw5MDpcIifEsW5jxLFcIn07bW9tZW50LmRlZmluZUxvY2FsZShcInRyXCIse21vbnRoczpcIk9jYWtfxZ51YmF0X01hcnRfTmlzYW5fTWF5xLFzX0hhemlyYW5fVGVtbXV6X0HEn3VzdG9zX0V5bMO8bF9Fa2ltX0thc8SxbV9BcmFsxLFrXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiT2NhX8WedWJfTWFyX05pc19NYXlfSGF6X1RlbV9BxJ91X0V5bF9Fa2lfS2FzX0FyYVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcIlBhemFyX1BhemFydGVzaV9TYWzEsV/Dh2FyxZ9hbWJhX1BlcsWfZW1iZV9DdW1hX0N1bWFydGVzaVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiUGF6X1B0c19TYWxfw4dhcl9QZXJfQ3VtX0N0c1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIlB6X1B0X1NhX8OHYV9QZV9DdV9DdFwiLnNwbGl0KFwiX1wiKSxtZXJpZGllbTpmdW5jdGlvbihob3VycyxtaW51dGVzLGlzTG93ZXIpe3JldHVybiBob3VyczwxMj9pc0xvd2VyP1wiw7bDtlwiOlwiw5bDllwiOmlzTG93ZXI/XCLDtnNcIjpcIsOWU1wifSxtZXJpZGllbVBhcnNlOi/DtsO2fMOWw5Z8w7ZzfMOWUy8saXNQTTpmdW5jdGlvbihpbnB1dCl7cmV0dXJuXCLDtnNcIj09PWlucHV0fHxcIsOWU1wiPT09aW5wdXR9LGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQuTU0uWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gWVlZWSBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIltidWfDvG4gc2FhdF0gTFRcIixuZXh0RGF5OlwiW3lhcsSxbiBzYWF0XSBMVFwiLG5leHRXZWVrOlwiW2dlbGVjZWtdIGRkZGQgW3NhYXRdIExUXCIsbGFzdERheTpcIltkw7xuXSBMVFwiLGxhc3RXZWVrOlwiW2dlw6dlbl0gZGRkZCBbc2FhdF0gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlcyBzb25yYVwiLHBhc3Q6XCIlcyDDtm5jZVwiLHM6XCJiaXJrYcOnIHNhbml5ZVwiLHNzOlwiJWQgc2FuaXllXCIsbTpcImJpciBkYWtpa2FcIixtbTpcIiVkIGRha2lrYVwiLGg6XCJiaXIgc2FhdFwiLGhoOlwiJWQgc2FhdFwiLGQ6XCJiaXIgZ8O8blwiLGRkOlwiJWQgZ8O8blwiLHc6XCJiaXIgaGFmdGFcIix3dzpcIiVkIGhhZnRhXCIsTTpcImJpciBheVwiLE1NOlwiJWQgYXlcIix5OlwiYmlyIHnEsWxcIix5eTpcIiVkIHnEsWxcIn0sb3JkaW5hbDpmdW5jdGlvbihudW1iZXIscGVyaW9kKXtzd2l0Y2gocGVyaW9kKXtjYXNlXCJkXCI6Y2FzZVwiRFwiOmNhc2VcIkRvXCI6Y2FzZVwiRERcIjpyZXR1cm4gbnVtYmVyO2RlZmF1bHQ6aWYoMD09PW51bWJlcilyZXR1cm4gbnVtYmVyK1wiJ8SxbmPEsVwiO3ZhciBhPW51bWJlciUxMDtyZXR1cm4gbnVtYmVyKyhzdWZmaXhlc1thXXx8c3VmZml4ZXNbbnVtYmVyJTEwMC1hXXx8c3VmZml4ZXNbbnVtYmVyPj0xMDA/MTAwOm51bGxdKX19LHdlZWs6e2RvdzoxLGRveTo3fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsd2l0aG91dFN1ZmZpeCxrZXksaXNGdXR1cmUpe3ZhciBmb3JtYXQ9e3M6W1widmllbnNhcyBzZWN1bmRzXCIsXCInaWVuc2FzIHNlY3VuZHNcIl0sc3M6W251bWJlcitcIiBzZWN1bmRzXCIsbnVtYmVyK1wiIHNlY3VuZHNcIl0sbTpbXCInbiBtw611dFwiLFwiJ2llbnMgbcOtdXRcIl0sbW06W251bWJlcitcIiBtw611dHNcIixudW1iZXIrXCIgbcOtdXRzXCJdLGg6W1wiJ24gw75vcmFcIixcIidpZW5zYSDDvm9yYVwiXSxoaDpbbnVtYmVyK1wiIMO+b3Jhc1wiLG51bWJlcitcIiDDvm9yYXNcIl0sZDpbXCInbiB6aXVhXCIsXCInaWVuc2Egeml1YVwiXSxkZDpbbnVtYmVyK1wiIHppdWFzXCIsbnVtYmVyK1wiIHppdWFzXCJdLE06W1wiJ24gbWVzXCIsXCInaWVucyBtZXNcIl0sTU06W251bWJlcitcIiBtZXNlblwiLG51bWJlcitcIiBtZXNlblwiXSx5OltcIiduIGFyXCIsXCInaWVucyBhclwiXSx5eTpbbnVtYmVyK1wiIGFyc1wiLG51bWJlcitcIiBhcnNcIl19O3JldHVybiBpc0Z1dHVyZT9mb3JtYXRba2V5XVswXTp3aXRob3V0U3VmZml4P2Zvcm1hdFtrZXldWzBdOmZvcm1hdFtrZXldWzFdfW1vbWVudC5kZWZpbmVMb2NhbGUoXCJ0emxcIix7bW9udGhzOlwiSmFudWFyX0ZldnJhZ2xoX01hcsOnX0F2csOvdV9NYWlfR8O8bl9KdWxpYV9HdXNjaHRfU2V0ZW12YXJfTGlzdG9ww6R0c19Ob2VtdmFyX1plY2VtdmFyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiSmFuX0Zldl9NYXJfQXZyX01haV9Hw7xuX0p1bF9HdXNfU2V0X0xpc19Ob2VfWmVjXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwiU8O6bGFkaV9Mw7puZcOnaV9NYWl0emlfTcOhcmN1cmlfWGjDumFkaV9WacOpbmVyw6dpX1PDoXR1cmlcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIlPDumxfTMO6bl9NYWlfTcOhcl9YaMO6X1Zpw6lfU8OhdFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIlPDul9Mw7pfTWFfTcOhX1hoX1ZpX1PDoVwiLnNwbGl0KFwiX1wiKSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISC5tbVwiLExUUzpcIkhILm1tLnNzXCIsTDpcIkRELk1NLllZWVlcIixMTDpcIkQuIE1NTU0gW2RhbGxhc10gWVlZWVwiLExMTDpcIkQuIE1NTU0gW2RhbGxhc10gWVlZWSBISC5tbVwiLExMTEw6XCJkZGRkLCBbbGldIEQuIE1NTU0gW2RhbGxhc10gWVlZWSBISC5tbVwifSxtZXJpZGllbVBhcnNlOi9kXFwnb3xkXFwnYS9pLGlzUE06ZnVuY3Rpb24oaW5wdXQpe3JldHVyblwiZCdvXCI9PT1pbnB1dC50b0xvd2VyQ2FzZSgpfSxtZXJpZGllbTpmdW5jdGlvbihob3VycyxtaW51dGVzLGlzTG93ZXIpe3JldHVybiBob3Vycz4xMT9pc0xvd2VyP1wiZCdvXCI6XCJEJ09cIjppc0xvd2VyP1wiZCdhXCI6XCJEJ0FcIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJbb3hoaSDDoF0gTFRcIixuZXh0RGF5OlwiW2RlbcOgIMOgXSBMVFwiLG5leHRXZWVrOlwiZGRkZCBbw6BdIExUXCIsbGFzdERheTpcIltpZWlyaSDDoF0gTFRcIixsYXN0V2VlazpcIltzw7xyIGVsXSBkZGRkIFtsYXN0ZXUgw6BdIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwib3NwcmVpICVzXCIscGFzdDpcImphJXNcIixzOnByb2Nlc3NSZWxhdGl2ZVRpbWUsc3M6cHJvY2Vzc1JlbGF0aXZlVGltZSxtOnByb2Nlc3NSZWxhdGl2ZVRpbWUsbW06cHJvY2Vzc1JlbGF0aXZlVGltZSxoOnByb2Nlc3NSZWxhdGl2ZVRpbWUsaGg6cHJvY2Vzc1JlbGF0aXZlVGltZSxkOnByb2Nlc3NSZWxhdGl2ZVRpbWUsZGQ6cHJvY2Vzc1JlbGF0aXZlVGltZSxNOnByb2Nlc3NSZWxhdGl2ZVRpbWUsTU06cHJvY2Vzc1JlbGF0aXZlVGltZSx5OnByb2Nlc3NSZWxhdGl2ZVRpbWUseXk6cHJvY2Vzc1JlbGF0aXZlVGltZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn1cXC4vLG9yZGluYWw6XCIlZC5cIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO21vbWVudC5kZWZpbmVMb2NhbGUoXCJ0em1cIix7bW9udGhzOlwi4rWJ4rWP4rWP4rSw4rWi4rWUX+K0seK1leK0sOK1ouK1lV/itY7itLDitZXitZpf4rWJ4rSx4rWU4rWJ4rWUX+K1juK0sOK1ouK1ouK1k1/itaLitZPitY/itaLitZNf4rWi4rWT4rWN4rWi4rWT4rWjX+K1luK1k+K1m+K1nF/itZvitZPitZzitLDitY/itLHitYnitZRf4rS94rWf4rWT4rSx4rWVX+K1j+K1k+K1oeK0sOK1j+K0seK1ieK1lF/itLfitZPitYritY/itLHitYnitZRcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCLitYnitY/itY/itLDitaLitZRf4rSx4rWV4rSw4rWi4rWVX+K1juK0sOK1leK1ml/itYnitLHitZTitYnitZRf4rWO4rSw4rWi4rWi4rWTX+K1ouK1k+K1j+K1ouK1k1/itaLitZPitY3itaLitZPitaNf4rWW4rWT4rWb4rWcX+K1m+K1k+K1nOK0sOK1j+K0seK1ieK1lF/itL3itZ/itZPitLHitZVf4rWP4rWT4rWh4rSw4rWP4rSx4rWJ4rWUX+K0t+K1k+K1iuK1j+K0seK1ieK1lFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5czpcIuK0sOK1meK0sOK1juK0sOK1mV/itLDitaLitY/itLDitZlf4rSw4rWZ4rWJ4rWP4rSw4rWZX+K0sOK0veK1lOK0sOK1mV/itLDitL3itaHitLDitZlf4rSw4rWZ4rWJ4rWO4rWh4rSw4rWZX+K0sOK1meK1ieK0ueK1ouK0sOK1mVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi4rSw4rWZ4rSw4rWO4rSw4rWZX+K0sOK1ouK1j+K0sOK1mV/itLDitZnitYnitY/itLDitZlf4rSw4rS94rWU4rSw4rWZX+K0sOK0veK1oeK0sOK1mV/itLDitZnitYnitY7itaHitLDitZlf4rSw4rWZ4rWJ4rS54rWi4rSw4rWZXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi4rSw4rWZ4rSw4rWO4rSw4rWZX+K0sOK1ouK1j+K0sOK1mV/itLDitZnitYnitY/itLDitZlf4rSw4rS94rWU4rSw4rWZX+K0sOK0veK1oeK0sOK1mV/itLDitZnitYnitY7itaHitLDitZlf4rSw4rWZ4rWJ4rS54rWi4rSw4rWZXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW+K0sOK1meK0t+K1hSDitLRdIExUXCIsbmV4dERheTpcIlvitLDitZnitL3itLAg4rS0XSBMVFwiLG5leHRXZWVrOlwiZGRkZCBb4rS0XSBMVFwiLGxhc3REYXk6XCJb4rSw4rWa4rSw4rWP4rWcIOK0tF0gTFRcIixsYXN0V2VlazpcImRkZGQgW+K0tF0gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCLitLfitLDitLfitYUg4rWZIOK1ouK0sOK1jyAlc1wiLHBhc3Q6XCLitaLitLDitY8gJXNcIixzOlwi4rWJ4rWO4rWJ4rS9XCIsc3M6XCIlZCDitYnitY7itYnitL1cIixtOlwi4rWO4rWJ4rWP4rWT4rS6XCIsbW06XCIlZCDitY7itYnitY/itZPitLpcIixoOlwi4rWZ4rSw4rWE4rSwXCIsaGg6XCIlZCDitZzitLDitZnitZnitLDitYTitYnitY9cIixkOlwi4rSw4rWZ4rWZXCIsZGQ6XCIlZCBv4rWZ4rWZ4rSw4rWPXCIsTTpcIuK0sOK1om/itZPitZRcIixNTTpcIiVkIOK1ieK1ouK1ouK1ieK1lOK1j1wiLHk6XCLitLDitZnitLPitLDitZlcIix5eTpcIiVkIOK1ieK1meK0s+K0sOK1meK1j1wifSx3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwidHptLWxhdG5cIix7bW9udGhzOlwiaW5uYXlyX2Jyy6RheXLLpF9tYXLLpHPLpF9pYnJpcl9tYXl5d195d255d195d2x5d3pfyaN3xaF0X8Whd3RhbmJpcl9rdMukd2Jyy6Rfbnd3YW5iaXJfZHdqbmJpclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcImlubmF5cl9icsukYXlyy6RfbWFyy6Rzy6RfaWJyaXJfbWF5eXdfeXdueXdfeXdseXd6X8mjd8WhdF/FoXd0YW5iaXJfa3TLpHdicsukX253d2FuYmlyX2R3am5iaXJcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCJhc2FtYXNfYXluYXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNp4biNeWFzXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCJhc2FtYXNfYXluYXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNp4biNeWFzXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiYXNhbWFzX2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaeG4jXlhc1wiLnNwbGl0KFwiX1wiKSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiZGRkZCBEIE1NTU0gWVlZWSBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIlthc2RraCBnXSBMVFwiLG5leHREYXk6XCJbYXNrYSBnXSBMVFwiLG5leHRXZWVrOlwiZGRkZCBbZ10gTFRcIixsYXN0RGF5OlwiW2Fzc2FudCBnXSBMVFwiLGxhc3RXZWVrOlwiZGRkZCBbZ10gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJkYWRraCBzIHlhbiAlc1wiLHBhc3Q6XCJ5YW4gJXNcIixzOlwiaW1pa1wiLHNzOlwiJWQgaW1pa1wiLG06XCJtaW514biNXCIsbW06XCIlZCBtaW514biNXCIsaDpcInNhyZthXCIsaGg6XCIlZCB0YXNzYcmbaW5cIixkOlwiYXNzXCIsZGQ6XCIlZCBvc3NhblwiLE06XCJheW93clwiLE1NOlwiJWQgaXl5aXJuXCIseTpcImFzZ2FzXCIseXk6XCIlZCBpc2dhc25cIn0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7bW9tZW50LmRlZmluZUxvY2FsZShcInVnLWNuXCIse21vbnRoczpcItmK2KfZhtuL2KfYsV/ZgduQ24vYsdin2YRf2YXYp9ix2Kpf2KbYp9m+2LHbkNmEX9mF2KfZil/YptmJ2Yrbh9mGX9im2YnZituH2YRf2KbYp9uL2Lrbh9iz2Kpf2LPbkNmG2Krbldio2YnYsV/YptuG2YPYqtuV2KjZidixX9mG2YjZitin2KjZidixX9iv25DZg9in2KjZidixXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0Olwi2YrYp9mG24vYp9ixX9mB25Dbi9ix2KfZhF/Zhdin2LHYql/Yptin2b7YsduQ2YRf2YXYp9mKX9im2YnZituH2YZf2KbZidmK24fZhF/Yptin24vYutuH2LPYql/Ys9uQ2YbYqtuV2KjZidixX9im24bZg9iq25XYqNmJ2LFf2YbZiNmK2KfYqNmJ2LFf2K/bkNmD2KfYqNmJ2LFcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCLZituV2YPYtNuV2YbYqNuVX9iv24jYtNuV2YbYqNuVX9iz25XZiti025XZhtio25Vf2obYp9ix2LTbldmG2KjblV/ZvtuV2YrYtNuV2YbYqNuVX9is24jZhduVX9i025XZhtio25VcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcItmK25Vf2K/biF/Ys9uVX9qG2Kdf2b7blV/YrNuIX9i025VcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLZituVX9iv24hf2LPblV/ahtinX9m+25Vf2KzbiF/YtNuVXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiWVlZWS1NTS1ERFwiLExMOlwiWVlZWS3ZitmJ2YTZiU0t2KbYp9mK2YbZidqtRC3Zg9uI2YbZiVwiLExMTDpcIllZWVkt2YrZidmE2YlNLdim2KfZitmG2YnarUQt2YPbiNmG2YnYjCBISDptbVwiLExMTEw6XCJkZGRk2IwgWVlZWS3ZitmJ2YTZiU0t2KbYp9mK2YbZidqtRC3Zg9uI2YbZidiMIEhIOm1tXCJ9LG1lcmlkaWVtUGFyc2U6L9mK25DYsdmJ2YUg2YPbkNqG25V82LPbldq+25XYsXzahtuI2LTYqtmJ2YYg2Kjbh9ix24fZhnzahtuI2LR82obbiNi02KrZidmGINmD25DZitmJ2YZ82YPbldqGLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oaG91cixtZXJpZGllbSl7cmV0dXJuIDEyPT09aG91ciYmKGhvdXI9MCksXCLZituQ2LHZidmFINmD25DahtuVXCI9PT1tZXJpZGllbXx8XCLYs9uV2r7bldixXCI9PT1tZXJpZGllbXx8XCLahtuI2LTYqtmJ2YYg2Kjbh9ix24fZhlwiPT09bWVyaWRpZW0/aG91cjpcItqG24jYtNiq2YnZhiDZg9uQ2YrZidmGXCI9PT1tZXJpZGllbXx8XCLZg9uV2oZcIj09PW1lcmlkaWVtP2hvdXIrMTI6aG91cj49MTE/aG91cjpob3VyKzEyfSxtZXJpZGllbTpmdW5jdGlvbihob3VyLG1pbnV0ZSxpc0xvd2VyKXt2YXIgaG09MTAwKmhvdXIrbWludXRlO3JldHVybiBobTw2MDA/XCLZituQ2LHZidmFINmD25DahtuVXCI6aG08OTAwP1wi2LPbldq+25XYsVwiOmhtPDExMzA/XCLahtuI2LTYqtmJ2YYg2Kjbh9ix24fZhlwiOmhtPDEyMzA/XCLahtuI2LRcIjpobTwxODAwP1wi2obbiNi02KrZidmGINmD25DZitmJ2YZcIjpcItmD25XahlwifSxjYWxlbmRhcjp7c2FtZURheTpcIlvYqNuI2q/biNmGINiz2KfYptuV2KpdIExUXCIsbmV4dERheTpcIlvYptuV2KrblSDYs9in2KbbldiqXSBMVFwiLG5leHRXZWVrOlwiW9mD25DZhNuV2LHZg9mJXSBkZGRkIFvYs9in2KbbldiqXSBMVFwiLGxhc3REYXk6XCJb2KrbhtmG24jar9uI2YZdIExUXCIsbGFzdFdlZWs6XCJb2KbYp9mE2K/ZidmG2YLZiV0gZGRkZCBb2LPYp9im25XYql0gTFRcIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlcyDZg9uQ2YrZidmGXCIscGFzdDpcIiVzINio24fYsduH2YZcIixzOlwi2YbbldqG2obblSDYs9uQ2YPZiNmG2KpcIixzczpcIiVkINiz25DZg9mI2YbYqlwiLG06XCLYqNmJ2LEg2YXZidmG24fYqlwiLG1tOlwiJWQg2YXZidmG24fYqlwiLGg6XCLYqNmJ2LEg2LPYp9im25XYqlwiLGhoOlwiJWQg2LPYp9im25XYqlwiLGQ6XCLYqNmJ2LEg2YPbiNmGXCIsZGQ6XCIlZCDZg9uI2YZcIixNOlwi2KjZidixINim2KfZilwiLE1NOlwiJWQg2KbYp9mKXCIseTpcItio2YnYsSDZitmJ2YRcIix5eTpcIiVkINmK2YnZhFwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfSgt2YPbiNmG2Yl8Ldim2KfZinwt2r7bldm+2KrblSkvLG9yZGluYWw6ZnVuY3Rpb24obnVtYmVyLHBlcmlvZCl7c3dpdGNoKHBlcmlvZCl7Y2FzZVwiZFwiOmNhc2VcIkRcIjpjYXNlXCJERERcIjpyZXR1cm4gbnVtYmVyK1wiLdmD24jZhtmJXCI7Y2FzZVwid1wiOmNhc2VcIldcIjpyZXR1cm4gbnVtYmVyK1wiLdq+25XZvtiq25VcIjtkZWZhdWx0OnJldHVybiBudW1iZXJ9fSxwcmVwYXJzZTpmdW5jdGlvbihzdHJpbmcpe3JldHVybiBzdHJpbmcucmVwbGFjZSgv2IwvZyxcIixcIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gc3RyaW5nLnJlcGxhY2UoLywvZyxcItiMXCIpfSx3ZWVrOntkb3c6MSxkb3k6N319KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHJlbGF0aXZlVGltZVdpdGhQbHVyYWwobnVtYmVyLHdpdGhvdXRTdWZmaXgsa2V5KXt2YXIgbnVtLGZvcm1zO3JldHVyblwibVwiPT09a2V5P3dpdGhvdXRTdWZmaXg/XCLRhdCy0LjQu9C40L3QsFwiOlwi0YXQstC40LvQuNC90YNcIjpcImhcIj09PWtleT93aXRob3V0U3VmZml4P1wi0LPQvtC00LjQvdCwXCI6XCLQs9C+0LTQuNC90YNcIjpudW1iZXIrXCIgXCIrKG51bT0rbnVtYmVyLGZvcm1zPXtzczp3aXRob3V0U3VmZml4P1wi0YHQtdC60YPQvdC00LBf0YHQtdC60YPQvdC00Lhf0YHQtdC60YPQvdC0XCI6XCLRgdC10LrRg9C90LTRg1/RgdC10LrRg9C90LTQuF/RgdC10LrRg9C90LRcIixtbTp3aXRob3V0U3VmZml4P1wi0YXQstC40LvQuNC90LBf0YXQstC40LvQuNC90Lhf0YXQstC40LvQuNC9XCI6XCLRhdCy0LjQu9C40L3Rg1/RhdCy0LjQu9C40L3QuF/RhdCy0LjQu9C40L1cIixoaDp3aXRob3V0U3VmZml4P1wi0LPQvtC00LjQvdCwX9Cz0L7QtNC40L3QuF/Qs9C+0LTQuNC9XCI6XCLQs9C+0LTQuNC90YNf0LPQvtC00LjQvdC4X9Cz0L7QtNC40L1cIixkZDpcItC00LXQvdGMX9C00L3Rll/QtNC90ZbQslwiLE1NOlwi0LzRltGB0Y/RhtGMX9C80ZbRgdGP0YbRll/QvNGW0YHRj9GG0ZbQslwiLHl5Olwi0YDRltC6X9GA0L7QutC4X9GA0L7QutGW0LJcIn1ba2V5XS5zcGxpdChcIl9cIiksbnVtJTEwPT0xJiZudW0lMTAwIT0xMT9mb3Jtc1swXTpudW0lMTA+PTImJm51bSUxMDw9NCYmKG51bSUxMDA8MTB8fG51bSUxMDA+PTIwKT9mb3Jtc1sxXTpmb3Jtc1syXSl9ZnVuY3Rpb24gcHJvY2Vzc0hvdXJzRnVuY3Rpb24oc3RyKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gc3RyK1wi0L5cIisoMTE9PT10aGlzLmhvdXJzKCk/XCLQsVwiOlwiXCIpK1wiXSBMVFwifX1tb21lbnQuZGVmaW5lTG9jYWxlKFwidWtcIix7bW9udGhzOntmb3JtYXQ6XCLRgdGW0YfQvdGPX9C70Y7RgtC+0LPQvl/QsdC10YDQtdC30L3Rj1/QutCy0ZbRgtC90Y9f0YLRgNCw0LLQvdGPX9GH0LXRgNCy0L3Rj1/Qu9C40L/QvdGPX9GB0LXRgNC/0L3Rj1/QstC10YDQtdGB0L3Rj1/QttC+0LLRgtC90Y9f0LvQuNGB0YLQvtC/0LDQtNCwX9Cz0YDRg9C00L3Rj1wiLnNwbGl0KFwiX1wiKSxzdGFuZGFsb25lOlwi0YHRltGH0LXQvdGMX9C70Y7RgtC40Llf0LHQtdGA0LXQt9C10L3RjF/QutCy0ZbRgtC10L3RjF/RgtGA0LDQstC10L3RjF/Rh9C10YDQstC10L3RjF/Qu9C40L/QtdC90Yxf0YHQtdGA0L/QtdC90Yxf0LLQtdGA0LXRgdC10L3RjF/QttC+0LLRgtC10L3RjF/Qu9C40YHRgtC+0L/QsNC0X9Cz0YDRg9C00LXQvdGMXCIuc3BsaXQoXCJfXCIpfSxtb250aHNTaG9ydDpcItGB0ZbRh1/Qu9GO0YJf0LHQtdGAX9C60LLRltGCX9GC0YDQsNCyX9GH0LXRgNCyX9C70LjQv1/RgdC10YDQv1/QstC10YBf0LbQvtCy0YJf0LvQuNGB0YJf0LPRgNGD0LRcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6ZnVuY3Rpb24obSxmb3JtYXQpe3ZhciB3ZWVrZGF5cz17bm9taW5hdGl2ZTpcItC90LXQtNGW0LvRj1/Qv9C+0L3QtdC00ZbQu9C+0Lpf0LLRltCy0YLQvtGA0L7Qul/RgdC10YDQtdC00LBf0YfQtdGC0LLQtdGAX9C/4oCZ0Y/RgtC90LjRhtGPX9GB0YPQsdC+0YLQsFwiLnNwbGl0KFwiX1wiKSxhY2N1c2F0aXZlOlwi0L3QtdC00ZbQu9GOX9C/0L7QvdC10LTRltC70L7Qul/QstGW0LLRgtC+0YDQvtC6X9GB0LXRgNC10LTRg1/Rh9C10YLQstC10YBf0L/igJnRj9GC0L3QuNGG0Y5f0YHRg9Cx0L7RgtGDXCIuc3BsaXQoXCJfXCIpLGdlbml0aXZlOlwi0L3QtdC00ZbQu9GWX9C/0L7QvdC10LTRltC70LrQsF/QstGW0LLRgtC+0YDQutCwX9GB0LXRgNC10LTQuF/Rh9C10YLQstC10YDQs9CwX9C/4oCZ0Y/RgtC90LjRhtGWX9GB0YPQsdC+0YLQuFwiLnNwbGl0KFwiX1wiKX07cmV0dXJuITA9PT1tP3dlZWtkYXlzLm5vbWluYXRpdmUuc2xpY2UoMSw3KS5jb25jYXQod2Vla2RheXMubm9taW5hdGl2ZS5zbGljZSgwLDEpKTptP3dlZWtkYXlzWy8oXFxbW9CS0LLQo9GDXVxcXSkgP2RkZGQvLnRlc3QoZm9ybWF0KT9cImFjY3VzYXRpdmVcIjovXFxbPyg/OtC80LjQvdGD0LvQvtGXfNC90LDRgdGC0YPQv9C90L7Rlyk/ID9cXF0gP2RkZGQvLnRlc3QoZm9ybWF0KT9cImdlbml0aXZlXCI6XCJub21pbmF0aXZlXCJdW20uZGF5KCldOndlZWtkYXlzLm5vbWluYXRpdmV9LHdlZWtkYXlzU2hvcnQ6XCLQvdC0X9C/0L1f0LLRgl/RgdGAX9GH0YJf0L/Rgl/RgdCxXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi0L3QtF/Qv9C9X9Cy0YJf0YHRgF/Rh9GCX9C/0YJf0YHQsVwiLnNwbGl0KFwiX1wiKSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkRELk1NLllZWVlcIixMTDpcIkQgTU1NTSBZWVlZINGALlwiLExMTDpcIkQgTU1NTSBZWVlZINGALiwgSEg6bW1cIixMTExMOlwiZGRkZCwgRCBNTU1NIFlZWVkg0YAuLCBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpwcm9jZXNzSG91cnNGdW5jdGlvbihcIlvQodGM0L7Qs9C+0LTQvdGWIFwiKSxuZXh0RGF5OnByb2Nlc3NIb3Vyc0Z1bmN0aW9uKFwiW9CX0LDQstGC0YDQsCBcIiksbGFzdERheTpwcm9jZXNzSG91cnNGdW5jdGlvbihcIlvQktGH0L7RgNCwIFwiKSxuZXh0V2Vlazpwcm9jZXNzSG91cnNGdW5jdGlvbihcIlvQo10gZGRkZCBbXCIpLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm4gcHJvY2Vzc0hvdXJzRnVuY3Rpb24oXCJb0JzQuNC90YPQu9C+0ZddIGRkZGQgW1wiKS5jYWxsKHRoaXMpO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OnJldHVybiBwcm9jZXNzSG91cnNGdW5jdGlvbihcIlvQnNC40L3Rg9C70L7Qs9C+XSBkZGRkIFtcIikuY2FsbCh0aGlzKX19LHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcItC30LAgJXNcIixwYXN0OlwiJXMg0YLQvtC80YNcIixzOlwi0LTQtdC60ZbQu9GM0LrQsCDRgdC10LrRg9C90LRcIixzczpyZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLG06cmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxtbTpyZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLGg6XCLQs9C+0LTQuNC90YNcIixoaDpyZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLGQ6XCLQtNC10L3RjFwiLGRkOnJlbGF0aXZlVGltZVdpdGhQbHVyYWwsTTpcItC80ZbRgdGP0YbRjFwiLE1NOnJlbGF0aXZlVGltZVdpdGhQbHVyYWwseTpcItGA0ZbQulwiLHl5OnJlbGF0aXZlVGltZVdpdGhQbHVyYWx9LG1lcmlkaWVtUGFyc2U6L9C90L7Rh9GWfNGA0LDQvdC60YN80LTQvdGPfNCy0LXRh9C+0YDQsC8saXNQTTpmdW5jdGlvbihpbnB1dCl7cmV0dXJuL14o0LTQvdGPfNCy0LXRh9C+0YDQsCkkLy50ZXN0KGlucHV0KX0sbWVyaWRpZW06ZnVuY3Rpb24oaG91cixtaW51dGUsaXNMb3dlcil7cmV0dXJuIGhvdXI8ND9cItC90L7Rh9GWXCI6aG91cjwxMj9cItGA0LDQvdC60YNcIjpob3VyPDE3P1wi0LTQvdGPXCI6XCLQstC10YfQvtGA0LBcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn0tKNC5fNCz0L4pLyxvcmRpbmFsOmZ1bmN0aW9uKG51bWJlcixwZXJpb2Qpe3N3aXRjaChwZXJpb2Qpe2Nhc2VcIk1cIjpjYXNlXCJkXCI6Y2FzZVwiREREXCI6Y2FzZVwid1wiOmNhc2VcIldcIjpyZXR1cm4gbnVtYmVyK1wiLdC5XCI7Y2FzZVwiRFwiOnJldHVybiBudW1iZXIrXCIt0LPQvlwiO2RlZmF1bHQ6cmV0dXJuIG51bWJlcn19LHdlZWs6e2RvdzoxLGRveTo3fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG1vbnRocz1bXCLYrNmG2YjYsduMXCIsXCLZgdix2YjYsduMXCIsXCLZhdin2LHahlwiLFwi2KfZvtix24zZhFwiLFwi2YXYptuMXCIsXCLYrNmI2YZcIixcItis2YjZhNin2KbbjFwiLFwi2Kfar9iz2KpcIixcItiz2KrZhdio2LFcIixcItin2qnYqtmI2KjYsVwiLFwi2YbZiNmF2KjYsVwiLFwi2K/Ys9mF2KjYsVwiXSxkYXlzPVtcItin2KrZiNin2LFcIixcItm+24zYsVwiLFwi2YXZhtqv2YRcIixcItio2K/avlwiLFwi2KzZhdi52LHYp9iqXCIsXCLYrNmF2LnbgVwiLFwi24HZgdiq24FcIl07bW9tZW50LmRlZmluZUxvY2FsZShcInVyXCIse21vbnRoczptb250aHMsbW9udGhzU2hvcnQ6bW9udGhzLHdlZWtkYXlzOmRheXMsd2Vla2RheXNTaG9ydDpkYXlzLHdlZWtkYXlzTWluOmRheXMsbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGTYjCBEIE1NTU0gWVlZWSBISDptbVwifSxtZXJpZGllbVBhcnNlOi/Ytdio2K182LTYp9mFLyxpc1BNOmZ1bmN0aW9uKGlucHV0KXtyZXR1cm5cIti02KfZhVwiPT09aW5wdXR9LG1lcmlkaWVtOmZ1bmN0aW9uKGhvdXIsbWludXRlLGlzTG93ZXIpe3JldHVybiBob3VyPDEyP1wi2LXYqNitXCI6XCLYtNin2YVcIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJb2KLYrCDYqNmI2YLYql0gTFRcIixuZXh0RGF5OlwiW9qp2YQg2KjZiNmC2KpdIExUXCIsbmV4dFdlZWs6XCJkZGRkIFvYqNmI2YLYql0gTFRcIixsYXN0RGF5OlwiW9qv2LDYtNiq24Eg2LHZiNiyINio2YjZgtiqXSBMVFwiLGxhc3RXZWVrOlwiW9qv2LDYtNiq24FdIGRkZGQgW9io2YjZgtiqXSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIiVzINio2LnYr1wiLHBhc3Q6XCIlcyDZgtio2YRcIixzOlwi2obZhtivINiz24zaqdmG2ohcIixzczpcIiVkINiz24zaqdmG2ohcIixtOlwi2KfbjNqpINmF2YbZuVwiLG1tOlwiJWQg2YXZhtm5XCIsaDpcItin24zaqSDar9q+2YbZuduBXCIsaGg6XCIlZCDar9q+2YbZuduSXCIsZDpcItin24zaqSDYr9mGXCIsZGQ6XCIlZCDYr9mGXCIsTTpcItin24zaqSDZhdin24FcIixNTTpcIiVkINmF2KfbgVwiLHk6XCLYp9uM2qkg2LPYp9mEXCIseXk6XCIlZCDYs9in2YRcIn0scHJlcGFyc2U6ZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gc3RyaW5nLnJlcGxhY2UoL9iML2csXCIsXCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csXCLYjFwiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwidXpcIix7bW9udGhzOlwi0Y/QvdCy0LDRgF/RhNC10LLRgNCw0Ltf0LzQsNGA0YJf0LDQv9GA0LXQu1/QvNCw0Llf0LjRjtC9X9C40Y7Qu1/QsNCy0LPRg9GB0YJf0YHQtdC90YLRj9Cx0YBf0L7QutGC0Y/QsdGAX9C90L7Rj9Cx0YBf0LTQtdC60LDQsdGAXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0Olwi0Y/QvdCyX9GE0LXQsl/QvNCw0YBf0LDQv9GAX9C80LDQuV/QuNGO0L1f0LjRjtC7X9Cw0LLQs1/RgdC10L1f0L7QutGCX9C90L7Rj1/QtNC10LpcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCLQr9C60YjQsNC90LHQsF/QlNGD0YjQsNC90LHQsF/QodC10YjQsNC90LHQsF/Qp9C+0YDRiNCw0L3QsdCwX9Cf0LDQudGI0LDQvdCx0LBf0JbRg9C80LBf0KjQsNC90LHQsFwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0Olwi0K/QutGIX9CU0YPRiF/QodC10Yhf0KfQvtGAX9Cf0LDQuV/QltGD0Lxf0KjQsNC9XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwi0K/Qul/QlNGDX9Ch0LVf0KfQvl/Qn9CwX9CW0YNf0KjQsFwiLnNwbGl0KFwiX1wiKSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgSEg6bW1cIixMTExMOlwiRCBNTU1NIFlZWVksIGRkZGQgSEg6bW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJb0JHRg9Cz0YPQvSDRgdC+0LDRgl0gTFQgW9C00LBdXCIsbmV4dERheTpcIlvQrdGA0YLQsNCz0LBdIExUIFvQtNCwXVwiLG5leHRXZWVrOlwiZGRkZCBb0LrRg9C90Lgg0YHQvtCw0YJdIExUIFvQtNCwXVwiLGxhc3REYXk6XCJb0JrQtdGH0LAg0YHQvtCw0YJdIExUIFvQtNCwXVwiLGxhc3RXZWVrOlwiW9Cj0YLQs9Cw0L1dIGRkZGQgW9C60YPQvdC4INGB0L7QsNGCXSBMVCBb0LTQsF1cIixzYW1lRWxzZTpcIkxcIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCLQr9C60LjQvSAlcyDQuNGH0LjQtNCwXCIscGFzdDpcItCR0LjRgCDQvdC10YfQsCAlcyDQvtC70LTQuNC9XCIsczpcItGE0YPRgNGB0LDRglwiLHNzOlwiJWQg0YTRg9GA0YHQsNGCXCIsbTpcItCx0LjRgCDQtNCw0LrQuNC60LBcIixtbTpcIiVkINC00LDQutC40LrQsFwiLGg6XCLQsdC40YAg0YHQvtCw0YJcIixoaDpcIiVkINGB0L7QsNGCXCIsZDpcItCx0LjRgCDQutGD0L1cIixkZDpcIiVkINC60YPQvVwiLE06XCLQsdC40YAg0L7QuVwiLE1NOlwiJWQg0L7QuVwiLHk6XCLQsdC40YAg0LnQuNC7XCIseXk6XCIlZCDQudC40LtcIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwidXotbGF0blwiLHttb250aHM6XCJZYW52YXJfRmV2cmFsX01hcnRfQXByZWxfTWF5X0l5dW5fSXl1bF9Bdmd1c3RfU2VudGFicl9Pa3RhYnJfTm95YWJyX0Rla2FiclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIllhbl9GZXZfTWFyX0Fwcl9NYXlfSXl1bl9JeXVsX0F2Z19TZW5fT2t0X05veV9EZWtcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCJZYWtzaGFuYmFfRHVzaGFuYmFfU2VzaGFuYmFfQ2hvcnNoYW5iYV9QYXlzaGFuYmFfSnVtYV9TaGFuYmFcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIllha19EdXNoX1Nlc2hfQ2hvcl9QYXlfSnVtX1NoYW5cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJZYV9EdV9TZV9DaG9fUGFfSnVfU2hhXCIuc3BsaXQoXCJfXCIpLGxvbmdEYXRlRm9ybWF0OntMVDpcIkhIOm1tXCIsTFRTOlwiSEg6bW06c3NcIixMOlwiREQvTU0vWVlZWVwiLExMOlwiRCBNTU1NIFlZWVlcIixMTEw6XCJEIE1NTU0gWVlZWSBISDptbVwiLExMTEw6XCJEIE1NTU0gWVlZWSwgZGRkZCBISDptbVwifSxjYWxlbmRhcjp7c2FtZURheTpcIltCdWd1biBzb2F0XSBMVCBbZGFdXCIsbmV4dERheTpcIltFcnRhZ2FdIExUIFtkYV1cIixuZXh0V2VlazpcImRkZGQgW2t1bmkgc29hdF0gTFQgW2RhXVwiLGxhc3REYXk6XCJbS2VjaGEgc29hdF0gTFQgW2RhXVwiLGxhc3RXZWVrOlwiW08ndGdhbl0gZGRkZCBba3VuaSBzb2F0XSBMVCBbZGFdXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiWWFxaW4gJXMgaWNoaWRhXCIscGFzdDpcIkJpciBuZWNoYSAlcyBvbGRpblwiLHM6XCJzb25peWFcIixzczpcIiVkIHNvbml5YVwiLG06XCJiaXIgZGFxaXFhXCIsbW06XCIlZCBkYXFpcWFcIixoOlwiYmlyIHNvYXRcIixoaDpcIiVkIHNvYXRcIixkOlwiYmlyIGt1blwiLGRkOlwiJWQga3VuXCIsTTpcImJpciBveVwiLE1NOlwiJWQgb3lcIix5OlwiYmlyIHlpbFwiLHl5OlwiJWQgeWlsXCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7bW9tZW50LmRlZmluZUxvY2FsZShcInZpXCIse21vbnRoczpcInRow6FuZyAxX3Row6FuZyAyX3Row6FuZyAzX3Row6FuZyA0X3Row6FuZyA1X3Row6FuZyA2X3Row6FuZyA3X3Row6FuZyA4X3Row6FuZyA5X3Row6FuZyAxMF90aMOhbmcgMTFfdGjDoW5nIDEyXCIuc3BsaXQoXCJfXCIpLG1vbnRoc1Nob3J0OlwiVGhnIDAxX1RoZyAwMl9UaGcgMDNfVGhnIDA0X1RoZyAwNV9UaGcgMDZfVGhnIDA3X1RoZyAwOF9UaGcgMDlfVGhnIDEwX1RoZyAxMV9UaGcgMTJcIi5zcGxpdChcIl9cIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpcImNo4bunIG5o4bqtdF90aOG7qSBoYWlfdGjhu6kgYmFfdGjhu6kgdMawX3Ro4bupIG7Eg21fdGjhu6kgc8OhdV90aOG7qSBi4bqjeVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1Nob3J0OlwiQ05fVDJfVDNfVDRfVDVfVDZfVDdcIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCJDTl9UMl9UM19UNF9UNV9UNl9UN1wiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbWVyaWRpZW1QYXJzZTovc2F8Y2gvaSxpc1BNOmZ1bmN0aW9uKGlucHV0KXtyZXR1cm4vXmNoJC9pLnRlc3QoaW5wdXQpfSxtZXJpZGllbTpmdW5jdGlvbihob3VycyxtaW51dGVzLGlzTG93ZXIpe3JldHVybiBob3VyczwxMj9pc0xvd2VyP1wic2FcIjpcIlNBXCI6aXNMb3dlcj9cImNoXCI6XCJDSFwifSxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBbbsSDbV0gWVlZWVwiLExMTDpcIkQgTU1NTSBbbsSDbV0gWVlZWSBISDptbVwiLExMTEw6XCJkZGRkLCBEIE1NTU0gW27Eg21dIFlZWVkgSEg6bW1cIixsOlwiREQvTS9ZWVlZXCIsbGw6XCJEIE1NTSBZWVlZXCIsbGxsOlwiRCBNTU0gWVlZWSBISDptbVwiLGxsbGw6XCJkZGQsIEQgTU1NIFlZWVkgSEg6bW1cIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJbSMO0bSBuYXkgbMO6Y10gTFRcIixuZXh0RGF5OlwiW05nw6B5IG1haSBsw7pjXSBMVFwiLG5leHRXZWVrOlwiZGRkZCBbdHXhuqduIHThu5tpIGzDumNdIExUXCIsbGFzdERheTpcIltIw7RtIHF1YSBsw7pjXSBMVFwiLGxhc3RXZWVrOlwiZGRkZCBbdHXhuqduIHRyxrDhu5tjIGzDumNdIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwiJXMgdOG7m2lcIixwYXN0OlwiJXMgdHLGsOG7m2NcIixzOlwidsOgaSBnacOieVwiLHNzOlwiJWQgZ2nDonlcIixtOlwibeG7mXQgcGjDunRcIixtbTpcIiVkIHBow7p0XCIsaDpcIm3hu5l0IGdp4budXCIsaGg6XCIlZCBnaeG7nVwiLGQ6XCJt4buZdCBuZ8OgeVwiLGRkOlwiJWQgbmfDoHlcIix3OlwibeG7mXQgdHXhuqduXCIsd3c6XCIlZCB0deG6p25cIixNOlwibeG7mXQgdGjDoW5nXCIsTU06XCIlZCB0aMOhbmdcIix5OlwibeG7mXQgbsSDbVwiLHl5OlwiJWQgbsSDbVwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cXGR7MSwyfS8sb3JkaW5hbDpmdW5jdGlvbihudW1iZXIpe3JldHVybiBudW1iZXJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShfX3dlYnBhY2tfcmVxdWlyZV9fKDApKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7IWZ1bmN0aW9uKG1vbWVudCl7XCJ1c2Ugc3RyaWN0XCI7bW9tZW50LmRlZmluZUxvY2FsZShcIngtcHNldWRvXCIse21vbnRoczpcIkp+w6HDscO6w6F+csO9X0Z+w6licsO6fsOhcsO9X35Nw6FyY35oX8OBcH5yw61sX35Nw6HDvV9+SsO6w7HDqX5fSsO6bH7DvV/DgcO6fmfDunN0fl9Tw6lwfnTDqW1ifsOpcl/Dk35jdMOzYn7DqXJfw5F+w7N2w6ltfmLDqXJffkTDqWPDqX5tYsOpclwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIkp+w6HDsV9+RsOpYl9+TcOhcl9+w4Fwcl9+TcOhw71ffkrDusOxX35Kw7psX37DgcO6Z19+U8OpcF9+w5NjdF9+w5HDs3ZffkTDqWNcIi5zcGxpdChcIl9cIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpcIlN+w7rDsWTDoX7DvV9Nw7N+w7Fkw6HDvX5fVMO6w6l+c2TDocO9fl9Xw6lkfsOxw6lzZH7DocO9X1R+aMO6cnN+ZMOhw71ffkZyw61kfsOhw71fU37DoXTDunJ+ZMOhw71cIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIlN+w7rDsV9+TcOzw7FfflTDusOpX35Xw6lkX35UaMO6X35GcsOtX35Tw6F0XCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzTWluOlwiU37Dul9Nw7N+X1TDul9+V8OpX1R+aF9Gcn5fU8OhXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6XCJISDptbVwiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJEIE1NTU0gWVlZWVwiLExMTDpcIkQgTU1NTSBZWVlZIEhIOm1tXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tXCJ9LGNhbGVuZGFyOntzYW1lRGF5OlwiW1R+w7Nkw6F+w70gw6F0XSBMVFwiLG5leHREYXk6XCJbVH7Ds23Ds35ycsOzfncgw6F0XSBMVFwiLG5leHRXZWVrOlwiZGRkZCBbw6F0XSBMVFwiLGxhc3REYXk6XCJbw51+w6lzdH7DqXJkw6F+w70gw6F0XSBMVFwiLGxhc3RXZWVrOlwiW0x+w6FzdF0gZGRkZCBbw6F0XSBMVFwiLHNhbWVFbHNlOlwiTFwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpcIsOtfsOxICVzXCIscGFzdDpcIiVzIMOhfmfDs1wiLHM6XCLDoSB+ZsOpdyB+c8OpY8OzfsOxZHNcIixzczpcIiVkIHN+w6ljw7PDsX5kc1wiLG06XCLDoSB+bcOtw7F+w7p0w6lcIixtbTpcIiVkIG1+w63DscO6fnTDqXNcIixoOlwiw6F+w7EgaMOzfsO6clwiLGhoOlwiJWQgaH7Ds8O6cnNcIixkOlwiw6EgfmTDocO9XCIsZGQ6XCIlZCBkfsOhw71zXCIsTTpcIsOhIH5tw7PDsX50aFwiLE1NOlwiJWQgbX7Ds8OxdH5oc1wiLHk6XCLDoSB+w73DqcOhclwiLHl5OlwiJWQgw71+w6nDoXJzXCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xcZHsxLDJ9KHRofHN0fG5kfHJkKS8sb3JkaW5hbDpmdW5jdGlvbihudW1iZXIpe3ZhciBiPW51bWJlciUxMDtyZXR1cm4gbnVtYmVyKygxPT1+fihudW1iZXIlMTAwLzEwKT9cInRoXCI6MT09PWI/XCJzdFwiOjI9PT1iP1wibmRcIjozPT09Yj9cInJkXCI6XCJ0aFwiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KF9fd2VicGFja19yZXF1aXJlX18oMCkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXshZnVuY3Rpb24obW9tZW50KXtcInVzZSBzdHJpY3RcIjttb21lbnQuZGVmaW5lTG9jYWxlKFwieW9cIix7bW9udGhzOlwiU+G6ucyBcuG6ucyBX0XMgHJlzIBsZcyAX+G6uHLhurnMgG5hzIBfScyAZ2JlzIFfRcyAYmliaV9PzIBrdcyAZHVfQWfhurltb19PzIBndcyBbl9Pd2V3ZV/hu4zMgHdhzIByYcyAX0JlzIFsdcyBX+G7jMyAcOG6ucyAzIBcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJT4bq5zIFyX0XMgHJsX+G6uHJuX0nMgGdiX0XMgGJpX0/MgGt1zIBfQWfhurlfT8yAZ3XMgV9Pd2Vf4buMzIB3YcyAX0JlzIFsX+G7jMyAcOG6ucyAzIBcIi5zcGxpdChcIl9cIiksd2Vla2RheXM6XCJBzIBpzIBrdcyBX0FqZcyBX0nMgHPhurnMgWd1bl/hu4xq4buNzIFydcyBX+G7jGrhu43MgWLhu41f4bq4dGnMgF9BzIBiYcyBbeG6ucyBdGFcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcIkHMgGnMgGtfQWplzIFfScyAc+G6ucyBX+G7jGpyX+G7jGpiX+G6uHRpzIBfQcyAYmHMgVwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcIkHMgGnMgF9Bal9JzIBzX+G7jHJf4buMYl/hurh0X0HMgGJcIi5zcGxpdChcIl9cIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiaDptbSBBXCIsTFRTOlwiaDptbTpzcyBBXCIsTDpcIkREL01NL1lZWVlcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgaDptbSBBXCIsTExMTDpcImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQVwifSxjYWxlbmRhcjp7c2FtZURheTpcIltPzIBuacyAIG5pXSBMVFwiLG5leHREYXk6XCJb4buMzIBsYSBuaV0gTFRcIixuZXh0V2VlazpcImRkZGQgW+G7jHPhurnMgCB0b8yBbidi4buNXSBbbmldIExUXCIsbGFzdERheTpcIltBzIBuYSBuaV0gTFRcIixsYXN0V2VlazpcImRkZGQgW+G7jHPhurnMgCB0b8yBbOG7jcyBXSBbbmldIExUXCIsc2FtZUVsc2U6XCJMXCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOlwibmnMgSAlc1wiLHBhc3Q6XCIlcyBr4buNamHMgVwiLHM6XCJpzIBz4bq5anXMgSBhYXlhzIEgZGllXCIsc3M6XCJhYXlhzIEgJWRcIixtOlwiacyAc+G6uWp1zIEga2FuXCIsbW06XCJpzIBz4bq5anXMgSAlZFwiLGg6XCJ3YcyBa2F0aSBrYW5cIixoaDpcIndhzIFrYXRpICVkXCIsZDpcIuG7jWrhu43MgSBrYW5cIixkZDpcIuG7jWrhu43MgSAlZFwiLE06XCJvc3XMgCBrYW5cIixNTTpcIm9zdcyAICVkXCIseTpcIuG7jWR1zIFuIGthblwiLHl5Olwi4buNZHXMgW4gJWRcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTov4buNauG7jcyBXFxzXFxkezEsMn0vLG9yZGluYWw6XCLhu41q4buNzIEgJWRcIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO21vbWVudC5kZWZpbmVMb2NhbGUoXCJ6aC1jblwiLHttb250aHM6XCLkuIDmnIhf5LqM5pyIX+S4ieaciF/lm5vmnIhf5LqU5pyIX+WFreaciF/kuIPmnIhf5YWr5pyIX+S5neaciF/ljYHmnIhf5Y2B5LiA5pyIX+WNgeS6jOaciFwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIjHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwi5pif5pyf5pelX+aYn+acn+S4gF/mmJ/mnJ/kuoxf5pif5pyf5LiJX+aYn+acn+Wbm1/mmJ/mnJ/kupRf5pif5pyf5YWtXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLlkajml6Vf5ZGo5LiAX+WRqOS6jF/lkajkuIlf5ZGo5ZubX+WRqOS6lF/lkajlha1cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLml6Vf5LiAX+S6jF/kuIlf5ZubX+S6lF/lha1cIi5zcGxpdChcIl9cIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJZWVlZL01NL0REXCIsTEw6XCJZWVlZ5bm0TeaciETml6VcIixMTEw6XCJZWVlZ5bm0TeaciETml6VBaOeCuW1t5YiGXCIsTExMTDpcIllZWVnlubRN5pyIROaXpWRkZGRBaOeCuW1t5YiGXCIsbDpcIllZWVkvTS9EXCIsbGw6XCJZWVlZ5bm0TeaciETml6VcIixsbGw6XCJZWVlZ5bm0TeaciETml6UgSEg6bW1cIixsbGxsOlwiWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbVwifSxtZXJpZGllbVBhcnNlOi/lh4zmmah85pep5LiKfOS4iuWNiHzkuK3ljYh85LiL5Y2IfOaZmuS4ii8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGhvdXIsbWVyaWRpZW0pe3JldHVybiAxMj09PWhvdXImJihob3VyPTApLFwi5YeM5pmoXCI9PT1tZXJpZGllbXx8XCLml6nkuIpcIj09PW1lcmlkaWVtfHxcIuS4iuWNiFwiPT09bWVyaWRpZW0/aG91cjpcIuS4i+WNiFwiPT09bWVyaWRpZW18fFwi5pma5LiKXCI9PT1tZXJpZGllbT9ob3VyKzEyOmhvdXI+PTExP2hvdXI6aG91cisxMn0sbWVyaWRpZW06ZnVuY3Rpb24oaG91cixtaW51dGUsaXNMb3dlcil7dmFyIGhtPTEwMCpob3VyK21pbnV0ZTtyZXR1cm4gaG08NjAwP1wi5YeM5pmoXCI6aG08OTAwP1wi5pep5LiKXCI6aG08MTEzMD9cIuS4iuWNiFwiOmhtPDEyMzA/XCLkuK3ljYhcIjpobTwxODAwP1wi5LiL5Y2IXCI6XCLmmZrkuIpcIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJb5LuK5aSpXUxUXCIsbmV4dERheTpcIlvmmI7lpKldTFRcIixuZXh0V2VlazpmdW5jdGlvbihub3cpe3JldHVybiBub3cud2VlaygpIT09dGhpcy53ZWVrKCk/XCJb5LiLXWRkZExUXCI6XCJb5pysXWRkZExUXCJ9LGxhc3REYXk6XCJb5pio5aSpXUxUXCIsbGFzdFdlZWs6ZnVuY3Rpb24obm93KXtyZXR1cm4gdGhpcy53ZWVrKCkhPT1ub3cud2VlaygpP1wiW+S4il1kZGRMVFwiOlwiW+acrF1kZGRMVFwifSxzYW1lRWxzZTpcIkxcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn0o5pelfOaciHzlkagpLyxvcmRpbmFsOmZ1bmN0aW9uKG51bWJlcixwZXJpb2Qpe3N3aXRjaChwZXJpb2Qpe2Nhc2VcImRcIjpjYXNlXCJEXCI6Y2FzZVwiREREXCI6cmV0dXJuIG51bWJlcitcIuaXpVwiO2Nhc2VcIk1cIjpyZXR1cm4gbnVtYmVyK1wi5pyIXCI7Y2FzZVwid1wiOmNhc2VcIldcIjpyZXR1cm4gbnVtYmVyK1wi5ZGoXCI7ZGVmYXVsdDpyZXR1cm4gbnVtYmVyfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlc+WQjlwiLHBhc3Q6XCIlc+WJjVwiLHM6XCLlh6Dnp5JcIixzczpcIiVkIOenklwiLG06XCIxIOWIhumSn1wiLG1tOlwiJWQg5YiG6ZKfXCIsaDpcIjEg5bCP5pe2XCIsaGg6XCIlZCDlsI/ml7ZcIixkOlwiMSDlpKlcIixkZDpcIiVkIOWkqVwiLHc6XCIxIOWRqFwiLHd3OlwiJWQg5ZGoXCIsTTpcIjEg5Liq5pyIXCIsTU06XCIlZCDkuKrmnIhcIix5OlwiMSDlubRcIix5eTpcIiVkIOW5tFwifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO21vbWVudC5kZWZpbmVMb2NhbGUoXCJ6aC1oa1wiLHttb250aHM6XCLkuIDmnIhf5LqM5pyIX+S4ieaciF/lm5vmnIhf5LqU5pyIX+WFreaciF/kuIPmnIhf5YWr5pyIX+S5neaciF/ljYHmnIhf5Y2B5LiA5pyIX+WNgeS6jOaciFwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIjHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwi5pif5pyf5pelX+aYn+acn+S4gF/mmJ/mnJ/kuoxf5pif5pyf5LiJX+aYn+acn+Wbm1/mmJ/mnJ/kupRf5pif5pyf5YWtXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLpgLHml6Vf6YCx5LiAX+mAseS6jF/pgLHkuIlf6YCx5ZubX+mAseS6lF/pgLHlha1cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLml6Vf5LiAX+S6jF/kuIlf5ZubX+S6lF/lha1cIi5zcGxpdChcIl9cIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJZWVlZL01NL0REXCIsTEw6XCJZWVlZ5bm0TeaciETml6VcIixMTEw6XCJZWVlZ5bm0TeaciETml6UgSEg6bW1cIixMTExMOlwiWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbVwiLGw6XCJZWVlZL00vRFwiLGxsOlwiWVlZWeW5tE3mnIhE5pelXCIsbGxsOlwiWVlZWeW5tE3mnIhE5pelIEhIOm1tXCIsbGxsbDpcIllZWVnlubRN5pyIROaXpWRkZGQgSEg6bW1cIn0sbWVyaWRpZW1QYXJzZTov5YeM5pmofOaXqeS4inzkuIrljYh85Lit5Y2IfOS4i+WNiHzmmZrkuIovLG1lcmlkaWVtSG91cjpmdW5jdGlvbihob3VyLG1lcmlkaWVtKXtyZXR1cm4gMTI9PT1ob3VyJiYoaG91cj0wKSxcIuWHjOaZqFwiPT09bWVyaWRpZW18fFwi5pep5LiKXCI9PT1tZXJpZGllbXx8XCLkuIrljYhcIj09PW1lcmlkaWVtP2hvdXI6XCLkuK3ljYhcIj09PW1lcmlkaWVtP2hvdXI+PTExP2hvdXI6aG91cisxMjpcIuS4i+WNiFwiPT09bWVyaWRpZW18fFwi5pma5LiKXCI9PT1tZXJpZGllbT9ob3VyKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oaG91cixtaW51dGUsaXNMb3dlcil7dmFyIGhtPTEwMCpob3VyK21pbnV0ZTtyZXR1cm4gaG08NjAwP1wi5YeM5pmoXCI6aG08OTAwP1wi5pep5LiKXCI6aG08MTIwMD9cIuS4iuWNiFwiOjEyMDA9PT1obT9cIuS4reWNiFwiOmhtPDE4MDA/XCLkuIvljYhcIjpcIuaZmuS4ilwifSxjYWxlbmRhcjp7c2FtZURheTpcIlvku4rlpKldTFRcIixuZXh0RGF5OlwiW+aYjuWkqV1MVFwiLG5leHRXZWVrOlwiW+S4i11kZGRkTFRcIixsYXN0RGF5OlwiW+aYqOWkqV1MVFwiLGxhc3RXZWVrOlwiW+S4il1kZGRkTFRcIixzYW1lRWxzZTpcIkxcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn0o5pelfOaciHzpgLEpLyxvcmRpbmFsOmZ1bmN0aW9uKG51bWJlcixwZXJpb2Qpe3N3aXRjaChwZXJpb2Qpe2Nhc2VcImRcIjpjYXNlXCJEXCI6Y2FzZVwiREREXCI6cmV0dXJuIG51bWJlcitcIuaXpVwiO2Nhc2VcIk1cIjpyZXR1cm4gbnVtYmVyK1wi5pyIXCI7Y2FzZVwid1wiOmNhc2VcIldcIjpyZXR1cm4gbnVtYmVyK1wi6YCxXCI7ZGVmYXVsdDpyZXR1cm4gbnVtYmVyfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlc+W+jFwiLHBhc3Q6XCIlc+WJjVwiLHM6XCLlub7np5JcIixzczpcIiVkIOenklwiLG06XCIxIOWIhumQmFwiLG1tOlwiJWQg5YiG6ZCYXCIsaDpcIjEg5bCP5pmCXCIsaGg6XCIlZCDlsI/mmYJcIixkOlwiMSDlpKlcIixkZDpcIiVkIOWkqVwiLE06XCIxIOWAi+aciFwiLE1NOlwiJWQg5YCL5pyIXCIseTpcIjEg5bm0XCIseXk6XCIlZCDlubRcIn19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO21vbWVudC5kZWZpbmVMb2NhbGUoXCJ6aC1tb1wiLHttb250aHM6XCLkuIDmnIhf5LqM5pyIX+S4ieaciF/lm5vmnIhf5LqU5pyIX+WFreaciF/kuIPmnIhf5YWr5pyIX+S5neaciF/ljYHmnIhf5Y2B5LiA5pyIX+WNgeS6jOaciFwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIjHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwi5pif5pyf5pelX+aYn+acn+S4gF/mmJ/mnJ/kuoxf5pif5pyf5LiJX+aYn+acn+Wbm1/mmJ/mnJ/kupRf5pif5pyf5YWtXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLpgLHml6Vf6YCx5LiAX+mAseS6jF/pgLHkuIlf6YCx5ZubX+mAseS6lF/pgLHlha1cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLml6Vf5LiAX+S6jF/kuIlf5ZubX+S6lF/lha1cIi5zcGxpdChcIl9cIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJERC9NTS9ZWVlZXCIsTEw6XCJZWVlZ5bm0TeaciETml6VcIixMTEw6XCJZWVlZ5bm0TeaciETml6UgSEg6bW1cIixMTExMOlwiWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbVwiLGw6XCJEL00vWVlZWVwiLGxsOlwiWVlZWeW5tE3mnIhE5pelXCIsbGxsOlwiWVlZWeW5tE3mnIhE5pelIEhIOm1tXCIsbGxsbDpcIllZWVnlubRN5pyIROaXpWRkZGQgSEg6bW1cIn0sbWVyaWRpZW1QYXJzZTov5YeM5pmofOaXqeS4inzkuIrljYh85Lit5Y2IfOS4i+WNiHzmmZrkuIovLG1lcmlkaWVtSG91cjpmdW5jdGlvbihob3VyLG1lcmlkaWVtKXtyZXR1cm4gMTI9PT1ob3VyJiYoaG91cj0wKSxcIuWHjOaZqFwiPT09bWVyaWRpZW18fFwi5pep5LiKXCI9PT1tZXJpZGllbXx8XCLkuIrljYhcIj09PW1lcmlkaWVtP2hvdXI6XCLkuK3ljYhcIj09PW1lcmlkaWVtP2hvdXI+PTExP2hvdXI6aG91cisxMjpcIuS4i+WNiFwiPT09bWVyaWRpZW18fFwi5pma5LiKXCI9PT1tZXJpZGllbT9ob3VyKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oaG91cixtaW51dGUsaXNMb3dlcil7dmFyIGhtPTEwMCpob3VyK21pbnV0ZTtyZXR1cm4gaG08NjAwP1wi5YeM5pmoXCI6aG08OTAwP1wi5pep5LiKXCI6aG08MTEzMD9cIuS4iuWNiFwiOmhtPDEyMzA/XCLkuK3ljYhcIjpobTwxODAwP1wi5LiL5Y2IXCI6XCLmmZrkuIpcIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJb5LuK5aSpXSBMVFwiLG5leHREYXk6XCJb5piO5aSpXSBMVFwiLG5leHRXZWVrOlwiW+S4i11kZGRkIExUXCIsbGFzdERheTpcIlvmmKjlpKldIExUXCIsbGFzdFdlZWs6XCJb5LiKXWRkZGQgTFRcIixzYW1lRWxzZTpcIkxcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn0o5pelfOaciHzpgLEpLyxvcmRpbmFsOmZ1bmN0aW9uKG51bWJlcixwZXJpb2Qpe3N3aXRjaChwZXJpb2Qpe2Nhc2VcImRcIjpjYXNlXCJEXCI6Y2FzZVwiREREXCI6cmV0dXJuIG51bWJlcitcIuaXpVwiO2Nhc2VcIk1cIjpyZXR1cm4gbnVtYmVyK1wi5pyIXCI7Y2FzZVwid1wiOmNhc2VcIldcIjpyZXR1cm4gbnVtYmVyK1wi6YCxXCI7ZGVmYXVsdDpyZXR1cm4gbnVtYmVyfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlc+WFp1wiLHBhc3Q6XCIlc+WJjVwiLHM6XCLlub7np5JcIixzczpcIiVkIOenklwiLG06XCIxIOWIhumQmFwiLG1tOlwiJWQg5YiG6ZCYXCIsaDpcIjEg5bCP5pmCXCIsaGg6XCIlZCDlsI/mmYJcIixkOlwiMSDlpKlcIixkZDpcIiVkIOWkqVwiLE06XCIxIOWAi+aciFwiLE1NOlwiJWQg5YCL5pyIXCIseTpcIjEg5bm0XCIseXk6XCIlZCDlubRcIn19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyFmdW5jdGlvbihtb21lbnQpe1widXNlIHN0cmljdFwiO21vbWVudC5kZWZpbmVMb2NhbGUoXCJ6aC10d1wiLHttb250aHM6XCLkuIDmnIhf5LqM5pyIX+S4ieaciF/lm5vmnIhf5LqU5pyIX+WFreaciF/kuIPmnIhf5YWr5pyIX+S5neaciF/ljYHmnIhf5Y2B5LiA5pyIX+WNgeS6jOaciFwiLnNwbGl0KFwiX1wiKSxtb250aHNTaG9ydDpcIjHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzOlwi5pif5pyf5pelX+aYn+acn+S4gF/mmJ/mnJ/kuoxf5pif5pyf5LiJX+aYn+acn+Wbm1/mmJ/mnJ/kupRf5pif5pyf5YWtXCIuc3BsaXQoXCJfXCIpLHdlZWtkYXlzU2hvcnQ6XCLpgLHml6Vf6YCx5LiAX+mAseS6jF/pgLHkuIlf6YCx5ZubX+mAseS6lF/pgLHlha1cIi5zcGxpdChcIl9cIiksd2Vla2RheXNNaW46XCLml6Vf5LiAX+S6jF/kuIlf5ZubX+S6lF/lha1cIi5zcGxpdChcIl9cIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOlwiSEg6bW1cIixMVFM6XCJISDptbTpzc1wiLEw6XCJZWVlZL01NL0REXCIsTEw6XCJZWVlZ5bm0TeaciETml6VcIixMTEw6XCJZWVlZ5bm0TeaciETml6UgSEg6bW1cIixMTExMOlwiWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbVwiLGw6XCJZWVlZL00vRFwiLGxsOlwiWVlZWeW5tE3mnIhE5pelXCIsbGxsOlwiWVlZWeW5tE3mnIhE5pelIEhIOm1tXCIsbGxsbDpcIllZWVnlubRN5pyIROaXpWRkZGQgSEg6bW1cIn0sbWVyaWRpZW1QYXJzZTov5YeM5pmofOaXqeS4inzkuIrljYh85Lit5Y2IfOS4i+WNiHzmmZrkuIovLG1lcmlkaWVtSG91cjpmdW5jdGlvbihob3VyLG1lcmlkaWVtKXtyZXR1cm4gMTI9PT1ob3VyJiYoaG91cj0wKSxcIuWHjOaZqFwiPT09bWVyaWRpZW18fFwi5pep5LiKXCI9PT1tZXJpZGllbXx8XCLkuIrljYhcIj09PW1lcmlkaWVtP2hvdXI6XCLkuK3ljYhcIj09PW1lcmlkaWVtP2hvdXI+PTExP2hvdXI6aG91cisxMjpcIuS4i+WNiFwiPT09bWVyaWRpZW18fFwi5pma5LiKXCI9PT1tZXJpZGllbT9ob3VyKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oaG91cixtaW51dGUsaXNMb3dlcil7dmFyIGhtPTEwMCpob3VyK21pbnV0ZTtyZXR1cm4gaG08NjAwP1wi5YeM5pmoXCI6aG08OTAwP1wi5pep5LiKXCI6aG08MTEzMD9cIuS4iuWNiFwiOmhtPDEyMzA/XCLkuK3ljYhcIjpobTwxODAwP1wi5LiL5Y2IXCI6XCLmmZrkuIpcIn0sY2FsZW5kYXI6e3NhbWVEYXk6XCJb5LuK5aSpXSBMVFwiLG5leHREYXk6XCJb5piO5aSpXSBMVFwiLG5leHRXZWVrOlwiW+S4i11kZGRkIExUXCIsbGFzdERheTpcIlvmmKjlpKldIExUXCIsbGFzdFdlZWs6XCJb5LiKXWRkZGQgTFRcIixzYW1lRWxzZTpcIkxcIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXFxkezEsMn0o5pelfOaciHzpgLEpLyxvcmRpbmFsOmZ1bmN0aW9uKG51bWJlcixwZXJpb2Qpe3N3aXRjaChwZXJpb2Qpe2Nhc2VcImRcIjpjYXNlXCJEXCI6Y2FzZVwiREREXCI6cmV0dXJuIG51bWJlcitcIuaXpVwiO2Nhc2VcIk1cIjpyZXR1cm4gbnVtYmVyK1wi5pyIXCI7Y2FzZVwid1wiOmNhc2VcIldcIjpyZXR1cm4gbnVtYmVyK1wi6YCxXCI7ZGVmYXVsdDpyZXR1cm4gbnVtYmVyfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCIlc+W+jFwiLHBhc3Q6XCIlc+WJjVwiLHM6XCLlub7np5JcIixzczpcIiVkIOenklwiLG06XCIxIOWIhumQmFwiLG1tOlwiJWQg5YiG6ZCYXCIsaDpcIjEg5bCP5pmCXCIsaGg6XCIlZCDlsI/mmYJcIixkOlwiMSDlpKlcIixkZDpcIiVkIOWkqVwiLE06XCIxIOWAi+aciFwiLE1NOlwiJWQg5YCL5pyIXCIseTpcIjEg5bm0XCIseXk6XCIlZCDlubRcIn19KX0oX193ZWJwYWNrX3JlcXVpcmVfXygwKSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXt3aW5kb3cuSFRNTEVsZW1lbnQmJiF3aW5kb3cuSFRNTEVsZW1lbnQucHJvdG90eXBlLmluc2VydEFkamFjZW50SFRNTCYmKGNvbnNvbGUuaW5mbyhcIlBvbHlmaWxsIGZvciBpbnNlcnRBZGphY2VudEhUTUwgbG9hZGVkLlwiKSx3aW5kb3cuSFRNTEVsZW1lbnQucHJvdG90eXBlLmluc2VydEFkamFjZW50SFRNTD1mdW5jdGlvbihwb3NpdGlvbixodG1sKXt2YXIgY29udGFpbmVyPXRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXCJfXCIpLHBhcmVudD10aGlzLnBhcmVudE5vZGUsbm9kZUZyYWc9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2Zvcihwb3NpdGlvbj1wb3NpdGlvbi50b0xvd2VyQ2FzZSgpLGNvbnRhaW5lci5pbm5lckhUTUw9aHRtbDt2b2lkIDA9PT1jb250YWluZXIuZmlyc3RDaGlsZDspbm9kZUZyYWcuYXBwZW5kQ2hpbGQodm9pZCAwKTtcImJlZm9yZWVuZFwiPT09cG9zaXRpb24/dGhpcy5hcHBlbmRDaGlsZChub2RlRnJhZyk6XCJhZnRlcmJlZ2luXCI9PT1wb3NpdGlvbj90aGlzLmluc2VydEJlZm9yZShub2RlRnJhZyx0aGlzLmZpcnN0Q2hpbGQpOlwiYmVmb3JlYmVnaW5cIj09PXBvc2l0aW9uP3BhcmVudC5pbnNlcnRCZWZvcmUobm9kZUZyYWcsdGhpcyk6XCJhZnRlcmVuZFwiPT09cG9zaXRpb24mJnBhcmVudC5pbnNlcnRCZWZvcmUobm9kZUZyYWcsdGhpcy5uZXh0RWxlbWVudFNpYmxpbmcpfSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz0nPHN2ZyBjbGFzcz1cInR2LWljb24tYXR0ZW50aW9uIFwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj48cGF0aCBkPVwibSA5LjEzNDI4NTEsMTMuMjA5OTAzIHYgLTEuODI1NjE5IHEgMCwtMC4xMzc3ODIgLTAuMDc5ODc5LC0wLjIyMzg5NiAtMC4wNzk4NzksLTAuMDg2MTEgLTAuMTkxNzEwMSwtMC4wODYxMSBIIDcuMTM3MzA0OSBxIC0wLjExMTgzMDksMCAtMC4xOTE3MTAxLDAuMDg2MTEgLTAuMDc5ODc5LDAuMDg2MTEgLTAuMDc5ODc5LDAuMjIzODk2IHYgMS44MjU2MTkgcSAwLDAuMTM3NzgzIDAuMDc5ODc5LDAuMjIzODk3IDAuMDc5ODc5LDAuMDg2MTEgMC4xOTE3MTAxLDAuMTAzMzM3IGggMS43MjUzOTA5IHEgMC4xMTE4MzA5LDAgMC4xOTE3MTAxLC0wLjEwMzMzNyAwLjA3OTg3OSwtMC4xMDMzMzcgMC4wNzk4NzksLTAuMjIzODk3IHogTSA5LjExODMwOTEsOS42Mjc1NTY1IDkuMjc4MDY3Niw1LjIwMTI5MTcgcSAwLC0wLjEwMzMzNjkgLTAuMDc5ODc5LC0wLjE3MjIyODIgUSA5LjA4NjM1NzcsNC45MjU3MjY2IDguOTc0NTI2OCw0LjkyNTcyNjYgSCA3LjAyNTQ3NCBxIC0wLjA5NTg1NSwwIC0wLjIyMzY2MTgsMC4xMDMzMzY5IC0wLjA3OTg3OSwwLjA2ODg5MSAtMC4wNzk4NzksMC4yMDY2NzM5IGwgMC4xNDM3ODI2LDQuMzkxODE5MSBxIDAsMC4wODYxMTQgMC4wOTU4NTUsMC4xNTUwMDU0IDAuMDk1ODU1LDAuMDY4ODkxIDAuMjA3Njg1OSwwLjA1MTY2OCBoIDEuNjQ1NTExNyBxIDAuMTI3ODA2NywwIDAuMjIzNjYxNywtMC4wNTE2NjggMC4wOTU4NTUsLTAuMDUxNjY4IDAuMDc5ODc5LC0wLjE1NTAwNTQgeiBNIDkuMDA2NDc4NCwwLjYzNzI0NDM1IDE1Ljg0NDEzOCwxNC4xNzQzODEgcSAwLjMxOTUxNywwLjYwMjc5OSAtMC4wMTU5NywxLjIwNTU5NyAtMC4xNDM3ODMsMC4yOTI3ODggLTAuNDE1MzcyLDAuNDQ3Nzk0IFEgMTUuMTQxMjA2LDE1Ljk4Mjc3NyAxNC44NTM2NDEsMTYgSCAxLjE0NjM2NDQgUSAwLjg1ODc5OTIyLDE2IDAuNTg3MjA5OTIsMTUuODI3NzcyIDAuMzE1NjIwNjIsMTUuNjU1NTQ0IDAuMTcxODM4MDQsMTUuMzc5OTc4IC0wLjE2MzY1NDYyLDE0Ljc3NzE4IDAuMTU1ODYyMiwxNC4xNzQzODEgTCA3LjAwOTQ5ODIsMC42MzcyNDQzNSBRIDcuMTUzMjgwOCwwLjM0NDQ1NjQgNy40MjQ4NzAxLDAuMTcyMjI4MiA3LjY5NjQ1OTQsMCA4LjAwMDAwMDQsMCA4LjMwMzU0MTMsMCA4LjU3NTEzMDYsMC4xNzIyMjgyIDguODQ2NzE5OSwwLjM0NDQ1NjQgOS4wMDY0Nzg0LDAuNjM3MjQ0MzUgWlwiPjwvcGF0aD48L3N2Zz4nfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9JzxzdmcgY2xhc3M9XCJ0di1pY29uLWNoZWNrbWFyayBcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+PHBhdGggZD1cIk02LjM3IDEzLjUyNmEuMjcuMjcgMCAwMS0uMzM1IDBMLjA4NSA4LjMwOGEuMjIzLjIyMyAwIDAxMC0uMzVMMi4wMSA2LjAxN2EuMjU1LjI1NSAwIDAxLjM1IDBsMy42OSAzLjE4MmEuMjM5LjIzOSAwIDAwLjMzNSAwTDEzLjU2IDIuNWEuMjIzLjIyMyAwIDAxLjM1IDBsMi4wMDUgMS44NzdhLjIzOS4yMzkgMCAwMTAgLjM2NmwtOS41NDYgOC43ODJcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCI+PC9wYXRoPjwvc3ZnPid9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz0nPHN2ZyBjbGFzcz1cInR2LWljb24tY3Jvc3MgXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPjxwYXRoIGQ9XCJtIDE2LDEyLjg4Njg3OCBxIDAsMC41MzA5MiAtMC4zNjE5OTEsMC45MTcwNDQgbCAtMS44MzQwODcsMS44MzQwODcgUSAxMy40MTc3OTgsMTYgMTIuODg2ODc4LDE2IHEgLTAuNTMwOTIsMCAtMC45MTcwNDQsLTAuMzYxOTkxIGwgLTMuOTU3NzY3NiwtMy45ODE5IC0zLjk1Nzc2NzgsMy45ODE5IFEgMy42NjgxNzUsMTYgMy4xMzcyNTQ5LDE2IDIuNjA2MzM0OCwxNiAyLjIyMDIxMTIsMTUuNjM4MDA5IEwgMC4zODYxMjM2OCwxMy44MDM5MjIgUSAwLDEzLjQxNzc5OCAwLDEyLjg4Njg3OCAwLDEyLjM1NTk1OCAwLjM4NjEyMzY4LDExLjk2OTgzNCBMIDQuMzQzODkxNCw4LjAxMjA2NjQgMC4zODYxMjM2OCw0LjA1NDI5ODYgUSAwLDMuNjY4MTc1IDAsMy4xMzcyNTQ5IDAsMi42MDYzMzQ4IDAuMzg2MTIzNjgsMi4yMjAyMTEyIEwgMi4yMjAyMTEyLDAuMzg2MTIzNjggUSAyLjYwNjMzNDgsMCAzLjEzNzI1NDksMCAzLjY2ODE3NSwwIDQuMDU0Mjk4NiwwLjM4NjEyMzY4IEwgOC4wMTIwNjY0LDQuMzQzODkxNCAxMS45Njk4MzQsMC4zODYxMjM2OCBRIDEyLjM1NTk1OCwwIDEyLjg4Njg3OCwwIHEgMC41MzA5MiwwIDAuOTE3MDQ0LDAuMzg2MTIzNjggTCAxNS42MzgwMDksMi4yMjAyMTEyIFEgMTYsMi41ODIyMDIxIDE2LDMuMTM3MjU0OSAxNiwzLjY5MjMwNzcgMTUuNjM4MDA5LDQuMDU0Mjk4NiBsIC0zLjk1Nzc2OCwzLjk1Nzc2NzggMy45NTc3NjgsMy45NTc3Njc2IFEgMTYsMTIuMzMxODI1IDE2LDEyLjg4Njg3OCBaXCI+PC9wYXRoPjwvc3ZnPid9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz0nPHN2ZyBjbGFzcz1cInR2LWljb24tY3Jvc3MtY2lyY2xlIFwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj48cGF0aCBkPVwiTTggMGE4IDggMCAxMDggOCA4IDggMCAwMC04LTh6bTMuMzk2IDEwLjI2N2EuOC44IDAgMDEtMS4xMyAxLjEyOUw4IDkuMTI5bC0yLjI2NyAyLjI2N2EuOC44IDAgMTEtMS4xMjktMS4xM0w2Ljg3MSA4IDQuNjA0IDUuNzMzYS44LjggMCAxMTEuMTMtMS4xMjlMOCA2Ljg3MWwyLjI2Ny0yLjI2N2EuOC44IDAgMTExLjEyOSAxLjEzTDkuMTI5IDh6XCI+PC9wYXRoPjwvc3ZnPid9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz0nPHN2ZyBjbGFzcz1cInR2LWljb24tY3Jvc3MgXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPjxwYXRoIGQ9XCJNMS42ODMwNTAyLjAwMjQ3MzA1QTEuNzkyMzkzNSAxLjc5MiAwIDAwLjI4ODc0MDE2IDIuNzY2NDczYy4xNzgwNC4yNy40MzIxLjQ3NC42NTQxNS43MDZsNC41NDA5OTAwNCA0LjUxNGMtMS42NjYzNiAxLjY3My0zLjMzNTczIDMuMzQ1LTUuMDAxMDkwMDQgNS4wMmExLjc5MDM5MyAxLjc5IDAgMDAtLjExMzAzIDIuMjg3Yy4yNTIwNi4zMzIuNjIyMTQuNTcxIDEuMDI4MjMwMDQuNjYzLjQwNjA5LjA5Mi44NDMxOC4wMzcgMS4yMTMyNi0uMTU0LjI0NDA2LS4xMjEuNDQwMS0uMzE0LjYyODE0LS41MDhsNC43NzYwNS00Ljc3N2MxLjY2MjM2IDEuNjY3IDMuMzIyNzI5OCAzLjMzNyA0Ljk4NzA4OTggNS4wMDJhMS43OTAzOTMgMS43OSAwIDAwMS4xMTQyNS40NzdjLjQxODA5LjAyNS44NDExOC0uMTA0IDEuMTc1MjYtLjM1Ny4zMzAwNy0uMjUuNTY5MTItLjYyLjY2MDE0LTEuMDI1LjA5Mi0uNDA1LjAzNi0uODQtLjE1NTAzLTEuMjEtLjEyMzAzLS4yNS0uMzI0MDctLjQ0Ni0uNTE4MTItLjY0MmwtNC42NjkwMi00Ljc3NmMxLjY0MDM2LTEuNjYzIDMuMjgyNzItMy4zMjQgNC45MjEwOC00Ljk4OGExLjc4NzM5MjQgMS43ODcgMCAwMC0uOTEzMi0yLjk0Njk5OTk1IDEuNzk1Mzk0MSAxLjc5NSAwIDAwLTEuMjEzMjcuMTUyYy0uMjQ4MDUuMTIyLS40NDUxLjMxOC0uNjM3MTQuNTEyTDguMDE2NDQwMiA1LjQwNzQ3M2MtMS42NzQzNy0xLjY0Ni0zLjM0NjczLTMuMjk1LTUuMDIxMS00LjkzOTk5OTk1YTEuODAwMzk1MiAxLjggMCAwMC0xLjA4NjI0LS40NjNjLS4wNzUtLjAxLS4xNTAwMyAwLS4yMjYwNSAwelwiPjwvcGF0aD48L3N2Zz4nfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9JzxzdmcgY2xhc3M9XCJ0di1pY29uLWVtb2ppLWhhcHB5IFwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj48cGF0aCBkPVwiTSA4LjAwMDAwMDIsMTYgQyAzLjU4NDAwMDEsMTYgMCwxMi40MTYgMCw4IDAsMy41ODQgMy41ODQwMDAxLDAgOC4wMDAwMDAyLDAgMTIuNDE2LDAgMTYsMy41ODQgMTYsOCBjIDAsNC40MTYgLTMuNTg0LDggLTcuOTk5OTk5OCw4IHogbSAtMi42NTYsLTguOCBjIDAuMjU2LDAgMC40NDgsLTAuMTkyIDAuNDQ4LC0wLjQzMiBWIDQuODggYyAwLC0wLjI0IC0wLjE5MiwtMC40MzIgLTAuNDQ4LC0wLjQzMiAtMC4yNCwwIC0wLjQ0ODAwMDEsMC4xOTIgLTAuNDQ4MDAwMSwwLjQzMiB2IDEuODg4IGMgMCwwLjI0IDAuMjA4MDAwMSwwLjQzMiAwLjQ0ODAwMDEsMC40MzIgeiBNIDEwLjQ0OCw3LjIgYyAwLjI1NiwwIDAuNDQ4LC0wLjE5MiAwLjQ0OCwtMC40MzIgViA0Ljg4IEMgMTAuODk2LDQuNjQgMTAuNzA0LDQuNDQ4IDEwLjQ0OCw0LjQ0OCAxMC4yMDgsNC40NDggMTAsNC42NCAxMCw0Ljg4IFYgNi43NjggQyAxMCw3LjAwOCAxMC4yMDgsNy4yIDEwLjQ0OCw3LjIgWiBNIDcuOTg0MDAwMiwxMi4yNTYgQyA5LjkyMDAwMDMsMTIuMjU2IDExLjYxNiwxMS4wMjQgMTIuMTEyLDkuMjY0IDEyLjE3Niw5LjA0IDEyLjAzMiw4LjgxNiAxMS43OTIsOC43NTIgYyAtMC4yNCwtMC4wNjQgLTAuNDk2LDAuMDggLTAuNTQ0LDAuMzA0IC0wLjQsMS4zOTIgLTEuNzI3OTk5NywyLjM1MiAtMy4yNjM5OTk4LDIuMzUyIC0xLjU4NCwwIC0yLjkyOCwtMS4wMDggLTMuMjgwMDAwMSwtMi40NDggLTAuMDY0LC0wLjIyNCAtMC4zMDQsLTAuMzY4IC0wLjU0NCwtMC4zMiAtMC4yNCwwLjA0OCAtMC4zODQsMC4yNzIgLTAuMzM2LDAuNTEyIDAuNDQ4LDEuODI0IDIuMTYwMDAwMSwzLjEwNCA0LjE2MDAwMDEsMy4xMDQgelwiPjwvcGF0aD48L3N2Zz4nfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9JzxzdmcgY2xhc3M9XCJ0di1pY29uLWluZm8tY2lyY2xlIFwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj48cGF0aCBkPVwiTTggMy4yMDhhMS4wMiAxLjAyIDAgMTEtMS4wMiAxLjAyQTEuMDIgMS4wMiAwIDAxOCAzLjIwOHpNOCA2LjNhMS4wMiAxLjAyIDAgMDExLjAxMy45MzV2NC44MjNhMS4wMiAxLjAyIDAgMDEtMi4wMzMuMXYtNC44M0ExLjAyIDEuMDIgMCAwMTggNi4zMDh6bTAtNC41NTNhNi4yNTMgNi4yNTMgMCAxMDYuMjUzIDYuMjZBNi4yNTMgNi4yNTMgMCAwMDggMS43NTZ6TTggMGE4IDggMCAxMS04IDguMDA4IDggOCAwIDAxOC04elwiPjwvcGF0aD48L3N2Zz4nfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9JzxzdmcgY2xhc3M9XCJ0di1pY29uLXNlYXJjaCBcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+PHBhdGggZD1cIk0xNS42MyAxMy45MDdsLTIuMjE0LTIuMjE0YTcuNDcyIDcuNDcyIDAgMDAxLjM1NC00LjMwOUMxNC43NyAzLjMyNCAxMS40NDYgMCA3LjM4NCAwIDMuMzI0IDAgMCAzLjMyMyAwIDcuMzg0YzAgNC4wNjIgMy4zMjMgNy4zODYgNy4zODQgNy4zODYgMS42IDAgMy4wNzctLjQ5MyA0LjMwOS0xLjM1NGwyLjIxNCAyLjIxNGMuMjQ3LjI0Ny41NTQuMzcuODYzLjM3LjMwNyAwIC42MTQtLjEyMy44Ni0uMzdhMS4xOSAxLjE5IDAgMDAwLTEuNzIzem0tOC4yNDYtMS42Yy0xLjI5MSAwLTIuNTIzLS40OTEtMy41MDctMS40MTQtLjkyMy0uOTg2LTEuNDE2LTIuMjE2LTEuNDE2LTMuNTA5YTQuOTM4IDQuOTM4IDAgMDE0LjkyMy00LjkyM2MxLjI5MyAwIDIuNTIzLjQ5MyAzLjUwOSAxLjQxNi45MjMuOTIzIDEuNDE0IDIuMTUzIDEuNDE0IDMuNTA3YTQuOTM2IDQuOTM2IDAgMDEtNC45MjMgNC45MjN6XCI+PC9wYXRoPjwvc3ZnPid9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz0nPHN2ZyBjbGFzcz1cInR2LWljb24tYXJyb3ctbGVmdCBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZD1cIk0xNS4yMTQgMTYuMzI3TDEwLjg3NCAxMmw0LjM0LTQuMzI3YS45NzUuOTc1IDAgMDAuMjg2LS42OTUuOTc0Ljk3NCAwIDAwLS4yODYtLjY5My45OTEuOTkxIDAgMDAtMS4zOTIgMGwtNS4wMzQgNS4wMmEuOTc5Ljk3OSAwIDAwMCAxLjM4OGw1LjAzNCA1LjAyYS45ODcuOTg3IDAgMDAxLjM5MiAwIC45Ny45NyAwIDAwLjI4Ni0uNjkzLjk3NC45NzQgMCAwMC0uMjg2LS42OTN6XCIgZmlsbFJ1bGU9XCJldmVub2RkXCI+PC9wYXRoPjwvc3ZnPid9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz0nPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZD1cIk0xMC4xNzkgMTMuODUyTDguMzc4IDEyLjA1YTEuMzkzIDEuMzkzIDAgMTAtMS45NyAxLjk3bDIuNzg2IDIuNzg1YTEuMzkzIDEuMzkzIDAgMDAxLjk3IDBsNy40MjgtNy40MjhhMS4zOTMgMS4zOTMgMCAwMC0xLjk3LTEuOTdsLTYuNDQzIDYuNDQ0elwiIGZpbGxSdWxlPVwiZXZlbm9kZFwiPjwvcGF0aD48L3N2Zz4nfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiByKG4pe2lmKHRbbl0pcmV0dXJuIHRbbl0uZXhwb3J0czt2YXIgbz10W25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtuXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxyKSxvLmw9ITAsby5leHBvcnRzfXJldHVybiByLm09ZSxyLmM9dCxyLmQ9ZnVuY3Rpb24oZSx0LG4pe3IubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGdldDpufSl9LHIucj1mdW5jdGlvbihlKXtcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxyLnQ9ZnVuY3Rpb24oZSx0KXtpZigxJnQmJihlPXIoZSkpLDgmdClyZXR1cm4gZTtpZig0JnQmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKTtpZihyLnIobiksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pLDImdCYmXCJzdHJpbmdcIiE9dHlwZW9mIGUpZm9yKHZhciBvIGluIGUpci5kKG4sbyxmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0uYmluZChudWxsLG8pKTtyZXR1cm4gbn0sci5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiByLmQodCxcImFcIix0KSx0fSxyLm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LHIucD1cIlwiLHIoci5zPTApfShbZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuKG49XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIG8oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fXZhciBpPXIoMSksYT1yKDcpLHM9YS5nZXQsYz0oYS5kZWVwVmFsdWUsYS5pc0FycmF5KSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3ZhciBuPXIubG9jYXRpb24sbz12b2lkIDA9PT1uPzA6bixpPXIuZGlzdGFuY2UsYT12b2lkIDA9PT1pPzEwMDppLGM9ci50aHJlc2hvbGQsaD12b2lkIDA9PT1jPy42OmMsbD1yLm1heFBhdHRlcm5MZW5ndGgsdT12b2lkIDA9PT1sPzMyOmwsZj1yLmNhc2VTZW5zaXRpdmUsdj12b2lkIDAhPT1mJiZmLHA9ci50b2tlblNlcGFyYXRvcixkPXZvaWQgMD09PXA/LyArL2c6cCxnPXIuZmluZEFsbE1hdGNoZXMseT12b2lkIDAhPT1nJiZnLG09ci5taW5NYXRjaENoYXJMZW5ndGgsaz12b2lkIDA9PT1tPzE6bSxiPXIuaWQsUz12b2lkIDA9PT1iP251bGw6Yix4PXIua2V5cyxNPXZvaWQgMD09PXg/W106eCxfPXIuc2hvdWxkU29ydCx3PXZvaWQgMD09PV98fF8sTD1yLmdldEZuLEE9dm9pZCAwPT09TD9zOkwsTz1yLnNvcnRGbixDPXZvaWQgMD09PU8/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zY29yZS10LnNjb3JlfTpPLGo9ci50b2tlbml6ZSxQPXZvaWQgMCE9PWomJmosST1yLm1hdGNoQWxsVG9rZW5zLEY9dm9pZCAwIT09SSYmSSxUPXIuaW5jbHVkZU1hdGNoZXMsTj12b2lkIDAhPT1UJiZULHo9ci5pbmNsdWRlU2NvcmUsRT12b2lkIDAhPT16JiZ6LFc9ci52ZXJib3NlLEs9dm9pZCAwIT09VyYmVzshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLGUpLHRoaXMub3B0aW9ucz17bG9jYXRpb246byxkaXN0YW5jZTphLHRocmVzaG9sZDpoLG1heFBhdHRlcm5MZW5ndGg6dSxpc0Nhc2VTZW5zaXRpdmU6dix0b2tlblNlcGFyYXRvcjpkLGZpbmRBbGxNYXRjaGVzOnksbWluTWF0Y2hDaGFyTGVuZ3RoOmssaWQ6UyxrZXlzOk0saW5jbHVkZU1hdGNoZXM6TixpbmNsdWRlU2NvcmU6RSxzaG91bGRTb3J0OncsZ2V0Rm46QSxzb3J0Rm46Qyx2ZXJib3NlOkssdG9rZW5pemU6UCxtYXRjaEFsbFRva2VuczpGfSx0aGlzLnNldENvbGxlY3Rpb24odCksdGhpcy5fcHJvY2Vzc0tleXMoTSl9dmFyIHQscjtyZXR1cm4gdD1lLChyPVt7a2V5Olwic2V0Q29sbGVjdGlvblwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmxpc3Q9ZSxlfX0se2tleTpcIl9wcm9jZXNzS2V5c1wiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX2tleVdlaWdodHM9e30sdGhpcy5fa2V5TmFtZXM9W10sZS5sZW5ndGgmJlwic3RyaW5nXCI9PXR5cGVvZiBlWzBdKWZvcih2YXIgdD0wLHI9ZS5sZW5ndGg7dDxyO3QrPTEpe3ZhciBuPWVbdF07dGhpcy5fa2V5V2VpZ2h0c1tuXT0xLHRoaXMuX2tleU5hbWVzLnB1c2gobil9ZWxzZXtmb3IodmFyIG89bnVsbCxpPW51bGwsYT0wLHM9MCxjPWUubGVuZ3RoO3M8YztzKz0xKXt2YXIgaD1lW3NdO2lmKCFoLmhhc093blByb3BlcnR5KFwibmFtZVwiKSl0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgXCJuYW1lXCIgcHJvcGVydHkgaW4ga2V5IG9iamVjdCcpO3ZhciBsPWgubmFtZTtpZih0aGlzLl9rZXlOYW1lcy5wdXNoKGwpLCFoLmhhc093blByb3BlcnR5KFwid2VpZ2h0XCIpKXRocm93IG5ldyBFcnJvcignTWlzc2luZyBcIndlaWdodFwiIHByb3BlcnR5IGluIGtleSBvYmplY3QnKTt2YXIgdT1oLndlaWdodDtpZih1PDB8fHU+MSl0aHJvdyBuZXcgRXJyb3IoJ1wid2VpZ2h0XCIgcHJvcGVydHkgaW4ga2V5IG11c3QgYmVpbiB0aGUgcmFuZ2Ugb2YgWzAsIDEpJyk7aT1udWxsPT1pP3U6TWF0aC5tYXgoaSx1KSxvPW51bGw9PW8/dTpNYXRoLm1pbihvLHUpLHRoaXMuX2tleVdlaWdodHNbbF09dSxhKz11fWlmKGE+MSl0aHJvdyBuZXcgRXJyb3IoXCJUb3RhbCBvZiB3ZWlnaHRzIGNhbm5vdCBleGNlZWQgMVwiKX19fSx7a2V5Olwic2VhcmNoXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOntsaW1pdDohMX07dGhpcy5fbG9nKCctLS0tLS0tLS1cXG5TZWFyY2ggcGF0dGVybjogXCInLmNvbmNhdChlLCdcIicpKTt2YXIgcj10aGlzLl9wcmVwYXJlU2VhcmNoZXJzKGUpLG49ci50b2tlblNlYXJjaGVycyxvPXIuZnVsbFNlYXJjaGVyLGk9dGhpcy5fc2VhcmNoKG4sbyk7cmV0dXJuIHRoaXMuX2NvbXB1dGVTY29yZShpKSx0aGlzLm9wdGlvbnMuc2hvdWxkU29ydCYmdGhpcy5fc29ydChpKSx0LmxpbWl0JiZcIm51bWJlclwiPT10eXBlb2YgdC5saW1pdCYmKGk9aS5zbGljZSgwLHQubGltaXQpKSx0aGlzLl9mb3JtYXQoaSl9fSx7a2V5OlwiX3ByZXBhcmVTZWFyY2hlcnNcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpcIlwiLHQ9W107aWYodGhpcy5vcHRpb25zLnRva2VuaXplKWZvcih2YXIgcj1lLnNwbGl0KHRoaXMub3B0aW9ucy50b2tlblNlcGFyYXRvciksbj0wLG89ci5sZW5ndGg7bjxvO24rPTEpdC5wdXNoKG5ldyBpKHJbbl0sdGhpcy5vcHRpb25zKSk7cmV0dXJue3Rva2VuU2VhcmNoZXJzOnQsZnVsbFNlYXJjaGVyOm5ldyBpKGUsdGhpcy5vcHRpb25zKX19fSx7a2V5OlwiX3NlYXJjaFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdLHQ9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAscj10aGlzLmxpc3Qsbj17fSxvPVtdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiByWzBdKXtmb3IodmFyIGk9MCxhPXIubGVuZ3RoO2k8YTtpKz0xKXRoaXMuX2FuYWx5emUoe2tleTpcIlwiLHZhbHVlOnJbaV0scmVjb3JkOmksaW5kZXg6aX0se3Jlc3VsdE1hcDpuLHJlc3VsdHM6byx0b2tlblNlYXJjaGVyczplLGZ1bGxTZWFyY2hlcjp0fSk7cmV0dXJuIG99Zm9yKHZhciBzPTAsYz1yLmxlbmd0aDtzPGM7cys9MSlmb3IodmFyIGg9cltzXSxsPTAsdT10aGlzLl9rZXlOYW1lcy5sZW5ndGg7bDx1O2wrPTEpe3ZhciBmPXRoaXMuX2tleU5hbWVzW2xdO3RoaXMuX2FuYWx5emUoe2tleTpmLHZhbHVlOnRoaXMub3B0aW9ucy5nZXRGbihoLGYpLHJlY29yZDpoLGluZGV4OnN9LHtyZXN1bHRNYXA6bixyZXN1bHRzOm8sdG9rZW5TZWFyY2hlcnM6ZSxmdWxsU2VhcmNoZXI6dH0pfXJldHVybiBvfX0se2tleTpcIl9hbmFseXplXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLG49ZS5rZXksbz1lLmFycmF5SW5kZXgsaT12b2lkIDA9PT1vPy0xOm8sYT1lLnZhbHVlLHM9ZS5yZWNvcmQsaD1lLmluZGV4LGw9dC50b2tlblNlYXJjaGVycyx1PXZvaWQgMD09PWw/W106bCxmPXQuZnVsbFNlYXJjaGVyLHY9dC5yZXN1bHRNYXAscD12b2lkIDA9PT12P3t9OnYsZD10LnJlc3VsdHMsZz12b2lkIDA9PT1kP1tdOmQ7IWZ1bmN0aW9uIGUodCxvLGksYSl7aWYobnVsbCE9bylpZihcInN0cmluZ1wiPT10eXBlb2Ygbyl7dmFyIHM9ITEsaD0tMSxsPTA7ci5fbG9nKFwiXFxuS2V5OiBcIi5jb25jYXQoXCJcIj09PW4/XCItLVwiOm4pKTt2YXIgdj1mLnNlYXJjaChvKTtpZihyLl9sb2coJ0Z1bGwgdGV4dDogXCInLmNvbmNhdChvLCdcIiwgc2NvcmU6ICcpLmNvbmNhdCh2LnNjb3JlKSksci5vcHRpb25zLnRva2VuaXplKXtmb3IodmFyIGQ9by5zcGxpdChyLm9wdGlvbnMudG9rZW5TZXBhcmF0b3IpLHk9ZC5sZW5ndGgsbT1bXSxrPTAsYj11Lmxlbmd0aDtrPGI7ays9MSl7dmFyIFM9dVtrXTtyLl9sb2coJ1xcblBhdHRlcm46IFwiJy5jb25jYXQoUy5wYXR0ZXJuLCdcIicpKTtmb3IodmFyIHg9ITEsTT0wO008eTtNKz0xKXt2YXIgXz1kW01dLHc9Uy5zZWFyY2goXyksTD17fTt3LmlzTWF0Y2g/KExbX109dy5zY29yZSxzPSEwLHg9ITAsbS5wdXNoKHcuc2NvcmUpKTooTFtfXT0xLHIub3B0aW9ucy5tYXRjaEFsbFRva2Vuc3x8bS5wdXNoKDEpKSxyLl9sb2coJ1Rva2VuOiBcIicuY29uY2F0KF8sJ1wiLCBzY29yZTogJykuY29uY2F0KExbX10pKX14JiYobCs9MSl9aD1tWzBdO2Zvcih2YXIgQT1tLmxlbmd0aCxPPTE7TzxBO08rPTEpaCs9bVtPXTtoLz1BLHIuX2xvZyhcIlRva2VuIHNjb3JlIGF2ZXJhZ2U6XCIsaCl9dmFyIEM9di5zY29yZTtoPi0xJiYoQz0oQytoKS8yKSxyLl9sb2coXCJTY29yZSBhdmVyYWdlOlwiLEMpO3ZhciBqPSFyLm9wdGlvbnMudG9rZW5pemV8fCFyLm9wdGlvbnMubWF0Y2hBbGxUb2tlbnN8fGw+PXUubGVuZ3RoO2lmKHIuX2xvZyhcIlxcbkNoZWNrIE1hdGNoZXM6IFwiLmNvbmNhdChqKSksKHN8fHYuaXNNYXRjaCkmJmope3ZhciBQPXtrZXk6bixhcnJheUluZGV4OnQsdmFsdWU6byxzY29yZTpDfTtyLm9wdGlvbnMuaW5jbHVkZU1hdGNoZXMmJihQLm1hdGNoZWRJbmRpY2VzPXYubWF0Y2hlZEluZGljZXMpO3ZhciBJPXBbYV07ST9JLm91dHB1dC5wdXNoKFApOihwW2FdPXtpdGVtOmksb3V0cHV0OltQXX0sZy5wdXNoKHBbYV0pKX19ZWxzZSBpZihjKG8pKWZvcih2YXIgRj0wLFQ9by5sZW5ndGg7RjxUO0YrPTEpZShGLG9bRl0saSxhKX0oaSxhLHMsaCl9fSx7a2V5OlwiX2NvbXB1dGVTY29yZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2xvZyhcIlxcblxcbkNvbXB1dGluZyBzY29yZTpcXG5cIik7Zm9yKHZhciB0PXRoaXMuX2tleVdlaWdodHMscj0hIU9iamVjdC5rZXlzKHQpLmxlbmd0aCxuPTAsbz1lLmxlbmd0aDtuPG87bis9MSl7Zm9yKHZhciBpPWVbbl0sYT1pLm91dHB1dCxzPWEubGVuZ3RoLGM9MSxoPTA7aDxzO2grPTEpe3ZhciBsPWFbaF0sdT1sLmtleSxmPXI/dFt1XToxLHY9MD09PWwuc2NvcmUmJnQmJnRbdV0+MD9OdW1iZXIuRVBTSUxPTjpsLnNjb3JlO2MqPU1hdGgucG93KHYsZil9aS5zY29yZT1jLHRoaXMuX2xvZyhpKX19fSx7a2V5OlwiX3NvcnRcIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9sb2coXCJcXG5cXG5Tb3J0aW5nLi4uLlwiKSxlLnNvcnQodGhpcy5vcHRpb25zLnNvcnRGbil9fSx7a2V5OlwiX2Zvcm1hdFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PVtdO2lmKHRoaXMub3B0aW9ucy52ZXJib3NlKXt2YXIgcj1bXTt0aGlzLl9sb2coXCJcXG5cXG5PdXRwdXQ6XFxuXFxuXCIsSlNPTi5zdHJpbmdpZnkoZSwoZnVuY3Rpb24oZSx0KXtpZihcIm9iamVjdFwiPT09bih0KSYmbnVsbCE9PXQpe2lmKC0xIT09ci5pbmRleE9mKHQpKXJldHVybjtyLnB1c2godCl9cmV0dXJuIHR9KSwyKSkscj1udWxsfXZhciBvPVtdO3RoaXMub3B0aW9ucy5pbmNsdWRlTWF0Y2hlcyYmby5wdXNoKChmdW5jdGlvbihlLHQpe3ZhciByPWUub3V0cHV0O3QubWF0Y2hlcz1bXTtmb3IodmFyIG49MCxvPXIubGVuZ3RoO248bztuKz0xKXt2YXIgaT1yW25dO2lmKDAhPT1pLm1hdGNoZWRJbmRpY2VzLmxlbmd0aCl7dmFyIGE9e2luZGljZXM6aS5tYXRjaGVkSW5kaWNlcyx2YWx1ZTppLnZhbHVlfTtpLmtleSYmKGEua2V5PWkua2V5KSxpLmhhc093blByb3BlcnR5KFwiYXJyYXlJbmRleFwiKSYmaS5hcnJheUluZGV4Pi0xJiYoYS5hcnJheUluZGV4PWkuYXJyYXlJbmRleCksdC5tYXRjaGVzLnB1c2goYSl9fX0pKSx0aGlzLm9wdGlvbnMuaW5jbHVkZVNjb3JlJiZvLnB1c2goKGZ1bmN0aW9uKGUsdCl7dC5zY29yZT1lLnNjb3JlfSkpO2Zvcih2YXIgaT0wLGE9ZS5sZW5ndGg7aTxhO2krPTEpe3ZhciBzPWVbaV07aWYodGhpcy5vcHRpb25zLmlkJiYocy5pdGVtPXRoaXMub3B0aW9ucy5nZXRGbihzLml0ZW0sdGhpcy5vcHRpb25zLmlkKVswXSksby5sZW5ndGgpe2Zvcih2YXIgYz17aXRlbTpzLml0ZW19LGg9MCxsPW8ubGVuZ3RoO2g8bDtoKz0xKW9baF0ocyxjKTt0LnB1c2goYyl9ZWxzZSB0LnB1c2gocy5pdGVtKX1yZXR1cm4gdH19LHtrZXk6XCJfbG9nXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZTt0aGlzLm9wdGlvbnMudmVyYm9zZSYmKGU9Y29uc29sZSkubG9nLmFwcGx5KGUsYXJndW1lbnRzKX19XSkmJm8odC5wcm90b3R5cGUsciksZX0oKTtlLmV4cG9ydHM9aH0sZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fXZhciBvPXIoMiksaT1yKDMpLGE9cig2KSxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3ZhciBuPXIubG9jYXRpb24sbz12b2lkIDA9PT1uPzA6bixpPXIuZGlzdGFuY2Uscz12b2lkIDA9PT1pPzEwMDppLGM9ci50aHJlc2hvbGQsaD12b2lkIDA9PT1jPy42OmMsbD1yLm1heFBhdHRlcm5MZW5ndGgsdT12b2lkIDA9PT1sPzMyOmwsZj1yLmlzQ2FzZVNlbnNpdGl2ZSx2PXZvaWQgMCE9PWYmJmYscD1yLnRva2VuU2VwYXJhdG9yLGQ9dm9pZCAwPT09cD8vICsvZzpwLGc9ci5maW5kQWxsTWF0Y2hlcyx5PXZvaWQgMCE9PWcmJmcsbT1yLm1pbk1hdGNoQ2hhckxlbmd0aCxrPXZvaWQgMD09PW0/MTptLGI9ci5pbmNsdWRlTWF0Y2hlcyxTPXZvaWQgMCE9PWImJmI7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX0odGhpcyxlKSx0aGlzLm9wdGlvbnM9e2xvY2F0aW9uOm8sZGlzdGFuY2U6cyx0aHJlc2hvbGQ6aCxtYXhQYXR0ZXJuTGVuZ3RoOnUsaXNDYXNlU2Vuc2l0aXZlOnYsdG9rZW5TZXBhcmF0b3I6ZCxmaW5kQWxsTWF0Y2hlczp5LGluY2x1ZGVNYXRjaGVzOlMsbWluTWF0Y2hDaGFyTGVuZ3RoOmt9LHRoaXMucGF0dGVybj12P3Q6dC50b0xvd2VyQ2FzZSgpLHRoaXMucGF0dGVybi5sZW5ndGg8PXUmJih0aGlzLnBhdHRlcm5BbHBoYWJldD1hKHRoaXMucGF0dGVybikpfXZhciB0LHI7cmV0dXJuIHQ9ZSwocj1be2tleTpcInNlYXJjaFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMub3B0aW9ucyxyPXQuaXNDYXNlU2Vuc2l0aXZlLG49dC5pbmNsdWRlTWF0Y2hlcztpZihyfHwoZT1lLnRvTG93ZXJDYXNlKCkpLHRoaXMucGF0dGVybj09PWUpe3ZhciBhPXtpc01hdGNoOiEwLHNjb3JlOjB9O3JldHVybiBuJiYoYS5tYXRjaGVkSW5kaWNlcz1bWzAsZS5sZW5ndGgtMV1dKSxhfXZhciBzPXRoaXMub3B0aW9ucyxjPXMubWF4UGF0dGVybkxlbmd0aCxoPXMudG9rZW5TZXBhcmF0b3I7aWYodGhpcy5wYXR0ZXJuLmxlbmd0aD5jKXJldHVybiBvKGUsdGhpcy5wYXR0ZXJuLGgpO3ZhciBsPXRoaXMub3B0aW9ucyx1PWwubG9jYXRpb24sZj1sLmRpc3RhbmNlLHY9bC50aHJlc2hvbGQscD1sLmZpbmRBbGxNYXRjaGVzLGQ9bC5taW5NYXRjaENoYXJMZW5ndGg7cmV0dXJuIGkoZSx0aGlzLnBhdHRlcm4sdGhpcy5wYXR0ZXJuQWxwaGFiZXQse2xvY2F0aW9uOnUsZGlzdGFuY2U6Zix0aHJlc2hvbGQ6dixmaW5kQWxsTWF0Y2hlczpwLG1pbk1hdGNoQ2hhckxlbmd0aDpkLGluY2x1ZGVNYXRjaGVzOm59KX19XSkmJm4odC5wcm90b3R5cGUsciksZX0oKTtlLmV4cG9ydHM9c30sZnVuY3Rpb24oZSx0KXt2YXIgcj0vW1xcLVxcW1xcXVxcL1xce1xcfVxcKFxcKVxcKlxcK1xcP1xcLlxcXFxcXF5cXCRcXHxdL2c7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOi8gKy9nLG89bmV3IFJlZ0V4cCh0LnJlcGxhY2UocixcIlxcXFwkJlwiKS5yZXBsYWNlKG4sXCJ8XCIpKSxpPWUubWF0Y2gobyksYT0hIWkscz1bXTtpZihhKWZvcih2YXIgYz0wLGg9aS5sZW5ndGg7YzxoO2MrPTEpe3ZhciBsPWlbY107cy5wdXNoKFtlLmluZGV4T2YobCksbC5sZW5ndGgtMV0pfXJldHVybntzY29yZTphPy41OjEsaXNNYXRjaDphLG1hdGNoZWRJbmRpY2VzOnN9fX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoNCksbz1yKDUpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscixpKXtmb3IodmFyIGE9aS5sb2NhdGlvbixzPXZvaWQgMD09PWE/MDphLGM9aS5kaXN0YW5jZSxoPXZvaWQgMD09PWM/MTAwOmMsbD1pLnRocmVzaG9sZCx1PXZvaWQgMD09PWw/LjY6bCxmPWkuZmluZEFsbE1hdGNoZXMsdj12b2lkIDAhPT1mJiZmLHA9aS5taW5NYXRjaENoYXJMZW5ndGgsZD12b2lkIDA9PT1wPzE6cCxnPWkuaW5jbHVkZU1hdGNoZXMseT12b2lkIDAhPT1nJiZnLG09cyxrPWUubGVuZ3RoLGI9dSxTPWUuaW5kZXhPZih0LG0pLHg9dC5sZW5ndGgsTT1bXSxfPTA7XzxrO18rPTEpTVtfXT0wO2lmKC0xIT09Uyl7dmFyIHc9bih0LHtlcnJvcnM6MCxjdXJyZW50TG9jYXRpb246UyxleHBlY3RlZExvY2F0aW9uOm0sZGlzdGFuY2U6aH0pO2lmKGI9TWF0aC5taW4odyxiKSwtMSE9PShTPWUubGFzdEluZGV4T2YodCxtK3gpKSl7dmFyIEw9bih0LHtlcnJvcnM6MCxjdXJyZW50TG9jYXRpb246UyxleHBlY3RlZExvY2F0aW9uOm0sZGlzdGFuY2U6aH0pO2I9TWF0aC5taW4oTCxiKX19Uz0tMTtmb3IodmFyIEE9W10sTz0xLEM9eCtrLGo9MTw8KHg8PTMxP3gtMTozMCksUD0wO1A8eDtQKz0xKXtmb3IodmFyIEk9MCxGPUM7STxGOyluKHQse2Vycm9yczpQLGN1cnJlbnRMb2NhdGlvbjptK0YsZXhwZWN0ZWRMb2NhdGlvbjptLGRpc3RhbmNlOmh9KTw9Yj9JPUY6Qz1GLEY9TWF0aC5mbG9vcigoQy1JKS8yK0kpO0M9Rjt2YXIgVD1NYXRoLm1heCgxLG0tRisxKSxOPXY/azpNYXRoLm1pbihtK0YsaykreCx6PUFycmF5KE4rMik7eltOKzFdPSgxPDxQKS0xO2Zvcih2YXIgRT1OO0U+PVQ7RS09MSl7dmFyIFc9RS0xLEs9cltlLmNoYXJBdChXKV07aWYoSyYmKE1bV109MSkseltFXT0oeltFKzFdPDwxfDEpJkssMCE9PVAmJih6W0VdfD0oQVtFKzFdfEFbRV0pPDwxfDF8QVtFKzFdKSx6W0VdJmomJihPPW4odCx7ZXJyb3JzOlAsY3VycmVudExvY2F0aW9uOlcsZXhwZWN0ZWRMb2NhdGlvbjptLGRpc3RhbmNlOmh9KSk8PWIpe2lmKGI9TywoUz1XKTw9bSlicmVhaztUPU1hdGgubWF4KDEsMiptLVMpfX1pZihuKHQse2Vycm9yczpQKzEsY3VycmVudExvY2F0aW9uOm0sZXhwZWN0ZWRMb2NhdGlvbjptLGRpc3RhbmNlOmh9KT5iKWJyZWFrO0E9en12YXIgJD17aXNNYXRjaDpTPj0wLHNjb3JlOjA9PT1PPy4wMDE6T307cmV0dXJuIHkmJigkLm1hdGNoZWRJbmRpY2VzPW8oTSxkKSksJH19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dC5lcnJvcnMsbj12b2lkIDA9PT1yPzA6cixvPXQuY3VycmVudExvY2F0aW9uLGk9dm9pZCAwPT09bz8wOm8sYT10LmV4cGVjdGVkTG9jYXRpb24scz12b2lkIDA9PT1hPzA6YSxjPXQuZGlzdGFuY2UsaD12b2lkIDA9PT1jPzEwMDpjLGw9bi9lLmxlbmd0aCx1PU1hdGguYWJzKHMtaSk7cmV0dXJuIGg/bCt1L2g6dT8xOmx9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W10sdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxyPVtdLG49LTEsbz0tMSxpPTAsYT1lLmxlbmd0aDtpPGE7aSs9MSl7dmFyIHM9ZVtpXTtzJiYtMT09PW4/bj1pOnN8fC0xPT09bnx8KChvPWktMSktbisxPj10JiZyLnB1c2goW24sb10pLG49LTEpfXJldHVybiBlW2ktMV0mJmktbj49dCYmci5wdXNoKFtuLGktMV0pLHJ9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9e30scj1lLmxlbmd0aCxuPTA7bjxyO24rPTEpdFtlLmNoYXJBdChuKV09MDtmb3IodmFyIG89MDtvPHI7bys9MSl0W2UuY2hhckF0KG8pXXw9MTw8ci1vLTE7cmV0dXJuIHR9fSxmdW5jdGlvbihlLHQpe3ZhciByPWZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkoZSk6XCJbb2JqZWN0IEFycmF5XVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfSxuPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1wiXCI6ZnVuY3Rpb24oZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGU7dmFyIHQ9ZStcIlwiO3JldHVyblwiMFwiPT10JiYxL2U9PS0xLzA/XCItMFwiOnR9KGUpfSxvPWZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfSxpPWZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlfTtlLmV4cG9ydHM9e2dldDpmdW5jdGlvbihlLHQpe3ZhciBhPVtdO3JldHVybiBmdW5jdGlvbiBlKHQscyl7aWYocyl7dmFyIGM9cy5pbmRleE9mKFwiLlwiKSxoPXMsbD1udWxsOy0xIT09YyYmKGg9cy5zbGljZSgwLGMpLGw9cy5zbGljZShjKzEpKTt2YXIgdT10W2hdO2lmKG51bGwhPXUpaWYobHx8IW8odSkmJiFpKHUpKWlmKHIodSkpZm9yKHZhciBmPTAsdj11Lmxlbmd0aDtmPHY7Zis9MSllKHVbZl0sbCk7ZWxzZSBsJiZlKHUsbCk7ZWxzZSBhLnB1c2gobih1KSl9ZWxzZSBhLnB1c2godCl9KGUsdCksYX0saXNBcnJheTpyLGlzU3RyaW5nOm8saXNOdW06aSx0b1N0cmluZzpufX1dKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7dmFyIGFwaT1fX3dlYnBhY2tfcmVxdWlyZV9fKDIpLGNvbnRlbnQ9X193ZWJwYWNrX3JlcXVpcmVfXygxNTMpO1wic3RyaW5nXCI9PXR5cGVvZihjb250ZW50PWNvbnRlbnQuX19lc01vZHVsZT9jb250ZW50LmRlZmF1bHQ6Y29udGVudCkmJihjb250ZW50PVtbbW9kdWxlLmksY29udGVudCxcIlwiXV0pO3ZhciBvcHRpb25zPXtpbnNlcnQ6XCJoZWFkXCIsc2luZ2xldG9uOiExfSxleHBvcnRlZD0oYXBpKGNvbnRlbnQsb3B0aW9ucyksY29udGVudC5sb2NhbHM/Y29udGVudC5sb2NhbHM6e30pO21vZHVsZS5leHBvcnRzPWV4cG9ydGVkfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsoZXhwb3J0cz1fX3dlYnBhY2tfcmVxdWlyZV9fKDMpKCExKSkucHVzaChbbW9kdWxlLmksJy5mbGV4e2Rpc3BsYXk6ZmxleH0uZmxleC0tYWxpZ24tc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uZmxleC0tYWxpZ24tZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kfS5mbGV4LS1hbGlnbi1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyfS5mbGV4LS1hbGlnbi1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2h9LmZsZXgtLWFsaWduLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5mbGV4LS1qdXN0aWZ5LXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5mbGV4LS1qdXN0aWZ5LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmZsZXgtLWp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmZsZXgtLWp1c3RpZnktYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmZsZXgtLWp1c3RpZnktYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uZmxleC0tanVzdGlmeS1ldmVubHl7anVzdGlmeS1jb250ZW50OnNwYWNlLWV2ZW5seX1Aa2V5ZnJhbWVzIHNjYWxlezAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDAuOSk7dHJhbnNmb3JtOnNjYWxlKDAuOSk7b3BhY2l0eTowfTUwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxLjA1KTt0cmFuc2Zvcm06c2NhbGUoMS4wNSk7b3BhY2l0eTowLjh9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxKTt0cmFuc2Zvcm06c2NhbGUoMSk7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIHNjYWxlezAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEuOSk7dHJhbnNmb3JtOnNjYWxlKDAuOSk7b3BhY2l0eTowfTUwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxLjA1KTt0cmFuc2Zvcm06c2NhbGUoMS4wNSk7b3BhY2l0eTowLjh9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxKTt0cmFuc2Zvcm06c2NhbGUoMSk7b3BhY2l0eToxfX0qe2JveC1zaXppbmc6Ym9yZGVyLWJveH1AZm9udC1mYWNle2ZvbnQtZmFtaWx5OlxcJ1Rha2Vhd2F5IFNhbnMgUmVndWxhclxcJztmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDo0MDA7c3JjOnVybChcIi8vYXNzZXRzLnRha2Vhd2F5LmNvbS9mb250cy90YWtlYXdheS1zYW5zL3Rha2Vhd2F5LXNhbnMtcmVndWxhci5lb3RcIik7c3JjOmxvY2FsKFwiVGFrZWF3YXkgU2FucyBSZWd1bGFyXCIpLHVybChcIi8vYXNzZXRzLnRha2Vhd2F5LmNvbS9mb250cy90YWtlYXdheS1zYW5zL3Rha2Vhd2F5LXNhbnMtcmVndWxhci5lb3Q/I2llZml4XCIpIGZvcm1hdChcImVtYmVkZGVkLW9wZW50eXBlXCIpLHVybChcIi8vYXNzZXRzLnRha2Vhd2F5LmNvbS9mb250cy90YWtlYXdheS1zYW5zL3Rha2Vhd2F5LXNhbnMtcmVndWxhci53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKSx1cmwoXCIvL2Fzc2V0cy50YWtlYXdheS5jb20vZm9udHMvdGFrZWF3YXktc2Fucy90YWtlYXdheS1zYW5zLXJlZ3VsYXIud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpLHVybChcIi8vYXNzZXRzLnRha2Vhd2F5LmNvbS9mb250cy90YWtlYXdheS1zYW5zL3Rha2Vhd2F5LXNhbnMtcmVndWxhci50dGZcIikgZm9ybWF0KFwidHJ1ZXR5cGVcIil9QGZvbnQtZmFjZXtmb250LWZhbWlseTpcXCdUYWtlYXdheSBTYW5zIEJvbGRcXCc7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6NzAwO3NyYzp1cmwoXCIvL2Fzc2V0cy50YWtlYXdheS5jb20vZm9udHMvdGFrZWF3YXktc2Fucy90YWtlYXdheS1zYW5zLWJvbGQuZW90XCIpO3NyYzpsb2NhbChcIlRha2Vhd2F5IFNhbnMgQm9sZFwiKSx1cmwoXCIvL2Fzc2V0cy50YWtlYXdheS5jb20vZm9udHMvdGFrZWF3YXktc2Fucy90YWtlYXdheS1zYW5zLWJvbGQuZW90PyNpZWZpeFwiKSBmb3JtYXQoXCJlbWJlZGRlZC1vcGVudHlwZVwiKSx1cmwoXCIvL2Fzc2V0cy50YWtlYXdheS5jb20vZm9udHMvdGFrZWF3YXktc2Fucy90YWtlYXdheS1zYW5zLWJvbGQud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksdXJsKFwiLy9hc3NldHMudGFrZWF3YXkuY29tL2ZvbnRzL3Rha2Vhd2F5LXNhbnMvdGFrZWF3YXktc2Fucy1ib2xkLndvZmZcIikgZm9ybWF0KFwid29mZlwiKSx1cmwoXCIvL2Fzc2V0cy50YWtlYXdheS5jb20vZm9udHMvdGFrZWF3YXktc2Fucy90YWtlYXdheS1zYW5zLWJvbGQudHRmXCIpIGZvcm1hdChcInRydWV0eXBlXCIpfS5hbGVydGlmeXtmb250LWZhbWlseTpcXCdUYWtlYXdheSBTYW5zIFJlZ3VsYXJcXCcsIFxcJ0F2YW50IEdhcmRlXFwnLCBcXCdDZW50dXJ5IEdvdGhpY1xcJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtmb250LXdlaWdodDo0MDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpzdHJldGNoO2JhY2tncm91bmQtY29sb3I6IzBhMzg0Nztjb2xvcjojZmZmO2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmc6MjlweCAzN3B4O3RleHQtYWxpZ246bGVmdH1AbWVkaWEgKG1heC13aWR0aDogNTcwcHgpey5hbGVydGlmeXtwYWRkaW5nOjIycHggMjFweH19LmFsZXJ0aWZ5X19pY29ue21hcmdpbjo0cHggMCAwfS5hbGVydGlmeV9faWNvbiAudHYtaWNvbnt3aWR0aDoyMXB4fS5hbGVydGlmeV9faWNvbiAudHYtaWNvbiBbY2xhc3NePVxcJ3R2LWljb24tXFwnXXt3aWR0aDoxMDAlO2ZpbGw6I2ZmZn0uYWxlcnRpZnlfX2NvbnRlbnR7bWFyZ2luOjAgMjVweCAwIDE3cHh9QG1lZGlhIChtYXgtd2lkdGg6IDU3MHB4KXsuYWxlcnRpZnlfX2NvbnRlbnR7bWFyZ2luOjAgNnB4IDAgMTZweH19LmFsZXJ0aWZ5X19oZWFkZXJ7Zm9udC1mYW1pbHk6XFwnVGFrZWF3YXkgU2FucyBCb2xkXFwnLCBcXCdBdmFudCBHYXJkZVxcJywgXFwnQ2VudHVyeSBHb3RoaWNcXCcsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjEuNWVtfS5hbGVydGlmeSBzdHJvbmcsLmFsZXJ0aWZ5IGJ7Zm9udC1mYW1pbHk6XFwnVGFrZWF3YXkgU2FucyBCb2xkXFwnLCBcXCdBdmFudCBHYXJkZVxcJywgXFwnQ2VudHVyeSBHb3RoaWNcXCcsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiNmODY2MDB9XFxuJyxcIlwiXSksbW9kdWxlLmV4cG9ydHM9ZXhwb3J0c30sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7dmFyIGFwaT1fX3dlYnBhY2tfcmVxdWlyZV9fKDIpLGNvbnRlbnQ9X193ZWJwYWNrX3JlcXVpcmVfXygxNTUpO1wic3RyaW5nXCI9PXR5cGVvZihjb250ZW50PWNvbnRlbnQuX19lc01vZHVsZT9jb250ZW50LmRlZmF1bHQ6Y29udGVudCkmJihjb250ZW50PVtbbW9kdWxlLmksY29udGVudCxcIlwiXV0pO3ZhciBvcHRpb25zPXtpbnNlcnQ6XCJoZWFkXCIsc2luZ2xldG9uOiExfSxleHBvcnRlZD0oYXBpKGNvbnRlbnQsb3B0aW9ucyksY29udGVudC5sb2NhbHM/Y29udGVudC5sb2NhbHM6e30pO21vZHVsZS5leHBvcnRzPWV4cG9ydGVkfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsoZXhwb3J0cz1fX3dlYnBhY2tfcmVxdWlyZV9fKDMpKCExKSkucHVzaChbbW9kdWxlLmksXCIuZmxleHtkaXNwbGF5OmZsZXh9LmZsZXgtLWFsaWduLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmZsZXgtLWFsaWduLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZH0uZmxleC0tYWxpZ24tY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlcn0uZmxleC0tYWxpZ24tc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNofS5mbGV4LS1hbGlnbi1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZX0uZmxleC0tanVzdGlmeS1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uZmxleC0tanVzdGlmeS1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5mbGV4LS1qdXN0aWZ5LWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5mbGV4LS1qdXN0aWZ5LWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5mbGV4LS1qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LmZsZXgtLWp1c3RpZnktZXZlbmx5e2p1c3RpZnktY29udGVudDpzcGFjZS1ldmVubHl9QGtleWZyYW1lcyBzY2FsZXswJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgwLjkpO3RyYW5zZm9ybTpzY2FsZSgwLjkpO29wYWNpdHk6MH01MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMS4wNSk7dHJhbnNmb3JtOnNjYWxlKDEuMDUpO29wYWNpdHk6MC44fTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MX19QGtleWZyYW1lcyBzY2FsZXswJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxLjkpO3RyYW5zZm9ybTpzY2FsZSgwLjkpO29wYWNpdHk6MH01MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMS4wNSk7dHJhbnNmb3JtOnNjYWxlKDEuMDUpO29wYWNpdHk6MC44fTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MX19Kntib3gtc2l6aW5nOmJvcmRlci1ib3h9LnR2LWljb257ZGlzcGxheTpmbGV4fVtjbGFzc149J3R2LWljb24tJ117ZmlsbDojMDAwO2ZvbnQtc2l6ZToxcmVtO3dpZHRoOjFyZW07aGVpZ2h0OjFyZW19XFxuXCIsXCJcIl0pLG1vZHVsZS5leHBvcnRzPWV4cG9ydHN9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbihtb2R1bGUpe3JldHVybiBtb2R1bGUud2VicGFja1BvbHlmaWxsfHwobW9kdWxlLmRlcHJlY2F0ZT1mdW5jdGlvbigpe30sbW9kdWxlLnBhdGhzPVtdLG1vZHVsZS5jaGlsZHJlbnx8KG1vZHVsZS5jaGlsZHJlbj1bXSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSxcImxvYWRlZFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtb2R1bGUubH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLFwiaWRcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbW9kdWxlLml9fSksbW9kdWxlLndlYnBhY2tQb2x5ZmlsbD0xKSxtb2R1bGV9fSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgbWFwPXtcIi4vYWZcIjo1LFwiLi9hZi5qc1wiOjUsXCIuL2FyXCI6NixcIi4vYXItZHpcIjo3LFwiLi9hci1kei5qc1wiOjcsXCIuL2FyLWt3XCI6OCxcIi4vYXIta3cuanNcIjo4LFwiLi9hci1seVwiOjksXCIuL2FyLWx5LmpzXCI6OSxcIi4vYXItbWFcIjoxMCxcIi4vYXItbWEuanNcIjoxMCxcIi4vYXItc2FcIjoxMSxcIi4vYXItc2EuanNcIjoxMSxcIi4vYXItdG5cIjoxMixcIi4vYXItdG4uanNcIjoxMixcIi4vYXIuanNcIjo2LFwiLi9helwiOjEzLFwiLi9hei5qc1wiOjEzLFwiLi9iZVwiOjE0LFwiLi9iZS5qc1wiOjE0LFwiLi9iZ1wiOjE1LFwiLi9iZy5qc1wiOjE1LFwiLi9ibVwiOjE2LFwiLi9ibS5qc1wiOjE2LFwiLi9iblwiOjE3LFwiLi9ibi1iZFwiOjE4LFwiLi9ibi1iZC5qc1wiOjE4LFwiLi9ibi5qc1wiOjE3LFwiLi9ib1wiOjE5LFwiLi9iby5qc1wiOjE5LFwiLi9iclwiOjIwLFwiLi9ici5qc1wiOjIwLFwiLi9ic1wiOjIxLFwiLi9icy5qc1wiOjIxLFwiLi9jYVwiOjIyLFwiLi9jYS5qc1wiOjIyLFwiLi9jc1wiOjIzLFwiLi9jcy5qc1wiOjIzLFwiLi9jdlwiOjI0LFwiLi9jdi5qc1wiOjI0LFwiLi9jeVwiOjI1LFwiLi9jeS5qc1wiOjI1LFwiLi9kYVwiOjI2LFwiLi9kYS5qc1wiOjI2LFwiLi9kZVwiOjI3LFwiLi9kZS1hdFwiOjI4LFwiLi9kZS1hdC5qc1wiOjI4LFwiLi9kZS1jaFwiOjI5LFwiLi9kZS1jaC5qc1wiOjI5LFwiLi9kZS5qc1wiOjI3LFwiLi9kdlwiOjMwLFwiLi9kdi5qc1wiOjMwLFwiLi9lbFwiOjMxLFwiLi9lbC5qc1wiOjMxLFwiLi9lbi1hdVwiOjMyLFwiLi9lbi1hdS5qc1wiOjMyLFwiLi9lbi1jYVwiOjMzLFwiLi9lbi1jYS5qc1wiOjMzLFwiLi9lbi1nYlwiOjM0LFwiLi9lbi1nYi5qc1wiOjM0LFwiLi9lbi1pZVwiOjM1LFwiLi9lbi1pZS5qc1wiOjM1LFwiLi9lbi1pbFwiOjM2LFwiLi9lbi1pbC5qc1wiOjM2LFwiLi9lbi1pblwiOjM3LFwiLi9lbi1pbi5qc1wiOjM3LFwiLi9lbi1uelwiOjM4LFwiLi9lbi1uei5qc1wiOjM4LFwiLi9lbi1zZ1wiOjM5LFwiLi9lbi1zZy5qc1wiOjM5LFwiLi9lb1wiOjQwLFwiLi9lby5qc1wiOjQwLFwiLi9lc1wiOjQxLFwiLi9lcy1kb1wiOjQyLFwiLi9lcy1kby5qc1wiOjQyLFwiLi9lcy1teFwiOjQzLFwiLi9lcy1teC5qc1wiOjQzLFwiLi9lcy11c1wiOjQ0LFwiLi9lcy11cy5qc1wiOjQ0LFwiLi9lcy5qc1wiOjQxLFwiLi9ldFwiOjQ1LFwiLi9ldC5qc1wiOjQ1LFwiLi9ldVwiOjQ2LFwiLi9ldS5qc1wiOjQ2LFwiLi9mYVwiOjQ3LFwiLi9mYS5qc1wiOjQ3LFwiLi9maVwiOjQ4LFwiLi9maS5qc1wiOjQ4LFwiLi9maWxcIjo0OSxcIi4vZmlsLmpzXCI6NDksXCIuL2ZvXCI6NTAsXCIuL2ZvLmpzXCI6NTAsXCIuL2ZyXCI6NTEsXCIuL2ZyLWNhXCI6NTIsXCIuL2ZyLWNhLmpzXCI6NTIsXCIuL2ZyLWNoXCI6NTMsXCIuL2ZyLWNoLmpzXCI6NTMsXCIuL2ZyLmpzXCI6NTEsXCIuL2Z5XCI6NTQsXCIuL2Z5LmpzXCI6NTQsXCIuL2dhXCI6NTUsXCIuL2dhLmpzXCI6NTUsXCIuL2dkXCI6NTYsXCIuL2dkLmpzXCI6NTYsXCIuL2dsXCI6NTcsXCIuL2dsLmpzXCI6NTcsXCIuL2dvbS1kZXZhXCI6NTgsXCIuL2dvbS1kZXZhLmpzXCI6NTgsXCIuL2dvbS1sYXRuXCI6NTksXCIuL2dvbS1sYXRuLmpzXCI6NTksXCIuL2d1XCI6NjAsXCIuL2d1LmpzXCI6NjAsXCIuL2hlXCI6NjEsXCIuL2hlLmpzXCI6NjEsXCIuL2hpXCI6NjIsXCIuL2hpLmpzXCI6NjIsXCIuL2hyXCI6NjMsXCIuL2hyLmpzXCI6NjMsXCIuL2h1XCI6NjQsXCIuL2h1LmpzXCI6NjQsXCIuL2h5LWFtXCI6NjUsXCIuL2h5LWFtLmpzXCI6NjUsXCIuL2lkXCI6NjYsXCIuL2lkLmpzXCI6NjYsXCIuL2lzXCI6NjcsXCIuL2lzLmpzXCI6NjcsXCIuL2l0XCI6NjgsXCIuL2l0LWNoXCI6NjksXCIuL2l0LWNoLmpzXCI6NjksXCIuL2l0LmpzXCI6NjgsXCIuL2phXCI6NzAsXCIuL2phLmpzXCI6NzAsXCIuL2p2XCI6NzEsXCIuL2p2LmpzXCI6NzEsXCIuL2thXCI6NzIsXCIuL2thLmpzXCI6NzIsXCIuL2trXCI6NzMsXCIuL2trLmpzXCI6NzMsXCIuL2ttXCI6NzQsXCIuL2ttLmpzXCI6NzQsXCIuL2tuXCI6NzUsXCIuL2tuLmpzXCI6NzUsXCIuL2tvXCI6NzYsXCIuL2tvLmpzXCI6NzYsXCIuL2t1XCI6NzcsXCIuL2t1LmpzXCI6NzcsXCIuL2t5XCI6NzgsXCIuL2t5LmpzXCI6NzgsXCIuL2xiXCI6NzksXCIuL2xiLmpzXCI6NzksXCIuL2xvXCI6ODAsXCIuL2xvLmpzXCI6ODAsXCIuL2x0XCI6ODEsXCIuL2x0LmpzXCI6ODEsXCIuL2x2XCI6ODIsXCIuL2x2LmpzXCI6ODIsXCIuL21lXCI6ODMsXCIuL21lLmpzXCI6ODMsXCIuL21pXCI6ODQsXCIuL21pLmpzXCI6ODQsXCIuL21rXCI6ODUsXCIuL21rLmpzXCI6ODUsXCIuL21sXCI6ODYsXCIuL21sLmpzXCI6ODYsXCIuL21uXCI6ODcsXCIuL21uLmpzXCI6ODcsXCIuL21yXCI6ODgsXCIuL21yLmpzXCI6ODgsXCIuL21zXCI6ODksXCIuL21zLW15XCI6OTAsXCIuL21zLW15LmpzXCI6OTAsXCIuL21zLmpzXCI6ODksXCIuL210XCI6OTEsXCIuL210LmpzXCI6OTEsXCIuL215XCI6OTIsXCIuL215LmpzXCI6OTIsXCIuL25iXCI6OTMsXCIuL25iLmpzXCI6OTMsXCIuL25lXCI6OTQsXCIuL25lLmpzXCI6OTQsXCIuL25sXCI6OTUsXCIuL25sLWJlXCI6OTYsXCIuL25sLWJlLmpzXCI6OTYsXCIuL25sLmpzXCI6OTUsXCIuL25uXCI6OTcsXCIuL25uLmpzXCI6OTcsXCIuL29jLWxuY1wiOjk4LFwiLi9vYy1sbmMuanNcIjo5OCxcIi4vcGEtaW5cIjo5OSxcIi4vcGEtaW4uanNcIjo5OSxcIi4vcGxcIjoxMDAsXCIuL3BsLmpzXCI6MTAwLFwiLi9wdFwiOjEwMSxcIi4vcHQtYnJcIjoxMDIsXCIuL3B0LWJyLmpzXCI6MTAyLFwiLi9wdC5qc1wiOjEwMSxcIi4vcm9cIjoxMDMsXCIuL3JvLmpzXCI6MTAzLFwiLi9ydVwiOjEwNCxcIi4vcnUuanNcIjoxMDQsXCIuL3NkXCI6MTA1LFwiLi9zZC5qc1wiOjEwNSxcIi4vc2VcIjoxMDYsXCIuL3NlLmpzXCI6MTA2LFwiLi9zaVwiOjEwNyxcIi4vc2kuanNcIjoxMDcsXCIuL3NrXCI6MTA4LFwiLi9zay5qc1wiOjEwOCxcIi4vc2xcIjoxMDksXCIuL3NsLmpzXCI6MTA5LFwiLi9zcVwiOjExMCxcIi4vc3EuanNcIjoxMTAsXCIuL3NyXCI6MTExLFwiLi9zci1jeXJsXCI6MTEyLFwiLi9zci1jeXJsLmpzXCI6MTEyLFwiLi9zci5qc1wiOjExMSxcIi4vc3NcIjoxMTMsXCIuL3NzLmpzXCI6MTEzLFwiLi9zdlwiOjExNCxcIi4vc3YuanNcIjoxMTQsXCIuL3N3XCI6MTE1LFwiLi9zdy5qc1wiOjExNSxcIi4vdGFcIjoxMTYsXCIuL3RhLmpzXCI6MTE2LFwiLi90ZVwiOjExNyxcIi4vdGUuanNcIjoxMTcsXCIuL3RldFwiOjExOCxcIi4vdGV0LmpzXCI6MTE4LFwiLi90Z1wiOjExOSxcIi4vdGcuanNcIjoxMTksXCIuL3RoXCI6MTIwLFwiLi90aC5qc1wiOjEyMCxcIi4vdGtcIjoxMjEsXCIuL3RrLmpzXCI6MTIxLFwiLi90bC1waFwiOjEyMixcIi4vdGwtcGguanNcIjoxMjIsXCIuL3RsaFwiOjEyMyxcIi4vdGxoLmpzXCI6MTIzLFwiLi90clwiOjEyNCxcIi4vdHIuanNcIjoxMjQsXCIuL3R6bFwiOjEyNSxcIi4vdHpsLmpzXCI6MTI1LFwiLi90em1cIjoxMjYsXCIuL3R6bS1sYXRuXCI6MTI3LFwiLi90em0tbGF0bi5qc1wiOjEyNyxcIi4vdHptLmpzXCI6MTI2LFwiLi91Zy1jblwiOjEyOCxcIi4vdWctY24uanNcIjoxMjgsXCIuL3VrXCI6MTI5LFwiLi91ay5qc1wiOjEyOSxcIi4vdXJcIjoxMzAsXCIuL3VyLmpzXCI6MTMwLFwiLi91elwiOjEzMSxcIi4vdXotbGF0blwiOjEzMixcIi4vdXotbGF0bi5qc1wiOjEzMixcIi4vdXouanNcIjoxMzEsXCIuL3ZpXCI6MTMzLFwiLi92aS5qc1wiOjEzMyxcIi4veC1wc2V1ZG9cIjoxMzQsXCIuL3gtcHNldWRvLmpzXCI6MTM0LFwiLi95b1wiOjEzNSxcIi4veW8uanNcIjoxMzUsXCIuL3poLWNuXCI6MTM2LFwiLi96aC1jbi5qc1wiOjEzNixcIi4vemgtaGtcIjoxMzcsXCIuL3poLWhrLmpzXCI6MTM3LFwiLi96aC1tb1wiOjEzOCxcIi4vemgtbW8uanNcIjoxMzgsXCIuL3poLXR3XCI6MTM5LFwiLi96aC10dy5qc1wiOjEzOX07ZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKXt2YXIgaWQ9d2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpfWZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpe2lmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLHJlcSkpe3ZhciBlPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrcmVxK1wiJ1wiKTt0aHJvdyBlLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZX1yZXR1cm4gbWFwW3JlcV19d2VicGFja0NvbnRleHQua2V5cz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyhtYXApfSx3ZWJwYWNrQ29udGV4dC5yZXNvbHZlPXdlYnBhY2tDb250ZXh0UmVzb2x2ZSxtb2R1bGUuZXhwb3J0cz13ZWJwYWNrQ29udGV4dCx3ZWJwYWNrQ29udGV4dC5pZD0xNTd9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBhcGk9X193ZWJwYWNrX3JlcXVpcmVfXygyKSxjb250ZW50PV9fd2VicGFja19yZXF1aXJlX18oMTU5KTtcInN0cmluZ1wiPT10eXBlb2YoY29udGVudD1jb250ZW50Ll9fZXNNb2R1bGU/Y29udGVudC5kZWZhdWx0OmNvbnRlbnQpJiYoY29udGVudD1bW21vZHVsZS5pLGNvbnRlbnQsXCJcIl1dKTt2YXIgb3B0aW9ucz17aW5zZXJ0OlwiaGVhZFwiLHNpbmdsZXRvbjohMX0sZXhwb3J0ZWQ9KGFwaShjb250ZW50LG9wdGlvbnMpLGNvbnRlbnQubG9jYWxzP2NvbnRlbnQubG9jYWxzOnt9KTttb2R1bGUuZXhwb3J0cz1leHBvcnRlZH0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7KGV4cG9ydHM9X193ZWJwYWNrX3JlcXVpcmVfXygzKSghMSkpLnB1c2goW21vZHVsZS5pLFwiLmZsZXh7ZGlzcGxheTpmbGV4fS5mbGV4LS1hbGlnbi1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5mbGV4LS1hbGlnbi1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmR9LmZsZXgtLWFsaWduLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXJ9LmZsZXgtLWFsaWduLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaH0uZmxleC0tYWxpZ24tYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmV9LmZsZXgtLWp1c3RpZnktc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmZsZXgtLWp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZmxleC0tanVzdGlmeS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uZmxleC0tanVzdGlmeS1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uZmxleC0tanVzdGlmeS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5mbGV4LS1qdXN0aWZ5LWV2ZW5seXtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtZXZlbmx5fUBrZXlmcmFtZXMgc2NhbGV7MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMC45KTt0cmFuc2Zvcm06c2NhbGUoMC45KTtvcGFjaXR5OjB9NTAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEuMDUpO3RyYW5zZm9ybTpzY2FsZSgxLjA1KTtvcGFjaXR5OjAuOH0xMDAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEpO3RyYW5zZm9ybTpzY2FsZSgxKTtvcGFjaXR5OjF9fUBrZXlmcmFtZXMgc2NhbGV7MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMS45KTt0cmFuc2Zvcm06c2NhbGUoMC45KTtvcGFjaXR5OjB9NTAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEuMDUpO3RyYW5zZm9ybTpzY2FsZSgxLjA1KTtvcGFjaXR5OjAuOH0xMDAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEpO3RyYW5zZm9ybTpzY2FsZSgxKTtvcGFjaXR5OjF9fSp7Ym94LXNpemluZzpib3JkZXItYm94fS50di1idXR0b257YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6MnB4O2JvcmRlcjoxcHggc29saWQgI2Q3ZDdkNztjb2xvcjojMTI1ZmNhO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OmJvbGQ7aGVpZ2h0OjQ4cHg7b3V0bGluZTowfS50di1idXR0b246aG92ZXIsLnR2LWJ1dHRvbjpmb2N1c3tjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzEyNWZjYX1cXG5cIixcIlwiXSksbW9kdWxlLmV4cG9ydHM9ZXhwb3J0c30sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7dmFyIGFwaT1fX3dlYnBhY2tfcmVxdWlyZV9fKDIpLGNvbnRlbnQ9X193ZWJwYWNrX3JlcXVpcmVfXygxNjEpO1wic3RyaW5nXCI9PXR5cGVvZihjb250ZW50PWNvbnRlbnQuX19lc01vZHVsZT9jb250ZW50LmRlZmF1bHQ6Y29udGVudCkmJihjb250ZW50PVtbbW9kdWxlLmksY29udGVudCxcIlwiXV0pO3ZhciBvcHRpb25zPXtpbnNlcnQ6XCJoZWFkXCIsc2luZ2xldG9uOiExfSxleHBvcnRlZD0oYXBpKGNvbnRlbnQsb3B0aW9ucyksY29udGVudC5sb2NhbHM/Y29udGVudC5sb2NhbHM6e30pO21vZHVsZS5leHBvcnRzPWV4cG9ydGVkfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsoZXhwb3J0cz1fX3dlYnBhY2tfcmVxdWlyZV9fKDMpKCExKSkucHVzaChbbW9kdWxlLmksXCIuZmxleHtkaXNwbGF5OmZsZXh9LmZsZXgtLWFsaWduLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmZsZXgtLWFsaWduLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZH0uZmxleC0tYWxpZ24tY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlcn0uZmxleC0tYWxpZ24tc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNofS5mbGV4LS1hbGlnbi1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZX0uZmxleC0tanVzdGlmeS1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uZmxleC0tanVzdGlmeS1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5mbGV4LS1qdXN0aWZ5LWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5mbGV4LS1qdXN0aWZ5LWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5mbGV4LS1qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LmZsZXgtLWp1c3RpZnktZXZlbmx5e2p1c3RpZnktY29udGVudDpzcGFjZS1ldmVubHl9QGtleWZyYW1lcyBzY2FsZXswJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgwLjkpO3RyYW5zZm9ybTpzY2FsZSgwLjkpO29wYWNpdHk6MH01MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMS4wNSk7dHJhbnNmb3JtOnNjYWxlKDEuMDUpO29wYWNpdHk6MC44fTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MX19QGtleWZyYW1lcyBzY2FsZXswJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxLjkpO3RyYW5zZm9ybTpzY2FsZSgwLjkpO29wYWNpdHk6MH01MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMS4wNSk7dHJhbnNmb3JtOnNjYWxlKDEuMDUpO29wYWNpdHk6MC44fTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MX19Kntib3gtc2l6aW5nOmJvcmRlci1ib3h9LnR2LXBvcHVwe2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwLjQpO2JvdHRvbTowO2hlaWdodDoxMDB2aDtsZWZ0OjA7b3BhY2l0eToxO3Bvc2l0aW9uOmZpeGVkO3JpZ2h0OjA7dG9wOjA7d2lkdGg6MTAwJTt6LWluZGV4OjIwfS50di1wb3B1cF9faWNvbi1jbG9zZXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO2hlaWdodDo2NHB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7d2lkdGg6NjRweDt6LWluZGV4OjJ9LnR2LXBvcHVwX19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4taGVpZ2h0OjEwMHZoO2hlaWdodDoxMDAlO3dpZHRoOjEwMHZ3O3Bvc2l0aW9uOnJlbGF0aXZlfUBtZWRpYSAobWluLXdpZHRoOiAxMDA0cHgpey50di1wb3B1cF9faW5uZXJ7aGVpZ2h0OjUwdmg7bWluLWhlaWdodDo2MTBweDttYXgtd2lkdGg6NjcycHg7bWFyZ2luOjgwcHggYXV0bztib3JkZXItcmFkaXVzOjJweH19QG1lZGlhIGFsbCBhbmQgKG1pbi13aWR0aDogMTAwNHB4KSBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OiBub25lKXsudHYtcG9wdXBfX2lubmVye2hlaWdodDo2MTBweH19LnR2LXBvcHVwX19oZWFkZXIsLnR2LXBvcHVwX19jb250ZW50e3BhZGRpbmc6MCAyMHB4fS50di1wb3B1cF9faGVhZGVye2ZsZXg6MCAwIGF1dG87cG9zaXRpb246cmVsYXRpdmU7dG9wOjA7bWFyZ2luLWJvdHRvbToxNXB4fS50di1wb3B1cF9fY29udGVudHtmbGV4OjEgMSBhdXRvO292ZXJmbG93OmF1dG87aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4fS50di1wb3B1cCAudHYtaWNvbi1jcm9zc3tmaWxsOiMwYTM4NDc7d2lkdGg6MTJweH0udHYtc2Nyb2xsLXN0b3B7b3ZlcmZsb3c6aGlkZGVufVxcblwiLFwiXCJdKSxtb2R1bGUuZXhwb3J0cz1leHBvcnRzfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgYXBpPV9fd2VicGFja19yZXF1aXJlX18oMiksY29udGVudD1fX3dlYnBhY2tfcmVxdWlyZV9fKDE2Myk7XCJzdHJpbmdcIj09dHlwZW9mKGNvbnRlbnQ9Y29udGVudC5fX2VzTW9kdWxlP2NvbnRlbnQuZGVmYXVsdDpjb250ZW50KSYmKGNvbnRlbnQ9W1ttb2R1bGUuaSxjb250ZW50LFwiXCJdXSk7dmFyIG9wdGlvbnM9e2luc2VydDpcImhlYWRcIixzaW5nbGV0b246ITF9LGV4cG9ydGVkPShhcGkoY29udGVudCxvcHRpb25zKSxjb250ZW50LmxvY2Fscz9jb250ZW50LmxvY2Fsczp7fSk7bW9kdWxlLmV4cG9ydHM9ZXhwb3J0ZWR9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyhleHBvcnRzPV9fd2VicGFja19yZXF1aXJlX18oMykoITEpKS5wdXNoKFttb2R1bGUuaSxcIi5mbGV4e2Rpc3BsYXk6ZmxleH0uZmxleC0tYWxpZ24tc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uZmxleC0tYWxpZ24tZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kfS5mbGV4LS1hbGlnbi1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyfS5mbGV4LS1hbGlnbi1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2h9LmZsZXgtLWFsaWduLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5mbGV4LS1qdXN0aWZ5LXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5mbGV4LS1qdXN0aWZ5LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmZsZXgtLWp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmZsZXgtLWp1c3RpZnktYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmZsZXgtLWp1c3RpZnktYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uZmxleC0tanVzdGlmeS1ldmVubHl7anVzdGlmeS1jb250ZW50OnNwYWNlLWV2ZW5seX1Aa2V5ZnJhbWVzIHNjYWxlezAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDAuOSk7dHJhbnNmb3JtOnNjYWxlKDAuOSk7b3BhY2l0eTowfTUwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxLjA1KTt0cmFuc2Zvcm06c2NhbGUoMS4wNSk7b3BhY2l0eTowLjh9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxKTt0cmFuc2Zvcm06c2NhbGUoMSk7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIHNjYWxlezAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEuOSk7dHJhbnNmb3JtOnNjYWxlKDAuOSk7b3BhY2l0eTowfTUwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxLjA1KTt0cmFuc2Zvcm06c2NhbGUoMS4wNSk7b3BhY2l0eTowLjh9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxKTt0cmFuc2Zvcm06c2NhbGUoMSk7b3BhY2l0eToxfX0qe2JveC1zaXppbmc6Ym9yZGVyLWJveH0udHYtY2hpcHMtY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtjb2xvcjojMGEzODQ3fS50di1jaGlwcy1jb250YWluZXItLW5vLXJlc3VsdHN7ZGlzcGxheTpmbGV4O2ZsZXg6MTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS50di1jaGlwcy1uby1yZXN1bHRze2Rpc3BsYXk6bm9uZX0udHYtY2hpcHMtbm8tcmVzdWx0c19fdGV4dHtjb2xvcjojMGEzODQ3O2ZvbnQtc2l6ZToxOHB4O2ZvbnQtd2VpZ2h0OmJvbGR9LnR2LWNoaXBzLWNvbnRhaW5lci0tbm8tcmVzdWx0cyAudHYtY2hpcHMtbm8tcmVzdWx0c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLXNlbGY6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzowIDAgMTAwcHh9LnR2LWNoaXBzLWNvbnRhaW5lci0tbm8tcmVzdWx0cyAudHYtY2hpcHMtbm8tcmVzdWx0cyAudHYtaWNvbi1zZWFyY2h7ZGlzcGxheTpmbGV4O2ZpbGw6IzBhMzg0NztoZWlnaHQ6MzJweDt3aWR0aDozMnB4fS50di1jaGlwcy1jb250YWluZXItLW5vLXJlc3VsdHMgLnR2LWNoaXBzLW5vLXJlc3VsdHNfX2J1dHRvbnttaW4td2lkdGg6MjYwcHh9LnR2LWNoaXBzLXJlc3VsdHN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS50di1jaGlwcy1yZXN1bHRzOmZvY3Vze291dGxpbmU6MH0udHYtY2hpcHMtY29udGFpbmVyLS1uby1yZXN1bHRzIC50di1jaGlwcy1yZXN1bHRze2Rpc3BsYXk6bm9uZX0udHYtY2hpcHMtY29udGFpbmVyLS1maWx0ZXItYWN0aXZlIC50di1jaGlwcy1yZXN1bHRze2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0udHYtY2hpcHMtY29udGFpbmVyLS1maWx0ZXItYWN0aXZlIC50di1jaGlwcy1yZXN1bHRzIC50di1jaGlwcy1yZXN1bHRzX19pdGVte2ZsZXg6MSAwIGF1dG99LnR2LWNoaXBzLWNvbnRhaW5lci0tZmlsdGVyLWFjdGl2ZSAudHYtY2hpcHMtcmVzdWx0cyAudHYtY2hpcHMtcmVzdWx0c19faXRlbS0tc2VsZWN0LWFsbHtkaXNwbGF5Om5vbmV9LnR2LWNoaXBzLXJlc3VsdHNfX2l0ZW17ZmxleDowIDAgMTgwcHg7bWFyZ2luLWJvdHRvbToxNnB4fS50di1jaGlwcy1yZXN1bHRzX19pdGVtLS1oaWRkZW57ZGlzcGxheTpub25lfS50di1jaGlwcy1yZXN1bHRzX19pdGVtLS1maXJzdHtvcmRlcjotMX0udHYtY2hpcHMtcmVzdWx0c19faXRlbS0tc2VsZWN0ZWR7ZGlzcGxheTpibG9ja30udHYtY2hpcHMtcmVzdWx0c19faXRlbS0tc2VsZWN0LWFsbHtvcmRlcjotM30udHYtY2hpcHMtcmVzdWx0c19faXRlbS0tc2VsZWN0LWVmZmVjdHtzY2FsZToxLjF9XFxuXCIsXCJcIl0pLG1vZHVsZS5leHBvcnRzPWV4cG9ydHN9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBhcGk9X193ZWJwYWNrX3JlcXVpcmVfXygyKSxjb250ZW50PV9fd2VicGFja19yZXF1aXJlX18oMTY1KTtcInN0cmluZ1wiPT10eXBlb2YoY29udGVudD1jb250ZW50Ll9fZXNNb2R1bGU/Y29udGVudC5kZWZhdWx0OmNvbnRlbnQpJiYoY29udGVudD1bW21vZHVsZS5pLGNvbnRlbnQsXCJcIl1dKTt2YXIgb3B0aW9ucz17aW5zZXJ0OlwiaGVhZFwiLHNpbmdsZXRvbjohMX0sZXhwb3J0ZWQ9KGFwaShjb250ZW50LG9wdGlvbnMpLGNvbnRlbnQubG9jYWxzP2NvbnRlbnQubG9jYWxzOnt9KTttb2R1bGUuZXhwb3J0cz1leHBvcnRlZH0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7KGV4cG9ydHM9X193ZWJwYWNrX3JlcXVpcmVfXygzKSghMSkpLnB1c2goW21vZHVsZS5pLFwiLmZsZXh7ZGlzcGxheTpmbGV4fS5mbGV4LS1hbGlnbi1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5mbGV4LS1hbGlnbi1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmR9LmZsZXgtLWFsaWduLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXJ9LmZsZXgtLWFsaWduLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaH0uZmxleC0tYWxpZ24tYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmV9LmZsZXgtLWp1c3RpZnktc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmZsZXgtLWp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZmxleC0tanVzdGlmeS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uZmxleC0tanVzdGlmeS1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uZmxleC0tanVzdGlmeS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5mbGV4LS1qdXN0aWZ5LWV2ZW5seXtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtZXZlbmx5fUBrZXlmcmFtZXMgc2NhbGV7MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMC45KTt0cmFuc2Zvcm06c2NhbGUoMC45KTtvcGFjaXR5OjB9NTAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEuMDUpO3RyYW5zZm9ybTpzY2FsZSgxLjA1KTtvcGFjaXR5OjAuOH0xMDAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEpO3RyYW5zZm9ybTpzY2FsZSgxKTtvcGFjaXR5OjF9fUBrZXlmcmFtZXMgc2NhbGV7MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMS45KTt0cmFuc2Zvcm06c2NhbGUoMC45KTtvcGFjaXR5OjB9NTAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEuMDUpO3RyYW5zZm9ybTpzY2FsZSgxLjA1KTtvcGFjaXR5OjAuOH0xMDAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEpO3RyYW5zZm9ybTpzY2FsZSgxKTtvcGFjaXR5OjF9fSp7Ym94LXNpemluZzpib3JkZXItYm94fS50di1jaGlwe2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czoxNnB4O2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7Zm9udC1mYW1pbHk6Um9ib3RvIFNsYWIsIEFyaWFsLCBzZXJpZjtmb250LXNpemU6MTRweDtoZWlnaHQ6MXB4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MzJweDttYXJnaW46MDttaW4taGVpZ2h0OjMycHg7cGFkZGluZzo3cHggMTJweH0uZm9jdXNlZCAudHYtY2hpcHtvdXRsaW5lOm5vbmV9LnR2LWNoaXBzLXJlc3VsdHNfX2l0ZW0tLXNlbGVjdGVkIC50di1jaGlwe2JhY2tncm91bmQtY29sb3I6I2Y4NjYwMDtjb2xvcjojZmZmfVxcblwiLFwiXCJdKSxtb2R1bGUuZXhwb3J0cz1leHBvcnRzfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgYXBpPV9fd2VicGFja19yZXF1aXJlX18oMiksY29udGVudD1fX3dlYnBhY2tfcmVxdWlyZV9fKDE2Nyk7XCJzdHJpbmdcIj09dHlwZW9mKGNvbnRlbnQ9Y29udGVudC5fX2VzTW9kdWxlP2NvbnRlbnQuZGVmYXVsdDpjb250ZW50KSYmKGNvbnRlbnQ9W1ttb2R1bGUuaSxjb250ZW50LFwiXCJdXSk7dmFyIG9wdGlvbnM9e2luc2VydDpcImhlYWRcIixzaW5nbGV0b246ITF9LGV4cG9ydGVkPShhcGkoY29udGVudCxvcHRpb25zKSxjb250ZW50LmxvY2Fscz9jb250ZW50LmxvY2Fsczp7fSk7bW9kdWxlLmV4cG9ydHM9ZXhwb3J0ZWR9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyhleHBvcnRzPV9fd2VicGFja19yZXF1aXJlX18oMykoITEpKS5wdXNoKFttb2R1bGUuaSxcIi5mbGV4e2Rpc3BsYXk6ZmxleH0uZmxleC0tYWxpZ24tc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uZmxleC0tYWxpZ24tZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kfS5mbGV4LS1hbGlnbi1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyfS5mbGV4LS1hbGlnbi1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2h9LmZsZXgtLWFsaWduLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5mbGV4LS1qdXN0aWZ5LXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5mbGV4LS1qdXN0aWZ5LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmZsZXgtLWp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmZsZXgtLWp1c3RpZnktYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmZsZXgtLWp1c3RpZnktYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uZmxleC0tanVzdGlmeS1ldmVubHl7anVzdGlmeS1jb250ZW50OnNwYWNlLWV2ZW5seX1Aa2V5ZnJhbWVzIHNjYWxlezAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDAuOSk7dHJhbnNmb3JtOnNjYWxlKDAuOSk7b3BhY2l0eTowfTUwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxLjA1KTt0cmFuc2Zvcm06c2NhbGUoMS4wNSk7b3BhY2l0eTowLjh9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxKTt0cmFuc2Zvcm06c2NhbGUoMSk7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIHNjYWxlezAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEuOSk7dHJhbnNmb3JtOnNjYWxlKDAuOSk7b3BhY2l0eTowfTUwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxLjA1KTt0cmFuc2Zvcm06c2NhbGUoMS4wNSk7b3BhY2l0eTowLjh9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxKTt0cmFuc2Zvcm06c2NhbGUoMSk7b3BhY2l0eToxfX0qe2JveC1zaXppbmc6Ym9yZGVyLWJveH0udHYtc2VhcmNoYm94e2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXItcmFkaXVzOjJweDtib3JkZXI6MXB4IHNvbGlkICNkN2Q3ZDc7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6aW5saW5lLWZsZXg7Zm9udC1mYW1pbHk6Um9ib3RvLCAnSGVsdmV0aWNhIE5ldWUnLCBzYW5zLXNlcmlmO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoyMHB4O3BhZGRpbmc6OHB4O3RleHQtYWxpZ246bGVmdDt3aWR0aDoxMDAlfS50di1zZWFyY2hib3ggW3R5cGU9J3NlYXJjaCddOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uLC50di1zZWFyY2hib3ggW3R5cGU9J3NlYXJjaCddOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLC50di1zZWFyY2hib3ggW3R5cGU9J3NlYXJjaCddOjotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWJ1dHRvbiwudHYtc2VhcmNoYm94IFt0eXBlPSdzZWFyY2gnXTo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfS50di1zZWFyY2hib3ggLnR2LWljb24tc2VhcmNoe2ZpbGw6IzBhMzg0N30udHYtc2VhcmNoYm94X19zZWFyY2hmaWVsZHtib3JkZXI6MDtmbGV4OjE7Zm9udC1zaXplOjE2cHg7bWFyZ2luLWxlZnQ6MjBweDtvdXRsaW5lOjB9LnR2LXNlYXJjaGJveF9fc2VhcmNoZmllbGQ6OnBsYWNlaG9sZGVye2NvbG9yOiM2NjY7Zm9udC1zaXplOjE0cHh9LnR2LXNlYXJjaGJveF9fY2xlYXItc2VhcmNoe2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MDtkaXNwbGF5Om5vbmU7b3V0bGluZTowfS50di1zZWFyY2hib3hfX2NsZWFyLXNlYXJjaCAudHYtaWNvbi1jcm9zcy1jaXJjbGV7ZmlsbDojMGEzODQ3fS50di1zZWFyY2hib3hfX2NsZWFyLXNlYXJjaC0tc2hvd3tkaXNwbGF5OmlubGluZS1ibG9ja31cXG5cIixcIlwiXSksbW9kdWxlLmV4cG9ydHM9ZXhwb3J0c30sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7dmFyIGFwaT1fX3dlYnBhY2tfcmVxdWlyZV9fKDIpLGNvbnRlbnQ9X193ZWJwYWNrX3JlcXVpcmVfXygxNjkpO1wic3RyaW5nXCI9PXR5cGVvZihjb250ZW50PWNvbnRlbnQuX19lc01vZHVsZT9jb250ZW50LmRlZmF1bHQ6Y29udGVudCkmJihjb250ZW50PVtbbW9kdWxlLmksY29udGVudCxcIlwiXV0pO3ZhciBvcHRpb25zPXtpbnNlcnQ6XCJoZWFkXCIsc2luZ2xldG9uOiExfSxleHBvcnRlZD0oYXBpKGNvbnRlbnQsb3B0aW9ucyksY29udGVudC5sb2NhbHM/Y29udGVudC5sb2NhbHM6e30pO21vZHVsZS5leHBvcnRzPWV4cG9ydGVkfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsoZXhwb3J0cz1fX3dlYnBhY2tfcmVxdWlyZV9fKDMpKCExKSkucHVzaChbbW9kdWxlLmksXCIuZmxleHtkaXNwbGF5OmZsZXh9LmZsZXgtLWFsaWduLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmZsZXgtLWFsaWduLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZH0uZmxleC0tYWxpZ24tY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlcn0uZmxleC0tYWxpZ24tc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNofS5mbGV4LS1hbGlnbi1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZX0uZmxleC0tanVzdGlmeS1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uZmxleC0tanVzdGlmeS1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5mbGV4LS1qdXN0aWZ5LWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5mbGV4LS1qdXN0aWZ5LWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5mbGV4LS1qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LmZsZXgtLWp1c3RpZnktZXZlbmx5e2p1c3RpZnktY29udGVudDpzcGFjZS1ldmVubHl9QGtleWZyYW1lcyBzY2FsZXswJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgwLjkpO3RyYW5zZm9ybTpzY2FsZSgwLjkpO29wYWNpdHk6MH01MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMS4wNSk7dHJhbnNmb3JtOnNjYWxlKDEuMDUpO29wYWNpdHk6MC44fTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MX19QGtleWZyYW1lcyBzY2FsZXswJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxLjkpO3RyYW5zZm9ybTpzY2FsZSgwLjkpO29wYWNpdHk6MH01MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMS4wNSk7dHJhbnNmb3JtOnNjYWxlKDEuMDUpO29wYWNpdHk6MC44fTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MX19Kntib3gtc2l6aW5nOmJvcmRlci1ib3h9LmNvbnRlbnQtdG9nZ2xle292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0uY29udGVudC10b2dnbGVfX2xpbmt7d2hpdGUtc3BhY2U6bm93cmFwO3BhZGRpbmctbGVmdDo0ZW07Y29sb3I6I2Y4NjYwMDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7cG9zaXRpb246YWJzb2x1dGU7dGV4dC1hbGlnbjpyaWdodH0uY29udGVudC10b2dnbGVfX2xpbms6aG92ZXJ7Y29sb3I6I2Y4NjYwMDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5jb250ZW50LXRvZ2dsZV9fbGluazpmb2N1c3tjb2xvcjojZjg2NjAwfS5jb250ZW50LXRvZ2dsZV9fbGluay0tZXhwYW5kZWR7ZGlzcGxheTpibG9jazt0ZXh0LWFsaWduOmxlZnQ7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZy1sZWZ0OjB9LmNvbnRlbnQtdG9nZ2xlX19saW5rLS1tdWx0aS1saW5le2xpbmUtaGVpZ2h0OmluaGVyaXR9LmNvbnRlbnQtdG9nZ2xlX19saW5rLS1wcmltYXJ5e2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwyNTUsMjU1LDApLCAjZmZmIDRlbSl9LmNvbnRlbnQtdG9nZ2xlX19saW5rLS1wcmltYXJ5LmNvbnRlbnQtdG9nZ2xlX19saW5rLS1leHBhbmRlZHtiYWNrZ3JvdW5kOiNmZmZ9LmNvbnRlbnQtdG9nZ2xlX19saW5rLS1zZWNvbmRhcnl7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LDI1NSwyNTUsMCksICNmOGY1ZjIgNGVtKX0uY29udGVudC10b2dnbGVfX2xpbmstLXNlY29uZGFyeS5jb250ZW50LXRvZ2dsZV9fbGluay0tZXhwYW5kZWR7YmFja2dyb3VuZDojZjhmNWYyfS5jb250ZW50LXRvZ2dsZS0tbGFzdC1sZXR0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNvbnRlbnQtdG9nZ2xlLS1leHBhbmRlZHt3aGl0ZS1zcGFjZTppbml0aWFsfS5jb250ZW50LXRvZ2dsZS0tc2luZ2xlLWxpbmV7aGVpZ2h0OjEuNWVtfVxcblwiLFwiXCJdKSxtb2R1bGUuZXhwb3J0cz1leHBvcnRzfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgYXBpPV9fd2VicGFja19yZXF1aXJlX18oMiksY29udGVudD1fX3dlYnBhY2tfcmVxdWlyZV9fKDE3MSk7XCJzdHJpbmdcIj09dHlwZW9mKGNvbnRlbnQ9Y29udGVudC5fX2VzTW9kdWxlP2NvbnRlbnQuZGVmYXVsdDpjb250ZW50KSYmKGNvbnRlbnQ9W1ttb2R1bGUuaSxjb250ZW50LFwiXCJdXSk7dmFyIG9wdGlvbnM9e2luc2VydDpcImhlYWRcIixzaW5nbGV0b246ITF9LGV4cG9ydGVkPShhcGkoY29udGVudCxvcHRpb25zKSxjb250ZW50LmxvY2Fscz9jb250ZW50LmxvY2Fsczp7fSk7bW9kdWxlLmV4cG9ydHM9ZXhwb3J0ZWR9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyhleHBvcnRzPV9fd2VicGFja19yZXF1aXJlX18oMykoITEpKS5wdXNoKFttb2R1bGUuaSxcIi5mbGV4e2Rpc3BsYXk6ZmxleH0uZmxleC0tYWxpZ24tc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uZmxleC0tYWxpZ24tZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kfS5mbGV4LS1hbGlnbi1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyfS5mbGV4LS1hbGlnbi1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2h9LmZsZXgtLWFsaWduLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5mbGV4LS1qdXN0aWZ5LXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5mbGV4LS1qdXN0aWZ5LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmZsZXgtLWp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmZsZXgtLWp1c3RpZnktYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmZsZXgtLWp1c3RpZnktYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uZmxleC0tanVzdGlmeS1ldmVubHl7anVzdGlmeS1jb250ZW50OnNwYWNlLWV2ZW5seX1Aa2V5ZnJhbWVzIHNjYWxlezAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDAuOSk7dHJhbnNmb3JtOnNjYWxlKDAuOSk7b3BhY2l0eTowfTUwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxLjA1KTt0cmFuc2Zvcm06c2NhbGUoMS4wNSk7b3BhY2l0eTowLjh9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxKTt0cmFuc2Zvcm06c2NhbGUoMSk7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIHNjYWxlezAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEuOSk7dHJhbnNmb3JtOnNjYWxlKDAuOSk7b3BhY2l0eTowfTUwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxLjA1KTt0cmFuc2Zvcm06c2NhbGUoMS4wNSk7b3BhY2l0eTowLjh9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxKTt0cmFuc2Zvcm06c2NhbGUoMSk7b3BhY2l0eToxfX0qe2JveC1zaXppbmc6Ym9yZGVyLWJveH0uY29va2llLXNldHRpbmdze2ZvbnQtc2l6ZTowLjc1cmVtO21hcmdpbi1ib3R0b206MXJlbX1AbWVkaWEgKG1pbi13aWR0aDogMTAwNHB4KXsuY29va2llLXNldHRpbmdze2ZvbnQtc2l6ZTowLjg3NXJlbX19LmNvb2tpZS1zZXR0aW5nc19fY2FyZHN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1AbWVkaWEgKG1pbi13aWR0aDogMTAwNHB4KXsuY29va2llLXNldHRpbmdzX19jYXJkc3tmbGV4LWRpcmVjdGlvbjpyb3d9fS5jb29raWUtc2V0dGluZ3NfX2NhcmR7ZmxleDoxO2JvcmRlcjoxcHggc29saWQgI2Q3ZDdkNztwYWRkaW5nOjAuNzVyZW07Y3Vyc29yOnBvaW50ZXJ9LmNvb2tpZS1zZXR0aW5nc19fY2FyZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNmY2ZjZ9LmNvb2tpZS1zZXR0aW5nc19fY2FyZDpmaXJzdC1jaGlsZHttYXJnaW4tYm90dG9tOjAuNXJlbX1AbWVkaWEgKG1pbi13aWR0aDogMTAwNHB4KXsuY29va2llLXNldHRpbmdzX19jYXJkOmZpcnN0LWNoaWxke21hcmdpbjowIDJyZW0gMCAwfX0uY29va2llLXNldHRpbmdzX19jYXJkLWRlc2N7bWFyZ2luOjAgIWltcG9ydGFudH0uY29va2llLXNldHRpbmdzIC5yYWRpb3tmb250LXdlaWdodDpib2xkO2hlaWdodDoxLjVyZW19QG1lZGlhIChtaW4td2lkdGg6IDEwMDRweCl7LmNvb2tpZS1zZXR0aW5ncyAucmFkaW97Zm9udC1zaXplOjAuODc1cmVtfX1fOi1tcy1mdWxsc2NyZWVuIC5jb29raWUtc2V0dGluZ3NfX2NhcmQsOnJvb3QgLmNvb2tpZS1zZXR0aW5nc19fY2FyZHtmbGV4OjEgMCBhdXRvfUBtZWRpYSAobWluLXdpZHRoOiAxMDA0cHgpe186LW1zLWZ1bGxzY3JlZW4gLmNvb2tpZS1zZXR0aW5nc19fY2FyZCw6cm9vdCAuY29va2llLXNldHRpbmdzX19jYXJke2ZsZXg6MX19XFxuXCIsXCJcIl0pLG1vZHVsZS5leHBvcnRzPWV4cG9ydHN9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBhcGk9X193ZWJwYWNrX3JlcXVpcmVfXygyKSxjb250ZW50PV9fd2VicGFja19yZXF1aXJlX18oMTczKTtcInN0cmluZ1wiPT10eXBlb2YoY29udGVudD1jb250ZW50Ll9fZXNNb2R1bGU/Y29udGVudC5kZWZhdWx0OmNvbnRlbnQpJiYoY29udGVudD1bW21vZHVsZS5pLGNvbnRlbnQsXCJcIl1dKTt2YXIgb3B0aW9ucz17aW5zZXJ0OlwiaGVhZFwiLHNpbmdsZXRvbjohMX0sZXhwb3J0ZWQ9KGFwaShjb250ZW50LG9wdGlvbnMpLGNvbnRlbnQubG9jYWxzP2NvbnRlbnQubG9jYWxzOnt9KTttb2R1bGUuZXhwb3J0cz1leHBvcnRlZH0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7KGV4cG9ydHM9X193ZWJwYWNrX3JlcXVpcmVfXygzKSghMSkpLnB1c2goW21vZHVsZS5pLFwiLmZsZXh7ZGlzcGxheTpmbGV4fS5mbGV4LS1hbGlnbi1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5mbGV4LS1hbGlnbi1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmR9LmZsZXgtLWFsaWduLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXJ9LmZsZXgtLWFsaWduLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaH0uZmxleC0tYWxpZ24tYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmV9LmZsZXgtLWp1c3RpZnktc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmZsZXgtLWp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZmxleC0tanVzdGlmeS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uZmxleC0tanVzdGlmeS1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uZmxleC0tanVzdGlmeS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5mbGV4LS1qdXN0aWZ5LWV2ZW5seXtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtZXZlbmx5fUBrZXlmcmFtZXMgc2NhbGV7MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMC45KTt0cmFuc2Zvcm06c2NhbGUoMC45KTtvcGFjaXR5OjB9NTAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEuMDUpO3RyYW5zZm9ybTpzY2FsZSgxLjA1KTtvcGFjaXR5OjAuOH0xMDAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEpO3RyYW5zZm9ybTpzY2FsZSgxKTtvcGFjaXR5OjF9fUBrZXlmcmFtZXMgc2NhbGV7MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMS45KTt0cmFuc2Zvcm06c2NhbGUoMC45KTtvcGFjaXR5OjB9NTAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEuMDUpO3RyYW5zZm9ybTpzY2FsZSgxLjA1KTtvcGFjaXR5OjAuOH0xMDAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEpO3RyYW5zZm9ybTpzY2FsZSgxKTtvcGFjaXR5OjF9fSp7Ym94LXNpemluZzpib3JkZXItYm94fS5yYWRpb3tkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmV9LnJhZGlvX190aXRsZXtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MnB4IDAgMCAycmVtfS5yYWRpb19faW5wdXR7aGVpZ2h0OjFyZW07bGVmdDowO29wYWNpdHk6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxcmVtfS5yYWRpb19faW5wdXQrLnJhZGlvX190aXRsZTpiZWZvcmV7Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyOjFweCBzb2xpZCAjZTllOWU5O2NvbnRlbnQ6Jyc7aGVpZ2h0OjFyZW07bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjFyZW19LnJhZGlvX19pbnB1dCsucmFkaW9fX3RpdGxlOmFmdGVye2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjo1cHggc29saWQgI2Y4NjYwMDtjb250ZW50OicnO2xlZnQ6NHB4O29wYWNpdHk6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NHB4O3RyYW5zaXRpb246b3BhY2l0eSAwLjJzIGVhc2UtaW4tb3V0fS5yYWRpb19faW5wdXQ6Y2hlY2tlZCsucmFkaW9fX3RpdGxlOmFmdGVye29wYWNpdHk6MX0ucmFkaW9fX2lucHV0OmZvY3VzKy5yYWRpb19fdGl0bGU6YmVmb3Jle2JveC1zaGFkb3c6MCAwIDAgMXB4ICNmODY2MDA7b3V0bGluZToxcHggc29saWQgdHJhbnNwYXJlbnR9XFxuXCIsXCJcIl0pLG1vZHVsZS5leHBvcnRzPWV4cG9ydHN9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBhcGk9X193ZWJwYWNrX3JlcXVpcmVfXygyKSxjb250ZW50PV9fd2VicGFja19yZXF1aXJlX18oMTc1KTtcInN0cmluZ1wiPT10eXBlb2YoY29udGVudD1jb250ZW50Ll9fZXNNb2R1bGU/Y29udGVudC5kZWZhdWx0OmNvbnRlbnQpJiYoY29udGVudD1bW21vZHVsZS5pLGNvbnRlbnQsXCJcIl1dKTt2YXIgb3B0aW9ucz17aW5zZXJ0OlwiaGVhZFwiLHNpbmdsZXRvbjohMX0sZXhwb3J0ZWQ9KGFwaShjb250ZW50LG9wdGlvbnMpLGNvbnRlbnQubG9jYWxzP2NvbnRlbnQubG9jYWxzOnt9KTttb2R1bGUuZXhwb3J0cz1leHBvcnRlZH0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7KGV4cG9ydHM9X193ZWJwYWNrX3JlcXVpcmVfXygzKSghMSkpLnB1c2goW21vZHVsZS5pLCcuZmxleHtkaXNwbGF5OmZsZXh9LmZsZXgtLWFsaWduLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmZsZXgtLWFsaWduLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZH0uZmxleC0tYWxpZ24tY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlcn0uZmxleC0tYWxpZ24tc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNofS5mbGV4LS1hbGlnbi1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZX0uZmxleC0tanVzdGlmeS1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uZmxleC0tanVzdGlmeS1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5mbGV4LS1qdXN0aWZ5LWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5mbGV4LS1qdXN0aWZ5LWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5mbGV4LS1qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LmZsZXgtLWp1c3RpZnktZXZlbmx5e2p1c3RpZnktY29udGVudDpzcGFjZS1ldmVubHl9QGtleWZyYW1lcyBzY2FsZXswJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgwLjkpO3RyYW5zZm9ybTpzY2FsZSgwLjkpO29wYWNpdHk6MH01MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMS4wNSk7dHJhbnNmb3JtOnNjYWxlKDEuMDUpO29wYWNpdHk6MC44fTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MX19QGtleWZyYW1lcyBzY2FsZXswJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxLjkpO3RyYW5zZm9ybTpzY2FsZSgwLjkpO29wYWNpdHk6MH01MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMS4wNSk7dHJhbnNmb3JtOnNjYWxlKDEuMDUpO29wYWNpdHk6MC44fTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MX19Kntib3gtc2l6aW5nOmJvcmRlci1ib3h9QGZvbnQtZmFjZXtmb250LWZhbWlseTpcXCdUYWtlYXdheSBTYW5zIFJlZ3VsYXJcXCc7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6NDAwO3NyYzp1cmwoXCIvL2Fzc2V0cy50YWtlYXdheS5jb20vZm9udHMvdGFrZWF3YXktc2Fucy90YWtlYXdheS1zYW5zLXJlZ3VsYXIuZW90XCIpO3NyYzpsb2NhbChcIlRha2Vhd2F5IFNhbnMgUmVndWxhclwiKSx1cmwoXCIvL2Fzc2V0cy50YWtlYXdheS5jb20vZm9udHMvdGFrZWF3YXktc2Fucy90YWtlYXdheS1zYW5zLXJlZ3VsYXIuZW90PyNpZWZpeFwiKSBmb3JtYXQoXCJlbWJlZGRlZC1vcGVudHlwZVwiKSx1cmwoXCIvL2Fzc2V0cy50YWtlYXdheS5jb20vZm9udHMvdGFrZWF3YXktc2Fucy90YWtlYXdheS1zYW5zLXJlZ3VsYXIud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksdXJsKFwiLy9hc3NldHMudGFrZWF3YXkuY29tL2ZvbnRzL3Rha2Vhd2F5LXNhbnMvdGFrZWF3YXktc2Fucy1yZWd1bGFyLndvZmZcIikgZm9ybWF0KFwid29mZlwiKSx1cmwoXCIvL2Fzc2V0cy50YWtlYXdheS5jb20vZm9udHMvdGFrZWF3YXktc2Fucy90YWtlYXdheS1zYW5zLXJlZ3VsYXIudHRmXCIpIGZvcm1hdChcInRydWV0eXBlXCIpfS5jYy1iYW5uZXJ7d2lkdGg6MTAwJTtwb3NpdGlvbjpmaXhlZDtib3R0b206MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDo5OTk5OTl9LmNjLWJhbm5lciAqLC5jYy1iYW5uZXIgKjphZnRlciwuY2MtYmFubmVyICo6YmVmb3Jle2JveC1zaXppbmc6aW5oZXJpdDttYXJnaW46MDtwYWRkaW5nOjB9LmNjLWJhbm5lciAqOmZvY3Vze291dGxpbmU6bm9uZX0uY2MtYmFubmVyX19jb250YWluZXJ7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6IzBhMzg0Nztib3R0b206MDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uY2MtYmFubmVyX193cmFwcGVye2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttYXJnaW46MjBweCAxNXB4O21heC13aWR0aDo0NDBweDt3aWR0aDoxMDAlfUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAwNHB4KXsuY2MtYmFubmVyX193cmFwcGVye21heC13aWR0aDo2MDBweDttYXJnaW46NDVweCAwfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEyODBweCl7LmNjLWJhbm5lcl9fd3JhcHBlcnttYXgtd2lkdGg6NjMwcHh9fS5jYy1iYW5uZXJfX2J1dHRvbnN7ZGlzcGxheTpmbGV4O21hcmdpbi10b3A6MTZweDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMDRweCl7LmNjLWJhbm5lcl9fYnV0dG9uc3tmbGV4LWRpcmVjdGlvbjpyb3d9fS5jYy1iYW5uZXJfX3RleHR7Zm9udC1mYW1pbHk6XFwnVGFrZWF3YXkgU2FucyBSZWd1bGFyXFwnLCBcXCdBdmFudCBHYXJkZVxcJywgXFwnQ2VudHVyeSBHb3RoaWNcXCcsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiNmZmY7d2lkdGg6MTAwJTtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4O21hcmdpbi1yaWdodDowO3RleHQtYWxpZ246bGVmdH0uY2MtYmFubmVyX19saW5re2NvbG9yOiNmODY2MDA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5jYy1iYW5uZXJfX2xpbms6YWN0aXZlLC5jYy1iYW5uZXJfX2xpbms6Zm9jdXMsLmNjLWJhbm5lcl9fbGluazpob3Zlcntjb2xvcjojZjg2NjAwfS5jYy1iYW5uZXJfX2xpbms6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uY2MtYmFubmVyX19idG57Ym9yZGVyLXJhZGl1czoycHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6Ym9sZDtoZWlnaHQ6NDBweDttYXJnaW4tdG9wOjhweDt3aWR0aDoxMDAlO2JvcmRlcjoxcHggc29saWR9QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDA0cHgpey5jYy1iYW5uZXJfX2J0bntmbGV4OjEgMCAxODBweDttYXJnaW46MCAxNnB4IDAgMDttYXgtd2lkdGg6MTgwcHh9fS5jYy1iYW5uZXJfX2J0bi1va3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzE0NmVlYjtib3JkZXItY29sb3I6I2ZmZn0uY2MtYmFubmVyX19idG4tb2s6aG92ZXIsLmNjLWJhbm5lcl9fYnRuLW9rOmZvY3Vze2JvcmRlci1jb2xvcjojMTQ2ZWVifS5jYy1iYW5uZXJfX2J0bi1lc3NlbnRpYWx7YmFja2dyb3VuZC1jb2xvcjojMGEzODQ3O2NvbG9yOiNmZmZ9LmNjLWJhbm5lcl9fYnRuLWVzc2VudGlhbDpob3ZlciwuY2MtYmFubmVyX19idG4tZXNzZW50aWFsOmZvY3Vze2JvcmRlci1jb2xvcjojMTQ2ZWVifVxcbicsXCJcIl0pLG1vZHVsZS5leHBvcnRzPWV4cG9ydHN9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe1widXNlIHN0cmljdFwiO3ZhciBSZWFjdFByb3BUeXBlc1NlY3JldD1fX3dlYnBhY2tfcmVxdWlyZV9fKDE3Nyk7ZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpe31mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0KCl7fWVtcHR5RnVuY3Rpb25XaXRoUmVzZXQucmVzZXRXYXJuaW5nQ2FjaGU9ZW1wdHlGdW5jdGlvbixtb2R1bGUuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIHNoaW0ocHJvcHMscHJvcE5hbWUsY29tcG9uZW50TmFtZSxsb2NhdGlvbixwcm9wRnVsbE5hbWUsc2VjcmV0KXtpZihzZWNyZXQhPT1SZWFjdFByb3BUeXBlc1NlY3JldCl7dmFyIGVycj1uZXcgRXJyb3IoXCJDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiBVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiBSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzXCIpO3Rocm93IGVyci5uYW1lPVwiSW52YXJpYW50IFZpb2xhdGlvblwiLGVycn19ZnVuY3Rpb24gZ2V0U2hpbSgpe3JldHVybiBzaGltfXNoaW0uaXNSZXF1aXJlZD1zaGltO3ZhciBSZWFjdFByb3BUeXBlcz17YXJyYXk6c2hpbSxib29sOnNoaW0sZnVuYzpzaGltLG51bWJlcjpzaGltLG9iamVjdDpzaGltLHN0cmluZzpzaGltLHN5bWJvbDpzaGltLGFueTpzaGltLGFycmF5T2Y6Z2V0U2hpbSxlbGVtZW50OnNoaW0sZWxlbWVudFR5cGU6c2hpbSxpbnN0YW5jZU9mOmdldFNoaW0sbm9kZTpzaGltLG9iamVjdE9mOmdldFNoaW0sb25lT2Y6Z2V0U2hpbSxvbmVPZlR5cGU6Z2V0U2hpbSxzaGFwZTpnZXRTaGltLGV4YWN0OmdldFNoaW0sY2hlY2tQcm9wVHlwZXM6ZW1wdHlGdW5jdGlvbldpdGhSZXNldCxyZXNldFdhcm5pbmdDYWNoZTplbXB0eUZ1bmN0aW9ufTtyZXR1cm4gUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzPVJlYWN0UHJvcFR5cGVzLFJlYWN0UHJvcFR5cGVzfX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7XCJ1c2Ugc3RyaWN0XCI7bW9kdWxlLmV4cG9ydHM9XCJTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRFwifSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgYXBpPV9fd2VicGFja19yZXF1aXJlX18oMiksY29udGVudD1fX3dlYnBhY2tfcmVxdWlyZV9fKDE3OSk7XCJzdHJpbmdcIj09dHlwZW9mKGNvbnRlbnQ9Y29udGVudC5fX2VzTW9kdWxlP2NvbnRlbnQuZGVmYXVsdDpjb250ZW50KSYmKGNvbnRlbnQ9W1ttb2R1bGUuaSxjb250ZW50LFwiXCJdXSk7dmFyIG9wdGlvbnM9e2luc2VydDpcImhlYWRcIixzaW5nbGV0b246ITF9LGV4cG9ydGVkPShhcGkoY29udGVudCxvcHRpb25zKSxjb250ZW50LmxvY2Fscz9jb250ZW50LmxvY2Fsczp7fSk7bW9kdWxlLmV4cG9ydHM9ZXhwb3J0ZWR9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyhleHBvcnRzPV9fd2VicGFja19yZXF1aXJlX18oMykoITEpKS5wdXNoKFttb2R1bGUuaSwnLmZsZXh7ZGlzcGxheTpmbGV4fS5mbGV4LS1hbGlnbi1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5mbGV4LS1hbGlnbi1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmR9LmZsZXgtLWFsaWduLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXJ9LmZsZXgtLWFsaWduLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaH0uZmxleC0tYWxpZ24tYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmV9LmZsZXgtLWp1c3RpZnktc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmZsZXgtLWp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZmxleC0tanVzdGlmeS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uZmxleC0tanVzdGlmeS1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uZmxleC0tanVzdGlmeS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5mbGV4LS1qdXN0aWZ5LWV2ZW5seXtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtZXZlbmx5fUBrZXlmcmFtZXMgc2NhbGV7MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMC45KTt0cmFuc2Zvcm06c2NhbGUoMC45KTtvcGFjaXR5OjB9NTAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEuMDUpO3RyYW5zZm9ybTpzY2FsZSgxLjA1KTtvcGFjaXR5OjAuOH0xMDAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEpO3RyYW5zZm9ybTpzY2FsZSgxKTtvcGFjaXR5OjF9fUBrZXlmcmFtZXMgc2NhbGV7MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMS45KTt0cmFuc2Zvcm06c2NhbGUoMC45KTtvcGFjaXR5OjB9NTAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEuMDUpO3RyYW5zZm9ybTpzY2FsZSgxLjA1KTtvcGFjaXR5OjAuOH0xMDAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEpO3RyYW5zZm9ybTpzY2FsZSgxKTtvcGFjaXR5OjF9fSp7Ym94LXNpemluZzpib3JkZXItYm94fUBmb250LWZhY2V7Zm9udC1mYW1pbHk6XFwnVGFrZWF3YXkgU2FucyBSZWd1bGFyXFwnO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjQwMDtzcmM6dXJsKFwiLy9hc3NldHMudGFrZWF3YXkuY29tL2ZvbnRzL3Rha2Vhd2F5LXNhbnMvdGFrZWF3YXktc2Fucy1yZWd1bGFyLmVvdFwiKTtzcmM6bG9jYWwoXCJUYWtlYXdheSBTYW5zIFJlZ3VsYXJcIiksdXJsKFwiLy9hc3NldHMudGFrZWF3YXkuY29tL2ZvbnRzL3Rha2Vhd2F5LXNhbnMvdGFrZWF3YXktc2Fucy1yZWd1bGFyLmVvdD8jaWVmaXhcIikgZm9ybWF0KFwiZW1iZWRkZWQtb3BlbnR5cGVcIiksdXJsKFwiLy9hc3NldHMudGFrZWF3YXkuY29tL2ZvbnRzL3Rha2Vhd2F5LXNhbnMvdGFrZWF3YXktc2Fucy1yZWd1bGFyLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLHVybChcIi8vYXNzZXRzLnRha2Vhd2F5LmNvbS9mb250cy90YWtlYXdheS1zYW5zL3Rha2Vhd2F5LXNhbnMtcmVndWxhci53b2ZmXCIpIGZvcm1hdChcIndvZmZcIiksdXJsKFwiLy9hc3NldHMudGFrZWF3YXkuY29tL2ZvbnRzL3Rha2Vhd2F5LXNhbnMvdGFrZWF3YXktc2Fucy1yZWd1bGFyLnR0ZlwiKSBmb3JtYXQoXCJ0cnVldHlwZVwiKX0uY2MtYmFubmVyLWdyYW51bGFye3dpZHRoOjEwMCU7cG9zaXRpb246Zml4ZWQ7Ym90dG9tOjA7Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6OTk5OTk5O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleDoxfS5jYy1iYW5uZXItZ3JhbnVsYXIgKiwuY2MtYmFubmVyLWdyYW51bGFyICo6YWZ0ZXIsLmNjLWJhbm5lci1ncmFudWxhciAqOmJlZm9yZXtib3gtc2l6aW5nOmluaGVyaXQ7bWFyZ2luOjA7cGFkZGluZzowfS5jYy1iYW5uZXItZ3JhbnVsYXIgKjpmb2N1c3tvdXRsaW5lOm5vbmV9LmNjLWJhbm5lci1ncmFudWxhcl9fYmFja2dyb3VuZHtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMC43NSk7ei1pbmRleDoxMDAwO3Bvc2l0aW9uOmZpeGVkO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfS5jYy1iYW5uZXItZ3JhbnVsYXJfX2NvbnRhaW5lcnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDojMGEzODQ3O2JvdHRvbTowO2Rpc3BsYXk6ZmxleDt6LWluZGV4OjEwMDE7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uY2MtYmFubmVyLWdyYW51bGFyX193cmFwcGVye2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttYXJnaW46MjBweCAxNXB4O21heC13aWR0aDo0NDBweDt3aWR0aDoxMDAlfUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAwNHB4KXsuY2MtYmFubmVyLWdyYW51bGFyX193cmFwcGVye21heC13aWR0aDo2MDBweDttYXJnaW46NDVweCAwfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEyODBweCl7LmNjLWJhbm5lci1ncmFudWxhcl9fd3JhcHBlcnttYXgtd2lkdGg6MTAyNHB4fX0uY2MtYmFubmVyLWdyYW51bGFyX19idXR0b25ze2Rpc3BsYXk6ZmxleDttYXJnaW4tdG9wOjE2cHg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCV9QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDA0cHgpey5jYy1iYW5uZXItZ3JhbnVsYXJfX2J1dHRvbnN7ZmxleC1kaXJlY3Rpb246cm93fX0uY2MtYmFubmVyLWdyYW51bGFyX190ZXh0e2ZvbnQtZmFtaWx5OlxcJ1Rha2Vhd2F5IFNhbnMgUmVndWxhclxcJywgXFwnQXZhbnQgR2FyZGVcXCcsIFxcJ0NlbnR1cnkgR290aGljXFwnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojZmZmO3dpZHRoOjEwMCU7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweDttYXJnaW4tcmlnaHQ6MDt0ZXh0LWFsaWduOmxlZnR9LmNjLWJhbm5lci1ncmFudWxhcl9fbGlua3tjb2xvcjojZjg2NjAwO3RleHQtZGVjb3JhdGlvbjpub25lO3doaXRlLXNwYWNlOm5vd3JhcH0uY2MtYmFubmVyLWdyYW51bGFyX19saW5rOmFjdGl2ZSwuY2MtYmFubmVyLWdyYW51bGFyX19saW5rOmZvY3VzLC5jYy1iYW5uZXItZ3JhbnVsYXJfX2xpbms6aG92ZXJ7Y29sb3I6I2Y4NjYwMH0uY2MtYmFubmVyLWdyYW51bGFyX19saW5rOmhvdmVye3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmNjLWJhbm5lci1ncmFudWxhcl9fYnRue2JvcmRlci1yYWRpdXM6MnB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OmJvbGQ7aGVpZ2h0OjQwcHg7bWFyZ2luLXRvcDo4cHg7d2lkdGg6MTAwJTtib3JkZXI6MXB4IHNvbGlkfUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAwNHB4KXsuY2MtYmFubmVyLWdyYW51bGFyX19idG57ZmxleDoxIDAgMTgwcHg7bWFyZ2luOjAgMTZweCAwIDA7bWF4LXdpZHRoOjE4MHB4fX0uY2MtYmFubmVyLWdyYW51bGFyX19idG4tb2t7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMxNDZlZWI7Ym9yZGVyLWNvbG9yOiNmZmZ9LmNjLWJhbm5lci1ncmFudWxhcl9fYnRuLW9rOmhvdmVyLC5jYy1iYW5uZXItZ3JhbnVsYXJfX2J0bi1vazpmb2N1c3tib3JkZXItY29sb3I6IzE0NmVlYn0uY2MtYmFubmVyLWdyYW51bGFyX19idG4tZXNzZW50aWFse2JhY2tncm91bmQtY29sb3I6IzBhMzg0Nztjb2xvcjojZmZmfS5jYy1iYW5uZXItZ3JhbnVsYXJfX2J0bi1lc3NlbnRpYWw6aG92ZXIsLmNjLWJhbm5lci1ncmFudWxhcl9fYnRuLWVzc2VudGlhbDpmb2N1c3tib3JkZXItY29sb3I6IzE0NmVlYn0uY2MtYmFubmVyLWdyYW51bGFyX19oZWFkZXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZsZXg6MTt3aWR0aDoxMDAlfS5jYy1iYW5uZXItZ3JhbnVsYXJfX2hlYWRlci10aXRsZXtjb2xvcjojZmZmfS5jYy1iYW5uZXItZ3JhbnVsYXJfX2hlYWRlci1sYW5ndWFnZS1waWNrZXJ7Y29sb3I6I2ZmZjt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LmNjLWJhbm5lci1ncmFudWxhcl9faGVhZGVyLWxhbmd1YWdlLXBpY2tlci1saW5re2NvbG9yOiNmZmZ9LmNjLWJhbm5lci1ncmFudWxhcl9faGVhZGVyLWxhbmd1YWdlLXBpY2tlci1saW5rLmFjdGl2ZXtmb250LXdlaWdodDpib2xkfVxcbicsXCJcIl0pLG1vZHVsZS5leHBvcnRzPWV4cG9ydHN9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe3ZhciBhcGk9X193ZWJwYWNrX3JlcXVpcmVfXygyKSxjb250ZW50PV9fd2VicGFja19yZXF1aXJlX18oMTgxKTtcInN0cmluZ1wiPT10eXBlb2YoY29udGVudD1jb250ZW50Ll9fZXNNb2R1bGU/Y29udGVudC5kZWZhdWx0OmNvbnRlbnQpJiYoY29udGVudD1bW21vZHVsZS5pLGNvbnRlbnQsXCJcIl1dKTt2YXIgb3B0aW9ucz17aW5zZXJ0OlwiaGVhZFwiLHNpbmdsZXRvbjohMX0sZXhwb3J0ZWQ9KGFwaShjb250ZW50LG9wdGlvbnMpLGNvbnRlbnQubG9jYWxzP2NvbnRlbnQubG9jYWxzOnt9KTttb2R1bGUuZXhwb3J0cz1leHBvcnRlZH0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7KGV4cG9ydHM9X193ZWJwYWNrX3JlcXVpcmVfXygzKSghMSkpLnB1c2goW21vZHVsZS5pLFwiLmZsZXh7ZGlzcGxheTpmbGV4fS5mbGV4LS1hbGlnbi1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5mbGV4LS1hbGlnbi1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmR9LmZsZXgtLWFsaWduLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXJ9LmZsZXgtLWFsaWduLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaH0uZmxleC0tYWxpZ24tYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmV9LmZsZXgtLWp1c3RpZnktc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmZsZXgtLWp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZmxleC0tanVzdGlmeS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uZmxleC0tanVzdGlmeS1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uZmxleC0tanVzdGlmeS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5mbGV4LS1qdXN0aWZ5LWV2ZW5seXtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtZXZlbmx5fUBrZXlmcmFtZXMgc2NhbGV7MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMC45KTt0cmFuc2Zvcm06c2NhbGUoMC45KTtvcGFjaXR5OjB9NTAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEuMDUpO3RyYW5zZm9ybTpzY2FsZSgxLjA1KTtvcGFjaXR5OjAuOH0xMDAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEpO3RyYW5zZm9ybTpzY2FsZSgxKTtvcGFjaXR5OjF9fUBrZXlmcmFtZXMgc2NhbGV7MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMS45KTt0cmFuc2Zvcm06c2NhbGUoMC45KTtvcGFjaXR5OjB9NTAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEuMDUpO3RyYW5zZm9ybTpzY2FsZSgxLjA1KTtvcGFjaXR5OjAuOH0xMDAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEpO3RyYW5zZm9ybTpzY2FsZSgxKTtvcGFjaXR5OjF9fSp7Ym94LXNpemluZzpib3JkZXItYm94fS5jb29raWUtc2V0dGluZ3MtZ3JhbnVsYXItcG9wdXB7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDAuNzUpO2JvdHRvbTowO2hlaWdodDoxMDAlO2xlZnQ6MDtvcGFjaXR5OjE7cG9zaXRpb246Zml4ZWQ7cmlnaHQ6MDt0b3A6MDt3aWR0aDoxMDAlO3otaW5kZXg6MjB9LmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9faWNvbi1jbG9zZXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO2hlaWdodDo2NHB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDt3aWR0aDo2NHB4O3otaW5kZXg6Mn0uY29va2llLXNldHRpbmdzLWdyYW51bGFyLXBvcHVwX19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiMwYTM4NDc7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDB2dztwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1ib3R0b206MjBweH1AbWVkaWEgKG1pbi13aWR0aDogMTAwNHB4KXsuY29va2llLXNldHRpbmdzLWdyYW51bGFyLXBvcHVwX19pbm5lcnttYXgtaGVpZ2h0OmNhbGMoODB2aCAtIDgwcHgpO21pbi1oZWlnaHQ6MTgwcHg7bWF4LXdpZHRoOjY3MnB4O21hcmdpbjphdXRvO21hcmdpbi10b3A6ODBweDtib3JkZXItcmFkaXVzOjJweH19QG1lZGlhIChtYXgtd2lkdGg6IDEwMDNweCl7LmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9faW5uZXJ7aGVpZ2h0OjEwMCV9fS5jb29raWUtc2V0dGluZ3MtZ3JhbnVsYXItcG9wdXBfX2hlYWRlciwuY29va2llLXNldHRpbmdzLWdyYW51bGFyLXBvcHVwX19jb250ZW50e3BhZGRpbmc6MCAxNnB4O21hcmdpbi1ib3R0b206MTBweH1AbWVkaWEgKG1pbi13aWR0aDogMTAwNHB4KXsuY29va2llLXNldHRpbmdzLWdyYW51bGFyLXBvcHVwX19oZWFkZXIsLmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9fY29udGVudHtwYWRkaW5nOjAgMzJweH19LmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9faGVhZGVye2ZsZXg6MCAwIGF1dG87Y29sb3I6I2ZmZjtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MDttYXJnaW4tYm90dG9tOjE1cHg7Zm9udC1zaXplOjEycHh9LmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9faGVhZGVyLWxpbmt7Y29sb3I6I2Y4NjYwMDt0ZXh0LWRlY29yYXRpb246bm9uZTt3aGl0ZS1zcGFjZTpub3dyYXB9LmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9faGVhZGVyLWxpbms6YWN0aXZlLC5jb29raWUtc2V0dGluZ3MtZ3JhbnVsYXItcG9wdXBfX2hlYWRlci1saW5rOmZvY3VzLC5jb29raWUtc2V0dGluZ3MtZ3JhbnVsYXItcG9wdXBfX2hlYWRlci1saW5rOmhvdmVye2NvbG9yOiNmODY2MDB9LmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9faGVhZGVyLWxpbms6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uY29va2llLXNldHRpbmdzLWdyYW51bGFyLXBvcHVwX19jb250ZW50e2ZsZXg6MCAxIGF1dG87b3ZlcmZsb3c6YXV0bztkaXNwbGF5OmZsZXg7Y29sb3I6I2ZmZjtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9fZm9vdGVye2JvdHRvbTowO3dpZHRoOjEwMCU7cGFkZGluZzowIDE2cHg7bWFyZ2luLXRvcDphdXRvfUBtZWRpYSAobWluLXdpZHRoOiA1NzBweCl7LmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9fZm9vdGVye2Rpc3BsYXk6ZmxleDtmbGV4OjAgMSBhdXRvO3BhZGRpbmc6MCAyMHB4O21hcmdpbi1ib3R0b206MTVweH19QG1lZGlhIChtaW4td2lkdGg6IDEwMDRweCl7LmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9fZm9vdGVye21hcmdpbi10b3A6MTVweH19LmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9fYnRue2JvcmRlci1yYWRpdXM6MnB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OmJvbGQ7aGVpZ2h0OjQwcHg7bWFyZ2luLXRvcDo4cHg7d2lkdGg6MTAwJTtib3JkZXI6MXB4IHNvbGlkfUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAwNHB4KXsuY29va2llLXNldHRpbmdzLWdyYW51bGFyLXBvcHVwX19idG57ZmxleDoxIDAgMTgwcHg7bWFyZ2luOjAgMTZweCAwIDB9fS5jb29raWUtc2V0dGluZ3MtZ3JhbnVsYXItcG9wdXBfX2J0bi1hY2NlcHQtYWxse2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMTQ2ZWViO2JvcmRlci1jb2xvcjojZmZmO21hcmdpbi1yaWdodDo4cHh9LmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9fYnRuLWFjY2VwdC1hbGw6aG92ZXIsLmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9fYnRuLWFjY2VwdC1hbGw6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMxNDZlZWJ9LmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9fYnRuLW9ubHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojMGEzODQ3O2NvbG9yOiNmZmZ9LmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9fYnRuLW9ubHktc2VsZWN0ZWQ6aG92ZXIsLmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9fYnRuLW9ubHktc2VsZWN0ZWQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMxNDZlZWJ9LmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cCAudHYtaWNvbi1hcnJvdy1sZWZ0e2ZpbGw6I2ZmZjt3aWR0aDo1MHB4fS5jb29raWUtc2V0dGluZ3MtZ3JhbnVsYXItcG9wdXAgLmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cC1zY3JvbGwtc3RvcHtvdmVyZmxvdzpoaWRkZW59LmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cCAuY29va2llLXNldHRpbmdzLWdyYW51bGFyLXBvcHVwX19jb25zZW50cy1pdGVte21hcmdpbi1ib3R0b206MS41cmVtfS5jb29raWUtc2V0dGluZ3MtZ3JhbnVsYXItcG9wdXAgLmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9fY29uc2VudHMtaXRlbSBoM3ttYXJnaW4tYm90dG9tOjhweDtmb250LXdlaWdodDpib2xkfS5jb29raWUtc2V0dGluZ3MtZ3JhbnVsYXItcG9wdXAgLmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9fY29uc2VudHMtdG9nZ2xle2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyfS5jb29raWUtc2V0dGluZ3MtZ3JhbnVsYXItcG9wdXAgLmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9fY29uc2VudHMtdG9nZ2xlIHB7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MTZweDttYXJnaW46MH0uY29va2llLXNldHRpbmdzLWdyYW51bGFyLXBvcHVwIC5jb29raWUtc2V0dGluZ3MtZ3JhbnVsYXItcG9wdXBfX2NvbnNlbnRzLXRvZ2dsZSBoM3tmb250LXNpemU6MTRweDtmb250LXdlaWdodDpib2xkfS5jb29raWUtc2V0dGluZ3MtZ3JhbnVsYXItcG9wdXAgLmpzLWhlYWRlci1jb250ZW50e2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlO2p1c3RpZnktY29udGVudDpjZW50ZXI7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6Ym9sZH0uY29va2llLXNldHRpbmdzLWdyYW51bGFyLXBvcHVwIC5zd2l0Y2h7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6NDJweDtoZWlnaHQ6MjRweDttYXJnaW4tbGVmdDo4cHh9LmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cCAuc3dpdGNoIGlucHV0e29wYWNpdHk6MDt3aWR0aDowO2hlaWdodDowfS5jb29raWUtc2V0dGluZ3MtZ3JhbnVsYXItcG9wdXAgLnNsaWRlcntwb3NpdGlvbjphYnNvbHV0ZTtjdXJzb3I6cG9pbnRlcjt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtiYWNrZ3JvdW5kLWNvbG9yOiMwYTM4NDc7LXdlYmtpdC10cmFuc2l0aW9uOi4xNXM7dHJhbnNpdGlvbjouMTVzO2Rpc3BsYXk6ZmxleH0uY29va2llLXNldHRpbmdzLWdyYW51bGFyLXBvcHVwIC5zbGlkZXI6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6Jyc7aGVpZ2h0OjE4cHg7d2lkdGg6MThweDtsZWZ0OjFweDtib3R0b206MXB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjstd2Via2l0LXRyYW5zaXRpb246MC40czt0cmFuc2l0aW9uOjAuNHN9LmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cCBpbnB1dCsuc2xpZGVyIC5zbGlkZXItaWNvbntvcGFjaXR5OjB9LmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cCAuc2xpZGVyLWljb257cG9zaXRpb246YWJzb2x1dGU7Y29udGVudDonJztoZWlnaHQ6MTNweDtib3R0b206NHB4O2xlZnQ6NHB4Oy13ZWJraXQtdHJhbnNpdGlvbjowLjRzO3RyYW5zaXRpb246MC40cztkaXNwbGF5OmZsZXh9QGtleWZyYW1lcyBvcGFjaXR5RGlyZWN0ezAle29wYWNpdHk6MH0xJXtvcGFjaXR5OjF9MTAwJXtvcGFjaXR5OjF9fS5jb29raWUtc2V0dGluZ3MtZ3JhbnVsYXItcG9wdXAgaW5wdXQ6Y2hlY2tlZCsuc2xpZGVye2JhY2tncm91bmQtY29sb3I6IzIxOTZmM30uY29va2llLXNldHRpbmdzLWdyYW51bGFyLXBvcHVwIGlucHV0OmNoZWNrZWQrLnNsaWRlciAuc2xpZGVyLWljb257b3BhY2l0eToxO2FuaW1hdGlvbjpvcGFjaXR5RGlyZWN0IDAuNHN9LmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cCBpbnB1dDpmb2N1cysuc2xpZGVye2JveC1zaGFkb3c6MCAwIDFweCAjMjE5NmYzfS5jb29raWUtc2V0dGluZ3MtZ3JhbnVsYXItcG9wdXAgaW5wdXQ6Y2hlY2tlZCsuc2xpZGVyOmJlZm9yZXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDE4cHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWCgxOHB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxOHB4KX0uY29va2llLXNldHRpbmdzLWdyYW51bGFyLXBvcHVwIGlucHV0Ky5zbGlkZXJ7Ym9yZGVyOjJweCBzb2xpZCAjZDhkOGQ4fS5jb29raWUtc2V0dGluZ3MtZ3JhbnVsYXItcG9wdXAgaW5wdXQ6Y2hlY2tlZCsuc2xpZGVye2JvcmRlcjoycHggc29saWQgIzBhMzg0N30uY29va2llLXNldHRpbmdzLWdyYW51bGFyLXBvcHVwIGlucHV0OmNoZWNrZWQrLnNsaWRlciAuc2xpZGVyLWljb257LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgxOHB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoMThweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMThweCl9LmNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cCAuc2xpZGVyLnJvdW5ke2JvcmRlci1yYWRpdXM6MTJweH0uY29va2llLXNldHRpbmdzLWdyYW51bGFyLXBvcHVwIC5zbGlkZXIucm91bmQgLnNsaWRlci1pY29ue2ZpbGw6IzIxOTZmM30uY29va2llLXNldHRpbmdzLWdyYW51bGFyLXBvcHVwIC5zbGlkZXIucm91bmQ6YmVmb3Jle2JvcmRlci1yYWRpdXM6NTAlfS5jb29raWUtc2V0dGluZ3MtZ3JhbnVsYXItcG9wdXAgLnNsaWRlci5yb3VuZC5jb25zZW50LWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6I2Q3ZDdkN30uY29va2llLXNldHRpbmdzLWdyYW51bGFyLXBvcHVwIC5zbGlkZXIucm91bmQuY29uc2VudC1kaXNhYmxlZCAuc2xpZGVyLWljb257ZmlsbDojOTU5NTk1fVxcblwiLFwiXCJdKSxtb2R1bGUuZXhwb3J0cz1leHBvcnRzfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyl7W0VsZW1lbnQucHJvdG90eXBlLENoYXJhY3RlckRhdGEucHJvdG90eXBlLERvY3VtZW50VHlwZS5wcm90b3R5cGVdLmZvckVhY2goKGZ1bmN0aW9uKGl0ZW0pe2l0ZW0uaGFzT3duUHJvcGVydHkoXCJyZW1vdmVcIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpdGVtLFwicmVtb3ZlXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpfX0pfSkpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXt2YXIgYXBpPV9fd2VicGFja19yZXF1aXJlX18oMiksY29udGVudD1fX3dlYnBhY2tfcmVxdWlyZV9fKDE4NCk7XCJzdHJpbmdcIj09dHlwZW9mKGNvbnRlbnQ9Y29udGVudC5fX2VzTW9kdWxlP2NvbnRlbnQuZGVmYXVsdDpjb250ZW50KSYmKGNvbnRlbnQ9W1ttb2R1bGUuaSxjb250ZW50LFwiXCJdXSk7dmFyIG9wdGlvbnM9e2luc2VydDpcImhlYWRcIixzaW5nbGV0b246ITF9LGV4cG9ydGVkPShhcGkoY29udGVudCxvcHRpb25zKSxjb250ZW50LmxvY2Fscz9jb250ZW50LmxvY2Fsczp7fSk7bW9kdWxlLmV4cG9ydHM9ZXhwb3J0ZWR9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18peyhleHBvcnRzPV9fd2VicGFja19yZXF1aXJlX18oMykoITEpKS5wdXNoKFttb2R1bGUuaSxcIi5mbGV4e2Rpc3BsYXk6ZmxleH0uZmxleC0tYWxpZ24tc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uZmxleC0tYWxpZ24tZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kfS5mbGV4LS1hbGlnbi1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyfS5mbGV4LS1hbGlnbi1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2h9LmZsZXgtLWFsaWduLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5mbGV4LS1qdXN0aWZ5LXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5mbGV4LS1qdXN0aWZ5LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmZsZXgtLWp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmZsZXgtLWp1c3RpZnktYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmZsZXgtLWp1c3RpZnktYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uZmxleC0tanVzdGlmeS1ldmVubHl7anVzdGlmeS1jb250ZW50OnNwYWNlLWV2ZW5seX1Aa2V5ZnJhbWVzIHNjYWxlezAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDAuOSk7dHJhbnNmb3JtOnNjYWxlKDAuOSk7b3BhY2l0eTowfTUwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxLjA1KTt0cmFuc2Zvcm06c2NhbGUoMS4wNSk7b3BhY2l0eTowLjh9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxKTt0cmFuc2Zvcm06c2NhbGUoMSk7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIHNjYWxlezAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEuOSk7dHJhbnNmb3JtOnNjYWxlKDAuOSk7b3BhY2l0eTowfTUwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxLjA1KTt0cmFuc2Zvcm06c2NhbGUoMS4wNSk7b3BhY2l0eTowLjh9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxKTt0cmFuc2Zvcm06c2NhbGUoMSk7b3BhY2l0eToxfX0qe2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubm90aWZ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMxMGQzNjU7ZGlzcGxheTpmbGV4O2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjYwMDtoZWlnaHQ6YXV0bztqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21pbi1oZWlnaHQ6NC41cmVtO29wYWNpdHk6MTtwb3NpdGlvbjpmaXhlZDt0b3A6MDt0cmFuc2l0aW9uOmFsbCAwLjNzIGVhc2UtaW47d2lkdGg6MTAwJTt6LWluZGV4Ojk5OTk5OX1AbWVkaWEgKG1heC13aWR0aDogMTAwNHB4KXsubm90aWZ5e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fX0ubm90aWZ5X190aXRsZXtjb2xvcjojZmZmO3BhZGRpbmc6MC41cmVtIDFyZW0gMC41cmVtIDB9QG1lZGlhIChtaW4td2lkdGg6IDEwMDRweCl7Lm5vdGlmeV9fdGl0bGV7cGFkZGluZzowLjVyZW0gMS41cmVtIDAuNXJlbSAwfX0ubm90aWZ5IC50di1pY29ue3BhZGRpbmc6MCAxLjM3NXJlbX0ubm90aWZ5IC50di1pY29uIFtjbGFzc149J3R2LWljb24tJ117ZmlsbDojZmZmfS5ub3RpZnktLWhpZGRlbntvcGFjaXR5OjB9Lm5vdGlmeS0tZXJyb3J7YmFja2dyb3VuZC1jb2xvcjojZmY0MjQ2fS5ub3RpZnktLWluZm97YmFja2dyb3VuZC1jb2xvcjojMGEzODQ3fS5ub3RpZnktLXdhcm5pbmd7YmFja2dyb3VuZC1jb2xvcjojZjg2NjAwfV86LW1zLWZ1bGxzY3JlZW4gLm5vdGlmeSw6cm9vdCAubm90aWZ5e2hlaWdodDoycmVtfV86LW1zLWZ1bGxzY3JlZW4gLm5vdGlmeSAudHYtaWNvbiBbY2xhc3NePSd0di1pY29uLSddLDpyb290IC5ub3RpZnkgLnR2LWljb24gW2NsYXNzXj0ndHYtaWNvbi0nXXttaW4td2lkdGg6MXJlbX1cXG5cIixcIlwiXSksbW9kdWxlLmV4cG9ydHM9ZXhwb3J0c30sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7dmFyIGFwaT1fX3dlYnBhY2tfcmVxdWlyZV9fKDIpLGNvbnRlbnQ9X193ZWJwYWNrX3JlcXVpcmVfXygxODYpO1wic3RyaW5nXCI9PXR5cGVvZihjb250ZW50PWNvbnRlbnQuX19lc01vZHVsZT9jb250ZW50LmRlZmF1bHQ6Y29udGVudCkmJihjb250ZW50PVtbbW9kdWxlLmksY29udGVudCxcIlwiXV0pO3ZhciBvcHRpb25zPXtpbnNlcnQ6XCJoZWFkXCIsc2luZ2xldG9uOiExfSxleHBvcnRlZD0oYXBpKGNvbnRlbnQsb3B0aW9ucyksY29udGVudC5sb2NhbHM/Y29udGVudC5sb2NhbHM6e30pO21vZHVsZS5leHBvcnRzPWV4cG9ydGVkfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsoZXhwb3J0cz1fX3dlYnBhY2tfcmVxdWlyZV9fKDMpKCExKSkucHVzaChbbW9kdWxlLmksXCIuZmxleHtkaXNwbGF5OmZsZXh9LmZsZXgtLWFsaWduLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmZsZXgtLWFsaWduLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZH0uZmxleC0tYWxpZ24tY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlcn0uZmxleC0tYWxpZ24tc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNofS5mbGV4LS1hbGlnbi1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZX0uZmxleC0tanVzdGlmeS1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uZmxleC0tanVzdGlmeS1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5mbGV4LS1qdXN0aWZ5LWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5mbGV4LS1qdXN0aWZ5LWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5mbGV4LS1qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LmZsZXgtLWp1c3RpZnktZXZlbmx5e2p1c3RpZnktY29udGVudDpzcGFjZS1ldmVubHl9QGtleWZyYW1lcyBzY2FsZXswJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgwLjkpO3RyYW5zZm9ybTpzY2FsZSgwLjkpO29wYWNpdHk6MH01MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMS4wNSk7dHJhbnNmb3JtOnNjYWxlKDEuMDUpO29wYWNpdHk6MC44fTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MX19QGtleWZyYW1lcyBzY2FsZXswJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxLjkpO3RyYW5zZm9ybTpzY2FsZSgwLjkpO29wYWNpdHk6MH01MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMS4wNSk7dHJhbnNmb3JtOnNjYWxlKDEuMDUpO29wYWNpdHk6MC44fTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MX19Kntib3gtc2l6aW5nOmJvcmRlci1ib3h9LnR2LXNwaW5uZXJ7ZGlzcGxheTpmbGV4O2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwLjQpO2JvdHRvbTowO2hlaWdodDoxMDB2aDtsZWZ0OjA7b3BhY2l0eToxO3Bvc2l0aW9uOmZpeGVkO3JpZ2h0OjA7dG9wOjA7d2lkdGg6MTAwJTt6LWluZGV4OjIwfS50di1zcGlubmVyX19iYWNrZ3JvdW5ke2hlaWdodDo4OHB4O3dpZHRoOjg4cHg7Ym9yZGVyLXJhZGl1czoycHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO21hcmdpbjphdXRvO2Rpc3BsYXk6ZmxleH0udHYtc3Bpbm5lcl9fYmFja2dyb3VuZC1jaXJjbGV7bWFyZ2luOmF1dG87Ym9yZGVyOjVweCBzb2xpZCAjZjhmNWYyO2ZvbnQtc2l6ZTo1NnB4O3dpZHRoOjFlbTtoZWlnaHQ6MWVtO2JvcmRlci1yYWRpdXM6MC41ZW07LXdlYmtpdC1hbmltYXRpb246c3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7LW1vei1hbmltYXRpb246c3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7YW5pbWF0aW9uOnNwaW4gMXMgbGluZWFyIGluZmluaXRlO2JvcmRlci10b3AtY29sb3I6I2Y4NjYwMH1ALXdlYmtpdC1rZXlmcmFtZXMgc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fVxcblwiLFwiXCJdKSxtb2R1bGUuZXhwb3J0cz1leHBvcnRzfSxmdW5jdGlvbihtb2R1bGUsX193ZWJwYWNrX2V4cG9ydHNfXyxfX3dlYnBhY2tfcmVxdWlyZV9fKXtcInVzZSBzdHJpY3RcIjtfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyksX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sXCJBbGVydGlmeVwiLChmdW5jdGlvbigpe3JldHVybiBhbGVydGlmeV9BbGVydGlmeX0pKSxfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXyxcIkJ1dHRvblwiLChmdW5jdGlvbigpe3JldHVybiBidXR0b25fQnV0dG9ufSkpLF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLFwiQnV0dG9uQXV0b2xvYWRlclwiLChmdW5jdGlvbigpe3JldHVybiBCdXR0b25BdXRvbG9hZGVyfSkpLF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLFwiQ2hpcHNMaXN0XCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGNoaXBzX2xpc3RfQ2hpcHNMaXN0fSkpLF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLFwiQ29udGVudFRvZ2dsZVwiLChmdW5jdGlvbigpe3JldHVybiBjb250ZW50X3RvZ2dsZV9Db250ZW50VG9nZ2xlfSkpLF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLFwiQ29udGVudFRvZ2dsZUF1dG9sb2FkZXJcIiwoZnVuY3Rpb24oKXtyZXR1cm4gQ29udGVudFRvZ2dsZUF1dG9sb2FkZXJ9KSksX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sXCJDb29raWVTZXR0aW5nc1wiLChmdW5jdGlvbigpe3JldHVybiBjb29raWVfc2V0dGluZ3NfQ29va2llU2V0dGluZ3N9KSksX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sXCJDb29raWVXYWxsXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGNvb2tpZV93YWxsX0Nvb2tpZVdhbGx9KSksX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sXCJDb29raWVDb25zZW50XCIsKGZ1bmN0aW9uKCl7cmV0dXJuIENvb2tpZUNvbnNlbnR9KSksX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sXCJDb29raWVXYWxsR3JhbnVsYXJcIiwoZnVuY3Rpb24oKXtyZXR1cm4gY29va2llX3dhbGxfZ3JhbnVsYXJfQ29va2llV2FsbEdyYW51bGFyfSkpLF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLFwiQ29va2llU2V0dGluZ3NHcmFudWxhclwiLChmdW5jdGlvbigpe3JldHVybiBjb29raWVfc2V0dGluZ3NfZ3JhbnVsYXJfQ29va2llU2V0dGluZ3NHcmFudWxhcn0pKSxfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXyxcIkNvb2tpZUNvbnNlbnRHcmFudWxhclwiLChmdW5jdGlvbigpe3JldHVybiBDb29raWVDb25zZW50R3JhbnVsYXJ9KSksX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sXCJOb3RpZnlcIiwoZnVuY3Rpb24oKXtyZXR1cm4gTm90aWZ5fSkpLF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLFwiUG9wdXBcIiwoZnVuY3Rpb24oKXtyZXR1cm4gcG9wdXBfUG9wdXB9KSksX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sXCJQb3B1cEF1dG9sb2FkZXJcIiwoZnVuY3Rpb24oKXtyZXR1cm4gUG9wdXBBdXRvbG9hZGVyfSkpLF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLFwiUmFkaW9cIiwoZnVuY3Rpb24oKXtyZXR1cm4gUmFkaW99KSksX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sXCJTZWFyY2hCb3hcIiwoZnVuY3Rpb24oKXtyZXR1cm4gc2VhcmNoX2JveF9TZWFyY2hCb3h9KSksX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sXCJTZWFyY2hCb3hBdXRvbG9hZGVyXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFNlYXJjaEJveEF1dG9sb2FkZXJ9KSksX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sXCJCZWhhdmlvclN1YmplY3RcIiwoZnVuY3Rpb24oKXtyZXR1cm4gQmVoYXZpb3JTdWJqZWN0fSkpLF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLFwiZGVib3VuY2VcIiwoZnVuY3Rpb24oKXtyZXR1cm4gZGVib3VuY2V9KSksX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sXCJTcGlubmVyXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNwaW5uZXJfU3Bpbm5lcn0pKTtfX3dlYnBhY2tfcmVxdWlyZV9fKDE1MiksX193ZWJwYWNrX3JlcXVpcmVfXygxNTQpO3ZhciBhdHRlbnRpb249X193ZWJwYWNrX3JlcXVpcmVfXygxNDEpLGF0dGVudGlvbl9kZWZhdWx0PV9fd2VicGFja19yZXF1aXJlX18ubihhdHRlbnRpb24pLGNoZWNrPV9fd2VicGFja19yZXF1aXJlX18oMTQyKSxjaGVja19kZWZhdWx0PV9fd2VicGFja19yZXF1aXJlX18ubihjaGVjayksY3Jvc3M9X193ZWJwYWNrX3JlcXVpcmVfXygxNDMpLGNyb3NzX2RlZmF1bHQ9X193ZWJwYWNrX3JlcXVpcmVfXy5uKGNyb3NzKSxjcm9zc19jaXJjbGU9X193ZWJwYWNrX3JlcXVpcmVfXygxNDQpLGNyb3NzX2NpcmNsZV9kZWZhdWx0PV9fd2VicGFja19yZXF1aXJlX18ubihjcm9zc19jaXJjbGUpLGNyb3NzX2xpZ2h0PV9fd2VicGFja19yZXF1aXJlX18oMTQ1KSxjcm9zc19saWdodF9kZWZhdWx0PV9fd2VicGFja19yZXF1aXJlX18ubihjcm9zc19saWdodCksZW1vamlfaGFwcHk9X193ZWJwYWNrX3JlcXVpcmVfXygxNDYpLGVtb2ppX2hhcHB5X2RlZmF1bHQ9X193ZWJwYWNrX3JlcXVpcmVfXy5uKGVtb2ppX2hhcHB5KSxpbmZvX2NpcmNsZT1fX3dlYnBhY2tfcmVxdWlyZV9fKDE0NyksaW5mb19jaXJjbGVfZGVmYXVsdD1fX3dlYnBhY2tfcmVxdWlyZV9fLm4oaW5mb19jaXJjbGUpLHNlYXJjaD1fX3dlYnBhY2tfcmVxdWlyZV9fKDE0OCksc2VhcmNoX2RlZmF1bHQ9X193ZWJwYWNrX3JlcXVpcmVfXy5uKHNlYXJjaCksYXJyb3dfbGVmdD1fX3dlYnBhY2tfcmVxdWlyZV9fKDE0OSksYXJyb3dfbGVmdF9kZWZhdWx0PV9fd2VicGFja19yZXF1aXJlX18ubihhcnJvd19sZWZ0KSxjd19jaGVjaz1fX3dlYnBhY2tfcmVxdWlyZV9fKDE1MCksY3dfY2hlY2tfZGVmYXVsdD1fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY3dfY2hlY2spLGNvbnRhaW49ZnVuY3Rpb24oaWNvbil7cmV0dXJuJzxkaXYgY2xhc3M9XCJ0di1pY29uXCI+Jy5jb25jYXQoaWNvbixcIjwvZGl2PlwiKX0saWNvbkF0dGVudGlvbj1jb250YWluKGF0dGVudGlvbl9kZWZhdWx0LmEpLGljb25DaGVjaz1jb250YWluKGNoZWNrX2RlZmF1bHQuYSksaWNvbkNyb3NzPWNvbnRhaW4oY3Jvc3NfZGVmYXVsdC5hKSxpY29uQ3Jvc3NDaXJjbGU9Y29udGFpbihjcm9zc19jaXJjbGVfZGVmYXVsdC5hKSxpY29uQ3Jvc3NMaWdodD1jb250YWluKGNyb3NzX2xpZ2h0X2RlZmF1bHQuYSksaWNvbkVtb2ppSGFwcHk9Y29udGFpbihlbW9qaV9oYXBweV9kZWZhdWx0LmEpLGljb25JbmZvQ2lyY2xlPWNvbnRhaW4oaW5mb19jaXJjbGVfZGVmYXVsdC5hKSxpY29uU2VhcmNoPWNvbnRhaW4oc2VhcmNoX2RlZmF1bHQuYSksaWNvbkFycm93TGVmdD1jb250YWluKGFycm93X2xlZnRfZGVmYXVsdC5hKSxpY29uQ3dDaGVjaz1jb250YWluKGN3X2NoZWNrX2RlZmF1bHQuYSksanNfY29va2llPV9fd2VicGFja19yZXF1aXJlX18oNCksbW9tZW50PV9fd2VicGFja19yZXF1aXJlX18oMCksbW9tZW50X2RlZmF1bHQ9X193ZWJwYWNrX3JlcXVpcmVfXy5uKG1vbWVudCk7ZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsZW51bWVyYWJsZU9ubHkpe3ZhciBrZXlzPU9iamVjdC5rZXlzKG9iamVjdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHN5bWJvbHM9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO2VudW1lcmFibGVPbmx5JiYoc3ltYm9scz1zeW1ib2xzLmZpbHRlcigoZnVuY3Rpb24oc3ltKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3Qsc3ltKS5lbnVtZXJhYmxlfSkpKSxrZXlzLnB1c2guYXBwbHkoa2V5cyxzeW1ib2xzKX1yZXR1cm4ga2V5c31mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCl7Zm9yKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIHNvdXJjZT1udWxsIT1hcmd1bWVudHNbaV0/YXJndW1lbnRzW2ldOnt9O2klMj9vd25LZXlzKE9iamVjdChzb3VyY2UpLCEwKS5mb3JFYWNoKChmdW5jdGlvbihrZXkpe19kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsa2V5LHNvdXJjZVtrZXldKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk6b3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaCgoZnVuY3Rpb24oa2V5KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LGtleSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSxrZXkpKX0pKX1yZXR1cm4gdGFyZ2V0fWZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosa2V5LHZhbHVlKXtyZXR1cm4ga2V5IGluIG9iaj9PYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLGtleSx7dmFsdWU6dmFsdWUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpvYmpba2V5XT12YWx1ZSxvYmp9dmFyIEJlaGF2aW9yU3ViamVjdD1mdW5jdGlvbihkZWZhdWx0VmFsdWUpe3ZhciBzdWJzY3JpYmVycz1bXSxjdXJyZW50VmFsdWU9bnVsbCxuZXh0PWZ1bmN0aW9uKG5leHRWYWx1ZSl7Y3VycmVudFZhbHVlIT09bmV4dFZhbHVlJiYoY3VycmVudFZhbHVlPW5leHRWYWx1ZSxzdWJzY3JpYmVycy5mb3JFYWNoKChmdW5jdGlvbihzdWJzY3JpYmVyKXtyZXR1cm4gc3Vic2NyaWJlcihuZXh0VmFsdWUpfSkpKX07cmV0dXJue3N1YnNjcmliZTpmdW5jdGlvbihzdWJzY3JpYmVyKXtzdWJzY3JpYmVycy5wdXNoKHN1YnNjcmliZXIpLG5leHQoZGVmYXVsdFZhbHVlKX0sbmV4dDpuZXh0fX0sZGVib3VuY2U9ZnVuY3Rpb24oZm4sd2FpdCl7dmFyIHQ7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIF9hcmd1bWVudHM9YXJndW1lbnRzLF90aGlzPXRoaXM7Y2xlYXJUaW1lb3V0KHQpLHQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gZm4uYXBwbHkoX3RoaXMsX2FyZ3VtZW50cyl9KSx3YWl0KX19LGdlbmVyYXRlVWlkPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDkpfSxoZWxwZXJzX2dldENvb2tpZT1mdW5jdGlvbihrZXkpe3JldHVybiBqc19jb29raWUuZ2V0KGtleSl9LGhlbHBlcnNfcmVtb3ZlQ29va2llPWZ1bmN0aW9uKGtleSl7cmV0dXJuIGpzX2Nvb2tpZS5yZW1vdmUoa2V5KX0saGVscGVyc19zZXRDb29raWU9ZnVuY3Rpb24oa2V5LHZhbHVlLGV4dHJhT3B0aW9ucyl7anNfY29va2llLnNldChrZXksdmFsdWUsX29iamVjdFNwcmVhZCh7c2VjdXJlOiEwfSxleHRyYU9wdGlvbnMpKX0saGVscGVyc19zZXRDb29raWVXaXRoRW5jb2Rpbmc9ZnVuY3Rpb24oa2V5LHZhbHVlLGV4dHJhT3B0aW9ucyl7dmFyIGVuY29kaW5nRnVuYz1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106ZW5jb2RlVVJJQ29tcG9uZW50LGNvb2tpZVdpdGhFbmNvZGU9anNfY29va2llLndpdGhDb252ZXJ0ZXIoe3dyaXRlOmZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gZW5jb2RpbmdGdW5jKHZhbHVlKX19KTtjb29raWVXaXRoRW5jb2RlLnNldChrZXksdmFsdWUsX29iamVjdFNwcmVhZCh7c2VjdXJlOiEwfSxleHRyYU9wdGlvbnMpKX0saGVscGVyc191dGNDdXJyZW50VGltZVN0cmluZz1mdW5jdGlvbigpe3ZhciBmb3JtYXQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlwiREQtTU0tWVlZWSBIOm1tOnNzXCI7cmV0dXJuIG1vbWVudF9kZWZhdWx0KCkoKS51dGMoKS5mb3JtYXQoZm9ybWF0KX0saGVscGVyc19pc0RhdGVGb3JtYXR0ZWQ9ZnVuY3Rpb24oZGF0ZVN0cmluZyl7dmFyIGZvcm1hdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06XCJERC1NTS1ZWVlZIEg6bW06c3NcIjtyZXR1cm4gbW9tZW50X2RlZmF1bHQoKShkYXRlU3RyaW5nLGZvcm1hdCwhMCkuaXNWYWxpZCgpfTtmdW5jdGlvbiBhbGVydGlmeV9kZWZpbmVQcm9wZXJ0eShvYmosa2V5LHZhbHVlKXtyZXR1cm4ga2V5IGluIG9iaj9PYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLGtleSx7dmFsdWU6dmFsdWUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpvYmpba2V5XT12YWx1ZSxvYmp9dmFyIGFsZXJ0aWZ5X0FsZXJ0aWZ5PWZ1bmN0aW9uIEFsZXJ0aWZ5KHdyYXBwZXIpe3ZhciBfdGhpcz10aGlzO2lmKGZ1bmN0aW9uKGluc3RhbmNlLENvbnN0cnVjdG9yKXtpZighKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9KHRoaXMsQWxlcnRpZnkpLGFsZXJ0aWZ5X2RlZmluZVByb3BlcnR5KHRoaXMsXCJzaG93QWxlcnRcIiwoZnVuY3Rpb24oaGVhZGluZyxjb250ZW50KXtpZighaGVhZGluZyl0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgZmlyc3QgcGFyYW1ldGVyIChoZWFkaW5nKSBpcyByZXF1aXJlZFwiKTtpZighY29udGVudCl0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgc2Vjb25kIHBhcmFtZXRlciAoY29udGVudCkgaXMgcmVxdWlyZWRcIik7dmFyIEhUTUw9J1xcbiAgICA8ZGl2IGNsYXNzPVwiYWxlcnRpZnkgJy5jb25jYXQoX3RoaXMudWlkLCdcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydGlmeV9faWNvblwiPicpLmNvbmNhdChpY29uSW5mb0NpcmNsZSwnPC9kaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnRpZnlfX2NvbnRlbnRcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnRpZnlfX2hlYWRlclwiPlxcbiAgICAgICAgICAgICAgICAnKS5jb25jYXQoaGVhZGluZywnXFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0aWZ5X190ZXh0XCI+XFxuICAgICAgICAgICAgICAgICcpLmNvbmNhdChjb250ZW50LFwiXFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XCIpO190aGlzLndyYXBwZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKFwiYmVmb3JlZW5kXCIsSFRNTCl9KSksYWxlcnRpZnlfZGVmaW5lUHJvcGVydHkodGhpcyxcInJlbW92ZUFsZXJ0XCIsKGZ1bmN0aW9uKCl7ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQoX3RoaXMudWlkKSkucmVtb3ZlKCl9KSksIXdyYXBwZXJ8fHZvaWQgMD09PXdyYXBwZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKXRocm93IG5ldyBFcnJvcihcInRoZSBjb25zdHJ1Y3RvciBleHBlY3RzIHRoZSB3cmFwcGVyIHRvIGJlIGFuIEhUTUwgZWxlbWVudFwiKTt0aGlzLndyYXBwZXI9d3JhcHBlcix0aGlzLnVpZD1cImpzLWFsZXJ0aWZ5LVwiK2dlbmVyYXRlVWlkKCl9O19fd2VicGFja19yZXF1aXJlX18oMTU4KTtmdW5jdGlvbiBidXR0b25fb3duS2V5cyhvYmplY3QsZW51bWVyYWJsZU9ubHkpe3ZhciBrZXlzPU9iamVjdC5rZXlzKG9iamVjdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHN5bWJvbHM9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO2VudW1lcmFibGVPbmx5JiYoc3ltYm9scz1zeW1ib2xzLmZpbHRlcigoZnVuY3Rpb24oc3ltKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3Qsc3ltKS5lbnVtZXJhYmxlfSkpKSxrZXlzLnB1c2guYXBwbHkoa2V5cyxzeW1ib2xzKX1yZXR1cm4ga2V5c31mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQscHJvcHMpe2Zvcih2YXIgaT0wO2k8cHJvcHMubGVuZ3RoO2krKyl7dmFyIGRlc2NyaXB0b3I9cHJvcHNbaV07ZGVzY3JpcHRvci5lbnVtZXJhYmxlPWRlc2NyaXB0b3IuZW51bWVyYWJsZXx8ITEsZGVzY3JpcHRvci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gZGVzY3JpcHRvciYmKGRlc2NyaXB0b3Iud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsZGVzY3JpcHRvci5rZXksZGVzY3JpcHRvcil9fWZ1bmN0aW9uIGJ1dHRvbl9kZWZpbmVQcm9wZXJ0eShvYmosa2V5LHZhbHVlKXtyZXR1cm4ga2V5IGluIG9iaj9PYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLGtleSx7dmFsdWU6dmFsdWUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpvYmpba2V5XT12YWx1ZSxvYmp9ZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLHByaXZhdGVNYXApe3ZhciBkZXNjcmlwdG9yPXByaXZhdGVNYXAuZ2V0KHJlY2VpdmVyKTtpZighZGVzY3JpcHRvcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtyZXR1cm4gZGVzY3JpcHRvci5nZXQ/ZGVzY3JpcHRvci5nZXQuY2FsbChyZWNlaXZlcik6ZGVzY3JpcHRvci52YWx1ZX12YXIgYnV0dG9uX0J1dHRvbj1mdW5jdGlvbigpe2Z1bmN0aW9uIEJ1dHRvbihwcm9wcyl7dmFyIF90aGlzPXRoaXM7aWYoZnVuY3Rpb24oaW5zdGFuY2UsQ29uc3RydWN0b3Ipe2lmKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX0odGhpcyxCdXR0b24pLGJ1dHRvbl9wcm9wcy5zZXQodGhpcyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksYnV0dG9uX2RlZmluZVByb3BlcnR5KHRoaXMsXCJnZXRTZWxlY3RvclwiLChmdW5jdGlvbigpe3JldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsYnV0dG9uX3Byb3BzKS5zZWxlY3Rvcn0pKSwhKHByb3BzLiRjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpdGhyb3cgbmV3IEVycm9yKFwiTmVlZCBhIHJlZmVyZW5jZSBlbGVtZW50IGZvciBzaG93aW5nIHRoZSBidXR0b25cIik7dmFyIGRlZmF1bHRWYWx1ZXM9e2NsYXNzTGlzdDpbXSxzZWxlY3RvcjpcImpzLWJ0bi1cIi5jb25jYXQoZ2VuZXJhdGVVaWQoKSksdHlwZTpcImJ1dHRvblwifTshZnVuY3Rpb24ocmVjZWl2ZXIscHJpdmF0ZU1hcCx2YWx1ZSl7dmFyIGRlc2NyaXB0b3I9cHJpdmF0ZU1hcC5nZXQocmVjZWl2ZXIpO2lmKCFkZXNjcmlwdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gc2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO2lmKGRlc2NyaXB0b3Iuc2V0KWRlc2NyaXB0b3Iuc2V0LmNhbGwocmVjZWl2ZXIsdmFsdWUpO2Vsc2V7aWYoIWRlc2NyaXB0b3Iud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGRcIik7ZGVzY3JpcHRvci52YWx1ZT12YWx1ZX19KHRoaXMsYnV0dG9uX3Byb3BzLGZ1bmN0aW9uKHRhcmdldCl7Zm9yKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIHNvdXJjZT1udWxsIT1hcmd1bWVudHNbaV0/YXJndW1lbnRzW2ldOnt9O2klMj9idXR0b25fb3duS2V5cyhPYmplY3Qoc291cmNlKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oa2V5KXtidXR0b25fZGVmaW5lUHJvcGVydHkodGFyZ2V0LGtleSxzb3VyY2Vba2V5XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOmJ1dHRvbl9vd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKChmdW5jdGlvbihrZXkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsa2V5LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLGtleSkpfSkpfXJldHVybiB0YXJnZXR9KHt9LGRlZmF1bHRWYWx1ZXMse30scHJvcHMpKX12YXIgQ29uc3RydWN0b3IscHJvdG9Qcm9wcyxzdGF0aWNQcm9wcztyZXR1cm4gQ29uc3RydWN0b3I9QnV0dG9uLChwcm90b1Byb3BzPVt7a2V5OlwiY29tcG9uZW50RGlkTW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciAkZWxlbWVudD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxidXR0b25fcHJvcHMpLnNlbGVjdG9yKSk7JGVsZW1lbnQmJiRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLGJ1dHRvbl9wcm9wcykuY2xpY2tGbil9fSx7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0Mj1fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxidXR0b25fcHJvcHMpLGNsYXNzTGlzdD1fY2xhc3NQcml2YXRlRmllbGRHZXQyLmNsYXNzTGlzdCwkY29udGFpbmVyPV9jbGFzc1ByaXZhdGVGaWVsZEdldDIuJGNvbnRhaW5lcixpbm5lckNvbnRlbnQ9X2NsYXNzUHJpdmF0ZUZpZWxkR2V0Mi5pbm5lckNvbnRlbnQscG9zaXRpb249X2NsYXNzUHJpdmF0ZUZpZWxkR2V0Mi5wb3NpdGlvbixzZWxlY3Rvcj1fY2xhc3NQcml2YXRlRmllbGRHZXQyLnNlbGVjdG9yLHR5cGU9X2NsYXNzUHJpdmF0ZUZpZWxkR2V0Mi50eXBlLEhUTUw9J1xcbiAgICA8YnV0dG9uIHR5cGU9XCInLmNvbmNhdCh0eXBlLCdcIiBjbGFzcz1cInR2LWJ1dHRvbiAnKS5jb25jYXQoc2VsZWN0b3IsXCIgXCIpLmNvbmNhdChjbGFzc0xpc3Quam9pbihcIiBcIiksJ1wiPlxcbiAgICAgICcpLmNvbmNhdChpbm5lckNvbnRlbnQsXCJcXG4gICAgPC9idXR0b24+XCIpOyRjb250YWluZXImJnBvc2l0aW9uPyRjb250YWluZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKHBvc2l0aW9uLEhUTUwpOiRjb250YWluZXImJigkY29udGFpbmVyLmlubmVySFRNTD1IVE1MKSx0aGlzLmNvbXBvbmVudERpZE1vdW50KCl9fV0pJiZfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUscHJvdG9Qcm9wcyksc3RhdGljUHJvcHMmJl9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLHN0YXRpY1Byb3BzKSxCdXR0b259KCksYnV0dG9uX3Byb3BzPW5ldyBXZWFrTWFwLEtleUNvZGVfRE9XTj0oX193ZWJwYWNrX3JlcXVpcmVfXygxNjApLDQwKSxLZXlDb2RlX0VORD0zNSxLZXlDb2RlX0VOVEVSPTEzLEtleUNvZGVfRVNDQVBFPTI3LEtleUNvZGVfSE9NRT0zNixLZXlDb2RlX0xFRlQ9MzcsS2V5Q29kZV9SSUdIVD0zOSxLZXlDb2RlX1NQQUNFPTMyLEtleUNvZGVfVEFCPTksS2V5Q29kZV9VUD0zODtmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKXtyZXR1cm4gZnVuY3Rpb24oYXJyKXtpZihBcnJheS5pc0FycmF5KGFycikpcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycil9KGFycil8fGZ1bmN0aW9uKGl0ZXIpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcikpcmV0dXJuIEFycmF5LmZyb20oaXRlcil9KGFycil8fGZ1bmN0aW9uKG8sbWluTGVuKXtpZighbylyZXR1cm47aWYoXCJzdHJpbmdcIj09dHlwZW9mIG8pcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sbWluTGVuKTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwtMSk7XCJPYmplY3RcIj09PW4mJm8uY29uc3RydWN0b3ImJihuPW8uY29uc3RydWN0b3IubmFtZSk7aWYoXCJNYXBcIj09PW58fFwiU2V0XCI9PT1uKXJldHVybiBBcnJheS5mcm9tKG4pO2lmKFwiQXJndW1lbnRzXCI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobyxtaW5MZW4pfShhcnIpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFycixsZW4peyhudWxsPT1sZW58fGxlbj5hcnIubGVuZ3RoKSYmKGxlbj1hcnIubGVuZ3RoKTtmb3IodmFyIGk9MCxhcnIyPW5ldyBBcnJheShsZW4pO2k8bGVuO2krKylhcnIyW2ldPWFycltpXTtyZXR1cm4gYXJyMn1mdW5jdGlvbiBwb3B1cF9vd25LZXlzKG9iamVjdCxlbnVtZXJhYmxlT25seSl7dmFyIGtleXM9T2JqZWN0LmtleXMob2JqZWN0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgc3ltYm9scz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7ZW51bWVyYWJsZU9ubHkmJihzeW1ib2xzPXN5bWJvbHMuZmlsdGVyKChmdW5jdGlvbihzeW0pe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCxzeW0pLmVudW1lcmFibGV9KSkpLGtleXMucHVzaC5hcHBseShrZXlzLHN5bWJvbHMpfXJldHVybiBrZXlzfWZ1bmN0aW9uIHBvcHVwX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LHByb3BzKXtmb3IodmFyIGk9MDtpPHByb3BzLmxlbmd0aDtpKyspe3ZhciBkZXNjcmlwdG9yPXByb3BzW2ldO2Rlc2NyaXB0b3IuZW51bWVyYWJsZT1kZXNjcmlwdG9yLmVudW1lcmFibGV8fCExLGRlc2NyaXB0b3IuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIGRlc2NyaXB0b3ImJihkZXNjcmlwdG9yLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LGRlc2NyaXB0b3Iua2V5LGRlc2NyaXB0b3IpfX1mdW5jdGlvbiBwb3B1cF9kZWZpbmVQcm9wZXJ0eShvYmosa2V5LHZhbHVlKXtyZXR1cm4ga2V5IGluIG9iaj9PYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLGtleSx7dmFsdWU6dmFsdWUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpvYmpba2V5XT12YWx1ZSxvYmp9ZnVuY3Rpb24gcG9wdXBfY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIscHJpdmF0ZU1hcCl7dmFyIGRlc2NyaXB0b3I9cHJpdmF0ZU1hcC5nZXQocmVjZWl2ZXIpO2lmKCFkZXNjcmlwdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO3JldHVybiBkZXNjcmlwdG9yLmdldD9kZXNjcmlwdG9yLmdldC5jYWxsKHJlY2VpdmVyKTpkZXNjcmlwdG9yLnZhbHVlfXZhciBwb3B1cF9Qb3B1cD1mdW5jdGlvbigpe2Z1bmN0aW9uIFBvcHVwKHByb3BzKXt2YXIgX3RoaXM9dGhpczshZnVuY3Rpb24oaW5zdGFuY2UsQ29uc3RydWN0b3Ipe2lmKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX0odGhpcyxQb3B1cCkscG9wdXBfcHJvcHMuc2V0KHRoaXMse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLF9zdGF0ZS5zZXQodGhpcyx7d3JpdGFibGU6ITAsdmFsdWU6eyRmaXJzdEZvY3VzYWJsZUVsZW1lbnQ6dm9pZCAwLCRsYXN0Rm9jdXNhYmxlRWxlbWVudDp2b2lkIDAsJG1vdXNlRG93bkVsZW1lbnQ6dm9pZCAwfX0pLF9jbGFzc1NlbGVjdG9ycy5zZXQodGhpcyx7d3JpdGFibGU6ITAsdmFsdWU6e2Nsb3NlQnV0dG9uOlwianMtdHYtcG9wdXBfX2Nsb3NlXCIsaGVhZGVyQ29udGFpbmVyOlwidHYtcG9wdXBfX2hlYWRlclwiLG1haW5Db250YWluZXI6XCJ0di1wb3B1cF9fY29udGVudFwiLHBvcHVwSW5uZXI6XCJqcy10di1wb3B1cF9pbm5lclwiLHNjcm9sbFN0b3A6XCJ0di1zY3JvbGwtc3RvcFwifX0pLHBvcHVwX2RlZmluZVByb3BlcnR5KHRoaXMsXCJjbGlja0JvdW5kRnVuY3Rpb25cIix2b2lkIDApLHBvcHVwX2RlZmluZVByb3BlcnR5KHRoaXMsXCJrZXlkb3duQm91bmRGdW5jdGlvblwiLHZvaWQgMCkscG9wdXBfZGVmaW5lUHJvcGVydHkodGhpcyxcIm1vdXNlZG93bkJvdW5kRnVuY3Rpb25cIix2b2lkIDApLHBvcHVwX2RlZmluZVByb3BlcnR5KHRoaXMsXCJjYXB0dXJlRWxlbWVudE9uTW91c2VEb3duXCIsKGZ1bmN0aW9uKF9yZWYpe3ZhciB0YXJnZXQ9X3JlZi50YXJnZXQ7cG9wdXBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsX3N0YXRlKS4kbW91c2VEb3duRWxlbWVudD10YXJnZXR9KSkscG9wdXBfZGVmaW5lUHJvcGVydHkodGhpcyxcImdldE1haW5Db250ZW50XCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIuY29uY2F0KHBvcHVwX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90aGlzLHBvcHVwX3Byb3BzKS5zZWxlY3RvcixcIiAuXCIpLmNvbmNhdChwb3B1cF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxfY2xhc3NTZWxlY3RvcnMpLm1haW5Db250YWluZXIpKX0pKSxwb3B1cF9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiY2xvc2VPbkVzY2FwZVByZXNzZWRcIiwoZnVuY3Rpb24oZXZlbnRIYW5kbGVyKXtldmVudEhhbmRsZXIua2V5Q29kZT09PUtleUNvZGVfRVNDQVBFJiYoZXZlbnRIYW5kbGVyLnN0b3BQcm9wYWdhdGlvbigpLGV2ZW50SGFuZGxlci5wcmV2ZW50RGVmYXVsdCgpLF90aGlzLmNsb3NlUG9wdXAoKSl9KSkscG9wdXBfZGVmaW5lUHJvcGVydHkodGhpcyxcImNsb3NlQ2xpY2tPdXRzaWRlXCIsKGZ1bmN0aW9uKG1vdXNlRXZlbnQpe3ZhciAkb3V0ZXJDb250YWluZXI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQocG9wdXBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMscG9wdXBfcHJvcHMpLnNlbGVjdG9yKSksaXNDbGlja2VkT3V0c2lkZVBvcHVwPSRvdXRlckNvbnRhaW5lcj09PW1vdXNlRXZlbnQudGFyZ2V0LGVsZW1lbnRNb3VzZURvd25Jc1NhbWU9bW91c2VFdmVudC50YXJnZXQ9PT1wb3B1cF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxfc3RhdGUpLiRtb3VzZURvd25FbGVtZW50O2lmKCRvdXRlckNvbnRhaW5lciYmcG9wdXBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMscG9wdXBfcHJvcHMpLmlzTGlnaHREaXNtaXNzRW5hYmxlZCYmaXNDbGlja2VkT3V0c2lkZVBvcHVwJiZlbGVtZW50TW91c2VEb3duSXNTYW1lKXJldHVybiBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCksbW91c2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKSxfdGhpcy5jbG9zZVBvcHVwKCksITF9KSkscG9wdXBfZGVmaW5lUHJvcGVydHkodGhpcyxcImZvY3VzUHJldmlvdXNBY3RpdmVFTGVtZW50XCIsKGZ1bmN0aW9uKCl7dmFyIHByZXZpb3VzQWN0aXZlRWxlbWVudD1wb3B1cF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxwb3B1cF9wcm9wcykucHJldmlvdXNBY3RpdmVFbGVtZW50O3ByZXZpb3VzQWN0aXZlRWxlbWVudCYmcHJldmlvdXNBY3RpdmVFbGVtZW50LmZvY3VzKCl9KSkscG9wdXBfZGVmaW5lUHJvcGVydHkodGhpcyxcIm1vdmVGb2N1c0Zyb21GaXJzdFRvTGFzdEVsZW1lbnRcIiwoZnVuY3Rpb24oZXZlbnRIYW5kbGVyKXt2YXIgJGxhc3RGb2N1c2FibGVFbGVtZW50PXBvcHVwX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90aGlzLF9zdGF0ZSkuJGxhc3RGb2N1c2FibGVFbGVtZW50O2V2ZW50SGFuZGxlci5rZXlDb2RlPT09S2V5Q29kZV9UQUImJmV2ZW50SGFuZGxlci5zaGlmdEtleSYmJGxhc3RGb2N1c2FibGVFbGVtZW50JiYoZXZlbnRIYW5kbGVyLnByZXZlbnREZWZhdWx0KCksZXZlbnRIYW5kbGVyLnN0b3BQcm9wYWdhdGlvbigpLCRsYXN0Rm9jdXNhYmxlRWxlbWVudC5mb2N1cygpKX0pKSxwb3B1cF9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwibW92ZUZvY3VzRnJvbUxhc3RUb0ZpcnN0RWxlbWVudFwiLChmdW5jdGlvbihldmVudEhhbmRsZXIpe3ZhciAkZmlyc3RGb2N1c2FibGVFbGVtZW50PXBvcHVwX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90aGlzLF9zdGF0ZSkuJGZpcnN0Rm9jdXNhYmxlRWxlbWVudDtldmVudEhhbmRsZXIua2V5Q29kZT09PUtleUNvZGVfVEFCJiYhZXZlbnRIYW5kbGVyLnNoaWZ0S2V5JiYkZmlyc3RGb2N1c2FibGVFbGVtZW50JiYoZXZlbnRIYW5kbGVyLnByZXZlbnREZWZhdWx0KCksZXZlbnRIYW5kbGVyLnN0b3BQcm9wYWdhdGlvbigpLCRmaXJzdEZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKSl9KSkscG9wdXBfZGVmaW5lUHJvcGVydHkodGhpcyxcInNldEhlYWRlckNvbnRlbnRcIiwoZnVuY3Rpb24obmV3SGVhZGVyQ29udGVudCl7dmFyICRoZWFkZXJDb250YWluZXI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQocG9wdXBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsX2NsYXNzU2VsZWN0b3JzKS5oZWFkZXJDb250YWluZXIpKTskaGVhZGVyQ29udGFpbmVyJiYoJGhlYWRlckNvbnRhaW5lci5pbm5lckhUTUw9bmV3SGVhZGVyQ29udGVudCksX3RoaXMua2VlcEZvY3VzV2l0aGluTW9kYWwoKX0pKSxwb3B1cF9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwic2V0TWFpbkNvbnRlbnRcIiwoZnVuY3Rpb24obmV3TWFpbkNvbnRlbnQpe3ZhciAkbWFpbkNvbnRhaW5lcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdChwb3B1cF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxfY2xhc3NTZWxlY3RvcnMpLm1haW5Db250YWluZXIpKTskbWFpbkNvbnRhaW5lciYmKCRtYWluQ29udGFpbmVyLmlubmVySFRNTD1uZXdNYWluQ29udGVudCksX3RoaXMua2VlcEZvY3VzV2l0aGluTW9kYWwoKX0pKTt2YXIgZ2VuZXJhdGVkVWlkPWdlbmVyYXRlVWlkKCksZGVmYXVsdFZhbHVlcz17Y2xhc3NMaXN0OltdLGNsb3NlQ2FsbGJhY2s6ZnVuY3Rpb24oKXtyZXR1cm57fX0saXNMaWdodERpc21pc3NFbmFibGVkOiEwLHNlbGVjdG9yOlwianMtcG9wdXAtXCIuY29uY2F0KGdlbmVyYXRlZFVpZCksaGVhZGVyU2VsZWN0b3I6XCJqcy1wb3B1cC1oZWFkZXItXCIuY29uY2F0KGdlbmVyYXRlZFVpZCksbWFpblNlbGVjdG9yOlwianMtcG9wdXAtbWFpbi1cIi5jb25jYXQoZ2VuZXJhdGVkVWlkKSxvcGVuQ2FsbGJhY2s6ZnVuY3Rpb24oKXtyZXR1cm57fX0scHJldmlvdXNBY3RpdmVFbGVtZW50OmRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9OyFmdW5jdGlvbihyZWNlaXZlcixwcml2YXRlTWFwLHZhbHVlKXt2YXIgZGVzY3JpcHRvcj1wcml2YXRlTWFwLmdldChyZWNlaXZlcik7aWYoIWRlc2NyaXB0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBzZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7aWYoZGVzY3JpcHRvci5zZXQpZGVzY3JpcHRvci5zZXQuY2FsbChyZWNlaXZlcix2YWx1ZSk7ZWxzZXtpZighZGVzY3JpcHRvci53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZFwiKTtkZXNjcmlwdG9yLnZhbHVlPXZhbHVlfX0odGhpcyxwb3B1cF9wcm9wcyxmdW5jdGlvbih0YXJnZXQpe2Zvcih2YXIgaT0xO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspe3ZhciBzb3VyY2U9bnVsbCE9YXJndW1lbnRzW2ldP2FyZ3VtZW50c1tpXTp7fTtpJTI/cG9wdXBfb3duS2V5cyhPYmplY3Qoc291cmNlKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oa2V5KXtwb3B1cF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsa2V5LHNvdXJjZVtrZXldKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk6cG9wdXBfb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaCgoZnVuY3Rpb24oa2V5KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LGtleSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSxrZXkpKX0pKX1yZXR1cm4gdGFyZ2V0fSh7fSxkZWZhdWx0VmFsdWVzLHt9LHByb3BzKSl9dmFyIENvbnN0cnVjdG9yLHByb3RvUHJvcHMsc3RhdGljUHJvcHM7cmV0dXJuIENvbnN0cnVjdG9yPVBvcHVwLChwcm90b1Byb3BzPVt7a2V5OlwiY29tcG9uZW50RGlkTW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBvcGVuQ2FsbGJhY2s9cG9wdXBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxwb3B1cF9wcm9wcykub3BlbkNhbGxiYWNrLCRjbG9zZUJ1dHRvbj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdChwb3B1cF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9jbGFzc1NlbGVjdG9ycykuY2xvc2VCdXR0b24pKTtvcGVuQ2FsbGJhY2soKSwkY2xvc2VCdXR0b24mJiRjbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLmNsb3NlUG9wdXAuYmluZCh0aGlzKSksZG9jdW1lbnQuYm9keSYmZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwidHYtc2Nyb2xsLXN0b3BcIiksdGhpcy5jbGlja0JvdW5kRnVuY3Rpb249dGhpcy5jbG9zZUNsaWNrT3V0c2lkZS5iaW5kKHRoaXMpLHRoaXMubW91c2Vkb3duQm91bmRGdW5jdGlvbj10aGlzLmNhcHR1cmVFbGVtZW50T25Nb3VzZURvd24uYmluZCh0aGlzKSx0aGlzLmtleWRvd25Cb3VuZEZ1bmN0aW9uPXRoaXMuY2xvc2VPbkVzY2FwZVByZXNzZWQuYmluZCh0aGlzKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy5jbGlja0JvdW5kRnVuY3Rpb24pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsdGhpcy5tb3VzZWRvd25Cb3VuZEZ1bmN0aW9uKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIix0aGlzLmtleWRvd25Cb3VuZEZ1bmN0aW9uKSx0aGlzLmtlZXBGb2N1c1dpdGhpbk1vZGFsKCl9fSx7a2V5OlwiY2xvc2VQb3B1cFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyICRwb3B1cD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdChwb3B1cF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLHBvcHVwX3Byb3BzKS5zZWxlY3RvcikpO2RvY3VtZW50LmJvZHkmJmRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcInR2LXNjcm9sbC1zdG9wXCIpLCRwb3B1cCYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLmNsaWNrQm91bmRGdW5jdGlvbiksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIix0aGlzLm1vdXNlZG93bkJvdW5kRnVuY3Rpb24pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHRoaXMua2V5ZG93bkJvdW5kRnVuY3Rpb24pLCRwb3B1cC5yZW1vdmUoKSxwb3B1cF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLHBvcHVwX3Byb3BzKS5wcmV2aW91c0FjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmcG9wdXBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxwb3B1cF9wcm9wcykucHJldmlvdXNBY3RpdmVFbGVtZW50LmZvY3VzKCkscG9wdXBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxwb3B1cF9wcm9wcykuY2xvc2VDYWxsYmFjaygpKX19LHtrZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBfY2xhc3NQcml2YXRlRmllbGRHZXQ2PXBvcHVwX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMscG9wdXBfcHJvcHMpLF9jbGFzc1ByaXZhdGVGaWVsZEdldDc9X2NsYXNzUHJpdmF0ZUZpZWxkR2V0Ni5jbGFzc0xpc3QsY2xhc3NMaXN0PXZvaWQgMD09PV9jbGFzc1ByaXZhdGVGaWVsZEdldDc/W106X2NsYXNzUHJpdmF0ZUZpZWxkR2V0NyxoZWFkZXJDb250ZW50PV9jbGFzc1ByaXZhdGVGaWVsZEdldDYuaGVhZGVyQ29udGVudCxtYWluQ29udGVudD1fY2xhc3NQcml2YXRlRmllbGRHZXQ2Lm1haW5Db250ZW50LF9jbGFzc1ByaXZhdGVGaWVsZEdldDg9X2NsYXNzUHJpdmF0ZUZpZWxkR2V0Ni5zZWxlY3RvcixzZWxlY3Rvcj12b2lkIDA9PT1fY2xhc3NQcml2YXRlRmllbGRHZXQ4P1wiXCIuY29uY2F0KHBvcHVwX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMscG9wdXBfcHJvcHMpLnNlbGVjdG9yKTpfY2xhc3NQcml2YXRlRmllbGRHZXQ4O3BvcHVwX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMscG9wdXBfcHJvcHMpLnNlbGVjdG9yfHwocG9wdXBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxwb3B1cF9wcm9wcykuc2VsZWN0b3I9c2VsZWN0b3IpO3ZhciBIVE1MPSdcXG4gICAgPGRpdiBjbGFzcz1cInR2LXBvcHVwICcuY29uY2F0KHNlbGVjdG9yLFwiIFwiKS5jb25jYXQoY2xhc3NMaXN0LmpvaW4oXCIgXCIpLCdcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVwidHYtcG9wdXBfX2lubmVyICcpLmNvbmNhdChwb3B1cF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9jbGFzc1NlbGVjdG9ycykucG9wdXBJbm5lciwnXCJcXG4gICAgICAgIG9wZW5cXG4gICAgICAgIHJvbGU9XCJkaWFsb2dcIlxcbiAgICAgICAgYXJpYS1tb2RhbD1cInRydWVcIlxcbiAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwiJykuY29uY2F0KHBvcHVwX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMscG9wdXBfcHJvcHMpLmhlYWRlclNlbGVjdG9yLCdcIlxcbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT1cIicpLmNvbmNhdChwb3B1cF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLHBvcHVwX3Byb3BzKS5tYWluU2VsZWN0b3IsJ1wiXFxuICAgICAgICB0YWJpbmRleD1cIi0xXCI+XFxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwidHYtcG9wdXBfX2ljb24tY2xvc2VcXG4gICAgICAgICAgZmxleCBmbGV4LS1qdXN0aWZ5LWNlbnRlclxcbiAgICAgICAgICBmbGV4LS1hbGlnbi1jZW50ZXIgJykuY29uY2F0KHBvcHVwX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX2NsYXNzU2VsZWN0b3JzKS5jbG9zZUJ1dHRvbiwnXCI+XFxuICAgICAgICAgICcpLmNvbmNhdChpY29uQ3Jvc3NMaWdodCwnXFxuICAgICAgICA8L2J1dHRvbj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XCInKS5jb25jYXQocG9wdXBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxfY2xhc3NTZWxlY3RvcnMpLmhlYWRlckNvbnRhaW5lciwnXCJcXG4gICAgICAgICAgaWQ9XCInKS5jb25jYXQocG9wdXBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxwb3B1cF9wcm9wcykuaGVhZGVyU2VsZWN0b3IsJ1wiXFxuICAgICAgICA+XFxuICAgICAgICAgICcpLmNvbmNhdChoZWFkZXJDb250ZW50LCdcXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdlxcbiAgICAgICAgICBjbGFzcz1cIicpLmNvbmNhdChwb3B1cF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLF9jbGFzc1NlbGVjdG9ycykubWFpbkNvbnRhaW5lciwnXCJcXG4gICAgICAgICAgaWQ9XCInKS5jb25jYXQocG9wdXBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxwb3B1cF9wcm9wcykubWFpblNlbGVjdG9yLCdcIlxcbiAgICAgICAgPlxcbiAgICAgICAgICAnKS5jb25jYXQobWFpbkNvbnRlbnQsXCJcXG4gICAgICAgIDwvZGl2PlxcbiAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cIik7ZG9jdW1lbnQuYm9keSYmZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEhUTUwoXCJiZWZvcmVlbmRcIixIVE1MKSx0aGlzLmNvbXBvbmVudERpZE1vdW50KCl9fSx7a2V5Olwia2VlcEZvY3VzV2l0aGluTW9kYWxcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciAkbW9kYWxFbGVtZW50PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIuY29uY2F0KHBvcHVwX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMscG9wdXBfcHJvcHMpLnNlbGVjdG9yKSk7aWYoJG1vZGFsRWxlbWVudCl7dmFyICQkYWxsRm9jdXNhYmxlQW5kVmlzaWJsZUVsZW1lbnRzPV90b0NvbnN1bWFibGVBcnJheSgkbW9kYWxFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1xcbiAgICAgIGFbaHJlZl06bm90KFtkaXNhYmxlZF0pLFxcbiAgICAgIGJ1dHRvbjpub3QoW2Rpc2FibGVkXSksXFxuICAgICAgdGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pLFxcbiAgICAgIGlucHV0W3R5cGU9XCJ0ZXh0XCJdOm5vdChbZGlzYWJsZWRdKSxcXG4gICAgICBpbnB1dFt0eXBlPVwicmFkaW9cIl06bm90KFtkaXNhYmxlZF0pLFxcbiAgICAgIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpub3QoW2Rpc2FibGVkXSksXFxuICAgICAgc2VsZWN0Om5vdChbZGlzYWJsZWRdKSxcXG4gICAgICBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSlcXG4gICAgJykpLmZpbHRlcigoZnVuY3Rpb24oJGVsZW1lbnQpe3JldHVybiAkZWxlbWVudC5vZmZzZXRXaWR0aD4wJiYkZWxlbWVudC5vZmZzZXRIZWlnaHQ+MH0pKS5maWx0ZXIoKGZ1bmN0aW9uKCRlbGVtZW50KXtpZigkZWxlbWVudC5vZmZzZXRXaWR0aD4wJiYkZWxlbWVudC5vZmZzZXRIZWlnaHQ+MClyZXR1cm4hMH0pKTtpZigkJGFsbEZvY3VzYWJsZUFuZFZpc2libGVFbGVtZW50cy5sZW5ndGgpe3BvcHVwX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX3N0YXRlKS4kZmlyc3RGb2N1c2FibGVFbGVtZW50PSQkYWxsRm9jdXNhYmxlQW5kVmlzaWJsZUVsZW1lbnRzWzBdLHBvcHVwX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX3N0YXRlKS4kbGFzdEZvY3VzYWJsZUVsZW1lbnQ9JCRhbGxGb2N1c2FibGVBbmRWaXNpYmxlRWxlbWVudHNbJCRhbGxGb2N1c2FibGVBbmRWaXNpYmxlRWxlbWVudHMubGVuZ3RoLTFdO3ZhciBfY2xhc3NQcml2YXRlRmllbGRHZXQ5PXBvcHVwX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsX3N0YXRlKSwkZmlyc3RGb2N1c2FibGVFbGVtZW50PV9jbGFzc1ByaXZhdGVGaWVsZEdldDkuJGZpcnN0Rm9jdXNhYmxlRWxlbWVudCwkbGFzdEZvY3VzYWJsZUVsZW1lbnQ9X2NsYXNzUHJpdmF0ZUZpZWxkR2V0OS4kbGFzdEZvY3VzYWJsZUVsZW1lbnQ7JGxhc3RGb2N1c2FibGVFbGVtZW50JiYkbGFzdEZvY3VzYWJsZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmJGxhc3RGb2N1c2FibGVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsdGhpcy5tb3ZlRm9jdXNGcm9tTGFzdFRvRmlyc3RFbGVtZW50LmJpbmQodGhpcykpLCRmaXJzdEZvY3VzYWJsZUVsZW1lbnQmJiRmaXJzdEZvY3VzYWJsZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmJGZpcnN0Rm9jdXNhYmxlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHRoaXMubW92ZUZvY3VzRnJvbUZpcnN0VG9MYXN0RWxlbWVudC5iaW5kKHRoaXMpKX19fX1dKSYmcG9wdXBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUscHJvdG9Qcm9wcyksc3RhdGljUHJvcHMmJnBvcHVwX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3Isc3RhdGljUHJvcHMpLFBvcHVwfSgpLHBvcHVwX3Byb3BzPW5ldyBXZWFrTWFwLF9zdGF0ZT1uZXcgV2Vha01hcCxfY2xhc3NTZWxlY3RvcnM9bmV3IFdlYWtNYXA7dmFyIG9iaixrZXksdmFsdWUsUG9wdXBBdXRvbG9hZGVyPWZ1bmN0aW9uIFBvcHVwQXV0b2xvYWRlcigpeyFmdW5jdGlvbihpbnN0YW5jZSxDb25zdHJ1Y3Rvcil7aWYoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLFBvcHVwQXV0b2xvYWRlcil9O3ZhbHVlPWZ1bmN0aW9uKCl7ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5qcy1wb3B1cC1oZWFkZXJcIikuZm9yRWFjaCgoZnVuY3Rpb24oJGNvbnRhaW5lcil7bmV3IHBvcHVwX1BvcHVwKHskY29udGFpbmVyOiRjb250YWluZXIsbWFpbkNvbnRlbnQ6XCJDbGljayBtZVwiLGhlYWRlckNvbnRlbnQ6XCJIRUxMTyBXT1JMRFwifSkucmVuZGVyKCl9KSl9LChrZXk9XCJsb2FkXCIpaW4ob2JqPVBvcHVwQXV0b2xvYWRlcik/T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaixrZXkse3ZhbHVlOnZhbHVlLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6b2JqW2tleV09dmFsdWU7X193ZWJwYWNrX3JlcXVpcmVfXygxNjIpLF9fd2VicGFja19yZXF1aXJlX18oMTY0KTt2YXIgZnVzZT1fX3dlYnBhY2tfcmVxdWlyZV9fKDE1MSk7ZnVuY3Rpb24gY2hpcHNfbGlzdF9vd25LZXlzKG9iamVjdCxlbnVtZXJhYmxlT25seSl7dmFyIGtleXM9T2JqZWN0LmtleXMob2JqZWN0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgc3ltYm9scz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7ZW51bWVyYWJsZU9ubHkmJihzeW1ib2xzPXN5bWJvbHMuZmlsdGVyKChmdW5jdGlvbihzeW0pe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCxzeW0pLmVudW1lcmFibGV9KSkpLGtleXMucHVzaC5hcHBseShrZXlzLHN5bWJvbHMpfXJldHVybiBrZXlzfWZ1bmN0aW9uIGNoaXBzX2xpc3RfdG9Db25zdW1hYmxlQXJyYXkoYXJyKXtyZXR1cm4gZnVuY3Rpb24oYXJyKXtpZihBcnJheS5pc0FycmF5KGFycikpcmV0dXJuIGNoaXBzX2xpc3RfYXJyYXlMaWtlVG9BcnJheShhcnIpfShhcnIpfHxmdW5jdGlvbihpdGVyKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKXJldHVybiBBcnJheS5mcm9tKGl0ZXIpfShhcnIpfHxmdW5jdGlvbihvLG1pbkxlbil7aWYoIW8pcmV0dXJuO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBvKXJldHVybiBjaGlwc19saXN0X2FycmF5TGlrZVRvQXJyYXkobyxtaW5MZW4pO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LC0xKTtcIk9iamVjdFwiPT09biYmby5jb25zdHJ1Y3RvciYmKG49by5jb25zdHJ1Y3Rvci5uYW1lKTtpZihcIk1hcFwiPT09bnx8XCJTZXRcIj09PW4pcmV0dXJuIEFycmF5LmZyb20obik7aWYoXCJBcmd1bWVudHNcIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKXJldHVybiBjaGlwc19saXN0X2FycmF5TGlrZVRvQXJyYXkobyxtaW5MZW4pfShhcnIpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIGNoaXBzX2xpc3RfYXJyYXlMaWtlVG9BcnJheShhcnIsbGVuKXsobnVsbD09bGVufHxsZW4+YXJyLmxlbmd0aCkmJihsZW49YXJyLmxlbmd0aCk7Zm9yKHZhciBpPTAsYXJyMj1uZXcgQXJyYXkobGVuKTtpPGxlbjtpKyspYXJyMltpXT1hcnJbaV07cmV0dXJuIGFycjJ9ZnVuY3Rpb24gY2hpcHNfbGlzdF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCxwcm9wcyl7Zm9yKHZhciBpPTA7aTxwcm9wcy5sZW5ndGg7aSsrKXt2YXIgZGVzY3JpcHRvcj1wcm9wc1tpXTtkZXNjcmlwdG9yLmVudW1lcmFibGU9ZGVzY3JpcHRvci5lbnVtZXJhYmxlfHwhMSxkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBkZXNjcmlwdG9yJiYoZGVzY3JpcHRvci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCxkZXNjcmlwdG9yLmtleSxkZXNjcmlwdG9yKX19ZnVuY3Rpb24gY2hpcHNfbGlzdF9kZWZpbmVQcm9wZXJ0eShvYmosa2V5LHZhbHVlKXtyZXR1cm4ga2V5IGluIG9iaj9PYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLGtleSx7dmFsdWU6dmFsdWUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpvYmpba2V5XT12YWx1ZSxvYmp9ZnVuY3Rpb24gY2hpcHNfbGlzdF9jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlcixwcml2YXRlTWFwKXt2YXIgZGVzY3JpcHRvcj1wcml2YXRlTWFwLmdldChyZWNlaXZlcik7aWYoIWRlc2NyaXB0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7cmV0dXJuIGRlc2NyaXB0b3IuZ2V0P2Rlc2NyaXB0b3IuZ2V0LmNhbGwocmVjZWl2ZXIpOmRlc2NyaXB0b3IudmFsdWV9dmFyIGNoaXBzX2xpc3RfQ2hpcHNMaXN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gQ2hpcHNMaXN0KHByb3BzKXt2YXIgX3RoaXM9dGhpcztpZihmdW5jdGlvbihpbnN0YW5jZSxDb25zdHJ1Y3Rvcil7aWYoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLENoaXBzTGlzdCksY2hpcHNfbGlzdF9zdGF0ZS5zZXQodGhpcyx7d3JpdGFibGU6ITAsdmFsdWU6eyRhY3RpdmVEZXNjZW5kZW50OnZvaWQgMCwkbGlzdGJveDp2b2lkIDAsY2hpcHM6W10sZmlsdGVyOm5ldyBCZWhhdmlvclN1YmplY3QoXCJcIiksZmlsdGVyQWN0aXZlOiExLGhhc1Jlc3VsdHM6ITEsc2VsZWN0ZWRJdGVtczpbXX19KSxfY2xhc3NTZWxlY3Rvci5zZXQodGhpcyx7d3JpdGFibGU6ITAsdmFsdWU6e2FjdGl2ZUNsYXNzOlwidHYtY2hpcF9fYWN0aXZlXCIsY2hpcENsYXNzOlwidHYtY2hpcFwiLGNoaXBJdGVtOlwidHYtY2hpcHMtcmVzdWx0c19faXRlbVwiLGNoaXBzQ2xhc3M6XCJ0di1jaGlwc1wiLGNvbnRhaW5lcjpcInR2LWNoaXBzLWNvbnRhaW5lclwiLGNvbnRhaW5lck5vUmVzdWx0czpcInR2LWNoaXBzLWNvbnRhaW5lci0tbm8tcmVzdWx0c1wiLGZpbHRlckFjdGl2ZTpcInR2LWNoaXBzLWNvbnRhaW5lci0tZmlsdGVyLWFjdGl2ZVwiLGZpcnN0R3JvdXA6XCJ0di1jaGlwcy1yZXN1bHRzX19pdGVtLS1maXJzdFwiLGlubmVyQ29udGVudDpcInR2LWNoaXBfX2lubmVyLWNvbnRlbnRcIixpdGVtSGlkZGVuOlwidHYtY2hpcHMtcmVzdWx0c19faXRlbS0taGlkZGVuXCIsbm9SZXN1bHRzOlwidHYtY2hpcHMtbm8tcmVzdWx0c1wiLG5vUmVzdWx0c1RleHQ6XCJ0di1jaGlwcy1uby1yZXN1bHRzX190ZXh0XCIscmVzdWx0czpcInR2LWNoaXBzLXJlc3VsdHNcIixzZWxlY3RBbGw6XCJ0di1jaGlwcy1yZXN1bHRzX19pdGVtLS1zZWxlY3QtYWxsXCIsc2VsZWN0ZWQ6XCJ0di1jaGlwcy1yZXN1bHRzX19pdGVtLS1zZWxlY3RlZFwiLHNlbGVjdEVmZmVjdDpcInR2LWNoaXBzLXJlc3VsdHNfX2l0ZW0tLXNlbGVjdC1lZmZlY3RcIn19KSxjaGlwc19saXN0X3Byb3BzLnNldCh0aGlzLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxfcmVnZXhDbGVhci5zZXQodGhpcyx7d3JpdGFibGU6ITAsdmFsdWU6bmV3IFJlZ0V4cChcIi9bXmEtekEtWjAtOS0rKi9zXS9cIixcImdcIil9KSxjaGlwc19saXN0X2RlZmluZVByb3BlcnR5KHRoaXMsXCJjb21wb25lbnREaWRNb3VudFwiLChmdW5jdGlvbigpe3ZhciBzZWxlY3Rvcj1jaGlwc19saXN0X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90aGlzLGNoaXBzX2xpc3RfcHJvcHMpLnNlbGVjdG9yLCRjb250YWluZXI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQoc2VsZWN0b3IpKSwkcmVzdWx0cz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdChzZWxlY3RvcixcIiAuXCIpLmNvbmNhdChjaGlwc19saXN0X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90aGlzLF9jbGFzc1NlbGVjdG9yKS5yZXN1bHRzKSk7aWYoJGNvbnRhaW5lciYmJHJlc3VsdHMpe2NoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsY2hpcHNfbGlzdF9zdGF0ZSkuJGxpc3Rib3g9JHJlc3VsdHMsY2hpcHNfbGlzdF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxjaGlwc19saXN0X3N0YXRlKS5jaGlwcy5mb3JFYWNoKChmdW5jdGlvbihjaGlwKXtjaGlwLnNlbGVjdGVkPWNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsY2hpcHNfbGlzdF9zdGF0ZSkuc2VsZWN0ZWRJdGVtcy5pbmNsdWRlcyhjaGlwLmlubmVyQ29udGVudCl9KSksJHJlc3VsdHMuaW5uZXJIVE1MPV90aGlzLnJlbmRlckNoaXBJdGVtcygpLGNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsY2hpcHNfbGlzdF9zdGF0ZSkuY2hpcHMuZmlsdGVyKChmdW5jdGlvbihjaGlwKXtyZXR1cm4gY2hpcC5zZWxlY3RlZH0pKS5mb3JFYWNoKChmdW5jdGlvbihjaGlwKXt2YXIgJHNlbGVjdGVkSXRlbT0kY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWluZGV4PVwiJy5jb25jYXQoY2hpcC5pbmRleCwnXCJdJykpOyRzZWxlY3RlZEl0ZW0mJiRzZWxlY3RlZEl0ZW0uaWQmJmNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsY2hpcHNfbGlzdF9zdGF0ZSkuJGxpc3Rib3gmJl90aGlzLmZvY3VzSXRlbSgkc2VsZWN0ZWRJdGVtKX0pKTt2YXIgJG5vUmVzdWx0PSRjb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQoY2hpcHNfbGlzdF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxfY2xhc3NTZWxlY3Rvcikubm9SZXN1bHRzKSk7aWYoJG5vUmVzdWx0KXt2YXIgYnRuPW5ldyBidXR0b25fQnV0dG9uKHskY29udGFpbmVyOiRub1Jlc3VsdCxjbGFzc0xpc3Q6W1widHYtY2hpcHMtbm8tcmVzdWx0c19fYnV0dG9uXCJdLGNsaWNrRm46ZnVuY3Rpb24oZXZlbnRIYW5kbGVyKXtldmVudEhhbmRsZXIuc3RvcFByb3BhZ2F0aW9uKCl9LGlubmVyQ29udGVudDpcIlJlc2V0IHNlYXJjaFwiLHBvc2l0aW9uOlwiYmVmb3JlZW5kXCJ9KTtidG4ucmVuZGVyKCk7dmFyICRyZXNldEJ1dHRvbj0kbm9SZXN1bHQucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQoYnRuLmdldFNlbGVjdG9yKCkpKTskcmVzZXRCdXR0b24mJiRyZXNldEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixfdGhpcy5yZXNldFNlYXJjaC5iaW5kKF90aGlzKSl9fV90aGlzLnJlZ2lzdGVyRXZlbnRzKCl9KSksY2hpcHNfbGlzdF9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiZ2V0U2VsZWN0b3JcIiwoZnVuY3Rpb24oKXtyZXR1cm4gY2hpcHNfbGlzdF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxjaGlwc19saXN0X3Byb3BzKS5zZWxlY3Rvcn0pKSxjaGlwc19saXN0X2RlZmluZVByb3BlcnR5KHRoaXMsXCJjaGVja0lmSGFzUmVzdWx0c1wiLChmdW5jdGlvbigpe3JldHVybiEwPT09Y2hpcHNfbGlzdF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxjaGlwc19saXN0X3N0YXRlKS5oYXNSZXN1bHRzfSkpLGNoaXBzX2xpc3RfZGVmaW5lUHJvcGVydHkodGhpcyxcImZpbHRlckNoaXBzXCIsKGZ1bmN0aW9uKGZpbHRlclN0cmluZyl7Y2hpcHNfbGlzdF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxjaGlwc19saXN0X3N0YXRlKS5oYXNSZXN1bHRzPSExLGNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsY2hpcHNfbGlzdF9zdGF0ZSkuZmlsdGVyLm5leHQoZmlsdGVyU3RyaW5nKSxjaGlwc19saXN0X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90aGlzLGNoaXBzX2xpc3Rfc3RhdGUpLmZpbHRlckFjdGl2ZT0wIT09ZmlsdGVyU3RyaW5nLmxlbmd0aDt2YXIgJGNvbnRhaW5lcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdChjaGlwc19saXN0X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90aGlzLGNoaXBzX2xpc3RfcHJvcHMpLnNlbGVjdG9yKSk7aWYoX3RoaXMuc2V0RmlsdGVyU3RhdHVzKCksJGNvbnRhaW5lcil7dmFyIGZpbHRlclN0cmluZ0xvd2VyPV90aGlzLmNsZWFyU3RyaW5nT2ZTcGVjaWFsQ2hhcihmaWx0ZXJTdHJpbmcpLGZ1enp5U2VhcmNoUmVzdWx0cz1uZXcgZnVzZShjaGlwc19saXN0X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90aGlzLGNoaXBzX2xpc3Rfc3RhdGUpLmNoaXBzLHt0aHJlc2hvbGQ6LjM4LGxvY2F0aW9uOjAsZGlzdGFuY2U6MzUwLGtleXM6W1wiY2xlYXJlZFN0cmluZ1wiXX0pLnNlYXJjaChmaWx0ZXJTdHJpbmdMb3dlcik7Y2hpcHNfbGlzdF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxjaGlwc19saXN0X3N0YXRlKS5oYXNSZXN1bHRzPSExLGNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsY2hpcHNfbGlzdF9zdGF0ZSkuY2hpcHMuZm9yRWFjaCgoZnVuY3Rpb24oY2hpcCxpbmRleCl7aWYoMCE9PWluZGV4KXtjaGlwLnN0cmljdD0hMTt2YXIgZnV6enlTZWFyY2hSZXN1bHQ9ZnV6enlTZWFyY2hSZXN1bHRzLmZpbmQoKGZ1bmN0aW9uKHJlc3VsdCl7cmV0dXJuIHJlc3VsdC5pbmRleD09PWluZGV4fSkpO2NoaXAuY2xlYXJlZFN0cmluZy5zdGFydHNXaXRoKGZpbHRlclN0cmluZ0xvd2VyKT8oY2hpcC5oaWRkZW49ITEsY2hpcC5zdHJpY3Q9ITAsY2hpcHNfbGlzdF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxjaGlwc19saXN0X3N0YXRlKS5oYXNSZXN1bHRzPSEwKTotMSE9PWNoaXAuY2xlYXJlZFN0cmluZy5pbmRleE9mKGZpbHRlclN0cmluZ0xvd2VyKT8oY2hpcC5oaWRkZW49ITEsY2hpcHNfbGlzdF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxjaGlwc19saXN0X3N0YXRlKS5oYXNSZXN1bHRzPSEwKTp2b2lkIDAhPT1mdXp6eVNlYXJjaFJlc3VsdD8oY2hpcC5oaWRkZW49ITEsY2hpcHNfbGlzdF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxjaGlwc19saXN0X3N0YXRlKS5oYXNSZXN1bHRzPSEwKTpjaGlwLmhpZGRlbj0hMH19KSk7dmFyICRyZXN1bHRzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIuY29uY2F0KGNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsY2hpcHNfbGlzdF9wcm9wcykuc2VsZWN0b3IsXCIgLlwiKS5jb25jYXQoY2hpcHNfbGlzdF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxfY2xhc3NTZWxlY3RvcikucmVzdWx0cykpO2NoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsY2hpcHNfbGlzdF9zdGF0ZSkuaGFzUmVzdWx0cz8kY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoY2hpcHNfbGlzdF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxfY2xhc3NTZWxlY3RvcikuY29udGFpbmVyTm9SZXN1bHRzKTokY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoY2hpcHNfbGlzdF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxfY2xhc3NTZWxlY3RvcikuY29udGFpbmVyTm9SZXN1bHRzKSwkcmVzdWx0cyYmKCRyZXN1bHRzLmlubmVySFRNTD1fdGhpcy5yZW5kZXJDaGlwSXRlbXMoKSl9fSkpLGNoaXBzX2xpc3RfZGVmaW5lUHJvcGVydHkodGhpcyxcImFjdGl2ZURlc2NlbmRhbnRcIiwoZnVuY3Rpb24oKXt2YXIgJGxpc3Rib3g9Y2hpcHNfbGlzdF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxjaGlwc19saXN0X3N0YXRlKS4kbGlzdGJveDtpZigkbGlzdGJveCl7dmFyIGVsZW1lbnRJZD0kbGlzdGJveC5nZXRBdHRyaWJ1dGUoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIik7aWYoZWxlbWVudElkKXJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpfX0pKSxjaGlwc19saXN0X2RlZmluZVByb3BlcnR5KHRoaXMsXCJzZWxlY3REZXNjZW5kYW50XCIsKGZ1bmN0aW9uKGV2ZW50SGFuZGxlcil7dmFyICRzZWxlY3RlZERlc2NlbmRhbnQ9ZXZlbnRIYW5kbGVyLnRhcmdldC5jbG9zZXN0KFwiLlwiLmNvbmNhdChjaGlwc19saXN0X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90aGlzLGNoaXBzX2xpc3RfcHJvcHMpLnNlbGVjdG9yLFwiIC5cIikuY29uY2F0KGNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsX2NsYXNzU2VsZWN0b3IpLmNoaXBJdGVtKSk7aWYoJHNlbGVjdGVkRGVzY2VuZGFudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZcIm9wdGlvblwiPT09JHNlbGVjdGVkRGVzY2VuZGFudC5nZXRBdHRyaWJ1dGUoXCJyb2xlXCIpKXtldmVudEhhbmRsZXIuY2xpY2smJihldmVudEhhbmRsZXIucHJldmVudERlZmF1bHQoKSxldmVudEhhbmRsZXIuc3RvcFByb3BhZ2F0aW9uKCkpLF90aGlzLmZvY3VzSXRlbSgkc2VsZWN0ZWREZXNjZW5kYW50KTt2YXIgZGF0YUluZGV4PU51bWJlcigkc2VsZWN0ZWREZXNjZW5kYW50LmRhdGFzZXQuaW5kZXgpO2NoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsY2hpcHNfbGlzdF9zdGF0ZSkuY2hpcHMuZm9yRWFjaCgoZnVuY3Rpb24oY2hpcCl7Y2hpcC5zZWxlY3RlZD0hMX0pKSxjaGlwc19saXN0X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90aGlzLGNoaXBzX2xpc3Rfc3RhdGUpLmNoaXBzW2RhdGFJbmRleF0uc2VsZWN0ZWQ9ITAsX3RoaXMuc2VsZWN0SXRlbSgkc2VsZWN0ZWREZXNjZW5kYW50KSxfdGhpcy5jaGlwc1NlbGVjdGlvbkNhbGxiYWNrKCl9fSkpLGNoaXBzX2xpc3RfZGVmaW5lUHJvcGVydHkodGhpcyxcImNoZWNrS2V5UHJlc3NcIiwoZnVuY3Rpb24oa2V5RXZlbnQpe3ZhciBuZXh0SXRlbSxrZXk9a2V5RXZlbnQud2hpY2h8fGtleUV2ZW50LmtleUNvZGUsY3VycmVudEl0ZW09X3RoaXMuYWN0aXZlRGVzY2VuZGFudCgpO2lmKGN1cnJlbnRJdGVtKXN3aXRjaChrZXkpe2Nhc2UgS2V5Q29kZV9VUDpjYXNlIEtleUNvZGVfRE9XTjpjYXNlIEtleUNvZGVfUklHSFQ6Y2FzZSBLZXlDb2RlX0xFRlQ6a2V5RXZlbnQucHJldmVudERlZmF1bHQoKSwobmV4dEl0ZW09a2V5PT09S2V5Q29kZV9VUHx8a2V5PT09S2V5Q29kZV9MRUZUP2N1cnJlbnRJdGVtLnByZXZpb3VzRWxlbWVudFNpYmxpbmc6Y3VycmVudEl0ZW0ubmV4dEVsZW1lbnRTaWJsaW5nKSYmbmV4dEl0ZW0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmX3RoaXMuZm9jdXNJdGVtKG5leHRJdGVtKTticmVhaztjYXNlIEtleUNvZGVfSE9NRTprZXlFdmVudC5wcmV2ZW50RGVmYXVsdCgpLF90aGlzLmZvY3VzRmlyc3RJdGVtKCk7YnJlYWs7Y2FzZSBLZXlDb2RlX0VORDprZXlFdmVudC5wcmV2ZW50RGVmYXVsdCgpLF90aGlzLmZvY3VzTGFzdEl0ZW0oKTticmVhaztjYXNlIEtleUNvZGVfRU5URVI6Y2FzZSBLZXlDb2RlX1NQQUNFOmtleUV2ZW50LnByZXZlbnREZWZhdWx0KCksX3RoaXMuc2VsZWN0RGVzY2VuZGFudCh7dGFyZ2V0OmN1cnJlbnRJdGVtfSl9fSkpLGNoaXBzX2xpc3RfZGVmaW5lUHJvcGVydHkodGhpcyxcImNsZWFyU3RyaW5nT2ZTcGVjaWFsQ2hhclwiLChmdW5jdGlvbigpe3ZhciBpbnB1dD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06XCJcIjtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBTdHJpbmcucHJvdG90eXBlLm5vcm1hbGl6ZT9pbnB1dC50b0xvd2VyQ2FzZSgpLm5vcm1hbGl6ZShcIk5GRFwiKS5yZXBsYWNlKGNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsX3JlZ2V4Q2xlYXIpLFwiXCIpOmlucHV0LnRvTG93ZXJDYXNlKCkucmVwbGFjZShjaGlwc19saXN0X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90aGlzLF9yZWdleENsZWFyKSxcIlwiKX0pKSxjaGlwc19saXN0X2RlZmluZVByb3BlcnR5KHRoaXMsXCJyZXNldFNlYXJjaFwiLChmdW5jdGlvbigpe190aGlzLmZpbHRlckNoaXBzKFwiXCIpLGNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsY2hpcHNfbGlzdF9wcm9wcykucmVzZXRDYWxsYmFjaygpfSkpLGNoaXBzX2xpc3RfZGVmaW5lUHJvcGVydHkodGhpcyxcImNoaXBzU2VsZWN0aW9uQ2FsbGJhY2tcIiwoZnVuY3Rpb24oKXt2YXIgc2VsZWN0ZWRJdGVtcz1jaGlwc19saXN0X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90aGlzLGNoaXBzX2xpc3Rfc3RhdGUpLmNoaXBzLmZpbHRlcigoZnVuY3Rpb24oY2hpcCl7cmV0dXJuIGNoaXAuc2VsZWN0ZWR9KSkubWFwKChmdW5jdGlvbihjaGlwKXtyZXR1cm4gY2hpcC5pbm5lckNvbnRlbnR9KSk7Y2hpcHNfbGlzdF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxjaGlwc19saXN0X3Byb3BzKS5zZWxlY3RlZENhbGxiYWNrKHNlbGVjdGVkSXRlbXMpfSkpLGNoaXBzX2xpc3RfZGVmaW5lUHJvcGVydHkodGhpcyxcInJlbmRlckNoaXBJdGVtc1wiLChmdW5jdGlvbigpe3JldHVybiBjaGlwc19saXN0X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90aGlzLGNoaXBzX2xpc3Rfc3RhdGUpLmNoaXBzLm1hcCgoZnVuY3Rpb24oY2hpcCxpbmRleCl7cmV0dXJuIGNoaXAuaGlkZGVuP1wiXCI6X3RoaXMucmVuZGVyU2luZ2xlQ2hpcCh7Y2hpcDpjaGlwLGluZGV4OmluZGV4fSl9KSkuam9pbihcIlwiKX0pKSxjaGlwc19saXN0X2RlZmluZVByb3BlcnR5KHRoaXMsXCJyZW5kZXJTaW5nbGVDaGlwXCIsKGZ1bmN0aW9uKF9yZWYpe3ZhciBjaGlwPV9yZWYuY2hpcCxpbmRleD1fcmVmLmluZGV4LGlubmVyQ29udGVudD1jaGlwLmlubmVyQ29udGVudCxzZWxlY3RlZD1jaGlwLnNlbGVjdGVkLHN0cmljdD1jaGlwLnN0cmljdCxhcmlhU2VsZWN0ZWQ9c2VsZWN0ZWQ/XCJ0cnVlXCI6XCJmYWxzZVwiLHNlbGVjdEFsbENsYXNzPTA9PT1pbmRleD9jaGlwc19saXN0X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90aGlzLF9jbGFzc1NlbGVjdG9yKS5zZWxlY3RBbGw6XCJcIixoYXNTZWxlY3RlZENsYXNzPXNlbGVjdGVkP2NoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsX2NsYXNzU2VsZWN0b3IpLnNlbGVjdGVkOlwiXCI7cmV0dXJuJ1xcbiAgICAgIDxkaXZcXG4gICAgICAgICAgY2xhc3M9XCInLmNvbmNhdChjaGlwc19saXN0X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90aGlzLF9jbGFzc1NlbGVjdG9yKS5jaGlwSXRlbSxcIiBcIikuY29uY2F0KGhhc1NlbGVjdGVkQ2xhc3MsXCIgXCIpLmNvbmNhdChzZWxlY3RBbGxDbGFzcyxcIlxcbiAgICAgICAgICBcIikuY29uY2F0KHN0cmljdD9jaGlwc19saXN0X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90aGlzLF9jbGFzc1NlbGVjdG9yKS5maXJzdEdyb3VwOlwiXCIsJ1wiXFxuICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9XCInKS5jb25jYXQoYXJpYVNlbGVjdGVkLCdcIlxcbiAgICAgICAgICBpZD1cIicpLmNvbmNhdChjaGlwc19saXN0X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90aGlzLGNoaXBzX2xpc3RfcHJvcHMpLnNlbGVjdG9yLFwiLVwiKS5jb25jYXQoaW5kZXgsJ1wiXFxuICAgICAgICAgIGRhdGEtaW5kZXg9XCInKS5jb25jYXQoaW5kZXgsJ1wiXFxuICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxcbiAgICAgICAgICB0YWItaW5kZXg9XCIwXCI+XFxuICAgICAgICAgIDxkaXZcXG4gICAgICAgICAgICAgIGNsYXNzPVwiJykuY29uY2F0KGNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsX2NsYXNzU2VsZWN0b3IpLmNoaXBDbGFzcyxcIiBcIikuY29uY2F0KHNlbGVjdGVkP2NoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsX2NsYXNzU2VsZWN0b3IpLmFjdGl2ZUNsYXNzOlwiXCIsJyBcIj5cXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiJykuY29uY2F0KGNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsX2NsYXNzU2VsZWN0b3IpLmlubmVyQ29udGVudCwnXCI+JykuY29uY2F0KGlubmVyQ29udGVudCxcIjwvc3Bhbj5cXG4gICAgICAgICAgPC9kaXY+XFxuICAgICAgPC9kaXY+XCIpfSkpLGNoaXBzX2xpc3RfZGVmaW5lUHJvcGVydHkodGhpcyxcInNldEZpbHRlclN0YXR1c1wiLChmdW5jdGlvbigpe3ZhciAkY29udGFpbmVyPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIuY29uY2F0KGNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsY2hpcHNfbGlzdF9wcm9wcykuc2VsZWN0b3IpKTskY29udGFpbmVyJiYoY2hpcHNfbGlzdF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxjaGlwc19saXN0X3N0YXRlKS5maWx0ZXJBY3RpdmU/JGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKGNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsX2NsYXNzU2VsZWN0b3IpLmZpbHRlckFjdGl2ZSk6JGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKGNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsX2NsYXNzU2VsZWN0b3IpLmZpbHRlckFjdGl2ZSkpfSkpLGNoaXBzX2xpc3RfZGVmaW5lUHJvcGVydHkodGhpcyxcInJlZ2lzdGVyRXZlbnRzXCIsKGZ1bmN0aW9uKCl7dmFyICRsaXN0Ym94PWNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsY2hpcHNfbGlzdF9zdGF0ZSkuJGxpc3Rib3g7JGxpc3Rib3gmJigkbGlzdGJveC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixfdGhpcy5zZWxlY3REZXNjZW5kYW50LmJpbmQoX3RoaXMpKSwkbGlzdGJveC5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIixfdGhpcy5zZXR1cEZvY3VzLmJpbmQoX3RoaXMpKSwkbGlzdGJveC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLF90aGlzLmNoZWNrS2V5UHJlc3MuYmluZChfdGhpcykpLCRsaXN0Ym94LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsX3RoaXMuc2VsZWN0RGVzY2VuZGFudC5iaW5kKF90aGlzKSkpfSkpLGNoaXBzX2xpc3RfZGVmaW5lUHJvcGVydHkodGhpcyxcInNldHVwRm9jdXNcIiwoZnVuY3Rpb24oZXZlbnRIYW5kbGVyKXtldmVudEhhbmRsZXIudGFyZ2V0PT09Y2hpcHNfbGlzdF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxjaGlwc19saXN0X3N0YXRlKS4kbGlzdGJveCYmKF90aGlzLmFjdGl2ZURlc2NlbmRhbnQoKXx8X3RoaXMuZm9jdXNGaXJzdEl0ZW0oKSl9KSksY2hpcHNfbGlzdF9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiZ2V0U2Nyb2xsUGFyZW50XCIsKGZ1bmN0aW9uKF9yZWYyKXt2YXIgJGVsZW1lbnQ9X3JlZjIuJGVsZW1lbnQ7aWYoJGVsZW1lbnQpcmV0dXJuICRlbGVtZW50LnNjcm9sbEhlaWdodD4kZWxlbWVudC5jbGllbnRIZWlnaHQ/JGVsZW1lbnQ6JGVsZW1lbnQucGFyZW50Tm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50P190aGlzLmdldFNjcm9sbFBhcmVudCh7JGVsZW1lbnQ6JGVsZW1lbnQucGFyZW50Tm9kZX0pOnZvaWQgMH0pKSxjaGlwc19saXN0X2RlZmluZVByb3BlcnR5KHRoaXMsXCJmb2N1c0ZpcnN0SXRlbVwiLChmdW5jdGlvbigpe2lmKGNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsY2hpcHNfbGlzdF9zdGF0ZSkuJGxpc3Rib3gpe3ZhciBmaXJzdEl0ZW09Y2hpcHNfbGlzdF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxjaGlwc19saXN0X3N0YXRlKS4kbGlzdGJveC5xdWVyeVNlbGVjdG9yKCdbcm9sZT1cIm9wdGlvblwiXScpO2ZpcnN0SXRlbSYmX3RoaXMuZm9jdXNJdGVtKGZpcnN0SXRlbSl9fSkpLGNoaXBzX2xpc3RfZGVmaW5lUHJvcGVydHkodGhpcyxcInNlbGVjdEl0ZW1cIiwoZnVuY3Rpb24oJGZvY3VzRWxlbWVudCl7dmFyICRsaXN0Ym94PWNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsY2hpcHNfbGlzdF9zdGF0ZSkuJGxpc3Rib3g7JGxpc3Rib3gmJihjaGlwc19saXN0X3RvQ29uc3VtYWJsZUFycmF5KCRsaXN0Ym94LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuXCIuY29uY2F0KGNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsX2NsYXNzU2VsZWN0b3IpLnNlbGVjdGVkKSkpLmZvckVhY2goKGZ1bmN0aW9uKCRzZWxlY3RlZEl0ZW0pe3JldHVybiAkc2VsZWN0ZWRJdGVtLmNsYXNzTGlzdC5yZW1vdmUoY2hpcHNfbGlzdF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxfY2xhc3NTZWxlY3Rvcikuc2VsZWN0ZWQpfSkpLCRmb2N1c0VsZW1lbnQuY2xhc3NMaXN0LmFkZChjaGlwc19saXN0X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90aGlzLF9jbGFzc1NlbGVjdG9yKS5zZWxlY3RlZCksX3RoaXMuZm9jdXNTZWxlY3RlZCgpKX0pKSxjaGlwc19saXN0X2RlZmluZVByb3BlcnR5KHRoaXMsXCJmb2N1c0xhc3RJdGVtXCIsKGZ1bmN0aW9uKCl7dmFyICRsaXN0Ym94PWNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsY2hpcHNfbGlzdF9zdGF0ZSkuJGxpc3Rib3g7aWYoJGxpc3Rib3gpe3ZhciAkJGl0ZW1MaXN0PWNoaXBzX2xpc3RfdG9Db25zdW1hYmxlQXJyYXkoJGxpc3Rib3gucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9XCJvcHRpb25cIl0nKSk7JCRpdGVtTGlzdC5sZW5ndGgmJl90aGlzLmZvY3VzSXRlbSgkJGl0ZW1MaXN0WyQkaXRlbUxpc3QubGVuZ3RoLTFdKX19KSksY2hpcHNfbGlzdF9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiZGVmb2N1c0l0ZW1cIiwoZnVuY3Rpb24oZWxlbWVudCl7ZWxlbWVudCYmZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiZm9jdXNlZFwiKX0pKSxjaGlwc19saXN0X2RlZmluZVByb3BlcnR5KHRoaXMsXCJmb2N1c0l0ZW1cIiwoZnVuY3Rpb24oJGZvY3VzRWxlbWVudCl7dmFyICRsaXN0Ym94PWNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsY2hpcHNfbGlzdF9zdGF0ZSkuJGxpc3Rib3g7aWYoJGxpc3Rib3gpe3ZhciAkY3VycmVudEVsZW1lbnQ9X3RoaXMuYWN0aXZlRGVzY2VuZGFudCgpO190aGlzLmRlZm9jdXNJdGVtKCRjdXJyZW50RWxlbWVudCksJGZvY3VzRWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZm9jdXNlZFwiKSwkbGlzdGJveC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIiwkZm9jdXNFbGVtZW50LmlkKSxfdGhpcy5tb3ZlRWxlbWVudEludG9WaWV3KCRmb2N1c0VsZW1lbnQpLCRmb2N1c0VsZW1lbnQuZm9jdXMoKX19KSksY2hpcHNfbGlzdF9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiZm9jdXNTZWxlY3RlZFwiLChmdW5jdGlvbigpe3ZhciAkZmlyc3RTZWxlY3RlZEl0ZW09ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQoY2hpcHNfbGlzdF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxjaGlwc19saXN0X3Byb3BzKS5zZWxlY3RvcixcIiAuXCIpLmNvbmNhdChjaGlwc19saXN0X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90aGlzLF9jbGFzc1NlbGVjdG9yKS5zZWxlY3RlZCkpOyRmaXJzdFNlbGVjdGVkSXRlbSYmX3RoaXMubW92ZUVsZW1lbnRJbnRvVmlldygkZmlyc3RTZWxlY3RlZEl0ZW0pfSkpLGNoaXBzX2xpc3RfZGVmaW5lUHJvcGVydHkodGhpcyxcInJlbmRlck5vUmVzdWx0XCIsKGZ1bmN0aW9uKCl7cmV0dXJuJ1xcbiAgPGRpdiBjbGFzcz1cIicuY29uY2F0KGNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsX2NsYXNzU2VsZWN0b3IpLm5vUmVzdWx0cywnIGZsZXgtLWFsaWduLWNlbnRlclwiPlxcbiAgICAnKS5jb25jYXQoaWNvblNlYXJjaCwnXFxuICAgIDxoMiBjbGFzcz1cIicpLmNvbmNhdChjaGlwc19saXN0X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90aGlzLF9jbGFzc1NlbGVjdG9yKS5ub1Jlc3VsdHNUZXh0LCdcIiA+JykuY29uY2F0KGNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsY2hpcHNfbGlzdF9wcm9wcykubm9SZXN1bHRzVGV4dCxcIjwvaDI+XFxuICA8L2Rpdj5cIil9KSksY2hpcHNfbGlzdF9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicmVuZGVyXCIsKGZ1bmN0aW9uKCl7dmFyIF9jbGFzc1ByaXZhdGVGaWVsZEdldDg9Y2hpcHNfbGlzdF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxjaGlwc19saXN0X3Byb3BzKSxjbGFzc0xpc3Q9X2NsYXNzUHJpdmF0ZUZpZWxkR2V0OC5jbGFzc0xpc3QsJGNvbnRhaW5lcj1fY2xhc3NQcml2YXRlRmllbGRHZXQ4LiRjb250YWluZXIsbGFiZWw9X2NsYXNzUHJpdmF0ZUZpZWxkR2V0OC5sYWJlbCxwb3NpdGlvbj1fY2xhc3NQcml2YXRlRmllbGRHZXQ4LnBvc2l0aW9uLHNlbGVjdG9yPV9jbGFzc1ByaXZhdGVGaWVsZEdldDguc2VsZWN0b3IsX2NsYXNzUHJpdmF0ZUZpZWxkR2V0OT1jaGlwc19saXN0X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90aGlzLF9jbGFzc1NlbGVjdG9yKSxjb250YWluZXI9X2NsYXNzUHJpdmF0ZUZpZWxkR2V0OS5jb250YWluZXIscmVzdWx0cz1fY2xhc3NQcml2YXRlRmllbGRHZXQ5LnJlc3VsdHMsSFRNTD0nXFxuICAgIDxkaXYgY2xhc3M9XCInLmNvbmNhdChjb250YWluZXIsXCIgXCIpLmNvbmNhdChzZWxlY3RvcixcIiBcIikuY29uY2F0KGNsYXNzTGlzdC5qb2luKFwiIFwiKSwnXCI+XFxuICAgICAgICA8ZGl2IGlkPVwiJykuY29uY2F0KHNlbGVjdG9yLCdcIlxcbiAgICAgICAgICAgIGNsYXNzPVwiJykuY29uY2F0KHJlc3VsdHMsJyBmbGV4XCJcXG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCInKS5jb25jYXQobGFiZWwsJ1wiXFxuICAgICAgICAgICAgcm9sZT1cImxpc3Rib3hcIj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgJykuY29uY2F0KF90aGlzLnJlbmRlck5vUmVzdWx0KCksXCJcXG4gICAgPC9kaXY+XCIpOyRjb250YWluZXImJnBvc2l0aW9uPyRjb250YWluZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKHBvc2l0aW9uLEhUTUwpOiRjb250YWluZXImJigkY29udGFpbmVyLmlubmVySFRNTD1IVE1MKSxfdGhpcy5jb21wb25lbnREaWRNb3VudCgpfSkpLCEocHJvcHMuJGNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSl0aHJvdyBuZXcgRXJyb3IoXCJOZWVkIGEgcmVmZXJlbmNlIGVsZW1lbnQgZm9yIHNob3dpbmcgdGhlIENoaXBzTGlzdFwiKTt2YXIgZGVmYXVsdFZhbHVlcz17Y2xhc3NMaXN0OltdLGRlZmF1bHRTZWxlY3RlZDpbXSxsYWJlbDpcIkxpc3RcIixub1Jlc3VsdHNUZXh0OlwiTm8gcmVzdWx0c1wiLHJlc2V0Q2FsbGJhY2s6ZnVuY3Rpb24oKXtyZXR1cm57fX0sc2VsZWN0QWxsVGV4dDpcIlNlbGVjdCBBbGxcIixzZWxlY3RlZENhbGxiYWNrOmZ1bmN0aW9uKCl7cmV0dXJue319LHNlbGVjdG9yOlwianMtY2hpcHMtbGlzdC1cIi5jb25jYXQoZ2VuZXJhdGVVaWQoKSl9OyFmdW5jdGlvbihyZWNlaXZlcixwcml2YXRlTWFwLHZhbHVlKXt2YXIgZGVzY3JpcHRvcj1wcml2YXRlTWFwLmdldChyZWNlaXZlcik7aWYoIWRlc2NyaXB0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBzZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7aWYoZGVzY3JpcHRvci5zZXQpZGVzY3JpcHRvci5zZXQuY2FsbChyZWNlaXZlcix2YWx1ZSk7ZWxzZXtpZighZGVzY3JpcHRvci53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZFwiKTtkZXNjcmlwdG9yLnZhbHVlPXZhbHVlfX0odGhpcyxjaGlwc19saXN0X3Byb3BzLGZ1bmN0aW9uKHRhcmdldCl7Zm9yKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIHNvdXJjZT1udWxsIT1hcmd1bWVudHNbaV0/YXJndW1lbnRzW2ldOnt9O2klMj9jaGlwc19saXN0X293bktleXMoT2JqZWN0KHNvdXJjZSksITApLmZvckVhY2goKGZ1bmN0aW9uKGtleSl7Y2hpcHNfbGlzdF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsa2V5LHNvdXJjZVtrZXldKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk6Y2hpcHNfbGlzdF9vd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKChmdW5jdGlvbihrZXkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsa2V5LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLGtleSkpfSkpfXJldHVybiB0YXJnZXR9KHt9LGRlZmF1bHRWYWx1ZXMse30scHJvcHMpKSxjaGlwc19saXN0X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsY2hpcHNfbGlzdF9zdGF0ZSkuc2VsZWN0ZWRJdGVtcz1jaGlwc19saXN0X3RvQ29uc3VtYWJsZUFycmF5KGNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxjaGlwc19saXN0X3Byb3BzKS5kZWZhdWx0U2VsZWN0ZWQpLDA9PT1jaGlwc19saXN0X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsY2hpcHNfbGlzdF9zdGF0ZSkuc2VsZWN0ZWRJdGVtcy5sZW5ndGgmJihjaGlwc19saXN0X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsY2hpcHNfbGlzdF9zdGF0ZSkuc2VsZWN0ZWRJdGVtcz1bY2hpcHNfbGlzdF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLGNoaXBzX2xpc3RfcHJvcHMpLnNlbGVjdEFsbFRleHRdKTt2YXIgdW5pcXVlQ2hpcHM9Y2hpcHNfbGlzdF90b0NvbnN1bWFibGVBcnJheShuZXcgU2V0KGNoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxjaGlwc19saXN0X3Byb3BzKS5jaGlwc0xpc3QpKTtjaGlwc19saXN0X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsY2hpcHNfbGlzdF9zdGF0ZSkuY2hpcHM9W2NoaXBzX2xpc3RfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxjaGlwc19saXN0X3Byb3BzKS5zZWxlY3RBbGxUZXh0XS5jb25jYXQoY2hpcHNfbGlzdF90b0NvbnN1bWFibGVBcnJheSh1bmlxdWVDaGlwcy5zb3J0KCkpKS5tYXAoKGZ1bmN0aW9uKGNoaXBOYW1lLGluZGV4KXtyZXR1cm57Y2xlYXJlZFN0cmluZzpfdGhpcy5jbGVhclN0cmluZ09mU3BlY2lhbENoYXIoY2hpcE5hbWUpLGhpZGRlbjohMSxpbmRleDppbmRleCxpbm5lckNvbnRlbnQ6Y2hpcE5hbWUsc2VsZWN0ZWQ6ITEsc3RyaWN0OiExfX0pKX12YXIgQ29uc3RydWN0b3IscHJvdG9Qcm9wcyxzdGF0aWNQcm9wcztyZXR1cm4gQ29uc3RydWN0b3I9Q2hpcHNMaXN0LChwcm90b1Byb3BzPVt7a2V5OlwibW92ZUVsZW1lbnRJbnRvVmlld1wiLHZhbHVlOmZ1bmN0aW9uKCRlbGVtZW50VG9TaG93KXt2YXIgJGxpc3Rib3g9Y2hpcHNfbGlzdF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLGNoaXBzX2xpc3Rfc3RhdGUpLiRsaXN0Ym94O2lmKCRsaXN0Ym94KXt2YXIgJHNjcm9sbENvbnRhaW5lcj10aGlzLmdldFNjcm9sbFBhcmVudCh7JGVsZW1lbnQ6JGxpc3Rib3h9KTtpZigkc2Nyb2xsQ29udGFpbmVyJiYkc2Nyb2xsQ29udGFpbmVyLnBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCl7dmFyIG1hcmdpbkJvdHRvbT1nZXRDb21wdXRlZFN0eWxlKCRlbGVtZW50VG9TaG93KS5tYXJnaW5Cb3R0b20sJHBhcmVudEVsZW1lbnQ9JHNjcm9sbENvbnRhaW5lci5wYXJlbnRFbGVtZW50O2lmKCRwYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpe3ZhciBfJHBhcmVudEVsZW1lbnQkb2Zmc2U9JHBhcmVudEVsZW1lbnQub2Zmc2V0VG9wLG9mZnNldFRvcD12b2lkIDA9PT1fJHBhcmVudEVsZW1lbnQkb2Zmc2U/MDpfJHBhcmVudEVsZW1lbnQkb2Zmc2UsXyRwYXJlbnRFbGVtZW50JHNjcm9sPSRwYXJlbnRFbGVtZW50LnNjcm9sbFRvcCxzY3JvbGxUb3A9dm9pZCAwPT09XyRwYXJlbnRFbGVtZW50JHNjcm9sPzA6XyRwYXJlbnRFbGVtZW50JHNjcm9sLGVsZW1lbnRUb3A9JGVsZW1lbnRUb1Nob3cub2Zmc2V0VG9wLW9mZnNldFRvcCxlbGVtZW50Qm90dG9tPWVsZW1lbnRUb3ArJGVsZW1lbnRUb1Nob3cub2Zmc2V0SGVpZ2h0K051bWJlcihtYXJnaW5Cb3R0b20ucmVwbGFjZSgvcHgkLyxcIlwiKSksY2xpZW50SGVpZ2h0PSRwYXJlbnRFbGVtZW50LmNsaWVudEhlaWdodDtlbGVtZW50Qm90dG9tPmNsaWVudEhlaWdodCtzY3JvbGxUb3A/JHBhcmVudEVsZW1lbnQuc2Nyb2xsVG8oMCxlbGVtZW50Qm90dG9tLWNsaWVudEhlaWdodCk6ZWxlbWVudFRvcDxzY3JvbGxUb3AmJiRwYXJlbnRFbGVtZW50LnNjcm9sbFRvKDAsZWxlbWVudFRvcCl9fX19fV0pJiZjaGlwc19saXN0X2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLHByb3RvUHJvcHMpLHN0YXRpY1Byb3BzJiZjaGlwc19saXN0X2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3Isc3RhdGljUHJvcHMpLENoaXBzTGlzdH0oKSxjaGlwc19saXN0X3N0YXRlPW5ldyBXZWFrTWFwLF9jbGFzc1NlbGVjdG9yPW5ldyBXZWFrTWFwLGNoaXBzX2xpc3RfcHJvcHM9bmV3IFdlYWtNYXAsX3JlZ2V4Q2xlYXI9bmV3IFdlYWtNYXA7X193ZWJwYWNrX3JlcXVpcmVfXygxNjYpO2Z1bmN0aW9uIHNlYXJjaF9ib3hfb3duS2V5cyhvYmplY3QsZW51bWVyYWJsZU9ubHkpe3ZhciBrZXlzPU9iamVjdC5rZXlzKG9iamVjdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHN5bWJvbHM9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO2VudW1lcmFibGVPbmx5JiYoc3ltYm9scz1zeW1ib2xzLmZpbHRlcigoZnVuY3Rpb24oc3ltKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3Qsc3ltKS5lbnVtZXJhYmxlfSkpKSxrZXlzLnB1c2guYXBwbHkoa2V5cyxzeW1ib2xzKX1yZXR1cm4ga2V5c31mdW5jdGlvbiBzZWFyY2hfYm94X2RlZmluZVByb3BlcnRpZXModGFyZ2V0LHByb3BzKXtmb3IodmFyIGk9MDtpPHByb3BzLmxlbmd0aDtpKyspe3ZhciBkZXNjcmlwdG9yPXByb3BzW2ldO2Rlc2NyaXB0b3IuZW51bWVyYWJsZT1kZXNjcmlwdG9yLmVudW1lcmFibGV8fCExLGRlc2NyaXB0b3IuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIGRlc2NyaXB0b3ImJihkZXNjcmlwdG9yLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LGRlc2NyaXB0b3Iua2V5LGRlc2NyaXB0b3IpfX1mdW5jdGlvbiBzZWFyY2hfYm94X2RlZmluZVByb3BlcnR5KG9iaixrZXksdmFsdWUpe3JldHVybiBrZXkgaW4gb2JqP09iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosa2V5LHt2YWx1ZTp2YWx1ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm9ialtrZXldPXZhbHVlLG9ian1mdW5jdGlvbiBzZWFyY2hfYm94X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLHByaXZhdGVNYXApe3ZhciBkZXNjcmlwdG9yPXByaXZhdGVNYXAuZ2V0KHJlY2VpdmVyKTtpZighZGVzY3JpcHRvcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtyZXR1cm4gZGVzY3JpcHRvci5nZXQ/ZGVzY3JpcHRvci5nZXQuY2FsbChyZWNlaXZlcik6ZGVzY3JpcHRvci52YWx1ZX12YXIgc2VhcmNoX2JveF9TZWFyY2hCb3g9ZnVuY3Rpb24oKXtmdW5jdGlvbiBTZWFyY2hCb3gocHJvcHMpe3ZhciBfdGhpcz10aGlzOyFmdW5jdGlvbihpbnN0YW5jZSxDb25zdHJ1Y3Rvcil7aWYoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLFNlYXJjaEJveCksc2VhcmNoX2JveF9wcm9wcy5zZXQodGhpcyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksc2VhcmNoX2JveF9jbGFzc1NlbGVjdG9ycy5zZXQodGhpcyx7d3JpdGFibGU6ITAsdmFsdWU6e2NsZWFyQnV0dG9uOlwidHYtc2VhcmNoYm94X19jbGVhci1zZWFyY2hcIixpbnB1dEZpZWxkOlwidHYtc2VhcmNoYm94X19zZWFyY2hmaWVsZFwiLHNob3dDbGVhckJ1dHRvbjpcInR2LXNlYXJjaGJveF9fY2xlYXItc2VhcmNoLS1zaG93XCJ9fSksc2VhcmNoX2JveF9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiZ2V0U2VsZWN0b3JcIiwoZnVuY3Rpb24oKXtyZXR1cm4gc2VhcmNoX2JveF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxzZWFyY2hfYm94X3Byb3BzKS5zZWxlY3Rvcn0pKSxzZWFyY2hfYm94X2RlZmluZVByb3BlcnR5KHRoaXMsXCJmb2N1c1wiLChmdW5jdGlvbigpe3ZhciAkaW5wdXRGaWVsZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdChfdGhpcy5nZXRTZWxlY3RvcigpLFwiIC5cIikuY29uY2F0KHNlYXJjaF9ib3hfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsc2VhcmNoX2JveF9jbGFzc1NlbGVjdG9ycykuaW5wdXRGaWVsZCkpOyRpbnB1dEZpZWxkJiYkaW5wdXRGaWVsZC5mb2N1cygpfSkpLHNlYXJjaF9ib3hfZGVmaW5lUHJvcGVydHkodGhpcyxcInJlc2V0U2VhcmNoXCIsKGZ1bmN0aW9uKCl7X3RoaXMuc2V0U2VhcmNoKHtuZXdWYWx1ZTpcIlwifSksc2VhcmNoX2JveF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGhpcyxzZWFyY2hfYm94X3Byb3BzKS5yZXNldENhbGxiYWNrKCl9KSk7dmFyIGRlZmF1bHRWYWx1ZXM9e3Jlc2V0Q2FsbGJhY2s6ZnVuY3Rpb24oKXtyZXR1cm57fX0sc2VsZWN0b3I6XCJqcy1zZWFyY2gtYm94LVwiLmNvbmNhdChnZW5lcmF0ZVVpZCgpKX07IWZ1bmN0aW9uKHJlY2VpdmVyLHByaXZhdGVNYXAsdmFsdWUpe3ZhciBkZXNjcmlwdG9yPXByaXZhdGVNYXAuZ2V0KHJlY2VpdmVyKTtpZighZGVzY3JpcHRvcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIHNldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtpZihkZXNjcmlwdG9yLnNldClkZXNjcmlwdG9yLnNldC5jYWxsKHJlY2VpdmVyLHZhbHVlKTtlbHNle2lmKCFkZXNjcmlwdG9yLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkXCIpO2Rlc2NyaXB0b3IudmFsdWU9dmFsdWV9fSh0aGlzLHNlYXJjaF9ib3hfcHJvcHMsZnVuY3Rpb24odGFyZ2V0KXtmb3IodmFyIGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXt2YXIgc291cmNlPW51bGwhPWFyZ3VtZW50c1tpXT9hcmd1bWVudHNbaV06e307aSUyP3NlYXJjaF9ib3hfb3duS2V5cyhPYmplY3Qoc291cmNlKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oa2V5KXtzZWFyY2hfYm94X2RlZmluZVByb3BlcnR5KHRhcmdldCxrZXksc291cmNlW2tleV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTpzZWFyY2hfYm94X293bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goKGZ1bmN0aW9uKGtleSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCxrZXksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2Usa2V5KSl9KSl9cmV0dXJuIHRhcmdldH0oe30sZGVmYXVsdFZhbHVlcyx7fSxwcm9wcykpfXZhciBDb25zdHJ1Y3Rvcixwcm90b1Byb3BzLHN0YXRpY1Byb3BzO3JldHVybiBDb25zdHJ1Y3Rvcj1TZWFyY2hCb3gsKHByb3RvUHJvcHM9W3trZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBfY2xhc3NQcml2YXRlRmllbGRHZXQyPXNlYXJjaF9ib3hfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxzZWFyY2hfYm94X3Byb3BzKSwkY29udGFpbmVyPV9jbGFzc1ByaXZhdGVGaWVsZEdldDIuJGNvbnRhaW5lcixfY2xhc3NQcml2YXRlRmllbGRHZXQzPV9jbGFzc1ByaXZhdGVGaWVsZEdldDIuY2xhc3NMaXN0LGNsYXNzTGlzdD12b2lkIDA9PT1fY2xhc3NQcml2YXRlRmllbGRHZXQzP1tdOl9jbGFzc1ByaXZhdGVGaWVsZEdldDMsX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ND1fY2xhc3NQcml2YXRlRmllbGRHZXQyLnBsYWNlaG9sZGVyVGV4dCxwbGFjZWhvbGRlclRleHQ9dm9pZCAwPT09X2NsYXNzUHJpdmF0ZUZpZWxkR2V0ND9cIlNlYXJjaFwiOl9jbGFzc1ByaXZhdGVGaWVsZEdldDQscG9zaXRpb249X2NsYXNzUHJpdmF0ZUZpZWxkR2V0Mi5wb3NpdGlvbixzZWxlY3Rvcj1fY2xhc3NQcml2YXRlRmllbGRHZXQyLnNlbGVjdG9yO3NlYXJjaF9ib3hfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxzZWFyY2hfYm94X3Byb3BzKS5zZWFyY2g9bmV3IEJlaGF2aW9yU3ViamVjdChcIlwiKTt2YXIgSFRNTD0nXFxuICAgIDxkaXYgY2xhc3M9XCJ0di1zZWFyY2hib3ggJy5jb25jYXQoc2VsZWN0b3IsXCIgXCIpLmNvbmNhdChjbGFzc0xpc3Quam9pbihcIlwiKSwnXCI+XFxuICAgICAgICAnKS5jb25jYXQoaWNvblNlYXJjaCwnXFxuICAgICAgICA8aW5wdXRcXG4gICAgICAgIGlkPVwiJykuY29uY2F0KHNlbGVjdG9yLCdcIlxcbiAgICAgICAgY2xhc3M9XCJ0di1zZWFyY2hib3hfX3NlYXJjaGZpZWxkICcpLmNvbmNhdChjbGFzc0xpc3Quam9pbihcIiBcIiksJ1wiXFxuICAgICAgICB0eXBlPVwic2VhcmNoXCJcXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiJykuY29uY2F0KHBsYWNlaG9sZGVyVGV4dCwnXCJcXG4gICAgICAgIGFyaWEtbGFiZWw9XCJTZWFyY2hcIiAvPlxcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidHYtaW5wdXQtbGFiZWxcIiBmb3I9XCInKS5jb25jYXQoc2VsZWN0b3IsJ1wiPjwvbGFiZWw+XFxuICAgICAgICA8YnV0dG9uXFxuICAgICAgICAgIGNsYXNzPVwidHYtc2VhcmNoYm94X19jbGVhci1zZWFyY2hcIlxcbiAgICAgICAgICB0YWJpbmRleD1cIi0xXCI+XFxuICAgICAgICAgICcpLmNvbmNhdChpY29uQ3Jvc3NDaXJjbGUsXCJcXG4gICAgICAgIDwvYnV0dG9uPlxcbiAgICA8L2Rpdj5cXG4gICAgXCIpOyRjb250YWluZXImJnBvc2l0aW9uPyRjb250YWluZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKHBvc2l0aW9uLEhUTUwpOiRjb250YWluZXImJigkY29udGFpbmVyLmlubmVySFRNTD1IVE1MKSx0aGlzLmNvbXBvbmVudERpZE1vdW50KCl9fSx7a2V5Olwic2V0U2VhcmNoXCIsdmFsdWU6ZnVuY3Rpb24oX3JlZil7dmFyIF9yZWYkbmV3VmFsdWU9X3JlZi5uZXdWYWx1ZSxuZXdWYWx1ZT12b2lkIDA9PT1fcmVmJG5ld1ZhbHVlP1wiXCI6X3JlZiRuZXdWYWx1ZSwkaW5wdXRGaWVsZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdCh0aGlzLmdldFNlbGVjdG9yKCksXCIgLlwiKS5jb25jYXQoc2VhcmNoX2JveF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLHNlYXJjaF9ib3hfY2xhc3NTZWxlY3RvcnMpLmlucHV0RmllbGQpKTskaW5wdXRGaWVsZCYmJGlucHV0RmllbGQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50JiYoJGlucHV0RmllbGQudmFsdWU9bmV3VmFsdWUsJGlucHV0RmllbGQuZm9jdXMoKSksc2VhcmNoX2JveF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLHNlYXJjaF9ib3hfcHJvcHMpLnNlYXJjaC5uZXh0KG5ld1ZhbHVlKSx0aGlzLnNob3dIaWRlQ2xlYXJCdXR0b24oe3NlYXJjaFN0cmluZzpuZXdWYWx1ZX0pfX0se2tleTpcInNob3dIaWRlQ2xlYXJCdXR0b25cIix2YWx1ZTpmdW5jdGlvbihfcmVmMil7dmFyIF9yZWYyJHNlYXJjaFN0cmluZz1fcmVmMi5zZWFyY2hTdHJpbmcsc2VhcmNoU3RyaW5nPXZvaWQgMD09PV9yZWYyJHNlYXJjaFN0cmluZz9cIlwiOl9yZWYyJHNlYXJjaFN0cmluZywkY2xlYXJCdXR0b249ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQodGhpcy5nZXRTZWxlY3RvcigpLFwiIC5cIikuY29uY2F0KHNlYXJjaF9ib3hfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxzZWFyY2hfYm94X2NsYXNzU2VsZWN0b3JzKS5jbGVhckJ1dHRvbikpOyRjbGVhckJ1dHRvbiYmKDA9PT1zZWFyY2hTdHJpbmcubGVuZ3RoPyRjbGVhckJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwiXCIuY29uY2F0KHNlYXJjaF9ib3hfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxzZWFyY2hfYm94X2NsYXNzU2VsZWN0b3JzKS5zaG93Q2xlYXJCdXR0b24pKTokY2xlYXJCdXR0b24uY2xhc3NMaXN0LmFkZChcIlwiLmNvbmNhdChzZWFyY2hfYm94X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsc2VhcmNoX2JveF9jbGFzc1NlbGVjdG9ycykuc2hvd0NsZWFyQnV0dG9uKSkpfX0se2tleTpcImNvbXBvbmVudERpZE1vdW50XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgX3RoaXMyPXRoaXMsJGlucHV0RmllbGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQodGhpcy5nZXRTZWxlY3RvcigpLFwiIC5cIikuY29uY2F0KHNlYXJjaF9ib3hfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxzZWFyY2hfYm94X2NsYXNzU2VsZWN0b3JzKS5pbnB1dEZpZWxkKSksJGNsZWFyQnV0dG9uPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIuY29uY2F0KHRoaXMuZ2V0U2VsZWN0b3IoKSxcIiAuXCIpLmNvbmNhdChzZWFyY2hfYm94X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsc2VhcmNoX2JveF9jbGFzc1NlbGVjdG9ycykuY2xlYXJCdXR0b24pKSxfY2xhc3NQcml2YXRlRmllbGRHZXQ1PXNlYXJjaF9ib3hfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcyxzZWFyY2hfYm94X3Byb3BzKSxzZWFyY2g9X2NsYXNzUHJpdmF0ZUZpZWxkR2V0NS5zZWFyY2gsc2VhcmNoQ2hhbmdlRm49X2NsYXNzUHJpdmF0ZUZpZWxkR2V0NS5zZWFyY2hDaGFuZ2VGbjskaW5wdXRGaWVsZCYmJGlucHV0RmllbGQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50JiYoJGlucHV0RmllbGQuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsKGZ1bmN0aW9uKGlucHV0RXZlbnQpe2lmKGlucHV0RXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCl7dmFyIG5ld1NlYXJjaFN0cmluZz1pbnB1dEV2ZW50LnRhcmdldC52YWx1ZXx8XCJcIjtfdGhpczIuc2hvd0hpZGVDbGVhckJ1dHRvbih7c2VhcmNoU3RyaW5nOm5ld1NlYXJjaFN0cmluZ30pLHNlYXJjaC5uZXh0KG5ld1NlYXJjaFN0cmluZyl9fSkpLHNlYXJjaC5zdWJzY3JpYmUoKGZ1bmN0aW9uKG5ld1NlYXJjaFRlcm0pe3JldHVybiBzZWFyY2hDaGFuZ2VGbihuZXdTZWFyY2hUZXJtKX0pKSksJGNsZWFyQnV0dG9uJiYkY2xlYXJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy5yZXNldFNlYXJjaC5iaW5kKHRoaXMpKX19XSkmJnNlYXJjaF9ib3hfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUscHJvdG9Qcm9wcyksc3RhdGljUHJvcHMmJnNlYXJjaF9ib3hfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3RvcixzdGF0aWNQcm9wcyksU2VhcmNoQm94fSgpLHNlYXJjaF9ib3hfcHJvcHM9bmV3IFdlYWtNYXAsc2VhcmNoX2JveF9jbGFzc1NlbGVjdG9ycz1uZXcgV2Vha01hcCxnZW5lcmF0ZUNoaXBMaXN0PWZ1bmN0aW9uKCl7dmFyIGxlbmd0aD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MTAwLGxhYmVsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpcIkl0ZW1cIjtyZXR1cm4gQXJyYXkobGVuZ3RoKS5maWxsKCkubWFwKChmdW5jdGlvbihpdGVtLGluZGV4KXtyZXR1cm5cIlwiLmNvbmNhdChsYWJlbCxcIiBcIikuY29uY2F0KFwiMDAwXCIuY29uY2F0KChpbmRleCsxKS50b1N0cmluZygpKS5zbGljZSgtMykpfSkpfTt2YXIgU2VhcmNoQm94QXV0b2xvYWRlcj1mdW5jdGlvbiBTZWFyY2hCb3hBdXRvbG9hZGVyKCl7IWZ1bmN0aW9uKGluc3RhbmNlLENvbnN0cnVjdG9yKXtpZighKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9KHRoaXMsU2VhcmNoQm94QXV0b2xvYWRlcil9OyFmdW5jdGlvbihvYmosa2V5LHZhbHVlKXtrZXkgaW4gb2JqP09iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosa2V5LHt2YWx1ZTp2YWx1ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm9ialtrZXldPXZhbHVlfShTZWFyY2hCb3hBdXRvbG9hZGVyLFwibG9hZFwiLChmdW5jdGlvbigpe3ZhciAkY2hpcHNIZWFkZXI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5qcy1jaGlwcy1saXN0LWhlYWRlclwiKSxjaGlwTGlzdD1uZXcgY2hpcHNfbGlzdF9DaGlwc0xpc3QoeyRjb250YWluZXI6JGNoaXBzSGVhZGVyLGNoaXBzTGlzdDpnZW5lcmF0ZUNoaXBMaXN0KCksbm9SZXN1bHRzVGV4dDpcIk5vIFJlc3VsdHMuLi4uXCIscG9zaXRpb246XCJhZnRlcmVuZFwifSk7Y2hpcExpc3QucmVuZGVyKCksZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5qcy1zZWFyY2gtYm94LWhlYWRlclwiKS5mb3JFYWNoKChmdW5jdGlvbigkY29udGFpbmVyKXtuZXcgc2VhcmNoX2JveF9TZWFyY2hCb3goeyRjb250YWluZXI6JGNvbnRhaW5lcixzZWFyY2hDaGFuZ2VGbjpmdW5jdGlvbihzZWFyY2hWYWx1ZSl7dmFyICRyZXN1bHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5qcy1zZWFyY2gtYm94LXJlc3VsdFwiKTskcmVzdWx0JiYoJHJlc3VsdC5pbm5lclRleHQ9c2VhcmNoVmFsdWUsY2hpcExpc3QuZmlsdGVyQ2hpcHMoc2VhcmNoVmFsdWUpKX0saW5uZXJDb250ZW50OlwiQ2xpY2sgbWVcIixwb3NpdGlvbjpcImFmdGVyZW5kXCJ9KS5yZW5kZXIoKX0pKX0pKTt2YXIgY2xhc3NTZWxlY3Rvcl9KU19CVVRUT05fU0VMRUNUT1I9XCJqcy1idXR0b24taGVhZGVyXCIsY2xhc3NTZWxlY3Rvcl9KU19QT1BVUF9IRUFERVI9XCJqcy1oZWFkZXItY29udGVudFwiLEJ1dHRvbkF1dG9sb2FkZXI9ZnVuY3Rpb24gQnV0dG9uQXV0b2xvYWRlcigpeyFmdW5jdGlvbihpbnN0YW5jZSxDb25zdHJ1Y3Rvcil7aWYoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLEJ1dHRvbkF1dG9sb2FkZXIpfTshZnVuY3Rpb24ob2JqLGtleSx2YWx1ZSl7a2V5IGluIG9iaj9PYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLGtleSx7dmFsdWU6dmFsdWUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpvYmpba2V5XT12YWx1ZX0oQnV0dG9uQXV0b2xvYWRlcixcImxvYWRcIiwoZnVuY3Rpb24oKXt2YXIgcG9wdXAsYWRkQ29udGVudD1mdW5jdGlvbigpe3ZhciByZXNldFNlYXJjaCxkZWZhdWx0U2VsZWN0ZWQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5qcy1idXR0b24tcmVzdWx0XCIpLHNlbGVjdGVkQ2hpcHM9W107ZGVmYXVsdFNlbGVjdGVkJiZkZWZhdWx0U2VsZWN0ZWQuaW5uZXJUZXh0JiZkZWZhdWx0U2VsZWN0ZWQuaW5uZXJUZXh0LmluY2x1ZGVzKFwiOlwiKSYmKHNlbGVjdGVkQ2hpcHM9ZGVmYXVsdFNlbGVjdGVkLmlubmVyVGV4dC5zdWJzdHIoZGVmYXVsdFNlbGVjdGVkLmlubmVyVGV4dC5pbmRleE9mKFwiOlwiKSsxKS5zcGxpdChcIixcIikubWFwKChmdW5jdGlvbihpdGVtKXtyZXR1cm4gaXRlbS50cmltKCl9KSkpO3ZhciAkY2hpcHNMb2NhdGlvbj1wb3B1cC5nZXRNYWluQ29udGVudCgpLGNoaXBMaXN0PW5ldyBjaGlwc19saXN0X0NoaXBzTGlzdCh7JGNvbnRhaW5lcjokY2hpcHNMb2NhdGlvbixjaGlwc0xpc3Q6Z2VuZXJhdGVDaGlwTGlzdCgpLGRlZmF1bHRTZWxlY3RlZDpzZWxlY3RlZENoaXBzLHNlbGVjdGVkQ2FsbGJhY2s6ZnVuY3Rpb24oaXRlbSl7aWYoaXRlbSl7dmFyIHJlc3VsdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmpzLWJ1dHRvbi1yZXN1bHRcIik7cmVzdWx0JiYoc2V0VGltZW91dCgoZnVuY3Rpb24oKXtwb3B1cC5jbG9zZVBvcHVwKCl9KSwyMDApLHJlc3VsdC5pbm5lckhUTUw9XCJUaGUgc2VsZWN0ZWQgY2hpcCBpczogXCIuY29uY2F0KGl0ZW0pKX19LG5vUmVzdWx0c1RleHQ6XCJObyBjYXRlZ29yaWVzIGZvdW5kXCIscG9zaXRpb246XCJiZWZvcmVlbmRcIixyZXNldENhbGxiYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHJlc2V0U2VhcmNoKCl9fSk7Y2hpcExpc3QucmVuZGVyKCksZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5cIi5jb25jYXQoY2xhc3NTZWxlY3Rvcl9KU19QT1BVUF9IRUFERVIpKS5mb3JFYWNoKChmdW5jdGlvbigkY29udGFpbmVyKXt2YXIgJHNlYXJjaEJveD1uZXcgc2VhcmNoX2JveF9TZWFyY2hCb3goeyRjb250YWluZXI6JGNvbnRhaW5lcixzZWFyY2hDaGFuZ2VGbjpmdW5jdGlvbihzZWFyY2hWYWx1ZSl7Y2hpcExpc3QuZmlsdGVyQ2hpcHMoc2VhcmNoVmFsdWUpfSxpbm5lckNvbnRlbnQ6XCJPcGVuIHBvcHVwXCIscG9zaXRpb246XCJiZWZvcmVlbmRcIn0pOyRzZWFyY2hCb3gucmVuZGVyKCksY2hpcExpc3QuZm9jdXNTZWxlY3RlZCgpLCRzZWFyY2hCb3guZm9jdXMoKSxyZXNldFNlYXJjaD1mdW5jdGlvbigpeyRzZWFyY2hCb3guc2V0U2VhcmNoKHtuZXdWYWx1ZTpcIlwifSl9fSkpfTtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLlwiLmNvbmNhdChjbGFzc1NlbGVjdG9yX0pTX0JVVFRPTl9TRUxFQ1RPUikpLmZvckVhY2goKGZ1bmN0aW9uKCRjb250YWluZXIpe25ldyBidXR0b25fQnV0dG9uKHskY29udGFpbmVyOiRjb250YWluZXIsY2xpY2tGbjpmdW5jdGlvbihldmVudEhhbmRsZXIpe2V2ZW50SGFuZGxlci5zdG9wUHJvcGFnYXRpb24oKSwocG9wdXA9bmV3IHBvcHVwX1BvcHVwKHtjbGFzc0xpc3Q6W1wiaS1hbS1zdGVwLTNcIl0saGVhZGVyQ29udGVudDonPGRpdiBjbGFzcz1cImpzLWhlYWRlci1jb250ZW50XCI+PGgyPkFsbCBDYXRlZ29yaWVzPC9oMj48L2Rpdj4nLG1haW5Db250ZW50OlwiXCIsb3BlbkNhbGxiYWNrOmFkZENvbnRlbnR9KSkucmVuZGVyKCl9LGlubmVyQ29udGVudDpcIkNsaWNrIG1lXCIscG9zaXRpb246XCJhZnRlcmVuZFwifSkucmVuZGVyKCl9KSl9KSk7X193ZWJwYWNrX3JlcXVpcmVfXygxNjgpO2Z1bmN0aW9uIGNvbnRlbnRfdG9nZ2xlX293bktleXMob2JqZWN0LGVudW1lcmFibGVPbmx5KXt2YXIga2V5cz1PYmplY3Qua2V5cyhvYmplY3QpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBzeW1ib2xzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtlbnVtZXJhYmxlT25seSYmKHN5bWJvbHM9c3ltYm9scy5maWx0ZXIoKGZ1bmN0aW9uKHN5bSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LHN5bSkuZW51bWVyYWJsZX0pKSksa2V5cy5wdXNoLmFwcGx5KGtleXMsc3ltYm9scyl9cmV0dXJuIGtleXN9ZnVuY3Rpb24gX3R5cGVvZihvYmope3JldHVybihfdHlwZW9mPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihvYmope3JldHVybiB0eXBlb2Ygb2JqfTpmdW5jdGlvbihvYmope3JldHVybiBvYmomJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmb2JqLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZvYmohPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIG9ian0pKG9iail9ZnVuY3Rpb24gY29udGVudF90b2dnbGVfZGVmaW5lUHJvcGVydHkob2JqLGtleSx2YWx1ZSl7cmV0dXJuIGtleSBpbiBvYmo/T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaixrZXkse3ZhbHVlOnZhbHVlLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6b2JqW2tleV09dmFsdWUsb2JqfXZhciBTVEFUVVNfRVhQQU5ERUQ9XCJleHBhbmRlZFwiLFNUQVRVU19DT0xMQVBTRUQ9XCJjb2xsYXBzZWRcIixST1dfQ0xBU1NFU19NVUxUSV9MSU5FPVwibXVsdGktbGluZVwiLFJPV19DTEFTU0VTX1NJTkdMRV9MSU5FPVwic2luZ2xlLWxpbmVcIixUSEVNRVM9e1BSSU1BUlk6XCJwcmltYXJ5XCIsU0VDT05EQVJZOlwic2Vjb25kYXJ5XCJ9LGNvbnRlbnRfdG9nZ2xlX0NvbnRlbnRUb2dnbGU9ZnVuY3Rpb24gQ29udGVudFRvZ2dsZShwcm9wcyl7dmFyIF90aGlzPXRoaXM7IWZ1bmN0aW9uKGluc3RhbmNlLENvbnN0cnVjdG9yKXtpZighKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9KHRoaXMsQ29udGVudFRvZ2dsZSksY29udGVudF90b2dnbGVfZGVmaW5lUHJvcGVydHkodGhpcyxcImRlZmF1bHRQcm9wc1wiLHtjb2xsYXBzZVRleHQ6XCJTaG93IGxlc3NcIixleHBhbmRUZXh0OlwiUmVhZCBtb3JlXCIscm93Q291bnQ6MSx0aGVtZTpUSEVNRVMuUFJJTUFSWSxjaGVja0hlaWdodEJlZm9yZUluaXQ6MX0pLGNvbnRlbnRfdG9nZ2xlX2RlZmluZVByb3BlcnR5KHRoaXMsXCJzdGF0ZVwiLHtzdGF0dXM6bmV3IEJlaGF2aW9yU3ViamVjdChTVEFUVVNfQ09MTEFQU0VEKSxsaW5rOntzdHlsZTp7cG9zaXRpb246XCJcIixsZWZ0OlwiXCIscmlnaHQ6XCJcIix0b3A6XCJcIixib3R0b206XCJcIn0sdGV4dDpcIlwifX0pLGNvbnRlbnRfdG9nZ2xlX2RlZmluZVByb3BlcnR5KHRoaXMsXCJpbml0XCIsKGZ1bmN0aW9uKCl7X3RoaXMucmVuZGVyKCksX3RoaXMuc2V0TGlua1N0eWxlcygpLF90aGlzLnNldENvbnRhaW5lckhlaWdodCgpLF90aGlzLmFkZExpc3RlbmVycygpfSkpLGNvbnRlbnRfdG9nZ2xlX2RlZmluZVByb3BlcnR5KHRoaXMsXCJnZXRDb21wdXRlZFN0eWxlXCIsKGZ1bmN0aW9uKGVsZW1lbnQpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KX0pKSxjb250ZW50X3RvZ2dsZV9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiJGxpbmtcIiwoZnVuY3Rpb24oKXtyZXR1cm4gX3RoaXMucHJvcHMuJGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdChcImNvbnRlbnQtdG9nZ2xlX19saW5rXCIpKX0pKSxjb250ZW50X3RvZ2dsZV9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicmVuZGVyXCIsKGZ1bmN0aW9uKCl7dmFyICRjb250YWluZXI9X3RoaXMucHJvcHMuJGNvbnRhaW5lciwkbGluaz1fdGhpcy4kbGluaygpOyRsaW5rJiYkbGluay5yZW1vdmUoKTt2YXIgSFRNTD0nXFxuICAgICAgPGFcXG4gICAgICAgIGhyZWY9XCIjXCJcXG4gICAgICAgIGNsYXNzPVwiXFxuICAgICAgICAgICcuY29uY2F0KFwiY29udGVudC10b2dnbGVfX2xpbmtcIixcIlxcbiAgICAgICAgICBcIikuY29uY2F0KFwiY29udGVudC10b2dnbGVfX2xpbmtcIixcIi0tXCIpLmNvbmNhdChfdGhpcy5nZXRUaGVtZUNsYXNzKCksXCJcXG4gICAgICAgICAgXCIpLmNvbmNhdChcImNvbnRlbnQtdG9nZ2xlX19saW5rXCIsXCItLVwiKS5jb25jYXQoX3RoaXMuZ2V0Um93Q291bnRDbGFzcygpLFwiXFxuICAgICAgICAgIFwiKS5jb25jYXQoX3RoaXMuc3RhdGUuc3RhdHVzVmFsdWU9PT1TVEFUVVNfRVhQQU5ERUQ/XCJjb250ZW50LXRvZ2dsZV9fbGluay0tZXhwYW5kZWRcIjpcIlwiLCdcXG4gICAgICAgIFwiXFxuICAgICAgPlxcbiAgICAgICcpLmNvbmNhdCgoX3RoaXMuc3RhdGUuc3RhdHVzVmFsdWU9PT1TVEFUVVNfQ09MTEFQU0VEP1wiLi4uXCI6XCJcIikrX3RoaXMuc3RhdGUubGluay50ZXh0LFwiXFxuICAgICAgPC9hPlwiKTskY29udGFpbmVyLmluc2VydEFkamFjZW50SFRNTChcImJlZm9yZWVuZFwiLEhUTUwpfSkpLGNvbnRlbnRfdG9nZ2xlX2RlZmluZVByb3BlcnR5KHRoaXMsXCJnZXRUaGVtZUNsYXNzXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC52YWx1ZXMoVEhFTUVTKS5pbmNsdWRlcyhfdGhpcy5wcm9wcy50aGVtZSk/X3RoaXMucHJvcHMudGhlbWU6VEhFTUVTLlBSSU1BUll9KSksY29udGVudF90b2dnbGVfZGVmaW5lUHJvcGVydHkodGhpcyxcImdldFJvd0NvdW50Q2xhc3NcIiwoZnVuY3Rpb24oKXtyZXR1cm4gX3RoaXMucHJvcHMucm93Q291bnQ+MT9ST1dfQ0xBU1NFU19NVUxUSV9MSU5FOlJPV19DTEFTU0VTX1NJTkdMRV9MSU5FfSkpLGNvbnRlbnRfdG9nZ2xlX2RlZmluZVByb3BlcnR5KHRoaXMsXCJhZGRDb250YWluZXJDbGFzc2VzXCIsKGZ1bmN0aW9uKCl7dmFyICRjb250YWluZXI9X3RoaXMucHJvcHMuJGNvbnRhaW5lcjtbXCJjb250ZW50LXRvZ2dsZVwiLFwiXCIuY29uY2F0KFwiY29udGVudC10b2dnbGVcIixcIi0tXCIpLmNvbmNhdChfdGhpcy5nZXRUaGVtZUNsYXNzKCkpLFwiXCIuY29uY2F0KFwiY29udGVudC10b2dnbGVcIixcIi0tXCIpLmNvbmNhdChfdGhpcy5nZXRSb3dDb3VudENsYXNzKCkpXS5mb3JFYWNoKChmdW5jdGlvbihjbGFzc05hbWUpe3JldHVybiAkY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKX0pKX0pKSxjb250ZW50X3RvZ2dsZV9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiY2hlY2tJZkVsZW1lbnRJc0hpZ2hlclRoYW5Sb3dDb3VudFwiLChmdW5jdGlvbigpe3ZhciBfdGhpcyRwcm9wcz1fdGhpcy5wcm9wcywkY29udGFpbmVyPV90aGlzJHByb3BzLiRjb250YWluZXIscm93Q291bnQ9X3RoaXMkcHJvcHMucm93Q291bnQscGFyc2VkTGluZUhlaWdodD1fdGhpcy5nZXRQYXJzZWRMaW5lSGVpZ2h0KCRjb250YWluZXIpLG1heEhlaWdodD1wYXJzZUZsb2F0KHBhcnNlZExpbmVIZWlnaHQpKnJvd0NvdW50O3JldHVybiBfdGhpcy5nZXRQYXJzZWRIZWlnaHQoJGNvbnRhaW5lcik+bWF4SGVpZ2h0fSkpLGNvbnRlbnRfdG9nZ2xlX2RlZmluZVByb3BlcnR5KHRoaXMsXCJnZXRMYXN0TGV0dGVyXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIF90aGlzLnByb3BzLiRjb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQoXCJjb250ZW50LXRvZ2dsZS0tbGFzdC1sZXR0ZXJcIikpfHxudWxsfSkpLGNvbnRlbnRfdG9nZ2xlX2RlZmluZVByb3BlcnR5KHRoaXMsXCJzZXRMYXN0TGV0dGVyXCIsKGZ1bmN0aW9uKCl7dmFyIF90aGlzJHByb3BzMj1fdGhpcy5wcm9wcywkY29udGFpbmVyPV90aGlzJHByb3BzMi4kY29udGFpbmVyLHJvd0NvdW50PV90aGlzJHByb3BzMi5yb3dDb3VudDtpZihudWxsPT09X3RoaXMuZ2V0TGFzdExldHRlcigpKXt2YXIgbGluZXM9JGNvbnRhaW5lci5pbm5lckhUTUwuc3BsaXQoLzxiclxccypbL10/Pi9naSkuZmlsdGVyKChmdW5jdGlvbihsaW5lKXtyZXR1cm4gbGluZS5sZW5ndGg+MH0pKSxsYXN0TGluZUluZGV4PWxpbmVzLmxlbmd0aD5yb3dDb3VudD9yb3dDb3VudC0xOmxpbmVzLmxlbmd0aC0xLGxhc3RMaW5lPWxpbmVzW2xhc3RMaW5lSW5kZXhdLnRyaW0oKSxsYXN0UGFydD1sYXN0TGluZS5tYXRjaCgvKC4pKD86PFtePl0rPikqJC9nKS5zaGlmdCgpLG5ld0xhc3RMaW5lPVtsYXN0TGluZS5zdWJzdHJpbmcoMCxsYXN0TGluZS5sZW5ndGgtbGFzdFBhcnQubGVuZ3RoKSwnPHNwYW4gY2xhc3M9XCInLmNvbmNhdChcImNvbnRlbnQtdG9nZ2xlLS1sYXN0LWxldHRlclwiLCdcIj4nKSxsYXN0UGFydC5zdWJzdHJpbmcoMCwxKSxcIjwvc3Bhbj5cIl07bmV3TGFzdExpbmUucHVzaChsYXN0UGFydC5zdWJzdHJpbmcoMSkpLGxpbmVzW2xhc3RMaW5lSW5kZXhdPW5ld0xhc3RMaW5lLmpvaW4oXCJcIiksJGNvbnRhaW5lci5pbm5lckhUTUw9bGluZXMuam9pbihcIjxicj5cIil9fSkpLGNvbnRlbnRfdG9nZ2xlX2RlZmluZVByb3BlcnR5KHRoaXMsXCJzZXRMaW5rU3R5bGVzXCIsKGZ1bmN0aW9uKCl7dmFyIF90aGlzJHByb3BzMz1fdGhpcy5wcm9wcywkY29udGFpbmVyPV90aGlzJHByb3BzMy4kY29udGFpbmVyLHJvd0NvdW50PV90aGlzJHByb3BzMy5yb3dDb3VudCxzdHlsZT1fdGhpcy5zdGF0ZS5saW5rLnN0eWxlO2lmKF90aGlzLnN0YXRlLnN0YXR1c1ZhbHVlPT09U1RBVFVTX0NPTExBUFNFRCl7c3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLHN0eWxlLnRvcD1cIlwiLHN0eWxlLmJvdHRvbT1wYXJzZUZsb2F0KF90aGlzLmdldENvbXB1dGVkU3R5bGUoJGNvbnRhaW5lcikucGFkZGluZ0JvdHRvbSksc3R5bGUubGVmdD1cIlwiLHN0eWxlLnJpZ2h0PTA7dmFyIGxpbmtQb3NpdGlvbkVsZW1lbnQ9X3RoaXMuZ2V0TGFzdExldHRlcigpLGVsZW1lbnRXaWR0aD1fdGhpcy5nZXRFbGVtZW50V2lkdGgoJGNvbnRhaW5lciksb2Zmc2V0VG9wPWxpbmtQb3NpdGlvbkVsZW1lbnQub2Zmc2V0VG9wLHN0eWxlTGVmdD1saW5rUG9zaXRpb25FbGVtZW50Lm9mZnNldExlZnQrbGlua1Bvc2l0aW9uRWxlbWVudC5vZmZzZXRXaWR0aDtvZmZzZXRUb3ArbGlua1Bvc2l0aW9uRWxlbWVudC5vZmZzZXRIZWlnaHQ+cGFyc2VGbG9hdChfdGhpcy5nZXRQYXJzZWRMaW5lSGVpZ2h0KCRjb250YWluZXIpKSpyb3dDb3VudD8oc3R5bGUubGVmdD1cIlwiLHN0eWxlLnJpZ2h0PTApOnN0eWxlTGVmdDxlbGVtZW50V2lkdGgtX3RoaXMuJGxpbmsoKS5vZmZzZXRXaWR0aCYmKHN0eWxlLmxlZnQ9c3R5bGVMZWZ0LXBhcnNlSW50KF90aGlzLmdldENvbXB1dGVkU3R5bGUoX3RoaXMuJGxpbmsoKSkucGFkZGluZ0xlZnQpK1wicHhcIixzdHlsZS5yaWdodD1cIlwiKX1lbHNlIE9iamVjdC5rZXlzKHN0eWxlKS5mb3JFYWNoKChmdW5jdGlvbihrZXkpe3N0eWxlW2tleV09XCJcIn0pKTtPYmplY3Qua2V5cyhzdHlsZSkuZm9yRWFjaCgoZnVuY3Rpb24oa2V5KXtfdGhpcy4kbGluaygpLnN0eWxlW2tleV09c3R5bGVba2V5XX0pKX0pKSxjb250ZW50X3RvZ2dsZV9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwic2V0Q29udGFpbmVySGVpZ2h0XCIsKGZ1bmN0aW9uKCl7dmFyIF90aGlzJHByb3BzND1fdGhpcy5wcm9wcywkY29udGFpbmVyPV90aGlzJHByb3BzNC4kY29udGFpbmVyLHJvd0NvdW50PV90aGlzJHByb3BzNC5yb3dDb3VudCxjb250YWluZXJTdHlsZT0kY29udGFpbmVyLnN0eWxlO2lmKF90aGlzLnN0YXRlLnN0YXR1c1ZhbHVlPT09U1RBVFVTX0NPTExBUFNFRCl7dmFyIGhlaWdodD1wYXJzZUZsb2F0KF90aGlzLmdldFBhcnNlZExpbmVIZWlnaHQoJGNvbnRhaW5lcikpKnJvd0NvdW50O2NvbnRhaW5lclN0eWxlLmhlaWdodD1cIlwiLmNvbmNhdChoZWlnaHQsXCJweFwiKX1lbHNlIGNvbnRhaW5lclN0eWxlLmhlaWdodD1cImF1dG9cIiwxPT09cm93Q291bnQmJihjb250YWluZXJTdHlsZS5tYXhXaWR0aD1cIjEwMCVcIil9KSksY29udGVudF90b2dnbGVfZGVmaW5lUHJvcGVydHkodGhpcyxcImNvbGxhcHNlXCIsKGZ1bmN0aW9uKCl7X3RoaXMucHJvcHMuJGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKFwiY29udGVudC10b2dnbGUtLWV4cGFuZGVkXCIpLF90aGlzLnN0YXRlLnN0YXR1cy5uZXh0KFNUQVRVU19DT0xMQVBTRUQpLF90aGlzLnNldENvbnRhaW5lckhlaWdodCgpfSkpLGNvbnRlbnRfdG9nZ2xlX2RlZmluZVByb3BlcnR5KHRoaXMsXCJleHBhbmRcIiwoZnVuY3Rpb24oKXtfdGhpcy5wcm9wcy4kY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJjb250ZW50LXRvZ2dsZS0tZXhwYW5kZWRcIiksX3RoaXMuc3RhdGUuc3RhdHVzLm5leHQoU1RBVFVTX0VYUEFOREVEKSxfdGhpcy5zZXRDb250YWluZXJIZWlnaHQoKX0pKSxjb250ZW50X3RvZ2dsZV9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiYWRkTGlzdGVuZXJzXCIsKGZ1bmN0aW9uKCl7X3RoaXMuJGxpbmsoKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoZnVuY3Rpb24oZXZlbnQpe2V2ZW50LnByZXZlbnREZWZhdWx0KCksX3RoaXMuY2xpY2tMaXN0ZW5lcnMoKX0pKX0pKSxjb250ZW50X3RvZ2dsZV9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiY2xpY2tMaXN0ZW5lcnNcIiwoZnVuY3Rpb24oKXtfdGhpcy5zdGF0ZS5zdGF0dXNWYWx1ZT09PVNUQVRVU19FWFBBTkRFRD9fdGhpcy5jb2xsYXBzZSgpOl90aGlzLmV4cGFuZCgpfSkpLGNvbnRlbnRfdG9nZ2xlX2RlZmluZVByb3BlcnR5KHRoaXMsXCJnZXRQYXJzZWRIZWlnaHRcIiwoZnVuY3Rpb24oZWxlbWVudCl7dmFyIF90aGlzJGdldENvbXB1dGVkU3R5bD1fdGhpcy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLGhlaWdodD1fdGhpcyRnZXRDb21wdXRlZFN0eWwuaGVpZ2h0LGJveFNpemluZz1fdGhpcyRnZXRDb21wdXRlZFN0eWwuYm94U2l6aW5nLHBhZGRpbmdUb3A9X3RoaXMkZ2V0Q29tcHV0ZWRTdHlsLnBhZGRpbmdUb3AscGFkZGluZ0JvdHRvbT1fdGhpcyRnZXRDb21wdXRlZFN0eWwucGFkZGluZ0JvdHRvbSxwYXJzZWRIZWlnaHQ9cGFyc2VGbG9hdChoZWlnaHQpO3JldHVyblwiYm9yZGVyLWJveFwiPT09Ym94U2l6aW5nJiYocGFyc2VkSGVpZ2h0LT1wYXJzZUZsb2F0KHBhZGRpbmdUb3ApK3BhcnNlRmxvYXQocGFkZGluZ0JvdHRvbSkpLHBhcnNlZEhlaWdodH0pKSxjb250ZW50X3RvZ2dsZV9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiZ2V0UGFyc2VkTGluZUhlaWdodFwiLChmdW5jdGlvbihlbGVtZW50KXt2YXIgX3RoaXMkZ2V0Q29tcHV0ZWRTdHlsMj1fdGhpcy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLGxpbmVIZWlnaHQ9X3RoaXMkZ2V0Q29tcHV0ZWRTdHlsMi5saW5lSGVpZ2h0LGZvbnRTaXplPV90aGlzJGdldENvbXB1dGVkU3R5bDIuZm9udFNpemUscGFyc2VkTGluZUhlaWdodD1saW5lSGVpZ2h0O3JldHVyblwibm9ybWFsXCI9PT1saW5lSGVpZ2h0JiYocGFyc2VkTGluZUhlaWdodD0oMS4xNCpwYXJzZUZsb2F0KGZvbnRTaXplKSkudG9GaXhlZCgyKStcInB4XCIpLHBhcnNlZExpbmVIZWlnaHR9KSksY29udGVudF90b2dnbGVfZGVmaW5lUHJvcGVydHkodGhpcyxcImdldEVsZW1lbnRXaWR0aFwiLChmdW5jdGlvbihlbGVtZW50KXt2YXIgd2lkdGg9X3RoaXMuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS53aWR0aDtyZXR1cm4gaXNOYU4ocGFyc2VGbG9hdCh3aWR0aCkpPzA6cGFyc2VGbG9hdCh3aWR0aCl9KSksY29udGVudF90b2dnbGVfZGVmaW5lUHJvcGVydHkodGhpcyxcInRocm93UHJvcEVycm9yXCIsKGZ1bmN0aW9uKGVsZW1lbnQpe3Rocm93IG5ldyBFcnJvcihcIltDb250ZW50VG9nZ2xlXSBJbnZhbGlkIFwiLmNvbmNhdChlbGVtZW50LFwiIVwiKSl9KSksY29udGVudF90b2dnbGVfZGVmaW5lUHJvcGVydHkodGhpcyxcInZhbGlkYXRlUHJvcHNcIiwoZnVuY3Rpb24oKXt2YXIgX3RoaXMkcHJvcHM1PV90aGlzLnByb3BzLCRjb250YWluZXI9X3RoaXMkcHJvcHM1LiRjb250YWluZXIsY29sbGFwc2VUZXh0PV90aGlzJHByb3BzNS5jb2xsYXBzZVRleHQsZXhwYW5kVGV4dD1fdGhpcyRwcm9wczUuZXhwYW5kVGV4dCx0aGVtZT1fdGhpcyRwcm9wczUudGhlbWUscm93Q291bnQ9X3RoaXMkcHJvcHM1LnJvd0NvdW50LGNoZWNrSGVpZ2h0QmVmb3JlSW5pdD1fdGhpcyRwcm9wczUuY2hlY2tIZWlnaHRCZWZvcmVJbml0O1wib2JqZWN0XCI9PT1fdHlwZW9mKCRjb250YWluZXIpJiZcIlwiIT09JGNvbnRhaW5lci5pbm5lckhUTUx8fF90aGlzLnRocm93UHJvcEVycm9yKFwiY29udGFpbmVyXCIpLFwic3RyaW5nXCI9PXR5cGVvZiBjb2xsYXBzZVRleHQmJlwiXCIhPT1jb2xsYXBzZVRleHR8fF90aGlzLnRocm93UHJvcEVycm9yKFwiY29sbGFwc2UgdGV4dFwiKSxcInN0cmluZ1wiPT10eXBlb2YgZXhwYW5kVGV4dCYmXCJcIiE9PWV4cGFuZFRleHR8fF90aGlzLnRocm93UHJvcEVycm9yKFwiZXhwYW5kIHRleHRcIiksXCJzdHJpbmdcIj09dHlwZW9mIHRoZW1lJiZPYmplY3QudmFsdWVzKFRIRU1FUykuaW5jbHVkZXModGhlbWUpfHxfdGhpcy50aHJvd1Byb3BFcnJvcihcInRoZW1lXCIpLCghMD09PWlzTmFOKE51bWJlcihyb3dDb3VudCkpfHxOdW1iZXIocm93Q291bnQpPDEpJiZfdGhpcy50aHJvd1Byb3BFcnJvcihcInJvdyBjb3VudFwiKSwoITA9PT1pc05hTihOdW1iZXIoY2hlY2tIZWlnaHRCZWZvcmVJbml0KSl8fE51bWJlcihjaGVja0hlaWdodEJlZm9yZUluaXQpPDB8fE51bWJlcihjaGVja0hlaWdodEJlZm9yZUluaXQpPjEpJiZfdGhpcy50aHJvd1Byb3BFcnJvcihcImNoZWNrSGVpZ2h0QmVmb3JlSW5pdFwiKX0pKSx0aGlzLnByb3BzPWZ1bmN0aW9uKHRhcmdldCl7Zm9yKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIHNvdXJjZT1udWxsIT1hcmd1bWVudHNbaV0/YXJndW1lbnRzW2ldOnt9O2klMj9jb250ZW50X3RvZ2dsZV9vd25LZXlzKE9iamVjdChzb3VyY2UpLCEwKS5mb3JFYWNoKChmdW5jdGlvbihrZXkpe2NvbnRlbnRfdG9nZ2xlX2RlZmluZVByb3BlcnR5KHRhcmdldCxrZXksc291cmNlW2tleV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTpjb250ZW50X3RvZ2dsZV9vd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKChmdW5jdGlvbihrZXkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsa2V5LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLGtleSkpfSkpfXJldHVybiB0YXJnZXR9KHt9LHRoaXMuZGVmYXVsdFByb3BzLHt9LHByb3BzKSx0aGlzLnZhbGlkYXRlUHJvcHMoKSwoMD09PU51bWJlcih0aGlzLnByb3BzLmNoZWNrSGVpZ2h0QmVmb3JlSW5pdCl8fHRoaXMuY2hlY2tJZkVsZW1lbnRJc0hpZ2hlclRoYW5Sb3dDb3VudCgpKSYmKHRoaXMuYWRkQ29udGFpbmVyQ2xhc3NlcygpLHRoaXMuc2V0TGFzdExldHRlcigpLHRoaXMuc3RhdGUuc3RhdHVzLnN1YnNjcmliZSgoZnVuY3Rpb24odmFsdWUpe190aGlzLnN0YXRlLnN0YXR1c1ZhbHVlPXZhbHVlLF90aGlzLnN0YXRlLmxpbmsudGV4dD12YWx1ZT09PVNUQVRVU19FWFBBTkRFRD9fdGhpcy5wcm9wcy5jb2xsYXBzZVRleHQ6X3RoaXMucHJvcHMuZXhwYW5kVGV4dCxfdGhpcy5pbml0KCl9KSkpfTtmdW5jdGlvbiBjb250ZW50X3RvZ2dsZV9hdXRvbG9hZF9vd25LZXlzKG9iamVjdCxlbnVtZXJhYmxlT25seSl7dmFyIGtleXM9T2JqZWN0LmtleXMob2JqZWN0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgc3ltYm9scz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7ZW51bWVyYWJsZU9ubHkmJihzeW1ib2xzPXN5bWJvbHMuZmlsdGVyKChmdW5jdGlvbihzeW0pe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCxzeW0pLmVudW1lcmFibGV9KSkpLGtleXMucHVzaC5hcHBseShrZXlzLHN5bWJvbHMpfXJldHVybiBrZXlzfWZ1bmN0aW9uIGNvbnRlbnRfdG9nZ2xlX2F1dG9sb2FkX2RlZmluZVByb3BlcnR5KG9iaixrZXksdmFsdWUpe3JldHVybiBrZXkgaW4gb2JqP09iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosa2V5LHt2YWx1ZTp2YWx1ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm9ialtrZXldPXZhbHVlLG9ian12YXIgQ29udGVudFRvZ2dsZUF1dG9sb2FkZXI9ZnVuY3Rpb24gQ29udGVudFRvZ2dsZUF1dG9sb2FkZXIoKXshZnVuY3Rpb24oaW5zdGFuY2UsQ29uc3RydWN0b3Ipe2lmKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX0odGhpcyxDb250ZW50VG9nZ2xlQXV0b2xvYWRlcil9O2NvbnRlbnRfdG9nZ2xlX2F1dG9sb2FkX2RlZmluZVByb3BlcnR5KENvbnRlbnRUb2dnbGVBdXRvbG9hZGVyLFwibG9hZFwiLChmdW5jdGlvbigpe2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuanMtY29udGVudC10b2dnbGVcIikuZm9yRWFjaCgoZnVuY3Rpb24oJGNvbnRhaW5lcil7bmV3IGNvbnRlbnRfdG9nZ2xlX0NvbnRlbnRUb2dnbGUoZnVuY3Rpb24odGFyZ2V0KXtmb3IodmFyIGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXt2YXIgc291cmNlPW51bGwhPWFyZ3VtZW50c1tpXT9hcmd1bWVudHNbaV06e307aSUyP2NvbnRlbnRfdG9nZ2xlX2F1dG9sb2FkX293bktleXMoT2JqZWN0KHNvdXJjZSksITApLmZvckVhY2goKGZ1bmN0aW9uKGtleSl7Y29udGVudF90b2dnbGVfYXV0b2xvYWRfZGVmaW5lUHJvcGVydHkodGFyZ2V0LGtleSxzb3VyY2Vba2V5XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOmNvbnRlbnRfdG9nZ2xlX2F1dG9sb2FkX293bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goKGZ1bmN0aW9uKGtleSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCxrZXksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2Usa2V5KSl9KSl9cmV0dXJuIHRhcmdldH0oeyRjb250YWluZXI6JGNvbnRhaW5lcn0sJGNvbnRhaW5lci5kYXRhc2V0KSl9KSl9KSk7X193ZWJwYWNrX3JlcXVpcmVfXygxNDApLF9fd2VicGFja19yZXF1aXJlX18oMTcwKSxfX3dlYnBhY2tfcmVxdWlyZV9fKDE3Mik7dmFyIFJhZGlvPWZ1bmN0aW9uKHByb3BzKXt2YXIgY2hlY2tlZD1wcm9wcy5jaGVja2VkLG5hbWU9cHJvcHMubmFtZSx0aXRsZT1wcm9wcy50aXRsZTtyZXR1cm4nXFxuICAgIDxsYWJlbCBjbGFzcz1cInJhZGlvXCI+XFxuICAgICAgPGlucHV0IGNsYXNzPVwicmFkaW9fX2lucHV0XCIgbmFtZT1cIicuY29uY2F0KG5hbWUsJ1wiIHR5cGU9XCJyYWRpb1wiICcpLmNvbmNhdChjaGVja2VkP1wiY2hlY2tlZFwiOlwiXCIsJz5cXG4gICAgICA8c3BhbiBjbGFzcz1cInJhZGlvX190aXRsZVwiPicpLmNvbmNhdCh0aXRsZSxcIjwvc3Bhbj5cXG4gICAgPC9sYWJlbD5cIil9O2Z1bmN0aW9uIGNvb2tpZV9jb25zZW50X293bktleXMob2JqZWN0LGVudW1lcmFibGVPbmx5KXt2YXIga2V5cz1PYmplY3Qua2V5cyhvYmplY3QpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBzeW1ib2xzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtlbnVtZXJhYmxlT25seSYmKHN5bWJvbHM9c3ltYm9scy5maWx0ZXIoKGZ1bmN0aW9uKHN5bSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LHN5bSkuZW51bWVyYWJsZX0pKSksa2V5cy5wdXNoLmFwcGx5KGtleXMsc3ltYm9scyl9cmV0dXJuIGtleXN9ZnVuY3Rpb24gY29va2llX2NvbnNlbnRfb2JqZWN0U3ByZWFkKHRhcmdldCl7Zm9yKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIHNvdXJjZT1udWxsIT1hcmd1bWVudHNbaV0/YXJndW1lbnRzW2ldOnt9O2klMj9jb29raWVfY29uc2VudF9vd25LZXlzKE9iamVjdChzb3VyY2UpLCEwKS5mb3JFYWNoKChmdW5jdGlvbihrZXkpe2Nvb2tpZV9jb25zZW50X2RlZmluZVByb3BlcnR5KHRhcmdldCxrZXksc291cmNlW2tleV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTpjb29raWVfY29uc2VudF9vd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKChmdW5jdGlvbihrZXkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsa2V5LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLGtleSkpfSkpfXJldHVybiB0YXJnZXR9ZnVuY3Rpb24gY29va2llX2NvbnNlbnRfZGVmaW5lUHJvcGVydHkob2JqLGtleSx2YWx1ZSl7cmV0dXJuIGtleSBpbiBvYmo/T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaixrZXkse3ZhbHVlOnZhbHVlLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6b2JqW2tleV09dmFsdWUsb2JqfXZhciBDT05TRU5UUz1PYmplY3QuZnJlZXplKHtFU1NFTlRJQUw6XCJmdW5jdGlvbmFsXCIsUEVSU09OQUw6XCJmdWxsXCIsVEVNUE9SQVJZOlwidGVtcG9yYXJ5XCIsVU5ERUZJTkVEOlwiXCJ9KSxDT09LSUVfS0VZPVwiY29va2llQ29uc2VudFwiLFVwZGF0ZUNvbnNlbnQ9bmV3IEJlaGF2aW9yU3ViamVjdCxDb29raWVDb25zZW50PXtnZXRDb25zZW50OmZ1bmN0aW9uKCl7dmFyIGNvb2tpZT1oZWxwZXJzX2dldENvb2tpZShDT09LSUVfS0VZKSxjb25zZW50PWNvb2tpZTtyZXR1cm4gdm9pZCAwPT09Y29va2llP2NvbnNlbnQ9Q09OU0VOVFMuVU5ERUZJTkVEOmNvb2tpZSE9PUNPTlNFTlRTLlVOREVGSU5FRCYmT2JqZWN0LnZhbHVlcyhDT05TRU5UUykuaW5jbHVkZXMoY29va2llKXx8KGNvbnNvbGUud2FybihcIkludmFsaWQgY29va2llIGNvbnNlbnQgY29va2llXCIpLGNvbnNlbnQ9Q09OU0VOVFMuVU5ERUZJTkVEKSxjb25zZW50fSxyZW1vdmVDb29raWVDb25zZW50OmZ1bmN0aW9uKCl7aGVscGVyc19yZW1vdmVDb29raWUoQ09PS0lFX0tFWSl9LHNldENvbnNlbnQ6ZnVuY3Rpb24oY29uc2VudCxleHRyYURhdGEpe2lmKGNvbnNlbnQ9PT1DT05TRU5UUy5VTkRFRklORUR8fCFPYmplY3QudmFsdWVzKENPTlNFTlRTKS5pbmNsdWRlcyhjb25zZW50KSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvbnNlbnQgdHlwZVwiKTtjb25zZW50PT09Q09OU0VOVFMuVEVNUE9SQVJZP2hlbHBlcnNfc2V0Q29va2llKENPT0tJRV9LRVksY29uc2VudCxjb29raWVfY29uc2VudF9vYmplY3RTcHJlYWQoe30sZXh0cmFEYXRhKSk6aGVscGVyc19zZXRDb29raWUoQ09PS0lFX0tFWSxjb25zZW50LGNvb2tpZV9jb25zZW50X29iamVjdFNwcmVhZCh7ZXhwaXJlczo5MH0sZXh0cmFEYXRhKSksVXBkYXRlQ29uc2VudC5uZXh0KGNvbnNlbnQpfSxzZXRFc3NlbnRpYWxDb25zZW50OmZ1bmN0aW9uKGV4dHJhRGF0YSl7Q29va2llQ29uc2VudC5zZXRDb25zZW50KENPTlNFTlRTLkVTU0VOVElBTCxjb29raWVfY29uc2VudF9vYmplY3RTcHJlYWQoe30sZXh0cmFEYXRhKSl9LHNldFBlcnNvbmFsQ29uc2VudDpmdW5jdGlvbihleHRyYURhdGEpe0Nvb2tpZUNvbnNlbnQuc2V0Q29uc2VudChDT05TRU5UUy5QRVJTT05BTCxjb29raWVfY29uc2VudF9vYmplY3RTcHJlYWQoe30sZXh0cmFEYXRhKSl9LHNldFRlbXBvcmFyeUNvbnNlbnQ6ZnVuY3Rpb24oZXh0cmFEYXRhKXtDb29raWVDb25zZW50LnNldENvbnNlbnQoQ09OU0VOVFMuVEVNUE9SQVJZLGNvb2tpZV9jb25zZW50X29iamVjdFNwcmVhZCh7fSxleHRyYURhdGEpKX0sZ2V0VmlzaXRlZFVybHM6ZnVuY3Rpb24oKXtyZXR1cm4gaGVscGVyc19nZXRDb29raWUoXCJ2aXNpdGVkVXJsc1wiKX0sYWRkVmlzaXRlZFVybDpmdW5jdGlvbigpe3ZhciB2aXNpdGVkVXJscz1KU09OLnBhcnNlKENvb2tpZUNvbnNlbnQuZ2V0VmlzaXRlZFVybHMoKXx8XCJbXVwiKSxlbmNvZGVkVXJsPWVuY29kZVVSSUNvbXBvbmVudChcIlwiLmNvbmNhdCh3aW5kb3cubG9jYXRpb24ub3JpZ2luKS5jb25jYXQod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKSk7dmlzaXRlZFVybHMuaW5jbHVkZXMoZW5jb2RlZFVybCl8fCh2aXNpdGVkVXJscy5wdXNoKGVuY29kZWRVcmwpLHZpc2l0ZWRVcmxzLmxlbmd0aDwzP2hlbHBlcnNfc2V0Q29va2llKFwidmlzaXRlZFVybHNcIixKU09OLnN0cmluZ2lmeSh2aXNpdGVkVXJscykpOihoZWxwZXJzX3JlbW92ZUNvb2tpZShcInZpc2l0ZWRVcmxzXCIpLENvb2tpZUNvbnNlbnQuc2V0VGVtcG9yYXJ5Q29uc2VudCgpKSl9LENPTlNFTlRTOkNPTlNFTlRTfTtmdW5jdGlvbiBjdXN0b21lcl9jb29raWVfY29uc2VudF9vd25LZXlzKG9iamVjdCxlbnVtZXJhYmxlT25seSl7dmFyIGtleXM9T2JqZWN0LmtleXMob2JqZWN0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgc3ltYm9scz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7ZW51bWVyYWJsZU9ubHkmJihzeW1ib2xzPXN5bWJvbHMuZmlsdGVyKChmdW5jdGlvbihzeW0pe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCxzeW0pLmVudW1lcmFibGV9KSkpLGtleXMucHVzaC5hcHBseShrZXlzLHN5bWJvbHMpfXJldHVybiBrZXlzfWZ1bmN0aW9uIGN1c3RvbWVyX2Nvb2tpZV9jb25zZW50X2RlZmluZVByb3BlcnR5KG9iaixrZXksdmFsdWUpe3JldHVybiBrZXkgaW4gb2JqP09iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosa2V5LHt2YWx1ZTp2YWx1ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm9ialtrZXldPXZhbHVlLG9ian12YXIgQ1VTVE9NRVJfQ09OU0VOVFM9T2JqZWN0LmZyZWV6ZSh7UEVSU09OQUw6e25hbWU6Q09OU0VOVFMuUEVSU09OQUwsaWQ6MTAwfSxFU1NFTlRJQUw6e25hbWU6Q09OU0VOVFMuRVNTRU5USUFMLGlkOjEwMX0sVEVNUE9SQVJZOntuYW1lOkNPTlNFTlRTLlRFTVBPUkFSWSxpZDoxMDJ9LFVOREVGSU5FRDp7fX0pLEN1c3RvbWVyQ29va2llQ29uc2VudD17Y29uc2VudFR5cGVJZHM6ZnVuY3Rpb24oKXt2YXIgY29uc2VudFR5cGVJZHM9W107Zm9yKHZhciBjb25zZW50VHlwZSBpbiBDVVNUT01FUl9DT05TRU5UUylDVVNUT01FUl9DT05TRU5UU1tjb25zZW50VHlwZV0hPT1DVVNUT01FUl9DT05TRU5UUy5VTkRFRklORUQmJmNvbnNlbnRUeXBlSWRzLnB1c2goQ1VTVE9NRVJfQ09OU0VOVFNbY29uc2VudFR5cGVdLmlkKTtyZXR1cm4gY29uc2VudFR5cGVJZHN9LGNvbnNlbnRUeXBlTmFtZXM6ZnVuY3Rpb24oKXt2YXIgY29uc2VudFR5cGVOYW1lcz1bXTtmb3IodmFyIGNvbnNlbnRUeXBlIGluIENVU1RPTUVSX0NPTlNFTlRTKUNVU1RPTUVSX0NPTlNFTlRTW2NvbnNlbnRUeXBlXSE9PUNVU1RPTUVSX0NPTlNFTlRTLlVOREVGSU5FRCYmY29uc2VudFR5cGVOYW1lcy5wdXNoKENVU1RPTUVSX0NPTlNFTlRTW2NvbnNlbnRUeXBlXS5uYW1lKTtyZXR1cm4gY29uc2VudFR5cGVOYW1lc30saGFzQ29uc2VudFR5cGVJRDpmdW5jdGlvbihjdXN0b21lckNvb2tpZSl7dmFyIGNvbnNlbnRUeXBlSWQ9Y3VzdG9tZXJDb29raWUuY29uc2VudFR5cGVJZDtyZXR1cm4hKHZvaWQgMD09PWNvbnNlbnRUeXBlSWR8fCFDdXN0b21lckNvb2tpZUNvbnNlbnQuY29uc2VudFR5cGVJZHMoKS5pbmNsdWRlcyhjb25zZW50VHlwZUlkKSl9LGhhc0NvbnNlbnRUeXBlTmFtZTpmdW5jdGlvbihjdXN0b21lckNvb2tpZSl7dmFyIGNvbnNlbnRUeXBlTmFtZT1jdXN0b21lckNvb2tpZS5jb25zZW50VHlwZU5hbWU7cmV0dXJuISh2b2lkIDA9PT1jb25zZW50VHlwZU5hbWV8fCFDdXN0b21lckNvb2tpZUNvbnNlbnQuY29uc2VudFR5cGVOYW1lcygpLmluY2x1ZGVzKGNvbnNlbnRUeXBlTmFtZSkpfSxoYXNEZWNpc2lvbkF0OmZ1bmN0aW9uKGN1c3RvbWVyQ29va2llKXtyZXR1cm4hKHZvaWQgMD09PWN1c3RvbWVyQ29va2llLmRlY2lzaW9uQXR8fCFoZWxwZXJzX2lzRGF0ZUZvcm1hdHRlZChjdXN0b21lckNvb2tpZS5kZWNpc2lvbkF0LFwiWVlZWS1NTS1ERFRISDptbTpzcy4wMDAwMDAwKzAwOjAwXCIpKX0saGFzSXNBY2NlcHRlZDpmdW5jdGlvbihjdXN0b21lckNvb2tpZSl7dmFyIGlzQWNjZXB0ZWQ9Y3VzdG9tZXJDb29raWUuaXNBY2NlcHRlZDtyZXR1cm4hKHZvaWQgMD09PWN1c3RvbWVyQ29va2llLmlzQWNjZXB0ZWR8fFwiYm9vbGVhblwiIT10eXBlb2YgaXNBY2NlcHRlZCl9LHJlbW92ZUN1c3RvbWVyQ29va2llQ29uc2VudDpmdW5jdGlvbigpe2hlbHBlcnNfcmVtb3ZlQ29va2llKFwiY3VzdG9tZXJDb29raWVDb25zZW50XCIpfSxzZXRDdXN0b21lckNvbnNlbnRDb29raWVWYWx1ZTpmdW5jdGlvbihjb25zZW50LGlzQWNjZXB0ZWQsZXh0cmFEYXRhKXtpZihjb25zZW50PT09Q09OU0VOVFMuVU5ERUZJTkVEfHwhQ3VzdG9tZXJDb29raWVDb25zZW50LmNvbnNlbnRUeXBlSWRzKCkuaW5jbHVkZXMoY29uc2VudC5pZCl8fCFDdXN0b21lckNvb2tpZUNvbnNlbnQuY29uc2VudFR5cGVOYW1lcygpLmluY2x1ZGVzKGNvbnNlbnQubmFtZSkpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjb25zZW50IHR5cGVcIik7dmFyIGN1c3RvbWVyQ29va2llPVt7Y29uc2VudFR5cGVJZDpjb25zZW50LmlkLGNvbnNlbnRUeXBlTmFtZTpjb25zZW50Lm5hbWUsaXNBY2NlcHRlZDppc0FjY2VwdGVkLGRlY2lzaW9uQXQ6aGVscGVyc191dGNDdXJyZW50VGltZVN0cmluZyhcIllZWVktTU0tRERUSEg6bW06c3MuMDAwMDAwMCswMDowMFwiKX1dO2hlbHBlcnNfc2V0Q29va2llV2l0aEVuY29kaW5nKFwiY3VzdG9tZXJDb29raWVDb25zZW50XCIsY3VzdG9tZXJDb29raWUsZnVuY3Rpb24odGFyZ2V0KXtmb3IodmFyIGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXt2YXIgc291cmNlPW51bGwhPWFyZ3VtZW50c1tpXT9hcmd1bWVudHNbaV06e307aSUyP2N1c3RvbWVyX2Nvb2tpZV9jb25zZW50X293bktleXMoT2JqZWN0KHNvdXJjZSksITApLmZvckVhY2goKGZ1bmN0aW9uKGtleSl7Y3VzdG9tZXJfY29va2llX2NvbnNlbnRfZGVmaW5lUHJvcGVydHkodGFyZ2V0LGtleSxzb3VyY2Vba2V5XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOmN1c3RvbWVyX2Nvb2tpZV9jb25zZW50X293bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goKGZ1bmN0aW9uKGtleSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCxrZXksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2Usa2V5KSl9KSl9cmV0dXJuIHRhcmdldH0oe30sZXh0cmFEYXRhKSl9LGdldEN1c3RvbWVyQ29uc2VudENvb2tpZVZhbHVlOmZ1bmN0aW9uKCl7dHJ5e3ZhciBjb29raWU9aGVscGVyc19nZXRDb29raWUoXCJjdXN0b21lckNvb2tpZUNvbnNlbnRcIik7aWYodm9pZCAwPT09Y29va2llKXJldHVybjtyZXR1cm4gSlNPTi5wYXJzZShjb29raWUpfWNhdGNoKGVycm9yKXtyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oXCJDYW5ub3QgZGV0ZXJtaW5lIGN1c3RvbWVyIGNvb2tpZSBjb25zZW50LCBcIitlcnJvcil9fSxpc1ZhbGlkQ3VzdG9tZXJDb25zZW50Q29va2llVmFsdWU6ZnVuY3Rpb24oY3VzdG9tZXJDb29raWUpe2lmKCFBcnJheS5pc0FycmF5KGN1c3RvbWVyQ29va2llKXx8MSE9PWN1c3RvbWVyQ29va2llLmxlbmd0aClyZXR1cm4hMTt2YXIgY3VzdG9tZXJDb29raWVUeXBlPWN1c3RvbWVyQ29va2llWzBdO3JldHVybiBDdXN0b21lckNvb2tpZUNvbnNlbnQuaGFzQ29uc2VudFR5cGVJRChjdXN0b21lckNvb2tpZVR5cGUpJiZDdXN0b21lckNvb2tpZUNvbnNlbnQuaGFzQ29uc2VudFR5cGVOYW1lKGN1c3RvbWVyQ29va2llVHlwZSkmJkN1c3RvbWVyQ29va2llQ29uc2VudC5oYXNEZWNpc2lvbkF0KGN1c3RvbWVyQ29va2llVHlwZSkmJkN1c3RvbWVyQ29va2llQ29uc2VudC5oYXNJc0FjY2VwdGVkKGN1c3RvbWVyQ29va2llVHlwZSl9LGdldEN1c3RvbWVyQ29uc2VudENvb2tpZVR5cGU6ZnVuY3Rpb24oKXt2YXIgY3VzdG9tZXJDb29raWU9Q3VzdG9tZXJDb29raWVDb25zZW50LmdldEN1c3RvbWVyQ29uc2VudENvb2tpZVZhbHVlKCk7aWYoIUFycmF5LmlzQXJyYXkoY3VzdG9tZXJDb29raWUpfHwhQ3VzdG9tZXJDb29raWVDb25zZW50LmlzVmFsaWRDdXN0b21lckNvbnNlbnRDb29raWVWYWx1ZShjdXN0b21lckNvb2tpZSkpcmV0dXJuIENVU1RPTUVSX0NPTlNFTlRTLlVOREVGSU5FRDtmb3IodmFyIGNvbnNlbnRUeXBlIGluIGN1c3RvbWVyQ29va2llPWN1c3RvbWVyQ29va2llWzBdLENVU1RPTUVSX0NPTlNFTlRTKWlmKGN1c3RvbWVyQ29va2llLmNvbnNlbnRUeXBlTmFtZT09PUNVU1RPTUVSX0NPTlNFTlRTW2NvbnNlbnRUeXBlXS5uYW1lJiZjdXN0b21lckNvb2tpZS5jb25zZW50VHlwZUlkPT09Q1VTVE9NRVJfQ09OU0VOVFNbY29uc2VudFR5cGVdLmlkKXJldHVybiBDVVNUT01FUl9DT05TRU5UU1tjb25zZW50VHlwZV07cmV0dXJuIENVU1RPTUVSX0NPTlNFTlRTLlVOREVGSU5FRH0sQ1VTVE9NRVJfQ09OU0VOVFM6Q1VTVE9NRVJfQ09OU0VOVFN9O2Z1bmN0aW9uIGNvb2tpZV9jb25zZW50X3dyYXBwZXJfb3duS2V5cyhvYmplY3QsZW51bWVyYWJsZU9ubHkpe3ZhciBrZXlzPU9iamVjdC5rZXlzKG9iamVjdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHN5bWJvbHM9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO2VudW1lcmFibGVPbmx5JiYoc3ltYm9scz1zeW1ib2xzLmZpbHRlcigoZnVuY3Rpb24oc3ltKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3Qsc3ltKS5lbnVtZXJhYmxlfSkpKSxrZXlzLnB1c2guYXBwbHkoa2V5cyxzeW1ib2xzKX1yZXR1cm4ga2V5c31mdW5jdGlvbiBjb29raWVfY29uc2VudF93cmFwcGVyX29iamVjdFNwcmVhZCh0YXJnZXQpe2Zvcih2YXIgaT0xO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspe3ZhciBzb3VyY2U9bnVsbCE9YXJndW1lbnRzW2ldP2FyZ3VtZW50c1tpXTp7fTtpJTI/Y29va2llX2NvbnNlbnRfd3JhcHBlcl9vd25LZXlzKE9iamVjdChzb3VyY2UpLCEwKS5mb3JFYWNoKChmdW5jdGlvbihrZXkpe2Nvb2tpZV9jb25zZW50X3dyYXBwZXJfZGVmaW5lUHJvcGVydHkodGFyZ2V0LGtleSxzb3VyY2Vba2V5XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOmNvb2tpZV9jb25zZW50X3dyYXBwZXJfb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaCgoZnVuY3Rpb24oa2V5KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LGtleSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSxrZXkpKX0pKX1yZXR1cm4gdGFyZ2V0fWZ1bmN0aW9uIGNvb2tpZV9jb25zZW50X3dyYXBwZXJfZGVmaW5lUHJvcGVydHkob2JqLGtleSx2YWx1ZSl7cmV0dXJuIGtleSBpbiBvYmo/T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaixrZXkse3ZhbHVlOnZhbHVlLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6b2JqW2tleV09dmFsdWUsb2JqfWZ1bmN0aW9uIGNvb2tpZV9zZXR0aW5nc19kZWZpbmVQcm9wZXJ0eShvYmosa2V5LHZhbHVlKXtyZXR1cm4ga2V5IGluIG9iaj9PYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLGtleSx7dmFsdWU6dmFsdWUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpvYmpba2V5XT12YWx1ZSxvYmp9Q29va2llQ29uc2VudC5nZXRDb25zZW50PWZ1bmN0aW9uKCl7dmFyIGNvb2tpZT1oZWxwZXJzX2dldENvb2tpZShDT09LSUVfS0VZKSxjdXN0b21lckNvb2tpZT1DdXN0b21lckNvb2tpZUNvbnNlbnQuZ2V0Q3VzdG9tZXJDb25zZW50Q29va2llVHlwZSgpLGNvbnNlbnQ9Y29va2llO3JldHVybiB2b2lkIDA9PT1jb29raWV8fGN1c3RvbWVyQ29va2llPT09Q1VTVE9NRVJfQ09OU0VOVFMuVU5ERUZJTkVEPyhDb29raWVDb25zZW50LnJlbW92ZUNvb2tpZUNvbnNlbnQoKSxDdXN0b21lckNvb2tpZUNvbnNlbnQucmVtb3ZlQ3VzdG9tZXJDb29raWVDb25zZW50KCksQ09OU0VOVFMuVU5ERUZJTkVEKTpjb29raWUhPT1DT05TRU5UUy5VTkRFRklORUQmJk9iamVjdC52YWx1ZXMoQ09OU0VOVFMpLmluY2x1ZGVzKGNvb2tpZSk/Y29uc2VudDooY29uc29sZS53YXJuKFwiSW52YWxpZCBjb29raWUgY29uc2VudCBjb29raWVcIiksQ09OU0VOVFMuVU5ERUZJTkVEKX0sQ29va2llQ29uc2VudC5zZXRDb25zZW50PWZ1bmN0aW9uKGNvbnNlbnQsZXh0cmFEYXRhKXtpZihjb25zZW50PT09Q09OU0VOVFMuVU5ERUZJTkVEfHwhT2JqZWN0LnZhbHVlcyhDT05TRU5UUykuaW5jbHVkZXMoY29uc2VudCkpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjb25zZW50IHR5cGVcIik7aWYoY29uc2VudD09PUNPTlNFTlRTLlRFTVBPUkFSWSloZWxwZXJzX3NldENvb2tpZShDT09LSUVfS0VZLGNvbnNlbnQsY29va2llX2NvbnNlbnRfd3JhcHBlcl9vYmplY3RTcHJlYWQoe30sZXh0cmFEYXRhKSksQ3VzdG9tZXJDb29raWVDb25zZW50LnNldEN1c3RvbWVyQ29uc2VudENvb2tpZVZhbHVlKENVU1RPTUVSX0NPTlNFTlRTLlRFTVBPUkFSWSwhMCxjb29raWVfY29uc2VudF93cmFwcGVyX29iamVjdFNwcmVhZCh7fSxleHRyYURhdGEpKTtlbHNlIGZvcih2YXIgY3VzdG9tZXJDb25zZW50IGluIGhlbHBlcnNfc2V0Q29va2llKENPT0tJRV9LRVksY29uc2VudCxjb29raWVfY29uc2VudF93cmFwcGVyX29iamVjdFNwcmVhZCh7ZXhwaXJlczo5MH0sZXh0cmFEYXRhKSksQ1VTVE9NRVJfQ09OU0VOVFMpaWYoQ1VTVE9NRVJfQ09OU0VOVFNbY3VzdG9tZXJDb25zZW50XS5uYW1lPT09Y29uc2VudCl7Q3VzdG9tZXJDb29raWVDb25zZW50LnNldEN1c3RvbWVyQ29uc2VudENvb2tpZVZhbHVlKENVU1RPTUVSX0NPTlNFTlRTW2N1c3RvbWVyQ29uc2VudF0sITAsY29va2llX2NvbnNlbnRfd3JhcHBlcl9vYmplY3RTcHJlYWQoe2V4cGlyZXM6OTB9LGV4dHJhRGF0YSkpO2JyZWFrfVVwZGF0ZUNvbnNlbnQubmV4dChjb25zZW50KX07dmFyIEpTX1NFTEVDVE9SX0VTU0VOVElBTD1cImpzLWNvb2tpZS1zZXR0aW5ncy0tXCIrQ29va2llQ29uc2VudC5DT05TRU5UUy5FU1NFTlRJQUwsSlNfU0VMRUNUT1JfUEVSU09OQUw9XCJqcy1jb29raWUtc2V0dGluZ3MtLVwiK0Nvb2tpZUNvbnNlbnQuQ09OU0VOVFMuUEVSU09OQUwsY29va2llX3NldHRpbmdzX0Nvb2tpZVNldHRpbmdzPWZ1bmN0aW9uIENvb2tpZVNldHRpbmdzKHByb3BzKXt2YXIgX3RoaXM9dGhpczshZnVuY3Rpb24oaW5zdGFuY2UsQ29uc3RydWN0b3Ipe2lmKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX0odGhpcyxDb29raWVTZXR0aW5ncyksY29va2llX3NldHRpbmdzX2RlZmluZVByb3BlcnR5KHRoaXMsXCJwcm9wc1wiLHZvaWQgMCksY29va2llX3NldHRpbmdzX2RlZmluZVByb3BlcnR5KHRoaXMsXCJzdGF0ZVwiLHtjb25zZW50OkNvb2tpZUNvbnNlbnQuQ09OU0VOVFMuVU5ERUZJTkVEfSksY29va2llX3NldHRpbmdzX2RlZmluZVByb3BlcnR5KHRoaXMsXCJhZGRMaXN0ZW5lcnNcIiwoZnVuY3Rpb24oKXt2YXIgJGNvbnRhaW5lcj1fdGhpcy5wcm9wcy4kY29udGFpbmVyLCRjb250RXNzZW50aWFsPSRjb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5cIitKU19TRUxFQ1RPUl9FU1NFTlRJQUwpOyRjb250RXNzZW50aWFsJiYkY29udEVzc2VudGlhbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoZnVuY3Rpb24oKXtyZXR1cm4gX3RoaXMuaGFuZGxlQ2xpY2tPbkNvbnNlbnQoQ29va2llQ29uc2VudC5DT05TRU5UUy5FU1NFTlRJQUwpfSkpO3ZhciAkY29udFBlcnNvbmFsPSRjb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5cIitKU19TRUxFQ1RPUl9QRVJTT05BTCk7JGNvbnRQZXJzb25hbCYmJGNvbnRQZXJzb25hbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoZnVuY3Rpb24oKXtyZXR1cm4gX3RoaXMuaGFuZGxlQ2xpY2tPbkNvbnNlbnQoQ29va2llQ29uc2VudC5DT05TRU5UUy5QRVJTT05BTCl9KSl9KSksY29va2llX3NldHRpbmdzX2RlZmluZVByb3BlcnR5KHRoaXMsXCJoYW5kbGVDbGlja09uQ29uc2VudFwiLChmdW5jdGlvbihjb25zZW50KXtfdGhpcy5zdGF0ZS5jb25zZW50IT09Y29uc2VudCYmKF90aGlzLnNldENvbnNlbnQoY29uc2VudCksX3RoaXMucmVuZGVyKCksX3RoaXMuYWRkTGlzdGVuZXJzKCksX3RoaXMucHJvcHMubm90aWZ5U3VjY2VzcyhfdGhpcy5wcm9wcy5pMThuLk1FU1NBR0VfU0VUVElOR1NfVVBEQVRFRCkpfSkpLGNvb2tpZV9zZXR0aW5nc19kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiZ2V0Q29uc2VudFwiLChmdW5jdGlvbigpe2lmKF90aGlzLnN0YXRlLmNvbnNlbnQhPT1Db29raWVDb25zZW50LkNPTlNFTlRTLlVOREVGSU5FRClyZXR1cm4gX3RoaXMuc3RhdGUuY29uc2VudDt2YXIgY29uc2VudD1Db29raWVDb25zZW50LmdldENvbnNlbnQoKTtyZXR1cm4gY29uc2VudCYmKF90aGlzLnN0YXRlLmNvbnNlbnQ9Y29uc2VudCksX3RoaXMuc3RhdGUuY29uc2VudH0pKSxjb29raWVfc2V0dGluZ3NfZGVmaW5lUHJvcGVydHkodGhpcyxcInNldENvbnNlbnRcIiwoZnVuY3Rpb24oY29uc2VudCl7dmFyIGRvbWFpbj1fdGhpcy5wcm9wcy5kb21haW47Q29va2llQ29uc2VudC5zZXRDb25zZW50KGNvbnNlbnQse2RvbWFpbjpkb21haW59KSxfdGhpcy5zdGF0ZS5jb25zZW50PWNvbnNlbnR9KSksY29va2llX3NldHRpbmdzX2RlZmluZVByb3BlcnR5KHRoaXMsXCJyZW5kZXJcIiwoZnVuY3Rpb24oKXt2YXIgX3RoaXMkcHJvcHM9X3RoaXMucHJvcHMsJGNvbnRhaW5lcj1fdGhpcyRwcm9wcy4kY29udGFpbmVyLGkxOG49X3RoaXMkcHJvcHMuaTE4bixjb25zZW50PV90aGlzLnN0YXRlLmNvbnNlbnQsaTE4bkRlc2NUZW1wbGF0ZT1cIlwiO2kxOG4uREVTQyYmKGkxOG5EZXNjVGVtcGxhdGU9JzxwIGNsYXNzPVwiY29va2llLXNldHRpbmdzX19kZXNjXCI+Jy5jb25jYXQoaTE4bi5ERVNDLFwiPC9wPlwiKSk7dmFyIEhUTUw9J1xcbiAgICAgIDxkaXYgY2xhc3M9XCJjb29raWUtc2V0dGluZ3NcIj5cXG4gICAgICAgICAgPGgyIGNsYXNzPVwiY29va2llLXNldHRpbmdzX190aXRsZVwiPicuY29uY2F0KGkxOG4uVElUTEUsXCI8L2gyPlxcbiAgICAgICAgICBcIikuY29uY2F0KGkxOG5EZXNjVGVtcGxhdGUsJ1xcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29va2llLXNldHRpbmdzX19jYXJkc1wiPlxcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvb2tpZS1zZXR0aW5nc19fY2FyZCAnKS5jb25jYXQoSlNfU0VMRUNUT1JfUEVSU09OQUwsJ1wiPlxcbiAgICAgICAgICAgICAgICAgICcpLmNvbmNhdChSYWRpbyh7Y2hlY2tlZDpjb25zZW50PT09Q29va2llQ29uc2VudC5DT05TRU5UUy5QRVJTT05BTCxuYW1lOlwiY29va2llLXNldHRpbmdzXCIsdGl0bGU6aTE4bi5QRVJTT05BTElTRURfVElUTEV9KSwnXFxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjb29raWUtc2V0dGluZ3NfX2NhcmQtZGVzY1wiPicpLmNvbmNhdChpMThuLlBFUlNPTkFMSVNFRF9URVhULCc8L3A+XFxuICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb29raWUtc2V0dGluZ3NfX2NhcmQgJykuY29uY2F0KEpTX1NFTEVDVE9SX0VTU0VOVElBTCwnXCI+XFxuICAgICAgICAgICAgICAgICAgJykuY29uY2F0KFJhZGlvKHtjaGVja2VkOmNvbnNlbnQ9PT1Db29raWVDb25zZW50LkNPTlNFTlRTLkVTU0VOVElBTCxuYW1lOlwiY29va2llLXNldHRpbmdzXCIsdGl0bGU6aTE4bi5FU1NFTlRJQUxfVElUTEV9KSwnXFxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjb29raWUtc2V0dGluZ3NfX2NhcmQtZGVzY1wiPicpLmNvbmNhdChpMThuLkVTU0VOVElBTF9URVhULFwiPC9wPlxcbiAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgIDwvZGl2PlxcbiAgICAgIDwvZGl2PlwiKTskY29udGFpbmVyLmlubmVySFRNTD1cIlwiLCRjb250YWluZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKFwiYmVmb3JlZW5kXCIsSFRNTCl9KSksdGhpcy5wcm9wcz1PYmplY3QuZnJlZXplKHByb3BzKSx0aGlzLnByb3BzJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLnByb3BzLnVwZGF0ZUNvb2tpZUZuJiZVcGRhdGVDb25zZW50LnN1YnNjcmliZSh0aGlzLnByb3BzLnVwZGF0ZUNvb2tpZUZuKSx0aGlzLmdldENvbnNlbnQoKSx0aGlzLnJlbmRlcigpLHRoaXMuYWRkTGlzdGVuZXJzKCl9LHByb3BfdHlwZXM9KF9fd2VicGFja19yZXF1aXJlX18oMTc0KSxfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKTtmdW5jdGlvbiBjb29raWVfd2FsbF9vd25LZXlzKG9iamVjdCxlbnVtZXJhYmxlT25seSl7dmFyIGtleXM9T2JqZWN0LmtleXMob2JqZWN0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgc3ltYm9scz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7ZW51bWVyYWJsZU9ubHkmJihzeW1ib2xzPXN5bWJvbHMuZmlsdGVyKChmdW5jdGlvbihzeW0pe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCxzeW0pLmVudW1lcmFibGV9KSkpLGtleXMucHVzaC5hcHBseShrZXlzLHN5bWJvbHMpfXJldHVybiBrZXlzfWZ1bmN0aW9uIGNvb2tpZV93YWxsX29iamVjdFNwcmVhZCh0YXJnZXQpe2Zvcih2YXIgaT0xO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspe3ZhciBzb3VyY2U9bnVsbCE9YXJndW1lbnRzW2ldP2FyZ3VtZW50c1tpXTp7fTtpJTI/Y29va2llX3dhbGxfb3duS2V5cyhPYmplY3Qoc291cmNlKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oa2V5KXtjb29raWVfd2FsbF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsa2V5LHNvdXJjZVtrZXldKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk6Y29va2llX3dhbGxfb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaCgoZnVuY3Rpb24oa2V5KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LGtleSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSxrZXkpKX0pKX1yZXR1cm4gdGFyZ2V0fWZ1bmN0aW9uIGNvb2tpZV93YWxsX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LHByb3BzKXtmb3IodmFyIGk9MDtpPHByb3BzLmxlbmd0aDtpKyspe3ZhciBkZXNjcmlwdG9yPXByb3BzW2ldO2Rlc2NyaXB0b3IuZW51bWVyYWJsZT1kZXNjcmlwdG9yLmVudW1lcmFibGV8fCExLGRlc2NyaXB0b3IuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIGRlc2NyaXB0b3ImJihkZXNjcmlwdG9yLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LGRlc2NyaXB0b3Iua2V5LGRlc2NyaXB0b3IpfX1mdW5jdGlvbiBjb29raWVfd2FsbF9kZWZpbmVQcm9wZXJ0eShvYmosa2V5LHZhbHVlKXtyZXR1cm4ga2V5IGluIG9iaj9PYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLGtleSx7dmFsdWU6dmFsdWUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpvYmpba2V5XT12YWx1ZSxvYmp9dmFyIGNvb2tpZV93YWxsX0Nvb2tpZVdhbGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBDb29raWVXYWxsKF9wcm9wcyl7dmFyIF90aGlzPXRoaXM7IWZ1bmN0aW9uKGluc3RhbmNlLENvbnN0cnVjdG9yKXtpZighKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9KHRoaXMsQ29va2llV2FsbCksY29va2llX3dhbGxfZGVmaW5lUHJvcGVydHkodGhpcyxcInByb3BzXCIsdm9pZCAwKSxjb29raWVfd2FsbF9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiY29tcG9uZW50U3RhdGVcIix7ZXhwaXJlczo5MH0pLGNvb2tpZV93YWxsX2RlZmluZVByb3BlcnR5KHRoaXMsXCJzZXRTdGF0ZVwiLChmdW5jdGlvbihwcm9wcyl7X3RoaXMuY29tcG9uZW50U3RhdGU9Y29va2llX3dhbGxfb2JqZWN0U3ByZWFkKHt9LF90aGlzLmNvbXBvbmVudFN0YXRlLHt9LHByb3BzKSxfdGhpcy5yZW5kZXIoKX0pKSxjb29raWVfd2FsbF9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiZ2V0U3RhdGVcIiwoZnVuY3Rpb24oKXtyZXR1cm4gX3RoaXMuY29tcG9uZW50U3RhdGV9KSksY29va2llX3dhbGxfZGVmaW5lUHJvcGVydHkodGhpcyxcImNsaWNrT2tFdmVudFwiLChmdW5jdGlvbigpe3ZhciBleHRyYVByb3BzPXtkb21haW46X3RoaXMucHJvcHMuZG9tYWlufTtDb29raWVDb25zZW50LnNldFBlcnNvbmFsQ29uc2VudChjb29raWVfd2FsbF9vYmplY3RTcHJlYWQoe30sZXh0cmFQcm9wcykpLF90aGlzLmNsb3NlQ29va2llV2FsbCgpfSkpLGNvb2tpZV93YWxsX2RlZmluZVByb3BlcnR5KHRoaXMsXCJjbGlja0Vzc2VudGlhbEV2ZW50XCIsKGZ1bmN0aW9uKCl7dmFyIGV4dHJhUHJvcHM9e2RvbWFpbjpfdGhpcy5wcm9wcy5kb21haW59O0Nvb2tpZUNvbnNlbnQuc2V0RXNzZW50aWFsQ29uc2VudChjb29raWVfd2FsbF9vYmplY3RTcHJlYWQoe30sZXh0cmFQcm9wcykpLF90aGlzLmNsb3NlQ29va2llV2FsbCgpfSkpLGNvb2tpZV93YWxsX2RlZmluZVByb3BlcnR5KHRoaXMsXCJjbG9zZUNvb2tpZVdhbGxcIiwoZnVuY3Rpb24oKXtfdGhpcy5zZXRTdGF0ZSh7aXNDbG9zZWQ6ITB9KX0pKSxjb29raWVfd2FsbF9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiY2xvc2VDb29raWVXYWxsVGhpc1Nlc3Npb25cIiwoZnVuY3Rpb24oKXt2YXIgZXh0cmFQcm9wcz17ZG9tYWluOl90aGlzLnByb3BzLmRvbWFpbn07Q29va2llQ29uc2VudC5nZXRDb25zZW50KCk9PT1DT05TRU5UUy5VTkRFRklORUQmJkNvb2tpZUNvbnNlbnQuc2V0VGVtcG9yYXJ5Q29uc2VudChjb29raWVfd2FsbF9vYmplY3RTcHJlYWQoe30sZXh0cmFQcm9wcykpLF90aGlzLmNsb3NlQ29va2llV2FsbCgpfSkpLGNvb2tpZV93YWxsX2RlZmluZVByb3BlcnR5KHRoaXMsXCJyZW5kZXJcIiwoZnVuY3Rpb24oKXt2YXIgX3RoaXMkcHJvcHM9X3RoaXMucHJvcHMsYnV0dG9uVGV4dD1fdGhpcyRwcm9wcy5idXR0b25UZXh0LGNsYXNzTGlzdD1fdGhpcyRwcm9wcy5jbGFzc0xpc3QsJGNvbnRhaW5lcj1fdGhpcyRwcm9wcy4kY29udGFpbmVyLHVybFRleHQ9X3RoaXMkcHJvcHMudXJsVGV4dCxjb250ZW50VGV4dD1fdGhpcyRwcm9wcy5jb250ZW50VGV4dCx1cmw9X3RoaXMkcHJvcHMudXJsLGhpZGVMaW5rQWZ0ZXJUZXh0PV90aGlzJHByb3BzLmhpZGVMaW5rQWZ0ZXJUZXh0LGJ1dHRvbkVzc2VudGlhbFBhY2thZ2U9X3RoaXMkcHJvcHMuYnV0dG9uRXNzZW50aWFsUGFja2FnZSxidXR0b25UZXh0QXJpYT1fdGhpcyRwcm9wcy5idXR0b25UZXh0QXJpYSxidXR0b25Fc3NlbnRpYWxQYWNrYWdlQXJpYT1fdGhpcyRwcm9wcy5idXR0b25Fc3NlbnRpYWxQYWNrYWdlQXJpYSx0ZXh0V2l0aFVybD1jb250ZW50VGV4dC5yZXBsYWNlKC97cHJlZmVyZW5jZXNVcmx9L2csJzxhIGhyZWY9XCInLmNvbmNhdCh1cmwsJ1wiIGNsYXNzPVwiY2MtYmFubmVyX19saW5rXCI+JykpLnJlcGxhY2UoL3tcXC9wcmVmZXJlbmNlc1VybH0vZyxcIjwvYT5cIiksdXJsTGlua0FmdGVyVGV4dD1oaWRlTGlua0FmdGVyVGV4dD9cIlwiOlwiPGEgaHJlZj1cIi5jb25jYXQodXJsLCcgY2xhc3M9XCJjYy1iYW5uZXJfX2xpbmtcIj4nKS5jb25jYXQodXJsVGV4dCxcIjwvYT5cIik7JGNvbnRhaW5lci5pbm5lckhUTUw9XCJcIixfdGhpcy5nZXRTdGF0ZSgpLmlzQ2xvc2VkfHxfdGhpcy5nZXRTdGF0ZSgpLmNvbnNlbnR8fCEkY29udGFpbmVyfHwoJGNvbnRhaW5lci5pbm5lckhUTUw9J1xcbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2MtYmFubmVyX19jb250YWluZXIgJy5jb25jYXQoY2xhc3NMaXN0P2NsYXNzTGlzdC5qb2luKFwiIFwiKTpcIlwiLCdcIj5cXG4gICAgICAgIDxhcnRpY2xlIGNsYXNzPVwiY2MtYmFubmVyX193cmFwcGVyXCI+XFxuICAgICAgICAgIDxwIGNsYXNzPVwiY2MtYmFubmVyX190ZXh0XCI+XFxuICAgICAgICAgICAgJykuY29uY2F0KHRleHRXaXRoVXJsLFwiXFxuICAgICAgICAgICAgXCIpLmNvbmNhdCh1cmxMaW5rQWZ0ZXJUZXh0LCdcXG4gICAgICAgICAgPC9wPlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2MtYmFubmVyX19idXR0b25zXCI+XFxuICAgICAgICAgICAgPGJ1dHRvblxcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIicpLmNvbmNhdChidXR0b25UZXh0QXJpYSwnXCJcXG4gICAgICAgICAgICAgIGNsYXNzPVwiXFxuICAgICAgICAgICAgICBjYy1iYW5uZXJfX2J0bi1vayBjYy1iYW5uZXJfX2J0blxcbiAgICAgICAgICAgICAgJykuY29uY2F0KFwianMtYnRuLW9rXCIsJ1wiXFxuICAgICAgICAgICAgPlxcbiAgICAgICAgICAgICAgJykuY29uY2F0KGJ1dHRvblRleHQsJ1xcbiAgICAgICAgICAgIDwvYnV0dG9uPlxcbiAgICAgICAgICAgIDxidXR0b25cXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCInKS5jb25jYXQoYnV0dG9uRXNzZW50aWFsUGFja2FnZUFyaWEsJ1wiXFxuICAgICAgICAgICAgICBjbGFzcz1cIlxcbiAgICAgICAgICAgICAgY2MtYmFubmVyX19idG4tZXNzZW50aWFsIGNjLWJhbm5lcl9fYnRuXFxuICAgICAgICAgICAgICAnKS5jb25jYXQoXCJqcy1idG4tZXNzZW50aWFsXCIsJ1wiXFxuICAgICAgICAgICAgPlxcbiAgICAgICAgICAgICAgJykuY29uY2F0KGJ1dHRvbkVzc2VudGlhbFBhY2thZ2UsXCJcXG4gICAgICAgICAgICA8L2J1dHRvbj5cXG4gICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2FydGljbGU+XFxuICAgICAgPC9zZWN0aW9uPlwiKSxfdGhpcy5jb21wb25lbnREaWRNb3VudCgpKX0pKSx0aGlzLnByb3BzPWNvb2tpZV93YWxsX29iamVjdFNwcmVhZCh7fSxfcHJvcHMpLFwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMucHJvcHMudXBkYXRlQ29va2llRm4mJlVwZGF0ZUNvbnNlbnQuc3Vic2NyaWJlKHRoaXMucHJvcHMudXBkYXRlQ29va2llRm4pO3ZhciBfY29uc2VudD1Db29raWVDb25zZW50LmdldENvbnNlbnQoKTtfY29uc2VudD09PUNPTlNFTlRTLlVOREVGSU5FRCYmKENvb2tpZUNvbnNlbnQuYWRkVmlzaXRlZFVybCgpLF9jb25zZW50PUNvb2tpZUNvbnNlbnQuZ2V0Q29uc2VudCgpKSx0aGlzLnNldFN0YXRlKHtjb25zZW50Ol9jb25zZW50fSl9dmFyIENvbnN0cnVjdG9yLHByb3RvUHJvcHMsc3RhdGljUHJvcHM7cmV0dXJuIENvbnN0cnVjdG9yPUNvb2tpZVdhbGwsKHByb3RvUHJvcHM9W3trZXk6XCJjb21wb25lbnREaWRNb3VudFwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuZ2V0U3RhdGUoKS5jb25zZW50KXt2YXIgJG9rQnV0dG9uPXRoaXMucHJvcHMuJGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdChcImpzLWJ0bi1va1wiKSk7JG9rQnV0dG9uJiYkb2tCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy5jbGlja09rRXZlbnQpO3ZhciAkZXNzZW50aWFsQnV0dG9uPXRoaXMucHJvcHMuJGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdChcImpzLWJ0bi1lc3NlbnRpYWxcIikpOyRlc3NlbnRpYWxCdXR0b24mJiRlc3NlbnRpYWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy5jbGlja0Vzc2VudGlhbEV2ZW50KX19fV0pJiZjb29raWVfd2FsbF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSxwcm90b1Byb3BzKSxzdGF0aWNQcm9wcyYmY29va2llX3dhbGxfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3RvcixzdGF0aWNQcm9wcyksQ29va2llV2FsbH0oKTtjb29raWVfd2FsbF9kZWZpbmVQcm9wZXJ0eShjb29raWVfd2FsbF9Db29raWVXYWxsLFwicHJvcFR5cGVzXCIse2J1dHRvblRleHQ6cHJvcF90eXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxjbGFzc0xpc3Q6W10sJGNvbnRhaW5lcjpPYmplY3QocHJvcF90eXBlcy5pbnN0YW5jZU9mKShwcm9wX3R5cGVzLkVsZW1lbnQpLmlzUmVxdWlyZWQsY29udGVudFRleHQ6cHJvcF90eXBlcy5zdHJpbmcuaXNSZXF1aXJlZCx1cGRhdGVDb29raWVGbjpGdW5jdGlvbix1cmw6cHJvcF90eXBlcy5zdHJpbmcuaXNSZXF1aXJlZCx1cmxUZXh0OnByb3BfdHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsZG9tYWluOnByb3BfdHlwZXMuc3RyaW5nLGhpZGVMaW5rQWZ0ZXJUZXh0OnByb3BfdHlwZXMuYm9vbCxidXR0b25Fc3NlbnRpYWxQYWNrYWdlOnByb3BfdHlwZXMuc3RyaW5nLGJ1dHRvblRleHRBcmlhOnByb3BfdHlwZXMuc3RyaW5nLGJ1dHRvbkVzc2VudGlhbFBhY2thZ2VBcmlhOnByb3BfdHlwZXMuc3RyaW5nfSk7X193ZWJwYWNrX3JlcXVpcmVfXygxNzgpO2Z1bmN0aW9uIGNvb2tpZV9jb25zZW50X2dyYW51bGFyX293bktleXMob2JqZWN0LGVudW1lcmFibGVPbmx5KXt2YXIga2V5cz1PYmplY3Qua2V5cyhvYmplY3QpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBzeW1ib2xzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtlbnVtZXJhYmxlT25seSYmKHN5bWJvbHM9c3ltYm9scy5maWx0ZXIoKGZ1bmN0aW9uKHN5bSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LHN5bSkuZW51bWVyYWJsZX0pKSksa2V5cy5wdXNoLmFwcGx5KGtleXMsc3ltYm9scyl9cmV0dXJuIGtleXN9ZnVuY3Rpb24gY29va2llX2NvbnNlbnRfZ3JhbnVsYXJfb2JqZWN0U3ByZWFkKHRhcmdldCl7Zm9yKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIHNvdXJjZT1udWxsIT1hcmd1bWVudHNbaV0/YXJndW1lbnRzW2ldOnt9O2klMj9jb29raWVfY29uc2VudF9ncmFudWxhcl9vd25LZXlzKE9iamVjdChzb3VyY2UpLCEwKS5mb3JFYWNoKChmdW5jdGlvbihrZXkpe2Nvb2tpZV9jb25zZW50X2dyYW51bGFyX2RlZmluZVByb3BlcnR5KHRhcmdldCxrZXksc291cmNlW2tleV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTpjb29raWVfY29uc2VudF9ncmFudWxhcl9vd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKChmdW5jdGlvbihrZXkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsa2V5LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLGtleSkpfSkpfXJldHVybiB0YXJnZXR9ZnVuY3Rpb24gY29va2llX2NvbnNlbnRfZ3JhbnVsYXJfZGVmaW5lUHJvcGVydHkob2JqLGtleSx2YWx1ZSl7cmV0dXJuIGtleSBpbiBvYmo/T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaixrZXkse3ZhbHVlOnZhbHVlLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6b2JqW2tleV09dmFsdWUsb2JqfXZhciBjb29raWVfY29uc2VudF9ncmFudWxhcl9DT05TRU5UUz1PYmplY3QuZnJlZXplKHtORUNFU1NBUlk6XCJuZWNlc3NhcnlcIixGVU5DVElPTkFMOlwiZnVuY3Rpb25hbFwiLEFOQUxZVElDQUw6XCJhbmFseXRpY2FsXCIsUEVSU09OQUxJWkVEOlwicGVyc29uYWxpemVkXCJ9KSxMRUdBQ1lfQ09OU0VOVF9PUFRJT05TPU9iamVjdC5mcmVlemUoW1wiZnVsbFwiLFwiZnVuY3Rpb25hbFwiLFwidGVtcG9yYXJ5XCJdKSxjb29raWVfY29uc2VudF9ncmFudWxhcl9DVVNUT01FUl9DT05TRU5UUz1PYmplY3QuZnJlZXplKHtORUNFU1NBUlk6e25hbWU6Y29va2llX2NvbnNlbnRfZ3JhbnVsYXJfQ09OU0VOVFMuTkVDRVNTQVJZLGlkOjEwM30sRlVOQ1RJT05BTDp7bmFtZTpjb29raWVfY29uc2VudF9ncmFudWxhcl9DT05TRU5UUy5GVU5DVElPTkFMLGlkOjEwNH0sQU5BTFlUSUNBTDp7bmFtZTpjb29raWVfY29uc2VudF9ncmFudWxhcl9DT05TRU5UUy5BTkFMWVRJQ0FMLGlkOjEwNX0sUEVSU09OQUxJWkVEOntuYW1lOmNvb2tpZV9jb25zZW50X2dyYW51bGFyX0NPTlNFTlRTLlBFUlNPTkFMSVpFRCxpZDoxMDZ9fSksQ09PS0lFU19UT19CRV9SRU1PVkVEX1dIRU5fUkVWT0tJTkdfUEVSU09OQUxJWkVEX0NPTlNFTlRTPU9iamVjdC5mcmVlemUoW1wiX2ZiY1wiLFwiX2ZicFwiLFwiX2djbF9hdVwiLFwiX2djbF9hd1wiLFwiX2djbF9kY1wiLFwiX3VldG1zY2xraWRcIixcIl91ZXRzaWRcIixcIl91ZXR2aWRcIixcInJlYWxSZWZyXCIsXCJURENQTVwiLFwiVERJRFwiXSksTE9DQUxfU1RPUkFHRV9UT19CRV9SRU1PVkVEX1dIRU5fUkVWT0tJTkdfUEVSU09OQUxJWkVEX0NPTlNFTlRTPU9iamVjdC5mcmVlemUoW1wiX3VldG1zY2xraWRcIixcIl91ZXRtc2Nsa2lkX2V4cFwiLFwiX3VldHNpZFwiLFwiX3VldHNpZF9leHBcIixcIl91ZXR2aWRcIixcIl91ZXR2aWRfZXhwXCJdKSxjb29raWVfY29uc2VudF9ncmFudWxhcl9VcGRhdGVDb25zZW50PW5ldyBmdW5jdGlvbigpe3ZhciBzdWJzY3JpYmVycz1bXSxjdXJyZW50VmFsdWU9bnVsbDtyZXR1cm57c3Vic2NyaWJlOmZ1bmN0aW9uKHN1YnNjcmliZXIpe3N1YnNjcmliZXJzLnB1c2goc3Vic2NyaWJlcil9LG5leHQ6ZnVuY3Rpb24obmV4dFZhbHVlKXtjdXJyZW50VmFsdWUhPT1uZXh0VmFsdWUmJihjdXJyZW50VmFsdWU9bmV4dFZhbHVlLHN1YnNjcmliZXJzLmZvckVhY2goKGZ1bmN0aW9uKHN1YnNjcmliZXIpe3JldHVybiBzdWJzY3JpYmVyKG5leHRWYWx1ZSl9KSkpfX19LENvb2tpZUNvbnNlbnRHcmFudWxhcj17aGFzVmFsaWRDb25zZW50OmZ1bmN0aW9uKCl7dmFyIGN1c3RvbWVyQ29va2llQ29uc2VudElzVmFsaWQ9Q29va2llQ29uc2VudEdyYW51bGFyLmN1c3RvbWVyQ29uc2VudENvb2tpZUlzVmFsaWQoKTtyZXR1cm4gY3VzdG9tZXJDb29raWVDb25zZW50SXNWYWxpZHx8KENvb2tpZUNvbnNlbnRHcmFudWxhci5yZW1vdmVDdXN0b21lckNvb2tpZUNvbnNlbnQoKSxDb29raWVDb25zZW50R3JhbnVsYXIucmVtb3ZlTGVnYWN5Q29uc2VudCgpKSxjdXN0b21lckNvb2tpZUNvbnNlbnRJc1ZhbGlkfSxhY2NlcHRBbGxDb25zZW50czpmdW5jdGlvbihleHRyYURhdGEpe3ZhciBjb25zZW50cz1be2NvbnNlbnRJZDpjb29raWVfY29uc2VudF9ncmFudWxhcl9DVVNUT01FUl9DT05TRU5UUy5ORUNFU1NBUlkuaWQsY29uc2VudEdpdmVuOiEwfSx7Y29uc2VudElkOmNvb2tpZV9jb25zZW50X2dyYW51bGFyX0NVU1RPTUVSX0NPTlNFTlRTLkZVTkNUSU9OQUwuaWQsY29uc2VudEdpdmVuOiEwfSx7Y29uc2VudElkOmNvb2tpZV9jb25zZW50X2dyYW51bGFyX0NVU1RPTUVSX0NPTlNFTlRTLkFOQUxZVElDQUwuaWQsY29uc2VudEdpdmVuOiEwfSx7Y29uc2VudElkOmNvb2tpZV9jb25zZW50X2dyYW51bGFyX0NVU1RPTUVSX0NPTlNFTlRTLlBFUlNPTkFMSVpFRC5pZCxjb25zZW50R2l2ZW46ITB9XTtDb29raWVDb25zZW50R3JhbnVsYXIuc2V0Q29uc2VudHMoY29uc2VudHMsY29va2llX2NvbnNlbnRfZ3JhbnVsYXJfb2JqZWN0U3ByZWFkKHt9LGV4dHJhRGF0YSkpfSxhY2NlcHROZWNlc3NhcnlDb25zZW50OmZ1bmN0aW9uKGV4dHJhRGF0YSl7dmFyIGNvbnNlbnRzPVt7Y29uc2VudElkOmNvb2tpZV9jb25zZW50X2dyYW51bGFyX0NVU1RPTUVSX0NPTlNFTlRTLk5FQ0VTU0FSWS5pZCxjb25zZW50R2l2ZW46ITB9LHtjb25zZW50SWQ6Y29va2llX2NvbnNlbnRfZ3JhbnVsYXJfQ1VTVE9NRVJfQ09OU0VOVFMuRlVOQ1RJT05BTC5pZCxjb25zZW50R2l2ZW46ITF9LHtjb25zZW50SWQ6Y29va2llX2NvbnNlbnRfZ3JhbnVsYXJfQ1VTVE9NRVJfQ09OU0VOVFMuQU5BTFlUSUNBTC5pZCxjb25zZW50R2l2ZW46ITF9LHtjb25zZW50SWQ6Y29va2llX2NvbnNlbnRfZ3JhbnVsYXJfQ1VTVE9NRVJfQ09OU0VOVFMuUEVSU09OQUxJWkVELmlkLGNvbnNlbnRHaXZlbjohMX1dO0Nvb2tpZUNvbnNlbnRHcmFudWxhci5zZXRDb25zZW50cyhjb25zZW50cyxjb29raWVfY29uc2VudF9ncmFudWxhcl9vYmplY3RTcHJlYWQoe30sZXh0cmFEYXRhKSl9LHNldENvbnNlbnRzOmZ1bmN0aW9uKGNvbnNlbnRzLGV4dHJhRGF0YSl7dmFyIGZpbmFsQ29uc2VudHM9W107Y29uc2VudHMuZm9yRWFjaCgoZnVuY3Rpb24oY29uc2VudCl7dmFyIHNpbmdsZUNvbnNlbnQ9Q29va2llQ29uc2VudEdyYW51bGFyLmdldENvbnNlbnRJdGVtKGNvbnNlbnQuY29uc2VudElkKSxkZWNpc2lvbkF0Tm93PWhlbHBlcnNfdXRjQ3VycmVudFRpbWVTdHJpbmcoXCJZWVlZLU1NLUREVEhIOm1tOnNzLjAwMDAwMDArMDA6MDBcIik7c2luZ2xlQ29uc2VudCYmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzaW5nbGVDb25zZW50LFwiaXNBY2NlcHRlZFwiKSYmc2luZ2xlQ29uc2VudC5pc0FjY2VwdGVkPT09Y29uc2VudC5jb25zZW50R2l2ZW58fChzaW5nbGVDb25zZW50LmlzQWNjZXB0ZWQ9Y29uc2VudC5jb25zZW50R2l2ZW4sc2luZ2xlQ29uc2VudC5kZWNpc2lvbkF0PWRlY2lzaW9uQXROb3cpLGZpbmFsQ29uc2VudHMucHVzaChzaW5nbGVDb25zZW50KSl9KSk7dmFyIGNvb2tpZUNvbnNlbnRWYWx1ZT1jb25zZW50cy5sZW5ndGg+MCYmY29uc2VudHMuZXZlcnkoKGZ1bmN0aW9uKGMpe3JldHVybiEwPT09Yy5jb25zZW50R2l2ZW59KSk/XCJmdWxsXCI6XCJmdW5jdGlvbmFsXCI7Q29va2llQ29uc2VudEdyYW51bGFyLnNldEN1c3RvbWVyQ29uc2VudENvb2tpZVZhbHVlKGZpbmFsQ29uc2VudHMsY29va2llX2NvbnNlbnRfZ3JhbnVsYXJfb2JqZWN0U3ByZWFkKHtleHBpcmVzOjkwfSxleHRyYURhdGEpKSxoZWxwZXJzX3NldENvb2tpZShcImNvb2tpZUNvbnNlbnRcIixjb29raWVDb25zZW50VmFsdWUsY29va2llX2NvbnNlbnRfZ3JhbnVsYXJfb2JqZWN0U3ByZWFkKHtleHBpcmVzOjkwfSxleHRyYURhdGEpKSxjb29raWVfY29uc2VudF9ncmFudWxhcl9VcGRhdGVDb25zZW50Lm5leHQoe2NvbnNlbnRzOmZpbmFsQ29uc2VudHMsbGVnYWN5Q29uc2VudDpjb29raWVDb25zZW50VmFsdWV9KX0sZ2V0Q29uc2VudEl0ZW06ZnVuY3Rpb24oY29uc2VudElkKXt2YXIgbmFtZSxjdXJyZW50VmFsdWVzPUNvb2tpZUNvbnNlbnRHcmFudWxhci5nZXRDdXN0b21lckNvbnNlbnRDb29raWVWYWx1ZSgpO3N3aXRjaChjb25zZW50SWQpe2Nhc2UgY29va2llX2NvbnNlbnRfZ3JhbnVsYXJfQ1VTVE9NRVJfQ09OU0VOVFMuTkVDRVNTQVJZLmlkOm5hbWU9Y29va2llX2NvbnNlbnRfZ3JhbnVsYXJfQ1VTVE9NRVJfQ09OU0VOVFMuTkVDRVNTQVJZLm5hbWU7YnJlYWs7Y2FzZSBjb29raWVfY29uc2VudF9ncmFudWxhcl9DVVNUT01FUl9DT05TRU5UUy5GVU5DVElPTkFMLmlkOm5hbWU9Y29va2llX2NvbnNlbnRfZ3JhbnVsYXJfQ1VTVE9NRVJfQ09OU0VOVFMuRlVOQ1RJT05BTC5uYW1lO2JyZWFrO2Nhc2UgY29va2llX2NvbnNlbnRfZ3JhbnVsYXJfQ1VTVE9NRVJfQ09OU0VOVFMuQU5BTFlUSUNBTC5pZDpuYW1lPWNvb2tpZV9jb25zZW50X2dyYW51bGFyX0NVU1RPTUVSX0NPTlNFTlRTLkFOQUxZVElDQUwubmFtZTticmVhaztjYXNlIGNvb2tpZV9jb25zZW50X2dyYW51bGFyX0NVU1RPTUVSX0NPTlNFTlRTLlBFUlNPTkFMSVpFRC5pZDpuYW1lPWNvb2tpZV9jb25zZW50X2dyYW51bGFyX0NVU1RPTUVSX0NPTlNFTlRTLlBFUlNPTkFMSVpFRC5uYW1lfWlmKCFuYW1lKXJldHVybiBudWxsO3ZhciBjdXJyZW50Q29uc2VudD1udWxsO0FycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlcykmJihjdXJyZW50Q29uc2VudD1jdXJyZW50VmFsdWVzLmZpbmQoKGZ1bmN0aW9uKHgpe3JldHVybiB4LmNvbnNlbnRUeXBlSWQ9PT1jb25zZW50SWR9KSkpO3ZhciBpdGVtPXtjb25zZW50VHlwZUlkOmNvbnNlbnRJZCxjb25zZW50VHlwZU5hbWU6bmFtZSxkZWNpc2lvbkF0OnZvaWQgMCxpc0FjY2VwdGVkOnZvaWQgMH07cmV0dXJuIGN1cnJlbnRDb25zZW50JiYoaXRlbS5kZWNpc2lvbkF0PWN1cnJlbnRDb25zZW50LmRlY2lzaW9uQXQsaXRlbS5pc0FjY2VwdGVkPWN1cnJlbnRDb25zZW50LmlzQWNjZXB0ZWQpLGl0ZW19LHNldEN1c3RvbWVyQ29uc2VudENvb2tpZVZhbHVlOmZ1bmN0aW9uKGNvbnNlbnRzLGV4dHJhRGF0YSl7KGNvbnNlbnRzLmZvckVhY2goKGZ1bmN0aW9uKGNvbnNlbnQpe2lmKCEoQ29va2llQ29uc2VudEdyYW51bGFyLmNvbnNlbnRUeXBlSWRzKCkuaW5jbHVkZXMoY29uc2VudC5jb25zZW50VHlwZUlkKSYmQ29va2llQ29uc2VudEdyYW51bGFyLmNvbnNlbnRUeXBlTmFtZXMoKS5pbmNsdWRlcyhjb25zZW50LmNvbnNlbnRUeXBlTmFtZSkmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjb25zZW50LFwiaXNBY2NlcHRlZFwiKSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbnNlbnQsXCJkZWNpc2lvbkF0XCIpKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvbnNlbnQgdHlwZVwiKX0pKSxjb25zZW50cy5sZW5ndGg+MCYmY29uc2VudHMuZmlsdGVyKChmdW5jdGlvbih4KXtyZXR1cm4geC5jb25zZW50VHlwZUlkPT09Y29va2llX2NvbnNlbnRfZ3JhbnVsYXJfQ1VTVE9NRVJfQ09OU0VOVFMuUEVSU09OQUxJWkVELmlkfSkpLmxlbmd0aD4wKSYmKDE9PT1jb25zZW50cy5maWx0ZXIoKGZ1bmN0aW9uKHgpe3JldHVybiB4LmNvbnNlbnRUeXBlSWQ9PT1jb29raWVfY29uc2VudF9ncmFudWxhcl9DVVNUT01FUl9DT05TRU5UUy5QRVJTT05BTElaRUQuaWQmJiExPT09eC5pc0FjY2VwdGVkfSkpLmxlbmd0aCYmKENPT0tJRVNfVE9fQkVfUkVNT1ZFRF9XSEVOX1JFVk9LSU5HX1BFUlNPTkFMSVpFRF9DT05TRU5UUy5mb3JFYWNoKChmdW5jdGlvbihjb29raWUpe2hlbHBlcnNfcmVtb3ZlQ29va2llKGNvb2tpZSksZnVuY3Rpb24oa2V5KXt2YXIgcm9vdERvbWFpbk5hbWU9bG9jYXRpb24uaG9zdG5hbWUuc3BsaXQoXCIuXCIpLnJldmVyc2UoKS5zcGxpY2UoMCwyKS5yZXZlcnNlKCkuam9pbihcIi5cIik7ZG9jdW1lbnQuY29va2llPVwiXCIuY29uY2F0KGtleSxcIj07cGF0aD0vO2RvbWFpbj1cIikuY29uY2F0KHJvb3REb21haW5OYW1lLFwiO2V4cGlyZXM9VGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMSBHTVRcIil9KGNvb2tpZSl9KSksTE9DQUxfU1RPUkFHRV9UT19CRV9SRU1PVkVEX1dIRU5fUkVWT0tJTkdfUEVSU09OQUxJWkVEX0NPTlNFTlRTLmZvckVhY2goKGZ1bmN0aW9uKGtleSl7IWZ1bmN0aW9uKGtleSl7d2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSl9KGtleSl9KSkpKTtoZWxwZXJzX3NldENvb2tpZVdpdGhFbmNvZGluZyhcImN1c3RvbWVyQ29va2llQ29uc2VudFwiLGNvbnNlbnRzLGNvb2tpZV9jb25zZW50X2dyYW51bGFyX29iamVjdFNwcmVhZCh7fSxleHRyYURhdGEpKX0scmVtb3ZlTGVnYWN5Q29uc2VudDpmdW5jdGlvbigpe2hlbHBlcnNfcmVtb3ZlQ29va2llKFwiY29va2llQ29uc2VudFwiKX0sY29uc2VudFR5cGVJZHM6ZnVuY3Rpb24oKXt2YXIgY29uc2VudFR5cGVJZHM9W107Zm9yKHZhciBjb25zZW50VHlwZSBpbiBjb29raWVfY29uc2VudF9ncmFudWxhcl9DVVNUT01FUl9DT05TRU5UUyljb25zZW50VHlwZUlkcy5wdXNoKGNvb2tpZV9jb25zZW50X2dyYW51bGFyX0NVU1RPTUVSX0NPTlNFTlRTW2NvbnNlbnRUeXBlXS5pZCk7cmV0dXJuIGNvbnNlbnRUeXBlSWRzfSxjb25zZW50VHlwZU5hbWVzOmZ1bmN0aW9uKCl7dmFyIGNvbnNlbnRUeXBlTmFtZXM9W107Zm9yKHZhciBjb25zZW50VHlwZSBpbiBjb29raWVfY29uc2VudF9ncmFudWxhcl9DVVNUT01FUl9DT05TRU5UUyljb25zZW50VHlwZU5hbWVzLnB1c2goY29va2llX2NvbnNlbnRfZ3JhbnVsYXJfQ1VTVE9NRVJfQ09OU0VOVFNbY29uc2VudFR5cGVdLm5hbWUpO3JldHVybiBjb25zZW50VHlwZU5hbWVzfSxoYXNDb25zZW50VHlwZUlEOmZ1bmN0aW9uKGN1c3RvbWVyQ29va2llKXt2YXIgY29uc2VudFR5cGVJZD1jdXN0b21lckNvb2tpZS5jb25zZW50VHlwZUlkO3JldHVybiEodm9pZCAwPT09Y29uc2VudFR5cGVJZHx8IUNvb2tpZUNvbnNlbnRHcmFudWxhci5jb25zZW50VHlwZUlkcygpLmluY2x1ZGVzKGNvbnNlbnRUeXBlSWQpKX0saGFzQ29uc2VudFR5cGVOYW1lOmZ1bmN0aW9uKGN1c3RvbWVyQ29va2llKXt2YXIgY29uc2VudFR5cGVOYW1lPWN1c3RvbWVyQ29va2llLmNvbnNlbnRUeXBlTmFtZTtyZXR1cm4hKHZvaWQgMD09PWNvbnNlbnRUeXBlTmFtZXx8IUNvb2tpZUNvbnNlbnRHcmFudWxhci5jb25zZW50VHlwZU5hbWVzKCkuaW5jbHVkZXMoY29uc2VudFR5cGVOYW1lKSl9LGhhc0RlY2lzaW9uQXQ6ZnVuY3Rpb24oY3VzdG9tZXJDb29raWUpe3JldHVybiEodm9pZCAwPT09Y3VzdG9tZXJDb29raWUuZGVjaXNpb25BdHx8IWhlbHBlcnNfaXNEYXRlRm9ybWF0dGVkKGN1c3RvbWVyQ29va2llLmRlY2lzaW9uQXQsXCJZWVlZLU1NLUREVEhIOm1tOnNzLjAwMDAwMDArMDA6MDBcIikpfSxoYXNJc0FjY2VwdGVkOmZ1bmN0aW9uKGN1c3RvbWVyQ29va2llKXt2YXIgaXNBY2NlcHRlZD1jdXN0b21lckNvb2tpZS5pc0FjY2VwdGVkO3JldHVybiEodm9pZCAwPT09Y3VzdG9tZXJDb29raWUuaXNBY2NlcHRlZHx8XCJib29sZWFuXCIhPXR5cGVvZiBpc0FjY2VwdGVkKX0scmVtb3ZlQ3VzdG9tZXJDb29raWVDb25zZW50OmZ1bmN0aW9uKCl7aGVscGVyc19yZW1vdmVDb29raWUoXCJjdXN0b21lckNvb2tpZUNvbnNlbnRcIil9LGdldEN1c3RvbWVyQ29uc2VudENvb2tpZVZhbHVlOmZ1bmN0aW9uKCl7dHJ5e3ZhciBjb29raWU9aGVscGVyc19nZXRDb29raWUoXCJjdXN0b21lckNvb2tpZUNvbnNlbnRcIik7aWYodm9pZCAwPT09Y29va2llKXJldHVybjtyZXR1cm4gSlNPTi5wYXJzZShjb29raWUpfWNhdGNoKGVycm9yKXtyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oXCJDYW5ub3QgZGV0ZXJtaW5lIGN1c3RvbWVyIGNvb2tpZSBjb25zZW50LCBcIitlcnJvcil9fSxpc1NpbmdsZVN0b3JlZENvbnNlbnRWYWxpZDpmdW5jdGlvbihjdXN0b21lckNvb2tpZVR5cGUpe3JldHVybiBDb29raWVDb25zZW50R3JhbnVsYXIuaGFzQ29uc2VudFR5cGVJRChjdXN0b21lckNvb2tpZVR5cGUpJiZDb29raWVDb25zZW50R3JhbnVsYXIuaGFzQ29uc2VudFR5cGVOYW1lKGN1c3RvbWVyQ29va2llVHlwZSkmJkNvb2tpZUNvbnNlbnRHcmFudWxhci5oYXNEZWNpc2lvbkF0KGN1c3RvbWVyQ29va2llVHlwZSkmJkNvb2tpZUNvbnNlbnRHcmFudWxhci5oYXNJc0FjY2VwdGVkKGN1c3RvbWVyQ29va2llVHlwZSl9LGxlZ2FjeUNvbnNlbnRDb29raWVJc1ZhbGlkOmZ1bmN0aW9uKCl7dmFyIGNvb2tpZT1oZWxwZXJzX2dldENvb2tpZShcImNvb2tpZUNvbnNlbnRcIik7cmV0dXJuIHZvaWQgMCE9PWNvb2tpZSYmTEVHQUNZX0NPTlNFTlRfT1BUSU9OUy5pbmNsdWRlcyhjb29raWUpfSxjdXN0b21lckNvbnNlbnRDb29raWVJc1ZhbGlkOmZ1bmN0aW9uKCl7aWYoIUNvb2tpZUNvbnNlbnRHcmFudWxhci5sZWdhY3lDb25zZW50Q29va2llSXNWYWxpZCgpKXJldHVybiExO3ZhciBjdXN0b21lckNvb2tpZUNvbnNlbnQ9Q29va2llQ29uc2VudEdyYW51bGFyLmdldEN1c3RvbWVyQ29uc2VudENvb2tpZVZhbHVlKCk7aWYoIUFycmF5LmlzQXJyYXkoY3VzdG9tZXJDb29raWVDb25zZW50KSlyZXR1cm4hMTtpZig0IT09Y3VzdG9tZXJDb29raWVDb25zZW50Lmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGk9MDtpPGN1c3RvbWVyQ29va2llQ29uc2VudC5sZW5ndGg7aSsrKXt2YXIgc2luZ2xlSXRlbT1jdXN0b21lckNvb2tpZUNvbnNlbnRbaV07aWYoIUNvb2tpZUNvbnNlbnRHcmFudWxhci5pc1NpbmdsZVN0b3JlZENvbnNlbnRWYWxpZChzaW5nbGVJdGVtKSlyZXR1cm4hMX1yZXR1cm4hMH0sQ09OU0VOVFM6Y29va2llX2NvbnNlbnRfZ3JhbnVsYXJfQ09OU0VOVFN9O19fd2VicGFja19yZXF1aXJlX18oMTgwKTtmdW5jdGlvbiBjb29raWVfc2V0dGluZ3NfZ3JhbnVsYXJfb3duS2V5cyhvYmplY3QsZW51bWVyYWJsZU9ubHkpe3ZhciBrZXlzPU9iamVjdC5rZXlzKG9iamVjdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHN5bWJvbHM9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO2VudW1lcmFibGVPbmx5JiYoc3ltYm9scz1zeW1ib2xzLmZpbHRlcigoZnVuY3Rpb24oc3ltKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3Qsc3ltKS5lbnVtZXJhYmxlfSkpKSxrZXlzLnB1c2guYXBwbHkoa2V5cyxzeW1ib2xzKX1yZXR1cm4ga2V5c31mdW5jdGlvbiBjb29raWVfc2V0dGluZ3NfZ3JhbnVsYXJfb2JqZWN0U3ByZWFkKHRhcmdldCl7Zm9yKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIHNvdXJjZT1udWxsIT1hcmd1bWVudHNbaV0/YXJndW1lbnRzW2ldOnt9O2klMj9jb29raWVfc2V0dGluZ3NfZ3JhbnVsYXJfb3duS2V5cyhPYmplY3Qoc291cmNlKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oa2V5KXtjb29raWVfc2V0dGluZ3NfZ3JhbnVsYXJfZGVmaW5lUHJvcGVydHkodGFyZ2V0LGtleSxzb3VyY2Vba2V5XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOmNvb2tpZV9zZXR0aW5nc19ncmFudWxhcl9vd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKChmdW5jdGlvbihrZXkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsa2V5LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLGtleSkpfSkpfXJldHVybiB0YXJnZXR9ZnVuY3Rpb24gY29va2llX3NldHRpbmdzX2dyYW51bGFyX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LHByb3BzKXtmb3IodmFyIGk9MDtpPHByb3BzLmxlbmd0aDtpKyspe3ZhciBkZXNjcmlwdG9yPXByb3BzW2ldO2Rlc2NyaXB0b3IuZW51bWVyYWJsZT1kZXNjcmlwdG9yLmVudW1lcmFibGV8fCExLGRlc2NyaXB0b3IuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIGRlc2NyaXB0b3ImJihkZXNjcmlwdG9yLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LGRlc2NyaXB0b3Iua2V5LGRlc2NyaXB0b3IpfX1mdW5jdGlvbiBjb29raWVfc2V0dGluZ3NfZ3JhbnVsYXJfZGVmaW5lUHJvcGVydHkob2JqLGtleSx2YWx1ZSl7cmV0dXJuIGtleSBpbiBvYmo/T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaixrZXkse3ZhbHVlOnZhbHVlLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6b2JqW2tleV09dmFsdWUsb2JqfXZhciBjb29raWVfc2V0dGluZ3NfZ3JhbnVsYXJfQ29va2llU2V0dGluZ3NHcmFudWxhcj1mdW5jdGlvbigpe2Z1bmN0aW9uIENvb2tpZVNldHRpbmdzR3JhbnVsYXIocHJvcHMpe3ZhciBfdGhpcz10aGlzOyFmdW5jdGlvbihpbnN0YW5jZSxDb25zdHJ1Y3Rvcil7aWYoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLENvb2tpZVNldHRpbmdzR3JhbnVsYXIpLGNvb2tpZV9zZXR0aW5nc19ncmFudWxhcl9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicHJvcHNcIix2b2lkIDApLGNvb2tpZV9zZXR0aW5nc19ncmFudWxhcl9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwic3RhdGVcIix7JGZpcnN0Rm9jdXNhYmxlRWxlbWVudDp2b2lkIDAsJGxhc3RGb2N1c2FibGVFbGVtZW50OnZvaWQgMCwkbW91c2VEb3duRWxlbWVudDp2b2lkIDB9KSxjb29raWVfc2V0dGluZ3NfZ3JhbnVsYXJfZGVmaW5lUHJvcGVydHkodGhpcyxcImN1cnJlbnRDb25zZW50c1wiLHZvaWQgMCksY29va2llX3NldHRpbmdzX2dyYW51bGFyX2RlZmluZVByb3BlcnR5KHRoaXMsXCJjbGFzc1NlbGVjdG9yc1wiLHtjbG9zZUJ1dHRvbjpcImpzLWNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9fY2xvc2VcIixwb3B1cElubmVyOlwianMtY29va2llLXNldHRpbmdzLWdyYW51bGFyLXBvcHVwX2lubmVyXCIsc2Nyb2xsU3RvcDpcImNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1zY3JvbGwtc3RvcFwiLGJ0bjp7YWNjZXB0QWxsOlwiY29va2llLXNldHRpbmdzLWdyYW51bGFyLXBvcHVwX19idG4tYWNjZXB0LWFsbFwiLG9ubHlTZWxlY3RlZDpcImNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9fYnRuLW9ubHktc2VsZWN0ZWRcIn0sc3dpdGNoOlwiY29va2llLWNvbnNlbnQtZ3JhbnVsYXItcG9wdXBfX3N3aXRjaC10b2dnbGVfX3N3aXRjaFwifSksY29va2llX3NldHRpbmdzX2dyYW51bGFyX2RlZmluZVByb3BlcnR5KHRoaXMsXCJjbGlja0JvdW5kRnVuY3Rpb25cIix2b2lkIDApLGNvb2tpZV9zZXR0aW5nc19ncmFudWxhcl9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwia2V5ZG93bkJvdW5kRnVuY3Rpb25cIix2b2lkIDApLGNvb2tpZV9zZXR0aW5nc19ncmFudWxhcl9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwibW91c2Vkb3duQm91bmRGdW5jdGlvblwiLHZvaWQgMCksY29va2llX3NldHRpbmdzX2dyYW51bGFyX2RlZmluZVByb3BlcnR5KHRoaXMsXCJjYXB0dXJlRWxlbWVudE9uTW91c2VEb3duXCIsKGZ1bmN0aW9uKF9yZWYpe3ZhciB0YXJnZXQ9X3JlZi50YXJnZXQ7X3RoaXMuc3RhdGUuJG1vdXNlRG93bkVsZW1lbnQ9dGFyZ2V0fSkpLGNvb2tpZV9zZXR0aW5nc19ncmFudWxhcl9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicmVuZGVyU2luZ2xlQ29uc2VudFwiLChmdW5jdGlvbihjb25zZW50KXt2YXIgc3dpdGNoSHRtbD1fdGhpcy5yZW5kZXJTd2l0Y2goY29uc2VudCk7cmV0dXJuJzxkaXYgY2xhc3M9XCJjb29raWUtc2V0dGluZ3MtZ3JhbnVsYXItcG9wdXBfX2NvbnNlbnRzLWl0ZW1cIj5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9fY29uc2VudHMtaXRlbS1jb250ZW50c1wiPlxcbiAgICAgICAgICAgICAgICAgICAgPGgzPicuY29uY2F0KGNvbnNlbnQuY29uc2VudFRpdGxlLCc8L2gzPlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9fY29uc2VudHMtdG9nZ2xlXCI+XFxuICAgICAgICAgICAgICAgICAgIDxwPicpLmNvbmNhdChjb25zZW50LmNvbnNlbnREZXNjcmlwdGlvbixcIjwvcD5cXG4gICAgICAgICAgICAgICAgICAgXCIpLmNvbmNhdChzd2l0Y2hIdG1sLFwiXFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIDwvZGl2PlwiKX0pKSxjb29raWVfc2V0dGluZ3NfZ3JhbnVsYXJfZGVmaW5lUHJvcGVydHkodGhpcyxcImdldFN3aXRjaElkXCIsKGZ1bmN0aW9uKGNvbnNlbnQpe3JldHVyblwiY29uc2VudC1cIi5jb25jYXQoY29uc2VudC5jb25zZW50SWQpfSkpLGNvb2tpZV9zZXR0aW5nc19ncmFudWxhcl9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicmVuZGVyU3dpdGNoXCIsKGZ1bmN0aW9uKGNvbnNlbnQpe3ZhciBjb25zZW50R2l2ZW49Y29uc2VudC5jb25zZW50Q2FuQmVBbHRlcmVkP190aGlzLmNvbnNlbnRHaXZlbihjb25zZW50LmNvbnNlbnRJZCk6Y29uc2VudC5jb25zZW50R2l2ZW4saXNEaXNhYmxlZD1jb25zZW50LmNvbnNlbnRDYW5CZUFsdGVyZWQ/XCJcIjpcImRpc2FibGVkXCIsaXNDaGVja2VkPWNvbnNlbnRHaXZlbj9cImNoZWNrZWRcIjpcIlwiLGlzQ2hlY2tlZENsYXNzPWNvbnNlbnRHaXZlbj9cImNvbnNlbnQtZ2l2ZW5cIjpcIlwiLGlzRGlzYWJsZWRDbGFzcz1jb25zZW50LmNvbnNlbnRDYW5CZUFsdGVyZWQ/XCJcIjpcImNvbnNlbnQtZGlzYWJsZWRcIixzd2l0Y2hJZD1fdGhpcy5nZXRTd2l0Y2hJZChjb25zZW50KTtyZXR1cm4nPGRpdiBjbGFzcz1cImNvbnNlbnQtdG9nZ2xlXCI+XFxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCInLmNvbmNhdChzd2l0Y2hJZCwnXCIgY2xhc3M9XCJzd2l0Y2ggJykuY29uY2F0KGlzQ2hlY2tlZENsYXNzLFwiIFwiKS5jb25jYXQoaXNEaXNhYmxlZENsYXNzLCdcIj5cXG4gICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHJvbGU9XCJzd2l0Y2hcIiBpZD1cIicpLmNvbmNhdChzd2l0Y2hJZCwnXCIgY2xhc3M9XCInKS5jb25jYXQoX3RoaXMuY2xhc3NTZWxlY3RvcnMuc3dpdGNoLCdcIiB0eXBlPVwiY2hlY2tib3hcIiAnKS5jb25jYXQoaXNDaGVja2VkLFwiIFwiKS5jb25jYXQoaXNEaXNhYmxlZCwnIC8+XFxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNsaWRlciByb3VuZCAnKS5jb25jYXQoaXNDaGVja2VkQ2xhc3MsXCIgXCIpLmNvbmNhdChpc0Rpc2FibGVkQ2xhc3MsJ1wiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbGlkZXItaWNvblwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICcpLmNvbmNhdChpY29uQ3dDaGVjayxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XFxuICAgICAgICAgICAgPC9kaXY+XCIpfSkpLGNvb2tpZV9zZXR0aW5nc19ncmFudWxhcl9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicGFyc2VDb29raWVUb0NvbnNlbnRcIiwoZnVuY3Rpb24oKXtfdGhpcy5jdXJyZW50Q29uc2VudHM9Q29va2llQ29uc2VudEdyYW51bGFyLmdldEN1c3RvbWVyQ29uc2VudENvb2tpZVZhbHVlKCl9KSksY29va2llX3NldHRpbmdzX2dyYW51bGFyX2RlZmluZVByb3BlcnR5KHRoaXMsXCJjb25zZW50R2l2ZW5cIiwoZnVuY3Rpb24oY29uc2VudElkKXtyZXR1cm4hIUFycmF5LmlzQXJyYXkoX3RoaXMuY3VycmVudENvbnNlbnRzKSYmMT09PV90aGlzLmN1cnJlbnRDb25zZW50cy5maWx0ZXIoKGZ1bmN0aW9uKHgpe3JldHVybiB4LmNvbnNlbnRUeXBlSWQ9PT1jb25zZW50SWQmJiEwPT09eC5pc0FjY2VwdGVkfSkpLmxlbmd0aH0pKSxjb29raWVfc2V0dGluZ3NfZ3JhbnVsYXJfZGVmaW5lUHJvcGVydHkodGhpcyxcImNsb3NlT25Fc2NhcGVQcmVzc2VkXCIsKGZ1bmN0aW9uKGV2ZW50SGFuZGxlcil7ZXZlbnRIYW5kbGVyLmtleUNvZGU9PT1LZXlDb2RlX0VTQ0FQRSYmKGV2ZW50SGFuZGxlci5zdG9wUHJvcGFnYXRpb24oKSxldmVudEhhbmRsZXIucHJldmVudERlZmF1bHQoKSxfdGhpcy5jbG9zZVBvcHVwKCkpfSkpLGNvb2tpZV9zZXR0aW5nc19ncmFudWxhcl9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiY2xvc2VDbGlja091dHNpZGVcIiwoZnVuY3Rpb24obW91c2VFdmVudCl7dmFyICRvdXRlckNvbnRhaW5lcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdChfdGhpcy5wcm9wcy5zZWxlY3RvcikpLGlzQ2xpY2tlZE91dHNpZGVQb3B1cD0kb3V0ZXJDb250YWluZXI9PT1tb3VzZUV2ZW50LnRhcmdldCxlbGVtZW50TW91c2VEb3duSXNTYW1lPW1vdXNlRXZlbnQudGFyZ2V0PT09X3RoaXMuc3RhdGUuJG1vdXNlRG93bkVsZW1lbnQ7aWYoJG91dGVyQ29udGFpbmVyJiZpc0NsaWNrZWRPdXRzaWRlUG9wdXAmJmVsZW1lbnRNb3VzZURvd25Jc1NhbWUpcmV0dXJuIG1vdXNlRXZlbnQucHJldmVudERlZmF1bHQoKSxtb3VzZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLF90aGlzLmNsb3NlUG9wdXAoKSwhMX0pKTt2YXIgZ2VuZXJhdGVkVWlkPWdlbmVyYXRlVWlkKCksZGVmYXVsdFZhbHVlcz17Y2xhc3NMaXN0OltdLGNsb3NlQ2FsbGJhY2s6ZnVuY3Rpb24oKXtyZXR1cm57fX0sc2VsZWN0b3I6XCJqcy1wb3B1cC1cIi5jb25jYXQoZ2VuZXJhdGVkVWlkKSxoZWFkZXJTZWxlY3RvcjpcImpzLXBvcHVwLWhlYWRlci1cIi5jb25jYXQoZ2VuZXJhdGVkVWlkKSxtYWluU2VsZWN0b3I6XCJqcy1wb3B1cC1tYWluLVwiLmNvbmNhdChnZW5lcmF0ZWRVaWQpfTt0aGlzLnByb3BzPWNvb2tpZV9zZXR0aW5nc19ncmFudWxhcl9vYmplY3RTcHJlYWQoe30sZGVmYXVsdFZhbHVlcyx7fSxwcm9wcyksXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5wcm9wcy51cGRhdGVDb29raWVGbiYmY29va2llX2NvbnNlbnRfZ3JhbnVsYXJfVXBkYXRlQ29uc2VudC5zdWJzY3JpYmUodGhpcy5wcm9wcy51cGRhdGVDb29raWVGbil9dmFyIENvbnN0cnVjdG9yLHByb3RvUHJvcHMsc3RhdGljUHJvcHM7cmV0dXJuIENvbnN0cnVjdG9yPUNvb2tpZVNldHRpbmdzR3JhbnVsYXIsKHByb3RvUHJvcHM9W3trZXk6XCJjb21wb25lbnREaWRNb3VudFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyICRjbG9zZUJ1dHRvbj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdCh0aGlzLmNsYXNzU2VsZWN0b3JzLmNsb3NlQnV0dG9uKSk7JGNsb3NlQnV0dG9uJiYkY2xvc2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy5jbG9zZVBvcHVwLmJpbmQodGhpcykpO3ZhciAkYWNjZXB0QWxsQnV0dG9uPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIuY29uY2F0KHRoaXMuY2xhc3NTZWxlY3RvcnMuYnRuLmFjY2VwdEFsbCkpOyRhY2NlcHRBbGxCdXR0b24mJiRhY2NlcHRBbGxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy5hY2NlcHRBbGwuYmluZCh0aGlzKSk7dmFyICRvbmx5U2VsZWN0ZWRCdXR0b249ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQodGhpcy5jbGFzc1NlbGVjdG9ycy5idG4ub25seVNlbGVjdGVkKSk7JG9ubHlTZWxlY3RlZEJ1dHRvbiYmJG9ubHlTZWxlY3RlZEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLm9ubHlTZWxlY3RlZC5iaW5kKHRoaXMpKSxkb2N1bWVudC5ib2R5JiZkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJ0di1zY3JvbGwtc3RvcFwiKSx0aGlzLmNsaWNrQm91bmRGdW5jdGlvbj10aGlzLmNsb3NlQ2xpY2tPdXRzaWRlLmJpbmQodGhpcyksdGhpcy5tb3VzZWRvd25Cb3VuZEZ1bmN0aW9uPXRoaXMuY2FwdHVyZUVsZW1lbnRPbk1vdXNlRG93bi5iaW5kKHRoaXMpLHRoaXMua2V5ZG93bkJvdW5kRnVuY3Rpb249dGhpcy5jbG9zZU9uRXNjYXBlUHJlc3NlZC5iaW5kKHRoaXMpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLmNsaWNrQm91bmRGdW5jdGlvbiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIix0aGlzLm1vdXNlZG93bkJvdW5kRnVuY3Rpb24pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHRoaXMua2V5ZG93bkJvdW5kRnVuY3Rpb24pfX0se2tleTpcImNsb3NlUG9wdXBcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciAkcG9wdXA9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQodGhpcy5wcm9wcy5zZWxlY3RvcikpO2RvY3VtZW50LmJvZHkmJmRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcInR2LXNjcm9sbC1zdG9wXCIpLCRwb3B1cCYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLmNsaWNrQm91bmRGdW5jdGlvbiksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIix0aGlzLm1vdXNlZG93bkJvdW5kRnVuY3Rpb24pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHRoaXMua2V5ZG93bkJvdW5kRnVuY3Rpb24pLCRwb3B1cC5yZW1vdmUoKSx0aGlzLnByb3BzLmNsb3NlQ2FsbGJhY2soKSl9fSx7a2V5OlwiYWNjZXB0QWxsXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgY29uc2VudHM9dGhpcy5wcm9wcy5jb25zZW50cyxjb25zZW50c1RvVXBkYXRlPVtdLGV4dHJhUHJvcHM9e2RvbWFpbjp0aGlzLnByb3BzLmRvbWFpbn07Y29uc2VudHMuZm9yRWFjaCgoZnVuY3Rpb24oY29uc2VudCl7dmFyIGNvbnNlbnRVcGRhdGU9e2NvbnNlbnRJZDpjb25zZW50LmNvbnNlbnRJZCxjb25zZW50R2l2ZW46ITB9O2NvbnNlbnRzVG9VcGRhdGUucHVzaChjb25zZW50VXBkYXRlKX0pKSxDb29raWVDb25zZW50R3JhbnVsYXIuc2V0Q29uc2VudHMoY29uc2VudHNUb1VwZGF0ZSxjb29raWVfc2V0dGluZ3NfZ3JhbnVsYXJfb2JqZWN0U3ByZWFkKHt9LGV4dHJhUHJvcHMpKSx0aGlzLmNsb3NlUG9wdXAoKX19LHtrZXk6XCJvbmx5U2VsZWN0ZWRcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBfdGhpczI9dGhpcyxjb25zZW50cz10aGlzLnByb3BzLmNvbnNlbnRzLGV4dHJhUHJvcHM9e2RvbWFpbjp0aGlzLnByb3BzLmRvbWFpbn0sY29uc2VudHNUb1VwZGF0ZT1bXTtjb25zZW50cy5mb3JFYWNoKChmdW5jdGlvbihjb25zZW50KXt2YXIgY29uc2VudFVwZGF0ZT17Y29uc2VudElkOmNvbnNlbnQuY29uc2VudElkLGNvbnNlbnRHaXZlbjohMX0sc3dpdGNoSWQ9X3RoaXMyLmdldFN3aXRjaElkKGNvbnNlbnQpLCRzd2l0Y2g9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNcIi5jb25jYXQoc3dpdGNoSWQpKTskc3dpdGNoJiYoY29uc2VudFVwZGF0ZS5jb25zZW50R2l2ZW49JHN3aXRjaC5jaGVja2VkKSxjb25zZW50c1RvVXBkYXRlLnB1c2goY29uc2VudFVwZGF0ZSl9KSksQ29va2llQ29uc2VudEdyYW51bGFyLnNldENvbnNlbnRzKGNvbnNlbnRzVG9VcGRhdGUsY29va2llX3NldHRpbmdzX2dyYW51bGFyX29iamVjdFNwcmVhZCh7fSxleHRyYVByb3BzKSksdGhpcy5jbG9zZVBvcHVwKCl9fSx7a2V5OlwicmVuZGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgX3RoaXMzPXRoaXMsX3RoaXMkcHJvcHM9dGhpcy5wcm9wcyxfdGhpcyRwcm9wcyRjbGFzc0xpc3Q9X3RoaXMkcHJvcHMuY2xhc3NMaXN0LGNsYXNzTGlzdD12b2lkIDA9PT1fdGhpcyRwcm9wcyRjbGFzc0xpc3Q/W106X3RoaXMkcHJvcHMkY2xhc3NMaXN0LGhlYWRlckNvbnRlbnQ9X3RoaXMkcHJvcHMuaGVhZGVyQ29udGVudCxzdWJIZWFkZXJDb250ZW50cz1fdGhpcyRwcm9wcy5zdWJIZWFkZXJDb250ZW50cyxjb25zZW50cz1fdGhpcyRwcm9wcy5jb25zZW50cyxfdGhpcyRwcm9wcyRzZWxlY3Rvcj1fdGhpcyRwcm9wcy5zZWxlY3RvcixzZWxlY3Rvcj12b2lkIDA9PT1fdGhpcyRwcm9wcyRzZWxlY3Rvcj9cIlwiLmNvbmNhdCh0aGlzLnByb3BzLnNlbGVjdG9yKTpfdGhpcyRwcm9wcyRzZWxlY3Rvcjt0aGlzLnByb3BzLnNlbGVjdG9yfHwodGhpcy5wcm9wcy5zZWxlY3Rvcj1zZWxlY3RvciksdGhpcy5wYXJzZUNvb2tpZVRvQ29uc2VudCgpO3ZhciBjb25zZW50SHRtbD1cIlwiO0FycmF5LmlzQXJyYXkoY29uc2VudHMpJiYoY29uc2VudEh0bWw9Y29uc2VudHMubWFwKChmdW5jdGlvbihjb25zZW50KXtyZXR1cm4gX3RoaXMzLnJlbmRlclNpbmdsZUNvbnNlbnQoY29uc2VudCl9KSkuam9pbihcIlwiKSk7dmFyIEhUTUw9J1xcbiAgICA8ZGl2IGNsYXNzPVwiY29va2llLXNldHRpbmdzLWdyYW51bGFyLXBvcHVwICcuY29uY2F0KHNlbGVjdG9yLFwiIFwiKS5jb25jYXQoY2xhc3NMaXN0LmpvaW4oXCIgXCIpLCdcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVwiY29va2llLXNldHRpbmdzLWdyYW51bGFyLXBvcHVwX19pbm5lciAnKS5jb25jYXQodGhpcy5jbGFzc1NlbGVjdG9ycy5wb3B1cElubmVyLCdcIlxcbiAgICAgICAgb3BlblxcbiAgICAgICAgcm9sZT1cImRpYWxvZ1wiXFxuICAgICAgICBhcmlhLW1vZGFsPVwidHJ1ZVwiXFxuICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCInKS5jb25jYXQodGhpcy5wcm9wcy5oZWFkZXJTZWxlY3RvciwnXCJcXG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCInKS5jb25jYXQodGhpcy5wcm9wcy5tYWluU2VsZWN0b3IsJ1wiXFxuICAgICAgICB0YWJpbmRleD1cIi0xXCI+XFxuICAgIFxcbiAgICBcXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb29raWUtc2V0dGluZ3MtZ3JhbnVsYXItcG9wdXBfX2hlYWRlclwiXFxuICAgICAgICA+XFxuICAgICAgICAgPGRpdiBjbGFzcz1cImNvb2tpZS1zZXR0aW5ncy1ncmFudWxhci1wb3B1cF9faGVhZGVyX190aXRsZVwiPlxcbiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29va2llLXNldHRpbmdzLWdyYW51bGFyLXBvcHVwX19pY29uLWNsb3NlXFxuICAgICAgICAgICAgICBmbGV4IGZsZXgtLWp1c3RpZnktY2VudGVyXFxuICAgICAgICAgICAgICBmbGV4LS1hbGlnbi1jZW50ZXIganMtY29va2llLXNldHRpbmdzLWdyYW51bGFyLXBvcHVwX19jbG9zZVwiPlxcbiAgICAgICAgICAgICAgJykuY29uY2F0KGljb25BcnJvd0xlZnQsXCJcXG4gICAgICAgICAgICA8L2J1dHRvbj5cXG4gICAgICAgICAgXCIpLmNvbmNhdChoZWFkZXJDb250ZW50LFwiXFxuICAgICAgICAgIDwvZGl2PiBcXG4gICAgICAgICAgXCIpLmNvbmNhdChzdWJIZWFkZXJDb250ZW50cywnXFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDxkaXZcXG4gICAgICAgICAgY2xhc3M9XCJjb29raWUtc2V0dGluZ3MtZ3JhbnVsYXItcG9wdXBfX2NvbnRlbnRcIlxcbiAgICAgICAgPlxcbiAgICAgICAgIDxkaXYgY2xhc3M9XCJjb29raWUtc2V0dGluZ3MtZ3JhbnVsYXItcG9wdXBfX2NvbnNlbnRzXCI+XFxuICAgICAgICAgICAgJykuY29uY2F0KGNvbnNlbnRIdG1sLCdcXG4gICAgICAgICAgPC9kaXY+XFxuICAgICAgIFxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29va2llLXNldHRpbmdzLWdyYW51bGFyLXBvcHVwX19mb290ZXJcIj5cXG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb29raWUtc2V0dGluZ3MtZ3JhbnVsYXItcG9wdXBfX2J0biAnKS5jb25jYXQodGhpcy5jbGFzc1NlbGVjdG9ycy5idG4uYWNjZXB0QWxsLCdcIj4nKS5jb25jYXQodGhpcy5wcm9wcy5idXR0b25zLmFjY2VwdEFsbFRleHQsJzwvYnV0dG9uPiAgICBcXG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb29raWUtc2V0dGluZ3MtZ3JhbnVsYXItcG9wdXBfX2J0biAnKS5jb25jYXQodGhpcy5jbGFzc1NlbGVjdG9ycy5idG4ub25seVNlbGVjdGVkLCdcIj4nKS5jb25jYXQodGhpcy5wcm9wcy5idXR0b25zLm9ubHlTZWxlY3RlZFRleHQsXCI8L2J1dHRvbj5cXG4gICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XCIpO2RvY3VtZW50LmJvZHkmJmRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRIVE1MKFwiYmVmb3JlZW5kXCIsSFRNTCksdGhpcy5jb21wb25lbnREaWRNb3VudCgpfX1dKSYmY29va2llX3NldHRpbmdzX2dyYW51bGFyX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLHByb3RvUHJvcHMpLHN0YXRpY1Byb3BzJiZjb29raWVfc2V0dGluZ3NfZ3JhbnVsYXJfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3RvcixzdGF0aWNQcm9wcyksQ29va2llU2V0dGluZ3NHcmFudWxhcn0oKTtmdW5jdGlvbiBjb29raWVfd2FsbF9ncmFudWxhcl9vd25LZXlzKG9iamVjdCxlbnVtZXJhYmxlT25seSl7dmFyIGtleXM9T2JqZWN0LmtleXMob2JqZWN0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgc3ltYm9scz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7ZW51bWVyYWJsZU9ubHkmJihzeW1ib2xzPXN5bWJvbHMuZmlsdGVyKChmdW5jdGlvbihzeW0pe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCxzeW0pLmVudW1lcmFibGV9KSkpLGtleXMucHVzaC5hcHBseShrZXlzLHN5bWJvbHMpfXJldHVybiBrZXlzfWZ1bmN0aW9uIGNvb2tpZV93YWxsX2dyYW51bGFyX29iamVjdFNwcmVhZCh0YXJnZXQpe2Zvcih2YXIgaT0xO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspe3ZhciBzb3VyY2U9bnVsbCE9YXJndW1lbnRzW2ldP2FyZ3VtZW50c1tpXTp7fTtpJTI/Y29va2llX3dhbGxfZ3JhbnVsYXJfb3duS2V5cyhPYmplY3Qoc291cmNlKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oa2V5KXtjb29raWVfd2FsbF9ncmFudWxhcl9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsa2V5LHNvdXJjZVtrZXldKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk6Y29va2llX3dhbGxfZ3JhbnVsYXJfb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaCgoZnVuY3Rpb24oa2V5KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LGtleSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSxrZXkpKX0pKX1yZXR1cm4gdGFyZ2V0fWZ1bmN0aW9uIGNvb2tpZV93YWxsX2dyYW51bGFyX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LHByb3BzKXtmb3IodmFyIGk9MDtpPHByb3BzLmxlbmd0aDtpKyspe3ZhciBkZXNjcmlwdG9yPXByb3BzW2ldO2Rlc2NyaXB0b3IuZW51bWVyYWJsZT1kZXNjcmlwdG9yLmVudW1lcmFibGV8fCExLGRlc2NyaXB0b3IuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIGRlc2NyaXB0b3ImJihkZXNjcmlwdG9yLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LGRlc2NyaXB0b3Iua2V5LGRlc2NyaXB0b3IpfX1mdW5jdGlvbiBjb29raWVfd2FsbF9ncmFudWxhcl9kZWZpbmVQcm9wZXJ0eShvYmosa2V5LHZhbHVlKXtyZXR1cm4ga2V5IGluIG9iaj9PYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLGtleSx7dmFsdWU6dmFsdWUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpvYmpba2V5XT12YWx1ZSxvYmp9dmFyIGNvb2tpZV93YWxsX2dyYW51bGFyX0Nvb2tpZVdhbGxHcmFudWxhcj1mdW5jdGlvbigpe2Z1bmN0aW9uIENvb2tpZVdhbGxHcmFudWxhcihfcHJvcHMpe3ZhciBfdGhpcz10aGlzOyFmdW5jdGlvbihpbnN0YW5jZSxDb25zdHJ1Y3Rvcil7aWYoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLENvb2tpZVdhbGxHcmFudWxhciksY29va2llX3dhbGxfZ3JhbnVsYXJfZGVmaW5lUHJvcGVydHkodGhpcyxcInByb3BzXCIsdm9pZCAwKSxjb29raWVfd2FsbF9ncmFudWxhcl9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiY29va2llU2V0dGluZ3NHcmFudWxhclBvcHVwXCIsdm9pZCAwKSxjb29raWVfd2FsbF9ncmFudWxhcl9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiY3VycmVudExhbmd1YWdlU2V0dGluZ3NcIix2b2lkIDApLGNvb2tpZV93YWxsX2dyYW51bGFyX2RlZmluZVByb3BlcnR5KHRoaXMsXCJzZWxlY3RlZExhbmd1YWdlXCIsdm9pZCAwKSxjb29raWVfd2FsbF9ncmFudWxhcl9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiY29tcG9uZW50U3RhdGVcIix7ZXhwaXJlczo5MCxjb25zZW50SXNWYWxpZDohMSxpc0Nsb3NlZDohMX0pLGNvb2tpZV93YWxsX2dyYW51bGFyX2RlZmluZVByb3BlcnR5KHRoaXMsXCJzZXRTdGF0ZVwiLChmdW5jdGlvbihwcm9wcyl7X3RoaXMuY29tcG9uZW50U3RhdGU9Y29va2llX3dhbGxfZ3JhbnVsYXJfb2JqZWN0U3ByZWFkKHt9LF90aGlzLmNvbXBvbmVudFN0YXRlLHt9LHByb3BzKSxfdGhpcy5yZW5kZXIoKX0pKSxjb29raWVfd2FsbF9ncmFudWxhcl9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiZ2V0U3RhdGVcIiwoZnVuY3Rpb24oKXtyZXR1cm4gX3RoaXMuY29tcG9uZW50U3RhdGV9KSksY29va2llX3dhbGxfZ3JhbnVsYXJfZGVmaW5lUHJvcGVydHkodGhpcyxcImNsaWNrT2tFdmVudFwiLChmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCk7dmFyIGV4dHJhUHJvcHM9e2RvbWFpbjpfdGhpcy5wcm9wcy5kb21haW59O0Nvb2tpZUNvbnNlbnRHcmFudWxhci5hY2NlcHRBbGxDb25zZW50cyhjb29raWVfd2FsbF9ncmFudWxhcl9vYmplY3RTcHJlYWQoe30sZXh0cmFQcm9wcykpLF90aGlzLmNsb3NlQ29va2llV2FsbCgpfSkpLGNvb2tpZV93YWxsX2dyYW51bGFyX2RlZmluZVByb3BlcnR5KHRoaXMsXCJjbGlja05lY2Vzc2FyeUV2ZW50XCIsKGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKTt2YXIgZXh0cmFQcm9wcz17ZG9tYWluOl90aGlzLnByb3BzLmRvbWFpbn07Q29va2llQ29uc2VudEdyYW51bGFyLmFjY2VwdE5lY2Vzc2FyeUNvbnNlbnQoY29va2llX3dhbGxfZ3JhbnVsYXJfb2JqZWN0U3ByZWFkKHt9LGV4dHJhUHJvcHMpKSxfdGhpcy5jbG9zZUNvb2tpZVdhbGwoKX0pKSxjb29raWVfd2FsbF9ncmFudWxhcl9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwic3dpdGNoVG9QcmltYXJ5Q29udGVudFwiLChmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksX3RoaXMuY3VycmVudExhbmd1YWdlU2V0dGluZ3M9X3RoaXMucHJvcHMubGFuZ3VhZ2VTZXR0aW5ncy5wcmltYXJ5TGFuZ3VhZ2UsX3RoaXMuc2VsZWN0ZWRMYW5ndWFnZT1fdGhpcy5jdXJyZW50TGFuZ3VhZ2VTZXR0aW5ncy5sYW5ndWFnZUtleSxfdGhpcy5yZW5kZXIoKX0pKSxjb29raWVfd2FsbF9ncmFudWxhcl9kZWZpbmVQcm9wZXJ0eSh0aGlzLFwic3dpdGNoVG9TZWNvbmRhcnlDb250ZW50XCIsKGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxfdGhpcy5jdXJyZW50TGFuZ3VhZ2VTZXR0aW5ncz1fdGhpcy5wcm9wcy5sYW5ndWFnZVNldHRpbmdzLnNlY29uZGFyeUxhbmd1YWdlLF90aGlzLnNlbGVjdGVkTGFuZ3VhZ2U9X3RoaXMuY3VycmVudExhbmd1YWdlU2V0dGluZ3MubGFuZ3VhZ2VLZXksX3RoaXMucmVuZGVyKCl9KSksY29va2llX3dhbGxfZ3JhbnVsYXJfZGVmaW5lUHJvcGVydHkodGhpcyxcImNsaWNrT3BlblByZWZlcmVuY2VzXCIsKGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxfdGhpcy5jb29raWVTZXR0aW5nc0dyYW51bGFyUG9wdXA9bmV3IGNvb2tpZV9zZXR0aW5nc19ncmFudWxhcl9Db29raWVTZXR0aW5nc0dyYW51bGFyKHtjbGFzc0xpc3Q6W10saGVhZGVyQ29udGVudDpfdGhpcy5jdXJyZW50TGFuZ3VhZ2VTZXR0aW5ncy5zZXR0aW5nc01vZGFsLmhlYWRlclRpdGxlLGNsb3NlQ2FsbGJhY2s6ZnVuY3Rpb24oKXtfdGhpcy5zZXRTdGF0ZSh7aXNDbG9zZWQ6ITF9KSxDb29raWVDb25zZW50R3JhbnVsYXIuaGFzVmFsaWRDb25zZW50KCkmJl90aGlzLmNsb3NlQ29va2llV2FsbCgpfSxzZWxlY3RvcjpfdGhpcy5jdXJyZW50TGFuZ3VhZ2VTZXR0aW5ncy5zZXR0aW5nc01vZGFsLnNlbGVjdG9yLG1haW5TZWxlY3RvcjpfdGhpcy5jdXJyZW50TGFuZ3VhZ2VTZXR0aW5ncy5zZXR0aW5nc01vZGFsLm1haW5TZWxlY3RvcixoZWFkZXJTZWxlY3RvcjpfdGhpcy5jdXJyZW50TGFuZ3VhZ2VTZXR0aW5ncy5zZXR0aW5nc01vZGFsLmhlYWRlclNlbGVjdG9yLHN1YkhlYWRlckNvbnRlbnRzOl90aGlzLmN1cnJlbnRMYW5ndWFnZVNldHRpbmdzLnNldHRpbmdzTW9kYWwuc3ViSGVhZGVyQ29udGVudHMsYnV0dG9uczp7YWNjZXB0QWxsVGV4dDpfdGhpcy5jdXJyZW50TGFuZ3VhZ2VTZXR0aW5ncy5zZXR0aW5nc01vZGFsLmJ1dHRvbkFjY2VwdEFsbCxvbmx5U2VsZWN0ZWRUZXh0Ol90aGlzLmN1cnJlbnRMYW5ndWFnZVNldHRpbmdzLnNldHRpbmdzTW9kYWwuYnV0dG9uT25seVNlbGVjdGVkfSxjb25zZW50czpfdGhpcy5jdXJyZW50TGFuZ3VhZ2VTZXR0aW5ncy5zZXR0aW5nc01vZGFsLmNvbnNlbnRzfSksX3RoaXMuc2V0U3RhdGUoe2lzQ2xvc2VkOiEwfSksX3RoaXMuY29va2llU2V0dGluZ3NHcmFudWxhclBvcHVwJiZfdGhpcy5jb29raWVTZXR0aW5nc0dyYW51bGFyUG9wdXAucmVuZGVyKCl9KSksY29va2llX3dhbGxfZ3JhbnVsYXJfZGVmaW5lUHJvcGVydHkodGhpcyxcImNsb3NlQ29va2llV2FsbFwiLChmdW5jdGlvbigpe190aGlzLnNldFN0YXRlKHtpc0Nsb3NlZDohMCxjb25zZW50SXNWYWxpZDohMH0pfSkpLGNvb2tpZV93YWxsX2dyYW51bGFyX2RlZmluZVByb3BlcnR5KHRoaXMsXCJyZW5kZXJcIiwoZnVuY3Rpb24oKXt2YXIgX3RoaXMkcHJvcHM9X3RoaXMucHJvcHMsY2xhc3NMaXN0PV90aGlzJHByb3BzLmNsYXNzTGlzdCwkY29udGFpbmVyPV90aGlzJHByb3BzLiRjb250YWluZXIsX3RoaXMkY3VycmVudExhbmd1YWdlPV90aGlzLmN1cnJlbnRMYW5ndWFnZVNldHRpbmdzLGJ1dHRvblRleHQ9X3RoaXMkY3VycmVudExhbmd1YWdlLmJ1dHRvblRleHQsY29udGVudFRleHQ9X3RoaXMkY3VycmVudExhbmd1YWdlLmNvbnRlbnRUZXh0LGJ1dHRvbk5lY2Vzc2FyeVBhY2thZ2U9X3RoaXMkY3VycmVudExhbmd1YWdlLmJ1dHRvbk5lY2Vzc2FyeVBhY2thZ2UsYnV0dG9uVGV4dEFyaWE9X3RoaXMkY3VycmVudExhbmd1YWdlLmJ1dHRvblRleHRBcmlhLGJ1dHRvbk5lY2Vzc2FyeVBhY2thZ2VBcmlhPV90aGlzJGN1cnJlbnRMYW5ndWFnZS5idXR0b25OZWNlc3NhcnlQYWNrYWdlQXJpYSx0ZXh0V2l0aFVybD1jb250ZW50VGV4dC5yZXBsYWNlKC97cHJlZmVyZW5jZXNNb2RhbH0vZywnPGEgaHJlZj1cIiNcIiBjbGFzcz1cImNjLWJhbm5lci1ncmFudWxhcl9fbGluayAnLmNvbmNhdChcImpzLWxpbmstb3Blbi1wcmVmZXJlbmNlc1wiLCdcIj4nKSkucmVwbGFjZSgve1xcL3ByZWZlcmVuY2VzTW9kYWx9L2csXCI8L2E+XCIpO2lmKCRjb250YWluZXIuaW5uZXJIVE1MPVwiXCIsIV90aGlzLmdldFN0YXRlKCkuaXNDbG9zZWQmJiFfdGhpcy5nZXRTdGF0ZSgpLmNvbnNlbnRJc1ZhbGlkJiYkY29udGFpbmVyKXt2YXIgcHJpbWFyeUlzQWN0aXZlPV90aGlzLmN1cnJlbnRMYW5ndWFnZVNldHRpbmdzJiZfdGhpcy5zZWxlY3RlZExhbmd1YWdlPT09X3RoaXMucHJvcHMubGFuZ3VhZ2VTZXR0aW5ncy5wcmltYXJ5TGFuZ3VhZ2UubGFuZ3VhZ2VLZXksYmFubmVyVGl0bGU9X3RoaXMuY3VycmVudExhbmd1YWdlU2V0dGluZ3M/X3RoaXMuY3VycmVudExhbmd1YWdlU2V0dGluZ3MuYmFubmVyVGl0bGU6XCJcIixwcmltYXJ5TGFuZ3VhZ2VLZXk9X3RoaXMucHJvcHMubGFuZ3VhZ2VTZXR0aW5ncy5wcmltYXJ5TGFuZ3VhZ2UubGFuZ3VhZ2VLZXksc2Vjb25kYXJ5TGFuZ3VhZ2VLZXk9X3RoaXMucHJvcHMubGFuZ3VhZ2VTZXR0aW5ncy5zZWNvbmRhcnlMYW5ndWFnZS5sYW5ndWFnZUtleTskY29udGFpbmVyLmlubmVySFRNTD0nXFxuICAgICAgPGRpdiBjbGFzcz1cImNjLWJhbm5lci1ncmFudWxhcl9fYmFja2dyb3VuZFwiPjwvZGl2PlxcbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2MtYmFubmVyLWdyYW51bGFyX19jb250YWluZXIgJy5jb25jYXQoY2xhc3NMaXN0P2NsYXNzTGlzdC5qb2luKFwiIFwiKTpcIlwiLCdcIj5cXG4gICAgICAgIDxhcnRpY2xlIGNsYXNzPVwiY2MtYmFubmVyLWdyYW51bGFyX193cmFwcGVyXCI+XFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYy1iYW5uZXItZ3JhbnVsYXJfX2hlYWRlclwiPlxcbiAgICAgICAgICAgIDxoMiBjbGFzcz1cImNjLWJhbm5lci1ncmFudWxhcl9faGVhZGVyLXRpdGxlXCI+JykuY29uY2F0KGJhbm5lclRpdGxlLCc8L2gyPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYy1iYW5uZXItZ3JhbnVsYXJfX2hlYWRlci1sYW5ndWFnZS1waWNrZXJcIj5cXG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjYy1iYW5uZXItZ3JhbnVsYXJfX2hlYWRlci1sYW5ndWFnZS1waWNrZXItbGluayAnKS5jb25jYXQocHJpbWFyeUlzQWN0aXZlP1wiYWN0aXZlXCI6XCJcIixcIiBcIikuY29uY2F0KFwianMtdXNlLXByaW1hcnktbGFuZ3VhZ2VcIiwnXCIgaHJlZj1cIiNcIj4nKS5jb25jYXQocHJpbWFyeUxhbmd1YWdlS2V5LCc8L2E+IHwgPGEgY2xhc3M9XCJjYy1iYW5uZXItZ3JhbnVsYXJfX2hlYWRlci1sYW5ndWFnZS1waWNrZXItbGluayAnKS5jb25jYXQocHJpbWFyeUlzQWN0aXZlP1wiXCI6XCJhY3RpdmVcIixcIiBcIikuY29uY2F0KFwianMtdXNlLXNlY29uZGFyeS1sYW5ndWFnZVwiLCdcIiBocmVmPVwiI1wiPicpLmNvbmNhdChzZWNvbmRhcnlMYW5ndWFnZUtleSwnPC9hPlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgPHAgY2xhc3M9XCJjYy1iYW5uZXItZ3JhbnVsYXJfX3RleHRcIj5cXG4gICAgICAgICAgICAnKS5jb25jYXQodGV4dFdpdGhVcmwsJ1xcbiAgICAgICAgICA8L3A+XFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYy1iYW5uZXItZ3JhbnVsYXJfX2J1dHRvbnNcIj5cXG4gICAgICAgICAgICA8YnV0dG9uXFxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiJykuY29uY2F0KGJ1dHRvblRleHRBcmlhLCdcIlxcbiAgICAgICAgICAgICAgY2xhc3M9XCJcXG4gICAgICAgICAgICAgIGNjLWJhbm5lci1ncmFudWxhcl9fYnRuLW9rIGNjLWJhbm5lci1ncmFudWxhcl9fYnRuXFxuICAgICAgICAgICAgICAnKS5jb25jYXQoXCJqcy1idG4tb2tcIiwnXCJcXG4gICAgICAgICAgICA+XFxuICAgICAgICAgICAgICAnKS5jb25jYXQoYnV0dG9uVGV4dCwnXFxuICAgICAgICAgICAgPC9idXR0b24+XFxuICAgICAgICAgICAgPGJ1dHRvblxcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIicpLmNvbmNhdChidXR0b25OZWNlc3NhcnlQYWNrYWdlQXJpYSwnXCJcXG4gICAgICAgICAgICAgIGNsYXNzPVwiXFxuICAgICAgICAgICAgICBjYy1iYW5uZXItZ3JhbnVsYXJfX2J0bi1lc3NlbnRpYWwgY2MtYmFubmVyLWdyYW51bGFyX19idG5cXG4gICAgICAgICAgICAgICcpLmNvbmNhdChcImpzLWJ0bi1uZWNlc3NhcnlcIiwnXCJcXG4gICAgICAgICAgICA+XFxuICAgICAgICAgICAgICAnKS5jb25jYXQoYnV0dG9uTmVjZXNzYXJ5UGFja2FnZSxcIlxcbiAgICAgICAgICAgIDwvYnV0dG9uPlxcbiAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvYXJ0aWNsZT5cXG4gICAgICA8L3NlY3Rpb24+XCIpLF90aGlzLmNvbXBvbmVudERpZE1vdW50KCl9fSkpLHRoaXMucHJvcHM9Y29va2llX3dhbGxfZ3JhbnVsYXJfb2JqZWN0U3ByZWFkKHt9LF9wcm9wcyksXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5wcm9wcy51cGRhdGVDb29raWVGbiYmY29va2llX2NvbnNlbnRfZ3JhbnVsYXJfVXBkYXRlQ29uc2VudC5zdWJzY3JpYmUodGhpcy5wcm9wcy51cGRhdGVDb29raWVGbik7dmFyIGNvbnNlbnRJc1ZhbGlkPUNvb2tpZUNvbnNlbnRHcmFudWxhci5oYXNWYWxpZENvbnNlbnQoKTt0aGlzLnNlbGVjdGVkTGFuZ3VhZ2U9X3Byb3BzLnNlbGVjdGVkTGFuZ3VhZ2UsdGhpcy5jdXJyZW50TGFuZ3VhZ2VTZXR0aW5ncz1fcHJvcHMubGFuZ3VhZ2VTZXR0aW5ncy5wcmltYXJ5TGFuZ3VhZ2UubGFuZ3VhZ2VLZXk9PT1fcHJvcHMuc2VsZWN0ZWRMYW5ndWFnZT9fcHJvcHMubGFuZ3VhZ2VTZXR0aW5ncy5wcmltYXJ5TGFuZ3VhZ2U6X3Byb3BzLmxhbmd1YWdlU2V0dGluZ3Muc2Vjb25kYXJ5TGFuZ3VhZ2UsdGhpcy5zZXRTdGF0ZSh7Y29uc2VudElzVmFsaWQ6Y29uc2VudElzVmFsaWR9KX12YXIgQ29uc3RydWN0b3IscHJvdG9Qcm9wcyxzdGF0aWNQcm9wcztyZXR1cm4gQ29uc3RydWN0b3I9Q29va2llV2FsbEdyYW51bGFyLChwcm90b1Byb3BzPVt7a2V5OlwiY29tcG9uZW50RGlkTW91bnRcIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmdldFN0YXRlKCkuY29uc2VudCl7dmFyICRva0J1dHRvbj10aGlzLnByb3BzLiRjb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQoXCJqcy1idG4tb2tcIikpOyRva0J1dHRvbiYmJG9rQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHRoaXMuY2xpY2tPa0V2ZW50KTt2YXIgJG5lY2Vzc2FyeUJ1dHRvbj10aGlzLnByb3BzLiRjb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQoXCJqcy1idG4tbmVjZXNzYXJ5XCIpKTskbmVjZXNzYXJ5QnV0dG9uJiYkbmVjZXNzYXJ5QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHRoaXMuY2xpY2tOZWNlc3NhcnlFdmVudCk7dmFyICRvcGVuUHJlZmVyZW5jZXNMaW5rPXRoaXMucHJvcHMuJGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdChcImpzLWxpbmstb3Blbi1wcmVmZXJlbmNlc1wiKSk7JG9wZW5QcmVmZXJlbmNlc0xpbmsmJiRvcGVuUHJlZmVyZW5jZXNMaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHRoaXMuY2xpY2tPcGVuUHJlZmVyZW5jZXMpO3ZhciAkcHJpbWFyeUNvbnRlbnRMaW5rPXRoaXMucHJvcHMuJGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdChcImpzLXVzZS1wcmltYXJ5LWxhbmd1YWdlXCIpKTskcHJpbWFyeUNvbnRlbnRMaW5rJiYkcHJpbWFyeUNvbnRlbnRMaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHRoaXMuc3dpdGNoVG9QcmltYXJ5Q29udGVudCk7dmFyICRzZWNvbmRhcnlDb250ZW50TGluaz10aGlzLnByb3BzLiRjb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQoXCJqcy11c2Utc2Vjb25kYXJ5LWxhbmd1YWdlXCIpKTskc2Vjb25kYXJ5Q29udGVudExpbmsmJiRzZWNvbmRhcnlDb250ZW50TGluay5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLnN3aXRjaFRvU2Vjb25kYXJ5Q29udGVudCl9fX1dKSYmY29va2llX3dhbGxfZ3JhbnVsYXJfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUscHJvdG9Qcm9wcyksc3RhdGljUHJvcHMmJmNvb2tpZV93YWxsX2dyYW51bGFyX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3Isc3RhdGljUHJvcHMpLENvb2tpZVdhbGxHcmFudWxhcn0oKTtjb29raWVfd2FsbF9ncmFudWxhcl9kZWZpbmVQcm9wZXJ0eShjb29raWVfd2FsbF9ncmFudWxhcl9Db29raWVXYWxsR3JhbnVsYXIsXCJwcm9wVHlwZXNcIix7bGFuZ3VhZ2VTZXR0aW5nczpwcm9wX3R5cGVzLm9iamVjdC5pc1JlcXVpcmVkLGNsYXNzTGlzdDpbXSwkY29udGFpbmVyOk9iamVjdChwcm9wX3R5cGVzLmluc3RhbmNlT2YpKHByb3BfdHlwZXMuRWxlbWVudCkuaXNSZXF1aXJlZCx1cGRhdGVDb29raWVGbjpGdW5jdGlvbixkb21haW46cHJvcF90eXBlcy5zdHJpbmcsc2VsZWN0ZWRMYW5ndWFnZTpwcm9wX3R5cGVzLnN0cmluZ30pO19fd2VicGFja19yZXF1aXJlX18oMTgyKSxfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Myk7ZnVuY3Rpb24gbm90aWZ5X2RlZmluZVByb3BlcnR5KG9iaixrZXksdmFsdWUpe3JldHVybiBrZXkgaW4gb2JqP09iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosa2V5LHt2YWx1ZTp2YWx1ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm9ialtrZXldPXZhbHVlLG9ian12YXIgVFlQRV9FUlJPUj1cImVycm9yXCIsVFlQRV9JTkZPPVwiaW5mb1wiLFRZUEVfU1VDQ0VTUz1cInN1Y2Nlc3NcIixUWVBFX1dBUk5JTkc9XCJ3YXJuaW5nXCIsTm90aWZ5PWZ1bmN0aW9uIE5vdGlmeSgpeyFmdW5jdGlvbihpbnN0YW5jZSxDb25zdHJ1Y3Rvcil7aWYoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLE5vdGlmeSl9O25vdGlmeV9kZWZpbmVQcm9wZXJ0eShOb3RpZnksXCJfbm90aWZ5XCIsKGZ1bmN0aW9uKHRleHQpe3ZhciB0eXBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpUWVBFX1NVQ0NFU1MsZHVyYXRpb249YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjVlMyxpY29uPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTpudWxsLHNlbGVjdG9yPVwibm90aWZ5XCIsJG9sZEVsZW09ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIitzZWxlY3Rvcik7JG9sZEVsZW0mJiRvbGRFbGVtLnJlbW92ZSgpO3ZhciBIVE1MPSdcXG4gICAgICA8ZGl2IGNsYXNzPVwiJy5jb25jYXQoc2VsZWN0b3IsXCIgXCIpLmNvbmNhdChzZWxlY3RvcixcIi0tXCIpLmNvbmNhdCh0eXBlLCdcIj5cXG4gICAgICAgICAgJykuY29uY2F0KGljb24sJ1xcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiJykuY29uY2F0KHNlbGVjdG9yLCdfX3RpdGxlXCI+JykuY29uY2F0KHRleHQsXCI8L2Rpdj5cXG4gICAgICA8L2Rpdj5cIik7ZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEhUTUwoXCJiZWZvcmVlbmRcIixIVE1MKTt2YXIgJGVsZW09ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIitzZWxlY3Rvcik7JGVsZW0uYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwoZnVuY3Rpb24oKXtyZXR1cm4gJGVsZW0ucmVtb3ZlKCl9KSksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gJGVsZW0uY2xhc3NMaXN0LmFkZChzZWxlY3RvcitcIi0taGlkZGVuXCIpfSksZHVyYXRpb24pfSkpLG5vdGlmeV9kZWZpbmVQcm9wZXJ0eShOb3RpZnksXCJub3RpZnlFcnJvclwiLChmdW5jdGlvbih0ZXh0KXt2YXIgZHVyYXRpb249YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjVlMztyZXR1cm4gTm90aWZ5Ll9ub3RpZnkodGV4dCxUWVBFX0VSUk9SLGR1cmF0aW9uLGljb25Dcm9zcyl9KSksbm90aWZ5X2RlZmluZVByb3BlcnR5KE5vdGlmeSxcIm5vdGlmeUVycm9yV2l0aEljb25TYWRcIiwoZnVuY3Rpb24odGV4dCl7dmFyIGR1cmF0aW9uPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo1ZTM7cmV0dXJuIE5vdGlmeS5fbm90aWZ5KHRleHQsVFlQRV9FUlJPUixkdXJhdGlvbixpY29uQXR0ZW50aW9uKX0pKSxub3RpZnlfZGVmaW5lUHJvcGVydHkoTm90aWZ5LFwibm90aWZ5SW5mb1wiLChmdW5jdGlvbih0ZXh0KXt2YXIgZHVyYXRpb249YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjVlMztyZXR1cm4gTm90aWZ5Ll9ub3RpZnkodGV4dCxUWVBFX0lORk8sZHVyYXRpb24saWNvbkluZm9DaXJjbGUpfSkpLG5vdGlmeV9kZWZpbmVQcm9wZXJ0eShOb3RpZnksXCJub3RpZnlTdWNjZXNzXCIsKGZ1bmN0aW9uKHRleHQpe3ZhciBkdXJhdGlvbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06NWUzO3JldHVybiBOb3RpZnkuX25vdGlmeSh0ZXh0LFRZUEVfU1VDQ0VTUyxkdXJhdGlvbixpY29uQ2hlY2spfSkpLG5vdGlmeV9kZWZpbmVQcm9wZXJ0eShOb3RpZnksXCJub3RpZnlTdWNjZXNzV2l0aEljb25IYXBweVwiLChmdW5jdGlvbih0ZXh0KXt2YXIgZHVyYXRpb249YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjVlMztyZXR1cm4gTm90aWZ5Ll9ub3RpZnkodGV4dCxUWVBFX1NVQ0NFU1MsZHVyYXRpb24saWNvbkVtb2ppSGFwcHkpfSkpLG5vdGlmeV9kZWZpbmVQcm9wZXJ0eShOb3RpZnksXCJub3RpZnlXYXJuaW5nXCIsKGZ1bmN0aW9uKHRleHQpe3ZhciBkdXJhdGlvbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06NWUzO3JldHVybiBOb3RpZnkuX25vdGlmeSh0ZXh0LFRZUEVfV0FSTklORyxkdXJhdGlvbixpY29uQXR0ZW50aW9uKX0pKSx3aW5kb3cubm90PU5vdGlmeTtfX3dlYnBhY2tfcmVxdWlyZV9fKDE4NSk7ZnVuY3Rpb24gc3Bpbm5lcl9vd25LZXlzKG9iamVjdCxlbnVtZXJhYmxlT25seSl7dmFyIGtleXM9T2JqZWN0LmtleXMob2JqZWN0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgc3ltYm9scz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7ZW51bWVyYWJsZU9ubHkmJihzeW1ib2xzPXN5bWJvbHMuZmlsdGVyKChmdW5jdGlvbihzeW0pe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCxzeW0pLmVudW1lcmFibGV9KSkpLGtleXMucHVzaC5hcHBseShrZXlzLHN5bWJvbHMpfXJldHVybiBrZXlzfWZ1bmN0aW9uIHNwaW5uZXJfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQscHJvcHMpe2Zvcih2YXIgaT0wO2k8cHJvcHMubGVuZ3RoO2krKyl7dmFyIGRlc2NyaXB0b3I9cHJvcHNbaV07ZGVzY3JpcHRvci5lbnVtZXJhYmxlPWRlc2NyaXB0b3IuZW51bWVyYWJsZXx8ITEsZGVzY3JpcHRvci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gZGVzY3JpcHRvciYmKGRlc2NyaXB0b3Iud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsZGVzY3JpcHRvci5rZXksZGVzY3JpcHRvcil9fWZ1bmN0aW9uIHNwaW5uZXJfZGVmaW5lUHJvcGVydHkob2JqLGtleSx2YWx1ZSl7cmV0dXJuIGtleSBpbiBvYmo/T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaixrZXkse3ZhbHVlOnZhbHVlLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6b2JqW2tleV09dmFsdWUsb2JqfWZ1bmN0aW9uIHNwaW5uZXJfY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIscHJpdmF0ZU1hcCl7dmFyIGRlc2NyaXB0b3I9cHJpdmF0ZU1hcC5nZXQocmVjZWl2ZXIpO2lmKCFkZXNjcmlwdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO3JldHVybiBkZXNjcmlwdG9yLmdldD9kZXNjcmlwdG9yLmdldC5jYWxsKHJlY2VpdmVyKTpkZXNjcmlwdG9yLnZhbHVlfXZhciBzcGlubmVyX1NwaW5uZXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBTcGlubmVyKHByb3BzKXt2YXIgX3RoaXM9dGhpczshZnVuY3Rpb24oaW5zdGFuY2UsQ29uc3RydWN0b3Ipe2lmKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX0odGhpcyxTcGlubmVyKSxzcGlubmVyX3Byb3BzLnNldCh0aGlzLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxzcGlubmVyX2RlZmluZVByb3BlcnR5KHRoaXMsXCJjbG9zZVwiLChmdW5jdGlvbigpe3ZhciBlbGVtZW50PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIuY29uY2F0KHNwaW5uZXJfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RoaXMsc3Bpbm5lcl9wcm9wcykuc2VsZWN0b3IpKTtlbGVtZW50JiZlbGVtZW50LnJlbW92ZSgpfSkpO3ZhciBnZW5lcmF0ZWRVaWQ9Z2VuZXJhdGVVaWQoKSxkZWZhdWx0VmFsdWVzPXtzZWxlY3RvcjpcImpzLXNwaW5uZXItXCIuY29uY2F0KGdlbmVyYXRlZFVpZCl9OyFmdW5jdGlvbihyZWNlaXZlcixwcml2YXRlTWFwLHZhbHVlKXt2YXIgZGVzY3JpcHRvcj1wcml2YXRlTWFwLmdldChyZWNlaXZlcik7aWYoIWRlc2NyaXB0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBzZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7aWYoZGVzY3JpcHRvci5zZXQpZGVzY3JpcHRvci5zZXQuY2FsbChyZWNlaXZlcix2YWx1ZSk7ZWxzZXtpZighZGVzY3JpcHRvci53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZFwiKTtkZXNjcmlwdG9yLnZhbHVlPXZhbHVlfX0odGhpcyxzcGlubmVyX3Byb3BzLGZ1bmN0aW9uKHRhcmdldCl7Zm9yKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIHNvdXJjZT1udWxsIT1hcmd1bWVudHNbaV0/YXJndW1lbnRzW2ldOnt9O2klMj9zcGlubmVyX293bktleXMoT2JqZWN0KHNvdXJjZSksITApLmZvckVhY2goKGZ1bmN0aW9uKGtleSl7c3Bpbm5lcl9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsa2V5LHNvdXJjZVtrZXldKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk6c3Bpbm5lcl9vd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKChmdW5jdGlvbihrZXkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsa2V5LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLGtleSkpfSkpfXJldHVybiB0YXJnZXR9KHt9LGRlZmF1bHRWYWx1ZXMse30scHJvcHMpKX12YXIgQ29uc3RydWN0b3IscHJvdG9Qcm9wcyxzdGF0aWNQcm9wcztyZXR1cm4gQ29uc3RydWN0b3I9U3Bpbm5lciwocHJvdG9Qcm9wcz1be2tleTpcInJlbmRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIEhUTUw9J1xcbiAgICAgICAgPGRpdiBjbGFzcz1cInR2LXNwaW5uZXIgJy5jb25jYXQoc3Bpbm5lcl9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLHNwaW5uZXJfcHJvcHMpLnNlbGVjdG9yLCdcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHYtc3Bpbm5lcl9fYmFja2dyb3VuZFwiPlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHYtc3Bpbm5lcl9fYmFja2dyb3VuZC1jaXJjbGVcIj48L2Rpdj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgJyk7ZG9jdW1lbnQuYm9keSYmZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEhUTUwoXCJiZWZvcmVlbmRcIixIVE1MKX19XSkmJnNwaW5uZXJfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUscHJvdG9Qcm9wcyksc3RhdGljUHJvcHMmJnNwaW5uZXJfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3RvcixzdGF0aWNQcm9wcyksU3Bpbm5lcn0oKSxzcGlubmVyX3Byb3BzPW5ldyBXZWFrTWFwOyFmdW5jdGlvbihvYmosa2V5LHZhbHVlKXtrZXkgaW4gb2JqP09iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosa2V5LHt2YWx1ZTp2YWx1ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm9ialtrZXldPXZhbHVlfSgoZnVuY3Rpb24gU3Bpbm5lckF1dG9sb2FkZXIoKXshZnVuY3Rpb24oaW5zdGFuY2UsQ29uc3RydWN0b3Ipe2lmKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX0odGhpcyxTcGlubmVyQXV0b2xvYWRlcil9KSxcImxvYWRcIiwoZnVuY3Rpb24oKXtuZXcgYnV0dG9uX0J1dHRvbih7JGNvbnRhaW5lcjpkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLlwiLmNvbmNhdChcImpzLWJ1dHRvbi1zcGlubmVyXCIpKSxpbm5lckNvbnRlbnQ6XCJUZXN0IHRoZSBzcGlubmVyXCIsY2xpY2tGbjpmdW5jdGlvbigpe3ZhciBzcGlubmVyPW5ldyBzcGlubmVyX1NwaW5uZXI7c3Bpbm5lci5yZW5kZXIoKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3NwaW5uZXIuY2xvc2UoKX0pLDNlMyl9fSkucmVuZGVyKCl9KSl9XSl9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2F4aW9zJyk7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgc2V0dGxlID0gcmVxdWlyZSgnLi8uLi9jb3JlL3NldHRsZScpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgYnVpbGRGdWxsUGF0aCA9IHJlcXVpcmUoJy4uL2NvcmUvYnVpbGRGdWxsUGF0aCcpO1xudmFyIHBhcnNlSGVhZGVycyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9wYXJzZUhlYWRlcnMnKTtcbnZhciBpc1VSTFNhbWVPcmlnaW4gPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luJyk7XG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2NyZWF0ZUVycm9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geGhyQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgcmVxdWVzdEhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSkge1xuICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzWydDb250ZW50LVR5cGUnXTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkIHx8ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlXG4gICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9ICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgPyBwYXJzZUhlYWRlcnMocmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkgOiBudWxsO1xuICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9ICFjb25maWcucmVzcG9uc2VUeXBlIHx8IGNvbmZpZy5yZXNwb25zZVR5cGUgPT09ICd0ZXh0JyA/IHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIHZhciByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgY29uZmlnLCAnRUNPTk5BQk9SVEVEJywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignTmV0d29yayBFcnJvcicsIGNvbmZpZywgbnVsbCwgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICB2YXIgdGltZW91dEVycm9yTWVzc2FnZSA9ICd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCc7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKHRpbWVvdXRFcnJvck1lc3NhZ2UsIGNvbmZpZywgJ0VDT05OQUJPUlRFRCcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYgKHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpIHtcbiAgICAgIHZhciBjb29raWVzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2Nvb2tpZXMnKTtcblxuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICB2YXIgeHNyZlZhbHVlID0gKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgfHwgaXNVUkxTYW1lT3JpZ2luKGZ1bGxQYXRoKSkgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lID9cbiAgICAgICAgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSkgOlxuICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChjb25maWcucmVzcG9uc2VUeXBlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IGNvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIEV4cGVjdGVkIERPTUV4Y2VwdGlvbiB0aHJvd24gYnkgYnJvd3NlcnMgbm90IGNvbXBhdGlibGUgWE1MSHR0cFJlcXVlc3QgTGV2ZWwgMi5cbiAgICAgICAgLy8gQnV0LCB0aGlzIGNhbiBiZSBzdXBwcmVzc2VkIGZvciAnanNvbicgdHlwZSBhcyBpdCBjYW4gYmUgcGFyc2VkIGJ5IGRlZmF1bHQgJ3RyYW5zZm9ybVJlc3BvbnNlJyBmdW5jdGlvbi5cbiAgICAgICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4ucHJvbWlzZS50aGVuKGZ1bmN0aW9uIG9uQ2FuY2VsZWQoY2FuY2VsKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVqZWN0KGNhbmNlbCk7XG4gICAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdERhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdERhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEpO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBBeGlvcyA9IHJlcXVpcmUoJy4vY29yZS9BeGlvcycpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9jb3JlL21lcmdlQ29uZmlnJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIHZhciBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICB2YXIgaW5zdGFuY2UgPSBiaW5kKEF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIEF4aW9zLnByb3RvdHlwZSwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbnZhciBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zO1xuXG4vLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG5heGlvcy5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGF4aW9zLmRlZmF1bHRzLCBpbnN0YW5jZUNvbmZpZykpO1xufTtcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWwnKTtcbmF4aW9zLkNhbmNlbFRva2VuID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsVG9rZW4nKTtcbmF4aW9zLmlzQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvaXNDYW5jZWwnKTtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcbmF4aW9zLnNwcmVhZCA9IHJlcXVpcmUoJy4vaGVscGVycy9zcHJlYWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBheGlvcztcblxuLy8gQWxsb3cgdXNlIG9mIGRlZmF1bHQgaW1wb3J0IHN5bnRheCBpbiBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gYXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQSBgQ2FuY2VsYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbChtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG59XG5cbkNhbmNlbC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdDYW5jZWwnICsgKHRoaXMubWVzc2FnZSA/ICc6ICcgKyB0aGlzLm1lc3NhZ2UgOiAnJyk7XG59O1xuXG5DYW5jZWwucHJvdG90eXBlLl9fQ0FOQ0VMX18gPSB0cnVlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4vQ2FuY2VsJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsVG9rZW4oZXhlY3V0b3IpIHtcbiAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHZhciByZXNvbHZlUHJvbWlzZTtcbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlKSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbChtZXNzYWdlKTtcbiAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gKi9cbkNhbmNlbFRva2VuLnNvdXJjZSA9IGZ1bmN0aW9uIHNvdXJjZSgpIHtcbiAgdmFyIGNhbmNlbDtcbiAgdmFyIHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICBjYW5jZWwgPSBjO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbjogdG9rZW4sXG4gICAgY2FuY2VsOiBjYW5jZWxcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsVG9rZW47XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIEludGVyY2VwdG9yTWFuYWdlciA9IHJlcXVpcmUoJy4vSW50ZXJjZXB0b3JNYW5hZ2VyJyk7XG52YXIgZGlzcGF0Y2hSZXF1ZXN0ID0gcmVxdWlyZSgnLi9kaXNwYXRjaFJlcXVlc3QnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vbWVyZ2VDb25maWcnKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gQXhpb3MoaW5zdGFuY2VDb25maWcpIHtcbiAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICB9O1xufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICovXG5BeGlvcy5wcm90b3R5cGUucmVxdWVzdCA9IGZ1bmN0aW9uIHJlcXVlc3QoY29uZmlnKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZyA9IGFyZ3VtZW50c1sxXSB8fCB7fTtcbiAgICBjb25maWcudXJsID0gYXJndW1lbnRzWzBdO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgfVxuXG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgaWYgKGNvbmZpZy5tZXRob2QpIHtcbiAgICBjb25maWcubWV0aG9kID0gY29uZmlnLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdHMubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IHRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnLm1ldGhvZCA9ICdnZXQnO1xuICB9XG5cbiAgLy8gSG9vayB1cCBpbnRlcmNlcHRvcnMgbWlkZGxld2FyZVxuICB2YXIgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LCB1bmRlZmluZWRdO1xuICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgIGNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgY2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgd2hpbGUgKGNoYWluLmxlbmd0aCkge1xuICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW4uc2hpZnQoKSwgY2hhaW4uc2hpZnQoKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cbkF4aW9zLnByb3RvdHlwZS5nZXRVcmkgPSBmdW5jdGlvbiBnZXRVcmkoY29uZmlnKSB7XG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gIHJldHVybiBidWlsZFVSTChjb25maWcudXJsLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlxcPy8sICcnKTtcbn07XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHV0aWxzLm1lcmdlKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybFxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCh1dGlscy5tZXJnZShjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiBkYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gSW50ZXJjZXB0b3JNYW5hZ2VyKCkge1xuICB0aGlzLmhhbmRsZXJzID0gW107XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkKSB7XG4gIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkXG4gIH0pO1xuICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZWplY3QgPSBmdW5jdGlvbiBlamVjdChpZCkge1xuICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgZm4oaCk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNBYnNvbHV0ZVVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTCcpO1xudmFyIGNvbWJpbmVVUkxzID0gcmVxdWlyZSgnLi4vaGVscGVycy9jb21iaW5lVVJMcycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVuaGFuY2VFcnJvciA9IHJlcXVpcmUoJy4vZW5oYW5jZUVycm9yJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZUVycm9yKG1lc3NhZ2UsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZW5oYW5jZUVycm9yKGVycm9yLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciB0cmFuc2Zvcm1EYXRhID0gcmVxdWlyZSgnLi90cmFuc2Zvcm1EYXRhJyk7XG52YXIgaXNDYW5jZWwgPSByZXF1aXJlKCcuLi9jYW5jZWwvaXNDYW5jZWwnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgLy8gRW5zdXJlIGhlYWRlcnMgZXhpc3RcbiAgY29uZmlnLmhlYWRlcnMgPSBjb25maWcuaGVhZGVycyB8fCB7fTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICBjb25maWcuZGF0YSxcbiAgICBjb25maWcuaGVhZGVycyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICBjb25maWcuaGVhZGVycyA9IHV0aWxzLm1lcmdlKFxuICAgIGNvbmZpZy5oZWFkZXJzLmNvbW1vbiB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1tjb25maWcubWV0aG9kXSB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1xuICApO1xuXG4gIHV0aWxzLmZvckVhY2goXG4gICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgZnVuY3Rpb24gY2xlYW5IZWFkZXJDb25maWcobWV0aG9kKSB7XG4gICAgICBkZWxldGUgY29uZmlnLmhlYWRlcnNbbWV0aG9kXTtcbiAgICB9XG4gICk7XG5cbiAgdmFyIGFkYXB0ZXIgPSBjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhKFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXBkYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBjb25maWcsIGVycm9yIGNvZGUsIGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBUaGUgZXJyb3IgdG8gdXBkYXRlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgZXJyb3IuY29uZmlnID0gY29uZmlnO1xuICBpZiAoY29kZSkge1xuICAgIGVycm9yLmNvZGUgPSBjb2RlO1xuICB9XG5cbiAgZXJyb3IucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIGVycm9yLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIGVycm9yLmlzQXhpb3NFcnJvciA9IHRydWU7XG5cbiAgZXJyb3IudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICBjb2RlOiB0aGlzLmNvZGVcbiAgICB9O1xuICB9O1xuICByZXR1cm4gZXJyb3I7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgdmFyIGNvbmZpZyA9IHt9O1xuXG4gIHZhciB2YWx1ZUZyb21Db25maWcyS2V5cyA9IFsndXJsJywgJ21ldGhvZCcsICdwYXJhbXMnLCAnZGF0YSddO1xuICB2YXIgbWVyZ2VEZWVwUHJvcGVydGllc0tleXMgPSBbJ2hlYWRlcnMnLCAnYXV0aCcsICdwcm94eSddO1xuICB2YXIgZGVmYXVsdFRvQ29uZmlnMktleXMgPSBbXG4gICAgJ2Jhc2VVUkwnLCAndXJsJywgJ3RyYW5zZm9ybVJlcXVlc3QnLCAndHJhbnNmb3JtUmVzcG9uc2UnLCAncGFyYW1zU2VyaWFsaXplcicsXG4gICAgJ3RpbWVvdXQnLCAnd2l0aENyZWRlbnRpYWxzJywgJ2FkYXB0ZXInLCAncmVzcG9uc2VUeXBlJywgJ3hzcmZDb29raWVOYW1lJyxcbiAgICAneHNyZkhlYWRlck5hbWUnLCAnb25VcGxvYWRQcm9ncmVzcycsICdvbkRvd25sb2FkUHJvZ3Jlc3MnLFxuICAgICdtYXhDb250ZW50TGVuZ3RoJywgJ3ZhbGlkYXRlU3RhdHVzJywgJ21heFJlZGlyZWN0cycsICdodHRwQWdlbnQnLFxuICAgICdodHRwc0FnZW50JywgJ2NhbmNlbFRva2VuJywgJ3NvY2tldFBhdGgnXG4gIF07XG5cbiAgdXRpbHMuZm9yRWFjaCh2YWx1ZUZyb21Db25maWcyS2V5cywgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKHR5cGVvZiBjb25maWcyW3Byb3BdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uZmlnW3Byb3BdID0gY29uZmlnMltwcm9wXTtcbiAgICB9XG4gIH0pO1xuXG4gIHV0aWxzLmZvckVhY2gobWVyZ2VEZWVwUHJvcGVydGllc0tleXMsIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMocHJvcCkge1xuICAgIGlmICh1dGlscy5pc09iamVjdChjb25maWcyW3Byb3BdKSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gdXRpbHMuZGVlcE1lcmdlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZzJbcHJvcF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBjb25maWcyW3Byb3BdO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNPYmplY3QoY29uZmlnMVtwcm9wXSkpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IHV0aWxzLmRlZXBNZXJnZShjb25maWcxW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcxW3Byb3BdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uZmlnW3Byb3BdID0gY29uZmlnMVtwcm9wXTtcbiAgICB9XG4gIH0pO1xuXG4gIHV0aWxzLmZvckVhY2goZGVmYXVsdFRvQ29uZmlnMktleXMsIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIocHJvcCkge1xuICAgIGlmICh0eXBlb2YgY29uZmlnMltwcm9wXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGNvbmZpZzJbcHJvcF07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnMVtwcm9wXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGNvbmZpZzFbcHJvcF07XG4gICAgfVxuICB9KTtcblxuICB2YXIgYXhpb3NLZXlzID0gdmFsdWVGcm9tQ29uZmlnMktleXNcbiAgICAuY29uY2F0KG1lcmdlRGVlcFByb3BlcnRpZXNLZXlzKVxuICAgIC5jb25jYXQoZGVmYXVsdFRvQ29uZmlnMktleXMpO1xuXG4gIHZhciBvdGhlcktleXMgPSBPYmplY3RcbiAgICAua2V5cyhjb25maWcyKVxuICAgIC5maWx0ZXIoZnVuY3Rpb24gZmlsdGVyQXhpb3NLZXlzKGtleSkge1xuICAgICAgcmV0dXJuIGF4aW9zS2V5cy5pbmRleE9mKGtleSkgPT09IC0xO1xuICAgIH0pO1xuXG4gIHV0aWxzLmZvckVhY2gob3RoZXJLZXlzLCBmdW5jdGlvbiBvdGhlcktleXNEZWZhdWx0VG9Db25maWcyKHByb3ApIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZzJbcHJvcF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBjb25maWcyW3Byb3BdO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZzFbcHJvcF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBjb25maWcxW3Byb3BdO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4vY3JlYXRlRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChjcmVhdGVFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICBudWxsLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBkYXRhIFRoZSBkYXRhIHRvIGJlIHRyYW5zZm9ybWVkXG4gKiBAcGFyYW0ge0FycmF5fSBoZWFkZXJzIFRoZSBoZWFkZXJzIGZvciB0aGUgcmVxdWVzdCBvciByZXNwb25zZVxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZGF0YSwgaGVhZGVycywgZm5zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuKGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBub3JtYWxpemVIZWFkZXJOYW1lID0gcmVxdWlyZSgnLi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUnKTtcblxudmFyIERFRkFVTFRfQ09OVEVOVF9UWVBFID0ge1xuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbn07XG5cbmZ1bmN0aW9uIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCB2YWx1ZSkge1xuICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnMpICYmIHV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSkge1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEFkYXB0ZXIoKSB7XG4gIHZhciBhZGFwdGVyO1xuICBpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEZvciBicm93c2VycyB1c2UgWEhSIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi9hZGFwdGVycy94aHInKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXScpIHtcbiAgICAvLyBGb3Igbm9kZSB1c2UgSFRUUCBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMvaHR0cCcpO1xuICB9XG4gIHJldHVybiBhZGFwdGVyO1xufVxuXG52YXIgZGVmYXVsdHMgPSB7XG4gIGFkYXB0ZXI6IGdldERlZmF1bHRBZGFwdGVyKCksXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0FjY2VwdCcpO1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0NvbnRlbnQtVHlwZScpO1xuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcpO1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtOCcpO1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7IC8qIElnbm9yZSAqLyB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9XG59O1xuXG5kZWZhdWx0cy5oZWFkZXJzID0ge1xuICBjb21tb246IHtcbiAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKidcbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB1dGlscy5tZXJnZShERUZBVUxUX0NPTlRFTlRfVFlQRSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZhdWx0cztcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lNDAvZ2ksICdAJykuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkUGFyYW1zO1xuICBpZiAocGFyYW1zU2VyaWFsaXplcikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJhbXNTZXJpYWxpemVyKHBhcmFtcyk7XG4gIH0gZWxzZSBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSkge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJhbXMudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgcGFydHMgPSBbXTtcblxuICAgIHV0aWxzLmZvckVhY2gocGFyYW1zLCBmdW5jdGlvbiBzZXJpYWxpemUodmFsLCBrZXkpIHtcbiAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodXRpbHMuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGtleSA9IGtleSArICdbXSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBbdmFsXTtcbiAgICAgIH1cblxuICAgICAgdXRpbHMuZm9yRWFjaCh2YWwsIGZ1bmN0aW9uIHBhcnNlVmFsdWUodikge1xuICAgICAgICBpZiAodXRpbHMuaXNEYXRlKHYpKSB7XG4gICAgICAgICAgdiA9IHYudG9JU09TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIGlmICh1dGlscy5pc09iamVjdCh2KSkge1xuICAgICAgICAgIHYgPSBKU09OLnN0cmluZ2lmeSh2KTtcbiAgICAgICAgfVxuICAgICAgICBwYXJ0cy5wdXNoKGVuY29kZShrZXkpICsgJz0nICsgZW5jb2RlKHYpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcnRzLmpvaW4oJyYnKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgdmFyIGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZignIycpO1xuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cblxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgICAgIHZhciBjb29raWUgPSBbXTtcbiAgICAgICAgICBjb29raWUucHVzaChuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcocGF0aCkpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoZG9tYWluKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnc2VjdXJlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZChuYW1lKSB7XG4gICAgICAgICAgdmFyIG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKG5hbWUpIHtcbiAgICAgICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKCkge30sXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQoKSB7IHJldHVybiBudWxsOyB9LFxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgICB9O1xuICAgIH0pKClcbik7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZFxcK1xcLVxcLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4gIC8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICB2YXIgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgICB2YXIgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICB2YXIgb3JpZ2luVVJMO1xuXG4gICAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0J3MgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICAgIHZhciBocmVmID0gdXJsO1xuXG4gICAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKHJlcXVlc3RVUkwpIHtcbiAgICAgICAgdmFyIHBhcnNlZCA9ICh1dGlscy5pc1N0cmluZyhyZXF1ZXN0VVJMKSkgPyByZXNvbHZlVVJMKHJlcXVlc3RVUkwpIDogcmVxdWVzdFVSTDtcbiAgICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbigpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgIH0pKClcbik7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCBub3JtYWxpemVkTmFtZSkge1xuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMsIGZ1bmN0aW9uIHByb2Nlc3NIZWFkZXIodmFsdWUsIG5hbWUpIHtcbiAgICBpZiAobmFtZSAhPT0gbm9ybWFsaXplZE5hbWUgJiYgbmFtZS50b1VwcGVyQ2FzZSgpID09PSBub3JtYWxpemVkTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWROYW1lXSA9IHZhbHVlO1xuICAgICAgZGVsZXRlIGhlYWRlcnNbbmFtZV07XG4gICAgfVxuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLy8gSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbnZhciBpZ25vcmVEdXBsaWNhdGVPZiA9IFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhoZWFkZXJzKSB7XG4gIHZhciBwYXJzZWQgPSB7fTtcbiAgdmFyIGtleTtcbiAgdmFyIHZhbDtcbiAgdmFyIGk7XG5cbiAgaWYgKCFoZWFkZXJzKSB7IHJldHVybiBwYXJzZWQ7IH1cblxuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMuc3BsaXQoJ1xcbicpLCBmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKDAsIGkpKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoaSArIDEpKTtcblxuICAgIGlmIChrZXkpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZi5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSAocGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSA6IFtdKS5jb25jYXQoW3ZhbF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG5cbi8qZ2xvYmFsIHRvU3RyaW5nOnRydWUqL1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5KHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiB0eXBlb2YgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRm9ybURhdGEodmFsKSB7XG4gIHJldHVybiAodHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJykgJiYgKHZhbCBpbnN0YW5jZW9mIEZvcm1EYXRhKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAodmFsLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc051bWJlcih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdudW1iZXInO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRGF0ZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRmlsZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRmlsZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQmxvYih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQmxvYl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJlYW0odmFsKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVVJMU2VhcmNoUGFyYW1zKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zO1xufVxuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyovLCAnJykucmVwbGFjZSgvXFxzKiQvLCAnJyk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICovXG5mdW5jdGlvbiBpc1N0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIChuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ1JlYWN0TmF0aXZlJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnTmF0aXZlU2NyaXB0JyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnTlMnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuICApO1xufVxuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbikge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0eXBlb2YgcmVzdWx0W2tleV0gPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHJlc3VsdFtrZXldLCB2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gZXF1YWwgdG8gbWVyZ2Ugd2l0aCB0aGUgZGlmZmVyZW5jZSBiZWluZyB0aGF0IG5vIHJlZmVyZW5jZVxuICogdG8gb3JpZ2luYWwgb2JqZWN0cyBpcyBrZXB0LlxuICpcbiAqIEBzZWUgbWVyZ2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIGRlZXBNZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0eXBlb2YgcmVzdWx0W2tleV0gPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXN1bHRba2V5XSA9IGRlZXBNZXJnZShyZXN1bHRba2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXN1bHRba2V5XSA9IGRlZXBNZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuZnVuY3Rpb24gZXh0ZW5kKGEsIGIsIHRoaXNBcmcpIHtcbiAgZm9yRWFjaChiLCBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0aGlzQXJnICYmIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBcnJheTogaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcjogaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXI6IGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhOiBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldzogaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nOiBpc1N0cmluZyxcbiAgaXNOdW1iZXI6IGlzTnVtYmVyLFxuICBpc09iamVjdDogaXNPYmplY3QsXG4gIGlzVW5kZWZpbmVkOiBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlOiBpc0RhdGUsXG4gIGlzRmlsZTogaXNGaWxlLFxuICBpc0Jsb2I6IGlzQmxvYixcbiAgaXNGdW5jdGlvbjogaXNGdW5jdGlvbixcbiAgaXNTdHJlYW06IGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtczogaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzU3RhbmRhcmRCcm93c2VyRW52OiBpc1N0YW5kYXJkQnJvd3NlckVudixcbiAgZm9yRWFjaDogZm9yRWFjaCxcbiAgbWVyZ2U6IG1lcmdlLFxuICBkZWVwTWVyZ2U6IGRlZXBNZXJnZSxcbiAgZXh0ZW5kOiBleHRlbmQsXG4gIHRyaW06IHRyaW1cbn07XG4iLCIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbiAgdmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9saWIvaGFzJyk7XG5cbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHsgLyoqLyB9XG4gIH07XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKFxuICAgICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgICAgICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICtcbiAgICAgICAgICAgICAgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJyArXG4gICAgICAgICAgICBsb2NhdGlvbiArICcgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICcgKyB0eXBlb2YgZXJyb3IgKyAnLiAnICtcbiAgICAgICAgICAgICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgK1xuICAgICAgICAgICAgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcblxuICAgICAgICAgIHZhciBzdGFjayA9IGdldFN0YWNrID8gZ2V0U3RhY2soKSA6ICcnO1xuXG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ZhaWxlZCAnICsgbG9jYXRpb24gKyAnIHR5cGU6ICcgKyBlcnJvci5tZXNzYWdlICsgKHN0YWNrICE9IG51bGwgPyBzdGFjayA6ICcnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNldHMgd2FybmluZyBjYWNoZSB3aGVuIHRlc3RpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNoZWNrUHJvcFR5cGVzO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG5cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb24oKSB7fVxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbldpdGhSZXNldCgpIHt9XG5lbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LnJlc2V0V2FybmluZ0NhY2hlID0gZW1wdHlGdW5jdGlvbjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gc2hpbShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgIGlmIChzZWNyZXQgPT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAvLyBJdCBpcyBzdGlsbCBzYWZlIHdoZW4gY2FsbGVkIGZyb20gUmVhY3QuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAnVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICApO1xuICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgIHRocm93IGVycjtcbiAgfTtcbiAgc2hpbS5pc1JlcXVpcmVkID0gc2hpbTtcbiAgZnVuY3Rpb24gZ2V0U2hpbSgpIHtcbiAgICByZXR1cm4gc2hpbTtcbiAgfTtcbiAgLy8gSW1wb3J0YW50IVxuICAvLyBLZWVwIHRoaXMgbGlzdCBpbiBzeW5jIHdpdGggcHJvZHVjdGlvbiB2ZXJzaW9uIGluIGAuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBzaGltLFxuICAgIGJpZ2ludDogc2hpbSxcbiAgICBib29sOiBzaGltLFxuICAgIGZ1bmM6IHNoaW0sXG4gICAgbnVtYmVyOiBzaGltLFxuICAgIG9iamVjdDogc2hpbSxcbiAgICBzdHJpbmc6IHNoaW0sXG4gICAgc3ltYm9sOiBzaGltLFxuXG4gICAgYW55OiBzaGltLFxuICAgIGFycmF5T2Y6IGdldFNoaW0sXG4gICAgZWxlbWVudDogc2hpbSxcbiAgICBlbGVtZW50VHlwZTogc2hpbSxcbiAgICBpbnN0YW5jZU9mOiBnZXRTaGltLFxuICAgIG5vZGU6IHNoaW0sXG4gICAgb2JqZWN0T2Y6IGdldFNoaW0sXG4gICAgb25lT2Y6IGdldFNoaW0sXG4gICAgb25lT2ZUeXBlOiBnZXRTaGltLFxuICAgIHNoYXBlOiBnZXRTaGltLFxuICAgIGV4YWN0OiBnZXRTaGltLFxuXG4gICAgY2hlY2tQcm9wVHlwZXM6IGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQsXG4gICAgcmVzZXRXYXJuaW5nQ2FjaGU6IGVtcHR5RnVuY3Rpb25cbiAgfTtcblxuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9saWIvaGFzJyk7XG52YXIgY2hlY2tQcm9wVHlwZXMgPSByZXF1aXJlKCcuL2NoZWNrUHJvcFR5cGVzJyk7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcbn1cblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgLyogZ2xvYmFsIFN5bWJvbCAqL1xuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG4gIHZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuXG4gICAqXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxuICAgKlxuICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICAgKiAgICAgICAuLi5cbiAgICogICAgIH1cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmVcbiAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpO1xuICAgKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgXCJkZXNjcmlwdGlvblwiLlxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcImNhdGVnb3J5XCIuXG4gICAqICAgICAgIGNhdGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCxcbiAgICpcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFwiZGlhbG9nXCIgdGhhdCByZXF1aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFsb2cuXG4gICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcbiAgICogICAgIH0sXG4gICAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6XG4gICAqXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxuICAgKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVpcmVkKT9cbiAgICpcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xuICAgKiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXCJocmVmXCIuXG4gICAqICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXG4gICAqICAgICAgICAgICAgIShwcm9wVmFsdWUgaW5zdGFuY2VvZiBVUkkpKSB7XG4gICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcbiAgICogICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAqICAgICAgICAgICk7XG4gICAqICAgICAgICB9XG4gICAqICAgICAgfVxuICAgKiAgICB9LFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cbiAgICogIH0pO1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSxcbiAgICBiaWdpbnQ6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdiaWdpbnQnKSxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxuICAgIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLFxuICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxuICAgIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycpLFxuICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLFxuXG4gICAgYW55OiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpLFxuICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcbiAgICBlbGVtZW50VHlwZTogY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpLFxuICAgIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcbiAgICBvYmplY3RPZjogY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcixcbiAgICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcbiAgICBzaGFwZTogY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcixcbiAgICBleGFjdDogY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcixcbiAgfTtcblxuICAvKipcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAgICovXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cbiAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgICB9XG4gIH1cbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXG5cbiAgLyoqXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcbiAgICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4gSG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJlYWxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XG4gICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9yZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSwgZGF0YSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5kYXRhID0gZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhOiB7fTtcbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cbiAgLy8gTWFrZSBgaW5zdGFuY2VvZiBFcnJvcmAgc3RpbGwgd29yayBmb3IgcmV0dXJuZWQgZXJyb3JzLlxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcblxuICBmdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUgPSB7fTtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA9IDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrVHlwZShpc1JlcXVpcmVkLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuXG4gICAgICBpZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAgICAgICAgIC8vIE5ldyBiZWhhdmlvciBvbmx5IGZvciB1c2VycyBvZiBgcHJvcC10eXBlc2AgcGFja2FnZVxuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAnVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgLy8gT2xkIGJlaGF2aW9yIGZvciBwZW9wbGUgdXNpbmcgUmVhY3QuUHJvcFR5cGVzXG4gICAgICAgICAgdmFyIGNhY2hlS2V5ID0gY29tcG9uZW50TmFtZSArICc6JyArIHByb3BOYW1lO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gJiZcbiAgICAgICAgICAgIC8vIEF2b2lkIHNwYW1taW5nIHRoZSBjb25zb2xlIGJlY2F1c2UgdGhleSBhcmUgb2Z0ZW4gbm90IGFjdGlvbmFibGUgZXhjZXB0IGZvciBsaWIgYXV0aG9yc1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcbiAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBwcm9wIG9uIGAnICsgY29tcG9uZW50TmFtZSArICdgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgJyArXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAgICdZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVlIHRvIGEgdGhpcmQtcGFydHkgUHJvcFR5cGVzICcgK1xuICAgICAgICAgICAgICAnbGlicmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzICcgKyAnZm9yIGRldGFpbHMuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSA9IHRydWU7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGB1bmRlZmluZWRgLicpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGFpbmVkQ2hlY2tUeXBlID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgZmFsc2UpO1xuICAgIGNoYWluZWRDaGVja1R5cGUuaXNSZXF1aXJlZCA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIHRydWUpO1xuXG4gICAgcmV0dXJuIGNoYWluZWRDaGVja1R5cGU7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcihleHBlY3RlZFR5cGUpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09IGV4cGVjdGVkVHlwZSkge1xuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcbiAgICAgICAgLy8gY2hlY2ssIGJ1dCB3ZSBjYW4gb2ZmZXIgYSBtb3JlIHByZWNpc2UgZXJyb3IgbWVzc2FnZSBoZXJlIHJhdGhlciB0aGFuXG4gICAgICAgIC8vICdvZiB0eXBlIGBvYmplY3RgJy5cbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcmVjaXNlVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnYCcgKyBleHBlY3RlZFR5cGUgKyAnYC4nKSxcbiAgICAgICAgICB7ZXhwZWN0ZWRUeXBlOiBleHBlY3RlZFR5cGV9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcihlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghUmVhY3RJcy5pc1ZhbGlkRWxlbWVudFR5cGUocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQgdHlwZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBhY3R1YWxDbGFzc05hbWUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2luc3RhbmNlIG9mIGAnICsgZXhwZWN0ZWRDbGFzc05hbWUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50cyBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXksIGdvdCAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgYXJndW1lbnRzLiAnICtcbiAgICAgICAgICAgICdBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHdyaXRlIG9uZU9mKHgsIHksIHopIGluc3RlYWQgb2Ygb25lT2YoW3gsIHksIHpdKS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShleHBlY3RlZFZhbHVlcywgZnVuY3Rpb24gcmVwbGFjZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgU3RyaW5nKHByb3BWYWx1ZSkgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgb25lIG9mICcgKyB2YWx1ZXNTdHJpbmcgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wVmFsdWUpIHtcbiAgICAgICAgaWYgKGhhcyhwcm9wVmFsdWUsIGtleSkpIHtcbiAgICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwO1xuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZS4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgY2hlY2sgZnVuY3Rpb25zLCBidXQgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkICcgKyBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcoY2hlY2tlcikgKyAnIGF0IGluZGV4ICcgKyBpICsgJy4nXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIGV4cGVjdGVkVHlwZXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICAgIHZhciBjaGVja2VyUmVzdWx0ID0gY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGNoZWNrZXJSZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja2VyUmVzdWx0LmRhdGEgJiYgaGFzKGNoZWNrZXJSZXN1bHQuZGF0YSwgJ2V4cGVjdGVkVHlwZScpKSB7XG4gICAgICAgICAgZXhwZWN0ZWRUeXBlcy5wdXNoKGNoZWNrZXJSZXN1bHQuZGF0YS5leHBlY3RlZFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgZXhwZWN0ZWRUeXBlc01lc3NhZ2UgPSAoZXhwZWN0ZWRUeXBlcy5sZW5ndGggPiAwKSA/ICcsIGV4cGVjdGVkIG9uZSBvZiB0eXBlIFsnICsgZXhwZWN0ZWRUeXBlcy5qb2luKCcsICcpICsgJ10nOiAnJztcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AnICsgZXhwZWN0ZWRUeXBlc01lc3NhZ2UgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGludmFsaWRWYWxpZGF0b3JFcnJvcihjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBrZXksIHR5cGUpIHtcbiAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHByb3BGdWxsTmFtZSArICcuJyArIGtleSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZSArICdgLidcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsaWRhdG9yRXJyb3IoY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwga2V5LCBnZXRQcmVjaXNlVHlwZShjaGVja2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBhbGwga2V5cyBpbiBjYXNlIHNvbWUgYXJlIHJlcXVpcmVkIGJ1dCBtaXNzaW5nIGZyb20gcHJvcHMuXG4gICAgICB2YXIgYWxsS2V5cyA9IGFzc2lnbih7fSwgcHJvcHNbcHJvcE5hbWVdLCBzaGFwZVR5cGVzKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoaGFzKHNoYXBlVHlwZXMsIGtleSkgJiYgdHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZFZhbGlkYXRvckVycm9yKGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIGtleSwgZ2V0UHJlY2lzZVR5cGUoY2hlY2tlcikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAgICdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBrZXkgYCcgKyBrZXkgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nICtcbiAgICAgICAgICAgICdcXG5CYWQgb2JqZWN0OiAnICsgSlNPTi5zdHJpbmdpZnkocHJvcHNbcHJvcE5hbWVdLCBudWxsLCAnICAnKSArXG4gICAgICAgICAgICAnXFxuVmFsaWQga2V5czogJyArIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHNoYXBlVHlwZXMpLCBudWxsLCAnICAnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc05vZGUocHJvcFZhbHVlKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgcHJvcFZhbHVlKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAhcHJvcFZhbHVlO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBwcm9wVmFsdWUuZXZlcnkoaXNOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcFZhbHVlID09PSBudWxsIHx8IGlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihwcm9wVmFsdWUpO1xuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChwcm9wVmFsdWUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICBpZiAoIWlzTm9kZShzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJdGVyYXRvciB3aWxsIHByb3ZpZGUgZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFuIHZhbHVlcy5cbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05vZGUoZW50cnlbMV0pKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcbiAgICAvLyBOYXRpdmUgU3ltYm9sLlxuICAgIGlmIChwcm9wVHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGZhbHN5IHZhbHVlIGNhbid0IGJlIGEgU3ltYm9sXG4gICAgaWYgKCFwcm9wVmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddID09PSAnU3ltYm9sJ1xuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIGZvciBub24tc3BlYyBjb21wbGlhbnQgU3ltYm9scyB3aGljaCBhcmUgcG9seWZpbGxlZC5cbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wVmFsdWUgaW5zdGFuY2VvZiBTeW1ib2wpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cbiAgZnVuY3Rpb24gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKSB7XG4gICAgdmFyIHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgLy8gT2xkIHdlYmtpdHMgKGF0IGxlYXN0IHVudGlsIEFuZHJvaWQgNC4wKSByZXR1cm4gJ2Z1bmN0aW9uJyByYXRoZXIgdGhhblxuICAgICAgLy8gJ29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBzbyB0aGF0IC9ibGEvXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cbiAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ3N5bWJvbCc7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cbiAgLy8gU2VlIGBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcmAuXG4gIGZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJyArIHByb3BWYWx1ZTtcbiAgICB9XG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICBpZiAocHJvcFR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gJ2RhdGUnO1xuICAgICAgfSBlbHNlIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmV0dXJuICdyZWdleHAnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcG9zdGZpeGVkIHRvIGEgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIHR5cGUuXG4gIC8vIEZvciBleGFtcGxlLCBcInVuZGVmaW5lZFwiIG9yIFwib2YgdHlwZSBhcnJheVwiXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuICdhbiAnICsgdHlwZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICBjYXNlICdyZWdleHAnOlxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxuICBmdW5jdGlvbiBnZXRDbGFzc05hbWUocHJvcFZhbHVlKSB7XG4gICAgaWYgKCFwcm9wVmFsdWUuY29uc3RydWN0b3IgfHwgIXByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKSB7XG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cblxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGNoZWNrUHJvcFR5cGVzO1xuICBSZWFjdFByb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlO1xuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cblxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIDogMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJykgOiAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50JykgOiAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJykgOiAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJykgOiAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJykgOiAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpIDogMHhlYWNlOyAvLyBUT0RPOiBXZSBkb24ndCB1c2UgQXN5bmNNb2RlIG9yIENvbmN1cnJlbnRNb2RlIGFueW1vcmUuIFRoZXkgd2VyZSB0ZW1wb3Jhcnlcbi8vICh1bnN0YWJsZSkgQVBJcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkLiBDYW4gd2UgcmVtb3ZlIHRoZSBzeW1ib2xzP1xuXG52YXIgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYXN5bmNfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29uY3VycmVudF9tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJykgOiAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJykgOiAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpIDogMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKSA6IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5JykgOiAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmJsb2NrJykgOiAweGVhZDk7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJykgOiAweGVhZDU7XG52YXIgUkVBQ1RfUkVTUE9OREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5yZXNwb25kZXInKSA6IDB4ZWFkNjtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc2NvcGUnKSA6IDB4ZWFkNztcblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCAvLyBOb3RlOiBpdHMgdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgaWYgaXQncyBhIHBvbHlmaWxsLlxuICB0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUkVTUE9OREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfU0NPUEVfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFKTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuXG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB2YXIgJCR0eXBlb2ZUeXBlID0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKCQkdHlwZW9mVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59IC8vIEFzeW5jTW9kZSBpcyBkZXByZWNhdGVkIGFsb25nIHdpdGggaXNBc3luY01vZGVcblxudmFyIEFzeW5jTW9kZSA9IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbnZhciBDb25jdXJyZW50TW9kZSA9IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xudmFyIENvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlRFWFRfVFlQRTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSBSRUFDVF9QUk9WSURFUl9UWVBFO1xudmFyIEVsZW1lbnQgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG52YXIgRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG52YXIgRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xudmFyIExhenkgPSBSRUFDVF9MQVpZX1RZUEU7XG52YXIgTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbnZhciBQb3J0YWwgPSBSRUFDVF9QT1JUQUxfVFlQRTtcbnZhciBQcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG52YXIgU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG52YXIgU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7IC8vIEFzeW5jTW9kZSBzaG91bGQgYmUgZGVwcmVjYXRlZFxuXG5mdW5jdGlvbiBpc0FzeW5jTW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxNysuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSS4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHx8IHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0Q29uc3VtZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRm9yd2FyZFJlZihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xufVxuZnVuY3Rpb24gaXNGcmFnbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNMYXp5KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0xBWllfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTWVtbyhvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9NRU1PX1RZUEU7XG59XG5mdW5jdGlvbiBpc1BvcnRhbChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QT1JUQUxfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUHJvZmlsZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3RyaWN0TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xufVxuXG5leHBvcnRzLkFzeW5jTW9kZSA9IEFzeW5jTW9kZTtcbmV4cG9ydHMuQ29uY3VycmVudE1vZGUgPSBDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGlzQXN5bmNNb2RlO1xuZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlID0gaXNDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBpc0NvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBpc0NvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBpc0ZvcndhcmRSZWY7XG5leHBvcnRzLmlzRnJhZ21lbnQgPSBpc0ZyYWdtZW50O1xuZXhwb3J0cy5pc0xhenkgPSBpc0xhenk7XG5leHBvcnRzLmlzTWVtbyA9IGlzTWVtbztcbmV4cG9ydHMuaXNQb3J0YWwgPSBpc1BvcnRhbDtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGlzUHJvZmlsZXI7XG5leHBvcnRzLmlzU3RyaWN0TW9kZSA9IGlzU3RyaWN0TW9kZTtcbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGlzU3VzcGVuc2U7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZTtcbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuICB9KSgpO1xufVxuIiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xMy4xXG4gKiByZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0Jzt2YXIgYj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLGM9Yj9TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKTo2MDEwMyxkPWI/U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKTo2MDEwNixlPWI/U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpOjYwMTA3LGY9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIik6NjAxMDgsZz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTo2MDExNCxoPWI/U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpOjYwMTA5LGs9Yj9TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKTo2MDExMCxsPWI/U3ltYm9sLmZvcihcInJlYWN0LmFzeW5jX21vZGVcIik6NjAxMTEsbT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5jb25jdXJyZW50X21vZGVcIik6NjAxMTEsbj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTo2MDExMixwPWI/U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpOjYwMTEzLHE9Yj9cblN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpOjYwMTIwLHI9Yj9TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKTo2MDExNSx0PWI/U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIik6NjAxMTYsdj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5ibG9ja1wiKTo2MDEyMSx3PWI/U3ltYm9sLmZvcihcInJlYWN0LmZ1bmRhbWVudGFsXCIpOjYwMTE3LHg9Yj9TeW1ib2wuZm9yKFwicmVhY3QucmVzcG9uZGVyXCIpOjYwMTE4LHk9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc2NvcGVcIik6NjAxMTk7XG5mdW5jdGlvbiB6KGEpe2lmKFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEpe3ZhciB1PWEuJCR0eXBlb2Y7c3dpdGNoKHUpe2Nhc2UgYzpzd2l0Y2goYT1hLnR5cGUsYSl7Y2FzZSBsOmNhc2UgbTpjYXNlIGU6Y2FzZSBnOmNhc2UgZjpjYXNlIHA6cmV0dXJuIGE7ZGVmYXVsdDpzd2l0Y2goYT1hJiZhLiQkdHlwZW9mLGEpe2Nhc2UgazpjYXNlIG46Y2FzZSB0OmNhc2UgcjpjYXNlIGg6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gdX19Y2FzZSBkOnJldHVybiB1fX19ZnVuY3Rpb24gQShhKXtyZXR1cm4geihhKT09PW19ZXhwb3J0cy5Bc3luY01vZGU9bDtleHBvcnRzLkNvbmN1cnJlbnRNb2RlPW07ZXhwb3J0cy5Db250ZXh0Q29uc3VtZXI9aztleHBvcnRzLkNvbnRleHRQcm92aWRlcj1oO2V4cG9ydHMuRWxlbWVudD1jO2V4cG9ydHMuRm9yd2FyZFJlZj1uO2V4cG9ydHMuRnJhZ21lbnQ9ZTtleHBvcnRzLkxhenk9dDtleHBvcnRzLk1lbW89cjtleHBvcnRzLlBvcnRhbD1kO1xuZXhwb3J0cy5Qcm9maWxlcj1nO2V4cG9ydHMuU3RyaWN0TW9kZT1mO2V4cG9ydHMuU3VzcGVuc2U9cDtleHBvcnRzLmlzQXN5bmNNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiBBKGEpfHx6KGEpPT09bH07ZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlPUE7ZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lcj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWt9O2V4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1ofTtleHBvcnRzLmlzRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09Y307ZXhwb3J0cy5pc0ZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1ufTtleHBvcnRzLmlzRnJhZ21lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1lfTtleHBvcnRzLmlzTGF6eT1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PXR9O1xuZXhwb3J0cy5pc01lbW89ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1yfTtleHBvcnRzLmlzUG9ydGFsPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09ZH07ZXhwb3J0cy5pc1Byb2ZpbGVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09Z307ZXhwb3J0cy5pc1N0cmljdE1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1mfTtleHBvcnRzLmlzU3VzcGVuc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1wfTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlPWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PT10eXBlb2YgYXx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGF8fGE9PT1lfHxhPT09bXx8YT09PWd8fGE9PT1mfHxhPT09cHx8YT09PXF8fFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJihhLiQkdHlwZW9mPT09dHx8YS4kJHR5cGVvZj09PXJ8fGEuJCR0eXBlb2Y9PT1ofHxhLiQkdHlwZW9mPT09a3x8YS4kJHR5cGVvZj09PW58fGEuJCR0eXBlb2Y9PT13fHxhLiQkdHlwZW9mPT09eHx8YS4kJHR5cGVvZj09PXl8fGEuJCR0eXBlb2Y9PT12KX07ZXhwb3J0cy50eXBlT2Y9ejtcbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiLyoqXG4gKiBTd2lwZXIgNS4zLjFcbiAqIE1vc3QgbW9kZXJuIG1vYmlsZSB0b3VjaCBzbGlkZXIgYW5kIGZyYW1ld29yayB3aXRoIGhhcmR3YXJlIGFjY2VsZXJhdGVkIHRyYW5zaXRpb25zXG4gKiBodHRwOi8vc3dpcGVyanMuY29tXG4gKlxuICogQ29weXJpZ2h0IDIwMTQtMjAyMCBWbGFkaW1pciBLaGFybGFtcGlkaVxuICpcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZVxuICpcbiAqIFJlbGVhc2VkIG9uOiBGZWJydWFyeSA4LCAyMDIwXG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5Td2lwZXIgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCBmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogU1NSIFdpbmRvdyAxLjAuMVxuICAgKiBCZXR0ZXIgaGFuZGxpbmcgZm9yIHdpbmRvdyBvYmplY3QgaW4gU1NSIGVudmlyb25tZW50XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2xpbWl0czR3ZWIvc3NyLXdpbmRvd1xuICAgKlxuICAgKiBDb3B5cmlnaHQgMjAxOCwgVmxhZGltaXIgS2hhcmxhbXBpZGlcbiAgICpcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUXG4gICAqXG4gICAqIFJlbGVhc2VkIG9uOiBKdWx5IDE4LCAyMDE4XG4gICAqL1xuICB2YXIgZG9jID0gKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpID8ge1xuICAgIGJvZHk6IHt9LFxuICAgIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIoKSB7fSxcbiAgICByZW1vdmVFdmVudExpc3RlbmVyOiBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKCkge30sXG4gICAgYWN0aXZlRWxlbWVudDoge1xuICAgICAgYmx1cjogZnVuY3Rpb24gYmx1cigpIHt9LFxuICAgICAgbm9kZU5hbWU6ICcnLFxuICAgIH0sXG4gICAgcXVlcnlTZWxlY3RvcjogZnVuY3Rpb24gcXVlcnlTZWxlY3RvcigpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcXVlcnlTZWxlY3RvckFsbDogZnVuY3Rpb24gcXVlcnlTZWxlY3RvckFsbCgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9LFxuICAgIGdldEVsZW1lbnRCeUlkOiBmdW5jdGlvbiBnZXRFbGVtZW50QnlJZCgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgY3JlYXRlRXZlbnQ6IGZ1bmN0aW9uIGNyZWF0ZUV2ZW50KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5pdEV2ZW50OiBmdW5jdGlvbiBpbml0RXZlbnQoKSB7fSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBjcmVhdGVFbGVtZW50OiBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICBjaGlsZE5vZGVzOiBbXSxcbiAgICAgICAgc3R5bGU6IHt9LFxuICAgICAgICBzZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uIHNldEF0dHJpYnV0ZSgpIHt9LFxuICAgICAgICBnZXRFbGVtZW50c0J5VGFnTmFtZTogZnVuY3Rpb24gZ2V0RWxlbWVudHNCeVRhZ05hbWUoKSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9LFxuICAgIGxvY2F0aW9uOiB7IGhhc2g6ICcnIH0sXG4gIH0gOiBkb2N1bWVudDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIHZhciB3aW4gPSAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpID8ge1xuICAgIGRvY3VtZW50OiBkb2MsXG4gICAgbmF2aWdhdG9yOiB7XG4gICAgICB1c2VyQWdlbnQ6ICcnLFxuICAgIH0sXG4gICAgbG9jYXRpb246IHt9LFxuICAgIGhpc3Rvcnk6IHt9LFxuICAgIEN1c3RvbUV2ZW50OiBmdW5jdGlvbiBDdXN0b21FdmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgYWRkRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcigpIHt9LFxuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIoKSB7fSxcbiAgICBnZXRDb21wdXRlZFN0eWxlOiBmdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0UHJvcGVydHlWYWx1ZTogZnVuY3Rpb24gZ2V0UHJvcGVydHlWYWx1ZSgpIHtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0sXG4gICAgSW1hZ2U6IGZ1bmN0aW9uIEltYWdlKCkge30sXG4gICAgRGF0ZTogZnVuY3Rpb24gRGF0ZSgpIHt9LFxuICAgIHNjcmVlbjoge30sXG4gICAgc2V0VGltZW91dDogZnVuY3Rpb24gc2V0VGltZW91dCgpIHt9LFxuICAgIGNsZWFyVGltZW91dDogZnVuY3Rpb24gY2xlYXJUaW1lb3V0KCkge30sXG4gIH0gOiB3aW5kb3c7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAvKipcbiAgICogRG9tNyAyLjEuM1xuICAgKiBNaW5pbWFsaXN0aWMgSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciBET00gbWFuaXB1bGF0aW9uLCB3aXRoIGEgalF1ZXJ5LWNvbXBhdGlibGUgQVBJXG4gICAqIGh0dHA6Ly9mcmFtZXdvcms3LmlvL2RvY3MvZG9tLmh0bWxcbiAgICpcbiAgICogQ29weXJpZ2h0IDIwMTksIFZsYWRpbWlyIEtoYXJsYW1waWRpXG4gICAqIFRoZSBpRGFuZ2Vyby51c1xuICAgKiBodHRwOi8vd3d3LmlkYW5nZXJvLnVzL1xuICAgKlxuICAgKiBMaWNlbnNlZCB1bmRlciBNSVRcbiAgICpcbiAgICogUmVsZWFzZWQgb246IEZlYnJ1YXJ5IDExLCAyMDE5XG4gICAqL1xuXG4gIHZhciBEb203ID0gZnVuY3Rpb24gRG9tNyhhcnIpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgLy8gQ3JlYXRlIGFycmF5LWxpa2Ugb2JqZWN0XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHNlbGZbaV0gPSBhcnJbaV07XG4gICAgfVxuICAgIHNlbGYubGVuZ3RoID0gYXJyLmxlbmd0aDtcbiAgICAvLyBSZXR1cm4gY29sbGVjdGlvbiB3aXRoIG1ldGhvZHNcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBmdW5jdGlvbiAkKHNlbGVjdG9yLCBjb250ZXh0KSB7XG4gICAgdmFyIGFyciA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICBpZiAoc2VsZWN0b3IgJiYgIWNvbnRleHQpIHtcbiAgICAgIGlmIChzZWxlY3RvciBpbnN0YW5jZW9mIERvbTcpIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgLy8gU3RyaW5nXG4gICAgICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgZWxzO1xuICAgICAgICB2YXIgdGVtcFBhcmVudDtcbiAgICAgICAgdmFyIGh0bWwgPSBzZWxlY3Rvci50cmltKCk7XG4gICAgICAgIGlmIChodG1sLmluZGV4T2YoJzwnKSA+PSAwICYmIGh0bWwuaW5kZXhPZignPicpID49IDApIHtcbiAgICAgICAgICB2YXIgdG9DcmVhdGUgPSAnZGl2JztcbiAgICAgICAgICBpZiAoaHRtbC5pbmRleE9mKCc8bGknKSA9PT0gMCkgeyB0b0NyZWF0ZSA9ICd1bCc7IH1cbiAgICAgICAgICBpZiAoaHRtbC5pbmRleE9mKCc8dHInKSA9PT0gMCkgeyB0b0NyZWF0ZSA9ICd0Ym9keSc7IH1cbiAgICAgICAgICBpZiAoaHRtbC5pbmRleE9mKCc8dGQnKSA9PT0gMCB8fCBodG1sLmluZGV4T2YoJzx0aCcpID09PSAwKSB7IHRvQ3JlYXRlID0gJ3RyJzsgfVxuICAgICAgICAgIGlmIChodG1sLmluZGV4T2YoJzx0Ym9keScpID09PSAwKSB7IHRvQ3JlYXRlID0gJ3RhYmxlJzsgfVxuICAgICAgICAgIGlmIChodG1sLmluZGV4T2YoJzxvcHRpb24nKSA9PT0gMCkgeyB0b0NyZWF0ZSA9ICdzZWxlY3QnOyB9XG4gICAgICAgICAgdGVtcFBhcmVudCA9IGRvYy5jcmVhdGVFbGVtZW50KHRvQ3JlYXRlKTtcbiAgICAgICAgICB0ZW1wUGFyZW50LmlubmVySFRNTCA9IGh0bWw7XG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRlbXBQYXJlbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgYXJyLnB1c2godGVtcFBhcmVudC5jaGlsZE5vZGVzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFjb250ZXh0ICYmIHNlbGVjdG9yWzBdID09PSAnIycgJiYgIXNlbGVjdG9yLm1hdGNoKC9bIC48Pjp+XS8pKSB7XG4gICAgICAgICAgICAvLyBQdXJlIElEIHNlbGVjdG9yXG4gICAgICAgICAgICBlbHMgPSBbZG9jLmdldEVsZW1lbnRCeUlkKHNlbGVjdG9yLnRyaW0oKS5zcGxpdCgnIycpWzFdKV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE90aGVyIHNlbGVjdG9yc1xuICAgICAgICAgICAgZWxzID0gKGNvbnRleHQgfHwgZG9jKS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yLnRyaW0oKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGlmIChlbHNbaV0pIHsgYXJyLnB1c2goZWxzW2ldKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvci5ub2RlVHlwZSB8fCBzZWxlY3RvciA9PT0gd2luIHx8IHNlbGVjdG9yID09PSBkb2MpIHtcbiAgICAgICAgLy8gTm9kZS9lbGVtZW50XG4gICAgICAgIGFyci5wdXNoKHNlbGVjdG9yKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IubGVuZ3RoID4gMCAmJiBzZWxlY3RvclswXS5ub2RlVHlwZSkge1xuICAgICAgICAvLyBBcnJheSBvZiBlbGVtZW50cyBvciBpbnN0YW5jZSBvZiBEb21cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHNlbGVjdG9yLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgYXJyLnB1c2goc2VsZWN0b3JbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgRG9tNyhhcnIpO1xuICB9XG5cbiAgJC5mbiA9IERvbTcucHJvdG90eXBlO1xuICAkLkNsYXNzID0gRG9tNztcbiAgJC5Eb203ID0gRG9tNztcblxuICBmdW5jdGlvbiB1bmlxdWUoYXJyKSB7XG4gICAgdmFyIHVuaXF1ZUFycmF5ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICh1bmlxdWVBcnJheS5pbmRleE9mKGFycltpXSkgPT09IC0xKSB7IHVuaXF1ZUFycmF5LnB1c2goYXJyW2ldKTsgfVxuICAgIH1cbiAgICByZXR1cm4gdW5pcXVlQXJyYXk7XG4gIH1cblxuICAvLyBDbGFzc2VzIGFuZCBhdHRyaWJ1dGVzXG4gIGZ1bmN0aW9uIGFkZENsYXNzKGNsYXNzTmFtZSkge1xuICAgIGlmICh0eXBlb2YgY2xhc3NOYW1lID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lLnNwbGl0KCcgJyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzW2pdICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgdGhpc1tqXS5jbGFzc0xpc3QgIT09ICd1bmRlZmluZWQnKSB7IHRoaXNbal0uY2xhc3NMaXN0LmFkZChjbGFzc2VzW2ldKTsgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVDbGFzcyhjbGFzc05hbWUpIHtcbiAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZS5zcGxpdCgnICcpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpc1tqXSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHRoaXNbal0uY2xhc3NMaXN0ICE9PSAndW5kZWZpbmVkJykgeyB0aGlzW2pdLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3Nlc1tpXSk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZnVuY3Rpb24gaGFzQ2xhc3MoY2xhc3NOYW1lKSB7XG4gICAgaWYgKCF0aGlzWzBdKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIHJldHVybiB0aGlzWzBdLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xuICB9XG4gIGZ1bmN0aW9uIHRvZ2dsZUNsYXNzKGNsYXNzTmFtZSkge1xuICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lLnNwbGl0KCcgJyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzW2pdICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgdGhpc1tqXS5jbGFzc0xpc3QgIT09ICd1bmRlZmluZWQnKSB7IHRoaXNbal0uY2xhc3NMaXN0LnRvZ2dsZShjbGFzc2VzW2ldKTsgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBmdW5jdGlvbiBhdHRyKGF0dHJzLCB2YWx1ZSkge1xuICAgIHZhciBhcmd1bWVudHMkMSA9IGFyZ3VtZW50cztcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhdHRycyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIEdldCBhdHRyXG4gICAgICBpZiAodGhpc1swXSkgeyByZXR1cm4gdGhpc1swXS5nZXRBdHRyaWJ1dGUoYXR0cnMpOyB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFNldCBhdHRyc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKGFyZ3VtZW50cyQxLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBTdHJpbmdcbiAgICAgICAgdGhpc1tpXS5zZXRBdHRyaWJ1dGUoYXR0cnMsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE9iamVjdFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgZm9yICh2YXIgYXR0ck5hbWUgaW4gYXR0cnMpIHtcbiAgICAgICAgICB0aGlzW2ldW2F0dHJOYW1lXSA9IGF0dHJzW2F0dHJOYW1lXTtcbiAgICAgICAgICB0aGlzW2ldLnNldEF0dHJpYnV0ZShhdHRyTmFtZSwgYXR0cnNbYXR0ck5hbWVdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgZnVuY3Rpb24gcmVtb3ZlQXR0cihhdHRyKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB0aGlzW2ldLnJlbW92ZUF0dHJpYnV0ZShhdHRyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZnVuY3Rpb24gZGF0YShrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVsO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBlbCA9IHRoaXNbMF07XG4gICAgICAvLyBHZXQgdmFsdWVcbiAgICAgIGlmIChlbCkge1xuICAgICAgICBpZiAoZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZSAmJiAoa2V5IGluIGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2UpKSB7XG4gICAgICAgICAgcmV0dXJuIGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2Vba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkYXRhS2V5ID0gZWwuZ2V0QXR0cmlidXRlKChcImRhdGEtXCIgKyBrZXkpKTtcbiAgICAgICAgaWYgKGRhdGFLZXkpIHtcbiAgICAgICAgICByZXR1cm4gZGF0YUtleTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBTZXQgdmFsdWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGVsID0gdGhpc1tpXTtcbiAgICAgIGlmICghZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZSkgeyBlbC5kb203RWxlbWVudERhdGFTdG9yYWdlID0ge307IH1cbiAgICAgIGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2Vba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvLyBUcmFuc2Zvcm1zXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBmdW5jdGlvbiB0cmFuc2Zvcm0odHJhbnNmb3JtKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2YXIgZWxTdHlsZSA9IHRoaXNbaV0uc3R5bGU7XG4gICAgICBlbFN0eWxlLndlYmtpdFRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgICAgIGVsU3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBmdW5jdGlvbiB0cmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgaWYgKHR5cGVvZiBkdXJhdGlvbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGR1cmF0aW9uID0gZHVyYXRpb24gKyBcIm1zXCI7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2YXIgZWxTdHlsZSA9IHRoaXNbaV0uc3R5bGU7XG4gICAgICBlbFN0eWxlLndlYmtpdFRyYW5zaXRpb25EdXJhdGlvbiA9IGR1cmF0aW9uO1xuICAgICAgZWxTdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLy8gRXZlbnRzXG4gIGZ1bmN0aW9uIG9uKCkge1xuICAgIHZhciBhc3NpZ247XG5cbiAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG4gICAgdmFyIGV2ZW50VHlwZSA9IGFyZ3NbMF07XG4gICAgdmFyIHRhcmdldFNlbGVjdG9yID0gYXJnc1sxXTtcbiAgICB2YXIgbGlzdGVuZXIgPSBhcmdzWzJdO1xuICAgIHZhciBjYXB0dXJlID0gYXJnc1szXTtcbiAgICBpZiAodHlwZW9mIGFyZ3NbMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIChhc3NpZ24gPSBhcmdzLCBldmVudFR5cGUgPSBhc3NpZ25bMF0sIGxpc3RlbmVyID0gYXNzaWduWzFdLCBjYXB0dXJlID0gYXNzaWduWzJdKTtcbiAgICAgIHRhcmdldFNlbGVjdG9yID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoIWNhcHR1cmUpIHsgY2FwdHVyZSA9IGZhbHNlOyB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVMaXZlRXZlbnQoZSkge1xuICAgICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0O1xuICAgICAgaWYgKCF0YXJnZXQpIHsgcmV0dXJuOyB9XG4gICAgICB2YXIgZXZlbnREYXRhID0gZS50YXJnZXQuZG9tN0V2ZW50RGF0YSB8fCBbXTtcbiAgICAgIGlmIChldmVudERhdGEuaW5kZXhPZihlKSA8IDApIHtcbiAgICAgICAgZXZlbnREYXRhLnVuc2hpZnQoZSk7XG4gICAgICB9XG4gICAgICBpZiAoJCh0YXJnZXQpLmlzKHRhcmdldFNlbGVjdG9yKSkgeyBsaXN0ZW5lci5hcHBseSh0YXJnZXQsIGV2ZW50RGF0YSk7IH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgcGFyZW50cyA9ICQodGFyZ2V0KS5wYXJlbnRzKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBwYXJlbnRzLmxlbmd0aDsgayArPSAxKSB7XG4gICAgICAgICAgaWYgKCQocGFyZW50c1trXSkuaXModGFyZ2V0U2VsZWN0b3IpKSB7IGxpc3RlbmVyLmFwcGx5KHBhcmVudHNba10sIGV2ZW50RGF0YSk7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVFdmVudChlKSB7XG4gICAgICB2YXIgZXZlbnREYXRhID0gZSAmJiBlLnRhcmdldCA/IGUudGFyZ2V0LmRvbTdFdmVudERhdGEgfHwgW10gOiBbXTtcbiAgICAgIGlmIChldmVudERhdGEuaW5kZXhPZihlKSA8IDApIHtcbiAgICAgICAgZXZlbnREYXRhLnVuc2hpZnQoZSk7XG4gICAgICB9XG4gICAgICBsaXN0ZW5lci5hcHBseSh0aGlzLCBldmVudERhdGEpO1xuICAgIH1cbiAgICB2YXIgZXZlbnRzID0gZXZlbnRUeXBlLnNwbGl0KCcgJyk7XG4gICAgdmFyIGo7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzW2ldO1xuICAgICAgaWYgKCF0YXJnZXRTZWxlY3Rvcikge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgZXZlbnRzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgICAgdmFyIGV2ZW50ID0gZXZlbnRzW2pdO1xuICAgICAgICAgIGlmICghZWwuZG9tN0xpc3RlbmVycykgeyBlbC5kb203TGlzdGVuZXJzID0ge307IH1cbiAgICAgICAgICBpZiAoIWVsLmRvbTdMaXN0ZW5lcnNbZXZlbnRdKSB7IGVsLmRvbTdMaXN0ZW5lcnNbZXZlbnRdID0gW107IH1cbiAgICAgICAgICBlbC5kb203TGlzdGVuZXJzW2V2ZW50XS5wdXNoKHtcbiAgICAgICAgICAgIGxpc3RlbmVyOiBsaXN0ZW5lcixcbiAgICAgICAgICAgIHByb3h5TGlzdGVuZXI6IGhhbmRsZUV2ZW50LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZUV2ZW50LCBjYXB0dXJlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTGl2ZSBldmVudHNcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGV2ZW50cy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICAgIHZhciBldmVudCQxID0gZXZlbnRzW2pdO1xuICAgICAgICAgIGlmICghZWwuZG9tN0xpdmVMaXN0ZW5lcnMpIHsgZWwuZG9tN0xpdmVMaXN0ZW5lcnMgPSB7fTsgfVxuICAgICAgICAgIGlmICghZWwuZG9tN0xpdmVMaXN0ZW5lcnNbZXZlbnQkMV0pIHsgZWwuZG9tN0xpdmVMaXN0ZW5lcnNbZXZlbnQkMV0gPSBbXTsgfVxuICAgICAgICAgIGVsLmRvbTdMaXZlTGlzdGVuZXJzW2V2ZW50JDFdLnB1c2goe1xuICAgICAgICAgICAgbGlzdGVuZXI6IGxpc3RlbmVyLFxuICAgICAgICAgICAgcHJveHlMaXN0ZW5lcjogaGFuZGxlTGl2ZUV2ZW50LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQkMSwgaGFuZGxlTGl2ZUV2ZW50LCBjYXB0dXJlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBmdW5jdGlvbiBvZmYoKSB7XG4gICAgdmFyIGFzc2lnbjtcblxuICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcbiAgICB2YXIgZXZlbnRUeXBlID0gYXJnc1swXTtcbiAgICB2YXIgdGFyZ2V0U2VsZWN0b3IgPSBhcmdzWzFdO1xuICAgIHZhciBsaXN0ZW5lciA9IGFyZ3NbMl07XG4gICAgdmFyIGNhcHR1cmUgPSBhcmdzWzNdO1xuICAgIGlmICh0eXBlb2YgYXJnc1sxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgKGFzc2lnbiA9IGFyZ3MsIGV2ZW50VHlwZSA9IGFzc2lnblswXSwgbGlzdGVuZXIgPSBhc3NpZ25bMV0sIGNhcHR1cmUgPSBhc3NpZ25bMl0pO1xuICAgICAgdGFyZ2V0U2VsZWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICghY2FwdHVyZSkgeyBjYXB0dXJlID0gZmFsc2U7IH1cblxuICAgIHZhciBldmVudHMgPSBldmVudFR5cGUuc3BsaXQoJyAnKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIGV2ZW50ID0gZXZlbnRzW2ldO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIHZhciBlbCA9IHRoaXNbal07XG4gICAgICAgIHZhciBoYW5kbGVycyA9ICh2b2lkIDApO1xuICAgICAgICBpZiAoIXRhcmdldFNlbGVjdG9yICYmIGVsLmRvbTdMaXN0ZW5lcnMpIHtcbiAgICAgICAgICBoYW5kbGVycyA9IGVsLmRvbTdMaXN0ZW5lcnNbZXZlbnRdO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldFNlbGVjdG9yICYmIGVsLmRvbTdMaXZlTGlzdGVuZXJzKSB7XG4gICAgICAgICAgaGFuZGxlcnMgPSBlbC5kb203TGl2ZUxpc3RlbmVyc1tldmVudF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhbmRsZXJzICYmIGhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgICAgIGZvciAodmFyIGsgPSBoYW5kbGVycy5sZW5ndGggLSAxOyBrID49IDA7IGsgLT0gMSkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBoYW5kbGVyc1trXTtcbiAgICAgICAgICAgIGlmIChsaXN0ZW5lciAmJiBoYW5kbGVyLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLnByb3h5TGlzdGVuZXIsIGNhcHR1cmUpO1xuICAgICAgICAgICAgICBoYW5kbGVycy5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxpc3RlbmVyICYmIGhhbmRsZXIubGlzdGVuZXIgJiYgaGFuZGxlci5saXN0ZW5lci5kb203cHJveHkgJiYgaGFuZGxlci5saXN0ZW5lci5kb203cHJveHkgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIucHJveHlMaXN0ZW5lciwgY2FwdHVyZSk7XG4gICAgICAgICAgICAgIGhhbmRsZXJzLnNwbGljZShrLCAxKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxpc3RlbmVyKSB7XG4gICAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIucHJveHlMaXN0ZW5lciwgY2FwdHVyZSk7XG4gICAgICAgICAgICAgIGhhbmRsZXJzLnNwbGljZShrLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZnVuY3Rpb24gdHJpZ2dlcigpIHtcbiAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICB2YXIgZXZlbnRzID0gYXJnc1swXS5zcGxpdCgnICcpO1xuICAgIHZhciBldmVudERhdGEgPSBhcmdzWzFdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2YXIgZXZlbnQgPSBldmVudHNbaV07XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgdmFyIGVsID0gdGhpc1tqXTtcbiAgICAgICAgdmFyIGV2dCA9ICh2b2lkIDApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGV2dCA9IG5ldyB3aW4uQ3VzdG9tRXZlbnQoZXZlbnQsIHtcbiAgICAgICAgICAgIGRldGFpbDogZXZlbnREYXRhLFxuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBldnQgPSBkb2MuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgICAgICAgZXZ0LmluaXRFdmVudChldmVudCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgZXZ0LmRldGFpbCA9IGV2ZW50RGF0YTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgZWwuZG9tN0V2ZW50RGF0YSA9IGFyZ3MuZmlsdGVyKGZ1bmN0aW9uIChkYXRhLCBkYXRhSW5kZXgpIHsgcmV0dXJuIGRhdGFJbmRleCA+IDA7IH0pO1xuICAgICAgICBlbC5kaXNwYXRjaEV2ZW50KGV2dCk7XG4gICAgICAgIGVsLmRvbTdFdmVudERhdGEgPSBbXTtcbiAgICAgICAgZGVsZXRlIGVsLmRvbTdFdmVudERhdGE7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGZ1bmN0aW9uIHRyYW5zaXRpb25FbmQoY2FsbGJhY2spIHtcbiAgICB2YXIgZXZlbnRzID0gWyd3ZWJraXRUcmFuc2l0aW9uRW5kJywgJ3RyYW5zaXRpb25lbmQnXTtcbiAgICB2YXIgZG9tID0gdGhpcztcbiAgICB2YXIgaTtcbiAgICBmdW5jdGlvbiBmaXJlQ2FsbEJhY2soZSkge1xuICAgICAgLyoganNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gICAgICBpZiAoZS50YXJnZXQgIT09IHRoaXMpIHsgcmV0dXJuOyB9XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGUpO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBkb20ub2ZmKGV2ZW50c1tpXSwgZmlyZUNhbGxCYWNrKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGRvbS5vbihldmVudHNbaV0sIGZpcmVDYWxsQmFjayk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGZ1bmN0aW9uIG91dGVyV2lkdGgoaW5jbHVkZU1hcmdpbnMpIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoaW5jbHVkZU1hcmdpbnMpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIHZhciBzdHlsZXMgPSB0aGlzLnN0eWxlcygpO1xuICAgICAgICByZXR1cm4gdGhpc1swXS5vZmZzZXRXaWR0aCArIHBhcnNlRmxvYXQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1yaWdodCcpKSArIHBhcnNlRmxvYXQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1sZWZ0JykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNbMF0ub2Zmc2V0V2lkdGg7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGZ1bmN0aW9uIG91dGVySGVpZ2h0KGluY2x1ZGVNYXJnaW5zKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKGluY2x1ZGVNYXJnaW5zKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICB2YXIgc3R5bGVzID0gdGhpcy5zdHlsZXMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXNbMF0ub2Zmc2V0SGVpZ2h0ICsgcGFyc2VGbG9hdChzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLXRvcCcpKSArIHBhcnNlRmxvYXQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1ib3R0b20nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1swXS5vZmZzZXRIZWlnaHQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGZ1bmN0aW9uIG9mZnNldCgpIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzWzBdO1xuICAgICAgdmFyIGJveCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdmFyIGJvZHkgPSBkb2MuYm9keTtcbiAgICAgIHZhciBjbGllbnRUb3AgPSBlbC5jbGllbnRUb3AgfHwgYm9keS5jbGllbnRUb3AgfHwgMDtcbiAgICAgIHZhciBjbGllbnRMZWZ0ID0gZWwuY2xpZW50TGVmdCB8fCBib2R5LmNsaWVudExlZnQgfHwgMDtcbiAgICAgIHZhciBzY3JvbGxUb3AgPSBlbCA9PT0gd2luID8gd2luLnNjcm9sbFkgOiBlbC5zY3JvbGxUb3A7XG4gICAgICB2YXIgc2Nyb2xsTGVmdCA9IGVsID09PSB3aW4gPyB3aW4uc2Nyb2xsWCA6IGVsLnNjcm9sbExlZnQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b3A6IChib3gudG9wICsgc2Nyb2xsVG9wKSAtIGNsaWVudFRvcCxcbiAgICAgICAgbGVmdDogKGJveC5sZWZ0ICsgc2Nyb2xsTGVmdCkgLSBjbGllbnRMZWZ0LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiBzdHlsZXMoKSB7XG4gICAgaWYgKHRoaXNbMF0pIHsgcmV0dXJuIHdpbi5nZXRDb21wdXRlZFN0eWxlKHRoaXNbMF0sIG51bGwpOyB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGZ1bmN0aW9uIGNzcyhwcm9wcywgdmFsdWUpIHtcbiAgICB2YXIgaTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHRoaXNbMF0pIHsgcmV0dXJuIHdpbi5nZXRDb21wdXRlZFN0eWxlKHRoaXNbMF0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUocHJvcHMpOyB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gcHJvcHMpIHtcbiAgICAgICAgICAgIHRoaXNbaV0uc3R5bGVbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyICYmIHR5cGVvZiBwcm9wcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHRoaXNbaV0uc3R5bGVbcHJvcHNdID0gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBjb2xsZWN0aW9uIHBhc3NpbmcgZWxlbWVudHMgdG8gYGNhbGxiYWNrYFxuICBmdW5jdGlvbiBlYWNoKGNhbGxiYWNrKSB7XG4gICAgLy8gRG9uJ3QgYm90aGVyIGNvbnRpbnVpbmcgd2l0aG91dCBhIGNhbGxiYWNrXG4gICAgaWYgKCFjYWxsYmFjaykgeyByZXR1cm4gdGhpczsgfVxuICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgY3VycmVudCBjb2xsZWN0aW9uXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAvLyBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICAgICAgaWYgKGNhbGxiYWNrLmNhbGwodGhpc1tpXSwgaSwgdGhpc1tpXSkgPT09IGZhbHNlKSB7XG4gICAgICAgIC8vIEVuZCB0aGUgbG9vcCBlYXJseVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUmV0dXJuIGB0aGlzYCB0byBhbGxvdyBjaGFpbmVkIERPTSBvcGVyYXRpb25zXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrKSB7XG4gICAgdmFyIG1hdGNoZWRJdGVtcyA9IFtdO1xuICAgIHZhciBkb20gPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9tLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAoY2FsbGJhY2suY2FsbChkb21baV0sIGksIGRvbVtpXSkpIHsgbWF0Y2hlZEl0ZW1zLnB1c2goZG9tW2ldKTsgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IERvbTcobWF0Y2hlZEl0ZW1zKTtcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgZnVuY3Rpb24gaHRtbChodG1sKSB7XG4gICAgaWYgKHR5cGVvZiBodG1sID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRoaXNbMF0gPyB0aGlzWzBdLmlubmVySFRNTCA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHRoaXNbaV0uaW5uZXJIVE1MID0gaHRtbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIGZ1bmN0aW9uIHRleHQodGV4dCkge1xuICAgIGlmICh0eXBlb2YgdGV4dCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0aGlzWzBdKSB7XG4gICAgICAgIHJldHVybiB0aGlzWzBdLnRleHRDb250ZW50LnRyaW0oKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdGhpc1tpXS50ZXh0Q29udGVudCA9IHRleHQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGZ1bmN0aW9uIGlzKHNlbGVjdG9yKSB7XG4gICAgdmFyIGVsID0gdGhpc1swXTtcbiAgICB2YXIgY29tcGFyZVdpdGg7XG4gICAgdmFyIGk7XG4gICAgaWYgKCFlbCB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoZWwubWF0Y2hlcykgeyByZXR1cm4gZWwubWF0Y2hlcyhzZWxlY3Rvcik7IH1cbiAgICAgIGVsc2UgaWYgKGVsLndlYmtpdE1hdGNoZXNTZWxlY3RvcikgeyByZXR1cm4gZWwud2Via2l0TWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yKTsgfVxuICAgICAgZWxzZSBpZiAoZWwubXNNYXRjaGVzU2VsZWN0b3IpIHsgcmV0dXJuIGVsLm1zTWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yKTsgfVxuXG4gICAgICBjb21wYXJlV2l0aCA9ICQoc2VsZWN0b3IpO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGNvbXBhcmVXaXRoLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChjb21wYXJlV2l0aFtpXSA9PT0gZWwpIHsgcmV0dXJuIHRydWU7IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdG9yID09PSBkb2MpIHsgcmV0dXJuIGVsID09PSBkb2M7IH1cbiAgICBlbHNlIGlmIChzZWxlY3RvciA9PT0gd2luKSB7IHJldHVybiBlbCA9PT0gd2luOyB9XG5cbiAgICBpZiAoc2VsZWN0b3Iubm9kZVR5cGUgfHwgc2VsZWN0b3IgaW5zdGFuY2VvZiBEb203KSB7XG4gICAgICBjb21wYXJlV2l0aCA9IHNlbGVjdG9yLm5vZGVUeXBlID8gW3NlbGVjdG9yXSA6IHNlbGVjdG9yO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGNvbXBhcmVXaXRoLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChjb21wYXJlV2l0aFtpXSA9PT0gZWwpIHsgcmV0dXJuIHRydWU7IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZ1bmN0aW9uIGluZGV4KCkge1xuICAgIHZhciBjaGlsZCA9IHRoaXNbMF07XG4gICAgdmFyIGk7XG4gICAgaWYgKGNoaWxkKSB7XG4gICAgICBpID0gMDtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgd2hpbGUgKChjaGlsZCA9IGNoaWxkLnByZXZpb3VzU2libGluZykgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAxKSB7IGkgKz0gMTsgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIGZ1bmN0aW9uIGVxKGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBpbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHRoaXM7IH1cbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgdmFyIHJldHVybkluZGV4O1xuICAgIGlmIChpbmRleCA+IGxlbmd0aCAtIDEpIHtcbiAgICAgIHJldHVybiBuZXcgRG9tNyhbXSk7XG4gICAgfVxuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybkluZGV4ID0gbGVuZ3RoICsgaW5kZXg7XG4gICAgICBpZiAocmV0dXJuSW5kZXggPCAwKSB7IHJldHVybiBuZXcgRG9tNyhbXSk7IH1cbiAgICAgIHJldHVybiBuZXcgRG9tNyhbdGhpc1tyZXR1cm5JbmRleF1dKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEb203KFt0aGlzW2luZGV4XV0pO1xuICB9XG4gIGZ1bmN0aW9uIGFwcGVuZCgpIHtcbiAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICB2YXIgbmV3Q2hpbGQ7XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IGFyZ3MubGVuZ3RoOyBrICs9IDEpIHtcbiAgICAgIG5ld0NoaWxkID0gYXJnc1trXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHZhciB0ZW1wRGl2ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgIHRlbXBEaXYuaW5uZXJIVE1MID0gbmV3Q2hpbGQ7XG4gICAgICAgICAgd2hpbGUgKHRlbXBEaXYuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgdGhpc1tpXS5hcHBlbmRDaGlsZCh0ZW1wRGl2LmZpcnN0Q2hpbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChuZXdDaGlsZCBpbnN0YW5jZW9mIERvbTcpIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5ld0NoaWxkLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgICAgICB0aGlzW2ldLmFwcGVuZENoaWxkKG5ld0NoaWxkW2pdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpc1tpXS5hcHBlbmRDaGlsZChuZXdDaGlsZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBmdW5jdGlvbiBwcmVwZW5kKG5ld0NoaWxkKSB7XG4gICAgdmFyIGk7XG4gICAgdmFyIGo7XG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhciB0ZW1wRGl2ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0ZW1wRGl2LmlubmVySFRNTCA9IG5ld0NoaWxkO1xuICAgICAgICBmb3IgKGogPSB0ZW1wRGl2LmNoaWxkTm9kZXMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqIC09IDEpIHtcbiAgICAgICAgICB0aGlzW2ldLmluc2VydEJlZm9yZSh0ZW1wRGl2LmNoaWxkTm9kZXNbal0sIHRoaXNbaV0uY2hpbGROb2Rlc1swXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobmV3Q2hpbGQgaW5zdGFuY2VvZiBEb203KSB7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBuZXdDaGlsZC5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICAgIHRoaXNbaV0uaW5zZXJ0QmVmb3JlKG5ld0NoaWxkW2pdLCB0aGlzW2ldLmNoaWxkTm9kZXNbMF0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW2ldLmluc2VydEJlZm9yZShuZXdDaGlsZCwgdGhpc1tpXS5jaGlsZE5vZGVzWzBdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZnVuY3Rpb24gbmV4dChzZWxlY3Rvcikge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICBpZiAodGhpc1swXS5uZXh0RWxlbWVudFNpYmxpbmcgJiYgJCh0aGlzWzBdLm5leHRFbGVtZW50U2libGluZykuaXMoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBEb203KFt0aGlzWzBdLm5leHRFbGVtZW50U2libGluZ10pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgRG9tNyhbXSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzWzBdLm5leHRFbGVtZW50U2libGluZykgeyByZXR1cm4gbmV3IERvbTcoW3RoaXNbMF0ubmV4dEVsZW1lbnRTaWJsaW5nXSk7IH1cbiAgICAgIHJldHVybiBuZXcgRG9tNyhbXSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRG9tNyhbXSk7XG4gIH1cbiAgZnVuY3Rpb24gbmV4dEFsbChzZWxlY3Rvcikge1xuICAgIHZhciBuZXh0RWxzID0gW107XG4gICAgdmFyIGVsID0gdGhpc1swXTtcbiAgICBpZiAoIWVsKSB7IHJldHVybiBuZXcgRG9tNyhbXSk7IH1cbiAgICB3aGlsZSAoZWwubmV4dEVsZW1lbnRTaWJsaW5nKSB7XG4gICAgICB2YXIgbmV4dCA9IGVsLm5leHRFbGVtZW50U2libGluZzsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgIGlmICgkKG5leHQpLmlzKHNlbGVjdG9yKSkgeyBuZXh0RWxzLnB1c2gobmV4dCk7IH1cbiAgICAgIH0gZWxzZSB7IG5leHRFbHMucHVzaChuZXh0KTsgfVxuICAgICAgZWwgPSBuZXh0O1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERvbTcobmV4dEVscyk7XG4gIH1cbiAgZnVuY3Rpb24gcHJldihzZWxlY3Rvcikge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBlbCA9IHRoaXNbMF07XG4gICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKGVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgJiYgJChlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKS5pcyhzZWxlY3RvcikpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IERvbTcoW2VsLnByZXZpb3VzRWxlbWVudFNpYmxpbmddKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IERvbTcoW10pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWwucHJldmlvdXNFbGVtZW50U2libGluZykgeyByZXR1cm4gbmV3IERvbTcoW2VsLnByZXZpb3VzRWxlbWVudFNpYmxpbmddKTsgfVxuICAgICAgcmV0dXJuIG5ldyBEb203KFtdKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEb203KFtdKTtcbiAgfVxuICBmdW5jdGlvbiBwcmV2QWxsKHNlbGVjdG9yKSB7XG4gICAgdmFyIHByZXZFbHMgPSBbXTtcbiAgICB2YXIgZWwgPSB0aGlzWzBdO1xuICAgIGlmICghZWwpIHsgcmV0dXJuIG5ldyBEb203KFtdKTsgfVxuICAgIHdoaWxlIChlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB7XG4gICAgICB2YXIgcHJldiA9IGVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICBpZiAoJChwcmV2KS5pcyhzZWxlY3RvcikpIHsgcHJldkVscy5wdXNoKHByZXYpOyB9XG4gICAgICB9IGVsc2UgeyBwcmV2RWxzLnB1c2gocHJldik7IH1cbiAgICAgIGVsID0gcHJldjtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEb203KHByZXZFbHMpO1xuICB9XG4gIGZ1bmN0aW9uIHBhcmVudChzZWxlY3Rvcikge1xuICAgIHZhciBwYXJlbnRzID0gW107IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICh0aGlzW2ldLnBhcmVudE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgICAgaWYgKCQodGhpc1tpXS5wYXJlbnROb2RlKS5pcyhzZWxlY3RvcikpIHsgcGFyZW50cy5wdXNoKHRoaXNbaV0ucGFyZW50Tm9kZSk7IH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJlbnRzLnB1c2godGhpc1tpXS5wYXJlbnROb2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJCh1bmlxdWUocGFyZW50cykpO1xuICB9XG4gIGZ1bmN0aW9uIHBhcmVudHMoc2VsZWN0b3IpIHtcbiAgICB2YXIgcGFyZW50cyA9IFtdOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2YXIgcGFyZW50ID0gdGhpc1tpXS5wYXJlbnROb2RlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICAgIGlmICgkKHBhcmVudCkuaXMoc2VsZWN0b3IpKSB7IHBhcmVudHMucHVzaChwYXJlbnQpOyB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyZW50cy5wdXNoKHBhcmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAkKHVuaXF1ZShwYXJlbnRzKSk7XG4gIH1cbiAgZnVuY3Rpb24gY2xvc2VzdChzZWxlY3Rvcikge1xuICAgIHZhciBjbG9zZXN0ID0gdGhpczsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gbmV3IERvbTcoW10pO1xuICAgIH1cbiAgICBpZiAoIWNsb3Nlc3QuaXMoc2VsZWN0b3IpKSB7XG4gICAgICBjbG9zZXN0ID0gY2xvc2VzdC5wYXJlbnRzKHNlbGVjdG9yKS5lcSgwKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsb3Nlc3Q7XG4gIH1cbiAgZnVuY3Rpb24gZmluZChzZWxlY3Rvcikge1xuICAgIHZhciBmb3VuZEVsZW1lbnRzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2YXIgZm91bmQgPSB0aGlzW2ldLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBmb3VuZC5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICBmb3VuZEVsZW1lbnRzLnB1c2goZm91bmRbal0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IERvbTcoZm91bmRFbGVtZW50cyk7XG4gIH1cbiAgZnVuY3Rpb24gY2hpbGRyZW4oc2VsZWN0b3IpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBbXTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIGNoaWxkTm9kZXMgPSB0aGlzW2ldLmNoaWxkTm9kZXM7XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2hpbGROb2Rlcy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgICAgICAgaWYgKGNoaWxkTm9kZXNbal0ubm9kZVR5cGUgPT09IDEpIHsgY2hpbGRyZW4ucHVzaChjaGlsZE5vZGVzW2pdKTsgfVxuICAgICAgICB9IGVsc2UgaWYgKGNoaWxkTm9kZXNbal0ubm9kZVR5cGUgPT09IDEgJiYgJChjaGlsZE5vZGVzW2pdKS5pcyhzZWxlY3RvcikpIHtcbiAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkTm9kZXNbal0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgRG9tNyh1bmlxdWUoY2hpbGRyZW4pKTtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAodGhpc1tpXS5wYXJlbnROb2RlKSB7IHRoaXNbaV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzW2ldKTsgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBmdW5jdGlvbiBhZGQoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgdmFyIGRvbSA9IHRoaXM7XG4gICAgdmFyIGk7XG4gICAgdmFyIGo7XG4gICAgZm9yIChpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHZhciB0b0FkZCA9ICQoYXJnc1tpXSk7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgdG9BZGQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgZG9tW2RvbS5sZW5ndGhdID0gdG9BZGRbal07XG4gICAgICAgIGRvbS5sZW5ndGggKz0gMTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRvbTtcbiAgfVxuXG4gIHZhciBNZXRob2RzID0ge1xuICAgIGFkZENsYXNzOiBhZGRDbGFzcyxcbiAgICByZW1vdmVDbGFzczogcmVtb3ZlQ2xhc3MsXG4gICAgaGFzQ2xhc3M6IGhhc0NsYXNzLFxuICAgIHRvZ2dsZUNsYXNzOiB0b2dnbGVDbGFzcyxcbiAgICBhdHRyOiBhdHRyLFxuICAgIHJlbW92ZUF0dHI6IHJlbW92ZUF0dHIsXG4gICAgZGF0YTogZGF0YSxcbiAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybSxcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uLFxuICAgIG9uOiBvbixcbiAgICBvZmY6IG9mZixcbiAgICB0cmlnZ2VyOiB0cmlnZ2VyLFxuICAgIHRyYW5zaXRpb25FbmQ6IHRyYW5zaXRpb25FbmQsXG4gICAgb3V0ZXJXaWR0aDogb3V0ZXJXaWR0aCxcbiAgICBvdXRlckhlaWdodDogb3V0ZXJIZWlnaHQsXG4gICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgY3NzOiBjc3MsXG4gICAgZWFjaDogZWFjaCxcbiAgICBodG1sOiBodG1sLFxuICAgIHRleHQ6IHRleHQsXG4gICAgaXM6IGlzLFxuICAgIGluZGV4OiBpbmRleCxcbiAgICBlcTogZXEsXG4gICAgYXBwZW5kOiBhcHBlbmQsXG4gICAgcHJlcGVuZDogcHJlcGVuZCxcbiAgICBuZXh0OiBuZXh0LFxuICAgIG5leHRBbGw6IG5leHRBbGwsXG4gICAgcHJldjogcHJldixcbiAgICBwcmV2QWxsOiBwcmV2QWxsLFxuICAgIHBhcmVudDogcGFyZW50LFxuICAgIHBhcmVudHM6IHBhcmVudHMsXG4gICAgY2xvc2VzdDogY2xvc2VzdCxcbiAgICBmaW5kOiBmaW5kLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICByZW1vdmU6IHJlbW92ZSxcbiAgICBhZGQ6IGFkZCxcbiAgICBzdHlsZXM6IHN0eWxlcyxcbiAgfTtcblxuICBPYmplY3Qua2V5cyhNZXRob2RzKS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7XG4gICAgJC5mblttZXRob2ROYW1lXSA9ICQuZm5bbWV0aG9kTmFtZV0gfHwgTWV0aG9kc1ttZXRob2ROYW1lXTtcbiAgfSk7XG5cbiAgdmFyIFV0aWxzID0ge1xuICAgIGRlbGV0ZVByb3BzOiBmdW5jdGlvbiBkZWxldGVQcm9wcyhvYmopIHtcbiAgICAgIHZhciBvYmplY3QgPSBvYmo7XG4gICAgICBPYmplY3Qua2V5cyhvYmplY3QpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG9iamVjdFtrZXldID0gbnVsbDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIG5vIGdldHRlciBmb3Igb2JqZWN0XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBkZWxldGUgb2JqZWN0W2tleV07XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBzb21ldGhpbmcgZ290IHdyb25nXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgbmV4dFRpY2s6IGZ1bmN0aW9uIG5leHRUaWNrKGNhbGxiYWNrLCBkZWxheSkge1xuICAgICAgaWYgKCBkZWxheSA9PT0gdm9pZCAwICkgZGVsYXkgPSAwO1xuXG4gICAgICByZXR1cm4gc2V0VGltZW91dChjYWxsYmFjaywgZGVsYXkpO1xuICAgIH0sXG4gICAgbm93OiBmdW5jdGlvbiBub3coKSB7XG4gICAgICByZXR1cm4gRGF0ZS5ub3coKTtcbiAgICB9LFxuICAgIGdldFRyYW5zbGF0ZTogZnVuY3Rpb24gZ2V0VHJhbnNsYXRlKGVsLCBheGlzKSB7XG4gICAgICBpZiAoIGF4aXMgPT09IHZvaWQgMCApIGF4aXMgPSAneCc7XG5cbiAgICAgIHZhciBtYXRyaXg7XG4gICAgICB2YXIgY3VyVHJhbnNmb3JtO1xuICAgICAgdmFyIHRyYW5zZm9ybU1hdHJpeDtcblxuICAgICAgdmFyIGN1clN0eWxlID0gd2luLmdldENvbXB1dGVkU3R5bGUoZWwsIG51bGwpO1xuXG4gICAgICBpZiAod2luLldlYktpdENTU01hdHJpeCkge1xuICAgICAgICBjdXJUcmFuc2Zvcm0gPSBjdXJTdHlsZS50cmFuc2Zvcm0gfHwgY3VyU3R5bGUud2Via2l0VHJhbnNmb3JtO1xuICAgICAgICBpZiAoY3VyVHJhbnNmb3JtLnNwbGl0KCcsJykubGVuZ3RoID4gNikge1xuICAgICAgICAgIGN1clRyYW5zZm9ybSA9IGN1clRyYW5zZm9ybS5zcGxpdCgnLCAnKS5tYXAoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEucmVwbGFjZSgnLCcsICcuJyk7IH0pLmpvaW4oJywgJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29tZSBvbGQgdmVyc2lvbnMgb2YgV2Via2l0IGNob2tlIHdoZW4gJ25vbmUnIGlzIHBhc3NlZDsgcGFzc1xuICAgICAgICAvLyBlbXB0eSBzdHJpbmcgaW5zdGVhZCBpbiB0aGlzIGNhc2VcbiAgICAgICAgdHJhbnNmb3JtTWF0cml4ID0gbmV3IHdpbi5XZWJLaXRDU1NNYXRyaXgoY3VyVHJhbnNmb3JtID09PSAnbm9uZScgPyAnJyA6IGN1clRyYW5zZm9ybSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2Zvcm1NYXRyaXggPSBjdXJTdHlsZS5Nb3pUcmFuc2Zvcm0gfHwgY3VyU3R5bGUuT1RyYW5zZm9ybSB8fCBjdXJTdHlsZS5Nc1RyYW5zZm9ybSB8fCBjdXJTdHlsZS5tc1RyYW5zZm9ybSB8fCBjdXJTdHlsZS50cmFuc2Zvcm0gfHwgY3VyU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgndHJhbnNmb3JtJykucmVwbGFjZSgndHJhbnNsYXRlKCcsICdtYXRyaXgoMSwgMCwgMCwgMSwnKTtcbiAgICAgICAgbWF0cml4ID0gdHJhbnNmb3JtTWF0cml4LnRvU3RyaW5nKCkuc3BsaXQoJywnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGF4aXMgPT09ICd4Jykge1xuICAgICAgICAvLyBMYXRlc3QgQ2hyb21lIGFuZCB3ZWJraXRzIEZpeFxuICAgICAgICBpZiAod2luLldlYktpdENTU01hdHJpeCkgeyBjdXJUcmFuc2Zvcm0gPSB0cmFuc2Zvcm1NYXRyaXgubTQxOyB9XG4gICAgICAgIC8vIENyYXp5IElFMTAgTWF0cml4XG4gICAgICAgIGVsc2UgaWYgKG1hdHJpeC5sZW5ndGggPT09IDE2KSB7IGN1clRyYW5zZm9ybSA9IHBhcnNlRmxvYXQobWF0cml4WzEyXSk7IH1cbiAgICAgICAgLy8gTm9ybWFsIEJyb3dzZXJzXG4gICAgICAgIGVsc2UgeyBjdXJUcmFuc2Zvcm0gPSBwYXJzZUZsb2F0KG1hdHJpeFs0XSk7IH1cbiAgICAgIH1cbiAgICAgIGlmIChheGlzID09PSAneScpIHtcbiAgICAgICAgLy8gTGF0ZXN0IENocm9tZSBhbmQgd2Via2l0cyBGaXhcbiAgICAgICAgaWYgKHdpbi5XZWJLaXRDU1NNYXRyaXgpIHsgY3VyVHJhbnNmb3JtID0gdHJhbnNmb3JtTWF0cml4Lm00MjsgfVxuICAgICAgICAvLyBDcmF6eSBJRTEwIE1hdHJpeFxuICAgICAgICBlbHNlIGlmIChtYXRyaXgubGVuZ3RoID09PSAxNikgeyBjdXJUcmFuc2Zvcm0gPSBwYXJzZUZsb2F0KG1hdHJpeFsxM10pOyB9XG4gICAgICAgIC8vIE5vcm1hbCBCcm93c2Vyc1xuICAgICAgICBlbHNlIHsgY3VyVHJhbnNmb3JtID0gcGFyc2VGbG9hdChtYXRyaXhbNV0pOyB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY3VyVHJhbnNmb3JtIHx8IDA7XG4gICAgfSxcbiAgICBwYXJzZVVybFF1ZXJ5OiBmdW5jdGlvbiBwYXJzZVVybFF1ZXJ5KHVybCkge1xuICAgICAgdmFyIHF1ZXJ5ID0ge307XG4gICAgICB2YXIgdXJsVG9QYXJzZSA9IHVybCB8fCB3aW4ubG9jYXRpb24uaHJlZjtcbiAgICAgIHZhciBpO1xuICAgICAgdmFyIHBhcmFtcztcbiAgICAgIHZhciBwYXJhbTtcbiAgICAgIHZhciBsZW5ndGg7XG4gICAgICBpZiAodHlwZW9mIHVybFRvUGFyc2UgPT09ICdzdHJpbmcnICYmIHVybFRvUGFyc2UubGVuZ3RoKSB7XG4gICAgICAgIHVybFRvUGFyc2UgPSB1cmxUb1BhcnNlLmluZGV4T2YoJz8nKSA+IC0xID8gdXJsVG9QYXJzZS5yZXBsYWNlKC9cXFMqXFw/LywgJycpIDogJyc7XG4gICAgICAgIHBhcmFtcyA9IHVybFRvUGFyc2Uuc3BsaXQoJyYnKS5maWx0ZXIoZnVuY3Rpb24gKHBhcmFtc1BhcnQpIHsgcmV0dXJuIHBhcmFtc1BhcnQgIT09ICcnOyB9KTtcbiAgICAgICAgbGVuZ3RoID0gcGFyYW1zLmxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICBwYXJhbSA9IHBhcmFtc1tpXS5yZXBsYWNlKC8jXFxTKy9nLCAnJykuc3BsaXQoJz0nKTtcbiAgICAgICAgICBxdWVyeVtkZWNvZGVVUklDb21wb25lbnQocGFyYW1bMF0pXSA9IHR5cGVvZiBwYXJhbVsxXSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBkZWNvZGVVUklDb21wb25lbnQocGFyYW1bMV0pIHx8ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcXVlcnk7XG4gICAgfSxcbiAgICBpc09iamVjdDogZnVuY3Rpb24gaXNPYmplY3Qobykge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBvICE9PSBudWxsICYmIG8uY29uc3RydWN0b3IgJiYgby5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xuICAgIH0sXG4gICAgZXh0ZW5kOiBmdW5jdGlvbiBleHRlbmQoKSB7XG4gICAgICB2YXIgYXJncyA9IFtdLCBsZW4kMSA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICB3aGlsZSAoIGxlbiQxLS0gKSBhcmdzWyBsZW4kMSBdID0gYXJndW1lbnRzWyBsZW4kMSBdO1xuXG4gICAgICB2YXIgdG8gPSBPYmplY3QoYXJnc1swXSk7XG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgdmFyIG5leHRTb3VyY2UgPSBhcmdzW2ldO1xuICAgICAgICBpZiAobmV4dFNvdXJjZSAhPT0gdW5kZWZpbmVkICYmIG5leHRTb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIga2V5c0FycmF5ID0gT2JqZWN0LmtleXMoT2JqZWN0KG5leHRTb3VyY2UpKTtcbiAgICAgICAgICBmb3IgKHZhciBuZXh0SW5kZXggPSAwLCBsZW4gPSBrZXlzQXJyYXkubGVuZ3RoOyBuZXh0SW5kZXggPCBsZW47IG5leHRJbmRleCArPSAxKSB7XG4gICAgICAgICAgICB2YXIgbmV4dEtleSA9IGtleXNBcnJheVtuZXh0SW5kZXhdO1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5leHRTb3VyY2UsIG5leHRLZXkpO1xuICAgICAgICAgICAgaWYgKGRlc2MgIT09IHVuZGVmaW5lZCAmJiBkZXNjLmVudW1lcmFibGUpIHtcbiAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzT2JqZWN0KHRvW25leHRLZXldKSAmJiBVdGlscy5pc09iamVjdChuZXh0U291cmNlW25leHRLZXldKSkge1xuICAgICAgICAgICAgICAgIFV0aWxzLmV4dGVuZCh0b1tuZXh0S2V5XSwgbmV4dFNvdXJjZVtuZXh0S2V5XSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoIVV0aWxzLmlzT2JqZWN0KHRvW25leHRLZXldKSAmJiBVdGlscy5pc09iamVjdChuZXh0U291cmNlW25leHRLZXldKSkge1xuICAgICAgICAgICAgICAgIHRvW25leHRLZXldID0ge307XG4gICAgICAgICAgICAgICAgVXRpbHMuZXh0ZW5kKHRvW25leHRLZXldLCBuZXh0U291cmNlW25leHRLZXldKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0b1tuZXh0S2V5XSA9IG5leHRTb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0bztcbiAgICB9LFxuICB9O1xuXG4gIHZhciBTdXBwb3J0ID0gKGZ1bmN0aW9uIFN1cHBvcnQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvdWNoOiAod2luLk1vZGVybml6ciAmJiB3aW4uTW9kZXJuaXpyLnRvdWNoID09PSB0cnVlKSB8fCAoZnVuY3Rpb24gY2hlY2tUb3VjaCgpIHtcbiAgICAgICAgcmV0dXJuICEhKCh3aW4ubmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMCkgfHwgKCdvbnRvdWNoc3RhcnQnIGluIHdpbikgfHwgKHdpbi5Eb2N1bWVudFRvdWNoICYmIGRvYyBpbnN0YW5jZW9mIHdpbi5Eb2N1bWVudFRvdWNoKSk7XG4gICAgICB9KCkpLFxuXG4gICAgICBwb2ludGVyRXZlbnRzOiAhIXdpbi5Qb2ludGVyRXZlbnQgJiYgKCdtYXhUb3VjaFBvaW50cycgaW4gd2luLm5hdmlnYXRvcikgJiYgd2luLm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDAsXG5cbiAgICAgIG9ic2VydmVyOiAoZnVuY3Rpb24gY2hlY2tPYnNlcnZlcigpIHtcbiAgICAgICAgcmV0dXJuICgnTXV0YXRpb25PYnNlcnZlcicgaW4gd2luIHx8ICdXZWJraXRNdXRhdGlvbk9ic2VydmVyJyBpbiB3aW4pO1xuICAgICAgfSgpKSxcblxuICAgICAgcGFzc2l2ZUxpc3RlbmVyOiAoZnVuY3Rpb24gY2hlY2tQYXNzaXZlTGlzdGVuZXIoKSB7XG4gICAgICAgIHZhciBzdXBwb3J0c1Bhc3NpdmUgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgb3B0cyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3Bhc3NpdmUnLCB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICBzdXBwb3J0c1Bhc3NpdmUgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB3aW4uYWRkRXZlbnRMaXN0ZW5lcigndGVzdFBhc3NpdmVMaXN0ZW5lcicsIG51bGwsIG9wdHMpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gTm8gc3VwcG9ydFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBwb3J0c1Bhc3NpdmU7XG4gICAgICB9KCkpLFxuXG4gICAgICBnZXN0dXJlczogKGZ1bmN0aW9uIGNoZWNrR2VzdHVyZXMoKSB7XG4gICAgICAgIHJldHVybiAnb25nZXN0dXJlc3RhcnQnIGluIHdpbjtcbiAgICAgIH0oKSksXG4gICAgfTtcbiAgfSgpKTtcblxuICB2YXIgU3dpcGVyQ2xhc3MgPSBmdW5jdGlvbiBTd2lwZXJDbGFzcyhwYXJhbXMpIHtcbiAgICBpZiAoIHBhcmFtcyA9PT0gdm9pZCAwICkgcGFyYW1zID0ge307XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgc2VsZi5wYXJhbXMgPSBwYXJhbXM7XG5cbiAgICAvLyBFdmVudHNcbiAgICBzZWxmLmV2ZW50c0xpc3RlbmVycyA9IHt9O1xuXG4gICAgaWYgKHNlbGYucGFyYW1zICYmIHNlbGYucGFyYW1zLm9uKSB7XG4gICAgICBPYmplY3Qua2V5cyhzZWxmLnBhcmFtcy5vbikuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnROYW1lKSB7XG4gICAgICAgIHNlbGYub24oZXZlbnROYW1lLCBzZWxmLnBhcmFtcy5vbltldmVudE5hbWVdKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICB2YXIgc3RhdGljQWNjZXNzb3JzID0geyBjb21wb25lbnRzOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cbiAgU3dpcGVyQ2xhc3MucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24gKGV2ZW50cywgaGFuZGxlciwgcHJpb3JpdHkpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBzZWxmOyB9XG4gICAgdmFyIG1ldGhvZCA9IHByaW9yaXR5ID8gJ3Vuc2hpZnQnIDogJ3B1c2gnO1xuICAgIGV2ZW50cy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoIXNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSkgeyBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0gPSBbXTsgfVxuICAgICAgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdW21ldGhvZF0oaGFuZGxlcik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH07XG5cbiAgU3dpcGVyQ2xhc3MucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlIChldmVudHMsIGhhbmRsZXIsIHByaW9yaXR5KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmICh0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gc2VsZjsgfVxuICAgIGZ1bmN0aW9uIG9uY2VIYW5kbGVyKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICBzZWxmLm9mZihldmVudHMsIG9uY2VIYW5kbGVyKTtcbiAgICAgIGlmIChvbmNlSGFuZGxlci5mN3Byb3h5KSB7XG4gICAgICAgIGRlbGV0ZSBvbmNlSGFuZGxlci5mN3Byb3h5O1xuICAgICAgfVxuICAgICAgaGFuZGxlci5hcHBseShzZWxmLCBhcmdzKTtcbiAgICB9XG4gICAgb25jZUhhbmRsZXIuZjdwcm94eSA9IGhhbmRsZXI7XG4gICAgcmV0dXJuIHNlbGYub24oZXZlbnRzLCBvbmNlSGFuZGxlciwgcHJpb3JpdHkpO1xuICB9O1xuXG4gIFN3aXBlckNsYXNzLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbiBvZmYgKGV2ZW50cywgaGFuZGxlcikge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBpZiAoIXNlbGYuZXZlbnRzTGlzdGVuZXJzKSB7IHJldHVybiBzZWxmOyB9XG4gICAgZXZlbnRzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdID0gW107XG4gICAgICB9IGVsc2UgaWYgKHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSAmJiBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0ubGVuZ3RoKSB7XG4gICAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudEhhbmRsZXIsIGluZGV4KSB7XG4gICAgICAgICAgaWYgKGV2ZW50SGFuZGxlciA9PT0gaGFuZGxlciB8fCAoZXZlbnRIYW5kbGVyLmY3cHJveHkgJiYgZXZlbnRIYW5kbGVyLmY3cHJveHkgPT09IGhhbmRsZXIpKSB7XG4gICAgICAgICAgICBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzZWxmO1xuICB9O1xuXG4gIFN3aXBlckNsYXNzLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdCAoKSB7XG4gICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBpZiAoIXNlbGYuZXZlbnRzTGlzdGVuZXJzKSB7IHJldHVybiBzZWxmOyB9XG4gICAgdmFyIGV2ZW50cztcbiAgICB2YXIgZGF0YTtcbiAgICB2YXIgY29udGV4dDtcbiAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkoYXJnc1swXSkpIHtcbiAgICAgIGV2ZW50cyA9IGFyZ3NbMF07XG4gICAgICBkYXRhID0gYXJncy5zbGljZSgxLCBhcmdzLmxlbmd0aCk7XG4gICAgICBjb250ZXh0ID0gc2VsZjtcbiAgICB9IGVsc2Uge1xuICAgICAgZXZlbnRzID0gYXJnc1swXS5ldmVudHM7XG4gICAgICBkYXRhID0gYXJnc1swXS5kYXRhO1xuICAgICAgY29udGV4dCA9IGFyZ3NbMF0uY29udGV4dCB8fCBzZWxmO1xuICAgIH1cbiAgICB2YXIgZXZlbnRzQXJyYXkgPSBBcnJheS5pc0FycmF5KGV2ZW50cykgPyBldmVudHMgOiBldmVudHMuc3BsaXQoJyAnKTtcbiAgICBldmVudHNBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKHNlbGYuZXZlbnRzTGlzdGVuZXJzICYmIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSkge1xuICAgICAgICB2YXIgaGFuZGxlcnMgPSBbXTtcbiAgICAgICAgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50SGFuZGxlcikge1xuICAgICAgICAgIGhhbmRsZXJzLnB1c2goZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGhhbmRsZXJzLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50SGFuZGxlcikge1xuICAgICAgICAgIGV2ZW50SGFuZGxlci5hcHBseShjb250ZXh0LCBkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH07XG5cbiAgU3dpcGVyQ2xhc3MucHJvdG90eXBlLnVzZU1vZHVsZXNQYXJhbXMgPSBmdW5jdGlvbiB1c2VNb2R1bGVzUGFyYW1zIChpbnN0YW5jZVBhcmFtcykge1xuICAgIHZhciBpbnN0YW5jZSA9IHRoaXM7XG4gICAgaWYgKCFpbnN0YW5jZS5tb2R1bGVzKSB7IHJldHVybjsgfVxuICAgIE9iamVjdC5rZXlzKGluc3RhbmNlLm1vZHVsZXMpLmZvckVhY2goZnVuY3Rpb24gKG1vZHVsZU5hbWUpIHtcbiAgICAgIHZhciBtb2R1bGUgPSBpbnN0YW5jZS5tb2R1bGVzW21vZHVsZU5hbWVdO1xuICAgICAgLy8gRXh0ZW5kIHBhcmFtc1xuICAgICAgaWYgKG1vZHVsZS5wYXJhbXMpIHtcbiAgICAgICAgVXRpbHMuZXh0ZW5kKGluc3RhbmNlUGFyYW1zLCBtb2R1bGUucGFyYW1zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBTd2lwZXJDbGFzcy5wcm90b3R5cGUudXNlTW9kdWxlcyA9IGZ1bmN0aW9uIHVzZU1vZHVsZXMgKG1vZHVsZXNQYXJhbXMpIHtcbiAgICAgIGlmICggbW9kdWxlc1BhcmFtcyA9PT0gdm9pZCAwICkgbW9kdWxlc1BhcmFtcyA9IHt9O1xuXG4gICAgdmFyIGluc3RhbmNlID0gdGhpcztcbiAgICBpZiAoIWluc3RhbmNlLm1vZHVsZXMpIHsgcmV0dXJuOyB9XG4gICAgT2JqZWN0LmtleXMoaW5zdGFuY2UubW9kdWxlcykuZm9yRWFjaChmdW5jdGlvbiAobW9kdWxlTmFtZSkge1xuICAgICAgdmFyIG1vZHVsZSA9IGluc3RhbmNlLm1vZHVsZXNbbW9kdWxlTmFtZV07XG4gICAgICB2YXIgbW9kdWxlUGFyYW1zID0gbW9kdWxlc1BhcmFtc1ttb2R1bGVOYW1lXSB8fCB7fTtcbiAgICAgIC8vIEV4dGVuZCBpbnN0YW5jZSBtZXRob2RzIGFuZCBwcm9wc1xuICAgICAgaWYgKG1vZHVsZS5pbnN0YW5jZSkge1xuICAgICAgICBPYmplY3Qua2V5cyhtb2R1bGUuaW5zdGFuY2UpLmZvckVhY2goZnVuY3Rpb24gKG1vZHVsZVByb3BOYW1lKSB7XG4gICAgICAgICAgdmFyIG1vZHVsZVByb3AgPSBtb2R1bGUuaW5zdGFuY2VbbW9kdWxlUHJvcE5hbWVdO1xuICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlUHJvcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgaW5zdGFuY2VbbW9kdWxlUHJvcE5hbWVdID0gbW9kdWxlUHJvcC5iaW5kKGluc3RhbmNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5zdGFuY2VbbW9kdWxlUHJvcE5hbWVdID0gbW9kdWxlUHJvcDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gQWRkIGV2ZW50IGxpc3RlbmVyc1xuICAgICAgaWYgKG1vZHVsZS5vbiAmJiBpbnN0YW5jZS5vbikge1xuICAgICAgICBPYmplY3Qua2V5cyhtb2R1bGUub24pLmZvckVhY2goZnVuY3Rpb24gKG1vZHVsZUV2ZW50TmFtZSkge1xuICAgICAgICAgIGluc3RhbmNlLm9uKG1vZHVsZUV2ZW50TmFtZSwgbW9kdWxlLm9uW21vZHVsZUV2ZW50TmFtZV0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gTW9kdWxlIGNyZWF0ZSBjYWxsYmFja1xuICAgICAgaWYgKG1vZHVsZS5jcmVhdGUpIHtcbiAgICAgICAgbW9kdWxlLmNyZWF0ZS5iaW5kKGluc3RhbmNlKShtb2R1bGVQYXJhbXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHN0YXRpY0FjY2Vzc29ycy5jb21wb25lbnRzLnNldCA9IGZ1bmN0aW9uIChjb21wb25lbnRzKSB7XG4gICAgdmFyIENsYXNzID0gdGhpcztcbiAgICBpZiAoIUNsYXNzLnVzZSkgeyByZXR1cm47IH1cbiAgICBDbGFzcy51c2UoY29tcG9uZW50cyk7XG4gIH07XG5cbiAgU3dpcGVyQ2xhc3MuaW5zdGFsbE1vZHVsZSA9IGZ1bmN0aW9uIGluc3RhbGxNb2R1bGUgKG1vZHVsZSkge1xuICAgICAgdmFyIHBhcmFtcyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgICAgIHdoaWxlICggbGVuLS0gPiAwICkgcGFyYW1zWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMSBdO1xuXG4gICAgdmFyIENsYXNzID0gdGhpcztcbiAgICBpZiAoIUNsYXNzLnByb3RvdHlwZS5tb2R1bGVzKSB7IENsYXNzLnByb3RvdHlwZS5tb2R1bGVzID0ge307IH1cbiAgICB2YXIgbmFtZSA9IG1vZHVsZS5uYW1lIHx8ICgoKE9iamVjdC5rZXlzKENsYXNzLnByb3RvdHlwZS5tb2R1bGVzKS5sZW5ndGgpICsgXCJfXCIgKyAoVXRpbHMubm93KCkpKSk7XG4gICAgQ2xhc3MucHJvdG90eXBlLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGU7XG4gICAgLy8gUHJvdG90eXBlXG4gICAgaWYgKG1vZHVsZS5wcm90bykge1xuICAgICAgT2JqZWN0LmtleXMobW9kdWxlLnByb3RvKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgQ2xhc3MucHJvdG90eXBlW2tleV0gPSBtb2R1bGUucHJvdG9ba2V5XTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBDbGFzc1xuICAgIGlmIChtb2R1bGUuc3RhdGljKSB7XG4gICAgICBPYmplY3Qua2V5cyhtb2R1bGUuc3RhdGljKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgQ2xhc3Nba2V5XSA9IG1vZHVsZS5zdGF0aWNba2V5XTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBDYWxsYmFja1xuICAgIGlmIChtb2R1bGUuaW5zdGFsbCkge1xuICAgICAgbW9kdWxlLmluc3RhbGwuYXBwbHkoQ2xhc3MsIHBhcmFtcyk7XG4gICAgfVxuICAgIHJldHVybiBDbGFzcztcbiAgfTtcblxuICBTd2lwZXJDbGFzcy51c2UgPSBmdW5jdGlvbiB1c2UgKG1vZHVsZSkge1xuICAgICAgdmFyIHBhcmFtcyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgICAgIHdoaWxlICggbGVuLS0gPiAwICkgcGFyYW1zWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMSBdO1xuXG4gICAgdmFyIENsYXNzID0gdGhpcztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShtb2R1bGUpKSB7XG4gICAgICBtb2R1bGUuZm9yRWFjaChmdW5jdGlvbiAobSkgeyByZXR1cm4gQ2xhc3MuaW5zdGFsbE1vZHVsZShtKTsgfSk7XG4gICAgICByZXR1cm4gQ2xhc3M7XG4gICAgfVxuICAgIHJldHVybiBDbGFzcy5pbnN0YWxsTW9kdWxlLmFwcGx5KENsYXNzLCBbIG1vZHVsZSBdLmNvbmNhdCggcGFyYW1zICkpO1xuICB9O1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBTd2lwZXJDbGFzcywgc3RhdGljQWNjZXNzb3JzICk7XG5cbiAgZnVuY3Rpb24gdXBkYXRlU2l6ZSAoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHdpZHRoO1xuICAgIHZhciBoZWlnaHQ7XG4gICAgdmFyICRlbCA9IHN3aXBlci4kZWw7XG4gICAgaWYgKHR5cGVvZiBzd2lwZXIucGFyYW1zLndpZHRoICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgd2lkdGggPSBzd2lwZXIucGFyYW1zLndpZHRoO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aWR0aCA9ICRlbFswXS5jbGllbnRXaWR0aDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzd2lwZXIucGFyYW1zLmhlaWdodCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhlaWdodCA9IHN3aXBlci5wYXJhbXMuaGVpZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWlnaHQgPSAkZWxbMF0uY2xpZW50SGVpZ2h0O1xuICAgIH1cbiAgICBpZiAoKHdpZHRoID09PSAwICYmIHN3aXBlci5pc0hvcml6b250YWwoKSkgfHwgKGhlaWdodCA9PT0gMCAmJiBzd2lwZXIuaXNWZXJ0aWNhbCgpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFN1YnRyYWN0IHBhZGRpbmdzXG4gICAgd2lkdGggPSB3aWR0aCAtIHBhcnNlSW50KCRlbC5jc3MoJ3BhZGRpbmctbGVmdCcpLCAxMCkgLSBwYXJzZUludCgkZWwuY3NzKCdwYWRkaW5nLXJpZ2h0JyksIDEwKTtcbiAgICBoZWlnaHQgPSBoZWlnaHQgLSBwYXJzZUludCgkZWwuY3NzKCdwYWRkaW5nLXRvcCcpLCAxMCkgLSBwYXJzZUludCgkZWwuY3NzKCdwYWRkaW5nLWJvdHRvbScpLCAxMCk7XG5cbiAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgIHNpemU6IHN3aXBlci5pc0hvcml6b250YWwoKSA/IHdpZHRoIDogaGVpZ2h0LFxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlU2xpZGVzICgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcblxuICAgIHZhciAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7XG4gICAgdmFyIHN3aXBlclNpemUgPSBzd2lwZXIuc2l6ZTtcbiAgICB2YXIgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZTtcbiAgICB2YXIgd3JvbmdSVEwgPSBzd2lwZXIud3JvbmdSVEw7XG4gICAgdmFyIGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG4gICAgdmFyIHByZXZpb3VzU2xpZGVzTGVuZ3RoID0gaXNWaXJ0dWFsID8gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aCA6IHN3aXBlci5zbGlkZXMubGVuZ3RoO1xuICAgIHZhciBzbGlkZXMgPSAkd3JhcHBlckVsLmNoaWxkcmVuKChcIi5cIiArIChzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3MpKSk7XG4gICAgdmFyIHNsaWRlc0xlbmd0aCA9IGlzVmlydHVhbCA/IHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGggOiBzbGlkZXMubGVuZ3RoO1xuICAgIHZhciBzbmFwR3JpZCA9IFtdO1xuICAgIHZhciBzbGlkZXNHcmlkID0gW107XG4gICAgdmFyIHNsaWRlc1NpemVzR3JpZCA9IFtdO1xuXG4gICAgZnVuY3Rpb24gc2xpZGVzRm9yTWFyZ2luKHNsaWRlSW5kZXgpIHtcbiAgICAgIGlmICghcGFyYW1zLmNzc01vZGUpIHsgcmV0dXJuIHRydWU7IH1cbiAgICAgIGlmIChzbGlkZUluZGV4ID09PSBzbGlkZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgb2Zmc2V0QmVmb3JlID0gcGFyYW1zLnNsaWRlc09mZnNldEJlZm9yZTtcbiAgICBpZiAodHlwZW9mIG9mZnNldEJlZm9yZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb2Zmc2V0QmVmb3JlID0gcGFyYW1zLnNsaWRlc09mZnNldEJlZm9yZS5jYWxsKHN3aXBlcik7XG4gICAgfVxuXG4gICAgdmFyIG9mZnNldEFmdGVyID0gcGFyYW1zLnNsaWRlc09mZnNldEFmdGVyO1xuICAgIGlmICh0eXBlb2Ygb2Zmc2V0QWZ0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9mZnNldEFmdGVyID0gcGFyYW1zLnNsaWRlc09mZnNldEFmdGVyLmNhbGwoc3dpcGVyKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNTbmFwR3JpZExlbmd0aCA9IHN3aXBlci5zbmFwR3JpZC5sZW5ndGg7XG4gICAgdmFyIHByZXZpb3VzU2xpZGVzR3JpZExlbmd0aCA9IHN3aXBlci5zbmFwR3JpZC5sZW5ndGg7XG5cbiAgICB2YXIgc3BhY2VCZXR3ZWVuID0gcGFyYW1zLnNwYWNlQmV0d2VlbjtcbiAgICB2YXIgc2xpZGVQb3NpdGlvbiA9IC1vZmZzZXRCZWZvcmU7XG4gICAgdmFyIHByZXZTbGlkZVNpemUgPSAwO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgaWYgKHR5cGVvZiBzd2lwZXJTaXplID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHNwYWNlQmV0d2VlbiA9PT0gJ3N0cmluZycgJiYgc3BhY2VCZXR3ZWVuLmluZGV4T2YoJyUnKSA+PSAwKSB7XG4gICAgICBzcGFjZUJldHdlZW4gPSAocGFyc2VGbG9hdChzcGFjZUJldHdlZW4ucmVwbGFjZSgnJScsICcnKSkgLyAxMDApICogc3dpcGVyU2l6ZTtcbiAgICB9XG5cbiAgICBzd2lwZXIudmlydHVhbFNpemUgPSAtc3BhY2VCZXR3ZWVuO1xuXG4gICAgLy8gcmVzZXQgbWFyZ2luc1xuICAgIGlmIChydGwpIHsgc2xpZGVzLmNzcyh7IG1hcmdpbkxlZnQ6ICcnLCBtYXJnaW5Ub3A6ICcnIH0pOyB9XG4gICAgZWxzZSB7IHNsaWRlcy5jc3MoeyBtYXJnaW5SaWdodDogJycsIG1hcmdpbkJvdHRvbTogJycgfSk7IH1cblxuICAgIHZhciBzbGlkZXNOdW1iZXJFdmVuVG9Sb3dzO1xuICAgIGlmIChwYXJhbXMuc2xpZGVzUGVyQ29sdW1uID4gMSkge1xuICAgICAgaWYgKE1hdGguZmxvb3Ioc2xpZGVzTGVuZ3RoIC8gcGFyYW1zLnNsaWRlc1BlckNvbHVtbikgPT09IHNsaWRlc0xlbmd0aCAvIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyQ29sdW1uKSB7XG4gICAgICAgIHNsaWRlc051bWJlckV2ZW5Ub1Jvd3MgPSBzbGlkZXNMZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbGlkZXNOdW1iZXJFdmVuVG9Sb3dzID0gTWF0aC5jZWlsKHNsaWRlc0xlbmd0aCAvIHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4pICogcGFyYW1zLnNsaWRlc1BlckNvbHVtbjtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbXMuc2xpZGVzUGVyVmlldyAhPT0gJ2F1dG8nICYmIHBhcmFtcy5zbGlkZXNQZXJDb2x1bW5GaWxsID09PSAncm93Jykge1xuICAgICAgICBzbGlkZXNOdW1iZXJFdmVuVG9Sb3dzID0gTWF0aC5tYXgoc2xpZGVzTnVtYmVyRXZlblRvUm93cywgcGFyYW1zLnNsaWRlc1BlclZpZXcgKiBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDYWxjIHNsaWRlc1xuICAgIHZhciBzbGlkZVNpemU7XG4gICAgdmFyIHNsaWRlc1BlckNvbHVtbiA9IHBhcmFtcy5zbGlkZXNQZXJDb2x1bW47XG4gICAgdmFyIHNsaWRlc1BlclJvdyA9IHNsaWRlc051bWJlckV2ZW5Ub1Jvd3MgLyBzbGlkZXNQZXJDb2x1bW47XG4gICAgdmFyIG51bUZ1bGxDb2x1bW5zID0gTWF0aC5mbG9vcihzbGlkZXNMZW5ndGggLyBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlc0xlbmd0aDsgaSArPSAxKSB7XG4gICAgICBzbGlkZVNpemUgPSAwO1xuICAgICAgdmFyIHNsaWRlID0gc2xpZGVzLmVxKGkpO1xuICAgICAgaWYgKHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4gPiAxKSB7XG4gICAgICAgIC8vIFNldCBzbGlkZXMgb3JkZXJcbiAgICAgICAgdmFyIG5ld1NsaWRlT3JkZXJJbmRleCA9ICh2b2lkIDApO1xuICAgICAgICB2YXIgY29sdW1uID0gKHZvaWQgMCk7XG4gICAgICAgIHZhciByb3cgPSAodm9pZCAwKTtcbiAgICAgICAgaWYgKHBhcmFtcy5zbGlkZXNQZXJDb2x1bW5GaWxsID09PSAncm93JyAmJiBwYXJhbXMuc2xpZGVzUGVyR3JvdXAgPiAxKSB7XG4gICAgICAgICAgdmFyIGdyb3VwSW5kZXggPSBNYXRoLmZsb29yKGkgLyAocGFyYW1zLnNsaWRlc1Blckdyb3VwICogcGFyYW1zLnNsaWRlc1BlckNvbHVtbikpO1xuICAgICAgICAgIHZhciBzbGlkZUluZGV4SW5Hcm91cCA9IGkgLSBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uICogcGFyYW1zLnNsaWRlc1Blckdyb3VwICogZ3JvdXBJbmRleDtcbiAgICAgICAgICB2YXIgY29sdW1uc0luR3JvdXAgPSBncm91cEluZGV4ID09PSAwXG4gICAgICAgICAgICA/IHBhcmFtcy5zbGlkZXNQZXJHcm91cFxuICAgICAgICAgICAgOiBNYXRoLm1pbihNYXRoLmNlaWwoKHNsaWRlc0xlbmd0aCAtIGdyb3VwSW5kZXggKiBzbGlkZXNQZXJDb2x1bW4gKiBwYXJhbXMuc2xpZGVzUGVyR3JvdXApIC8gc2xpZGVzUGVyQ29sdW1uKSwgcGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcbiAgICAgICAgICByb3cgPSBNYXRoLmZsb29yKHNsaWRlSW5kZXhJbkdyb3VwIC8gY29sdW1uc0luR3JvdXApO1xuICAgICAgICAgIGNvbHVtbiA9IChzbGlkZUluZGV4SW5Hcm91cCAtIHJvdyAqIGNvbHVtbnNJbkdyb3VwKSArIGdyb3VwSW5kZXggKiBwYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG5cbiAgICAgICAgICBuZXdTbGlkZU9yZGVySW5kZXggPSBjb2x1bW4gKyAoKHJvdyAqIHNsaWRlc051bWJlckV2ZW5Ub1Jvd3MpIC8gc2xpZGVzUGVyQ29sdW1uKTtcbiAgICAgICAgICBzbGlkZVxuICAgICAgICAgICAgLmNzcyh7XG4gICAgICAgICAgICAgICctd2Via2l0LWJveC1vcmRpbmFsLWdyb3VwJzogbmV3U2xpZGVPcmRlckluZGV4LFxuICAgICAgICAgICAgICAnLW1vei1ib3gtb3JkaW5hbC1ncm91cCc6IG5ld1NsaWRlT3JkZXJJbmRleCxcbiAgICAgICAgICAgICAgJy1tcy1mbGV4LW9yZGVyJzogbmV3U2xpZGVPcmRlckluZGV4LFxuICAgICAgICAgICAgICAnLXdlYmtpdC1vcmRlcic6IG5ld1NsaWRlT3JkZXJJbmRleCxcbiAgICAgICAgICAgICAgb3JkZXI6IG5ld1NsaWRlT3JkZXJJbmRleCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtcy5zbGlkZXNQZXJDb2x1bW5GaWxsID09PSAnY29sdW1uJykge1xuICAgICAgICAgIGNvbHVtbiA9IE1hdGguZmxvb3IoaSAvIHNsaWRlc1BlckNvbHVtbik7XG4gICAgICAgICAgcm93ID0gaSAtIChjb2x1bW4gKiBzbGlkZXNQZXJDb2x1bW4pO1xuICAgICAgICAgIGlmIChjb2x1bW4gPiBudW1GdWxsQ29sdW1ucyB8fCAoY29sdW1uID09PSBudW1GdWxsQ29sdW1ucyAmJiByb3cgPT09IHNsaWRlc1BlckNvbHVtbiAtIDEpKSB7XG4gICAgICAgICAgICByb3cgKz0gMTtcbiAgICAgICAgICAgIGlmIChyb3cgPj0gc2xpZGVzUGVyQ29sdW1uKSB7XG4gICAgICAgICAgICAgIHJvdyA9IDA7XG4gICAgICAgICAgICAgIGNvbHVtbiArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByb3cgPSBNYXRoLmZsb29yKGkgLyBzbGlkZXNQZXJSb3cpO1xuICAgICAgICAgIGNvbHVtbiA9IGkgLSAocm93ICogc2xpZGVzUGVyUm93KTtcbiAgICAgICAgfVxuICAgICAgICBzbGlkZS5jc3MoXG4gICAgICAgICAgKFwibWFyZ2luLVwiICsgKHN3aXBlci5pc0hvcml6b250YWwoKSA/ICd0b3AnIDogJ2xlZnQnKSksXG4gICAgICAgICAgKHJvdyAhPT0gMCAmJiBwYXJhbXMuc3BhY2VCZXR3ZWVuKSAmJiAoKChwYXJhbXMuc3BhY2VCZXR3ZWVuKSArIFwicHhcIikpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoc2xpZGUuY3NzKCdkaXNwbGF5JykgPT09ICdub25lJykgeyBjb250aW51ZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICAgIGlmIChwYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nKSB7XG4gICAgICAgIHZhciBzbGlkZVN0eWxlcyA9IHdpbi5nZXRDb21wdXRlZFN0eWxlKHNsaWRlWzBdLCBudWxsKTtcbiAgICAgICAgdmFyIGN1cnJlbnRUcmFuc2Zvcm0gPSBzbGlkZVswXS5zdHlsZS50cmFuc2Zvcm07XG4gICAgICAgIHZhciBjdXJyZW50V2ViS2l0VHJhbnNmb3JtID0gc2xpZGVbMF0uc3R5bGUud2Via2l0VHJhbnNmb3JtO1xuICAgICAgICBpZiAoY3VycmVudFRyYW5zZm9ybSkge1xuICAgICAgICAgIHNsaWRlWzBdLnN0eWxlLnRyYW5zZm9ybSA9ICdub25lJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFdlYktpdFRyYW5zZm9ybSkge1xuICAgICAgICAgIHNsaWRlWzBdLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9ICdub25lJztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3Rocykge1xuICAgICAgICAgIHNsaWRlU2l6ZSA9IHN3aXBlci5pc0hvcml6b250YWwoKVxuICAgICAgICAgICAgPyBzbGlkZS5vdXRlcldpZHRoKHRydWUpXG4gICAgICAgICAgICA6IHNsaWRlLm91dGVySGVpZ2h0KHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHBhcnNlRmxvYXQoc2xpZGVTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnd2lkdGgnKSk7XG4gICAgICAgICAgICB2YXIgcGFkZGluZ0xlZnQgPSBwYXJzZUZsb2F0KHNsaWRlU3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctbGVmdCcpKTtcbiAgICAgICAgICAgIHZhciBwYWRkaW5nUmlnaHQgPSBwYXJzZUZsb2F0KHNsaWRlU3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctcmlnaHQnKSk7XG4gICAgICAgICAgICB2YXIgbWFyZ2luTGVmdCA9IHBhcnNlRmxvYXQoc2xpZGVTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLWxlZnQnKSk7XG4gICAgICAgICAgICB2YXIgbWFyZ2luUmlnaHQgPSBwYXJzZUZsb2F0KHNsaWRlU3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1yaWdodCcpKTtcbiAgICAgICAgICAgIHZhciBib3hTaXppbmcgPSBzbGlkZVN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3gtc2l6aW5nJyk7XG4gICAgICAgICAgICBpZiAoYm94U2l6aW5nICYmIGJveFNpemluZyA9PT0gJ2JvcmRlci1ib3gnKSB7XG4gICAgICAgICAgICAgIHNsaWRlU2l6ZSA9IHdpZHRoICsgbWFyZ2luTGVmdCArIG1hcmdpblJpZ2h0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2xpZGVTaXplID0gd2lkdGggKyBwYWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodCArIG1hcmdpbkxlZnQgKyBtYXJnaW5SaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHBhcnNlRmxvYXQoc2xpZGVTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnaGVpZ2h0JykpO1xuICAgICAgICAgICAgdmFyIHBhZGRpbmdUb3AgPSBwYXJzZUZsb2F0KHNsaWRlU3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctdG9wJykpO1xuICAgICAgICAgICAgdmFyIHBhZGRpbmdCb3R0b20gPSBwYXJzZUZsb2F0KHNsaWRlU3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctYm90dG9tJykpO1xuICAgICAgICAgICAgdmFyIG1hcmdpblRvcCA9IHBhcnNlRmxvYXQoc2xpZGVTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLXRvcCcpKTtcbiAgICAgICAgICAgIHZhciBtYXJnaW5Cb3R0b20gPSBwYXJzZUZsb2F0KHNsaWRlU3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1ib3R0b20nKSk7XG4gICAgICAgICAgICB2YXIgYm94U2l6aW5nJDEgPSBzbGlkZVN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3gtc2l6aW5nJyk7XG4gICAgICAgICAgICBpZiAoYm94U2l6aW5nJDEgJiYgYm94U2l6aW5nJDEgPT09ICdib3JkZXItYm94Jykge1xuICAgICAgICAgICAgICBzbGlkZVNpemUgPSBoZWlnaHQgKyBtYXJnaW5Ub3AgKyBtYXJnaW5Cb3R0b207XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzbGlkZVNpemUgPSBoZWlnaHQgKyBwYWRkaW5nVG9wICsgcGFkZGluZ0JvdHRvbSArIG1hcmdpblRvcCArIG1hcmdpbkJvdHRvbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnRUcmFuc2Zvcm0pIHtcbiAgICAgICAgICBzbGlkZVswXS5zdHlsZS50cmFuc2Zvcm0gPSBjdXJyZW50VHJhbnNmb3JtO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50V2ViS2l0VHJhbnNmb3JtKSB7XG4gICAgICAgICAgc2xpZGVbMF0uc3R5bGUud2Via2l0VHJhbnNmb3JtID0gY3VycmVudFdlYktpdFRyYW5zZm9ybTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3RocykgeyBzbGlkZVNpemUgPSBNYXRoLmZsb29yKHNsaWRlU2l6ZSk7IH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNsaWRlU2l6ZSA9IChzd2lwZXJTaXplIC0gKChwYXJhbXMuc2xpZGVzUGVyVmlldyAtIDEpICogc3BhY2VCZXR3ZWVuKSkgLyBwYXJhbXMuc2xpZGVzUGVyVmlldztcbiAgICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHsgc2xpZGVTaXplID0gTWF0aC5mbG9vcihzbGlkZVNpemUpOyB9XG5cbiAgICAgICAgaWYgKHNsaWRlc1tpXSkge1xuICAgICAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICAgIHNsaWRlc1tpXS5zdHlsZS53aWR0aCA9IHNsaWRlU2l6ZSArIFwicHhcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2xpZGVzW2ldLnN0eWxlLmhlaWdodCA9IHNsaWRlU2l6ZSArIFwicHhcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzbGlkZXNbaV0pIHtcbiAgICAgICAgc2xpZGVzW2ldLnN3aXBlclNsaWRlU2l6ZSA9IHNsaWRlU2l6ZTtcbiAgICAgIH1cbiAgICAgIHNsaWRlc1NpemVzR3JpZC5wdXNoKHNsaWRlU2l6ZSk7XG5cblxuICAgICAgaWYgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgICBzbGlkZVBvc2l0aW9uID0gc2xpZGVQb3NpdGlvbiArIChzbGlkZVNpemUgLyAyKSArIChwcmV2U2xpZGVTaXplIC8gMikgKyBzcGFjZUJldHdlZW47XG4gICAgICAgIGlmIChwcmV2U2xpZGVTaXplID09PSAwICYmIGkgIT09IDApIHsgc2xpZGVQb3NpdGlvbiA9IHNsaWRlUG9zaXRpb24gLSAoc3dpcGVyU2l6ZSAvIDIpIC0gc3BhY2VCZXR3ZWVuOyB9XG4gICAgICAgIGlmIChpID09PSAwKSB7IHNsaWRlUG9zaXRpb24gPSBzbGlkZVBvc2l0aW9uIC0gKHN3aXBlclNpemUgLyAyKSAtIHNwYWNlQmV0d2VlbjsgfVxuICAgICAgICBpZiAoTWF0aC5hYnMoc2xpZGVQb3NpdGlvbikgPCAxIC8gMTAwMCkgeyBzbGlkZVBvc2l0aW9uID0gMDsgfVxuICAgICAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3RocykgeyBzbGlkZVBvc2l0aW9uID0gTWF0aC5mbG9vcihzbGlkZVBvc2l0aW9uKTsgfVxuICAgICAgICBpZiAoKGluZGV4KSAlIHBhcmFtcy5zbGlkZXNQZXJHcm91cCA9PT0gMCkgeyBzbmFwR3JpZC5wdXNoKHNsaWRlUG9zaXRpb24pOyB9XG4gICAgICAgIHNsaWRlc0dyaWQucHVzaChzbGlkZVBvc2l0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSB7IHNsaWRlUG9zaXRpb24gPSBNYXRoLmZsb29yKHNsaWRlUG9zaXRpb24pOyB9XG4gICAgICAgIGlmICgoaW5kZXggLSBNYXRoLm1pbihzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwU2tpcCwgaW5kZXgpKSAlIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXAgPT09IDApIHsgc25hcEdyaWQucHVzaChzbGlkZVBvc2l0aW9uKTsgfVxuICAgICAgICBzbGlkZXNHcmlkLnB1c2goc2xpZGVQb3NpdGlvbik7XG4gICAgICAgIHNsaWRlUG9zaXRpb24gPSBzbGlkZVBvc2l0aW9uICsgc2xpZGVTaXplICsgc3BhY2VCZXR3ZWVuO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIudmlydHVhbFNpemUgKz0gc2xpZGVTaXplICsgc3BhY2VCZXR3ZWVuO1xuXG4gICAgICBwcmV2U2xpZGVTaXplID0gc2xpZGVTaXplO1xuXG4gICAgICBpbmRleCArPSAxO1xuICAgIH1cbiAgICBzd2lwZXIudmlydHVhbFNpemUgPSBNYXRoLm1heChzd2lwZXIudmlydHVhbFNpemUsIHN3aXBlclNpemUpICsgb2Zmc2V0QWZ0ZXI7XG4gICAgdmFyIG5ld1NsaWRlc0dyaWQ7XG5cbiAgICBpZiAoXG4gICAgICBydGwgJiYgd3JvbmdSVEwgJiYgKHBhcmFtcy5lZmZlY3QgPT09ICdzbGlkZScgfHwgcGFyYW1zLmVmZmVjdCA9PT0gJ2NvdmVyZmxvdycpKSB7XG4gICAgICAkd3JhcHBlckVsLmNzcyh7IHdpZHRoOiAoKHN3aXBlci52aXJ0dWFsU2l6ZSArIHBhcmFtcy5zcGFjZUJldHdlZW4pICsgXCJweFwiKSB9KTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5zZXRXcmFwcGVyU2l6ZSkge1xuICAgICAgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSkgeyAkd3JhcHBlckVsLmNzcyh7IHdpZHRoOiAoKHN3aXBlci52aXJ0dWFsU2l6ZSArIHBhcmFtcy5zcGFjZUJldHdlZW4pICsgXCJweFwiKSB9KTsgfVxuICAgICAgZWxzZSB7ICR3cmFwcGVyRWwuY3NzKHsgaGVpZ2h0OiAoKHN3aXBlci52aXJ0dWFsU2l6ZSArIHBhcmFtcy5zcGFjZUJldHdlZW4pICsgXCJweFwiKSB9KTsgfVxuICAgIH1cblxuICAgIGlmIChwYXJhbXMuc2xpZGVzUGVyQ29sdW1uID4gMSkge1xuICAgICAgc3dpcGVyLnZpcnR1YWxTaXplID0gKHNsaWRlU2l6ZSArIHBhcmFtcy5zcGFjZUJldHdlZW4pICogc2xpZGVzTnVtYmVyRXZlblRvUm93cztcbiAgICAgIHN3aXBlci52aXJ0dWFsU2l6ZSA9IE1hdGguY2VpbChzd2lwZXIudmlydHVhbFNpemUgLyBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uKSAtIHBhcmFtcy5zcGFjZUJldHdlZW47XG4gICAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7ICR3cmFwcGVyRWwuY3NzKHsgd2lkdGg6ICgoc3dpcGVyLnZpcnR1YWxTaXplICsgcGFyYW1zLnNwYWNlQmV0d2VlbikgKyBcInB4XCIpIH0pOyB9XG4gICAgICBlbHNlIHsgJHdyYXBwZXJFbC5jc3MoeyBoZWlnaHQ6ICgoc3dpcGVyLnZpcnR1YWxTaXplICsgcGFyYW1zLnNwYWNlQmV0d2VlbikgKyBcInB4XCIpIH0pOyB9XG4gICAgICBpZiAocGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICAgIG5ld1NsaWRlc0dyaWQgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgc25hcEdyaWQubGVuZ3RoOyBpJDEgKz0gMSkge1xuICAgICAgICAgIHZhciBzbGlkZXNHcmlkSXRlbSA9IHNuYXBHcmlkW2kkMV07XG4gICAgICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHsgc2xpZGVzR3JpZEl0ZW0gPSBNYXRoLmZsb29yKHNsaWRlc0dyaWRJdGVtKTsgfVxuICAgICAgICAgIGlmIChzbmFwR3JpZFtpJDFdIDwgc3dpcGVyLnZpcnR1YWxTaXplICsgc25hcEdyaWRbMF0pIHsgbmV3U2xpZGVzR3JpZC5wdXNoKHNsaWRlc0dyaWRJdGVtKTsgfVxuICAgICAgICB9XG4gICAgICAgIHNuYXBHcmlkID0gbmV3U2xpZGVzR3JpZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgbGFzdCBncmlkIGVsZW1lbnRzIGRlcGVuZGluZyBvbiB3aWR0aFxuICAgIGlmICghcGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICBuZXdTbGlkZXNHcmlkID0gW107XG4gICAgICBmb3IgKHZhciBpJDIgPSAwOyBpJDIgPCBzbmFwR3JpZC5sZW5ndGg7IGkkMiArPSAxKSB7XG4gICAgICAgIHZhciBzbGlkZXNHcmlkSXRlbSQxID0gc25hcEdyaWRbaSQyXTtcbiAgICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHsgc2xpZGVzR3JpZEl0ZW0kMSA9IE1hdGguZmxvb3Ioc2xpZGVzR3JpZEl0ZW0kMSk7IH1cbiAgICAgICAgaWYgKHNuYXBHcmlkW2kkMl0gPD0gc3dpcGVyLnZpcnR1YWxTaXplIC0gc3dpcGVyU2l6ZSkge1xuICAgICAgICAgIG5ld1NsaWRlc0dyaWQucHVzaChzbGlkZXNHcmlkSXRlbSQxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc25hcEdyaWQgPSBuZXdTbGlkZXNHcmlkO1xuICAgICAgaWYgKE1hdGguZmxvb3Ioc3dpcGVyLnZpcnR1YWxTaXplIC0gc3dpcGVyU2l6ZSkgLSBNYXRoLmZsb29yKHNuYXBHcmlkW3NuYXBHcmlkLmxlbmd0aCAtIDFdKSA+IDEpIHtcbiAgICAgICAgc25hcEdyaWQucHVzaChzd2lwZXIudmlydHVhbFNpemUgLSBzd2lwZXJTaXplKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNuYXBHcmlkLmxlbmd0aCA9PT0gMCkgeyBzbmFwR3JpZCA9IFswXTsgfVxuXG4gICAgaWYgKHBhcmFtcy5zcGFjZUJldHdlZW4gIT09IDApIHtcbiAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgaWYgKHJ0bCkgeyBzbGlkZXMuZmlsdGVyKHNsaWRlc0Zvck1hcmdpbikuY3NzKHsgbWFyZ2luTGVmdDogKHNwYWNlQmV0d2VlbiArIFwicHhcIikgfSk7IH1cbiAgICAgICAgZWxzZSB7IHNsaWRlcy5maWx0ZXIoc2xpZGVzRm9yTWFyZ2luKS5jc3MoeyBtYXJnaW5SaWdodDogKHNwYWNlQmV0d2VlbiArIFwicHhcIikgfSk7IH1cbiAgICAgIH0gZWxzZSB7IHNsaWRlcy5maWx0ZXIoc2xpZGVzRm9yTWFyZ2luKS5jc3MoeyBtYXJnaW5Cb3R0b206IChzcGFjZUJldHdlZW4gKyBcInB4XCIpIH0pOyB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcyAmJiBwYXJhbXMuY2VudGVyZWRTbGlkZXNCb3VuZHMpIHtcbiAgICAgIHZhciBhbGxTbGlkZXNTaXplID0gMDtcbiAgICAgIHNsaWRlc1NpemVzR3JpZC5mb3JFYWNoKGZ1bmN0aW9uIChzbGlkZVNpemVWYWx1ZSkge1xuICAgICAgICBhbGxTbGlkZXNTaXplICs9IHNsaWRlU2l6ZVZhbHVlICsgKHBhcmFtcy5zcGFjZUJldHdlZW4gPyBwYXJhbXMuc3BhY2VCZXR3ZWVuIDogMCk7XG4gICAgICB9KTtcbiAgICAgIGFsbFNsaWRlc1NpemUgLT0gcGFyYW1zLnNwYWNlQmV0d2VlbjtcbiAgICAgIHZhciBtYXhTbmFwID0gYWxsU2xpZGVzU2l6ZSAtIHN3aXBlclNpemU7XG4gICAgICBzbmFwR3JpZCA9IHNuYXBHcmlkLm1hcChmdW5jdGlvbiAoc25hcCkge1xuICAgICAgICBpZiAoc25hcCA8IDApIHsgcmV0dXJuIC1vZmZzZXRCZWZvcmU7IH1cbiAgICAgICAgaWYgKHNuYXAgPiBtYXhTbmFwKSB7IHJldHVybiBtYXhTbmFwICsgb2Zmc2V0QWZ0ZXI7IH1cbiAgICAgICAgcmV0dXJuIHNuYXA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmNlbnRlckluc3VmZmljaWVudFNsaWRlcykge1xuICAgICAgdmFyIGFsbFNsaWRlc1NpemUkMSA9IDA7XG4gICAgICBzbGlkZXNTaXplc0dyaWQuZm9yRWFjaChmdW5jdGlvbiAoc2xpZGVTaXplVmFsdWUpIHtcbiAgICAgICAgYWxsU2xpZGVzU2l6ZSQxICs9IHNsaWRlU2l6ZVZhbHVlICsgKHBhcmFtcy5zcGFjZUJldHdlZW4gPyBwYXJhbXMuc3BhY2VCZXR3ZWVuIDogMCk7XG4gICAgICB9KTtcbiAgICAgIGFsbFNsaWRlc1NpemUkMSAtPSBwYXJhbXMuc3BhY2VCZXR3ZWVuO1xuICAgICAgaWYgKGFsbFNsaWRlc1NpemUkMSA8IHN3aXBlclNpemUpIHtcbiAgICAgICAgdmFyIGFsbFNsaWRlc09mZnNldCA9IChzd2lwZXJTaXplIC0gYWxsU2xpZGVzU2l6ZSQxKSAvIDI7XG4gICAgICAgIHNuYXBHcmlkLmZvckVhY2goZnVuY3Rpb24gKHNuYXAsIHNuYXBJbmRleCkge1xuICAgICAgICAgIHNuYXBHcmlkW3NuYXBJbmRleF0gPSBzbmFwIC0gYWxsU2xpZGVzT2Zmc2V0O1xuICAgICAgICB9KTtcbiAgICAgICAgc2xpZGVzR3JpZC5mb3JFYWNoKGZ1bmN0aW9uIChzbmFwLCBzbmFwSW5kZXgpIHtcbiAgICAgICAgICBzbGlkZXNHcmlkW3NuYXBJbmRleF0gPSBzbmFwICsgYWxsU2xpZGVzT2Zmc2V0O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICBzbGlkZXM6IHNsaWRlcyxcbiAgICAgIHNuYXBHcmlkOiBzbmFwR3JpZCxcbiAgICAgIHNsaWRlc0dyaWQ6IHNsaWRlc0dyaWQsXG4gICAgICBzbGlkZXNTaXplc0dyaWQ6IHNsaWRlc1NpemVzR3JpZCxcbiAgICB9KTtcblxuICAgIGlmIChzbGlkZXNMZW5ndGggIT09IHByZXZpb3VzU2xpZGVzTGVuZ3RoKSB7XG4gICAgICBzd2lwZXIuZW1pdCgnc2xpZGVzTGVuZ3RoQ2hhbmdlJyk7XG4gICAgfVxuICAgIGlmIChzbmFwR3JpZC5sZW5ndGggIT09IHByZXZpb3VzU25hcEdyaWRMZW5ndGgpIHtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cpIHsgc3dpcGVyLmNoZWNrT3ZlcmZsb3coKTsgfVxuICAgICAgc3dpcGVyLmVtaXQoJ3NuYXBHcmlkTGVuZ3RoQ2hhbmdlJyk7XG4gICAgfVxuICAgIGlmIChzbGlkZXNHcmlkLmxlbmd0aCAhPT0gcHJldmlvdXNTbGlkZXNHcmlkTGVuZ3RoKSB7XG4gICAgICBzd2lwZXIuZW1pdCgnc2xpZGVzR3JpZExlbmd0aENoYW5nZScpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMud2F0Y2hTbGlkZXNQcm9ncmVzcyB8fCBwYXJhbXMud2F0Y2hTbGlkZXNWaXNpYmlsaXR5KSB7XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzT2Zmc2V0KCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlQXV0b0hlaWdodCAoc3BlZWQpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgYWN0aXZlU2xpZGVzID0gW107XG4gICAgdmFyIG5ld0hlaWdodCA9IDA7XG4gICAgdmFyIGk7XG4gICAgaWYgKHR5cGVvZiBzcGVlZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKHNwZWVkKTtcbiAgICB9IGVsc2UgaWYgKHNwZWVkID09PSB0cnVlKSB7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihzd2lwZXIucGFyYW1zLnNwZWVkKTtcbiAgICB9XG4gICAgLy8gRmluZCBzbGlkZXMgY3VycmVudGx5IGluIHZpZXdcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3ICE9PSAnYXV0bycgJiYgc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3ID4gMSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IE1hdGguY2VpbChzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcpOyBpICs9IDEpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4ICsgaTtcbiAgICAgICAgaWYgKGluZGV4ID4gc3dpcGVyLnNsaWRlcy5sZW5ndGgpIHsgYnJlYWs7IH1cbiAgICAgICAgYWN0aXZlU2xpZGVzLnB1c2goc3dpcGVyLnNsaWRlcy5lcShpbmRleClbMF0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhY3RpdmVTbGlkZXMucHVzaChzd2lwZXIuc2xpZGVzLmVxKHN3aXBlci5hY3RpdmVJbmRleClbMF0pO1xuICAgIH1cblxuICAgIC8vIEZpbmQgbmV3IGhlaWdodCBmcm9tIGhpZ2hlc3Qgc2xpZGUgaW4gdmlld1xuICAgIGZvciAoaSA9IDA7IGkgPCBhY3RpdmVTbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICh0eXBlb2YgYWN0aXZlU2xpZGVzW2ldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB2YXIgaGVpZ2h0ID0gYWN0aXZlU2xpZGVzW2ldLm9mZnNldEhlaWdodDtcbiAgICAgICAgbmV3SGVpZ2h0ID0gaGVpZ2h0ID4gbmV3SGVpZ2h0ID8gaGVpZ2h0IDogbmV3SGVpZ2h0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBIZWlnaHRcbiAgICBpZiAobmV3SGVpZ2h0KSB7IHN3aXBlci4kd3JhcHBlckVsLmNzcygnaGVpZ2h0JywgKG5ld0hlaWdodCArIFwicHhcIikpOyB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVTbGlkZXNPZmZzZXQgKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBzbGlkZXNbaV0uc3dpcGVyU2xpZGVPZmZzZXQgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyBzbGlkZXNbaV0ub2Zmc2V0TGVmdCA6IHNsaWRlc1tpXS5vZmZzZXRUb3A7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlU2xpZGVzUHJvZ3Jlc3MgKHRyYW5zbGF0ZSkge1xuICAgIGlmICggdHJhbnNsYXRlID09PSB2b2lkIDAgKSB0cmFuc2xhdGUgPSAodGhpcyAmJiB0aGlzLnRyYW5zbGF0ZSkgfHwgMDtcblxuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuXG4gICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG4gICAgdmFyIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGU7XG5cbiAgICBpZiAoc2xpZGVzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cbiAgICBpZiAodHlwZW9mIHNsaWRlc1swXS5zd2lwZXJTbGlkZU9mZnNldCA9PT0gJ3VuZGVmaW5lZCcpIHsgc3dpcGVyLnVwZGF0ZVNsaWRlc09mZnNldCgpOyB9XG5cbiAgICB2YXIgb2Zmc2V0Q2VudGVyID0gLXRyYW5zbGF0ZTtcbiAgICBpZiAocnRsKSB7IG9mZnNldENlbnRlciA9IHRyYW5zbGF0ZTsgfVxuXG4gICAgLy8gVmlzaWJsZSBTbGlkZXNcbiAgICBzbGlkZXMucmVtb3ZlQ2xhc3MocGFyYW1zLnNsaWRlVmlzaWJsZUNsYXNzKTtcblxuICAgIHN3aXBlci52aXNpYmxlU2xpZGVzSW5kZXhlcyA9IFtdO1xuICAgIHN3aXBlci52aXNpYmxlU2xpZGVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIHNsaWRlID0gc2xpZGVzW2ldO1xuICAgICAgdmFyIHNsaWRlUHJvZ3Jlc3MgPSAoXG4gICAgICAgIChvZmZzZXRDZW50ZXIgKyAocGFyYW1zLmNlbnRlcmVkU2xpZGVzID8gc3dpcGVyLm1pblRyYW5zbGF0ZSgpIDogMCkpIC0gc2xpZGUuc3dpcGVyU2xpZGVPZmZzZXRcbiAgICAgICkgLyAoc2xpZGUuc3dpcGVyU2xpZGVTaXplICsgcGFyYW1zLnNwYWNlQmV0d2Vlbik7XG4gICAgICBpZiAocGFyYW1zLndhdGNoU2xpZGVzVmlzaWJpbGl0eSkge1xuICAgICAgICB2YXIgc2xpZGVCZWZvcmUgPSAtKG9mZnNldENlbnRlciAtIHNsaWRlLnN3aXBlclNsaWRlT2Zmc2V0KTtcbiAgICAgICAgdmFyIHNsaWRlQWZ0ZXIgPSBzbGlkZUJlZm9yZSArIHN3aXBlci5zbGlkZXNTaXplc0dyaWRbaV07XG4gICAgICAgIHZhciBpc1Zpc2libGUgPSAoc2xpZGVCZWZvcmUgPj0gMCAmJiBzbGlkZUJlZm9yZSA8IHN3aXBlci5zaXplIC0gMSlcbiAgICAgICAgICAgICAgICAgIHx8IChzbGlkZUFmdGVyID4gMSAmJiBzbGlkZUFmdGVyIDw9IHN3aXBlci5zaXplKVxuICAgICAgICAgICAgICAgICAgfHwgKHNsaWRlQmVmb3JlIDw9IDAgJiYgc2xpZGVBZnRlciA+PSBzd2lwZXIuc2l6ZSk7XG4gICAgICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgICAgICBzd2lwZXIudmlzaWJsZVNsaWRlcy5wdXNoKHNsaWRlKTtcbiAgICAgICAgICBzd2lwZXIudmlzaWJsZVNsaWRlc0luZGV4ZXMucHVzaChpKTtcbiAgICAgICAgICBzbGlkZXMuZXEoaSkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlVmlzaWJsZUNsYXNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2xpZGUucHJvZ3Jlc3MgPSBydGwgPyAtc2xpZGVQcm9ncmVzcyA6IHNsaWRlUHJvZ3Jlc3M7XG4gICAgfVxuICAgIHN3aXBlci52aXNpYmxlU2xpZGVzID0gJChzd2lwZXIudmlzaWJsZVNsaWRlcyk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVQcm9ncmVzcyAodHJhbnNsYXRlKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiB0cmFuc2xhdGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YXIgbXVsdGlwbGllciA9IHN3aXBlci5ydGxUcmFuc2xhdGUgPyAtMSA6IDE7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIHRyYW5zbGF0ZSA9IChzd2lwZXIgJiYgc3dpcGVyLnRyYW5zbGF0ZSAmJiAoc3dpcGVyLnRyYW5zbGF0ZSAqIG11bHRpcGxpZXIpKSB8fCAwO1xuICAgIH1cbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgdHJhbnNsYXRlc0RpZmYgPSBzd2lwZXIubWF4VHJhbnNsYXRlKCkgLSBzd2lwZXIubWluVHJhbnNsYXRlKCk7XG4gICAgdmFyIHByb2dyZXNzID0gc3dpcGVyLnByb2dyZXNzO1xuICAgIHZhciBpc0JlZ2lubmluZyA9IHN3aXBlci5pc0JlZ2lubmluZztcbiAgICB2YXIgaXNFbmQgPSBzd2lwZXIuaXNFbmQ7XG4gICAgdmFyIHdhc0JlZ2lubmluZyA9IGlzQmVnaW5uaW5nO1xuICAgIHZhciB3YXNFbmQgPSBpc0VuZDtcbiAgICBpZiAodHJhbnNsYXRlc0RpZmYgPT09IDApIHtcbiAgICAgIHByb2dyZXNzID0gMDtcbiAgICAgIGlzQmVnaW5uaW5nID0gdHJ1ZTtcbiAgICAgIGlzRW5kID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvZ3Jlc3MgPSAodHJhbnNsYXRlIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSAvICh0cmFuc2xhdGVzRGlmZik7XG4gICAgICBpc0JlZ2lubmluZyA9IHByb2dyZXNzIDw9IDA7XG4gICAgICBpc0VuZCA9IHByb2dyZXNzID49IDE7XG4gICAgfVxuICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgIHByb2dyZXNzOiBwcm9ncmVzcyxcbiAgICAgIGlzQmVnaW5uaW5nOiBpc0JlZ2lubmluZyxcbiAgICAgIGlzRW5kOiBpc0VuZCxcbiAgICB9KTtcblxuICAgIGlmIChwYXJhbXMud2F0Y2hTbGlkZXNQcm9ncmVzcyB8fCBwYXJhbXMud2F0Y2hTbGlkZXNWaXNpYmlsaXR5KSB7IHN3aXBlci51cGRhdGVTbGlkZXNQcm9ncmVzcyh0cmFuc2xhdGUpOyB9XG5cbiAgICBpZiAoaXNCZWdpbm5pbmcgJiYgIXdhc0JlZ2lubmluZykge1xuICAgICAgc3dpcGVyLmVtaXQoJ3JlYWNoQmVnaW5uaW5nIHRvRWRnZScpO1xuICAgIH1cbiAgICBpZiAoaXNFbmQgJiYgIXdhc0VuZCkge1xuICAgICAgc3dpcGVyLmVtaXQoJ3JlYWNoRW5kIHRvRWRnZScpO1xuICAgIH1cbiAgICBpZiAoKHdhc0JlZ2lubmluZyAmJiAhaXNCZWdpbm5pbmcpIHx8ICh3YXNFbmQgJiYgIWlzRW5kKSkge1xuICAgICAgc3dpcGVyLmVtaXQoJ2Zyb21FZGdlJyk7XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXQoJ3Byb2dyZXNzJywgcHJvZ3Jlc3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlU2xpZGVzQ2xhc3NlcyAoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG5cbiAgICB2YXIgc2xpZGVzID0gc3dpcGVyLnNsaWRlcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgIHZhciBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICB2YXIgcmVhbEluZGV4ID0gc3dpcGVyLnJlYWxJbmRleDtcbiAgICB2YXIgaXNWaXJ0dWFsID0gc3dpcGVyLnZpcnR1YWwgJiYgcGFyYW1zLnZpcnR1YWwuZW5hYmxlZDtcblxuICAgIHNsaWRlcy5yZW1vdmVDbGFzcygoKHBhcmFtcy5zbGlkZUFjdGl2ZUNsYXNzKSArIFwiIFwiICsgKHBhcmFtcy5zbGlkZU5leHRDbGFzcykgKyBcIiBcIiArIChwYXJhbXMuc2xpZGVQcmV2Q2xhc3MpICsgXCIgXCIgKyAocGFyYW1zLnNsaWRlRHVwbGljYXRlQWN0aXZlQ2xhc3MpICsgXCIgXCIgKyAocGFyYW1zLnNsaWRlRHVwbGljYXRlTmV4dENsYXNzKSArIFwiIFwiICsgKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZVByZXZDbGFzcykpKTtcblxuICAgIHZhciBhY3RpdmVTbGlkZTtcbiAgICBpZiAoaXNWaXJ0dWFsKSB7XG4gICAgICBhY3RpdmVTbGlkZSA9IHN3aXBlci4kd3JhcHBlckVsLmZpbmQoKFwiLlwiICsgKHBhcmFtcy5zbGlkZUNsYXNzKSArIFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIGFjdGl2ZUluZGV4ICsgXCJcXFwiXVwiKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjdGl2ZVNsaWRlID0gc2xpZGVzLmVxKGFjdGl2ZUluZGV4KTtcbiAgICB9XG5cbiAgICAvLyBBY3RpdmUgY2xhc3Nlc1xuICAgIGFjdGl2ZVNsaWRlLmFkZENsYXNzKHBhcmFtcy5zbGlkZUFjdGl2ZUNsYXNzKTtcblxuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgLy8gRHVwbGljYXRlIHRvIGFsbCBsb29wZWQgc2xpZGVzXG4gICAgICBpZiAoYWN0aXZlU2xpZGUuaGFzQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKSB7XG4gICAgICAgICR3cmFwcGVyRWxcbiAgICAgICAgICAuY2hpbGRyZW4oKFwiLlwiICsgKHBhcmFtcy5zbGlkZUNsYXNzKSArIFwiOm5vdCguXCIgKyAocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpICsgXCIpW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIHJlYWxJbmRleCArIFwiXFxcIl1cIikpXG4gICAgICAgICAgLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUFjdGl2ZUNsYXNzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICR3cmFwcGVyRWxcbiAgICAgICAgICAuY2hpbGRyZW4oKFwiLlwiICsgKHBhcmFtcy5zbGlkZUNsYXNzKSArIFwiLlwiICsgKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSArIFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIHJlYWxJbmRleCArIFwiXFxcIl1cIikpXG4gICAgICAgICAgLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUFjdGl2ZUNsYXNzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gTmV4dCBTbGlkZVxuICAgIHZhciBuZXh0U2xpZGUgPSBhY3RpdmVTbGlkZS5uZXh0QWxsKChcIi5cIiArIChwYXJhbXMuc2xpZGVDbGFzcykpKS5lcSgwKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVOZXh0Q2xhc3MpO1xuICAgIGlmIChwYXJhbXMubG9vcCAmJiBuZXh0U2xpZGUubGVuZ3RoID09PSAwKSB7XG4gICAgICBuZXh0U2xpZGUgPSBzbGlkZXMuZXEoMCk7XG4gICAgICBuZXh0U2xpZGUuYWRkQ2xhc3MocGFyYW1zLnNsaWRlTmV4dENsYXNzKTtcbiAgICB9XG4gICAgLy8gUHJldiBTbGlkZVxuICAgIHZhciBwcmV2U2xpZGUgPSBhY3RpdmVTbGlkZS5wcmV2QWxsKChcIi5cIiArIChwYXJhbXMuc2xpZGVDbGFzcykpKS5lcSgwKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVQcmV2Q2xhc3MpO1xuICAgIGlmIChwYXJhbXMubG9vcCAmJiBwcmV2U2xpZGUubGVuZ3RoID09PSAwKSB7XG4gICAgICBwcmV2U2xpZGUgPSBzbGlkZXMuZXEoLTEpO1xuICAgICAgcHJldlNsaWRlLmFkZENsYXNzKHBhcmFtcy5zbGlkZVByZXZDbGFzcyk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgLy8gRHVwbGljYXRlIHRvIGFsbCBsb29wZWQgc2xpZGVzXG4gICAgICBpZiAobmV4dFNsaWRlLmhhc0NsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSkge1xuICAgICAgICAkd3JhcHBlckVsXG4gICAgICAgICAgLmNoaWxkcmVuKChcIi5cIiArIChwYXJhbXMuc2xpZGVDbGFzcykgKyBcIjpub3QoLlwiICsgKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSArIFwiKVtkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyAobmV4dFNsaWRlLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JykpICsgXCJcXFwiXVwiKSlcbiAgICAgICAgICAuYWRkQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlTmV4dENsYXNzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICR3cmFwcGVyRWxcbiAgICAgICAgICAuY2hpbGRyZW4oKFwiLlwiICsgKHBhcmFtcy5zbGlkZUNsYXNzKSArIFwiLlwiICsgKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSArIFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIChuZXh0U2xpZGUuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSkgKyBcIlxcXCJdXCIpKVxuICAgICAgICAgIC5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVOZXh0Q2xhc3MpO1xuICAgICAgfVxuICAgICAgaWYgKHByZXZTbGlkZS5oYXNDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpIHtcbiAgICAgICAgJHdyYXBwZXJFbFxuICAgICAgICAgIC5jaGlsZHJlbigoXCIuXCIgKyAocGFyYW1zLnNsaWRlQ2xhc3MpICsgXCI6bm90KC5cIiArIChwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykgKyBcIilbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgKHByZXZTbGlkZS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpKSArIFwiXFxcIl1cIikpXG4gICAgICAgICAgLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZVByZXZDbGFzcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkd3JhcHBlckVsXG4gICAgICAgICAgLmNoaWxkcmVuKChcIi5cIiArIChwYXJhbXMuc2xpZGVDbGFzcykgKyBcIi5cIiArIChwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykgKyBcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyAocHJldlNsaWRlLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JykpICsgXCJcXFwiXVwiKSlcbiAgICAgICAgICAuYWRkQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlUHJldkNsYXNzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVBY3RpdmVJbmRleCAobmV3QWN0aXZlSW5kZXgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgdHJhbnNsYXRlID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSA/IHN3aXBlci50cmFuc2xhdGUgOiAtc3dpcGVyLnRyYW5zbGF0ZTtcbiAgICB2YXIgc2xpZGVzR3JpZCA9IHN3aXBlci5zbGlkZXNHcmlkO1xuICAgIHZhciBzbmFwR3JpZCA9IHN3aXBlci5zbmFwR3JpZDtcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgcHJldmlvdXNJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICB2YXIgcHJldmlvdXNSZWFsSW5kZXggPSBzd2lwZXIucmVhbEluZGV4O1xuICAgIHZhciBwcmV2aW91c1NuYXBJbmRleCA9IHN3aXBlci5zbmFwSW5kZXg7XG4gICAgdmFyIGFjdGl2ZUluZGV4ID0gbmV3QWN0aXZlSW5kZXg7XG4gICAgdmFyIHNuYXBJbmRleDtcbiAgICBpZiAodHlwZW9mIGFjdGl2ZUluZGV4ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXNHcmlkLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2xpZGVzR3JpZFtpICsgMV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgaWYgKHRyYW5zbGF0ZSA+PSBzbGlkZXNHcmlkW2ldICYmIHRyYW5zbGF0ZSA8IHNsaWRlc0dyaWRbaSArIDFdIC0gKChzbGlkZXNHcmlkW2kgKyAxXSAtIHNsaWRlc0dyaWRbaV0pIC8gMikpIHtcbiAgICAgICAgICAgIGFjdGl2ZUluZGV4ID0gaTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRyYW5zbGF0ZSA+PSBzbGlkZXNHcmlkW2ldICYmIHRyYW5zbGF0ZSA8IHNsaWRlc0dyaWRbaSArIDFdKSB7XG4gICAgICAgICAgICBhY3RpdmVJbmRleCA9IGkgKyAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0cmFuc2xhdGUgPj0gc2xpZGVzR3JpZFtpXSkge1xuICAgICAgICAgIGFjdGl2ZUluZGV4ID0gaTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gTm9ybWFsaXplIHNsaWRlSW5kZXhcbiAgICAgIGlmIChwYXJhbXMubm9ybWFsaXplU2xpZGVJbmRleCkge1xuICAgICAgICBpZiAoYWN0aXZlSW5kZXggPCAwIHx8IHR5cGVvZiBhY3RpdmVJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHsgYWN0aXZlSW5kZXggPSAwOyB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzbmFwR3JpZC5pbmRleE9mKHRyYW5zbGF0ZSkgPj0gMCkge1xuICAgICAgc25hcEluZGV4ID0gc25hcEdyaWQuaW5kZXhPZih0cmFuc2xhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc2tpcCA9IE1hdGgubWluKHBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAsIGFjdGl2ZUluZGV4KTtcbiAgICAgIHNuYXBJbmRleCA9IHNraXAgKyBNYXRoLmZsb29yKChhY3RpdmVJbmRleCAtIHNraXApIC8gcGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcbiAgICB9XG4gICAgaWYgKHNuYXBJbmRleCA+PSBzbmFwR3JpZC5sZW5ndGgpIHsgc25hcEluZGV4ID0gc25hcEdyaWQubGVuZ3RoIC0gMTsgfVxuICAgIGlmIChhY3RpdmVJbmRleCA9PT0gcHJldmlvdXNJbmRleCkge1xuICAgICAgaWYgKHNuYXBJbmRleCAhPT0gcHJldmlvdXNTbmFwSW5kZXgpIHtcbiAgICAgICAgc3dpcGVyLnNuYXBJbmRleCA9IHNuYXBJbmRleDtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3NuYXBJbmRleENoYW5nZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdldCByZWFsIGluZGV4XG4gICAgdmFyIHJlYWxJbmRleCA9IHBhcnNlSW50KHN3aXBlci5zbGlkZXMuZXEoYWN0aXZlSW5kZXgpLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JykgfHwgYWN0aXZlSW5kZXgsIDEwKTtcblxuICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgIHNuYXBJbmRleDogc25hcEluZGV4LFxuICAgICAgcmVhbEluZGV4OiByZWFsSW5kZXgsXG4gICAgICBwcmV2aW91c0luZGV4OiBwcmV2aW91c0luZGV4LFxuICAgICAgYWN0aXZlSW5kZXg6IGFjdGl2ZUluZGV4LFxuICAgIH0pO1xuICAgIHN3aXBlci5lbWl0KCdhY3RpdmVJbmRleENoYW5nZScpO1xuICAgIHN3aXBlci5lbWl0KCdzbmFwSW5kZXhDaGFuZ2UnKTtcbiAgICBpZiAocHJldmlvdXNSZWFsSW5kZXggIT09IHJlYWxJbmRleCkge1xuICAgICAgc3dpcGVyLmVtaXQoJ3JlYWxJbmRleENoYW5nZScpO1xuICAgIH1cbiAgICBpZiAoc3dpcGVyLmluaXRpYWxpemVkIHx8IHN3aXBlci5ydW5DYWxsYmFja3NPbkluaXQpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdzbGlkZUNoYW5nZScpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUNsaWNrZWRTbGlkZSAoZSkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgIHZhciBzbGlkZSA9ICQoZS50YXJnZXQpLmNsb3Nlc3QoKFwiLlwiICsgKHBhcmFtcy5zbGlkZUNsYXNzKSkpWzBdO1xuICAgIHZhciBzbGlkZUZvdW5kID0gZmFsc2U7XG4gICAgaWYgKHNsaWRlKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN3aXBlci5zbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKHN3aXBlci5zbGlkZXNbaV0gPT09IHNsaWRlKSB7IHNsaWRlRm91bmQgPSB0cnVlOyB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNsaWRlICYmIHNsaWRlRm91bmQpIHtcbiAgICAgIHN3aXBlci5jbGlja2VkU2xpZGUgPSBzbGlkZTtcbiAgICAgIGlmIChzd2lwZXIudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCkge1xuICAgICAgICBzd2lwZXIuY2xpY2tlZEluZGV4ID0gcGFyc2VJbnQoJChzbGlkZSkuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSwgMTApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLmNsaWNrZWRJbmRleCA9ICQoc2xpZGUpLmluZGV4KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5jbGlja2VkU2xpZGUgPSB1bmRlZmluZWQ7XG4gICAgICBzd2lwZXIuY2xpY2tlZEluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLnNsaWRlVG9DbGlja2VkU2xpZGUgJiYgc3dpcGVyLmNsaWNrZWRJbmRleCAhPT0gdW5kZWZpbmVkICYmIHN3aXBlci5jbGlja2VkSW5kZXggIT09IHN3aXBlci5hY3RpdmVJbmRleCkge1xuICAgICAgc3dpcGVyLnNsaWRlVG9DbGlja2VkU2xpZGUoKTtcbiAgICB9XG4gIH1cblxuICB2YXIgdXBkYXRlID0ge1xuICAgIHVwZGF0ZVNpemU6IHVwZGF0ZVNpemUsXG4gICAgdXBkYXRlU2xpZGVzOiB1cGRhdGVTbGlkZXMsXG4gICAgdXBkYXRlQXV0b0hlaWdodDogdXBkYXRlQXV0b0hlaWdodCxcbiAgICB1cGRhdGVTbGlkZXNPZmZzZXQ6IHVwZGF0ZVNsaWRlc09mZnNldCxcbiAgICB1cGRhdGVTbGlkZXNQcm9ncmVzczogdXBkYXRlU2xpZGVzUHJvZ3Jlc3MsXG4gICAgdXBkYXRlUHJvZ3Jlc3M6IHVwZGF0ZVByb2dyZXNzLFxuICAgIHVwZGF0ZVNsaWRlc0NsYXNzZXM6IHVwZGF0ZVNsaWRlc0NsYXNzZXMsXG4gICAgdXBkYXRlQWN0aXZlSW5kZXg6IHVwZGF0ZUFjdGl2ZUluZGV4LFxuICAgIHVwZGF0ZUNsaWNrZWRTbGlkZTogdXBkYXRlQ2xpY2tlZFNsaWRlLFxuICB9O1xuXG4gIGZ1bmN0aW9uIGdldFRyYW5zbGF0ZSAoYXhpcykge1xuICAgIGlmICggYXhpcyA9PT0gdm9pZCAwICkgYXhpcyA9IHRoaXMuaXNIb3Jpem9udGFsKCkgPyAneCcgOiAneSc7XG5cbiAgICB2YXIgc3dpcGVyID0gdGhpcztcblxuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgIHZhciBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlO1xuICAgIHZhciB0cmFuc2xhdGUgPSBzd2lwZXIudHJhbnNsYXRlO1xuICAgIHZhciAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7XG5cbiAgICBpZiAocGFyYW1zLnZpcnR1YWxUcmFuc2xhdGUpIHtcbiAgICAgIHJldHVybiBydGwgPyAtdHJhbnNsYXRlIDogdHJhbnNsYXRlO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHJldHVybiB0cmFuc2xhdGU7XG4gICAgfVxuXG4gICAgdmFyIGN1cnJlbnRUcmFuc2xhdGUgPSBVdGlscy5nZXRUcmFuc2xhdGUoJHdyYXBwZXJFbFswXSwgYXhpcyk7XG4gICAgaWYgKHJ0bCkgeyBjdXJyZW50VHJhbnNsYXRlID0gLWN1cnJlbnRUcmFuc2xhdGU7IH1cblxuICAgIHJldHVybiBjdXJyZW50VHJhbnNsYXRlIHx8IDA7XG4gIH1cblxuICBmdW5jdGlvbiBzZXRUcmFuc2xhdGUgKHRyYW5zbGF0ZSwgYnlDb250cm9sbGVyKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGU7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcbiAgICB2YXIgd3JhcHBlckVsID0gc3dpcGVyLndyYXBwZXJFbDtcbiAgICB2YXIgcHJvZ3Jlc3MgPSBzd2lwZXIucHJvZ3Jlc3M7XG4gICAgdmFyIHggPSAwO1xuICAgIHZhciB5ID0gMDtcbiAgICB2YXIgeiA9IDA7XG5cbiAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICB4ID0gcnRsID8gLXRyYW5zbGF0ZSA6IHRyYW5zbGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgeSA9IHRyYW5zbGF0ZTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3Rocykge1xuICAgICAgeCA9IE1hdGguZmxvb3IoeCk7XG4gICAgICB5ID0gTWF0aC5mbG9vcih5KTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHdyYXBwZXJFbFtzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnc2Nyb2xsTGVmdCcgOiAnc2Nyb2xsVG9wJ10gPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAteCA6IC15O1xuICAgIH0gZWxzZSBpZiAoIXBhcmFtcy52aXJ0dWFsVHJhbnNsYXRlKSB7XG4gICAgICAkd3JhcHBlckVsLnRyYW5zZm9ybSgoXCJ0cmFuc2xhdGUzZChcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4LCBcIiArIHogKyBcInB4KVwiKSk7XG4gICAgfVxuICAgIHN3aXBlci5wcmV2aW91c1RyYW5zbGF0ZSA9IHN3aXBlci50cmFuc2xhdGU7XG4gICAgc3dpcGVyLnRyYW5zbGF0ZSA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IHggOiB5O1xuXG4gICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byB1cGRhdGUgcHJvZ3Jlc3NcbiAgICB2YXIgbmV3UHJvZ3Jlc3M7XG4gICAgdmFyIHRyYW5zbGF0ZXNEaWZmID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuICAgIGlmICh0cmFuc2xhdGVzRGlmZiA9PT0gMCkge1xuICAgICAgbmV3UHJvZ3Jlc3MgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdQcm9ncmVzcyA9ICh0cmFuc2xhdGUgLSBzd2lwZXIubWluVHJhbnNsYXRlKCkpIC8gKHRyYW5zbGF0ZXNEaWZmKTtcbiAgICB9XG4gICAgaWYgKG5ld1Byb2dyZXNzICE9PSBwcm9ncmVzcykge1xuICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKHRyYW5zbGF0ZSk7XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXQoJ3NldFRyYW5zbGF0ZScsIHN3aXBlci50cmFuc2xhdGUsIGJ5Q29udHJvbGxlcik7XG4gIH1cblxuICBmdW5jdGlvbiBtaW5UcmFuc2xhdGUgKCkge1xuICAgIHJldHVybiAoLXRoaXMuc25hcEdyaWRbMF0pO1xuICB9XG5cbiAgZnVuY3Rpb24gbWF4VHJhbnNsYXRlICgpIHtcbiAgICByZXR1cm4gKC10aGlzLnNuYXBHcmlkW3RoaXMuc25hcEdyaWQubGVuZ3RoIC0gMV0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNsYXRlVG8gKHRyYW5zbGF0ZSwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgdHJhbnNsYXRlQm91bmRzLCBpbnRlcm5hbCkge1xuICAgIHZhciBvYmo7XG5cbiAgICBpZiAoIHRyYW5zbGF0ZSA9PT0gdm9pZCAwICkgdHJhbnNsYXRlID0gMDtcbiAgICBpZiAoIHNwZWVkID09PSB2b2lkIDAgKSBzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkO1xuICAgIGlmICggcnVuQ2FsbGJhY2tzID09PSB2b2lkIDAgKSBydW5DYWxsYmFja3MgPSB0cnVlO1xuICAgIGlmICggdHJhbnNsYXRlQm91bmRzID09PSB2b2lkIDAgKSB0cmFuc2xhdGVCb3VuZHMgPSB0cnVlO1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuXG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIHdyYXBwZXJFbCA9IHN3aXBlci53cmFwcGVyRWw7XG5cbiAgICBpZiAoc3dpcGVyLmFuaW1hdGluZyAmJiBwYXJhbXMucHJldmVudEludGVyYWN0aW9uT25UcmFuc2l0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIG1pblRyYW5zbGF0ZSA9IHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgICB2YXIgbWF4VHJhbnNsYXRlID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpO1xuICAgIHZhciBuZXdUcmFuc2xhdGU7XG4gICAgaWYgKHRyYW5zbGF0ZUJvdW5kcyAmJiB0cmFuc2xhdGUgPiBtaW5UcmFuc2xhdGUpIHsgbmV3VHJhbnNsYXRlID0gbWluVHJhbnNsYXRlOyB9XG4gICAgZWxzZSBpZiAodHJhbnNsYXRlQm91bmRzICYmIHRyYW5zbGF0ZSA8IG1heFRyYW5zbGF0ZSkgeyBuZXdUcmFuc2xhdGUgPSBtYXhUcmFuc2xhdGU7IH1cbiAgICBlbHNlIHsgbmV3VHJhbnNsYXRlID0gdHJhbnNsYXRlOyB9XG5cbiAgICAvLyBVcGRhdGUgcHJvZ3Jlc3NcbiAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MobmV3VHJhbnNsYXRlKTtcblxuICAgIGlmIChwYXJhbXMuY3NzTW9kZSkge1xuICAgICAgdmFyIGlzSCA9IHN3aXBlci5pc0hvcml6b250YWwoKTtcbiAgICAgIGlmIChzcGVlZCA9PT0gMCkge1xuICAgICAgICB3cmFwcGVyRWxbaXNIID8gJ3Njcm9sbExlZnQnIDogJ3Njcm9sbFRvcCddID0gLW5ld1RyYW5zbGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICBpZiAod3JhcHBlckVsLnNjcm9sbFRvKSB7XG4gICAgICAgICAgd3JhcHBlckVsLnNjcm9sbFRvKCggb2JqID0ge30sIG9ialtpc0ggPyAnbGVmdCcgOiAndG9wJ10gPSAtbmV3VHJhbnNsYXRlLCBvYmouYmVoYXZpb3IgPSAnc21vb3RoJywgb2JqICkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdyYXBwZXJFbFtpc0ggPyAnc2Nyb2xsTGVmdCcgOiAnc2Nyb2xsVG9wJ10gPSAtbmV3VHJhbnNsYXRlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3BlZWQgPT09IDApIHtcbiAgICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKDApO1xuICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShuZXdUcmFuc2xhdGUpO1xuICAgICAgaWYgKHJ1bkNhbGxiYWNrcykge1xuICAgICAgICBzd2lwZXIuZW1pdCgnYmVmb3JlVHJhbnNpdGlvblN0YXJ0Jywgc3BlZWQsIGludGVybmFsKTtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3RyYW5zaXRpb25FbmQnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLnNldFRyYW5zaXRpb24oc3BlZWQpO1xuICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShuZXdUcmFuc2xhdGUpO1xuICAgICAgaWYgKHJ1bkNhbGxiYWNrcykge1xuICAgICAgICBzd2lwZXIuZW1pdCgnYmVmb3JlVHJhbnNpdGlvblN0YXJ0Jywgc3BlZWQsIGludGVybmFsKTtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3RyYW5zaXRpb25TdGFydCcpO1xuICAgICAgfVxuICAgICAgaWYgKCFzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICAgIHN3aXBlci5hbmltYXRpbmcgPSB0cnVlO1xuICAgICAgICBpZiAoIXN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpIHtcbiAgICAgICAgICBzd2lwZXIub25UcmFuc2xhdGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kID0gZnVuY3Rpb24gdHJhbnNpdGlvbkVuZChlKSB7XG4gICAgICAgICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgaWYgKGUudGFyZ2V0ICE9PSB0aGlzKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2Via2l0VHJhbnNpdGlvbkVuZCcsIHN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCA9IG51bGw7XG4gICAgICAgICAgICBkZWxldGUgc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZDtcbiAgICAgICAgICAgIGlmIChydW5DYWxsYmFja3MpIHtcbiAgICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ3RyYW5zaXRpb25FbmQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBzd2lwZXIub25UcmFuc2xhdGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKTtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0uYWRkRXZlbnRMaXN0ZW5lcignd2Via2l0VHJhbnNpdGlvbkVuZCcsIHN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdmFyIHRyYW5zbGF0ZSA9IHtcbiAgICBnZXRUcmFuc2xhdGU6IGdldFRyYW5zbGF0ZSxcbiAgICBzZXRUcmFuc2xhdGU6IHNldFRyYW5zbGF0ZSxcbiAgICBtaW5UcmFuc2xhdGU6IG1pblRyYW5zbGF0ZSxcbiAgICBtYXhUcmFuc2xhdGU6IG1heFRyYW5zbGF0ZSxcbiAgICB0cmFuc2xhdGVUbzogdHJhbnNsYXRlVG8sXG4gIH07XG5cbiAgZnVuY3Rpb24gc2V0VHJhbnNpdGlvbiAoZHVyYXRpb24sIGJ5Q29udHJvbGxlcikge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuXG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHN3aXBlci4kd3JhcHBlckVsLnRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgIH1cblxuICAgIHN3aXBlci5lbWl0KCdzZXRUcmFuc2l0aW9uJywgZHVyYXRpb24sIGJ5Q29udHJvbGxlcik7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2l0aW9uU3RhcnQgKHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKSB7XG4gICAgaWYgKCBydW5DYWxsYmFja3MgPT09IHZvaWQgMCApIHJ1bkNhbGxiYWNrcyA9IHRydWU7XG5cbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIHByZXZpb3VzSW5kZXggPSBzd2lwZXIucHJldmlvdXNJbmRleDtcbiAgICBpZiAocGFyYW1zLmNzc01vZGUpIHsgcmV0dXJuOyB9XG4gICAgaWYgKHBhcmFtcy5hdXRvSGVpZ2h0KSB7XG4gICAgICBzd2lwZXIudXBkYXRlQXV0b0hlaWdodCgpO1xuICAgIH1cblxuICAgIHZhciBkaXIgPSBkaXJlY3Rpb247XG4gICAgaWYgKCFkaXIpIHtcbiAgICAgIGlmIChhY3RpdmVJbmRleCA+IHByZXZpb3VzSW5kZXgpIHsgZGlyID0gJ25leHQnOyB9XG4gICAgICBlbHNlIGlmIChhY3RpdmVJbmRleCA8IHByZXZpb3VzSW5kZXgpIHsgZGlyID0gJ3ByZXYnOyB9XG4gICAgICBlbHNlIHsgZGlyID0gJ3Jlc2V0JzsgfVxuICAgIH1cblxuICAgIHN3aXBlci5lbWl0KCd0cmFuc2l0aW9uU3RhcnQnKTtcblxuICAgIGlmIChydW5DYWxsYmFja3MgJiYgYWN0aXZlSW5kZXggIT09IHByZXZpb3VzSW5kZXgpIHtcbiAgICAgIGlmIChkaXIgPT09ICdyZXNldCcpIHtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlUmVzZXRUcmFuc2l0aW9uU3RhcnQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlQ2hhbmdlVHJhbnNpdGlvblN0YXJ0Jyk7XG4gICAgICBpZiAoZGlyID09PSAnbmV4dCcpIHtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlTmV4dFRyYW5zaXRpb25TdGFydCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlUHJldlRyYW5zaXRpb25TdGFydCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zaXRpb25FbmQkMSAocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pIHtcbiAgICBpZiAoIHJ1bkNhbGxiYWNrcyA9PT0gdm9pZCAwICkgcnVuQ2FsbGJhY2tzID0gdHJ1ZTtcblxuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICB2YXIgcHJldmlvdXNJbmRleCA9IHN3aXBlci5wcmV2aW91c0luZGV4O1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgIHN3aXBlci5hbmltYXRpbmcgPSBmYWxzZTtcbiAgICBpZiAocGFyYW1zLmNzc01vZGUpIHsgcmV0dXJuOyB9XG4gICAgc3dpcGVyLnNldFRyYW5zaXRpb24oMCk7XG5cbiAgICB2YXIgZGlyID0gZGlyZWN0aW9uO1xuICAgIGlmICghZGlyKSB7XG4gICAgICBpZiAoYWN0aXZlSW5kZXggPiBwcmV2aW91c0luZGV4KSB7IGRpciA9ICduZXh0JzsgfVxuICAgICAgZWxzZSBpZiAoYWN0aXZlSW5kZXggPCBwcmV2aW91c0luZGV4KSB7IGRpciA9ICdwcmV2JzsgfVxuICAgICAgZWxzZSB7IGRpciA9ICdyZXNldCc7IH1cbiAgICB9XG5cbiAgICBzd2lwZXIuZW1pdCgndHJhbnNpdGlvbkVuZCcpO1xuXG4gICAgaWYgKHJ1bkNhbGxiYWNrcyAmJiBhY3RpdmVJbmRleCAhPT0gcHJldmlvdXNJbmRleCkge1xuICAgICAgaWYgKGRpciA9PT0gJ3Jlc2V0Jykge1xuICAgICAgICBzd2lwZXIuZW1pdCgnc2xpZGVSZXNldFRyYW5zaXRpb25FbmQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlQ2hhbmdlVHJhbnNpdGlvbkVuZCcpO1xuICAgICAgaWYgKGRpciA9PT0gJ25leHQnKSB7XG4gICAgICAgIHN3aXBlci5lbWl0KCdzbGlkZU5leHRUcmFuc2l0aW9uRW5kJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIuZW1pdCgnc2xpZGVQcmV2VHJhbnNpdGlvbkVuZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciB0cmFuc2l0aW9uJDEgPSB7XG4gICAgc2V0VHJhbnNpdGlvbjogc2V0VHJhbnNpdGlvbixcbiAgICB0cmFuc2l0aW9uU3RhcnQ6IHRyYW5zaXRpb25TdGFydCxcbiAgICB0cmFuc2l0aW9uRW5kOiB0cmFuc2l0aW9uRW5kJDEsXG4gIH07XG5cbiAgZnVuY3Rpb24gc2xpZGVUbyAoaW5kZXgsIHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKSB7XG4gICAgdmFyIG9iajtcblxuICAgIGlmICggaW5kZXggPT09IHZvaWQgMCApIGluZGV4ID0gMDtcbiAgICBpZiAoIHNwZWVkID09PSB2b2lkIDAgKSBzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkO1xuICAgIGlmICggcnVuQ2FsbGJhY2tzID09PSB2b2lkIDAgKSBydW5DYWxsYmFja3MgPSB0cnVlO1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBzbGlkZUluZGV4ID0gaW5kZXg7XG4gICAgaWYgKHNsaWRlSW5kZXggPCAwKSB7IHNsaWRlSW5kZXggPSAwOyB9XG5cbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgc25hcEdyaWQgPSBzd2lwZXIuc25hcEdyaWQ7XG4gICAgdmFyIHNsaWRlc0dyaWQgPSBzd2lwZXIuc2xpZGVzR3JpZDtcbiAgICB2YXIgcHJldmlvdXNJbmRleCA9IHN3aXBlci5wcmV2aW91c0luZGV4O1xuICAgIHZhciBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICB2YXIgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZTtcbiAgICB2YXIgd3JhcHBlckVsID0gc3dpcGVyLndyYXBwZXJFbDtcbiAgICBpZiAoc3dpcGVyLmFuaW1hdGluZyAmJiBwYXJhbXMucHJldmVudEludGVyYWN0aW9uT25UcmFuc2l0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHNraXAgPSBNYXRoLm1pbihzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwU2tpcCwgc2xpZGVJbmRleCk7XG4gICAgdmFyIHNuYXBJbmRleCA9IHNraXAgKyBNYXRoLmZsb29yKChzbGlkZUluZGV4IC0gc2tpcCkgLyBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcbiAgICBpZiAoc25hcEluZGV4ID49IHNuYXBHcmlkLmxlbmd0aCkgeyBzbmFwSW5kZXggPSBzbmFwR3JpZC5sZW5ndGggLSAxOyB9XG5cbiAgICBpZiAoKGFjdGl2ZUluZGV4IHx8IHBhcmFtcy5pbml0aWFsU2xpZGUgfHwgMCkgPT09IChwcmV2aW91c0luZGV4IHx8IDApICYmIHJ1bkNhbGxiYWNrcykge1xuICAgICAgc3dpcGVyLmVtaXQoJ2JlZm9yZVNsaWRlQ2hhbmdlU3RhcnQnKTtcbiAgICB9XG5cbiAgICB2YXIgdHJhbnNsYXRlID0gLXNuYXBHcmlkW3NuYXBJbmRleF07XG5cbiAgICAvLyBVcGRhdGUgcHJvZ3Jlc3NcbiAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3ModHJhbnNsYXRlKTtcblxuICAgIC8vIE5vcm1hbGl6ZSBzbGlkZUluZGV4XG4gICAgaWYgKHBhcmFtcy5ub3JtYWxpemVTbGlkZUluZGV4KSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlc0dyaWQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKC1NYXRoLmZsb29yKHRyYW5zbGF0ZSAqIDEwMCkgPj0gTWF0aC5mbG9vcihzbGlkZXNHcmlkW2ldICogMTAwKSkge1xuICAgICAgICAgIHNsaWRlSW5kZXggPSBpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIERpcmVjdGlvbnMgbG9ja3NcbiAgICBpZiAoc3dpcGVyLmluaXRpYWxpemVkICYmIHNsaWRlSW5kZXggIT09IGFjdGl2ZUluZGV4KSB7XG4gICAgICBpZiAoIXN3aXBlci5hbGxvd1NsaWRlTmV4dCAmJiB0cmFuc2xhdGUgPCBzd2lwZXIudHJhbnNsYXRlICYmIHRyYW5zbGF0ZSA8IHN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIXN3aXBlci5hbGxvd1NsaWRlUHJldiAmJiB0cmFuc2xhdGUgPiBzd2lwZXIudHJhbnNsYXRlICYmIHRyYW5zbGF0ZSA+IHN3aXBlci5tYXhUcmFuc2xhdGUoKSkge1xuICAgICAgICBpZiAoKGFjdGl2ZUluZGV4IHx8IDApICE9PSBzbGlkZUluZGV4KSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkaXJlY3Rpb247XG4gICAgaWYgKHNsaWRlSW5kZXggPiBhY3RpdmVJbmRleCkgeyBkaXJlY3Rpb24gPSAnbmV4dCc7IH1cbiAgICBlbHNlIGlmIChzbGlkZUluZGV4IDwgYWN0aXZlSW5kZXgpIHsgZGlyZWN0aW9uID0gJ3ByZXYnOyB9XG4gICAgZWxzZSB7IGRpcmVjdGlvbiA9ICdyZXNldCc7IH1cblxuXG4gICAgLy8gVXBkYXRlIEluZGV4XG4gICAgaWYgKChydGwgJiYgLXRyYW5zbGF0ZSA9PT0gc3dpcGVyLnRyYW5zbGF0ZSkgfHwgKCFydGwgJiYgdHJhbnNsYXRlID09PSBzd2lwZXIudHJhbnNsYXRlKSkge1xuICAgICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KHNsaWRlSW5kZXgpO1xuICAgICAgLy8gVXBkYXRlIEhlaWdodFxuICAgICAgaWYgKHBhcmFtcy5hdXRvSGVpZ2h0KSB7XG4gICAgICAgIHN3aXBlci51cGRhdGVBdXRvSGVpZ2h0KCk7XG4gICAgICB9XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgICAgaWYgKHBhcmFtcy5lZmZlY3QgIT09ICdzbGlkZScpIHtcbiAgICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZSh0cmFuc2xhdGUpO1xuICAgICAgfVxuICAgICAgaWYgKGRpcmVjdGlvbiAhPT0gJ3Jlc2V0Jykge1xuICAgICAgICBzd2lwZXIudHJhbnNpdGlvblN0YXJ0KHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcbiAgICAgICAgc3dpcGVyLnRyYW5zaXRpb25FbmQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHZhciBpc0ggPSBzd2lwZXIuaXNIb3Jpem9udGFsKCk7XG4gICAgICBpZiAoc3BlZWQgPT09IDApIHtcbiAgICAgICAgd3JhcHBlckVsW2lzSCA/ICdzY3JvbGxMZWZ0JyA6ICdzY3JvbGxUb3AnXSA9IC10cmFuc2xhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgaWYgKHdyYXBwZXJFbC5zY3JvbGxUbykge1xuICAgICAgICAgIHdyYXBwZXJFbC5zY3JvbGxUbygoIG9iaiA9IHt9LCBvYmpbaXNIID8gJ2xlZnQnIDogJ3RvcCddID0gLXRyYW5zbGF0ZSwgb2JqLmJlaGF2aW9yID0gJ3Ntb290aCcsIG9iaiApKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3cmFwcGVyRWxbaXNIID8gJ3Njcm9sbExlZnQnIDogJ3Njcm9sbFRvcCddID0gLXRyYW5zbGF0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHNwZWVkID09PSAwKSB7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbigwKTtcbiAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUodHJhbnNsYXRlKTtcbiAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleChzbGlkZUluZGV4KTtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgICBzd2lwZXIuZW1pdCgnYmVmb3JlVHJhbnNpdGlvblN0YXJ0Jywgc3BlZWQsIGludGVybmFsKTtcbiAgICAgIHN3aXBlci50cmFuc2l0aW9uU3RhcnQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICAgICAgc3dpcGVyLnRyYW5zaXRpb25FbmQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihzcGVlZCk7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKHRyYW5zbGF0ZSk7XG4gICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoc2xpZGVJbmRleCk7XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgICAgc3dpcGVyLmVtaXQoJ2JlZm9yZVRyYW5zaXRpb25TdGFydCcsIHNwZWVkLCBpbnRlcm5hbCk7XG4gICAgICBzd2lwZXIudHJhbnNpdGlvblN0YXJ0KHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcbiAgICAgIGlmICghc3dpcGVyLmFuaW1hdGluZykge1xuICAgICAgICBzd2lwZXIuYW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpIHtcbiAgICAgICAgICBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQgPSBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kKGUpIHtcbiAgICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICBpZiAoZS50YXJnZXQgIT09IHRoaXMpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKTtcbiAgICAgICAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kID0gbnVsbDtcbiAgICAgICAgICAgIGRlbGV0ZSBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQ7XG4gICAgICAgICAgICBzd2lwZXIudHJhbnNpdGlvbkVuZChydW5DYWxsYmFja3MsIGRpcmVjdGlvbik7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKTtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0uYWRkRXZlbnRMaXN0ZW5lcignd2Via2l0VHJhbnNpdGlvbkVuZCcsIHN3aXBlci5vblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBzbGlkZVRvTG9vcCAoaW5kZXgsIHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKSB7XG4gICAgaWYgKCBpbmRleCA9PT0gdm9pZCAwICkgaW5kZXggPSAwO1xuICAgIGlmICggc3BlZWQgPT09IHZvaWQgMCApIHNwZWVkID0gdGhpcy5wYXJhbXMuc3BlZWQ7XG4gICAgaWYgKCBydW5DYWxsYmFja3MgPT09IHZvaWQgMCApIHJ1bkNhbGxiYWNrcyA9IHRydWU7XG5cbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgbmV3SW5kZXggPSBpbmRleDtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICBuZXdJbmRleCArPSBzd2lwZXIubG9vcGVkU2xpZGVzO1xuICAgIH1cblxuICAgIHJldHVybiBzd2lwZXIuc2xpZGVUbyhuZXdJbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xuICB9XG5cbiAgLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG4gIGZ1bmN0aW9uIHNsaWRlTmV4dCAoc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpIHtcbiAgICBpZiAoIHNwZWVkID09PSB2b2lkIDAgKSBzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkO1xuICAgIGlmICggcnVuQ2FsbGJhY2tzID09PSB2b2lkIDAgKSBydW5DYWxsYmFja3MgPSB0cnVlO1xuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIGFuaW1hdGluZyA9IHN3aXBlci5hbmltYXRpbmc7XG4gICAgdmFyIGluY3JlbWVudCA9IHN3aXBlci5hY3RpdmVJbmRleCA8IHBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAgPyAxIDogcGFyYW1zLnNsaWRlc1Blckdyb3VwO1xuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgaWYgKGFuaW1hdGluZykgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgIHN3aXBlci5sb29wRml4KCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIHN3aXBlci5fY2xpZW50TGVmdCA9IHN3aXBlci4kd3JhcHBlckVsWzBdLmNsaWVudExlZnQ7XG4gICAgfVxuICAgIHJldHVybiBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXggKyBpbmNyZW1lbnQsIHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKTtcbiAgfVxuXG4gIC8qIGVzbGludCBuby11bnVzZWQtdmFyczogXCJvZmZcIiAqL1xuICBmdW5jdGlvbiBzbGlkZVByZXYgKHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKSB7XG4gICAgaWYgKCBzcGVlZCA9PT0gdm9pZCAwICkgc3BlZWQgPSB0aGlzLnBhcmFtcy5zcGVlZDtcbiAgICBpZiAoIHJ1bkNhbGxiYWNrcyA9PT0gdm9pZCAwICkgcnVuQ2FsbGJhY2tzID0gdHJ1ZTtcblxuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgIHZhciBhbmltYXRpbmcgPSBzd2lwZXIuYW5pbWF0aW5nO1xuICAgIHZhciBzbmFwR3JpZCA9IHN3aXBlci5zbmFwR3JpZDtcbiAgICB2YXIgc2xpZGVzR3JpZCA9IHN3aXBlci5zbGlkZXNHcmlkO1xuICAgIHZhciBydGxUcmFuc2xhdGUgPSBzd2lwZXIucnRsVHJhbnNsYXRlO1xuXG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBpZiAoYW5pbWF0aW5nKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgc3dpcGVyLl9jbGllbnRMZWZ0ID0gc3dpcGVyLiR3cmFwcGVyRWxbMF0uY2xpZW50TGVmdDtcbiAgICB9XG4gICAgdmFyIHRyYW5zbGF0ZSA9IHJ0bFRyYW5zbGF0ZSA/IHN3aXBlci50cmFuc2xhdGUgOiAtc3dpcGVyLnRyYW5zbGF0ZTtcbiAgICBmdW5jdGlvbiBub3JtYWxpemUodmFsKSB7XG4gICAgICBpZiAodmFsIDwgMCkgeyByZXR1cm4gLU1hdGguZmxvb3IoTWF0aC5hYnModmFsKSk7IH1cbiAgICAgIHJldHVybiBNYXRoLmZsb29yKHZhbCk7XG4gICAgfVxuICAgIHZhciBub3JtYWxpemVkVHJhbnNsYXRlID0gbm9ybWFsaXplKHRyYW5zbGF0ZSk7XG4gICAgdmFyIG5vcm1hbGl6ZWRTbmFwR3JpZCA9IHNuYXBHcmlkLm1hcChmdW5jdGlvbiAodmFsKSB7IHJldHVybiBub3JtYWxpemUodmFsKTsgfSk7XG4gICAgdmFyIG5vcm1hbGl6ZWRTbGlkZXNHcmlkID0gc2xpZGVzR3JpZC5tYXAoZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gbm9ybWFsaXplKHZhbCk7IH0pO1xuXG4gICAgdmFyIGN1cnJlbnRTbmFwID0gc25hcEdyaWRbbm9ybWFsaXplZFNuYXBHcmlkLmluZGV4T2Yobm9ybWFsaXplZFRyYW5zbGF0ZSldO1xuICAgIHZhciBwcmV2U25hcCA9IHNuYXBHcmlkW25vcm1hbGl6ZWRTbmFwR3JpZC5pbmRleE9mKG5vcm1hbGl6ZWRUcmFuc2xhdGUpIC0gMV07XG4gICAgaWYgKHR5cGVvZiBwcmV2U25hcCA9PT0gJ3VuZGVmaW5lZCcgJiYgcGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHNuYXBHcmlkLmZvckVhY2goZnVuY3Rpb24gKHNuYXApIHtcbiAgICAgICAgaWYgKCFwcmV2U25hcCAmJiBub3JtYWxpemVkVHJhbnNsYXRlID49IHNuYXApIHsgcHJldlNuYXAgPSBzbmFwOyB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdmFyIHByZXZJbmRleDtcbiAgICBpZiAodHlwZW9mIHByZXZTbmFwICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcHJldkluZGV4ID0gc2xpZGVzR3JpZC5pbmRleE9mKHByZXZTbmFwKTtcbiAgICAgIGlmIChwcmV2SW5kZXggPCAwKSB7IHByZXZJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleCAtIDE7IH1cbiAgICB9XG4gICAgcmV0dXJuIHN3aXBlci5zbGlkZVRvKHByZXZJbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xuICB9XG5cbiAgLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG4gIGZ1bmN0aW9uIHNsaWRlUmVzZXQgKHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKSB7XG4gICAgaWYgKCBzcGVlZCA9PT0gdm9pZCAwICkgc3BlZWQgPSB0aGlzLnBhcmFtcy5zcGVlZDtcbiAgICBpZiAoIHJ1bkNhbGxiYWNrcyA9PT0gdm9pZCAwICkgcnVuQ2FsbGJhY2tzID0gdHJ1ZTtcblxuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHJldHVybiBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXgsIHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKTtcbiAgfVxuXG4gIC8qIGVzbGludCBuby11bnVzZWQtdmFyczogXCJvZmZcIiAqL1xuICBmdW5jdGlvbiBzbGlkZVRvQ2xvc2VzdCAoc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwsIHRocmVzaG9sZCkge1xuICAgIGlmICggc3BlZWQgPT09IHZvaWQgMCApIHNwZWVkID0gdGhpcy5wYXJhbXMuc3BlZWQ7XG4gICAgaWYgKCBydW5DYWxsYmFja3MgPT09IHZvaWQgMCApIHJ1bkNhbGxiYWNrcyA9IHRydWU7XG4gICAgaWYgKCB0aHJlc2hvbGQgPT09IHZvaWQgMCApIHRocmVzaG9sZCA9IDAuNTtcblxuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBpbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICB2YXIgc2tpcCA9IE1hdGgubWluKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwLCBpbmRleCk7XG4gICAgdmFyIHNuYXBJbmRleCA9IHNraXAgKyBNYXRoLmZsb29yKChpbmRleCAtIHNraXApIC8gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCk7XG5cbiAgICB2YXIgdHJhbnNsYXRlID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSA/IHN3aXBlci50cmFuc2xhdGUgOiAtc3dpcGVyLnRyYW5zbGF0ZTtcblxuICAgIGlmICh0cmFuc2xhdGUgPj0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleF0pIHtcbiAgICAgIC8vIFRoZSBjdXJyZW50IHRyYW5zbGF0ZSBpcyBvbiBvciBhZnRlciB0aGUgY3VycmVudCBzbmFwIGluZGV4LCBzbyB0aGUgY2hvaWNlXG4gICAgICAvLyBpcyBiZXR3ZWVuIHRoZSBjdXJyZW50IGluZGV4IGFuZCB0aGUgb25lIGFmdGVyIGl0LlxuICAgICAgdmFyIGN1cnJlbnRTbmFwID0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleF07XG4gICAgICB2YXIgbmV4dFNuYXAgPSBzd2lwZXIuc25hcEdyaWRbc25hcEluZGV4ICsgMV07XG4gICAgICBpZiAoKHRyYW5zbGF0ZSAtIGN1cnJlbnRTbmFwKSA+IChuZXh0U25hcCAtIGN1cnJlbnRTbmFwKSAqIHRocmVzaG9sZCkge1xuICAgICAgICBpbmRleCArPSBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgY3VycmVudCB0cmFuc2xhdGUgaXMgYmVmb3JlIHRoZSBjdXJyZW50IHNuYXAgaW5kZXgsIHNvIHRoZSBjaG9pY2VcbiAgICAgIC8vIGlzIGJldHdlZW4gdGhlIGN1cnJlbnQgaW5kZXggYW5kIHRoZSBvbmUgYmVmb3JlIGl0LlxuICAgICAgdmFyIHByZXZTbmFwID0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleCAtIDFdO1xuICAgICAgdmFyIGN1cnJlbnRTbmFwJDEgPSBzd2lwZXIuc25hcEdyaWRbc25hcEluZGV4XTtcbiAgICAgIGlmICgodHJhbnNsYXRlIC0gcHJldlNuYXApIDw9IChjdXJyZW50U25hcCQxIC0gcHJldlNuYXApICogdGhyZXNob2xkKSB7XG4gICAgICAgIGluZGV4IC09IHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG4gICAgICB9XG4gICAgfVxuICAgIGluZGV4ID0gTWF0aC5tYXgoaW5kZXgsIDApO1xuICAgIGluZGV4ID0gTWF0aC5taW4oaW5kZXgsIHN3aXBlci5zbGlkZXNHcmlkLmxlbmd0aCAtIDEpO1xuXG4gICAgcmV0dXJuIHN3aXBlci5zbGlkZVRvKGluZGV4LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCk7XG4gIH1cblxuICBmdW5jdGlvbiBzbGlkZVRvQ2xpY2tlZFNsaWRlICgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuXG4gICAgdmFyIHNsaWRlc1BlclZpZXcgPSBwYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nID8gc3dpcGVyLnNsaWRlc1BlclZpZXdEeW5hbWljKCkgOiBwYXJhbXMuc2xpZGVzUGVyVmlldztcbiAgICB2YXIgc2xpZGVUb0luZGV4ID0gc3dpcGVyLmNsaWNrZWRJbmRleDtcbiAgICB2YXIgcmVhbEluZGV4O1xuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgaWYgKHN3aXBlci5hbmltYXRpbmcpIHsgcmV0dXJuOyB9XG4gICAgICByZWFsSW5kZXggPSBwYXJzZUludCgkKHN3aXBlci5jbGlja2VkU2xpZGUpLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JyksIDEwKTtcbiAgICAgIGlmIChwYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChzbGlkZVRvSW5kZXggPCBzd2lwZXIubG9vcGVkU2xpZGVzIC0gKHNsaWRlc1BlclZpZXcgLyAyKSlcbiAgICAgICAgICB8fCAoc2xpZGVUb0luZGV4ID4gKHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gc3dpcGVyLmxvb3BlZFNsaWRlcykgKyAoc2xpZGVzUGVyVmlldyAvIDIpKVxuICAgICAgICApIHtcbiAgICAgICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgICAgIHNsaWRlVG9JbmRleCA9ICR3cmFwcGVyRWxcbiAgICAgICAgICAgIC5jaGlsZHJlbigoXCIuXCIgKyAocGFyYW1zLnNsaWRlQ2xhc3MpICsgXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgcmVhbEluZGV4ICsgXCJcXFwiXTpub3QoLlwiICsgKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSArIFwiKVwiKSlcbiAgICAgICAgICAgIC5lcSgwKVxuICAgICAgICAgICAgLmluZGV4KCk7XG5cbiAgICAgICAgICBVdGlscy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzd2lwZXIuc2xpZGVUbyhzbGlkZVRvSW5kZXgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN3aXBlci5zbGlkZVRvKHNsaWRlVG9JbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc2xpZGVUb0luZGV4ID4gc3dpcGVyLnNsaWRlcy5sZW5ndGggLSBzbGlkZXNQZXJWaWV3KSB7XG4gICAgICAgIHN3aXBlci5sb29wRml4KCk7XG4gICAgICAgIHNsaWRlVG9JbmRleCA9ICR3cmFwcGVyRWxcbiAgICAgICAgICAuY2hpbGRyZW4oKFwiLlwiICsgKHBhcmFtcy5zbGlkZUNsYXNzKSArIFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIHJlYWxJbmRleCArIFwiXFxcIl06bm90KC5cIiArIChwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykgKyBcIilcIikpXG4gICAgICAgICAgLmVxKDApXG4gICAgICAgICAgLmluZGV4KCk7XG5cbiAgICAgICAgVXRpbHMubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHN3aXBlci5zbGlkZVRvKHNsaWRlVG9JbmRleCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc2xpZGVUb0luZGV4KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLnNsaWRlVG8oc2xpZGVUb0luZGV4KTtcbiAgICB9XG4gIH1cblxuICB2YXIgc2xpZGUgPSB7XG4gICAgc2xpZGVUbzogc2xpZGVUbyxcbiAgICBzbGlkZVRvTG9vcDogc2xpZGVUb0xvb3AsXG4gICAgc2xpZGVOZXh0OiBzbGlkZU5leHQsXG4gICAgc2xpZGVQcmV2OiBzbGlkZVByZXYsXG4gICAgc2xpZGVSZXNldDogc2xpZGVSZXNldCxcbiAgICBzbGlkZVRvQ2xvc2VzdDogc2xpZGVUb0Nsb3Nlc3QsXG4gICAgc2xpZGVUb0NsaWNrZWRTbGlkZTogc2xpZGVUb0NsaWNrZWRTbGlkZSxcbiAgfTtcblxuICBmdW5jdGlvbiBsb29wQ3JlYXRlICgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgIC8vIFJlbW92ZSBkdXBsaWNhdGVkIHNsaWRlc1xuICAgICR3cmFwcGVyRWwuY2hpbGRyZW4oKFwiLlwiICsgKHBhcmFtcy5zbGlkZUNsYXNzKSArIFwiLlwiICsgKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSkpLnJlbW92ZSgpO1xuXG4gICAgdmFyIHNsaWRlcyA9ICR3cmFwcGVyRWwuY2hpbGRyZW4oKFwiLlwiICsgKHBhcmFtcy5zbGlkZUNsYXNzKSkpO1xuXG4gICAgaWYgKHBhcmFtcy5sb29wRmlsbEdyb3VwV2l0aEJsYW5rKSB7XG4gICAgICB2YXIgYmxhbmtTbGlkZXNOdW0gPSBwYXJhbXMuc2xpZGVzUGVyR3JvdXAgLSAoc2xpZGVzLmxlbmd0aCAlIHBhcmFtcy5zbGlkZXNQZXJHcm91cCk7XG4gICAgICBpZiAoYmxhbmtTbGlkZXNOdW0gIT09IHBhcmFtcy5zbGlkZXNQZXJHcm91cCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJsYW5rU2xpZGVzTnVtOyBpICs9IDEpIHtcbiAgICAgICAgICB2YXIgYmxhbmtOb2RlID0gJChkb2MuY3JlYXRlRWxlbWVudCgnZGl2JykpLmFkZENsYXNzKCgocGFyYW1zLnNsaWRlQ2xhc3MpICsgXCIgXCIgKyAocGFyYW1zLnNsaWRlQmxhbmtDbGFzcykpKTtcbiAgICAgICAgICAkd3JhcHBlckVsLmFwcGVuZChibGFua05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHNsaWRlcyA9ICR3cmFwcGVyRWwuY2hpbGRyZW4oKFwiLlwiICsgKHBhcmFtcy5zbGlkZUNsYXNzKSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nICYmICFwYXJhbXMubG9vcGVkU2xpZGVzKSB7IHBhcmFtcy5sb29wZWRTbGlkZXMgPSBzbGlkZXMubGVuZ3RoOyB9XG5cbiAgICBzd2lwZXIubG9vcGVkU2xpZGVzID0gTWF0aC5jZWlsKHBhcnNlRmxvYXQocGFyYW1zLmxvb3BlZFNsaWRlcyB8fCBwYXJhbXMuc2xpZGVzUGVyVmlldywgMTApKTtcbiAgICBzd2lwZXIubG9vcGVkU2xpZGVzICs9IHBhcmFtcy5sb29wQWRkaXRpb25hbFNsaWRlcztcbiAgICBpZiAoc3dpcGVyLmxvb3BlZFNsaWRlcyA+IHNsaWRlcy5sZW5ndGgpIHtcbiAgICAgIHN3aXBlci5sb29wZWRTbGlkZXMgPSBzbGlkZXMubGVuZ3RoO1xuICAgIH1cblxuICAgIHZhciBwcmVwZW5kU2xpZGVzID0gW107XG4gICAgdmFyIGFwcGVuZFNsaWRlcyA9IFtdO1xuICAgIHNsaWRlcy5lYWNoKGZ1bmN0aW9uIChpbmRleCwgZWwpIHtcbiAgICAgIHZhciBzbGlkZSA9ICQoZWwpO1xuICAgICAgaWYgKGluZGV4IDwgc3dpcGVyLmxvb3BlZFNsaWRlcykgeyBhcHBlbmRTbGlkZXMucHVzaChlbCk7IH1cbiAgICAgIGlmIChpbmRleCA8IHNsaWRlcy5sZW5ndGggJiYgaW5kZXggPj0gc2xpZGVzLmxlbmd0aCAtIHN3aXBlci5sb29wZWRTbGlkZXMpIHsgcHJlcGVuZFNsaWRlcy5wdXNoKGVsKTsgfVxuICAgICAgc2xpZGUuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnLCBpbmRleCk7XG4gICAgfSk7XG4gICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgYXBwZW5kU2xpZGVzLmxlbmd0aDsgaSQxICs9IDEpIHtcbiAgICAgICR3cmFwcGVyRWwuYXBwZW5kKCQoYXBwZW5kU2xpZGVzW2kkMV0uY2xvbmVOb2RlKHRydWUpKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpJDIgPSBwcmVwZW5kU2xpZGVzLmxlbmd0aCAtIDE7IGkkMiA+PSAwOyBpJDIgLT0gMSkge1xuICAgICAgJHdyYXBwZXJFbC5wcmVwZW5kKCQocHJlcGVuZFNsaWRlc1tpJDJdLmNsb25lTm9kZSh0cnVlKSkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBsb29wRml4ICgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcblxuICAgIHN3aXBlci5lbWl0KCdiZWZvcmVMb29wRml4Jyk7XG5cbiAgICB2YXIgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG4gICAgdmFyIGxvb3BlZFNsaWRlcyA9IHN3aXBlci5sb29wZWRTbGlkZXM7XG4gICAgdmFyIGFsbG93U2xpZGVQcmV2ID0gc3dpcGVyLmFsbG93U2xpZGVQcmV2O1xuICAgIHZhciBhbGxvd1NsaWRlTmV4dCA9IHN3aXBlci5hbGxvd1NsaWRlTmV4dDtcbiAgICB2YXIgc25hcEdyaWQgPSBzd2lwZXIuc25hcEdyaWQ7XG4gICAgdmFyIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGU7XG4gICAgdmFyIG5ld0luZGV4O1xuICAgIHN3aXBlci5hbGxvd1NsaWRlUHJldiA9IHRydWU7XG4gICAgc3dpcGVyLmFsbG93U2xpZGVOZXh0ID0gdHJ1ZTtcblxuICAgIHZhciBzbmFwVHJhbnNsYXRlID0gLXNuYXBHcmlkW2FjdGl2ZUluZGV4XTtcbiAgICB2YXIgZGlmZiA9IHNuYXBUcmFuc2xhdGUgLSBzd2lwZXIuZ2V0VHJhbnNsYXRlKCk7XG5cbiAgICAvLyBGaXggRm9yIE5lZ2F0aXZlIE92ZXJzbGlkaW5nXG4gICAgaWYgKGFjdGl2ZUluZGV4IDwgbG9vcGVkU2xpZGVzKSB7XG4gICAgICBuZXdJbmRleCA9IChzbGlkZXMubGVuZ3RoIC0gKGxvb3BlZFNsaWRlcyAqIDMpKSArIGFjdGl2ZUluZGV4O1xuICAgICAgbmV3SW5kZXggKz0gbG9vcGVkU2xpZGVzO1xuICAgICAgdmFyIHNsaWRlQ2hhbmdlZCA9IHN3aXBlci5zbGlkZVRvKG5ld0luZGV4LCAwLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICBpZiAoc2xpZGVDaGFuZ2VkICYmIGRpZmYgIT09IDApIHtcbiAgICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZSgocnRsID8gLXN3aXBlci50cmFuc2xhdGUgOiBzd2lwZXIudHJhbnNsYXRlKSAtIGRpZmYpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYWN0aXZlSW5kZXggPj0gc2xpZGVzLmxlbmd0aCAtIGxvb3BlZFNsaWRlcykge1xuICAgICAgLy8gRml4IEZvciBQb3NpdGl2ZSBPdmVyc2xpZGluZ1xuICAgICAgbmV3SW5kZXggPSAtc2xpZGVzLmxlbmd0aCArIGFjdGl2ZUluZGV4ICsgbG9vcGVkU2xpZGVzO1xuICAgICAgbmV3SW5kZXggKz0gbG9vcGVkU2xpZGVzO1xuICAgICAgdmFyIHNsaWRlQ2hhbmdlZCQxID0gc3dpcGVyLnNsaWRlVG8obmV3SW5kZXgsIDAsIGZhbHNlLCB0cnVlKTtcbiAgICAgIGlmIChzbGlkZUNoYW5nZWQkMSAmJiBkaWZmICE9PSAwKSB7XG4gICAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUoKHJ0bCA/IC1zd2lwZXIudHJhbnNsYXRlIDogc3dpcGVyLnRyYW5zbGF0ZSkgLSBkaWZmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3dpcGVyLmFsbG93U2xpZGVQcmV2ID0gYWxsb3dTbGlkZVByZXY7XG4gICAgc3dpcGVyLmFsbG93U2xpZGVOZXh0ID0gYWxsb3dTbGlkZU5leHQ7XG5cbiAgICBzd2lwZXIuZW1pdCgnbG9vcEZpeCcpO1xuICB9XG5cbiAgZnVuY3Rpb24gbG9vcERlc3Ryb3kgKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG4gICAgJHdyYXBwZXJFbC5jaGlsZHJlbigoXCIuXCIgKyAocGFyYW1zLnNsaWRlQ2xhc3MpICsgXCIuXCIgKyAocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpICsgXCIsLlwiICsgKHBhcmFtcy5zbGlkZUNsYXNzKSArIFwiLlwiICsgKHBhcmFtcy5zbGlkZUJsYW5rQ2xhc3MpKSkucmVtb3ZlKCk7XG4gICAgc2xpZGVzLnJlbW92ZUF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4Jyk7XG4gIH1cblxuICB2YXIgbG9vcCA9IHtcbiAgICBsb29wQ3JlYXRlOiBsb29wQ3JlYXRlLFxuICAgIGxvb3BGaXg6IGxvb3BGaXgsXG4gICAgbG9vcERlc3Ryb3k6IGxvb3BEZXN0cm95LFxuICB9O1xuXG4gIGZ1bmN0aW9uIHNldEdyYWJDdXJzb3IgKG1vdmluZykge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIGlmIChTdXBwb3J0LnRvdWNoIHx8ICFzd2lwZXIucGFyYW1zLnNpbXVsYXRlVG91Y2ggfHwgKHN3aXBlci5wYXJhbXMud2F0Y2hPdmVyZmxvdyAmJiBzd2lwZXIuaXNMb2NrZWQpIHx8IHN3aXBlci5wYXJhbXMuY3NzTW9kZSkgeyByZXR1cm47IH1cbiAgICB2YXIgZWwgPSBzd2lwZXIuZWw7XG4gICAgZWwuc3R5bGUuY3Vyc29yID0gJ21vdmUnO1xuICAgIGVsLnN0eWxlLmN1cnNvciA9IG1vdmluZyA/ICctd2Via2l0LWdyYWJiaW5nJyA6ICctd2Via2l0LWdyYWInO1xuICAgIGVsLnN0eWxlLmN1cnNvciA9IG1vdmluZyA/ICctbW96LWdyYWJiaW4nIDogJy1tb3otZ3JhYic7XG4gICAgZWwuc3R5bGUuY3Vyc29yID0gbW92aW5nID8gJ2dyYWJiaW5nJyA6ICdncmFiJztcbiAgfVxuXG4gIGZ1bmN0aW9uIHVuc2V0R3JhYkN1cnNvciAoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKFN1cHBvcnQudG91Y2ggfHwgKHN3aXBlci5wYXJhbXMud2F0Y2hPdmVyZmxvdyAmJiBzd2lwZXIuaXNMb2NrZWQpIHx8IHN3aXBlci5wYXJhbXMuY3NzTW9kZSkgeyByZXR1cm47IH1cbiAgICBzd2lwZXIuZWwuc3R5bGUuY3Vyc29yID0gJyc7XG4gIH1cblxuICB2YXIgZ3JhYkN1cnNvciA9IHtcbiAgICBzZXRHcmFiQ3Vyc29yOiBzZXRHcmFiQ3Vyc29yLFxuICAgIHVuc2V0R3JhYkN1cnNvcjogdW5zZXRHcmFiQ3Vyc29yLFxuICB9O1xuXG4gIGZ1bmN0aW9uIGFwcGVuZFNsaWRlIChzbGlkZXMpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgc3dpcGVyLmxvb3BEZXN0cm95KCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygc2xpZGVzID09PSAnb2JqZWN0JyAmJiAnbGVuZ3RoJyBpbiBzbGlkZXMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChzbGlkZXNbaV0pIHsgJHdyYXBwZXJFbC5hcHBlbmQoc2xpZGVzW2ldKTsgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAkd3JhcHBlckVsLmFwcGVuZChzbGlkZXMpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIHN3aXBlci5sb29wQ3JlYXRlKCk7XG4gICAgfVxuICAgIGlmICghKHBhcmFtcy5vYnNlcnZlciAmJiBTdXBwb3J0Lm9ic2VydmVyKSkge1xuICAgICAgc3dpcGVyLnVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHByZXBlbmRTbGlkZSAoc2xpZGVzKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcbiAgICB2YXIgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG5cbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIHN3aXBlci5sb29wRGVzdHJveSgpO1xuICAgIH1cbiAgICB2YXIgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleCArIDE7XG4gICAgaWYgKHR5cGVvZiBzbGlkZXMgPT09ICdvYmplY3QnICYmICdsZW5ndGgnIGluIHNsaWRlcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKHNsaWRlc1tpXSkgeyAkd3JhcHBlckVsLnByZXBlbmQoc2xpZGVzW2ldKTsgfVxuICAgICAgfVxuICAgICAgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleCArIHNsaWRlcy5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgICR3cmFwcGVyRWwucHJlcGVuZChzbGlkZXMpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIHN3aXBlci5sb29wQ3JlYXRlKCk7XG4gICAgfVxuICAgIGlmICghKHBhcmFtcy5vYnNlcnZlciAmJiBTdXBwb3J0Lm9ic2VydmVyKSkge1xuICAgICAgc3dpcGVyLnVwZGF0ZSgpO1xuICAgIH1cbiAgICBzd2lwZXIuc2xpZGVUbyhuZXdBY3RpdmVJbmRleCwgMCwgZmFsc2UpO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkU2xpZGUgKGluZGV4LCBzbGlkZXMpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgIHZhciBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICB2YXIgYWN0aXZlSW5kZXhCdWZmZXIgPSBhY3RpdmVJbmRleDtcbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIGFjdGl2ZUluZGV4QnVmZmVyIC09IHN3aXBlci5sb29wZWRTbGlkZXM7XG4gICAgICBzd2lwZXIubG9vcERlc3Ryb3koKTtcbiAgICAgIHN3aXBlci5zbGlkZXMgPSAkd3JhcHBlckVsLmNoaWxkcmVuKChcIi5cIiArIChwYXJhbXMuc2xpZGVDbGFzcykpKTtcbiAgICB9XG4gICAgdmFyIGJhc2VMZW5ndGggPSBzd2lwZXIuc2xpZGVzLmxlbmd0aDtcbiAgICBpZiAoaW5kZXggPD0gMCkge1xuICAgICAgc3dpcGVyLnByZXBlbmRTbGlkZShzbGlkZXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPj0gYmFzZUxlbmd0aCkge1xuICAgICAgc3dpcGVyLmFwcGVuZFNsaWRlKHNsaWRlcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBuZXdBY3RpdmVJbmRleCA9IGFjdGl2ZUluZGV4QnVmZmVyID4gaW5kZXggPyBhY3RpdmVJbmRleEJ1ZmZlciArIDEgOiBhY3RpdmVJbmRleEJ1ZmZlcjtcblxuICAgIHZhciBzbGlkZXNCdWZmZXIgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gYmFzZUxlbmd0aCAtIDE7IGkgPj0gaW5kZXg7IGkgLT0gMSkge1xuICAgICAgdmFyIGN1cnJlbnRTbGlkZSA9IHN3aXBlci5zbGlkZXMuZXEoaSk7XG4gICAgICBjdXJyZW50U2xpZGUucmVtb3ZlKCk7XG4gICAgICBzbGlkZXNCdWZmZXIudW5zaGlmdChjdXJyZW50U2xpZGUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc2xpZGVzID09PSAnb2JqZWN0JyAmJiAnbGVuZ3RoJyBpbiBzbGlkZXMpIHtcbiAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IHNsaWRlcy5sZW5ndGg7IGkkMSArPSAxKSB7XG4gICAgICAgIGlmIChzbGlkZXNbaSQxXSkgeyAkd3JhcHBlckVsLmFwcGVuZChzbGlkZXNbaSQxXSk7IH1cbiAgICAgIH1cbiAgICAgIG5ld0FjdGl2ZUluZGV4ID0gYWN0aXZlSW5kZXhCdWZmZXIgPiBpbmRleCA/IGFjdGl2ZUluZGV4QnVmZmVyICsgc2xpZGVzLmxlbmd0aCA6IGFjdGl2ZUluZGV4QnVmZmVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAkd3JhcHBlckVsLmFwcGVuZChzbGlkZXMpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkkMiA9IDA7IGkkMiA8IHNsaWRlc0J1ZmZlci5sZW5ndGg7IGkkMiArPSAxKSB7XG4gICAgICAkd3JhcHBlckVsLmFwcGVuZChzbGlkZXNCdWZmZXJbaSQyXSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBzd2lwZXIubG9vcENyZWF0ZSgpO1xuICAgIH1cbiAgICBpZiAoIShwYXJhbXMub2JzZXJ2ZXIgJiYgU3VwcG9ydC5vYnNlcnZlcikpIHtcbiAgICAgIHN3aXBlci51cGRhdGUoKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhuZXdBY3RpdmVJbmRleCArIHN3aXBlci5sb29wZWRTbGlkZXMsIDAsIGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLnNsaWRlVG8obmV3QWN0aXZlSW5kZXgsIDAsIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVTbGlkZSAoc2xpZGVzSW5kZXhlcykge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgIHZhciAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7XG4gICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuXG4gICAgdmFyIGFjdGl2ZUluZGV4QnVmZmVyID0gYWN0aXZlSW5kZXg7XG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBhY3RpdmVJbmRleEJ1ZmZlciAtPSBzd2lwZXIubG9vcGVkU2xpZGVzO1xuICAgICAgc3dpcGVyLmxvb3BEZXN0cm95KCk7XG4gICAgICBzd2lwZXIuc2xpZGVzID0gJHdyYXBwZXJFbC5jaGlsZHJlbigoXCIuXCIgKyAocGFyYW1zLnNsaWRlQ2xhc3MpKSk7XG4gICAgfVxuICAgIHZhciBuZXdBY3RpdmVJbmRleCA9IGFjdGl2ZUluZGV4QnVmZmVyO1xuICAgIHZhciBpbmRleFRvUmVtb3ZlO1xuXG4gICAgaWYgKHR5cGVvZiBzbGlkZXNJbmRleGVzID09PSAnb2JqZWN0JyAmJiAnbGVuZ3RoJyBpbiBzbGlkZXNJbmRleGVzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlc0luZGV4ZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaW5kZXhUb1JlbW92ZSA9IHNsaWRlc0luZGV4ZXNbaV07XG4gICAgICAgIGlmIChzd2lwZXIuc2xpZGVzW2luZGV4VG9SZW1vdmVdKSB7IHN3aXBlci5zbGlkZXMuZXEoaW5kZXhUb1JlbW92ZSkucmVtb3ZlKCk7IH1cbiAgICAgICAgaWYgKGluZGV4VG9SZW1vdmUgPCBuZXdBY3RpdmVJbmRleCkgeyBuZXdBY3RpdmVJbmRleCAtPSAxOyB9XG4gICAgICB9XG4gICAgICBuZXdBY3RpdmVJbmRleCA9IE1hdGgubWF4KG5ld0FjdGl2ZUluZGV4LCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5kZXhUb1JlbW92ZSA9IHNsaWRlc0luZGV4ZXM7XG4gICAgICBpZiAoc3dpcGVyLnNsaWRlc1tpbmRleFRvUmVtb3ZlXSkgeyBzd2lwZXIuc2xpZGVzLmVxKGluZGV4VG9SZW1vdmUpLnJlbW92ZSgpOyB9XG4gICAgICBpZiAoaW5kZXhUb1JlbW92ZSA8IG5ld0FjdGl2ZUluZGV4KSB7IG5ld0FjdGl2ZUluZGV4IC09IDE7IH1cbiAgICAgIG5ld0FjdGl2ZUluZGV4ID0gTWF0aC5tYXgobmV3QWN0aXZlSW5kZXgsIDApO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgc3dpcGVyLmxvb3BDcmVhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAoIShwYXJhbXMub2JzZXJ2ZXIgJiYgU3VwcG9ydC5vYnNlcnZlcikpIHtcbiAgICAgIHN3aXBlci51cGRhdGUoKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhuZXdBY3RpdmVJbmRleCArIHN3aXBlci5sb29wZWRTbGlkZXMsIDAsIGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLnNsaWRlVG8obmV3QWN0aXZlSW5kZXgsIDAsIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVBbGxTbGlkZXMgKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuXG4gICAgdmFyIHNsaWRlc0luZGV4ZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN3aXBlci5zbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHNsaWRlc0luZGV4ZXMucHVzaChpKTtcbiAgICB9XG4gICAgc3dpcGVyLnJlbW92ZVNsaWRlKHNsaWRlc0luZGV4ZXMpO1xuICB9XG5cbiAgdmFyIG1hbmlwdWxhdGlvbiA9IHtcbiAgICBhcHBlbmRTbGlkZTogYXBwZW5kU2xpZGUsXG4gICAgcHJlcGVuZFNsaWRlOiBwcmVwZW5kU2xpZGUsXG4gICAgYWRkU2xpZGU6IGFkZFNsaWRlLFxuICAgIHJlbW92ZVNsaWRlOiByZW1vdmVTbGlkZSxcbiAgICByZW1vdmVBbGxTbGlkZXM6IHJlbW92ZUFsbFNsaWRlcyxcbiAgfTtcblxuICB2YXIgRGV2aWNlID0gKGZ1bmN0aW9uIERldmljZSgpIHtcbiAgICB2YXIgcGxhdGZvcm0gPSB3aW4ubmF2aWdhdG9yLnBsYXRmb3JtO1xuICAgIHZhciB1YSA9IHdpbi5uYXZpZ2F0b3IudXNlckFnZW50O1xuXG4gICAgdmFyIGRldmljZSA9IHtcbiAgICAgIGlvczogZmFsc2UsXG4gICAgICBhbmRyb2lkOiBmYWxzZSxcbiAgICAgIGFuZHJvaWRDaHJvbWU6IGZhbHNlLFxuICAgICAgZGVza3RvcDogZmFsc2UsXG4gICAgICBpcGhvbmU6IGZhbHNlLFxuICAgICAgaXBvZDogZmFsc2UsXG4gICAgICBpcGFkOiBmYWxzZSxcbiAgICAgIGVkZ2U6IGZhbHNlLFxuICAgICAgaWU6IGZhbHNlLFxuICAgICAgZmlyZWZveDogZmFsc2UsXG4gICAgICBtYWNvczogZmFsc2UsXG4gICAgICB3aW5kb3dzOiBmYWxzZSxcbiAgICAgIGNvcmRvdmE6ICEhKHdpbi5jb3Jkb3ZhIHx8IHdpbi5waG9uZWdhcCksXG4gICAgICBwaG9uZWdhcDogISEod2luLmNvcmRvdmEgfHwgd2luLnBob25lZ2FwKSxcbiAgICAgIGVsZWN0cm9uOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgdmFyIHNjcmVlbldpZHRoID0gd2luLnNjcmVlbi53aWR0aDtcbiAgICB2YXIgc2NyZWVuSGVpZ2h0ID0gd2luLnNjcmVlbi5oZWlnaHQ7XG5cbiAgICB2YXIgYW5kcm9pZCA9IHVhLm1hdGNoKC8oQW5kcm9pZCk7P1tcXHNcXC9dKyhbXFxkLl0rKT8vKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIHZhciBpcGFkID0gdWEubWF0Y2goLyhpUGFkKS4qT1NcXHMoW1xcZF9dKykvKTtcbiAgICB2YXIgaXBvZCA9IHVhLm1hdGNoKC8oaVBvZCkoLipPU1xccyhbXFxkX10rKSk/Lyk7XG4gICAgdmFyIGlwaG9uZSA9ICFpcGFkICYmIHVhLm1hdGNoKC8oaVBob25lXFxzT1N8aU9TKVxccyhbXFxkX10rKS8pO1xuICAgIHZhciBpZSA9IHVhLmluZGV4T2YoJ01TSUUgJykgPj0gMCB8fCB1YS5pbmRleE9mKCdUcmlkZW50LycpID49IDA7XG4gICAgdmFyIGVkZ2UgPSB1YS5pbmRleE9mKCdFZGdlLycpID49IDA7XG4gICAgdmFyIGZpcmVmb3ggPSB1YS5pbmRleE9mKCdHZWNrby8nKSA+PSAwICYmIHVhLmluZGV4T2YoJ0ZpcmVmb3gvJykgPj0gMDtcbiAgICB2YXIgd2luZG93cyA9IHBsYXRmb3JtID09PSAnV2luMzInO1xuICAgIHZhciBlbGVjdHJvbiA9IHVhLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZWxlY3Ryb24nKSA+PSAwO1xuICAgIHZhciBtYWNvcyA9IHBsYXRmb3JtID09PSAnTWFjSW50ZWwnO1xuXG4gICAgLy8gaVBhZE9zIDEzIGZpeFxuICAgIGlmICghaXBhZFxuICAgICAgJiYgbWFjb3NcbiAgICAgICYmIFN1cHBvcnQudG91Y2hcbiAgICAgICYmIChcbiAgICAgICAgKHNjcmVlbldpZHRoID09PSAxMDI0ICYmIHNjcmVlbkhlaWdodCA9PT0gMTM2NikgLy8gUHJvIDEyLjlcbiAgICAgICAgfHwgKHNjcmVlbldpZHRoID09PSA4MzQgJiYgc2NyZWVuSGVpZ2h0ID09PSAxMTk0KSAvLyBQcm8gMTFcbiAgICAgICAgfHwgKHNjcmVlbldpZHRoID09PSA4MzQgJiYgc2NyZWVuSGVpZ2h0ID09PSAxMTEyKSAvLyBQcm8gMTAuNVxuICAgICAgICB8fCAoc2NyZWVuV2lkdGggPT09IDc2OCAmJiBzY3JlZW5IZWlnaHQgPT09IDEwMjQpIC8vIG90aGVyXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpcGFkID0gdWEubWF0Y2goLyhWZXJzaW9uKVxcLyhbXFxkLl0rKS8pO1xuICAgICAgbWFjb3MgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBkZXZpY2UuaWUgPSBpZTtcbiAgICBkZXZpY2UuZWRnZSA9IGVkZ2U7XG4gICAgZGV2aWNlLmZpcmVmb3ggPSBmaXJlZm94O1xuXG4gICAgLy8gQW5kcm9pZFxuICAgIGlmIChhbmRyb2lkICYmICF3aW5kb3dzKSB7XG4gICAgICBkZXZpY2Uub3MgPSAnYW5kcm9pZCc7XG4gICAgICBkZXZpY2Uub3NWZXJzaW9uID0gYW5kcm9pZFsyXTtcbiAgICAgIGRldmljZS5hbmRyb2lkID0gdHJ1ZTtcbiAgICAgIGRldmljZS5hbmRyb2lkQ2hyb21lID0gdWEudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjaHJvbWUnKSA+PSAwO1xuICAgIH1cbiAgICBpZiAoaXBhZCB8fCBpcGhvbmUgfHwgaXBvZCkge1xuICAgICAgZGV2aWNlLm9zID0gJ2lvcyc7XG4gICAgICBkZXZpY2UuaW9zID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gaU9TXG4gICAgaWYgKGlwaG9uZSAmJiAhaXBvZCkge1xuICAgICAgZGV2aWNlLm9zVmVyc2lvbiA9IGlwaG9uZVsyXS5yZXBsYWNlKC9fL2csICcuJyk7XG4gICAgICBkZXZpY2UuaXBob25lID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGlwYWQpIHtcbiAgICAgIGRldmljZS5vc1ZlcnNpb24gPSBpcGFkWzJdLnJlcGxhY2UoL18vZywgJy4nKTtcbiAgICAgIGRldmljZS5pcGFkID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGlwb2QpIHtcbiAgICAgIGRldmljZS5vc1ZlcnNpb24gPSBpcG9kWzNdID8gaXBvZFszXS5yZXBsYWNlKC9fL2csICcuJykgOiBudWxsO1xuICAgICAgZGV2aWNlLmlwb2QgPSB0cnVlO1xuICAgIH1cbiAgICAvLyBpT1MgOCsgY2hhbmdlZCBVQVxuICAgIGlmIChkZXZpY2UuaW9zICYmIGRldmljZS5vc1ZlcnNpb24gJiYgdWEuaW5kZXhPZignVmVyc2lvbi8nKSA+PSAwKSB7XG4gICAgICBpZiAoZGV2aWNlLm9zVmVyc2lvbi5zcGxpdCgnLicpWzBdID09PSAnMTAnKSB7XG4gICAgICAgIGRldmljZS5vc1ZlcnNpb24gPSB1YS50b0xvd2VyQ2FzZSgpLnNwbGl0KCd2ZXJzaW9uLycpWzFdLnNwbGl0KCcgJylbMF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2Vidmlld1xuICAgIGRldmljZS53ZWJWaWV3ID0gISEoKGlwaG9uZSB8fCBpcGFkIHx8IGlwb2QpICYmICh1YS5tYXRjaCgvLipBcHBsZVdlYktpdCg/IS4qU2FmYXJpKS9pKSB8fCB3aW4ubmF2aWdhdG9yLnN0YW5kYWxvbmUpKVxuICAgICAgfHwgKHdpbi5tYXRjaE1lZGlhICYmIHdpbi5tYXRjaE1lZGlhKCcoZGlzcGxheS1tb2RlOiBzdGFuZGFsb25lKScpLm1hdGNoZXMpO1xuICAgIGRldmljZS53ZWJ2aWV3ID0gZGV2aWNlLndlYlZpZXc7XG4gICAgZGV2aWNlLnN0YW5kYWxvbmUgPSBkZXZpY2Uud2ViVmlldztcblxuICAgIC8vIERlc2t0b3BcbiAgICBkZXZpY2UuZGVza3RvcCA9ICEoZGV2aWNlLmlvcyB8fCBkZXZpY2UuYW5kcm9pZCkgfHwgZWxlY3Ryb247XG4gICAgaWYgKGRldmljZS5kZXNrdG9wKSB7XG4gICAgICBkZXZpY2UuZWxlY3Ryb24gPSBlbGVjdHJvbjtcbiAgICAgIGRldmljZS5tYWNvcyA9IG1hY29zO1xuICAgICAgZGV2aWNlLndpbmRvd3MgPSB3aW5kb3dzO1xuICAgICAgaWYgKGRldmljZS5tYWNvcykge1xuICAgICAgICBkZXZpY2Uub3MgPSAnbWFjb3MnO1xuICAgICAgfVxuICAgICAgaWYgKGRldmljZS53aW5kb3dzKSB7XG4gICAgICAgIGRldmljZS5vcyA9ICd3aW5kb3dzJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQaXhlbCBSYXRpb1xuICAgIGRldmljZS5waXhlbFJhdGlvID0gd2luLmRldmljZVBpeGVsUmF0aW8gfHwgMTtcblxuICAgIC8vIEV4cG9ydCBvYmplY3RcbiAgICByZXR1cm4gZGV2aWNlO1xuICB9KCkpO1xuXG4gIGZ1bmN0aW9uIG9uVG91Y2hTdGFydCAoZXZlbnQpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgZGF0YSA9IHN3aXBlci50b3VjaEV2ZW50c0RhdGE7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIHRvdWNoZXMgPSBzd2lwZXIudG91Y2hlcztcblxuICAgIGlmIChzd2lwZXIuYW5pbWF0aW5nICYmIHBhcmFtcy5wcmV2ZW50SW50ZXJhY3Rpb25PblRyYW5zaXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGUgPSBldmVudDtcbiAgICBpZiAoZS5vcmlnaW5hbEV2ZW50KSB7IGUgPSBlLm9yaWdpbmFsRXZlbnQ7IH1cbiAgICB2YXIgJHRhcmdldEVsID0gJChlLnRhcmdldCk7XG5cbiAgICBpZiAocGFyYW1zLnRvdWNoRXZlbnRzVGFyZ2V0ID09PSAnd3JhcHBlcicpIHtcbiAgICAgIGlmICghJHRhcmdldEVsLmNsb3Nlc3Qoc3dpcGVyLndyYXBwZXJFbCkubGVuZ3RoKSB7IHJldHVybjsgfVxuICAgIH1cbiAgICBkYXRhLmlzVG91Y2hFdmVudCA9IGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnO1xuICAgIGlmICghZGF0YS5pc1RvdWNoRXZlbnQgJiYgJ3doaWNoJyBpbiBlICYmIGUud2hpY2ggPT09IDMpIHsgcmV0dXJuOyB9XG4gICAgaWYgKCFkYXRhLmlzVG91Y2hFdmVudCAmJiAnYnV0dG9uJyBpbiBlICYmIGUuYnV0dG9uID4gMCkgeyByZXR1cm47IH1cbiAgICBpZiAoZGF0YS5pc1RvdWNoZWQgJiYgZGF0YS5pc01vdmVkKSB7IHJldHVybjsgfVxuICAgIGlmIChwYXJhbXMubm9Td2lwaW5nICYmICR0YXJnZXRFbC5jbG9zZXN0KHBhcmFtcy5ub1N3aXBpbmdTZWxlY3RvciA/IHBhcmFtcy5ub1N3aXBpbmdTZWxlY3RvciA6IChcIi5cIiArIChwYXJhbXMubm9Td2lwaW5nQ2xhc3MpKSlbMF0pIHtcbiAgICAgIHN3aXBlci5hbGxvd0NsaWNrID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5zd2lwZUhhbmRsZXIpIHtcbiAgICAgIGlmICghJHRhcmdldEVsLmNsb3Nlc3QocGFyYW1zLnN3aXBlSGFuZGxlcilbMF0pIHsgcmV0dXJuOyB9XG4gICAgfVxuXG4gICAgdG91Y2hlcy5jdXJyZW50WCA9IGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnID8gZS50YXJnZXRUb3VjaGVzWzBdLnBhZ2VYIDogZS5wYWdlWDtcbiAgICB0b3VjaGVzLmN1cnJlbnRZID0gZS50eXBlID09PSAndG91Y2hzdGFydCcgPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVkgOiBlLnBhZ2VZO1xuICAgIHZhciBzdGFydFggPSB0b3VjaGVzLmN1cnJlbnRYO1xuICAgIHZhciBzdGFydFkgPSB0b3VjaGVzLmN1cnJlbnRZO1xuXG4gICAgLy8gRG8gTk9UIHN0YXJ0IGlmIGlPUyBlZGdlIHN3aXBlIGlzIGRldGVjdGVkLiBPdGhlcndpc2UgaU9TIGFwcCAoVUlXZWJWaWV3KSBjYW5ub3Qgc3dpcGUtdG8tZ28tYmFjayBhbnltb3JlXG5cbiAgICB2YXIgZWRnZVN3aXBlRGV0ZWN0aW9uID0gcGFyYW1zLmVkZ2VTd2lwZURldGVjdGlvbiB8fCBwYXJhbXMuaU9TRWRnZVN3aXBlRGV0ZWN0aW9uO1xuICAgIHZhciBlZGdlU3dpcGVUaHJlc2hvbGQgPSBwYXJhbXMuZWRnZVN3aXBlVGhyZXNob2xkIHx8IHBhcmFtcy5pT1NFZGdlU3dpcGVUaHJlc2hvbGQ7XG4gICAgaWYgKFxuICAgICAgZWRnZVN3aXBlRGV0ZWN0aW9uXG4gICAgICAmJiAoKHN0YXJ0WCA8PSBlZGdlU3dpcGVUaHJlc2hvbGQpXG4gICAgICB8fCAoc3RhcnRYID49IHdpbi5zY3JlZW4ud2lkdGggLSBlZGdlU3dpcGVUaHJlc2hvbGQpKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFV0aWxzLmV4dGVuZChkYXRhLCB7XG4gICAgICBpc1RvdWNoZWQ6IHRydWUsXG4gICAgICBpc01vdmVkOiBmYWxzZSxcbiAgICAgIGFsbG93VG91Y2hDYWxsYmFja3M6IHRydWUsXG4gICAgICBpc1Njcm9sbGluZzogdW5kZWZpbmVkLFxuICAgICAgc3RhcnRNb3Zpbmc6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIHRvdWNoZXMuc3RhcnRYID0gc3RhcnRYO1xuICAgIHRvdWNoZXMuc3RhcnRZID0gc3RhcnRZO1xuICAgIGRhdGEudG91Y2hTdGFydFRpbWUgPSBVdGlscy5ub3coKTtcbiAgICBzd2lwZXIuYWxsb3dDbGljayA9IHRydWU7XG4gICAgc3dpcGVyLnVwZGF0ZVNpemUoKTtcbiAgICBzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmFtcy50aHJlc2hvbGQgPiAwKSB7IGRhdGEuYWxsb3dUaHJlc2hvbGRNb3ZlID0gZmFsc2U7IH1cbiAgICBpZiAoZS50eXBlICE9PSAndG91Y2hzdGFydCcpIHtcbiAgICAgIHZhciBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICBpZiAoJHRhcmdldEVsLmlzKGRhdGEuZm9ybUVsZW1lbnRzKSkgeyBwcmV2ZW50RGVmYXVsdCA9IGZhbHNlOyB9XG4gICAgICBpZiAoXG4gICAgICAgIGRvYy5hY3RpdmVFbGVtZW50XG4gICAgICAgICYmICQoZG9jLmFjdGl2ZUVsZW1lbnQpLmlzKGRhdGEuZm9ybUVsZW1lbnRzKVxuICAgICAgICAmJiBkb2MuYWN0aXZlRWxlbWVudCAhPT0gJHRhcmdldEVsWzBdXG4gICAgICApIHtcbiAgICAgICAgZG9jLmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2hvdWxkUHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdCAmJiBzd2lwZXIuYWxsb3dUb3VjaE1vdmUgJiYgcGFyYW1zLnRvdWNoU3RhcnRQcmV2ZW50RGVmYXVsdDtcbiAgICAgIGlmIChwYXJhbXMudG91Y2hTdGFydEZvcmNlUHJldmVudERlZmF1bHQgfHwgc2hvdWxkUHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICBzd2lwZXIuZW1pdCgndG91Y2hTdGFydCcsIGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Ub3VjaE1vdmUgKGV2ZW50KSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIGRhdGEgPSBzd2lwZXIudG91Y2hFdmVudHNEYXRhO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgIHZhciB0b3VjaGVzID0gc3dpcGVyLnRvdWNoZXM7XG4gICAgdmFyIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGU7XG4gICAgdmFyIGUgPSBldmVudDtcbiAgICBpZiAoZS5vcmlnaW5hbEV2ZW50KSB7IGUgPSBlLm9yaWdpbmFsRXZlbnQ7IH1cbiAgICBpZiAoIWRhdGEuaXNUb3VjaGVkKSB7XG4gICAgICBpZiAoZGF0YS5zdGFydE1vdmluZyAmJiBkYXRhLmlzU2Nyb2xsaW5nKSB7XG4gICAgICAgIHN3aXBlci5lbWl0KCd0b3VjaE1vdmVPcHBvc2l0ZScsIGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZGF0YS5pc1RvdWNoRXZlbnQgJiYgZS50eXBlID09PSAnbW91c2Vtb3ZlJykgeyByZXR1cm47IH1cbiAgICB2YXIgdGFyZ2V0VG91Y2ggPSBlLnR5cGUgPT09ICd0b3VjaG1vdmUnICYmIGUudGFyZ2V0VG91Y2hlcyAmJiAoZS50YXJnZXRUb3VjaGVzWzBdIHx8IGUuY2hhbmdlZFRvdWNoZXNbMF0pO1xuICAgIHZhciBwYWdlWCA9IGUudHlwZSA9PT0gJ3RvdWNobW92ZScgPyB0YXJnZXRUb3VjaC5wYWdlWCA6IGUucGFnZVg7XG4gICAgdmFyIHBhZ2VZID0gZS50eXBlID09PSAndG91Y2htb3ZlJyA/IHRhcmdldFRvdWNoLnBhZ2VZIDogZS5wYWdlWTtcbiAgICBpZiAoZS5wcmV2ZW50ZWRCeU5lc3RlZFN3aXBlcikge1xuICAgICAgdG91Y2hlcy5zdGFydFggPSBwYWdlWDtcbiAgICAgIHRvdWNoZXMuc3RhcnRZID0gcGFnZVk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghc3dpcGVyLmFsbG93VG91Y2hNb3ZlKSB7XG4gICAgICAvLyBpc01vdmVkID0gdHJ1ZTtcbiAgICAgIHN3aXBlci5hbGxvd0NsaWNrID0gZmFsc2U7XG4gICAgICBpZiAoZGF0YS5pc1RvdWNoZWQpIHtcbiAgICAgICAgVXRpbHMuZXh0ZW5kKHRvdWNoZXMsIHtcbiAgICAgICAgICBzdGFydFg6IHBhZ2VYLFxuICAgICAgICAgIHN0YXJ0WTogcGFnZVksXG4gICAgICAgICAgY3VycmVudFg6IHBhZ2VYLFxuICAgICAgICAgIGN1cnJlbnRZOiBwYWdlWSxcbiAgICAgICAgfSk7XG4gICAgICAgIGRhdGEudG91Y2hTdGFydFRpbWUgPSBVdGlscy5ub3coKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGRhdGEuaXNUb3VjaEV2ZW50ICYmIHBhcmFtcy50b3VjaFJlbGVhc2VPbkVkZ2VzICYmICFwYXJhbXMubG9vcCkge1xuICAgICAgaWYgKHN3aXBlci5pc1ZlcnRpY2FsKCkpIHtcbiAgICAgICAgLy8gVmVydGljYWxcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChwYWdlWSA8IHRvdWNoZXMuc3RhcnRZICYmIHN3aXBlci50cmFuc2xhdGUgPD0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpKVxuICAgICAgICAgIHx8IChwYWdlWSA+IHRvdWNoZXMuc3RhcnRZICYmIHN3aXBlci50cmFuc2xhdGUgPj0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKVxuICAgICAgICApIHtcbiAgICAgICAgICBkYXRhLmlzVG91Y2hlZCA9IGZhbHNlO1xuICAgICAgICAgIGRhdGEuaXNNb3ZlZCA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHBhZ2VYIDwgdG91Y2hlcy5zdGFydFggJiYgc3dpcGVyLnRyYW5zbGF0ZSA8PSBzd2lwZXIubWF4VHJhbnNsYXRlKCkpXG4gICAgICAgIHx8IChwYWdlWCA+IHRvdWNoZXMuc3RhcnRYICYmIHN3aXBlci50cmFuc2xhdGUgPj0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuaXNUb3VjaEV2ZW50ICYmIGRvYy5hY3RpdmVFbGVtZW50KSB7XG4gICAgICBpZiAoZS50YXJnZXQgPT09IGRvYy5hY3RpdmVFbGVtZW50ICYmICQoZS50YXJnZXQpLmlzKGRhdGEuZm9ybUVsZW1lbnRzKSkge1xuICAgICAgICBkYXRhLmlzTW92ZWQgPSB0cnVlO1xuICAgICAgICBzd2lwZXIuYWxsb3dDbGljayA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkYXRhLmFsbG93VG91Y2hDYWxsYmFja3MpIHtcbiAgICAgIHN3aXBlci5lbWl0KCd0b3VjaE1vdmUnLCBlKTtcbiAgICB9XG4gICAgaWYgKGUudGFyZ2V0VG91Y2hlcyAmJiBlLnRhcmdldFRvdWNoZXMubGVuZ3RoID4gMSkgeyByZXR1cm47IH1cblxuICAgIHRvdWNoZXMuY3VycmVudFggPSBwYWdlWDtcbiAgICB0b3VjaGVzLmN1cnJlbnRZID0gcGFnZVk7XG5cbiAgICB2YXIgZGlmZlggPSB0b3VjaGVzLmN1cnJlbnRYIC0gdG91Y2hlcy5zdGFydFg7XG4gICAgdmFyIGRpZmZZID0gdG91Y2hlcy5jdXJyZW50WSAtIHRvdWNoZXMuc3RhcnRZO1xuICAgIGlmIChzd2lwZXIucGFyYW1zLnRocmVzaG9sZCAmJiBNYXRoLnNxcnQoKE1hdGgucG93KCBkaWZmWCwgMiApKSArIChNYXRoLnBvdyggZGlmZlksIDIgKSkpIDwgc3dpcGVyLnBhcmFtcy50aHJlc2hvbGQpIHsgcmV0dXJuOyB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEuaXNTY3JvbGxpbmcgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YXIgdG91Y2hBbmdsZTtcbiAgICAgIGlmICgoc3dpcGVyLmlzSG9yaXpvbnRhbCgpICYmIHRvdWNoZXMuY3VycmVudFkgPT09IHRvdWNoZXMuc3RhcnRZKSB8fCAoc3dpcGVyLmlzVmVydGljYWwoKSAmJiB0b3VjaGVzLmN1cnJlbnRYID09PSB0b3VjaGVzLnN0YXJ0WCkpIHtcbiAgICAgICAgZGF0YS5pc1Njcm9sbGluZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIGlmICgoZGlmZlggKiBkaWZmWCkgKyAoZGlmZlkgKiBkaWZmWSkgPj0gMjUpIHtcbiAgICAgICAgICB0b3VjaEFuZ2xlID0gKE1hdGguYXRhbjIoTWF0aC5hYnMoZGlmZlkpLCBNYXRoLmFicyhkaWZmWCkpICogMTgwKSAvIE1hdGguUEk7XG4gICAgICAgICAgZGF0YS5pc1Njcm9sbGluZyA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IHRvdWNoQW5nbGUgPiBwYXJhbXMudG91Y2hBbmdsZSA6ICg5MCAtIHRvdWNoQW5nbGUgPiBwYXJhbXMudG91Y2hBbmdsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuaXNTY3JvbGxpbmcpIHtcbiAgICAgIHN3aXBlci5lbWl0KCd0b3VjaE1vdmVPcHBvc2l0ZScsIGUpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEuc3RhcnRNb3ZpbmcgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodG91Y2hlcy5jdXJyZW50WCAhPT0gdG91Y2hlcy5zdGFydFggfHwgdG91Y2hlcy5jdXJyZW50WSAhPT0gdG91Y2hlcy5zdGFydFkpIHtcbiAgICAgICAgZGF0YS5zdGFydE1vdmluZyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkYXRhLmlzU2Nyb2xsaW5nKSB7XG4gICAgICBkYXRhLmlzVG91Y2hlZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWRhdGEuc3RhcnRNb3ZpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpcGVyLmFsbG93Q2xpY2sgPSBmYWxzZTtcbiAgICBpZiAoIXBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMudG91Y2hNb3ZlU3RvcFByb3BhZ2F0aW9uICYmICFwYXJhbXMubmVzdGVkKSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGlmICghZGF0YS5pc01vdmVkKSB7XG4gICAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgIH1cbiAgICAgIGRhdGEuc3RhcnRUcmFuc2xhdGUgPSBzd2lwZXIuZ2V0VHJhbnNsYXRlKCk7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbigwKTtcbiAgICAgIGlmIChzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLnRyaWdnZXIoJ3dlYmtpdFRyYW5zaXRpb25FbmQgdHJhbnNpdGlvbmVuZCcpO1xuICAgICAgfVxuICAgICAgZGF0YS5hbGxvd01vbWVudHVtQm91bmNlID0gZmFsc2U7XG4gICAgICAvLyBHcmFiIEN1cnNvclxuICAgICAgaWYgKHBhcmFtcy5ncmFiQ3Vyc29yICYmIChzd2lwZXIuYWxsb3dTbGlkZU5leHQgPT09IHRydWUgfHwgc3dpcGVyLmFsbG93U2xpZGVQcmV2ID09PSB0cnVlKSkge1xuICAgICAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcih0cnVlKTtcbiAgICAgIH1cbiAgICAgIHN3aXBlci5lbWl0KCdzbGlkZXJGaXJzdE1vdmUnLCBlKTtcbiAgICB9XG4gICAgc3dpcGVyLmVtaXQoJ3NsaWRlck1vdmUnLCBlKTtcbiAgICBkYXRhLmlzTW92ZWQgPSB0cnVlO1xuXG4gICAgdmFyIGRpZmYgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyBkaWZmWCA6IGRpZmZZO1xuICAgIHRvdWNoZXMuZGlmZiA9IGRpZmY7XG5cbiAgICBkaWZmICo9IHBhcmFtcy50b3VjaFJhdGlvO1xuICAgIGlmIChydGwpIHsgZGlmZiA9IC1kaWZmOyB9XG5cbiAgICBzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPSBkaWZmID4gMCA/ICdwcmV2JyA6ICduZXh0JztcbiAgICBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBkaWZmICsgZGF0YS5zdGFydFRyYW5zbGF0ZTtcblxuICAgIHZhciBkaXNhYmxlUGFyZW50U3dpcGVyID0gdHJ1ZTtcbiAgICB2YXIgcmVzaXN0YW5jZVJhdGlvID0gcGFyYW1zLnJlc2lzdGFuY2VSYXRpbztcbiAgICBpZiAocGFyYW1zLnRvdWNoUmVsZWFzZU9uRWRnZXMpIHtcbiAgICAgIHJlc2lzdGFuY2VSYXRpbyA9IDA7XG4gICAgfVxuICAgIGlmICgoZGlmZiA+IDAgJiYgZGF0YS5jdXJyZW50VHJhbnNsYXRlID4gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSkge1xuICAgICAgZGlzYWJsZVBhcmVudFN3aXBlciA9IGZhbHNlO1xuICAgICAgaWYgKHBhcmFtcy5yZXNpc3RhbmNlKSB7IGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IChzd2lwZXIubWluVHJhbnNsYXRlKCkgLSAxKSArIChNYXRoLnBvdyggKC1zd2lwZXIubWluVHJhbnNsYXRlKCkgKyBkYXRhLnN0YXJ0VHJhbnNsYXRlICsgZGlmZiksIHJlc2lzdGFuY2VSYXRpbyApKTsgfVxuICAgIH0gZWxzZSBpZiAoZGlmZiA8IDAgJiYgZGF0YS5jdXJyZW50VHJhbnNsYXRlIDwgc3dpcGVyLm1heFRyYW5zbGF0ZSgpKSB7XG4gICAgICBkaXNhYmxlUGFyZW50U3dpcGVyID0gZmFsc2U7XG4gICAgICBpZiAocGFyYW1zLnJlc2lzdGFuY2UpIHsgZGF0YS5jdXJyZW50VHJhbnNsYXRlID0gKHN3aXBlci5tYXhUcmFuc2xhdGUoKSArIDEpIC0gKE1hdGgucG93KCAoc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gZGF0YS5zdGFydFRyYW5zbGF0ZSAtIGRpZmYpLCByZXNpc3RhbmNlUmF0aW8gKSk7IH1cbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZVBhcmVudFN3aXBlcikge1xuICAgICAgZS5wcmV2ZW50ZWRCeU5lc3RlZFN3aXBlciA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gRGlyZWN0aW9ucyBsb2Nrc1xuICAgIGlmICghc3dpcGVyLmFsbG93U2xpZGVOZXh0ICYmIHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ25leHQnICYmIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA8IGRhdGEuc3RhcnRUcmFuc2xhdGUpIHtcbiAgICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gICAgfVxuICAgIGlmICghc3dpcGVyLmFsbG93U2xpZGVQcmV2ICYmIHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ3ByZXYnICYmIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA+IGRhdGEuc3RhcnRUcmFuc2xhdGUpIHtcbiAgICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gICAgfVxuXG5cbiAgICAvLyBUaHJlc2hvbGRcbiAgICBpZiAocGFyYW1zLnRocmVzaG9sZCA+IDApIHtcbiAgICAgIGlmIChNYXRoLmFicyhkaWZmKSA+IHBhcmFtcy50aHJlc2hvbGQgfHwgZGF0YS5hbGxvd1RocmVzaG9sZE1vdmUpIHtcbiAgICAgICAgaWYgKCFkYXRhLmFsbG93VGhyZXNob2xkTW92ZSkge1xuICAgICAgICAgIGRhdGEuYWxsb3dUaHJlc2hvbGRNb3ZlID0gdHJ1ZTtcbiAgICAgICAgICB0b3VjaGVzLnN0YXJ0WCA9IHRvdWNoZXMuY3VycmVudFg7XG4gICAgICAgICAgdG91Y2hlcy5zdGFydFkgPSB0b3VjaGVzLmN1cnJlbnRZO1xuICAgICAgICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gICAgICAgICAgdG91Y2hlcy5kaWZmID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gdG91Y2hlcy5jdXJyZW50WCAtIHRvdWNoZXMuc3RhcnRYIDogdG91Y2hlcy5jdXJyZW50WSAtIHRvdWNoZXMuc3RhcnRZO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5jdXJyZW50VHJhbnNsYXRlID0gZGF0YS5zdGFydFRyYW5zbGF0ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyYW1zLmZvbGxvd0ZpbmdlciB8fCBwYXJhbXMuY3NzTW9kZSkgeyByZXR1cm47IH1cblxuICAgIC8vIFVwZGF0ZSBhY3RpdmUgaW5kZXggaW4gZnJlZSBtb2RlXG4gICAgaWYgKHBhcmFtcy5mcmVlTW9kZSB8fCBwYXJhbXMud2F0Y2hTbGlkZXNQcm9ncmVzcyB8fCBwYXJhbXMud2F0Y2hTbGlkZXNWaXNpYmlsaXR5KSB7XG4gICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuZnJlZU1vZGUpIHtcbiAgICAgIC8vIFZlbG9jaXR5XG4gICAgICBpZiAoZGF0YS52ZWxvY2l0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkYXRhLnZlbG9jaXRpZXMucHVzaCh7XG4gICAgICAgICAgcG9zaXRpb246IHRvdWNoZXNbc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ3N0YXJ0WCcgOiAnc3RhcnRZJ10sXG4gICAgICAgICAgdGltZTogZGF0YS50b3VjaFN0YXJ0VGltZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBkYXRhLnZlbG9jaXRpZXMucHVzaCh7XG4gICAgICAgIHBvc2l0aW9uOiB0b3VjaGVzW3N3aXBlci5pc0hvcml6b250YWwoKSA/ICdjdXJyZW50WCcgOiAnY3VycmVudFknXSxcbiAgICAgICAgdGltZTogVXRpbHMubm93KCksXG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gVXBkYXRlIHByb2dyZXNzXG4gICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKGRhdGEuY3VycmVudFRyYW5zbGF0ZSk7XG4gICAgLy8gVXBkYXRlIHRyYW5zbGF0ZVxuICAgIHN3aXBlci5zZXRUcmFuc2xhdGUoZGF0YS5jdXJyZW50VHJhbnNsYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uVG91Y2hFbmQgKGV2ZW50KSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIGRhdGEgPSBzd2lwZXIudG91Y2hFdmVudHNEYXRhO1xuXG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIHRvdWNoZXMgPSBzd2lwZXIudG91Y2hlcztcbiAgICB2YXIgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZTtcbiAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgIHZhciBzbGlkZXNHcmlkID0gc3dpcGVyLnNsaWRlc0dyaWQ7XG4gICAgdmFyIHNuYXBHcmlkID0gc3dpcGVyLnNuYXBHcmlkO1xuICAgIHZhciBlID0gZXZlbnQ7XG4gICAgaWYgKGUub3JpZ2luYWxFdmVudCkgeyBlID0gZS5vcmlnaW5hbEV2ZW50OyB9XG4gICAgaWYgKGRhdGEuYWxsb3dUb3VjaENhbGxiYWNrcykge1xuICAgICAgc3dpcGVyLmVtaXQoJ3RvdWNoRW5kJywgZSk7XG4gICAgfVxuICAgIGRhdGEuYWxsb3dUb3VjaENhbGxiYWNrcyA9IGZhbHNlO1xuICAgIGlmICghZGF0YS5pc1RvdWNoZWQpIHtcbiAgICAgIGlmIChkYXRhLmlzTW92ZWQgJiYgcGFyYW1zLmdyYWJDdXJzb3IpIHtcbiAgICAgICAgc3dpcGVyLnNldEdyYWJDdXJzb3IoZmFsc2UpO1xuICAgICAgfVxuICAgICAgZGF0YS5pc01vdmVkID0gZmFsc2U7XG4gICAgICBkYXRhLnN0YXJ0TW92aW5nID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFJldHVybiBHcmFiIEN1cnNvclxuICAgIGlmIChwYXJhbXMuZ3JhYkN1cnNvciAmJiBkYXRhLmlzTW92ZWQgJiYgZGF0YS5pc1RvdWNoZWQgJiYgKHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9PT0gdHJ1ZSB8fCBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPT09IHRydWUpKSB7XG4gICAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcihmYWxzZSk7XG4gICAgfVxuXG4gICAgLy8gVGltZSBkaWZmXG4gICAgdmFyIHRvdWNoRW5kVGltZSA9IFV0aWxzLm5vdygpO1xuICAgIHZhciB0aW1lRGlmZiA9IHRvdWNoRW5kVGltZSAtIGRhdGEudG91Y2hTdGFydFRpbWU7XG5cbiAgICAvLyBUYXAsIGRvdWJsZVRhcCwgQ2xpY2tcbiAgICBpZiAoc3dpcGVyLmFsbG93Q2xpY2spIHtcbiAgICAgIHN3aXBlci51cGRhdGVDbGlja2VkU2xpZGUoZSk7XG4gICAgICBzd2lwZXIuZW1pdCgndGFwIGNsaWNrJywgZSk7XG4gICAgICBpZiAodGltZURpZmYgPCAzMDAgJiYgKHRvdWNoRW5kVGltZSAtIGRhdGEubGFzdENsaWNrVGltZSkgPCAzMDApIHtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ2RvdWJsZVRhcCBkb3VibGVDbGljaycsIGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRhdGEubGFzdENsaWNrVGltZSA9IFV0aWxzLm5vdygpO1xuICAgIFV0aWxzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghc3dpcGVyLmRlc3Ryb3llZCkgeyBzd2lwZXIuYWxsb3dDbGljayA9IHRydWU7IH1cbiAgICB9KTtcblxuICAgIGlmICghZGF0YS5pc1RvdWNoZWQgfHwgIWRhdGEuaXNNb3ZlZCB8fCAhc3dpcGVyLnN3aXBlRGlyZWN0aW9uIHx8IHRvdWNoZXMuZGlmZiA9PT0gMCB8fCBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPT09IGRhdGEuc3RhcnRUcmFuc2xhdGUpIHtcbiAgICAgIGRhdGEuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgICBkYXRhLmlzTW92ZWQgPSBmYWxzZTtcbiAgICAgIGRhdGEuc3RhcnRNb3ZpbmcgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZGF0YS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICBkYXRhLmlzTW92ZWQgPSBmYWxzZTtcbiAgICBkYXRhLnN0YXJ0TW92aW5nID0gZmFsc2U7XG5cbiAgICB2YXIgY3VycmVudFBvcztcbiAgICBpZiAocGFyYW1zLmZvbGxvd0Zpbmdlcikge1xuICAgICAgY3VycmVudFBvcyA9IHJ0bCA/IHN3aXBlci50cmFuc2xhdGUgOiAtc3dpcGVyLnRyYW5zbGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudFBvcyA9IC1kYXRhLmN1cnJlbnRUcmFuc2xhdGU7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5mcmVlTW9kZSkge1xuICAgICAgaWYgKGN1cnJlbnRQb3MgPCAtc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50UG9zID4gLXN3aXBlci5tYXhUcmFuc2xhdGUoKSkge1xuICAgICAgICBpZiAoc3dpcGVyLnNsaWRlcy5sZW5ndGggPCBzbmFwR3JpZC5sZW5ndGgpIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVUbyhzbmFwR3JpZC5sZW5ndGggLSAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmFtcy5mcmVlTW9kZU1vbWVudHVtKSB7XG4gICAgICAgIGlmIChkYXRhLnZlbG9jaXRpZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHZhciBsYXN0TW92ZUV2ZW50ID0gZGF0YS52ZWxvY2l0aWVzLnBvcCgpO1xuICAgICAgICAgIHZhciB2ZWxvY2l0eUV2ZW50ID0gZGF0YS52ZWxvY2l0aWVzLnBvcCgpO1xuXG4gICAgICAgICAgdmFyIGRpc3RhbmNlID0gbGFzdE1vdmVFdmVudC5wb3NpdGlvbiAtIHZlbG9jaXR5RXZlbnQucG9zaXRpb247XG4gICAgICAgICAgdmFyIHRpbWUgPSBsYXN0TW92ZUV2ZW50LnRpbWUgLSB2ZWxvY2l0eUV2ZW50LnRpbWU7XG4gICAgICAgICAgc3dpcGVyLnZlbG9jaXR5ID0gZGlzdGFuY2UgLyB0aW1lO1xuICAgICAgICAgIHN3aXBlci52ZWxvY2l0eSAvPSAyO1xuICAgICAgICAgIGlmIChNYXRoLmFicyhzd2lwZXIudmVsb2NpdHkpIDwgcGFyYW1zLmZyZWVNb2RlTWluaW11bVZlbG9jaXR5KSB7XG4gICAgICAgICAgICBzd2lwZXIudmVsb2NpdHkgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0aGlzIGltcGxpZXMgdGhhdCB0aGUgdXNlciBzdG9wcGVkIG1vdmluZyBhIGZpbmdlciB0aGVuIHJlbGVhc2VkLlxuICAgICAgICAgIC8vIFRoZXJlIHdvdWxkIGJlIG5vIGV2ZW50cyB3aXRoIGRpc3RhbmNlIHplcm8sIHNvIHRoZSBsYXN0IGV2ZW50IGlzIHN0YWxlLlxuICAgICAgICAgIGlmICh0aW1lID4gMTUwIHx8IChVdGlscy5ub3coKSAtIGxhc3RNb3ZlRXZlbnQudGltZSkgPiAzMDApIHtcbiAgICAgICAgICAgIHN3aXBlci52ZWxvY2l0eSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN3aXBlci52ZWxvY2l0eSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgc3dpcGVyLnZlbG9jaXR5ICo9IHBhcmFtcy5mcmVlTW9kZU1vbWVudHVtVmVsb2NpdHlSYXRpbztcblxuICAgICAgICBkYXRhLnZlbG9jaXRpZXMubGVuZ3RoID0gMDtcbiAgICAgICAgdmFyIG1vbWVudHVtRHVyYXRpb24gPSAxMDAwICogcGFyYW1zLmZyZWVNb2RlTW9tZW50dW1SYXRpbztcbiAgICAgICAgdmFyIG1vbWVudHVtRGlzdGFuY2UgPSBzd2lwZXIudmVsb2NpdHkgKiBtb21lbnR1bUR1cmF0aW9uO1xuXG4gICAgICAgIHZhciBuZXdQb3NpdGlvbiA9IHN3aXBlci50cmFuc2xhdGUgKyBtb21lbnR1bURpc3RhbmNlO1xuICAgICAgICBpZiAocnRsKSB7IG5ld1Bvc2l0aW9uID0gLW5ld1Bvc2l0aW9uOyB9XG5cbiAgICAgICAgdmFyIGRvQm91bmNlID0gZmFsc2U7XG4gICAgICAgIHZhciBhZnRlckJvdW5jZVBvc2l0aW9uO1xuICAgICAgICB2YXIgYm91bmNlQW1vdW50ID0gTWF0aC5hYnMoc3dpcGVyLnZlbG9jaXR5KSAqIDIwICogcGFyYW1zLmZyZWVNb2RlTW9tZW50dW1Cb3VuY2VSYXRpbztcbiAgICAgICAgdmFyIG5lZWRzTG9vcEZpeDtcbiAgICAgICAgaWYgKG5ld1Bvc2l0aW9uIDwgc3dpcGVyLm1heFRyYW5zbGF0ZSgpKSB7XG4gICAgICAgICAgaWYgKHBhcmFtcy5mcmVlTW9kZU1vbWVudHVtQm91bmNlKSB7XG4gICAgICAgICAgICBpZiAobmV3UG9zaXRpb24gKyBzd2lwZXIubWF4VHJhbnNsYXRlKCkgPCAtYm91bmNlQW1vdW50KSB7XG4gICAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gYm91bmNlQW1vdW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWZ0ZXJCb3VuY2VQb3NpdGlvbiA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKTtcbiAgICAgICAgICAgIGRvQm91bmNlID0gdHJ1ZTtcbiAgICAgICAgICAgIGRhdGEuYWxsb3dNb21lbnR1bUJvdW5jZSA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocGFyYW1zLmxvb3AgJiYgcGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7IG5lZWRzTG9vcEZpeCA9IHRydWU7IH1cbiAgICAgICAgfSBlbHNlIGlmIChuZXdQb3NpdGlvbiA+IHN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgICAgIGlmIChwYXJhbXMuZnJlZU1vZGVNb21lbnR1bUJvdW5jZSkge1xuICAgICAgICAgICAgaWYgKG5ld1Bvc2l0aW9uIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpID4gYm91bmNlQW1vdW50KSB7XG4gICAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpICsgYm91bmNlQW1vdW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWZ0ZXJCb3VuY2VQb3NpdGlvbiA9IHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgICAgICAgICAgIGRvQm91bmNlID0gdHJ1ZTtcbiAgICAgICAgICAgIGRhdGEuYWxsb3dNb21lbnR1bUJvdW5jZSA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocGFyYW1zLmxvb3AgJiYgcGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7IG5lZWRzTG9vcEZpeCA9IHRydWU7IH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbXMuZnJlZU1vZGVTdGlja3kpIHtcbiAgICAgICAgICB2YXIgbmV4dFNsaWRlO1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc25hcEdyaWQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgICAgIGlmIChzbmFwR3JpZFtqXSA+IC1uZXdQb3NpdGlvbikge1xuICAgICAgICAgICAgICBuZXh0U2xpZGUgPSBqO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoTWF0aC5hYnMoc25hcEdyaWRbbmV4dFNsaWRlXSAtIG5ld1Bvc2l0aW9uKSA8IE1hdGguYWJzKHNuYXBHcmlkW25leHRTbGlkZSAtIDFdIC0gbmV3UG9zaXRpb24pIHx8IHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ25leHQnKSB7XG4gICAgICAgICAgICBuZXdQb3NpdGlvbiA9IHNuYXBHcmlkW25leHRTbGlkZV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc25hcEdyaWRbbmV4dFNsaWRlIC0gMV07XG4gICAgICAgICAgfVxuICAgICAgICAgIG5ld1Bvc2l0aW9uID0gLW5ld1Bvc2l0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZWVkc0xvb3BGaXgpIHtcbiAgICAgICAgICBzd2lwZXIub25jZSgndHJhbnNpdGlvbkVuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN3aXBlci5sb29wRml4KCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRml4IGR1cmF0aW9uXG4gICAgICAgIGlmIChzd2lwZXIudmVsb2NpdHkgIT09IDApIHtcbiAgICAgICAgICBpZiAocnRsKSB7XG4gICAgICAgICAgICBtb21lbnR1bUR1cmF0aW9uID0gTWF0aC5hYnMoKC1uZXdQb3NpdGlvbiAtIHN3aXBlci50cmFuc2xhdGUpIC8gc3dpcGVyLnZlbG9jaXR5KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9tZW50dW1EdXJhdGlvbiA9IE1hdGguYWJzKChuZXdQb3NpdGlvbiAtIHN3aXBlci50cmFuc2xhdGUpIC8gc3dpcGVyLnZlbG9jaXR5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBhcmFtcy5mcmVlTW9kZVN0aWNreSkge1xuICAgICAgICAgICAgLy8gSWYgZnJlZU1vZGVTdGlja3kgaXMgYWN0aXZlIGFuZCB0aGUgdXNlciBlbmRzIGEgc3dpcGUgd2l0aCBhIHNsb3ctdmVsb2NpdHlcbiAgICAgICAgICAgIC8vIGV2ZW50LCB0aGVuIGR1cmF0aW9ucyBjYW4gYmUgMjArIHNlY29uZHMgdG8gc2xpZGUgb25lIChvciB6ZXJvISkgc2xpZGVzLlxuICAgICAgICAgICAgLy8gSXQncyBlYXN5IHRvIHNlZSB0aGlzIHdoZW4gc2ltdWxhdGluZyB0b3VjaCB3aXRoIG1vdXNlIGV2ZW50cy4gVG8gZml4IHRoaXMsXG4gICAgICAgICAgICAvLyBsaW1pdCBzaW5nbGUtc2xpZGUgc3dpcGVzIHRvIHRoZSBkZWZhdWx0IHNsaWRlIGR1cmF0aW9uLiBUaGlzIGFsc28gaGFzIHRoZVxuICAgICAgICAgICAgLy8gbmljZSBzaWRlIGVmZmVjdCBvZiBtYXRjaGluZyBzbGlkZSBzcGVlZCBpZiB0aGUgdXNlciBzdG9wcGVkIG1vdmluZyBiZWZvcmVcbiAgICAgICAgICAgIC8vIGxpZnRpbmcgZmluZ2VyIG9yIG1vdXNlIHZzLiBtb3Zpbmcgc2xvd2x5IGJlZm9yZSBsaWZ0aW5nIHRoZSBmaW5nZXIvbW91c2UuXG4gICAgICAgICAgICAvLyBGb3IgZmFzdGVyIHN3aXBlcywgYWxzbyBhcHBseSBsaW1pdHMgKGFsYmVpdCBoaWdoZXIgb25lcykuXG4gICAgICAgICAgICB2YXIgbW92ZURpc3RhbmNlID0gTWF0aC5hYnMoKHJ0bCA/IC1uZXdQb3NpdGlvbiA6IG5ld1Bvc2l0aW9uKSAtIHN3aXBlci50cmFuc2xhdGUpO1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRTbGlkZVNpemUgPSBzd2lwZXIuc2xpZGVzU2l6ZXNHcmlkW3N3aXBlci5hY3RpdmVJbmRleF07XG4gICAgICAgICAgICBpZiAobW92ZURpc3RhbmNlIDwgY3VycmVudFNsaWRlU2l6ZSkge1xuICAgICAgICAgICAgICBtb21lbnR1bUR1cmF0aW9uID0gcGFyYW1zLnNwZWVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtb3ZlRGlzdGFuY2UgPCAyICogY3VycmVudFNsaWRlU2l6ZSkge1xuICAgICAgICAgICAgICBtb21lbnR1bUR1cmF0aW9uID0gcGFyYW1zLnNwZWVkICogMS41O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbW9tZW50dW1EdXJhdGlvbiA9IHBhcmFtcy5zcGVlZCAqIDIuNTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW1zLmZyZWVNb2RlU3RpY2t5KSB7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlVG9DbG9zZXN0KCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmFtcy5mcmVlTW9kZU1vbWVudHVtQm91bmNlICYmIGRvQm91bmNlKSB7XG4gICAgICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKGFmdGVyQm91bmNlUG9zaXRpb24pO1xuICAgICAgICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKG1vbWVudHVtRHVyYXRpb24pO1xuICAgICAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUobmV3UG9zaXRpb24pO1xuICAgICAgICAgIHN3aXBlci50cmFuc2l0aW9uU3RhcnQodHJ1ZSwgc3dpcGVyLnN3aXBlRGlyZWN0aW9uKTtcbiAgICAgICAgICBzd2lwZXIuYW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAkd3JhcHBlckVsLnRyYW5zaXRpb25FbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCB8fCAhZGF0YS5hbGxvd01vbWVudHVtQm91bmNlKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ21vbWVudHVtQm91bmNlJyk7XG5cbiAgICAgICAgICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKHBhcmFtcy5zcGVlZCk7XG4gICAgICAgICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKGFmdGVyQm91bmNlUG9zaXRpb24pO1xuICAgICAgICAgICAgJHdyYXBwZXJFbC50cmFuc2l0aW9uRW5kKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgc3dpcGVyLnRyYW5zaXRpb25FbmQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHN3aXBlci52ZWxvY2l0eSkge1xuICAgICAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcyhuZXdQb3NpdGlvbik7XG4gICAgICAgICAgc3dpcGVyLnNldFRyYW5zaXRpb24obW9tZW50dW1EdXJhdGlvbik7XG4gICAgICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShuZXdQb3NpdGlvbik7XG4gICAgICAgICAgc3dpcGVyLnRyYW5zaXRpb25TdGFydCh0cnVlLCBzd2lwZXIuc3dpcGVEaXJlY3Rpb24pO1xuICAgICAgICAgIGlmICghc3dpcGVyLmFuaW1hdGluZykge1xuICAgICAgICAgICAgc3dpcGVyLmFuaW1hdGluZyA9IHRydWU7XG4gICAgICAgICAgICAkd3JhcHBlckVsLnRyYW5zaXRpb25FbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICBzd2lwZXIudHJhbnNpdGlvbkVuZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcyhuZXdQb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLmZyZWVNb2RlU3RpY2t5KSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvQ2xvc2VzdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghcGFyYW1zLmZyZWVNb2RlTW9tZW50dW0gfHwgdGltZURpZmYgPj0gcGFyYW1zLmxvbmdTd2lwZXNNcykge1xuICAgICAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KCk7XG4gICAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRmluZCBjdXJyZW50IHNsaWRlXG4gICAgdmFyIHN0b3BJbmRleCA9IDA7XG4gICAgdmFyIGdyb3VwU2l6ZSA9IHN3aXBlci5zbGlkZXNTaXplc0dyaWRbMF07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXNHcmlkLmxlbmd0aDsgaSArPSAoaSA8IHBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAgPyAxIDogcGFyYW1zLnNsaWRlc1Blckdyb3VwKSkge1xuICAgICAgdmFyIGluY3JlbWVudCQxID0gKGkgPCBwYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwIC0gMSA/IDEgOiBwYXJhbXMuc2xpZGVzUGVyR3JvdXApO1xuICAgICAgaWYgKHR5cGVvZiBzbGlkZXNHcmlkW2kgKyBpbmNyZW1lbnQkMV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmIChjdXJyZW50UG9zID49IHNsaWRlc0dyaWRbaV0gJiYgY3VycmVudFBvcyA8IHNsaWRlc0dyaWRbaSArIGluY3JlbWVudCQxXSkge1xuICAgICAgICAgIHN0b3BJbmRleCA9IGk7XG4gICAgICAgICAgZ3JvdXBTaXplID0gc2xpZGVzR3JpZFtpICsgaW5jcmVtZW50JDFdIC0gc2xpZGVzR3JpZFtpXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50UG9zID49IHNsaWRlc0dyaWRbaV0pIHtcbiAgICAgICAgc3RvcEluZGV4ID0gaTtcbiAgICAgICAgZ3JvdXBTaXplID0gc2xpZGVzR3JpZFtzbGlkZXNHcmlkLmxlbmd0aCAtIDFdIC0gc2xpZGVzR3JpZFtzbGlkZXNHcmlkLmxlbmd0aCAtIDJdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZpbmQgY3VycmVudCBzbGlkZSBzaXplXG4gICAgdmFyIHJhdGlvID0gKGN1cnJlbnRQb3MgLSBzbGlkZXNHcmlkW3N0b3BJbmRleF0pIC8gZ3JvdXBTaXplO1xuICAgIHZhciBpbmNyZW1lbnQgPSAoc3RvcEluZGV4IDwgcGFyYW1zLnNsaWRlc1Blckdyb3VwU2tpcCAtIDEgPyAxIDogcGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcblxuICAgIGlmICh0aW1lRGlmZiA+IHBhcmFtcy5sb25nU3dpcGVzTXMpIHtcbiAgICAgIC8vIExvbmcgdG91Y2hlc1xuICAgICAgaWYgKCFwYXJhbXMubG9uZ1N3aXBlcykge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAnbmV4dCcpIHtcbiAgICAgICAgaWYgKHJhdGlvID49IHBhcmFtcy5sb25nU3dpcGVzUmF0aW8pIHsgc3dpcGVyLnNsaWRlVG8oc3RvcEluZGV4ICsgaW5jcmVtZW50KTsgfVxuICAgICAgICBlbHNlIHsgc3dpcGVyLnNsaWRlVG8oc3RvcEluZGV4KTsgfVxuICAgICAgfVxuICAgICAgaWYgKHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ3ByZXYnKSB7XG4gICAgICAgIGlmIChyYXRpbyA+ICgxIC0gcGFyYW1zLmxvbmdTd2lwZXNSYXRpbykpIHsgc3dpcGVyLnNsaWRlVG8oc3RvcEluZGV4ICsgaW5jcmVtZW50KTsgfVxuICAgICAgICBlbHNlIHsgc3dpcGVyLnNsaWRlVG8oc3RvcEluZGV4KTsgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTaG9ydCBzd2lwZXNcbiAgICAgIGlmICghcGFyYW1zLnNob3J0U3dpcGVzKSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBpc05hdkJ1dHRvblRhcmdldCA9IHN3aXBlci5uYXZpZ2F0aW9uICYmIChlLnRhcmdldCA9PT0gc3dpcGVyLm5hdmlnYXRpb24ubmV4dEVsIHx8IGUudGFyZ2V0ID09PSBzd2lwZXIubmF2aWdhdGlvbi5wcmV2RWwpO1xuICAgICAgaWYgKCFpc05hdkJ1dHRvblRhcmdldCkge1xuICAgICAgICBpZiAoc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAnbmV4dCcpIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXggKyBpbmNyZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPT09ICdwcmV2Jykge1xuICAgICAgICAgIHN3aXBlci5zbGlkZVRvKHN0b3BJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZS50YXJnZXQgPT09IHN3aXBlci5uYXZpZ2F0aW9uLm5leHRFbCkge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXggKyBpbmNyZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3RvcEluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvblJlc2l6ZSAoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG5cbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgZWwgPSBzd2lwZXIuZWw7XG5cbiAgICBpZiAoZWwgJiYgZWwub2Zmc2V0V2lkdGggPT09IDApIHsgcmV0dXJuOyB9XG5cbiAgICAvLyBCcmVha3BvaW50c1xuICAgIGlmIChwYXJhbXMuYnJlYWtwb2ludHMpIHtcbiAgICAgIHN3aXBlci5zZXRCcmVha3BvaW50KCk7XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBsb2Nrc1xuICAgIHZhciBhbGxvd1NsaWRlTmV4dCA9IHN3aXBlci5hbGxvd1NsaWRlTmV4dDtcbiAgICB2YXIgYWxsb3dTbGlkZVByZXYgPSBzd2lwZXIuYWxsb3dTbGlkZVByZXY7XG4gICAgdmFyIHNuYXBHcmlkID0gc3dpcGVyLnNuYXBHcmlkO1xuXG4gICAgLy8gRGlzYWJsZSBsb2NrcyBvbiByZXNpemVcbiAgICBzd2lwZXIuYWxsb3dTbGlkZU5leHQgPSB0cnVlO1xuICAgIHN3aXBlci5hbGxvd1NsaWRlUHJldiA9IHRydWU7XG5cbiAgICBzd2lwZXIudXBkYXRlU2l6ZSgpO1xuICAgIHN3aXBlci51cGRhdGVTbGlkZXMoKTtcblxuICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgaWYgKChwYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nIHx8IHBhcmFtcy5zbGlkZXNQZXJWaWV3ID4gMSkgJiYgc3dpcGVyLmlzRW5kICYmICFzd2lwZXIucGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIDEsIDAsIGZhbHNlLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLmFjdGl2ZUluZGV4LCAwLCBmYWxzZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHN3aXBlci5hdXRvcGxheSAmJiBzd2lwZXIuYXV0b3BsYXkucnVubmluZyAmJiBzd2lwZXIuYXV0b3BsYXkucGF1c2VkKSB7XG4gICAgICBzd2lwZXIuYXV0b3BsYXkucnVuKCk7XG4gICAgfVxuICAgIC8vIFJldHVybiBsb2NrcyBhZnRlciByZXNpemVcbiAgICBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPSBhbGxvd1NsaWRlUHJldjtcbiAgICBzd2lwZXIuYWxsb3dTbGlkZU5leHQgPSBhbGxvd1NsaWRlTmV4dDtcblxuICAgIGlmIChzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc25hcEdyaWQgIT09IHN3aXBlci5zbmFwR3JpZCkge1xuICAgICAgc3dpcGVyLmNoZWNrT3ZlcmZsb3coKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbkNsaWNrIChlKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKCFzd2lwZXIuYWxsb3dDbGljaykge1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMucHJldmVudENsaWNrcykgeyBlLnByZXZlbnREZWZhdWx0KCk7IH1cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLnByZXZlbnRDbGlja3NQcm9wYWdhdGlvbiAmJiBzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25TY3JvbGwgKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciB3cmFwcGVyRWwgPSBzd2lwZXIud3JhcHBlckVsO1xuICAgIHN3aXBlci5wcmV2aW91c1RyYW5zbGF0ZSA9IHN3aXBlci50cmFuc2xhdGU7XG4gICAgc3dpcGVyLnRyYW5zbGF0ZSA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IC13cmFwcGVyRWwuc2Nyb2xsTGVmdCA6IC13cmFwcGVyRWwuc2Nyb2xsVG9wO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIGlmIChzd2lwZXIudHJhbnNsYXRlID09PSAtMCkgeyBzd2lwZXIudHJhbnNsYXRlID0gMDsgfVxuXG4gICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KCk7XG4gICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcblxuICAgIHZhciBuZXdQcm9ncmVzcztcbiAgICB2YXIgdHJhbnNsYXRlc0RpZmYgPSBzd2lwZXIubWF4VHJhbnNsYXRlKCkgLSBzd2lwZXIubWluVHJhbnNsYXRlKCk7XG4gICAgaWYgKHRyYW5zbGF0ZXNEaWZmID09PSAwKSB7XG4gICAgICBuZXdQcm9ncmVzcyA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1Byb2dyZXNzID0gKHN3aXBlci50cmFuc2xhdGUgLSBzd2lwZXIubWluVHJhbnNsYXRlKCkpIC8gKHRyYW5zbGF0ZXNEaWZmKTtcbiAgICB9XG4gICAgaWYgKG5ld1Byb2dyZXNzICE9PSBzd2lwZXIucHJvZ3Jlc3MpIHtcbiAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcyhzd2lwZXIudHJhbnNsYXRlKTtcbiAgICB9XG5cbiAgICBzd2lwZXIuZW1pdCgnc2V0VHJhbnNsYXRlJywgc3dpcGVyLnRyYW5zbGF0ZSwgZmFsc2UpO1xuICB9XG5cbiAgdmFyIGR1bW15RXZlbnRBdHRhY2hlZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBkdW1teUV2ZW50TGlzdGVuZXIoKSB7fVxuXG4gIGZ1bmN0aW9uIGF0dGFjaEV2ZW50cygpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgdG91Y2hFdmVudHMgPSBzd2lwZXIudG91Y2hFdmVudHM7XG4gICAgdmFyIGVsID0gc3dpcGVyLmVsO1xuICAgIHZhciB3cmFwcGVyRWwgPSBzd2lwZXIud3JhcHBlckVsO1xuXG4gICAgc3dpcGVyLm9uVG91Y2hTdGFydCA9IG9uVG91Y2hTdGFydC5iaW5kKHN3aXBlcik7XG4gICAgc3dpcGVyLm9uVG91Y2hNb3ZlID0gb25Ub3VjaE1vdmUuYmluZChzd2lwZXIpO1xuICAgIHN3aXBlci5vblRvdWNoRW5kID0gb25Ub3VjaEVuZC5iaW5kKHN3aXBlcik7XG4gICAgaWYgKHBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICBzd2lwZXIub25TY3JvbGwgPSBvblNjcm9sbC5iaW5kKHN3aXBlcik7XG4gICAgfVxuXG4gICAgc3dpcGVyLm9uQ2xpY2sgPSBvbkNsaWNrLmJpbmQoc3dpcGVyKTtcblxuICAgIHZhciBjYXB0dXJlID0gISFwYXJhbXMubmVzdGVkO1xuXG4gICAgLy8gVG91Y2ggRXZlbnRzXG4gICAgaWYgKCFTdXBwb3J0LnRvdWNoICYmIFN1cHBvcnQucG9pbnRlckV2ZW50cykge1xuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5zdGFydCwgc3dpcGVyLm9uVG91Y2hTdGFydCwgZmFsc2UpO1xuICAgICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMubW92ZSwgc3dpcGVyLm9uVG91Y2hNb3ZlLCBjYXB0dXJlKTtcbiAgICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLmVuZCwgc3dpcGVyLm9uVG91Y2hFbmQsIGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFN1cHBvcnQudG91Y2gpIHtcbiAgICAgICAgdmFyIHBhc3NpdmVMaXN0ZW5lciA9IHRvdWNoRXZlbnRzLnN0YXJ0ID09PSAndG91Y2hzdGFydCcgJiYgU3VwcG9ydC5wYXNzaXZlTGlzdGVuZXIgJiYgcGFyYW1zLnBhc3NpdmVMaXN0ZW5lcnMgPyB7IHBhc3NpdmU6IHRydWUsIGNhcHR1cmU6IGZhbHNlIH0gOiBmYWxzZTtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5zdGFydCwgc3dpcGVyLm9uVG91Y2hTdGFydCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5tb3ZlLCBzd2lwZXIub25Ub3VjaE1vdmUsIFN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyID8geyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogY2FwdHVyZSB9IDogY2FwdHVyZSk7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuZW5kLCBzd2lwZXIub25Ub3VjaEVuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgICAgaWYgKHRvdWNoRXZlbnRzLmNhbmNlbCkge1xuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuY2FuY2VsLCBzd2lwZXIub25Ub3VjaEVuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWR1bW15RXZlbnRBdHRhY2hlZCkge1xuICAgICAgICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgZHVtbXlFdmVudExpc3RlbmVyKTtcbiAgICAgICAgICBkdW1teUV2ZW50QXR0YWNoZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoKHBhcmFtcy5zaW11bGF0ZVRvdWNoICYmICFEZXZpY2UuaW9zICYmICFEZXZpY2UuYW5kcm9pZCkgfHwgKHBhcmFtcy5zaW11bGF0ZVRvdWNoICYmICFTdXBwb3J0LnRvdWNoICYmIERldmljZS5pb3MpKSB7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHN3aXBlci5vblRvdWNoU3RhcnQsIGZhbHNlKTtcbiAgICAgICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHN3aXBlci5vblRvdWNoTW92ZSwgY2FwdHVyZSk7XG4gICAgICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgc3dpcGVyLm9uVG91Y2hFbmQsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUHJldmVudCBMaW5rcyBDbGlja3NcbiAgICBpZiAocGFyYW1zLnByZXZlbnRDbGlja3MgfHwgcGFyYW1zLnByZXZlbnRDbGlja3NQcm9wYWdhdGlvbikge1xuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzd2lwZXIub25DbGljaywgdHJ1ZSk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuY3NzTW9kZSkge1xuICAgICAgd3JhcHBlckVsLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHN3aXBlci5vblNjcm9sbCk7XG4gICAgfVxuXG4gICAgLy8gUmVzaXplIGhhbmRsZXJcbiAgICBpZiAocGFyYW1zLnVwZGF0ZU9uV2luZG93UmVzaXplKSB7XG4gICAgICBzd2lwZXIub24oKERldmljZS5pb3MgfHwgRGV2aWNlLmFuZHJvaWQgPyAncmVzaXplIG9yaWVudGF0aW9uY2hhbmdlIG9ic2VydmVyVXBkYXRlJyA6ICdyZXNpemUgb2JzZXJ2ZXJVcGRhdGUnKSwgb25SZXNpemUsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIub24oJ29ic2VydmVyVXBkYXRlJywgb25SZXNpemUsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRldGFjaEV2ZW50cygpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcblxuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgIHZhciB0b3VjaEV2ZW50cyA9IHN3aXBlci50b3VjaEV2ZW50cztcbiAgICB2YXIgZWwgPSBzd2lwZXIuZWw7XG4gICAgdmFyIHdyYXBwZXJFbCA9IHN3aXBlci53cmFwcGVyRWw7XG5cbiAgICB2YXIgY2FwdHVyZSA9ICEhcGFyYW1zLm5lc3RlZDtcblxuICAgIC8vIFRvdWNoIEV2ZW50c1xuICAgIGlmICghU3VwcG9ydC50b3VjaCAmJiBTdXBwb3J0LnBvaW50ZXJFdmVudHMpIHtcbiAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuc3RhcnQsIHN3aXBlci5vblRvdWNoU3RhcnQsIGZhbHNlKTtcbiAgICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLm1vdmUsIHN3aXBlci5vblRvdWNoTW92ZSwgY2FwdHVyZSk7XG4gICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5lbmQsIHN3aXBlci5vblRvdWNoRW5kLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChTdXBwb3J0LnRvdWNoKSB7XG4gICAgICAgIHZhciBwYXNzaXZlTGlzdGVuZXIgPSB0b3VjaEV2ZW50cy5zdGFydCA9PT0gJ29uVG91Y2hTdGFydCcgJiYgU3VwcG9ydC5wYXNzaXZlTGlzdGVuZXIgJiYgcGFyYW1zLnBhc3NpdmVMaXN0ZW5lcnMgPyB7IHBhc3NpdmU6IHRydWUsIGNhcHR1cmU6IGZhbHNlIH0gOiBmYWxzZTtcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5zdGFydCwgc3dpcGVyLm9uVG91Y2hTdGFydCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5tb3ZlLCBzd2lwZXIub25Ub3VjaE1vdmUsIGNhcHR1cmUpO1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLmVuZCwgc3dpcGVyLm9uVG91Y2hFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICAgIGlmICh0b3VjaEV2ZW50cy5jYW5jZWwpIHtcbiAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLmNhbmNlbCwgc3dpcGVyLm9uVG91Y2hFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICgocGFyYW1zLnNpbXVsYXRlVG91Y2ggJiYgIURldmljZS5pb3MgJiYgIURldmljZS5hbmRyb2lkKSB8fCAocGFyYW1zLnNpbXVsYXRlVG91Y2ggJiYgIVN1cHBvcnQudG91Y2ggJiYgRGV2aWNlLmlvcykpIHtcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgc3dpcGVyLm9uVG91Y2hTdGFydCwgZmFsc2UpO1xuICAgICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgc3dpcGVyLm9uVG91Y2hNb3ZlLCBjYXB0dXJlKTtcbiAgICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBzd2lwZXIub25Ub3VjaEVuZCwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBQcmV2ZW50IExpbmtzIENsaWNrc1xuICAgIGlmIChwYXJhbXMucHJldmVudENsaWNrcyB8fCBwYXJhbXMucHJldmVudENsaWNrc1Byb3BhZ2F0aW9uKSB7XG4gICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHN3aXBlci5vbkNsaWNrLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHdyYXBwZXJFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzd2lwZXIub25TY3JvbGwpO1xuICAgIH1cblxuICAgIC8vIFJlc2l6ZSBoYW5kbGVyXG4gICAgc3dpcGVyLm9mZigoRGV2aWNlLmlvcyB8fCBEZXZpY2UuYW5kcm9pZCA/ICdyZXNpemUgb3JpZW50YXRpb25jaGFuZ2Ugb2JzZXJ2ZXJVcGRhdGUnIDogJ3Jlc2l6ZSBvYnNlcnZlclVwZGF0ZScpLCBvblJlc2l6ZSk7XG4gIH1cblxuICB2YXIgZXZlbnRzID0ge1xuICAgIGF0dGFjaEV2ZW50czogYXR0YWNoRXZlbnRzLFxuICAgIGRldGFjaEV2ZW50czogZGV0YWNoRXZlbnRzLFxuICB9O1xuXG4gIGZ1bmN0aW9uIHNldEJyZWFrcG9pbnQgKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICB2YXIgaW5pdGlhbGl6ZWQgPSBzd2lwZXIuaW5pdGlhbGl6ZWQ7XG4gICAgdmFyIGxvb3BlZFNsaWRlcyA9IHN3aXBlci5sb29wZWRTbGlkZXM7IGlmICggbG9vcGVkU2xpZGVzID09PSB2b2lkIDAgKSBsb29wZWRTbGlkZXMgPSAwO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgIHZhciAkZWwgPSBzd2lwZXIuJGVsO1xuICAgIHZhciBicmVha3BvaW50cyA9IHBhcmFtcy5icmVha3BvaW50cztcbiAgICBpZiAoIWJyZWFrcG9pbnRzIHx8IChicmVha3BvaW50cyAmJiBPYmplY3Qua2V5cyhicmVha3BvaW50cykubGVuZ3RoID09PSAwKSkgeyByZXR1cm47IH1cblxuICAgIC8vIEdldCBicmVha3BvaW50IGZvciB3aW5kb3cgd2lkdGggYW5kIHVwZGF0ZSBwYXJhbWV0ZXJzXG4gICAgdmFyIGJyZWFrcG9pbnQgPSBzd2lwZXIuZ2V0QnJlYWtwb2ludChicmVha3BvaW50cyk7XG5cbiAgICBpZiAoYnJlYWtwb2ludCAmJiBzd2lwZXIuY3VycmVudEJyZWFrcG9pbnQgIT09IGJyZWFrcG9pbnQpIHtcbiAgICAgIHZhciBicmVha3BvaW50T25seVBhcmFtcyA9IGJyZWFrcG9pbnQgaW4gYnJlYWtwb2ludHMgPyBicmVha3BvaW50c1ticmVha3BvaW50XSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChicmVha3BvaW50T25seVBhcmFtcykge1xuICAgICAgICBbJ3NsaWRlc1BlclZpZXcnLCAnc3BhY2VCZXR3ZWVuJywgJ3NsaWRlc1Blckdyb3VwJywgJ3NsaWRlc1Blckdyb3VwU2tpcCcsICdzbGlkZXNQZXJDb2x1bW4nXS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgICAgIHZhciBwYXJhbVZhbHVlID0gYnJlYWtwb2ludE9ubHlQYXJhbXNbcGFyYW1dO1xuICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1WYWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgaWYgKHBhcmFtID09PSAnc2xpZGVzUGVyVmlldycgJiYgKHBhcmFtVmFsdWUgPT09ICdBVVRPJyB8fCBwYXJhbVZhbHVlID09PSAnYXV0bycpKSB7XG4gICAgICAgICAgICBicmVha3BvaW50T25seVBhcmFtc1twYXJhbV0gPSAnYXV0byc7XG4gICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSA9PT0gJ3NsaWRlc1BlclZpZXcnKSB7XG4gICAgICAgICAgICBicmVha3BvaW50T25seVBhcmFtc1twYXJhbV0gPSBwYXJzZUZsb2F0KHBhcmFtVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBicmVha3BvaW50T25seVBhcmFtc1twYXJhbV0gPSBwYXJzZUludChwYXJhbVZhbHVlLCAxMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGJyZWFrcG9pbnRQYXJhbXMgPSBicmVha3BvaW50T25seVBhcmFtcyB8fCBzd2lwZXIub3JpZ2luYWxQYXJhbXM7XG4gICAgICB2YXIgd2FzTXVsdGlSb3cgPSBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uID4gMTtcbiAgICAgIHZhciBpc011bHRpUm93ID0gYnJlYWtwb2ludFBhcmFtcy5zbGlkZXNQZXJDb2x1bW4gPiAxO1xuICAgICAgaWYgKHdhc011bHRpUm93ICYmICFpc011bHRpUm93KSB7XG4gICAgICAgICRlbC5yZW1vdmVDbGFzcygoKHBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKSArIFwibXVsdGlyb3cgXCIgKyAocGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MpICsgXCJtdWx0aXJvdy1jb2x1bW5cIikpO1xuICAgICAgfSBlbHNlIGlmICghd2FzTXVsdGlSb3cgJiYgaXNNdWx0aVJvdykge1xuICAgICAgICAkZWwuYWRkQ2xhc3MoKChwYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcykgKyBcIm11bHRpcm93XCIpKTtcbiAgICAgICAgaWYgKGJyZWFrcG9pbnRQYXJhbXMuc2xpZGVzUGVyQ29sdW1uRmlsbCA9PT0gJ2NvbHVtbicpIHtcbiAgICAgICAgICAkZWwuYWRkQ2xhc3MoKChwYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcykgKyBcIm11bHRpcm93LWNvbHVtblwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGRpcmVjdGlvbkNoYW5nZWQgPSBicmVha3BvaW50UGFyYW1zLmRpcmVjdGlvbiAmJiBicmVha3BvaW50UGFyYW1zLmRpcmVjdGlvbiAhPT0gcGFyYW1zLmRpcmVjdGlvbjtcbiAgICAgIHZhciBuZWVkc1JlTG9vcCA9IHBhcmFtcy5sb29wICYmIChicmVha3BvaW50UGFyYW1zLnNsaWRlc1BlclZpZXcgIT09IHBhcmFtcy5zbGlkZXNQZXJWaWV3IHx8IGRpcmVjdGlvbkNoYW5nZWQpO1xuXG4gICAgICBpZiAoZGlyZWN0aW9uQ2hhbmdlZCAmJiBpbml0aWFsaXplZCkge1xuICAgICAgICBzd2lwZXIuY2hhbmdlRGlyZWN0aW9uKCk7XG4gICAgICB9XG5cbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIucGFyYW1zLCBicmVha3BvaW50UGFyYW1zKTtcblxuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICBhbGxvd1RvdWNoTW92ZTogc3dpcGVyLnBhcmFtcy5hbGxvd1RvdWNoTW92ZSxcbiAgICAgICAgYWxsb3dTbGlkZU5leHQ6IHN3aXBlci5wYXJhbXMuYWxsb3dTbGlkZU5leHQsXG4gICAgICAgIGFsbG93U2xpZGVQcmV2OiBzd2lwZXIucGFyYW1zLmFsbG93U2xpZGVQcmV2LFxuICAgICAgfSk7XG5cbiAgICAgIHN3aXBlci5jdXJyZW50QnJlYWtwb2ludCA9IGJyZWFrcG9pbnQ7XG5cbiAgICAgIGlmIChuZWVkc1JlTG9vcCAmJiBpbml0aWFsaXplZCkge1xuICAgICAgICBzd2lwZXIubG9vcERlc3Ryb3koKTtcbiAgICAgICAgc3dpcGVyLmxvb3BDcmVhdGUoKTtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlcygpO1xuICAgICAgICBzd2lwZXIuc2xpZGVUbygoYWN0aXZlSW5kZXggLSBsb29wZWRTbGlkZXMpICsgc3dpcGVyLmxvb3BlZFNsaWRlcywgMCwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIuZW1pdCgnYnJlYWtwb2ludCcsIGJyZWFrcG9pbnRQYXJhbXMpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJyZWFrcG9pbnQgKGJyZWFrcG9pbnRzKSB7XG4gICAgLy8gR2V0IGJyZWFrcG9pbnQgZm9yIHdpbmRvdyB3aWR0aFxuICAgIGlmICghYnJlYWtwb2ludHMpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICAgIHZhciBicmVha3BvaW50ID0gZmFsc2U7XG5cbiAgICB2YXIgcG9pbnRzID0gT2JqZWN0LmtleXMoYnJlYWtwb2ludHMpLm1hcChmdW5jdGlvbiAocG9pbnQpIHtcbiAgICAgIGlmICh0eXBlb2YgcG9pbnQgPT09ICdzdHJpbmcnICYmIHBvaW50LnN0YXJ0c1dpdGgoJ0AnKSkge1xuICAgICAgICB2YXIgbWluUmF0aW8gPSBwYXJzZUZsb2F0KHBvaW50LnN1YnN0cigxKSk7XG4gICAgICAgIHZhciB2YWx1ZSA9IHdpbi5pbm5lckhlaWdodCAqIG1pblJhdGlvO1xuICAgICAgICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIHBvaW50OiBwb2ludCB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBwb2ludDogcG9pbnQgfTtcbiAgICB9KTtcblxuICAgIHBvaW50cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBwYXJzZUludChhLnZhbHVlLCAxMCkgLSBwYXJzZUludChiLnZhbHVlLCAxMCk7IH0pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2YXIgcmVmID0gcG9pbnRzW2ldO1xuICAgICAgdmFyIHBvaW50ID0gcmVmLnBvaW50O1xuICAgICAgdmFyIHZhbHVlID0gcmVmLnZhbHVlO1xuICAgICAgaWYgKHZhbHVlIDw9IHdpbi5pbm5lcldpZHRoKSB7XG4gICAgICAgIGJyZWFrcG9pbnQgPSBwb2ludDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJyZWFrcG9pbnQgfHwgJ21heCc7XG4gIH1cblxuICB2YXIgYnJlYWtwb2ludHMgPSB7IHNldEJyZWFrcG9pbnQ6IHNldEJyZWFrcG9pbnQsIGdldEJyZWFrcG9pbnQ6IGdldEJyZWFrcG9pbnQgfTtcblxuICBmdW5jdGlvbiBhZGRDbGFzc2VzICgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgY2xhc3NOYW1lcyA9IHN3aXBlci5jbGFzc05hbWVzO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgIHZhciBydGwgPSBzd2lwZXIucnRsO1xuICAgIHZhciAkZWwgPSBzd2lwZXIuJGVsO1xuICAgIHZhciBzdWZmaXhlcyA9IFtdO1xuXG4gICAgc3VmZml4ZXMucHVzaCgnaW5pdGlhbGl6ZWQnKTtcbiAgICBzdWZmaXhlcy5wdXNoKHBhcmFtcy5kaXJlY3Rpb24pO1xuXG4gICAgaWYgKHBhcmFtcy5mcmVlTW9kZSkge1xuICAgICAgc3VmZml4ZXMucHVzaCgnZnJlZS1tb2RlJyk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuYXV0b0hlaWdodCkge1xuICAgICAgc3VmZml4ZXMucHVzaCgnYXV0b2hlaWdodCcpO1xuICAgIH1cbiAgICBpZiAocnRsKSB7XG4gICAgICBzdWZmaXhlcy5wdXNoKCdydGwnKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4gPiAxKSB7XG4gICAgICBzdWZmaXhlcy5wdXNoKCdtdWx0aXJvdycpO1xuICAgICAgaWYgKHBhcmFtcy5zbGlkZXNQZXJDb2x1bW5GaWxsID09PSAnY29sdW1uJykge1xuICAgICAgICBzdWZmaXhlcy5wdXNoKCdtdWx0aXJvdy1jb2x1bW4nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKERldmljZS5hbmRyb2lkKSB7XG4gICAgICBzdWZmaXhlcy5wdXNoKCdhbmRyb2lkJyk7XG4gICAgfVxuICAgIGlmIChEZXZpY2UuaW9zKSB7XG4gICAgICBzdWZmaXhlcy5wdXNoKCdpb3MnKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHN1ZmZpeGVzLnB1c2goJ2Nzcy1tb2RlJyk7XG4gICAgfVxuXG4gICAgc3VmZml4ZXMuZm9yRWFjaChmdW5jdGlvbiAoc3VmZml4KSB7XG4gICAgICBjbGFzc05hbWVzLnB1c2gocGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MgKyBzdWZmaXgpO1xuICAgIH0pO1xuXG4gICAgJGVsLmFkZENsYXNzKGNsYXNzTmFtZXMuam9pbignICcpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUNsYXNzZXMgKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciAkZWwgPSBzd2lwZXIuJGVsO1xuICAgIHZhciBjbGFzc05hbWVzID0gc3dpcGVyLmNsYXNzTmFtZXM7XG5cbiAgICAkZWwucmVtb3ZlQ2xhc3MoY2xhc3NOYW1lcy5qb2luKCcgJykpO1xuICB9XG5cbiAgdmFyIGNsYXNzZXMgPSB7IGFkZENsYXNzZXM6IGFkZENsYXNzZXMsIHJlbW92ZUNsYXNzZXM6IHJlbW92ZUNsYXNzZXMgfTtcblxuICBmdW5jdGlvbiBsb2FkSW1hZ2UgKGltYWdlRWwsIHNyYywgc3Jjc2V0LCBzaXplcywgY2hlY2tGb3JDb21wbGV0ZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgaW1hZ2U7XG4gICAgZnVuY3Rpb24gb25SZWFkeSgpIHtcbiAgICAgIGlmIChjYWxsYmFjaykgeyBjYWxsYmFjaygpOyB9XG4gICAgfVxuICAgIGlmICghaW1hZ2VFbC5jb21wbGV0ZSB8fCAhY2hlY2tGb3JDb21wbGV0ZSkge1xuICAgICAgaWYgKHNyYykge1xuICAgICAgICBpbWFnZSA9IG5ldyB3aW4uSW1hZ2UoKTtcbiAgICAgICAgaW1hZ2Uub25sb2FkID0gb25SZWFkeTtcbiAgICAgICAgaW1hZ2Uub25lcnJvciA9IG9uUmVhZHk7XG4gICAgICAgIGlmIChzaXplcykge1xuICAgICAgICAgIGltYWdlLnNpemVzID0gc2l6ZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNyY3NldCkge1xuICAgICAgICAgIGltYWdlLnNyY3NldCA9IHNyY3NldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3JjKSB7XG4gICAgICAgICAgaW1hZ2Uuc3JjID0gc3JjO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvblJlYWR5KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGltYWdlIGFscmVhZHkgbG9hZGVkLi4uXG4gICAgICBvblJlYWR5KCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHJlbG9hZEltYWdlcyAoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgc3dpcGVyLmltYWdlc1RvTG9hZCA9IHN3aXBlci4kZWwuZmluZCgnaW1nJyk7XG4gICAgZnVuY3Rpb24gb25SZWFkeSgpIHtcbiAgICAgIGlmICh0eXBlb2Ygc3dpcGVyID09PSAndW5kZWZpbmVkJyB8fCBzd2lwZXIgPT09IG51bGwgfHwgIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkKSB7IHJldHVybjsgfVxuICAgICAgaWYgKHN3aXBlci5pbWFnZXNMb2FkZWQgIT09IHVuZGVmaW5lZCkgeyBzd2lwZXIuaW1hZ2VzTG9hZGVkICs9IDE7IH1cbiAgICAgIGlmIChzd2lwZXIuaW1hZ2VzTG9hZGVkID09PSBzd2lwZXIuaW1hZ2VzVG9Mb2FkLmxlbmd0aCkge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy51cGRhdGVPbkltYWdlc1JlYWR5KSB7IHN3aXBlci51cGRhdGUoKTsgfVxuICAgICAgICBzd2lwZXIuZW1pdCgnaW1hZ2VzUmVhZHknKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzd2lwZXIuaW1hZ2VzVG9Mb2FkLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2YXIgaW1hZ2VFbCA9IHN3aXBlci5pbWFnZXNUb0xvYWRbaV07XG4gICAgICBzd2lwZXIubG9hZEltYWdlKFxuICAgICAgICBpbWFnZUVsLFxuICAgICAgICBpbWFnZUVsLmN1cnJlbnRTcmMgfHwgaW1hZ2VFbC5nZXRBdHRyaWJ1dGUoJ3NyYycpLFxuICAgICAgICBpbWFnZUVsLnNyY3NldCB8fCBpbWFnZUVsLmdldEF0dHJpYnV0ZSgnc3Jjc2V0JyksXG4gICAgICAgIGltYWdlRWwuc2l6ZXMgfHwgaW1hZ2VFbC5nZXRBdHRyaWJ1dGUoJ3NpemVzJyksXG4gICAgICAgIHRydWUsXG4gICAgICAgIG9uUmVhZHlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGltYWdlcyA9IHtcbiAgICBsb2FkSW1hZ2U6IGxvYWRJbWFnZSxcbiAgICBwcmVsb2FkSW1hZ2VzOiBwcmVsb2FkSW1hZ2VzLFxuICB9O1xuXG4gIGZ1bmN0aW9uIGNoZWNrT3ZlcmZsb3coKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIHdhc0xvY2tlZCA9IHN3aXBlci5pc0xvY2tlZDtcbiAgICB2YXIgbGFzdFNsaWRlUG9zaXRpb24gPSBzd2lwZXIuc2xpZGVzLmxlbmd0aCA+IDAgJiYgKHBhcmFtcy5zbGlkZXNPZmZzZXRCZWZvcmUgKyAocGFyYW1zLnNwYWNlQmV0d2VlbiAqIChzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIDEpKSArICgoc3dpcGVyLnNsaWRlc1swXSkub2Zmc2V0V2lkdGgpICogc3dpcGVyLnNsaWRlcy5sZW5ndGgpO1xuXG4gICAgaWYgKHBhcmFtcy5zbGlkZXNPZmZzZXRCZWZvcmUgJiYgcGFyYW1zLnNsaWRlc09mZnNldEFmdGVyICYmIGxhc3RTbGlkZVBvc2l0aW9uKSB7XG4gICAgICBzd2lwZXIuaXNMb2NrZWQgPSBsYXN0U2xpZGVQb3NpdGlvbiA8PSBzd2lwZXIuc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLmlzTG9ja2VkID0gc3dpcGVyLnNuYXBHcmlkLmxlbmd0aCA9PT0gMTtcbiAgICB9XG5cbiAgICBzd2lwZXIuYWxsb3dTbGlkZU5leHQgPSAhc3dpcGVyLmlzTG9ja2VkO1xuICAgIHN3aXBlci5hbGxvd1NsaWRlUHJldiA9ICFzd2lwZXIuaXNMb2NrZWQ7XG5cbiAgICAvLyBldmVudHNcbiAgICBpZiAod2FzTG9ja2VkICE9PSBzd2lwZXIuaXNMb2NrZWQpIHsgc3dpcGVyLmVtaXQoc3dpcGVyLmlzTG9ja2VkID8gJ2xvY2snIDogJ3VubG9jaycpOyB9XG5cbiAgICBpZiAod2FzTG9ja2VkICYmIHdhc0xvY2tlZCAhPT0gc3dpcGVyLmlzTG9ja2VkKSB7XG4gICAgICBzd2lwZXIuaXNFbmQgPSBmYWxzZTtcbiAgICAgIHN3aXBlci5uYXZpZ2F0aW9uLnVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjaGVja092ZXJmbG93JDEgPSB7IGNoZWNrT3ZlcmZsb3c6IGNoZWNrT3ZlcmZsb3cgfTtcblxuICB2YXIgZGVmYXVsdHMgPSB7XG4gICAgaW5pdDogdHJ1ZSxcbiAgICBkaXJlY3Rpb246ICdob3Jpem9udGFsJyxcbiAgICB0b3VjaEV2ZW50c1RhcmdldDogJ2NvbnRhaW5lcicsXG4gICAgaW5pdGlhbFNsaWRlOiAwLFxuICAgIHNwZWVkOiAzMDAsXG4gICAgY3NzTW9kZTogZmFsc2UsXG4gICAgdXBkYXRlT25XaW5kb3dSZXNpemU6IHRydWUsXG4gICAgLy9cbiAgICBwcmV2ZW50SW50ZXJhY3Rpb25PblRyYW5zaXRpb246IGZhbHNlLFxuXG4gICAgLy8gVG8gc3VwcG9ydCBpT1MncyBzd2lwZS10by1nby1iYWNrIGdlc3R1cmUgKHdoZW4gYmVpbmcgdXNlZCBpbi1hcHAsIHdpdGggVUlXZWJWaWV3KS5cbiAgICBlZGdlU3dpcGVEZXRlY3Rpb246IGZhbHNlLFxuICAgIGVkZ2VTd2lwZVRocmVzaG9sZDogMjAsXG5cbiAgICAvLyBGcmVlIG1vZGVcbiAgICBmcmVlTW9kZTogZmFsc2UsXG4gICAgZnJlZU1vZGVNb21lbnR1bTogdHJ1ZSxcbiAgICBmcmVlTW9kZU1vbWVudHVtUmF0aW86IDEsXG4gICAgZnJlZU1vZGVNb21lbnR1bUJvdW5jZTogdHJ1ZSxcbiAgICBmcmVlTW9kZU1vbWVudHVtQm91bmNlUmF0aW86IDEsXG4gICAgZnJlZU1vZGVNb21lbnR1bVZlbG9jaXR5UmF0aW86IDEsXG4gICAgZnJlZU1vZGVTdGlja3k6IGZhbHNlLFxuICAgIGZyZWVNb2RlTWluaW11bVZlbG9jaXR5OiAwLjAyLFxuXG4gICAgLy8gQXV0b2hlaWdodFxuICAgIGF1dG9IZWlnaHQ6IGZhbHNlLFxuXG4gICAgLy8gU2V0IHdyYXBwZXIgd2lkdGhcbiAgICBzZXRXcmFwcGVyU2l6ZTogZmFsc2UsXG5cbiAgICAvLyBWaXJ0dWFsIFRyYW5zbGF0ZVxuICAgIHZpcnR1YWxUcmFuc2xhdGU6IGZhbHNlLFxuXG4gICAgLy8gRWZmZWN0c1xuICAgIGVmZmVjdDogJ3NsaWRlJywgLy8gJ3NsaWRlJyBvciAnZmFkZScgb3IgJ2N1YmUnIG9yICdjb3ZlcmZsb3cnIG9yICdmbGlwJ1xuXG4gICAgLy8gQnJlYWtwb2ludHNcbiAgICBicmVha3BvaW50czogdW5kZWZpbmVkLFxuXG4gICAgLy8gU2xpZGVzIGdyaWRcbiAgICBzcGFjZUJldHdlZW46IDAsXG4gICAgc2xpZGVzUGVyVmlldzogMSxcbiAgICBzbGlkZXNQZXJDb2x1bW46IDEsXG4gICAgc2xpZGVzUGVyQ29sdW1uRmlsbDogJ2NvbHVtbicsXG4gICAgc2xpZGVzUGVyR3JvdXA6IDEsXG4gICAgc2xpZGVzUGVyR3JvdXBTa2lwOiAwLFxuICAgIGNlbnRlcmVkU2xpZGVzOiBmYWxzZSxcbiAgICBjZW50ZXJlZFNsaWRlc0JvdW5kczogZmFsc2UsXG4gICAgc2xpZGVzT2Zmc2V0QmVmb3JlOiAwLCAvLyBpbiBweFxuICAgIHNsaWRlc09mZnNldEFmdGVyOiAwLCAvLyBpbiBweFxuICAgIG5vcm1hbGl6ZVNsaWRlSW5kZXg6IHRydWUsXG4gICAgY2VudGVySW5zdWZmaWNpZW50U2xpZGVzOiBmYWxzZSxcblxuICAgIC8vIERpc2FibGUgc3dpcGVyIGFuZCBoaWRlIG5hdmlnYXRpb24gd2hlbiBjb250YWluZXIgbm90IG92ZXJmbG93XG4gICAgd2F0Y2hPdmVyZmxvdzogZmFsc2UsXG5cbiAgICAvLyBSb3VuZCBsZW5ndGhcbiAgICByb3VuZExlbmd0aHM6IGZhbHNlLFxuXG4gICAgLy8gVG91Y2hlc1xuICAgIHRvdWNoUmF0aW86IDEsXG4gICAgdG91Y2hBbmdsZTogNDUsXG4gICAgc2ltdWxhdGVUb3VjaDogdHJ1ZSxcbiAgICBzaG9ydFN3aXBlczogdHJ1ZSxcbiAgICBsb25nU3dpcGVzOiB0cnVlLFxuICAgIGxvbmdTd2lwZXNSYXRpbzogMC41LFxuICAgIGxvbmdTd2lwZXNNczogMzAwLFxuICAgIGZvbGxvd0ZpbmdlcjogdHJ1ZSxcbiAgICBhbGxvd1RvdWNoTW92ZTogdHJ1ZSxcbiAgICB0aHJlc2hvbGQ6IDAsXG4gICAgdG91Y2hNb3ZlU3RvcFByb3BhZ2F0aW9uOiBmYWxzZSxcbiAgICB0b3VjaFN0YXJ0UHJldmVudERlZmF1bHQ6IHRydWUsXG4gICAgdG91Y2hTdGFydEZvcmNlUHJldmVudERlZmF1bHQ6IGZhbHNlLFxuICAgIHRvdWNoUmVsZWFzZU9uRWRnZXM6IGZhbHNlLFxuXG4gICAgLy8gVW5pcXVlIE5hdmlnYXRpb24gRWxlbWVudHNcbiAgICB1bmlxdWVOYXZFbGVtZW50czogdHJ1ZSxcblxuICAgIC8vIFJlc2lzdGFuY2VcbiAgICByZXNpc3RhbmNlOiB0cnVlLFxuICAgIHJlc2lzdGFuY2VSYXRpbzogMC44NSxcblxuICAgIC8vIFByb2dyZXNzXG4gICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogZmFsc2UsXG4gICAgd2F0Y2hTbGlkZXNWaXNpYmlsaXR5OiBmYWxzZSxcblxuICAgIC8vIEN1cnNvclxuICAgIGdyYWJDdXJzb3I6IGZhbHNlLFxuXG4gICAgLy8gQ2xpY2tzXG4gICAgcHJldmVudENsaWNrczogdHJ1ZSxcbiAgICBwcmV2ZW50Q2xpY2tzUHJvcGFnYXRpb246IHRydWUsXG4gICAgc2xpZGVUb0NsaWNrZWRTbGlkZTogZmFsc2UsXG5cbiAgICAvLyBJbWFnZXNcbiAgICBwcmVsb2FkSW1hZ2VzOiB0cnVlLFxuICAgIHVwZGF0ZU9uSW1hZ2VzUmVhZHk6IHRydWUsXG5cbiAgICAvLyBsb29wXG4gICAgbG9vcDogZmFsc2UsXG4gICAgbG9vcEFkZGl0aW9uYWxTbGlkZXM6IDAsXG4gICAgbG9vcGVkU2xpZGVzOiBudWxsLFxuICAgIGxvb3BGaWxsR3JvdXBXaXRoQmxhbms6IGZhbHNlLFxuXG4gICAgLy8gU3dpcGluZy9ubyBzd2lwaW5nXG4gICAgYWxsb3dTbGlkZVByZXY6IHRydWUsXG4gICAgYWxsb3dTbGlkZU5leHQ6IHRydWUsXG4gICAgc3dpcGVIYW5kbGVyOiBudWxsLCAvLyAnLnN3aXBlLWhhbmRsZXInLFxuICAgIG5vU3dpcGluZzogdHJ1ZSxcbiAgICBub1N3aXBpbmdDbGFzczogJ3N3aXBlci1uby1zd2lwaW5nJyxcbiAgICBub1N3aXBpbmdTZWxlY3RvcjogbnVsbCxcblxuICAgIC8vIFBhc3NpdmUgTGlzdGVuZXJzXG4gICAgcGFzc2l2ZUxpc3RlbmVyczogdHJ1ZSxcblxuICAgIC8vIE5TXG4gICAgY29udGFpbmVyTW9kaWZpZXJDbGFzczogJ3N3aXBlci1jb250YWluZXItJywgLy8gTkVXXG4gICAgc2xpZGVDbGFzczogJ3N3aXBlci1zbGlkZScsXG4gICAgc2xpZGVCbGFua0NsYXNzOiAnc3dpcGVyLXNsaWRlLWludmlzaWJsZS1ibGFuaycsXG4gICAgc2xpZGVBY3RpdmVDbGFzczogJ3N3aXBlci1zbGlkZS1hY3RpdmUnLFxuICAgIHNsaWRlRHVwbGljYXRlQWN0aXZlQ2xhc3M6ICdzd2lwZXItc2xpZGUtZHVwbGljYXRlLWFjdGl2ZScsXG4gICAgc2xpZGVWaXNpYmxlQ2xhc3M6ICdzd2lwZXItc2xpZGUtdmlzaWJsZScsXG4gICAgc2xpZGVEdXBsaWNhdGVDbGFzczogJ3N3aXBlci1zbGlkZS1kdXBsaWNhdGUnLFxuICAgIHNsaWRlTmV4dENsYXNzOiAnc3dpcGVyLXNsaWRlLW5leHQnLFxuICAgIHNsaWRlRHVwbGljYXRlTmV4dENsYXNzOiAnc3dpcGVyLXNsaWRlLWR1cGxpY2F0ZS1uZXh0JyxcbiAgICBzbGlkZVByZXZDbGFzczogJ3N3aXBlci1zbGlkZS1wcmV2JyxcbiAgICBzbGlkZUR1cGxpY2F0ZVByZXZDbGFzczogJ3N3aXBlci1zbGlkZS1kdXBsaWNhdGUtcHJldicsXG4gICAgd3JhcHBlckNsYXNzOiAnc3dpcGVyLXdyYXBwZXInLFxuXG4gICAgLy8gQ2FsbGJhY2tzXG4gICAgcnVuQ2FsbGJhY2tzT25Jbml0OiB0cnVlLFxuICB9O1xuXG4gIC8qIGVzbGludCBuby1wYXJhbS1yZWFzc2lnbjogXCJvZmZcIiAqL1xuXG4gIHZhciBwcm90b3R5cGVzID0ge1xuICAgIHVwZGF0ZTogdXBkYXRlLFxuICAgIHRyYW5zbGF0ZTogdHJhbnNsYXRlLFxuICAgIHRyYW5zaXRpb246IHRyYW5zaXRpb24kMSxcbiAgICBzbGlkZTogc2xpZGUsXG4gICAgbG9vcDogbG9vcCxcbiAgICBncmFiQ3Vyc29yOiBncmFiQ3Vyc29yLFxuICAgIG1hbmlwdWxhdGlvbjogbWFuaXB1bGF0aW9uLFxuICAgIGV2ZW50czogZXZlbnRzLFxuICAgIGJyZWFrcG9pbnRzOiBicmVha3BvaW50cyxcbiAgICBjaGVja092ZXJmbG93OiBjaGVja092ZXJmbG93JDEsXG4gICAgY2xhc3NlczogY2xhc3NlcyxcbiAgICBpbWFnZXM6IGltYWdlcyxcbiAgfTtcblxuICB2YXIgZXh0ZW5kZWREZWZhdWx0cyA9IHt9O1xuXG4gIHZhciBTd2lwZXIgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChTd2lwZXJDbGFzcykge1xuICAgIGZ1bmN0aW9uIFN3aXBlcigpIHtcbiAgICAgIHZhciBhc3NpZ247XG5cbiAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuICAgICAgdmFyIGVsO1xuICAgICAgdmFyIHBhcmFtcztcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiBhcmdzWzBdLmNvbnN0cnVjdG9yICYmIGFyZ3NbMF0uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xuICAgICAgICBwYXJhbXMgPSBhcmdzWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKGFzc2lnbiA9IGFyZ3MsIGVsID0gYXNzaWduWzBdLCBwYXJhbXMgPSBhc3NpZ25bMV0pO1xuICAgICAgfVxuICAgICAgaWYgKCFwYXJhbXMpIHsgcGFyYW1zID0ge307IH1cblxuICAgICAgcGFyYW1zID0gVXRpbHMuZXh0ZW5kKHt9LCBwYXJhbXMpO1xuICAgICAgaWYgKGVsICYmICFwYXJhbXMuZWwpIHsgcGFyYW1zLmVsID0gZWw7IH1cblxuICAgICAgU3dpcGVyQ2xhc3MuY2FsbCh0aGlzLCBwYXJhbXMpO1xuXG4gICAgICBPYmplY3Qua2V5cyhwcm90b3R5cGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm90b3R5cGVHcm91cCkge1xuICAgICAgICBPYmplY3Qua2V5cyhwcm90b3R5cGVzW3Byb3RvdHlwZUdyb3VwXSkuZm9yRWFjaChmdW5jdGlvbiAocHJvdG9NZXRob2QpIHtcbiAgICAgICAgICBpZiAoIVN3aXBlci5wcm90b3R5cGVbcHJvdG9NZXRob2RdKSB7XG4gICAgICAgICAgICBTd2lwZXIucHJvdG90eXBlW3Byb3RvTWV0aG9kXSA9IHByb3RvdHlwZXNbcHJvdG90eXBlR3JvdXBdW3Byb3RvTWV0aG9kXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFN3aXBlciBJbnN0YW5jZVxuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIHN3aXBlci5tb2R1bGVzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBzd2lwZXIubW9kdWxlcyA9IHt9O1xuICAgICAgfVxuICAgICAgT2JqZWN0LmtleXMoc3dpcGVyLm1vZHVsZXMpLmZvckVhY2goZnVuY3Rpb24gKG1vZHVsZU5hbWUpIHtcbiAgICAgICAgdmFyIG1vZHVsZSA9IHN3aXBlci5tb2R1bGVzW21vZHVsZU5hbWVdO1xuICAgICAgICBpZiAobW9kdWxlLnBhcmFtcykge1xuICAgICAgICAgIHZhciBtb2R1bGVQYXJhbU5hbWUgPSBPYmplY3Qua2V5cyhtb2R1bGUucGFyYW1zKVswXTtcbiAgICAgICAgICB2YXIgbW9kdWxlUGFyYW1zID0gbW9kdWxlLnBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdO1xuICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlUGFyYW1zICE9PSAnb2JqZWN0JyB8fCBtb2R1bGVQYXJhbXMgPT09IG51bGwpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgaWYgKCEobW9kdWxlUGFyYW1OYW1lIGluIHBhcmFtcyAmJiAnZW5hYmxlZCcgaW4gbW9kdWxlUGFyYW1zKSkgeyByZXR1cm47IH1cbiAgICAgICAgICBpZiAocGFyYW1zW21vZHVsZVBhcmFtTmFtZV0gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdID0geyBlbmFibGVkOiB0cnVlIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICYmICEoJ2VuYWJsZWQnIGluIHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0uZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0pIHsgcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0gPSB7IGVuYWJsZWQ6IGZhbHNlIH07IH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIEV4dGVuZCBkZWZhdWx0cyB3aXRoIG1vZHVsZXMgcGFyYW1zXG4gICAgICB2YXIgc3dpcGVyUGFyYW1zID0gVXRpbHMuZXh0ZW5kKHt9LCBkZWZhdWx0cyk7XG4gICAgICBzd2lwZXIudXNlTW9kdWxlc1BhcmFtcyhzd2lwZXJQYXJhbXMpO1xuXG4gICAgICAvLyBFeHRlbmQgZGVmYXVsdHMgd2l0aCBwYXNzZWQgcGFyYW1zXG4gICAgICBzd2lwZXIucGFyYW1zID0gVXRpbHMuZXh0ZW5kKHt9LCBzd2lwZXJQYXJhbXMsIGV4dGVuZGVkRGVmYXVsdHMsIHBhcmFtcyk7XG4gICAgICBzd2lwZXIub3JpZ2luYWxQYXJhbXMgPSBVdGlscy5leHRlbmQoe30sIHN3aXBlci5wYXJhbXMpO1xuICAgICAgc3dpcGVyLnBhc3NlZFBhcmFtcyA9IFV0aWxzLmV4dGVuZCh7fSwgcGFyYW1zKTtcblxuICAgICAgLy8gU2F2ZSBEb20gbGliXG4gICAgICBzd2lwZXIuJCA9ICQ7XG5cbiAgICAgIC8vIEZpbmQgZWxcbiAgICAgIHZhciAkZWwgPSAkKHN3aXBlci5wYXJhbXMuZWwpO1xuICAgICAgZWwgPSAkZWxbMF07XG5cbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKCRlbC5sZW5ndGggPiAxKSB7XG4gICAgICAgIHZhciBzd2lwZXJzID0gW107XG4gICAgICAgICRlbC5lYWNoKGZ1bmN0aW9uIChpbmRleCwgY29udGFpbmVyRWwpIHtcbiAgICAgICAgICB2YXIgbmV3UGFyYW1zID0gVXRpbHMuZXh0ZW5kKHt9LCBwYXJhbXMsIHsgZWw6IGNvbnRhaW5lckVsIH0pO1xuICAgICAgICAgIHN3aXBlcnMucHVzaChuZXcgU3dpcGVyKG5ld1BhcmFtcykpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN3aXBlcnM7XG4gICAgICB9XG5cbiAgICAgIGVsLnN3aXBlciA9IHN3aXBlcjtcbiAgICAgICRlbC5kYXRhKCdzd2lwZXInLCBzd2lwZXIpO1xuXG4gICAgICAvLyBGaW5kIFdyYXBwZXJcbiAgICAgIHZhciAkd3JhcHBlckVsO1xuICAgICAgaWYgKGVsICYmIGVsLnNoYWRvd1Jvb3QgJiYgZWwuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKSB7XG4gICAgICAgICR3cmFwcGVyRWwgPSAkKGVsLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigoXCIuXCIgKyAoc3dpcGVyLnBhcmFtcy53cmFwcGVyQ2xhc3MpKSkpO1xuICAgICAgICAvLyBDaGlsZHJlbiBuZWVkcyB0byByZXR1cm4gc2xvdCBpdGVtc1xuICAgICAgICAkd3JhcHBlckVsLmNoaWxkcmVuID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsgcmV0dXJuICRlbC5jaGlsZHJlbihvcHRpb25zKTsgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICR3cmFwcGVyRWwgPSAkZWwuY2hpbGRyZW4oKFwiLlwiICsgKHN3aXBlci5wYXJhbXMud3JhcHBlckNsYXNzKSkpO1xuICAgICAgfVxuICAgICAgLy8gRXh0ZW5kIFN3aXBlclxuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICAkZWw6ICRlbCxcbiAgICAgICAgZWw6IGVsLFxuICAgICAgICAkd3JhcHBlckVsOiAkd3JhcHBlckVsLFxuICAgICAgICB3cmFwcGVyRWw6ICR3cmFwcGVyRWxbMF0sXG5cbiAgICAgICAgLy8gQ2xhc3Nlc1xuICAgICAgICBjbGFzc05hbWVzOiBbXSxcblxuICAgICAgICAvLyBTbGlkZXNcbiAgICAgICAgc2xpZGVzOiAkKCksXG4gICAgICAgIHNsaWRlc0dyaWQ6IFtdLFxuICAgICAgICBzbmFwR3JpZDogW10sXG4gICAgICAgIHNsaWRlc1NpemVzR3JpZDogW10sXG5cbiAgICAgICAgLy8gaXNEaXJlY3Rpb25cbiAgICAgICAgaXNIb3Jpem9udGFsOiBmdW5jdGlvbiBpc0hvcml6b250YWwoKSB7XG4gICAgICAgICAgcmV0dXJuIHN3aXBlci5wYXJhbXMuZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCc7XG4gICAgICAgIH0sXG4gICAgICAgIGlzVmVydGljYWw6IGZ1bmN0aW9uIGlzVmVydGljYWwoKSB7XG4gICAgICAgICAgcmV0dXJuIHN3aXBlci5wYXJhbXMuZGlyZWN0aW9uID09PSAndmVydGljYWwnO1xuICAgICAgICB9LFxuICAgICAgICAvLyBSVExcbiAgICAgICAgcnRsOiAoZWwuZGlyLnRvTG93ZXJDYXNlKCkgPT09ICdydGwnIHx8ICRlbC5jc3MoJ2RpcmVjdGlvbicpID09PSAncnRsJyksXG4gICAgICAgIHJ0bFRyYW5zbGF0ZTogc3dpcGVyLnBhcmFtcy5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyAmJiAoZWwuZGlyLnRvTG93ZXJDYXNlKCkgPT09ICdydGwnIHx8ICRlbC5jc3MoJ2RpcmVjdGlvbicpID09PSAncnRsJyksXG4gICAgICAgIHdyb25nUlRMOiAkd3JhcHBlckVsLmNzcygnZGlzcGxheScpID09PSAnLXdlYmtpdC1ib3gnLFxuXG4gICAgICAgIC8vIEluZGV4ZXNcbiAgICAgICAgYWN0aXZlSW5kZXg6IDAsXG4gICAgICAgIHJlYWxJbmRleDogMCxcblxuICAgICAgICAvL1xuICAgICAgICBpc0JlZ2lubmluZzogdHJ1ZSxcbiAgICAgICAgaXNFbmQ6IGZhbHNlLFxuXG4gICAgICAgIC8vIFByb3BzXG4gICAgICAgIHRyYW5zbGF0ZTogMCxcbiAgICAgICAgcHJldmlvdXNUcmFuc2xhdGU6IDAsXG4gICAgICAgIHByb2dyZXNzOiAwLFxuICAgICAgICB2ZWxvY2l0eTogMCxcbiAgICAgICAgYW5pbWF0aW5nOiBmYWxzZSxcblxuICAgICAgICAvLyBMb2Nrc1xuICAgICAgICBhbGxvd1NsaWRlTmV4dDogc3dpcGVyLnBhcmFtcy5hbGxvd1NsaWRlTmV4dCxcbiAgICAgICAgYWxsb3dTbGlkZVByZXY6IHN3aXBlci5wYXJhbXMuYWxsb3dTbGlkZVByZXYsXG5cbiAgICAgICAgLy8gVG91Y2ggRXZlbnRzXG4gICAgICAgIHRvdWNoRXZlbnRzOiAoZnVuY3Rpb24gdG91Y2hFdmVudHMoKSB7XG4gICAgICAgICAgdmFyIHRvdWNoID0gWyd0b3VjaHN0YXJ0JywgJ3RvdWNobW92ZScsICd0b3VjaGVuZCcsICd0b3VjaGNhbmNlbCddO1xuICAgICAgICAgIHZhciBkZXNrdG9wID0gWydtb3VzZWRvd24nLCAnbW91c2Vtb3ZlJywgJ21vdXNldXAnXTtcbiAgICAgICAgICBpZiAoU3VwcG9ydC5wb2ludGVyRXZlbnRzKSB7XG4gICAgICAgICAgICBkZXNrdG9wID0gWydwb2ludGVyZG93bicsICdwb2ludGVybW92ZScsICdwb2ludGVydXAnXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3dpcGVyLnRvdWNoRXZlbnRzVG91Y2ggPSB7XG4gICAgICAgICAgICBzdGFydDogdG91Y2hbMF0sXG4gICAgICAgICAgICBtb3ZlOiB0b3VjaFsxXSxcbiAgICAgICAgICAgIGVuZDogdG91Y2hbMl0sXG4gICAgICAgICAgICBjYW5jZWw6IHRvdWNoWzNdLFxuICAgICAgICAgIH07XG4gICAgICAgICAgc3dpcGVyLnRvdWNoRXZlbnRzRGVza3RvcCA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiBkZXNrdG9wWzBdLFxuICAgICAgICAgICAgbW92ZTogZGVza3RvcFsxXSxcbiAgICAgICAgICAgIGVuZDogZGVza3RvcFsyXSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBTdXBwb3J0LnRvdWNoIHx8ICFzd2lwZXIucGFyYW1zLnNpbXVsYXRlVG91Y2ggPyBzd2lwZXIudG91Y2hFdmVudHNUb3VjaCA6IHN3aXBlci50b3VjaEV2ZW50c0Rlc2t0b3A7XG4gICAgICAgIH0oKSksXG4gICAgICAgIHRvdWNoRXZlbnRzRGF0YToge1xuICAgICAgICAgIGlzVG91Y2hlZDogdW5kZWZpbmVkLFxuICAgICAgICAgIGlzTW92ZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICBhbGxvd1RvdWNoQ2FsbGJhY2tzOiB1bmRlZmluZWQsXG4gICAgICAgICAgdG91Y2hTdGFydFRpbWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBpc1Njcm9sbGluZzogdW5kZWZpbmVkLFxuICAgICAgICAgIGN1cnJlbnRUcmFuc2xhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzdGFydFRyYW5zbGF0ZTogdW5kZWZpbmVkLFxuICAgICAgICAgIGFsbG93VGhyZXNob2xkTW92ZTogdW5kZWZpbmVkLFxuICAgICAgICAgIC8vIEZvcm0gZWxlbWVudHMgdG8gbWF0Y2hcbiAgICAgICAgICBmb3JtRWxlbWVudHM6ICdpbnB1dCwgc2VsZWN0LCBvcHRpb24sIHRleHRhcmVhLCBidXR0b24sIHZpZGVvLCBsYWJlbCcsXG4gICAgICAgICAgLy8gTGFzdCBjbGljayB0aW1lXG4gICAgICAgICAgbGFzdENsaWNrVGltZTogVXRpbHMubm93KCksXG4gICAgICAgICAgY2xpY2tUaW1lb3V0OiB1bmRlZmluZWQsXG4gICAgICAgICAgLy8gVmVsb2NpdGllc1xuICAgICAgICAgIHZlbG9jaXRpZXM6IFtdLFxuICAgICAgICAgIGFsbG93TW9tZW50dW1Cb3VuY2U6IHVuZGVmaW5lZCxcbiAgICAgICAgICBpc1RvdWNoRXZlbnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzdGFydE1vdmluZzogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIENsaWNrc1xuICAgICAgICBhbGxvd0NsaWNrOiB0cnVlLFxuXG4gICAgICAgIC8vIFRvdWNoZXNcbiAgICAgICAgYWxsb3dUb3VjaE1vdmU6IHN3aXBlci5wYXJhbXMuYWxsb3dUb3VjaE1vdmUsXG5cbiAgICAgICAgdG91Y2hlczoge1xuICAgICAgICAgIHN0YXJ0WDogMCxcbiAgICAgICAgICBzdGFydFk6IDAsXG4gICAgICAgICAgY3VycmVudFg6IDAsXG4gICAgICAgICAgY3VycmVudFk6IDAsXG4gICAgICAgICAgZGlmZjogMCxcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBJbWFnZXNcbiAgICAgICAgaW1hZ2VzVG9Mb2FkOiBbXSxcbiAgICAgICAgaW1hZ2VzTG9hZGVkOiAwLFxuXG4gICAgICB9KTtcblxuICAgICAgLy8gSW5zdGFsbCBNb2R1bGVzXG4gICAgICBzd2lwZXIudXNlTW9kdWxlcygpO1xuXG4gICAgICAvLyBJbml0XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5pbml0KSB7XG4gICAgICAgIHN3aXBlci5pbml0KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJldHVybiBhcHAgaW5zdGFuY2VcbiAgICAgIHJldHVybiBzd2lwZXI7XG4gICAgfVxuXG4gICAgaWYgKCBTd2lwZXJDbGFzcyApIFN3aXBlci5fX3Byb3RvX18gPSBTd2lwZXJDbGFzcztcbiAgICBTd2lwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggU3dpcGVyQ2xhc3MgJiYgU3dpcGVyQ2xhc3MucHJvdG90eXBlICk7XG4gICAgU3dpcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN3aXBlcjtcblxuICAgIHZhciBzdGF0aWNBY2Nlc3NvcnMgPSB7IGV4dGVuZGVkRGVmYXVsdHM6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sZGVmYXVsdHM6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sQ2xhc3M6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sJDogeyBjb25maWd1cmFibGU6IHRydWUgfSB9O1xuXG4gICAgU3dpcGVyLnByb3RvdHlwZS5zbGlkZXNQZXJWaWV3RHluYW1pYyA9IGZ1bmN0aW9uIHNsaWRlc1BlclZpZXdEeW5hbWljICgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgICB2YXIgc2xpZGVzID0gc3dpcGVyLnNsaWRlcztcbiAgICAgIHZhciBzbGlkZXNHcmlkID0gc3dpcGVyLnNsaWRlc0dyaWQ7XG4gICAgICB2YXIgc3dpcGVyU2l6ZSA9IHN3aXBlci5zaXplO1xuICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgICAgdmFyIHNwdiA9IDE7XG4gICAgICBpZiAocGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICAgIHZhciBzbGlkZVNpemUgPSBzbGlkZXNbYWN0aXZlSW5kZXhdLnN3aXBlclNsaWRlU2l6ZTtcbiAgICAgICAgdmFyIGJyZWFrTG9vcDtcbiAgICAgICAgZm9yICh2YXIgaSA9IGFjdGl2ZUluZGV4ICsgMTsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgIGlmIChzbGlkZXNbaV0gJiYgIWJyZWFrTG9vcCkge1xuICAgICAgICAgICAgc2xpZGVTaXplICs9IHNsaWRlc1tpXS5zd2lwZXJTbGlkZVNpemU7XG4gICAgICAgICAgICBzcHYgKz0gMTtcbiAgICAgICAgICAgIGlmIChzbGlkZVNpemUgPiBzd2lwZXJTaXplKSB7IGJyZWFrTG9vcCA9IHRydWU7IH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSQxID0gYWN0aXZlSW5kZXggLSAxOyBpJDEgPj0gMDsgaSQxIC09IDEpIHtcbiAgICAgICAgICBpZiAoc2xpZGVzW2kkMV0gJiYgIWJyZWFrTG9vcCkge1xuICAgICAgICAgICAgc2xpZGVTaXplICs9IHNsaWRlc1tpJDFdLnN3aXBlclNsaWRlU2l6ZTtcbiAgICAgICAgICAgIHNwdiArPSAxO1xuICAgICAgICAgICAgaWYgKHNsaWRlU2l6ZSA+IHN3aXBlclNpemUpIHsgYnJlYWtMb29wID0gdHJ1ZTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSQyID0gYWN0aXZlSW5kZXggKyAxOyBpJDIgPCBzbGlkZXMubGVuZ3RoOyBpJDIgKz0gMSkge1xuICAgICAgICAgIGlmIChzbGlkZXNHcmlkW2kkMl0gLSBzbGlkZXNHcmlkW2FjdGl2ZUluZGV4XSA8IHN3aXBlclNpemUpIHtcbiAgICAgICAgICAgIHNwdiArPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHNwdjtcbiAgICB9O1xuXG4gICAgU3dpcGVyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUgKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkKSB7IHJldHVybjsgfVxuICAgICAgdmFyIHNuYXBHcmlkID0gc3dpcGVyLnNuYXBHcmlkO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgICAvLyBCcmVha3BvaW50c1xuICAgICAgaWYgKHBhcmFtcy5icmVha3BvaW50cykge1xuICAgICAgICBzd2lwZXIuc2V0QnJlYWtwb2ludCgpO1xuICAgICAgfVxuICAgICAgc3dpcGVyLnVwZGF0ZVNpemUoKTtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXMoKTtcbiAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcygpO1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcblxuICAgICAgZnVuY3Rpb24gc2V0VHJhbnNsYXRlKCkge1xuICAgICAgICB2YXIgdHJhbnNsYXRlVmFsdWUgPSBzd2lwZXIucnRsVHJhbnNsYXRlID8gc3dpcGVyLnRyYW5zbGF0ZSAqIC0xIDogc3dpcGVyLnRyYW5zbGF0ZTtcbiAgICAgICAgdmFyIG5ld1RyYW5zbGF0ZSA9IE1hdGgubWluKE1hdGgubWF4KHRyYW5zbGF0ZVZhbHVlLCBzd2lwZXIubWF4VHJhbnNsYXRlKCkpLCBzd2lwZXIubWluVHJhbnNsYXRlKCkpO1xuICAgICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKG5ld1RyYW5zbGF0ZSk7XG4gICAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgICAgfVxuICAgICAgdmFyIHRyYW5zbGF0ZWQ7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5mcmVlTW9kZSkge1xuICAgICAgICBzZXRUcmFuc2xhdGUoKTtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuYXV0b0hlaWdodCkge1xuICAgICAgICAgIHN3aXBlci51cGRhdGVBdXRvSGVpZ2h0KCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICgoc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3ID09PSAnYXV0bycgfHwgc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3ID4gMSkgJiYgc3dpcGVyLmlzRW5kICYmICFzd2lwZXIucGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICAgICAgdHJhbnNsYXRlZCA9IHN3aXBlci5zbGlkZVRvKHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gMSwgMCwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyYW5zbGF0ZWQgPSBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXgsIDAsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRyYW5zbGF0ZWQpIHtcbiAgICAgICAgICBzZXRUcmFuc2xhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHNuYXBHcmlkICE9PSBzd2lwZXIuc25hcEdyaWQpIHtcbiAgICAgICAgc3dpcGVyLmNoZWNrT3ZlcmZsb3coKTtcbiAgICAgIH1cbiAgICAgIHN3aXBlci5lbWl0KCd1cGRhdGUnKTtcbiAgICB9O1xuXG4gICAgU3dpcGVyLnByb3RvdHlwZS5jaGFuZ2VEaXJlY3Rpb24gPSBmdW5jdGlvbiBjaGFuZ2VEaXJlY3Rpb24gKG5ld0RpcmVjdGlvbiwgbmVlZFVwZGF0ZSkge1xuICAgICAgaWYgKCBuZWVkVXBkYXRlID09PSB2b2lkIDAgKSBuZWVkVXBkYXRlID0gdHJ1ZTtcblxuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgY3VycmVudERpcmVjdGlvbiA9IHN3aXBlci5wYXJhbXMuZGlyZWN0aW9uO1xuICAgICAgaWYgKCFuZXdEaXJlY3Rpb24pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIG5ld0RpcmVjdGlvbiA9IGN1cnJlbnREaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/ICd2ZXJ0aWNhbCcgOiAnaG9yaXpvbnRhbCc7XG4gICAgICB9XG4gICAgICBpZiAoKG5ld0RpcmVjdGlvbiA9PT0gY3VycmVudERpcmVjdGlvbikgfHwgKG5ld0RpcmVjdGlvbiAhPT0gJ2hvcml6b250YWwnICYmIG5ld0RpcmVjdGlvbiAhPT0gJ3ZlcnRpY2FsJykpIHtcbiAgICAgICAgcmV0dXJuIHN3aXBlcjtcbiAgICAgIH1cblxuICAgICAgc3dpcGVyLiRlbFxuICAgICAgICAucmVtb3ZlQ2xhc3MoKFwiXCIgKyAoc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKSArIGN1cnJlbnREaXJlY3Rpb24pKVxuICAgICAgICAuYWRkQ2xhc3MoKFwiXCIgKyAoc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKSArIG5ld0RpcmVjdGlvbikpO1xuXG4gICAgICBzd2lwZXIucGFyYW1zLmRpcmVjdGlvbiA9IG5ld0RpcmVjdGlvbjtcblxuICAgICAgc3dpcGVyLnNsaWRlcy5lYWNoKGZ1bmN0aW9uIChzbGlkZUluZGV4LCBzbGlkZUVsKSB7XG4gICAgICAgIGlmIChuZXdEaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgICBzbGlkZUVsLnN0eWxlLndpZHRoID0gJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2xpZGVFbC5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHN3aXBlci5lbWl0KCdjaGFuZ2VEaXJlY3Rpb24nKTtcbiAgICAgIGlmIChuZWVkVXBkYXRlKSB7IHN3aXBlci51cGRhdGUoKTsgfVxuXG4gICAgICByZXR1cm4gc3dpcGVyO1xuICAgIH07XG5cbiAgICBTd2lwZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiBpbml0ICgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5pbml0aWFsaXplZCkgeyByZXR1cm47IH1cblxuICAgICAgc3dpcGVyLmVtaXQoJ2JlZm9yZUluaXQnKTtcblxuICAgICAgLy8gU2V0IGJyZWFrcG9pbnRcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmJyZWFrcG9pbnRzKSB7XG4gICAgICAgIHN3aXBlci5zZXRCcmVha3BvaW50KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBDbGFzc2VzXG4gICAgICBzd2lwZXIuYWRkQ2xhc3NlcygpO1xuXG4gICAgICAvLyBDcmVhdGUgbG9vcFxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICBzd2lwZXIubG9vcENyZWF0ZSgpO1xuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgc2l6ZVxuICAgICAgc3dpcGVyLnVwZGF0ZVNpemUoKTtcblxuICAgICAgLy8gVXBkYXRlIHNsaWRlc1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlcygpO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93KSB7XG4gICAgICAgIHN3aXBlci5jaGVja092ZXJmbG93KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBHcmFiIEN1cnNvclxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZ3JhYkN1cnNvcikge1xuICAgICAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcigpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5wcmVsb2FkSW1hZ2VzKSB7XG4gICAgICAgIHN3aXBlci5wcmVsb2FkSW1hZ2VzKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNsaWRlIFRvIEluaXRpYWwgU2xpZGVcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLnBhcmFtcy5pbml0aWFsU2xpZGUgKyBzd2lwZXIubG9vcGVkU2xpZGVzLCAwLCBzd2lwZXIucGFyYW1zLnJ1bkNhbGxiYWNrc09uSW5pdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIucGFyYW1zLmluaXRpYWxTbGlkZSwgMCwgc3dpcGVyLnBhcmFtcy5ydW5DYWxsYmFja3NPbkluaXQpO1xuICAgICAgfVxuXG4gICAgICAvLyBBdHRhY2ggZXZlbnRzXG4gICAgICBzd2lwZXIuYXR0YWNoRXZlbnRzKCk7XG5cbiAgICAgIC8vIEluaXQgRmxhZ1xuICAgICAgc3dpcGVyLmluaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgICAgLy8gRW1pdFxuICAgICAgc3dpcGVyLmVtaXQoJ2luaXQnKTtcbiAgICB9O1xuXG4gICAgU3dpcGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSAoZGVsZXRlSW5zdGFuY2UsIGNsZWFuU3R5bGVzKSB7XG4gICAgICBpZiAoIGRlbGV0ZUluc3RhbmNlID09PSB2b2lkIDAgKSBkZWxldGVJbnN0YW5jZSA9IHRydWU7XG4gICAgICBpZiAoIGNsZWFuU3R5bGVzID09PSB2b2lkIDAgKSBjbGVhblN0eWxlcyA9IHRydWU7XG5cbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgICB2YXIgJGVsID0gc3dpcGVyLiRlbDtcbiAgICAgIHZhciAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7XG4gICAgICB2YXIgc2xpZGVzID0gc3dpcGVyLnNsaWRlcztcblxuICAgICAgaWYgKHR5cGVvZiBzd2lwZXIucGFyYW1zID09PSAndW5kZWZpbmVkJyB8fCBzd2lwZXIuZGVzdHJveWVkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIuZW1pdCgnYmVmb3JlRGVzdHJveScpO1xuXG4gICAgICAvLyBJbml0IEZsYWdcbiAgICAgIHN3aXBlci5pbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gICAgICAvLyBEZXRhY2ggZXZlbnRzXG4gICAgICBzd2lwZXIuZGV0YWNoRXZlbnRzKCk7XG5cbiAgICAgIC8vIERlc3Ryb3kgbG9vcFxuICAgICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICAgIHN3aXBlci5sb29wRGVzdHJveSgpO1xuICAgICAgfVxuXG4gICAgICAvLyBDbGVhbnVwIHN0eWxlc1xuICAgICAgaWYgKGNsZWFuU3R5bGVzKSB7XG4gICAgICAgIHN3aXBlci5yZW1vdmVDbGFzc2VzKCk7XG4gICAgICAgICRlbC5yZW1vdmVBdHRyKCdzdHlsZScpO1xuICAgICAgICAkd3JhcHBlckVsLnJlbW92ZUF0dHIoJ3N0eWxlJyk7XG4gICAgICAgIGlmIChzbGlkZXMgJiYgc2xpZGVzLmxlbmd0aCkge1xuICAgICAgICAgIHNsaWRlc1xuICAgICAgICAgICAgLnJlbW92ZUNsYXNzKFtcbiAgICAgICAgICAgICAgcGFyYW1zLnNsaWRlVmlzaWJsZUNsYXNzLFxuICAgICAgICAgICAgICBwYXJhbXMuc2xpZGVBY3RpdmVDbGFzcyxcbiAgICAgICAgICAgICAgcGFyYW1zLnNsaWRlTmV4dENsYXNzLFxuICAgICAgICAgICAgICBwYXJhbXMuc2xpZGVQcmV2Q2xhc3MgXS5qb2luKCcgJykpXG4gICAgICAgICAgICAucmVtb3ZlQXR0cignc3R5bGUnKVxuICAgICAgICAgICAgLnJlbW92ZUF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3dpcGVyLmVtaXQoJ2Rlc3Ryb3knKTtcblxuICAgICAgLy8gRGV0YWNoIGVtaXR0ZXIgZXZlbnRzXG4gICAgICBPYmplY3Qua2V5cyhzd2lwZXIuZXZlbnRzTGlzdGVuZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudE5hbWUpIHtcbiAgICAgICAgc3dpcGVyLm9mZihldmVudE5hbWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChkZWxldGVJbnN0YW5jZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgc3dpcGVyLiRlbFswXS5zd2lwZXIgPSBudWxsO1xuICAgICAgICBzd2lwZXIuJGVsLmRhdGEoJ3N3aXBlcicsIG51bGwpO1xuICAgICAgICBVdGlscy5kZWxldGVQcm9wcyhzd2lwZXIpO1xuICAgICAgfVxuICAgICAgc3dpcGVyLmRlc3Ryb3llZCA9IHRydWU7XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBTd2lwZXIuZXh0ZW5kRGVmYXVsdHMgPSBmdW5jdGlvbiBleHRlbmREZWZhdWx0cyAobmV3RGVmYXVsdHMpIHtcbiAgICAgIFV0aWxzLmV4dGVuZChleHRlbmRlZERlZmF1bHRzLCBuZXdEZWZhdWx0cyk7XG4gICAgfTtcblxuICAgIHN0YXRpY0FjY2Vzc29ycy5leHRlbmRlZERlZmF1bHRzLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBleHRlbmRlZERlZmF1bHRzO1xuICAgIH07XG5cbiAgICBzdGF0aWNBY2Nlc3NvcnMuZGVmYXVsdHMuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRzO1xuICAgIH07XG5cbiAgICBzdGF0aWNBY2Nlc3NvcnMuQ2xhc3MuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFN3aXBlckNsYXNzO1xuICAgIH07XG5cbiAgICBzdGF0aWNBY2Nlc3NvcnMuJC5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gJDtcbiAgICB9O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIFN3aXBlciwgc3RhdGljQWNjZXNzb3JzICk7XG5cbiAgICByZXR1cm4gU3dpcGVyO1xuICB9KFN3aXBlckNsYXNzKSk7XG5cbiAgdmFyIERldmljZSQxID0ge1xuICAgIG5hbWU6ICdkZXZpY2UnLFxuICAgIHByb3RvOiB7XG4gICAgICBkZXZpY2U6IERldmljZSxcbiAgICB9LFxuICAgIHN0YXRpYzoge1xuICAgICAgZGV2aWNlOiBEZXZpY2UsXG4gICAgfSxcbiAgfTtcblxuICB2YXIgU3VwcG9ydCQxID0ge1xuICAgIG5hbWU6ICdzdXBwb3J0JyxcbiAgICBwcm90bzoge1xuICAgICAgc3VwcG9ydDogU3VwcG9ydCxcbiAgICB9LFxuICAgIHN0YXRpYzoge1xuICAgICAgc3VwcG9ydDogU3VwcG9ydCxcbiAgICB9LFxuICB9O1xuXG4gIHZhciBCcm93c2VyID0gKGZ1bmN0aW9uIEJyb3dzZXIoKSB7XG4gICAgZnVuY3Rpb24gaXNTYWZhcmkoKSB7XG4gICAgICB2YXIgdWEgPSB3aW4ubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuICh1YS5pbmRleE9mKCdzYWZhcmknKSA+PSAwICYmIHVhLmluZGV4T2YoJ2Nocm9tZScpIDwgMCAmJiB1YS5pbmRleE9mKCdhbmRyb2lkJykgPCAwKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzRWRnZTogISF3aW4ubmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvRWRnZS9nKSxcbiAgICAgIGlzU2FmYXJpOiBpc1NhZmFyaSgpLFxuICAgICAgaXNVaVdlYlZpZXc6IC8oaVBob25lfGlQb2R8aVBhZCkuKkFwcGxlV2ViS2l0KD8hLipTYWZhcmkpL2kudGVzdCh3aW4ubmF2aWdhdG9yLnVzZXJBZ2VudCksXG4gICAgfTtcbiAgfSgpKTtcblxuICB2YXIgQnJvd3NlciQxID0ge1xuICAgIG5hbWU6ICdicm93c2VyJyxcbiAgICBwcm90bzoge1xuICAgICAgYnJvd3NlcjogQnJvd3NlcixcbiAgICB9LFxuICAgIHN0YXRpYzoge1xuICAgICAgYnJvd3NlcjogQnJvd3NlcixcbiAgICB9LFxuICB9O1xuXG4gIHZhciBSZXNpemUgPSB7XG4gICAgbmFtZTogJ3Jlc2l6ZScsXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgcmVzaXplOiB7XG4gICAgICAgICAgcmVzaXplSGFuZGxlcjogZnVuY3Rpb24gcmVzaXplSGFuZGxlcigpIHtcbiAgICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQgfHwgIXN3aXBlci5pbml0aWFsaXplZCkgeyByZXR1cm47IH1cbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCdiZWZvcmVSZXNpemUnKTtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCdyZXNpemUnKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9yaWVudGF0aW9uQ2hhbmdlSGFuZGxlcjogZnVuY3Rpb24gb3JpZW50YXRpb25DaGFuZ2VIYW5kbGVyKCkge1xuICAgICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCB8fCAhc3dpcGVyLmluaXRpYWxpemVkKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ29yaWVudGF0aW9uY2hhbmdlJyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICAvLyBFbWl0IHJlc2l6ZVxuICAgICAgICB3aW4uYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgc3dpcGVyLnJlc2l6ZS5yZXNpemVIYW5kbGVyKTtcblxuICAgICAgICAvLyBFbWl0IG9yaWVudGF0aW9uY2hhbmdlXG4gICAgICAgIHdpbi5hZGRFdmVudExpc3RlbmVyKCdvcmllbnRhdGlvbmNoYW5nZScsIHN3aXBlci5yZXNpemUub3JpZW50YXRpb25DaGFuZ2VIYW5kbGVyKTtcbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgd2luLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHN3aXBlci5yZXNpemUucmVzaXplSGFuZGxlcik7XG4gICAgICAgIHdpbi5yZW1vdmVFdmVudExpc3RlbmVyKCdvcmllbnRhdGlvbmNoYW5nZScsIHN3aXBlci5yZXNpemUub3JpZW50YXRpb25DaGFuZ2VIYW5kbGVyKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICB2YXIgT2JzZXJ2ZXIgPSB7XG4gICAgZnVuYzogd2luLk11dGF0aW9uT2JzZXJ2ZXIgfHwgd2luLldlYmtpdE11dGF0aW9uT2JzZXJ2ZXIsXG4gICAgYXR0YWNoOiBmdW5jdGlvbiBhdHRhY2godGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgICBpZiAoIG9wdGlvbnMgPT09IHZvaWQgMCApIG9wdGlvbnMgPSB7fTtcblxuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG5cbiAgICAgIHZhciBPYnNlcnZlckZ1bmMgPSBPYnNlcnZlci5mdW5jO1xuICAgICAgdmFyIG9ic2VydmVyID0gbmV3IE9ic2VydmVyRnVuYyhmdW5jdGlvbiAobXV0YXRpb25zKSB7XG4gICAgICAgIC8vIFRoZSBvYnNlcnZlclVwZGF0ZSBldmVudCBzaG91bGQgb25seSBiZSB0cmlnZ2VyZWRcbiAgICAgICAgLy8gb25jZSBkZXNwaXRlIHRoZSBudW1iZXIgb2YgbXV0YXRpb25zLiAgQWRkaXRpb25hbFxuICAgICAgICAvLyB0cmlnZ2VycyBhcmUgcmVkdW5kYW50IGFuZCBhcmUgdmVyeSBjb3N0bHlcbiAgICAgICAgaWYgKG11dGF0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgnb2JzZXJ2ZXJVcGRhdGUnLCBtdXRhdGlvbnNbMF0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb2JzZXJ2ZXJVcGRhdGUgPSBmdW5jdGlvbiBvYnNlcnZlclVwZGF0ZSgpIHtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgnb2JzZXJ2ZXJVcGRhdGUnLCBtdXRhdGlvbnNbMF0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh3aW4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICAgICAgd2luLnJlcXVlc3RBbmltYXRpb25GcmFtZShvYnNlcnZlclVwZGF0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2luLnNldFRpbWVvdXQob2JzZXJ2ZXJVcGRhdGUsIDApO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXQsIHtcbiAgICAgICAgYXR0cmlidXRlczogdHlwZW9mIG9wdGlvbnMuYXR0cmlidXRlcyA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogb3B0aW9ucy5hdHRyaWJ1dGVzLFxuICAgICAgICBjaGlsZExpc3Q6IHR5cGVvZiBvcHRpb25zLmNoaWxkTGlzdCA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogb3B0aW9ucy5jaGlsZExpc3QsXG4gICAgICAgIGNoYXJhY3RlckRhdGE6IHR5cGVvZiBvcHRpb25zLmNoYXJhY3RlckRhdGEgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IG9wdGlvbnMuY2hhcmFjdGVyRGF0YSxcbiAgICAgIH0pO1xuXG4gICAgICBzd2lwZXIub2JzZXJ2ZXIub2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICAgIH0sXG4gICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFTdXBwb3J0Lm9ic2VydmVyIHx8ICFzd2lwZXIucGFyYW1zLm9ic2VydmVyKSB7IHJldHVybjsgfVxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMub2JzZXJ2ZVBhcmVudHMpIHtcbiAgICAgICAgdmFyIGNvbnRhaW5lclBhcmVudHMgPSBzd2lwZXIuJGVsLnBhcmVudHMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb250YWluZXJQYXJlbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgc3dpcGVyLm9ic2VydmVyLmF0dGFjaChjb250YWluZXJQYXJlbnRzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gT2JzZXJ2ZSBjb250YWluZXJcbiAgICAgIHN3aXBlci5vYnNlcnZlci5hdHRhY2goc3dpcGVyLiRlbFswXSwgeyBjaGlsZExpc3Q6IHN3aXBlci5wYXJhbXMub2JzZXJ2ZVNsaWRlQ2hpbGRyZW4gfSk7XG5cbiAgICAgIC8vIE9ic2VydmUgd3JhcHBlclxuICAgICAgc3dpcGVyLm9ic2VydmVyLmF0dGFjaChzd2lwZXIuJHdyYXBwZXJFbFswXSwgeyBhdHRyaWJ1dGVzOiBmYWxzZSB9KTtcbiAgICB9LFxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHN3aXBlci5vYnNlcnZlci5vYnNlcnZlcnMuZm9yRWFjaChmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfSk7XG4gICAgICBzd2lwZXIub2JzZXJ2ZXIub2JzZXJ2ZXJzID0gW107XG4gICAgfSxcbiAgfTtcblxuICB2YXIgT2JzZXJ2ZXIkMSA9IHtcbiAgICBuYW1lOiAnb2JzZXJ2ZXInLFxuICAgIHBhcmFtczoge1xuICAgICAgb2JzZXJ2ZXI6IGZhbHNlLFxuICAgICAgb2JzZXJ2ZVBhcmVudHM6IGZhbHNlLFxuICAgICAgb2JzZXJ2ZVNsaWRlQ2hpbGRyZW46IGZhbHNlLFxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgb2JzZXJ2ZXI6IHtcbiAgICAgICAgICBpbml0OiBPYnNlcnZlci5pbml0LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBhdHRhY2g6IE9ic2VydmVyLmF0dGFjaC5iaW5kKHN3aXBlciksXG4gICAgICAgICAgZGVzdHJveTogT2JzZXJ2ZXIuZGVzdHJveS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgb2JzZXJ2ZXJzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBzd2lwZXIub2JzZXJ2ZXIuaW5pdCgpO1xuICAgICAgfSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBzd2lwZXIub2JzZXJ2ZXIuZGVzdHJveSgpO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHZhciBWaXJ0dWFsID0ge1xuICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKGZvcmNlKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciByZWYgPSBzd2lwZXIucGFyYW1zO1xuICAgICAgdmFyIHNsaWRlc1BlclZpZXcgPSByZWYuc2xpZGVzUGVyVmlldztcbiAgICAgIHZhciBzbGlkZXNQZXJHcm91cCA9IHJlZi5zbGlkZXNQZXJHcm91cDtcbiAgICAgIHZhciBjZW50ZXJlZFNsaWRlcyA9IHJlZi5jZW50ZXJlZFNsaWRlcztcbiAgICAgIHZhciByZWYkMSA9IHN3aXBlci5wYXJhbXMudmlydHVhbDtcbiAgICAgIHZhciBhZGRTbGlkZXNCZWZvcmUgPSByZWYkMS5hZGRTbGlkZXNCZWZvcmU7XG4gICAgICB2YXIgYWRkU2xpZGVzQWZ0ZXIgPSByZWYkMS5hZGRTbGlkZXNBZnRlcjtcbiAgICAgIHZhciByZWYkMiA9IHN3aXBlci52aXJ0dWFsO1xuICAgICAgdmFyIHByZXZpb3VzRnJvbSA9IHJlZiQyLmZyb207XG4gICAgICB2YXIgcHJldmlvdXNUbyA9IHJlZiQyLnRvO1xuICAgICAgdmFyIHNsaWRlcyA9IHJlZiQyLnNsaWRlcztcbiAgICAgIHZhciBwcmV2aW91c1NsaWRlc0dyaWQgPSByZWYkMi5zbGlkZXNHcmlkO1xuICAgICAgdmFyIHJlbmRlclNsaWRlID0gcmVmJDIucmVuZGVyU2xpZGU7XG4gICAgICB2YXIgcHJldmlvdXNPZmZzZXQgPSByZWYkMi5vZmZzZXQ7XG4gICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgIHZhciBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleCB8fCAwO1xuXG4gICAgICB2YXIgb2Zmc2V0UHJvcDtcbiAgICAgIGlmIChzd2lwZXIucnRsVHJhbnNsYXRlKSB7IG9mZnNldFByb3AgPSAncmlnaHQnOyB9XG4gICAgICBlbHNlIHsgb2Zmc2V0UHJvcCA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/ICdsZWZ0JyA6ICd0b3AnOyB9XG5cbiAgICAgIHZhciBzbGlkZXNBZnRlcjtcbiAgICAgIHZhciBzbGlkZXNCZWZvcmU7XG4gICAgICBpZiAoY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgICAgc2xpZGVzQWZ0ZXIgPSBNYXRoLmZsb29yKHNsaWRlc1BlclZpZXcgLyAyKSArIHNsaWRlc1Blckdyb3VwICsgYWRkU2xpZGVzQmVmb3JlO1xuICAgICAgICBzbGlkZXNCZWZvcmUgPSBNYXRoLmZsb29yKHNsaWRlc1BlclZpZXcgLyAyKSArIHNsaWRlc1Blckdyb3VwICsgYWRkU2xpZGVzQWZ0ZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbGlkZXNBZnRlciA9IHNsaWRlc1BlclZpZXcgKyAoc2xpZGVzUGVyR3JvdXAgLSAxKSArIGFkZFNsaWRlc0JlZm9yZTtcbiAgICAgICAgc2xpZGVzQmVmb3JlID0gc2xpZGVzUGVyR3JvdXAgKyBhZGRTbGlkZXNBZnRlcjtcbiAgICAgIH1cbiAgICAgIHZhciBmcm9tID0gTWF0aC5tYXgoKGFjdGl2ZUluZGV4IHx8IDApIC0gc2xpZGVzQmVmb3JlLCAwKTtcbiAgICAgIHZhciB0byA9IE1hdGgubWluKChhY3RpdmVJbmRleCB8fCAwKSArIHNsaWRlc0FmdGVyLCBzbGlkZXMubGVuZ3RoIC0gMSk7XG4gICAgICB2YXIgb2Zmc2V0ID0gKHN3aXBlci5zbGlkZXNHcmlkW2Zyb21dIHx8IDApIC0gKHN3aXBlci5zbGlkZXNHcmlkWzBdIHx8IDApO1xuXG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLnZpcnR1YWwsIHtcbiAgICAgICAgZnJvbTogZnJvbSxcbiAgICAgICAgdG86IHRvLFxuICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgc2xpZGVzR3JpZDogc3dpcGVyLnNsaWRlc0dyaWQsXG4gICAgICB9KTtcblxuICAgICAgZnVuY3Rpb24gb25SZW5kZXJlZCgpIHtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlcygpO1xuICAgICAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICAgICAgaWYgKHN3aXBlci5sYXp5ICYmIHN3aXBlci5wYXJhbXMubGF6eS5lbmFibGVkKSB7XG4gICAgICAgICAgc3dpcGVyLmxhenkubG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmV2aW91c0Zyb20gPT09IGZyb20gJiYgcHJldmlvdXNUbyA9PT0gdG8gJiYgIWZvcmNlKSB7XG4gICAgICAgIGlmIChzd2lwZXIuc2xpZGVzR3JpZCAhPT0gcHJldmlvdXNTbGlkZXNHcmlkICYmIG9mZnNldCAhPT0gcHJldmlvdXNPZmZzZXQpIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVzLmNzcyhvZmZzZXRQcm9wLCAob2Zmc2V0ICsgXCJweFwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLnZpcnR1YWwucmVuZGVyRXh0ZXJuYWwpIHtcbiAgICAgICAgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLnJlbmRlckV4dGVybmFsLmNhbGwoc3dpcGVyLCB7XG4gICAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgICAgZnJvbTogZnJvbSxcbiAgICAgICAgICB0bzogdG8sXG4gICAgICAgICAgc2xpZGVzOiAoZnVuY3Rpb24gZ2V0U2xpZGVzKCkge1xuICAgICAgICAgICAgdmFyIHNsaWRlc1RvUmVuZGVyID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gZnJvbTsgaSA8PSB0bzsgaSArPSAxKSB7XG4gICAgICAgICAgICAgIHNsaWRlc1RvUmVuZGVyLnB1c2goc2xpZGVzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzbGlkZXNUb1JlbmRlcjtcbiAgICAgICAgICB9KCkpLFxuICAgICAgICB9KTtcbiAgICAgICAgb25SZW5kZXJlZCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgcHJlcGVuZEluZGV4ZXMgPSBbXTtcbiAgICAgIHZhciBhcHBlbmRJbmRleGVzID0gW107XG4gICAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwuZmluZCgoXCIuXCIgKyAoc3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzKSkpLnJlbW92ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IHByZXZpb3VzRnJvbTsgaSA8PSBwcmV2aW91c1RvOyBpICs9IDEpIHtcbiAgICAgICAgICBpZiAoaSA8IGZyb20gfHwgaSA+IHRvKSB7XG4gICAgICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5maW5kKChcIi5cIiArIChzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3MpICsgXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgaSArIFwiXFxcIl1cIikpLnJlbW92ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgc2xpZGVzLmxlbmd0aDsgaSQxICs9IDEpIHtcbiAgICAgICAgaWYgKGkkMSA+PSBmcm9tICYmIGkkMSA8PSB0bykge1xuICAgICAgICAgIGlmICh0eXBlb2YgcHJldmlvdXNUbyA9PT0gJ3VuZGVmaW5lZCcgfHwgZm9yY2UpIHtcbiAgICAgICAgICAgIGFwcGVuZEluZGV4ZXMucHVzaChpJDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaSQxID4gcHJldmlvdXNUbykgeyBhcHBlbmRJbmRleGVzLnB1c2goaSQxKTsgfVxuICAgICAgICAgICAgaWYgKGkkMSA8IHByZXZpb3VzRnJvbSkgeyBwcmVwZW5kSW5kZXhlcy5wdXNoKGkkMSk7IH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGFwcGVuZEluZGV4ZXMuZm9yRWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwuYXBwZW5kKHJlbmRlclNsaWRlKHNsaWRlc1tpbmRleF0sIGluZGV4KSk7XG4gICAgICB9KTtcbiAgICAgIHByZXBlbmRJbmRleGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIgLSBhOyB9KS5mb3JFYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5wcmVwZW5kKHJlbmRlclNsaWRlKHNsaWRlc1tpbmRleF0sIGluZGV4KSk7XG4gICAgICB9KTtcbiAgICAgIHN3aXBlci4kd3JhcHBlckVsLmNoaWxkcmVuKCcuc3dpcGVyLXNsaWRlJykuY3NzKG9mZnNldFByb3AsIChvZmZzZXQgKyBcInB4XCIpKTtcbiAgICAgIG9uUmVuZGVyZWQoKTtcbiAgICB9LFxuICAgIHJlbmRlclNsaWRlOiBmdW5jdGlvbiByZW5kZXJTbGlkZShzbGlkZSwgaW5kZXgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMudmlydHVhbDtcbiAgICAgIGlmIChwYXJhbXMuY2FjaGUgJiYgc3dpcGVyLnZpcnR1YWwuY2FjaGVbaW5kZXhdKSB7XG4gICAgICAgIHJldHVybiBzd2lwZXIudmlydHVhbC5jYWNoZVtpbmRleF07XG4gICAgICB9XG4gICAgICB2YXIgJHNsaWRlRWwgPSBwYXJhbXMucmVuZGVyU2xpZGVcbiAgICAgICAgPyAkKHBhcmFtcy5yZW5kZXJTbGlkZS5jYWxsKHN3aXBlciwgc2xpZGUsIGluZGV4KSlcbiAgICAgICAgOiAkKChcIjxkaXYgY2xhc3M9XFxcIlwiICsgKHN3aXBlci5wYXJhbXMuc2xpZGVDbGFzcykgKyBcIlxcXCIgZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgaW5kZXggKyBcIlxcXCI+XCIgKyBzbGlkZSArIFwiPC9kaXY+XCIpKTtcbiAgICAgIGlmICghJHNsaWRlRWwuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSkgeyAkc2xpZGVFbC5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcsIGluZGV4KTsgfVxuICAgICAgaWYgKHBhcmFtcy5jYWNoZSkgeyBzd2lwZXIudmlydHVhbC5jYWNoZVtpbmRleF0gPSAkc2xpZGVFbDsgfVxuICAgICAgcmV0dXJuICRzbGlkZUVsO1xuICAgIH0sXG4gICAgYXBwZW5kU2xpZGU6IGZ1bmN0aW9uIGFwcGVuZFNsaWRlKHNsaWRlcykge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIHNsaWRlcyA9PT0gJ29iamVjdCcgJiYgJ2xlbmd0aCcgaW4gc2xpZGVzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgaWYgKHNsaWRlc1tpXSkgeyBzd2lwZXIudmlydHVhbC5zbGlkZXMucHVzaChzbGlkZXNbaV0pOyB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci52aXJ0dWFsLnNsaWRlcy5wdXNoKHNsaWRlcyk7XG4gICAgICB9XG4gICAgICBzd2lwZXIudmlydHVhbC51cGRhdGUodHJ1ZSk7XG4gICAgfSxcbiAgICBwcmVwZW5kU2xpZGU6IGZ1bmN0aW9uIHByZXBlbmRTbGlkZShzbGlkZXMpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgICAgdmFyIG5ld0FjdGl2ZUluZGV4ID0gYWN0aXZlSW5kZXggKyAxO1xuICAgICAgdmFyIG51bWJlck9mTmV3U2xpZGVzID0gMTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2xpZGVzKSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgIGlmIChzbGlkZXNbaV0pIHsgc3dpcGVyLnZpcnR1YWwuc2xpZGVzLnVuc2hpZnQoc2xpZGVzW2ldKTsgfVxuICAgICAgICB9XG4gICAgICAgIG5ld0FjdGl2ZUluZGV4ID0gYWN0aXZlSW5kZXggKyBzbGlkZXMubGVuZ3RoO1xuICAgICAgICBudW1iZXJPZk5ld1NsaWRlcyA9IHNsaWRlcy5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIudmlydHVhbC5zbGlkZXMudW5zaGlmdChzbGlkZXMpO1xuICAgICAgfVxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbC5jYWNoZSkge1xuICAgICAgICB2YXIgY2FjaGUgPSBzd2lwZXIudmlydHVhbC5jYWNoZTtcbiAgICAgICAgdmFyIG5ld0NhY2hlID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKGNhY2hlKS5mb3JFYWNoKGZ1bmN0aW9uIChjYWNoZWRJbmRleCkge1xuICAgICAgICAgIHZhciAkY2FjaGVkRWwgPSBjYWNoZVtjYWNoZWRJbmRleF07XG4gICAgICAgICAgdmFyIGNhY2hlZEVsSW5kZXggPSAkY2FjaGVkRWwuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKTtcbiAgICAgICAgICBpZiAoY2FjaGVkRWxJbmRleCkge1xuICAgICAgICAgICAgJGNhY2hlZEVsLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JywgcGFyc2VJbnQoY2FjaGVkRWxJbmRleCwgMTApICsgMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5ld0NhY2hlW3BhcnNlSW50KGNhY2hlZEluZGV4LCAxMCkgKyBudW1iZXJPZk5ld1NsaWRlc10gPSAkY2FjaGVkRWw7XG4gICAgICAgIH0pO1xuICAgICAgICBzd2lwZXIudmlydHVhbC5jYWNoZSA9IG5ld0NhY2hlO1xuICAgICAgfVxuICAgICAgc3dpcGVyLnZpcnR1YWwudXBkYXRlKHRydWUpO1xuICAgICAgc3dpcGVyLnNsaWRlVG8obmV3QWN0aXZlSW5kZXgsIDApO1xuICAgIH0sXG4gICAgcmVtb3ZlU2xpZGU6IGZ1bmN0aW9uIHJlbW92ZVNsaWRlKHNsaWRlc0luZGV4ZXMpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHR5cGVvZiBzbGlkZXNJbmRleGVzID09PSAndW5kZWZpbmVkJyB8fCBzbGlkZXNJbmRleGVzID09PSBudWxsKSB7IHJldHVybjsgfVxuICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2xpZGVzSW5kZXhlcykpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IHNsaWRlc0luZGV4ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHtcbiAgICAgICAgICBzd2lwZXIudmlydHVhbC5zbGlkZXMuc3BsaWNlKHNsaWRlc0luZGV4ZXNbaV0sIDEpO1xuICAgICAgICAgIGlmIChzd2lwZXIucGFyYW1zLnZpcnR1YWwuY2FjaGUpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBzd2lwZXIudmlydHVhbC5jYWNoZVtzbGlkZXNJbmRleGVzW2ldXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNsaWRlc0luZGV4ZXNbaV0gPCBhY3RpdmVJbmRleCkgeyBhY3RpdmVJbmRleCAtPSAxOyB9XG4gICAgICAgICAgYWN0aXZlSW5kZXggPSBNYXRoLm1heChhY3RpdmVJbmRleCwgMCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci52aXJ0dWFsLnNsaWRlcy5zcGxpY2Uoc2xpZGVzSW5kZXhlcywgMSk7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLnZpcnR1YWwuY2FjaGUpIHtcbiAgICAgICAgICBkZWxldGUgc3dpcGVyLnZpcnR1YWwuY2FjaGVbc2xpZGVzSW5kZXhlc107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNsaWRlc0luZGV4ZXMgPCBhY3RpdmVJbmRleCkgeyBhY3RpdmVJbmRleCAtPSAxOyB9XG4gICAgICAgIGFjdGl2ZUluZGV4ID0gTWF0aC5tYXgoYWN0aXZlSW5kZXgsIDApO1xuICAgICAgfVxuICAgICAgc3dpcGVyLnZpcnR1YWwudXBkYXRlKHRydWUpO1xuICAgICAgc3dpcGVyLnNsaWRlVG8oYWN0aXZlSW5kZXgsIDApO1xuICAgIH0sXG4gICAgcmVtb3ZlQWxsU2xpZGVzOiBmdW5jdGlvbiByZW1vdmVBbGxTbGlkZXMoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHN3aXBlci52aXJ0dWFsLnNsaWRlcyA9IFtdO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbC5jYWNoZSkge1xuICAgICAgICBzd2lwZXIudmlydHVhbC5jYWNoZSA9IHt9O1xuICAgICAgfVxuICAgICAgc3dpcGVyLnZpcnR1YWwudXBkYXRlKHRydWUpO1xuICAgICAgc3dpcGVyLnNsaWRlVG8oMCwgMCk7XG4gICAgfSxcbiAgfTtcblxuICB2YXIgVmlydHVhbCQxID0ge1xuICAgIG5hbWU6ICd2aXJ0dWFsJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIHZpcnR1YWw6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHNsaWRlczogW10sXG4gICAgICAgIGNhY2hlOiB0cnVlLFxuICAgICAgICByZW5kZXJTbGlkZTogbnVsbCxcbiAgICAgICAgcmVuZGVyRXh0ZXJuYWw6IG51bGwsXG4gICAgICAgIGFkZFNsaWRlc0JlZm9yZTogMCxcbiAgICAgICAgYWRkU2xpZGVzQWZ0ZXI6IDAsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgdmlydHVhbDoge1xuICAgICAgICAgIHVwZGF0ZTogVmlydHVhbC51cGRhdGUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIGFwcGVuZFNsaWRlOiBWaXJ0dWFsLmFwcGVuZFNsaWRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBwcmVwZW5kU2xpZGU6IFZpcnR1YWwucHJlcGVuZFNsaWRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICByZW1vdmVTbGlkZTogVmlydHVhbC5yZW1vdmVTbGlkZS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgcmVtb3ZlQWxsU2xpZGVzOiBWaXJ0dWFsLnJlbW92ZUFsbFNsaWRlcy5iaW5kKHN3aXBlciksXG4gICAgICAgICAgcmVuZGVyU2xpZGU6IFZpcnR1YWwucmVuZGVyU2xpZGUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIHNsaWRlczogc3dpcGVyLnBhcmFtcy52aXJ0dWFsLnNsaWRlcyxcbiAgICAgICAgICBjYWNoZToge30sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBiZWZvcmVJbml0OiBmdW5jdGlvbiBiZWZvcmVJbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLmNsYXNzTmFtZXMucHVzaCgoKHN3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcykgKyBcInZpcnR1YWxcIikpO1xuICAgICAgICB2YXIgb3ZlcndyaXRlUGFyYW1zID0ge1xuICAgICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgIH07XG4gICAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIucGFyYW1zLCBvdmVyd3JpdGVQYXJhbXMpO1xuICAgICAgICBVdGlscy5leHRlbmQoc3dpcGVyLm9yaWdpbmFsUGFyYW1zLCBvdmVyd3JpdGVQYXJhbXMpO1xuXG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5pbml0aWFsU2xpZGUpIHtcbiAgICAgICAgICBzd2lwZXIudmlydHVhbC51cGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLnZpcnR1YWwudXBkYXRlKCk7XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgdmFyIEtleWJvYXJkID0ge1xuICAgIGhhbmRsZTogZnVuY3Rpb24gaGFuZGxlKGV2ZW50KSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlO1xuICAgICAgdmFyIGUgPSBldmVudDtcbiAgICAgIGlmIChlLm9yaWdpbmFsRXZlbnQpIHsgZSA9IGUub3JpZ2luYWxFdmVudDsgfSAvLyBqcXVlcnkgZml4XG4gICAgICB2YXIga2MgPSBlLmtleUNvZGUgfHwgZS5jaGFyQ29kZTtcbiAgICAgIC8vIERpcmVjdGlvbnMgbG9ja3NcbiAgICAgIGlmICghc3dpcGVyLmFsbG93U2xpZGVOZXh0ICYmICgoc3dpcGVyLmlzSG9yaXpvbnRhbCgpICYmIGtjID09PSAzOSkgfHwgKHN3aXBlci5pc1ZlcnRpY2FsKCkgJiYga2MgPT09IDQwKSB8fCBrYyA9PT0gMzQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICghc3dpcGVyLmFsbG93U2xpZGVQcmV2ICYmICgoc3dpcGVyLmlzSG9yaXpvbnRhbCgpICYmIGtjID09PSAzNykgfHwgKHN3aXBlci5pc1ZlcnRpY2FsKCkgJiYga2MgPT09IDM4KSB8fCBrYyA9PT0gMzMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChlLnNoaWZ0S2V5IHx8IGUuYWx0S2V5IHx8IGUuY3RybEtleSB8fCBlLm1ldGFLZXkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChkb2MuYWN0aXZlRWxlbWVudCAmJiBkb2MuYWN0aXZlRWxlbWVudC5ub2RlTmFtZSAmJiAoZG9jLmFjdGl2ZUVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyB8fCBkb2MuYWN0aXZlRWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAndGV4dGFyZWEnKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMua2V5Ym9hcmQub25seUluVmlld3BvcnQgJiYgKGtjID09PSAzMyB8fCBrYyA9PT0gMzQgfHwga2MgPT09IDM3IHx8IGtjID09PSAzOSB8fCBrYyA9PT0gMzggfHwga2MgPT09IDQwKSkge1xuICAgICAgICB2YXIgaW5WaWV3ID0gZmFsc2U7XG4gICAgICAgIC8vIENoZWNrIHRoYXQgc3dpcGVyIHNob3VsZCBiZSBpbnNpZGUgb2YgdmlzaWJsZSBhcmVhIG9mIHdpbmRvd1xuICAgICAgICBpZiAoc3dpcGVyLiRlbC5wYXJlbnRzKChcIi5cIiArIChzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3MpKSkubGVuZ3RoID4gMCAmJiBzd2lwZXIuJGVsLnBhcmVudHMoKFwiLlwiICsgKHN3aXBlci5wYXJhbXMuc2xpZGVBY3RpdmVDbGFzcykpKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHZhciB3aW5kb3dXaWR0aCA9IHdpbi5pbm5lcldpZHRoO1xuICAgICAgICB2YXIgd2luZG93SGVpZ2h0ID0gd2luLmlubmVySGVpZ2h0O1xuICAgICAgICB2YXIgc3dpcGVyT2Zmc2V0ID0gc3dpcGVyLiRlbC5vZmZzZXQoKTtcbiAgICAgICAgaWYgKHJ0bCkgeyBzd2lwZXJPZmZzZXQubGVmdCAtPSBzd2lwZXIuJGVsWzBdLnNjcm9sbExlZnQ7IH1cbiAgICAgICAgdmFyIHN3aXBlckNvb3JkID0gW1xuICAgICAgICAgIFtzd2lwZXJPZmZzZXQubGVmdCwgc3dpcGVyT2Zmc2V0LnRvcF0sXG4gICAgICAgICAgW3N3aXBlck9mZnNldC5sZWZ0ICsgc3dpcGVyLndpZHRoLCBzd2lwZXJPZmZzZXQudG9wXSxcbiAgICAgICAgICBbc3dpcGVyT2Zmc2V0LmxlZnQsIHN3aXBlck9mZnNldC50b3AgKyBzd2lwZXIuaGVpZ2h0XSxcbiAgICAgICAgICBbc3dpcGVyT2Zmc2V0LmxlZnQgKyBzd2lwZXIud2lkdGgsIHN3aXBlck9mZnNldC50b3AgKyBzd2lwZXIuaGVpZ2h0XSBdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN3aXBlckNvb3JkLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgdmFyIHBvaW50ID0gc3dpcGVyQ29vcmRbaV07XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcG9pbnRbMF0gPj0gMCAmJiBwb2ludFswXSA8PSB3aW5kb3dXaWR0aFxuICAgICAgICAgICAgJiYgcG9pbnRbMV0gPj0gMCAmJiBwb2ludFsxXSA8PSB3aW5kb3dIZWlnaHRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGluVmlldyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghaW5WaWV3KSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgaWYgKGtjID09PSAzMyB8fCBrYyA9PT0gMzQgfHwga2MgPT09IDM3IHx8IGtjID09PSAzOSkge1xuICAgICAgICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSB7IGUucHJldmVudERlZmF1bHQoKTsgfVxuICAgICAgICAgIGVsc2UgeyBlLnJldHVyblZhbHVlID0gZmFsc2U7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoKChrYyA9PT0gMzQgfHwga2MgPT09IDM5KSAmJiAhcnRsKSB8fCAoKGtjID09PSAzMyB8fCBrYyA9PT0gMzcpICYmIHJ0bCkpIHsgc3dpcGVyLnNsaWRlTmV4dCgpOyB9XG4gICAgICAgIGlmICgoKGtjID09PSAzMyB8fCBrYyA9PT0gMzcpICYmICFydGwpIHx8ICgoa2MgPT09IDM0IHx8IGtjID09PSAzOSkgJiYgcnRsKSkgeyBzd2lwZXIuc2xpZGVQcmV2KCk7IH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChrYyA9PT0gMzMgfHwga2MgPT09IDM0IHx8IGtjID09PSAzOCB8fCBrYyA9PT0gNDApIHtcbiAgICAgICAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkgeyBlLnByZXZlbnREZWZhdWx0KCk7IH1cbiAgICAgICAgICBlbHNlIHsgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtjID09PSAzNCB8fCBrYyA9PT0gNDApIHsgc3dpcGVyLnNsaWRlTmV4dCgpOyB9XG4gICAgICAgIGlmIChrYyA9PT0gMzMgfHwga2MgPT09IDM4KSB7IHN3aXBlci5zbGlkZVByZXYoKTsgfVxuICAgICAgfVxuICAgICAgc3dpcGVyLmVtaXQoJ2tleVByZXNzJywga2MpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIGVuYWJsZTogZnVuY3Rpb24gZW5hYmxlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoc3dpcGVyLmtleWJvYXJkLmVuYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAkKGRvYykub24oJ2tleWRvd24nLCBzd2lwZXIua2V5Ym9hcmQuaGFuZGxlKTtcbiAgICAgIHN3aXBlci5rZXlib2FyZC5lbmFibGVkID0gdHJ1ZTtcbiAgICB9LFxuICAgIGRpc2FibGU6IGZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLmtleWJvYXJkLmVuYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAkKGRvYykub2ZmKCdrZXlkb3duJywgc3dpcGVyLmtleWJvYXJkLmhhbmRsZSk7XG4gICAgICBzd2lwZXIua2V5Ym9hcmQuZW5hYmxlZCA9IGZhbHNlO1xuICAgIH0sXG4gIH07XG5cbiAgdmFyIEtleWJvYXJkJDEgPSB7XG4gICAgbmFtZTogJ2tleWJvYXJkJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIGtleWJvYXJkOiB7XG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBvbmx5SW5WaWV3cG9ydDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICBrZXlib2FyZDoge1xuICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgIGVuYWJsZTogS2V5Ym9hcmQuZW5hYmxlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBkaXNhYmxlOiBLZXlib2FyZC5kaXNhYmxlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBoYW5kbGU6IEtleWJvYXJkLmhhbmRsZS5iaW5kKHN3aXBlciksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMua2V5Ym9hcmQuZW5hYmxlZCkge1xuICAgICAgICAgIHN3aXBlci5rZXlib2FyZC5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLmtleWJvYXJkLmVuYWJsZWQpIHtcbiAgICAgICAgICBzd2lwZXIua2V5Ym9hcmQuZGlzYWJsZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgZnVuY3Rpb24gaXNFdmVudFN1cHBvcnRlZCgpIHtcbiAgICB2YXIgZXZlbnROYW1lID0gJ29ud2hlZWwnO1xuICAgIHZhciBpc1N1cHBvcnRlZCA9IGV2ZW50TmFtZSBpbiBkb2M7XG5cbiAgICBpZiAoIWlzU3VwcG9ydGVkKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGV2ZW50TmFtZSwgJ3JldHVybjsnKTtcbiAgICAgIGlzU3VwcG9ydGVkID0gdHlwZW9mIGVsZW1lbnRbZXZlbnROYW1lXSA9PT0gJ2Z1bmN0aW9uJztcbiAgICB9XG5cbiAgICBpZiAoIWlzU3VwcG9ydGVkXG4gICAgICAmJiBkb2MuaW1wbGVtZW50YXRpb25cbiAgICAgICYmIGRvYy5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlXG4gICAgICAvLyBhbHdheXMgcmV0dXJucyB0cnVlIGluIG5ld2VyIGJyb3dzZXJzIGFzIHBlciB0aGUgc3RhbmRhcmQuXG4gICAgICAvLyBAc2VlIGh0dHA6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkb20tZG9taW1wbGVtZW50YXRpb24taGFzZmVhdHVyZVxuICAgICAgJiYgZG9jLmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoJycsICcnKSAhPT0gdHJ1ZVxuICAgICkge1xuICAgICAgLy8gVGhpcyBpcyB0aGUgb25seSB3YXkgdG8gdGVzdCBzdXBwb3J0IGZvciB0aGUgYHdoZWVsYCBldmVudCBpbiBJRTkrLlxuICAgICAgaXNTdXBwb3J0ZWQgPSBkb2MuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgnRXZlbnRzLndoZWVsJywgJzMuMCcpO1xuICAgIH1cblxuICAgIHJldHVybiBpc1N1cHBvcnRlZDtcbiAgfVxuICB2YXIgTW91c2V3aGVlbCA9IHtcbiAgICBsYXN0U2Nyb2xsVGltZTogVXRpbHMubm93KCksXG4gICAgbGFzdEV2ZW50QmVmb3JlU25hcDogdW5kZWZpbmVkLFxuICAgIHJlY2VudFdoZWVsRXZlbnRzOiBbXSxcbiAgICBldmVudDogZnVuY3Rpb24gZXZlbnQoKSB7XG4gICAgICBpZiAod2luLm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignZmlyZWZveCcpID4gLTEpIHsgcmV0dXJuICdET01Nb3VzZVNjcm9sbCc7IH1cbiAgICAgIHJldHVybiBpc0V2ZW50U3VwcG9ydGVkKCkgPyAnd2hlZWwnIDogJ21vdXNld2hlZWwnO1xuICAgIH0sXG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbiBub3JtYWxpemUoZSkge1xuICAgICAgLy8gUmVhc29uYWJsZSBkZWZhdWx0c1xuICAgICAgdmFyIFBJWEVMX1NURVAgPSAxMDtcbiAgICAgIHZhciBMSU5FX0hFSUdIVCA9IDQwO1xuICAgICAgdmFyIFBBR0VfSEVJR0hUID0gODAwO1xuXG4gICAgICB2YXIgc1ggPSAwO1xuICAgICAgdmFyIHNZID0gMDsgLy8gc3BpblgsIHNwaW5ZXG4gICAgICB2YXIgcFggPSAwO1xuICAgICAgdmFyIHBZID0gMDsgLy8gcGl4ZWxYLCBwaXhlbFlcblxuICAgICAgLy8gTGVnYWN5XG4gICAgICBpZiAoJ2RldGFpbCcgaW4gZSkge1xuICAgICAgICBzWSA9IGUuZGV0YWlsO1xuICAgICAgfVxuICAgICAgaWYgKCd3aGVlbERlbHRhJyBpbiBlKSB7XG4gICAgICAgIHNZID0gLWUud2hlZWxEZWx0YSAvIDEyMDtcbiAgICAgIH1cbiAgICAgIGlmICgnd2hlZWxEZWx0YVknIGluIGUpIHtcbiAgICAgICAgc1kgPSAtZS53aGVlbERlbHRhWSAvIDEyMDtcbiAgICAgIH1cbiAgICAgIGlmICgnd2hlZWxEZWx0YVgnIGluIGUpIHtcbiAgICAgICAgc1ggPSAtZS53aGVlbERlbHRhWCAvIDEyMDtcbiAgICAgIH1cblxuICAgICAgLy8gc2lkZSBzY3JvbGxpbmcgb24gRkYgd2l0aCBET01Nb3VzZVNjcm9sbFxuICAgICAgaWYgKCdheGlzJyBpbiBlICYmIGUuYXhpcyA9PT0gZS5IT1JJWk9OVEFMX0FYSVMpIHtcbiAgICAgICAgc1ggPSBzWTtcbiAgICAgICAgc1kgPSAwO1xuICAgICAgfVxuXG4gICAgICBwWCA9IHNYICogUElYRUxfU1RFUDtcbiAgICAgIHBZID0gc1kgKiBQSVhFTF9TVEVQO1xuXG4gICAgICBpZiAoJ2RlbHRhWScgaW4gZSkge1xuICAgICAgICBwWSA9IGUuZGVsdGFZO1xuICAgICAgfVxuICAgICAgaWYgKCdkZWx0YVgnIGluIGUpIHtcbiAgICAgICAgcFggPSBlLmRlbHRhWDtcbiAgICAgIH1cblxuICAgICAgaWYgKGUuc2hpZnRLZXkgJiYgIXBYKSB7IC8vIGlmIHVzZXIgc2Nyb2xscyB3aXRoIHNoaWZ0IGhlIHdhbnRzIGhvcml6b250YWwgc2Nyb2xsXG4gICAgICAgIHBYID0gcFk7XG4gICAgICAgIHBZID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKChwWCB8fCBwWSkgJiYgZS5kZWx0YU1vZGUpIHtcbiAgICAgICAgaWYgKGUuZGVsdGFNb2RlID09PSAxKSB7IC8vIGRlbHRhIGluIExJTkUgdW5pdHNcbiAgICAgICAgICBwWCAqPSBMSU5FX0hFSUdIVDtcbiAgICAgICAgICBwWSAqPSBMSU5FX0hFSUdIVDtcbiAgICAgICAgfSBlbHNlIHsgLy8gZGVsdGEgaW4gUEFHRSB1bml0c1xuICAgICAgICAgIHBYICo9IFBBR0VfSEVJR0hUO1xuICAgICAgICAgIHBZICo9IFBBR0VfSEVJR0hUO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEZhbGwtYmFjayBpZiBzcGluIGNhbm5vdCBiZSBkZXRlcm1pbmVkXG4gICAgICBpZiAocFggJiYgIXNYKSB7XG4gICAgICAgIHNYID0gKHBYIDwgMSkgPyAtMSA6IDE7XG4gICAgICB9XG4gICAgICBpZiAocFkgJiYgIXNZKSB7XG4gICAgICAgIHNZID0gKHBZIDwgMSkgPyAtMSA6IDE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNwaW5YOiBzWCxcbiAgICAgICAgc3Bpblk6IHNZLFxuICAgICAgICBwaXhlbFg6IHBYLFxuICAgICAgICBwaXhlbFk6IHBZLFxuICAgICAgfTtcbiAgICB9LFxuICAgIGhhbmRsZU1vdXNlRW50ZXI6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRW50ZXIoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHN3aXBlci5tb3VzZUVudGVyZWQgPSB0cnVlO1xuICAgIH0sXG4gICAgaGFuZGxlTW91c2VMZWF2ZTogZnVuY3Rpb24gaGFuZGxlTW91c2VMZWF2ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgc3dpcGVyLm1vdXNlRW50ZXJlZCA9IGZhbHNlO1xuICAgIH0sXG4gICAgaGFuZGxlOiBmdW5jdGlvbiBoYW5kbGUoZXZlbnQpIHtcbiAgICAgIHZhciBlID0gZXZlbnQ7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLm1vdXNld2hlZWw7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdGFyZ2V0ID0gc3dpcGVyLiRlbDtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLm1vdXNld2hlZWwuZXZlbnRzVGFyZ2VkICE9PSAnY29udGFpbmVyJykge1xuICAgICAgICB0YXJnZXQgPSAkKHN3aXBlci5wYXJhbXMubW91c2V3aGVlbC5ldmVudHNUYXJnZWQpO1xuICAgICAgfVxuICAgICAgaWYgKCFzd2lwZXIubW91c2VFbnRlcmVkICYmICF0YXJnZXRbMF0uY29udGFpbnMoZS50YXJnZXQpICYmICFwYXJhbXMucmVsZWFzZU9uRWRnZXMpIHsgcmV0dXJuIHRydWU7IH1cblxuICAgICAgaWYgKGUub3JpZ2luYWxFdmVudCkgeyBlID0gZS5vcmlnaW5hbEV2ZW50OyB9IC8vIGpxdWVyeSBmaXhcbiAgICAgIHZhciBkZWx0YSA9IDA7XG4gICAgICB2YXIgcnRsRmFjdG9yID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSA/IC0xIDogMTtcblxuICAgICAgdmFyIGRhdGEgPSBNb3VzZXdoZWVsLm5vcm1hbGl6ZShlKTtcblxuICAgICAgaWYgKHBhcmFtcy5mb3JjZVRvQXhpcykge1xuICAgICAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICAgaWYgKE1hdGguYWJzKGRhdGEucGl4ZWxYKSA+IE1hdGguYWJzKGRhdGEucGl4ZWxZKSkgeyBkZWx0YSA9IGRhdGEucGl4ZWxYICogcnRsRmFjdG9yOyB9XG4gICAgICAgICAgZWxzZSB7IHJldHVybiB0cnVlOyB9XG4gICAgICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoZGF0YS5waXhlbFkpID4gTWF0aC5hYnMoZGF0YS5waXhlbFgpKSB7IGRlbHRhID0gZGF0YS5waXhlbFk7IH1cbiAgICAgICAgZWxzZSB7IHJldHVybiB0cnVlOyB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWx0YSA9IE1hdGguYWJzKGRhdGEucGl4ZWxYKSA+IE1hdGguYWJzKGRhdGEucGl4ZWxZKSA/IC1kYXRhLnBpeGVsWCAqIHJ0bEZhY3RvciA6IC1kYXRhLnBpeGVsWTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlbHRhID09PSAwKSB7IHJldHVybiB0cnVlOyB9XG5cbiAgICAgIGlmIChwYXJhbXMuaW52ZXJ0KSB7IGRlbHRhID0gLWRlbHRhOyB9XG5cbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5mcmVlTW9kZSkge1xuICAgICAgICAvLyBSZWdpc3RlciB0aGUgbmV3IGV2ZW50IGluIGEgdmFyaWFibGUgd2hpY2ggc3RvcmVzIHRoZSByZWxldmFudCBkYXRhXG4gICAgICAgIHZhciBuZXdFdmVudCA9IHtcbiAgICAgICAgICB0aW1lOiBVdGlscy5ub3coKSxcbiAgICAgICAgICBkZWx0YTogTWF0aC5hYnMoZGVsdGEpLFxuICAgICAgICAgIGRpcmVjdGlvbjogTWF0aC5zaWduKGRlbHRhKSxcbiAgICAgICAgICByYXc6IGV2ZW50LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEtlZXAgdGhlIG1vc3QgcmVjZW50IGV2ZW50c1xuICAgICAgICB2YXIgcmVjZW50V2hlZWxFdmVudHMgPSBzd2lwZXIubW91c2V3aGVlbC5yZWNlbnRXaGVlbEV2ZW50cztcbiAgICAgICAgaWYgKHJlY2VudFdoZWVsRXZlbnRzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgcmVjZW50V2hlZWxFdmVudHMuc2hpZnQoKTsgLy8gb25seSBzdG9yZSB0aGUgbGFzdCBOIGV2ZW50c1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcmV2RXZlbnQgPSByZWNlbnRXaGVlbEV2ZW50cy5sZW5ndGggPyByZWNlbnRXaGVlbEV2ZW50c1tyZWNlbnRXaGVlbEV2ZW50cy5sZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmVjZW50V2hlZWxFdmVudHMucHVzaChuZXdFdmVudCk7XG5cbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHByZXZpb3VzIHJlY29yZGVkIGV2ZW50OlxuICAgICAgICAvLyAgIElmIGRpcmVjdGlvbiBoYXMgY2hhbmdlZCBvclxuICAgICAgICAvLyAgIGlmIHRoZSBzY3JvbGwgaXMgcXVpY2tlciB0aGFuIHRoZSBwcmV2aW91cyBvbmU6XG4gICAgICAgIC8vICAgICBBbmltYXRlIHRoZSBzbGlkZXIuXG4gICAgICAgIC8vIEVsc2UgKHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhlIHdoZWVsIGlzIG1vdmVkKTpcbiAgICAgICAgLy8gICAgIEFuaW1hdGUgdGhlIHNsaWRlci5cbiAgICAgICAgaWYgKHByZXZFdmVudCkge1xuICAgICAgICAgIGlmIChuZXdFdmVudC5kaXJlY3Rpb24gIT09IHByZXZFdmVudC5kaXJlY3Rpb24gfHwgbmV3RXZlbnQuZGVsdGEgPiBwcmV2RXZlbnQuZGVsdGEpIHtcbiAgICAgICAgICAgIHN3aXBlci5tb3VzZXdoZWVsLmFuaW1hdGVTbGlkZXIobmV3RXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIubW91c2V3aGVlbC5hbmltYXRlU2xpZGVyKG5ld0V2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGl0J3MgdGltZSB0byByZWxlYXNlIHRoZSBzY3JvbGw6XG4gICAgICAgIC8vICAgUmV0dXJuIG5vdyBzbyB5b3UgZG9uJ3QgaGl0IHRoZSBwcmV2ZW50RGVmYXVsdC5cbiAgICAgICAgaWYgKHN3aXBlci5tb3VzZXdoZWVsLnJlbGVhc2VTY3JvbGwobmV3RXZlbnQpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZyZWVtb2RlIG9yIHNjcm9sbENvbnRhaW5lcjpcblxuICAgICAgICAvLyBJZiB3ZSByZWNlbnRseSBzbmFwcGVkIGFmdGVyIGEgbW9tZW50dW0gc2Nyb2xsLCB0aGVuIGlnbm9yZSB3aGVlbCBldmVudHNcbiAgICAgICAgLy8gdG8gZ2l2ZSB0aW1lIGZvciB0aGUgZGVjZWxlcmF0aW9uIHRvIGZpbmlzaC4gU3RvcCBpZ25vcmluZyBhZnRlciA1MDAgbXNlY3NcbiAgICAgICAgLy8gb3IgaWYgaXQncyBhIG5ldyBzY3JvbGwgKGxhcmdlciBkZWx0YSBvciBpbnZlcnNlIHNpZ24gYXMgbGFzdCBldmVudCBiZWZvcmVcbiAgICAgICAgLy8gYW4gZW5kLW9mLW1vbWVudHVtIHNuYXApLlxuICAgICAgICB2YXIgbmV3RXZlbnQkMSA9IHsgdGltZTogVXRpbHMubm93KCksIGRlbHRhOiBNYXRoLmFicyhkZWx0YSksIGRpcmVjdGlvbjogTWF0aC5zaWduKGRlbHRhKSB9O1xuICAgICAgICB2YXIgcmVmID0gc3dpcGVyLm1vdXNld2hlZWw7XG4gICAgICAgIHZhciBsYXN0RXZlbnRCZWZvcmVTbmFwID0gcmVmLmxhc3RFdmVudEJlZm9yZVNuYXA7XG4gICAgICAgIHZhciBpZ25vcmVXaGVlbEV2ZW50cyA9IGxhc3RFdmVudEJlZm9yZVNuYXBcbiAgICAgICAgICAmJiBuZXdFdmVudCQxLnRpbWUgPCBsYXN0RXZlbnRCZWZvcmVTbmFwLnRpbWUgKyA1MDBcbiAgICAgICAgICAmJiBuZXdFdmVudCQxLmRlbHRhIDw9IGxhc3RFdmVudEJlZm9yZVNuYXAuZGVsdGFcbiAgICAgICAgICAmJiBuZXdFdmVudCQxLmRpcmVjdGlvbiA9PT0gbGFzdEV2ZW50QmVmb3JlU25hcC5kaXJlY3Rpb247XG4gICAgICAgIGlmICghaWdub3JlV2hlZWxFdmVudHMpIHtcbiAgICAgICAgICBzd2lwZXIubW91c2V3aGVlbC5sYXN0RXZlbnRCZWZvcmVTbmFwID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHBvc2l0aW9uID0gc3dpcGVyLmdldFRyYW5zbGF0ZSgpICsgKGRlbHRhICogcGFyYW1zLnNlbnNpdGl2aXR5KTtcbiAgICAgICAgICB2YXIgd2FzQmVnaW5uaW5nID0gc3dpcGVyLmlzQmVnaW5uaW5nO1xuICAgICAgICAgIHZhciB3YXNFbmQgPSBzd2lwZXIuaXNFbmQ7XG5cbiAgICAgICAgICBpZiAocG9zaXRpb24gPj0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSB7IHBvc2l0aW9uID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpOyB9XG4gICAgICAgICAgaWYgKHBvc2l0aW9uIDw9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSkgeyBwb3NpdGlvbiA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKTsgfVxuXG4gICAgICAgICAgc3dpcGVyLnNldFRyYW5zaXRpb24oMCk7XG4gICAgICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShwb3NpdGlvbik7XG4gICAgICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKCk7XG4gICAgICAgICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KCk7XG4gICAgICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcblxuICAgICAgICAgIGlmICgoIXdhc0JlZ2lubmluZyAmJiBzd2lwZXIuaXNCZWdpbm5pbmcpIHx8ICghd2FzRW5kICYmIHN3aXBlci5pc0VuZCkpIHtcbiAgICAgICAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZnJlZU1vZGVTdGlja3kpIHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2hlZWwgc2Nyb2xsaW5nIHN0YXJ0cyB3aXRoIHN0aWNreSAoYWthIHNuYXApIGVuYWJsZWQsIHRoZW4gZGV0ZWN0XG4gICAgICAgICAgICAvLyB0aGUgZW5kIG9mIGEgbW9tZW50dW0gc2Nyb2xsIGJ5IHN0b3JpbmcgcmVjZW50IChOPTE1Pykgd2hlZWwgZXZlbnRzLlxuICAgICAgICAgICAgLy8gMS4gZG8gYWxsIE4gZXZlbnRzIGhhdmUgZGVjcmVhc2luZyBvciBzYW1lIChhYnNvbHV0ZSB2YWx1ZSkgZGVsdGE/XG4gICAgICAgICAgICAvLyAyLiBkaWQgYWxsIE4gZXZlbnRzIGFycml2ZSBpbiB0aGUgbGFzdCBNIChNPTUwMD8pIG1zZWNzP1xuICAgICAgICAgICAgLy8gMy4gZG9lcyB0aGUgZWFybGllc3QgZXZlbnQgaGF2ZSBhbiAoYWJzb2x1dGUgdmFsdWUpIGRlbHRhIHRoYXQnc1xuICAgICAgICAgICAgLy8gICAgYXQgbGVhc3QgUCAoUD0xPykgbGFyZ2VyIHRoYW4gdGhlIG1vc3QgcmVjZW50IGV2ZW50J3MgZGVsdGE/XG4gICAgICAgICAgICAvLyA0LiBkb2VzIHRoZSBsYXRlc3QgZXZlbnQgaGF2ZSBhIGRlbHRhIHRoYXQncyBzbWFsbGVyIHRoYW4gUSAoUT02PykgcGl4ZWxzP1xuICAgICAgICAgICAgLy8gSWYgMS00IGFyZSBcInllc1wiIHRoZW4gd2UncmUgbmVhciB0aGUgZW5kIG9mIGEgbW9tdW50dW0gc2Nyb2xsIGRlY2VsZXJhdGlvbi5cbiAgICAgICAgICAgIC8vIFNuYXAgaW1tZWRpYXRlbHkgYW5kIGlnbm9yZSByZW1haW5pbmcgd2hlZWwgZXZlbnRzIGluIHRoaXMgc2Nyb2xsLlxuICAgICAgICAgICAgLy8gU2VlIGNvbW1lbnQgYWJvdmUgZm9yIFwicmVtYWluaW5nIHdoZWVsIGV2ZW50cyBpbiB0aGlzIHNjcm9sbFwiIGRldGVybWluYXRpb24uXG4gICAgICAgICAgICAvLyBJZiAxLTQgYXJlbid0IHNhdGlzZmllZCwgdGhlbiB3YWl0IHRvIHNuYXAgdW50aWwgNTAwbXMgYWZ0ZXIgdGhlIGxhc3QgZXZlbnQuXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoc3dpcGVyLm1vdXNld2hlZWwudGltZW91dCk7XG4gICAgICAgICAgICBzd2lwZXIubW91c2V3aGVlbC50aW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdmFyIHJlY2VudFdoZWVsRXZlbnRzJDEgPSBzd2lwZXIubW91c2V3aGVlbC5yZWNlbnRXaGVlbEV2ZW50cztcbiAgICAgICAgICAgIGlmIChyZWNlbnRXaGVlbEV2ZW50cyQxLmxlbmd0aCA+PSAxNSkge1xuICAgICAgICAgICAgICByZWNlbnRXaGVlbEV2ZW50cyQxLnNoaWZ0KCk7IC8vIG9ubHkgc3RvcmUgdGhlIGxhc3QgTiBldmVudHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBwcmV2RXZlbnQkMSA9IHJlY2VudFdoZWVsRXZlbnRzJDEubGVuZ3RoID8gcmVjZW50V2hlZWxFdmVudHMkMVtyZWNlbnRXaGVlbEV2ZW50cyQxLmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgdmFyIGZpcnN0RXZlbnQgPSByZWNlbnRXaGVlbEV2ZW50cyQxWzBdO1xuICAgICAgICAgICAgcmVjZW50V2hlZWxFdmVudHMkMS5wdXNoKG5ld0V2ZW50JDEpO1xuICAgICAgICAgICAgaWYgKHByZXZFdmVudCQxICYmIChuZXdFdmVudCQxLmRlbHRhID4gcHJldkV2ZW50JDEuZGVsdGEgfHwgbmV3RXZlbnQkMS5kaXJlY3Rpb24gIT09IHByZXZFdmVudCQxLmRpcmVjdGlvbikpIHtcbiAgICAgICAgICAgICAgLy8gSW5jcmVhc2luZyBvciByZXZlcnNlLXNpZ24gZGVsdGEgbWVhbnMgdGhlIHVzZXIgc3RhcnRlZCBzY3JvbGxpbmcgYWdhaW4uIENsZWFyIHRoZSB3aGVlbCBldmVudCBsb2cuXG4gICAgICAgICAgICAgIHJlY2VudFdoZWVsRXZlbnRzJDEuc3BsaWNlKDApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyZWNlbnRXaGVlbEV2ZW50cyQxLmxlbmd0aCA+PSAxNVxuICAgICAgICAgICAgICAgICYmIG5ld0V2ZW50JDEudGltZSAtIGZpcnN0RXZlbnQudGltZSA8IDUwMFxuICAgICAgICAgICAgICAgICYmIGZpcnN0RXZlbnQuZGVsdGEgLSBuZXdFdmVudCQxLmRlbHRhID49IDFcbiAgICAgICAgICAgICAgICAmJiBuZXdFdmVudCQxLmRlbHRhIDw9IDZcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAvLyBXZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBkZWNlbGVyYXRpb24gb2YgYSBtb21lbnR1bSBzY3JvbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZFxuICAgICAgICAgICAgICAvLyB0byB3YWl0IGZvciBtb3JlIGV2ZW50cy4gU25hcCBBU0FQIG9uIHRoZSBuZXh0IHRpY2suXG4gICAgICAgICAgICAgIC8vIEFsc28sIGJlY2F1c2UgdGhlcmUncyBzb21lIHJlbWFpbmluZyBtb21lbnR1bSB3ZSdsbCBiaWFzIHRoZSBzbmFwIGluIHRoZVxuICAgICAgICAgICAgICAvLyBkaXJlY3Rpb24gb2YgdGhlIG9uZ29pbmcgc2Nyb2xsIGJlY2F1c2UgaXQncyBiZXR0ZXIgVVggZm9yIHRoZSBzY3JvbGwgdG8gc25hcFxuICAgICAgICAgICAgICAvLyBpbiB0aGUgc2FtZSBkaXJlY3Rpb24gYXMgdGhlIHNjcm9sbCBpbnN0ZWFkIG9mIHJldmVyc2luZyB0byBzbmFwLiAgVGhlcmVmb3JlLFxuICAgICAgICAgICAgICAvLyBpZiBpdCdzIGFscmVhZHkgc2Nyb2xsZWQgbW9yZSB0aGFuIDIwJSBpbiB0aGUgY3VycmVudCBkaXJlY3Rpb24sIGtlZXAgZ29pbmcuXG4gICAgICAgICAgICAgIHZhciBzbmFwVG9UaHJlc2hvbGQgPSBkZWx0YSA+IDAgPyAwLjggOiAwLjI7XG4gICAgICAgICAgICAgIHN3aXBlci5tb3VzZXdoZWVsLmxhc3RFdmVudEJlZm9yZVNuYXAgPSBuZXdFdmVudCQxO1xuICAgICAgICAgICAgICByZWNlbnRXaGVlbEV2ZW50cyQxLnNwbGljZSgwKTtcbiAgICAgICAgICAgICAgc3dpcGVyLm1vdXNld2hlZWwudGltZW91dCA9IFV0aWxzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2lwZXIuc2xpZGVUb0Nsb3Nlc3Qoc3dpcGVyLnBhcmFtcy5zcGVlZCwgdHJ1ZSwgdW5kZWZpbmVkLCBzbmFwVG9UaHJlc2hvbGQpO1xuICAgICAgICAgICAgICB9LCAwKTsgLy8gbm8gZGVsYXk7IG1vdmUgb24gbmV4dCB0aWNrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN3aXBlci5tb3VzZXdoZWVsLnRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgLy8gaWYgd2UgZ2V0IGhlcmUsIHRoZW4gd2UgaGF2ZW4ndCBkZXRlY3RlZCB0aGUgZW5kIG9mIGEgbW9tZW50dW0gc2Nyb2xsLCBzb1xuICAgICAgICAgICAgICAvLyB3ZSdsbCBjb25zaWRlciBhIHNjcm9sbCBcImNvbXBsZXRlXCIgd2hlbiB0aGVyZSBoYXZlbid0IGJlZW4gYW55IHdoZWVsIGV2ZW50c1xuICAgICAgICAgICAgICAvLyBmb3IgNTAwbXMuXG4gICAgICAgICAgICAgIHN3aXBlci5tb3VzZXdoZWVsLnRpbWVvdXQgPSBVdGlscy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNuYXBUb1RocmVzaG9sZCA9IDAuNTtcbiAgICAgICAgICAgICAgICBzd2lwZXIubW91c2V3aGVlbC5sYXN0RXZlbnRCZWZvcmVTbmFwID0gbmV3RXZlbnQkMTtcbiAgICAgICAgICAgICAgICByZWNlbnRXaGVlbEV2ZW50cyQxLnNwbGljZSgwKTtcbiAgICAgICAgICAgICAgICBzd2lwZXIuc2xpZGVUb0Nsb3Nlc3Qoc3dpcGVyLnBhcmFtcy5zcGVlZCwgdHJ1ZSwgdW5kZWZpbmVkLCBzbmFwVG9UaHJlc2hvbGQpO1xuICAgICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEVtaXQgZXZlbnRcbiAgICAgICAgICBpZiAoIWlnbm9yZVdoZWVsRXZlbnRzKSB7IHN3aXBlci5lbWl0KCdzY3JvbGwnLCBlKTsgfVxuXG4gICAgICAgICAgLy8gU3RvcCBhdXRvcGxheVxuICAgICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9wbGF5ICYmIHN3aXBlci5wYXJhbXMuYXV0b3BsYXlEaXNhYmxlT25JbnRlcmFjdGlvbikgeyBzd2lwZXIuYXV0b3BsYXkuc3RvcCgpOyB9XG4gICAgICAgICAgLy8gUmV0dXJuIHBhZ2Ugc2Nyb2xsIG9uIGVkZ2UgcG9zaXRpb25zXG4gICAgICAgICAgaWYgKHBvc2l0aW9uID09PSBzd2lwZXIubWluVHJhbnNsYXRlKCkgfHwgcG9zaXRpb24gPT09IHN3aXBlci5tYXhUcmFuc2xhdGUoKSkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSB7IGUucHJldmVudERlZmF1bHQoKTsgfVxuICAgICAgZWxzZSB7IGUucmV0dXJuVmFsdWUgPSBmYWxzZTsgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgYW5pbWF0ZVNsaWRlcjogZnVuY3Rpb24gYW5pbWF0ZVNsaWRlcihuZXdFdmVudCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAvLyBJZiB0aGUgbW92ZW1lbnQgaXMgTk9UIGJpZyBlbm91Z2ggYW5kXG4gICAgICAvLyBpZiB0aGUgbGFzdCB0aW1lIHRoZSB1c2VyIHNjcm9sbGVkIHdhcyB0b28gY2xvc2UgdG8gdGhlIGN1cnJlbnQgb25lIChhdm9pZCBjb250aW51b3VzbHkgdHJpZ2dlcmluZyB0aGUgc2xpZGVyKTpcbiAgICAgIC8vICAgRG9uJ3QgZ28gYW55IGZ1cnRoZXIgKGF2b2lkIGluc2lnbmlmaWNhbnQgc2Nyb2xsIG1vdmVtZW50KS5cbiAgICAgIGlmIChuZXdFdmVudC5kZWx0YSA+PSA2ICYmIFV0aWxzLm5vdygpIC0gc3dpcGVyLm1vdXNld2hlZWwubGFzdFNjcm9sbFRpbWUgPCA2MCkge1xuICAgICAgICAvLyBSZXR1cm4gZmFsc2UgYXMgYSBkZWZhdWx0XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgLy8gSWYgdXNlciBpcyBzY3JvbGxpbmcgdG93YXJkcyB0aGUgZW5kOlxuICAgICAgLy8gICBJZiB0aGUgc2xpZGVyIGhhc24ndCBoaXQgdGhlIGxhdGVzdCBzbGlkZSBvclxuICAgICAgLy8gICBpZiB0aGUgc2xpZGVyIGlzIGEgbG9vcCBhbmRcbiAgICAgIC8vICAgaWYgdGhlIHNsaWRlciBpc24ndCBtb3ZpbmcgcmlnaHQgbm93OlxuICAgICAgLy8gICAgIEdvIHRvIG5leHQgc2xpZGUgYW5kXG4gICAgICAvLyAgICAgZW1pdCBhIHNjcm9sbCBldmVudC5cbiAgICAgIC8vIEVsc2UgKHRoZSB1c2VyIGlzIHNjcm9sbGluZyB0b3dhcmRzIHRoZSBiZWdpbm5pbmcpIGFuZFxuICAgICAgLy8gaWYgdGhlIHNsaWRlciBoYXNuJ3QgaGl0IHRoZSBmaXJzdCBzbGlkZSBvclxuICAgICAgLy8gaWYgdGhlIHNsaWRlciBpcyBhIGxvb3AgYW5kXG4gICAgICAvLyBpZiB0aGUgc2xpZGVyIGlzbid0IG1vdmluZyByaWdodCBub3c6XG4gICAgICAvLyAgIEdvIHRvIHByZXYgc2xpZGUgYW5kXG4gICAgICAvLyAgIGVtaXQgYSBzY3JvbGwgZXZlbnQuXG4gICAgICBpZiAobmV3RXZlbnQuZGlyZWN0aW9uIDwgMCkge1xuICAgICAgICBpZiAoKCFzd2lwZXIuaXNFbmQgfHwgc3dpcGVyLnBhcmFtcy5sb29wKSAmJiAhc3dpcGVyLmFuaW1hdGluZykge1xuICAgICAgICAgIHN3aXBlci5zbGlkZU5leHQoKTtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgnc2Nyb2xsJywgbmV3RXZlbnQucmF3KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgoIXN3aXBlci5pc0JlZ2lubmluZyB8fCBzd2lwZXIucGFyYW1zLmxvb3ApICYmICFzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVByZXYoKTtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3Njcm9sbCcsIG5ld0V2ZW50LnJhdyk7XG4gICAgICB9XG4gICAgICAvLyBJZiB5b3UgZ290IGhlcmUgaXMgYmVjYXVzZSBhbiBhbmltYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkIHNvIHN0b3JlIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgIHN3aXBlci5tb3VzZXdoZWVsLmxhc3RTY3JvbGxUaW1lID0gKG5ldyB3aW4uRGF0ZSgpKS5nZXRUaW1lKCk7XG4gICAgICAvLyBSZXR1cm4gZmFsc2UgYXMgYSBkZWZhdWx0XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICByZWxlYXNlU2Nyb2xsOiBmdW5jdGlvbiByZWxlYXNlU2Nyb2xsKG5ld0V2ZW50KSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLm1vdXNld2hlZWw7XG4gICAgICBpZiAobmV3RXZlbnQuZGlyZWN0aW9uIDwgMCkge1xuICAgICAgICBpZiAoc3dpcGVyLmlzRW5kICYmICFzd2lwZXIucGFyYW1zLmxvb3AgJiYgcGFyYW1zLnJlbGVhc2VPbkVkZ2VzKSB7XG4gICAgICAgICAgLy8gUmV0dXJuIHRydWUgdG8gYW5pbWF0ZSBzY3JvbGwgb24gZWRnZXNcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzd2lwZXIuaXNCZWdpbm5pbmcgJiYgIXN3aXBlci5wYXJhbXMubG9vcCAmJiBwYXJhbXMucmVsZWFzZU9uRWRnZXMpIHtcbiAgICAgICAgLy8gUmV0dXJuIHRydWUgdG8gYW5pbWF0ZSBzY3JvbGwgb24gZWRnZXNcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBlbmFibGU6IGZ1bmN0aW9uIGVuYWJsZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIGV2ZW50ID0gTW91c2V3aGVlbC5ldmVudCgpO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgICBzd2lwZXIud3JhcHBlckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIHN3aXBlci5tb3VzZXdoZWVsLmhhbmRsZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFldmVudCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgIGlmIChzd2lwZXIubW91c2V3aGVlbC5lbmFibGVkKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgdmFyIHRhcmdldCA9IHN3aXBlci4kZWw7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5tb3VzZXdoZWVsLmV2ZW50c1RhcmdlZCAhPT0gJ2NvbnRhaW5lcicpIHtcbiAgICAgICAgdGFyZ2V0ID0gJChzd2lwZXIucGFyYW1zLm1vdXNld2hlZWwuZXZlbnRzVGFyZ2VkKTtcbiAgICAgIH1cbiAgICAgIHRhcmdldC5vbignbW91c2VlbnRlcicsIHN3aXBlci5tb3VzZXdoZWVsLmhhbmRsZU1vdXNlRW50ZXIpO1xuICAgICAgdGFyZ2V0Lm9uKCdtb3VzZWxlYXZlJywgc3dpcGVyLm1vdXNld2hlZWwuaGFuZGxlTW91c2VMZWF2ZSk7XG4gICAgICB0YXJnZXQub24oZXZlbnQsIHN3aXBlci5tb3VzZXdoZWVsLmhhbmRsZSk7XG4gICAgICBzd2lwZXIubW91c2V3aGVlbC5lbmFibGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgZGlzYWJsZTogZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIGV2ZW50ID0gTW91c2V3aGVlbC5ldmVudCgpO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgICBzd2lwZXIud3JhcHBlckVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIHN3aXBlci5tb3VzZXdoZWVsLmhhbmRsZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFldmVudCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgIGlmICghc3dpcGVyLm1vdXNld2hlZWwuZW5hYmxlZCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgIHZhciB0YXJnZXQgPSBzd2lwZXIuJGVsO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMubW91c2V3aGVlbC5ldmVudHNUYXJnZWQgIT09ICdjb250YWluZXInKSB7XG4gICAgICAgIHRhcmdldCA9ICQoc3dpcGVyLnBhcmFtcy5tb3VzZXdoZWVsLmV2ZW50c1RhcmdlZCk7XG4gICAgICB9XG4gICAgICB0YXJnZXQub2ZmKGV2ZW50LCBzd2lwZXIubW91c2V3aGVlbC5oYW5kbGUpO1xuICAgICAgc3dpcGVyLm1vdXNld2hlZWwuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgfTtcblxuICB2YXIgTW91c2V3aGVlbCQxID0ge1xuICAgIG5hbWU6ICdtb3VzZXdoZWVsJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIG1vdXNld2hlZWw6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHJlbGVhc2VPbkVkZ2VzOiBmYWxzZSxcbiAgICAgICAgaW52ZXJ0OiBmYWxzZSxcbiAgICAgICAgZm9yY2VUb0F4aXM6IGZhbHNlLFxuICAgICAgICBzZW5zaXRpdml0eTogMSxcbiAgICAgICAgZXZlbnRzVGFyZ2VkOiAnY29udGFpbmVyJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICBtb3VzZXdoZWVsOiB7XG4gICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgZW5hYmxlOiBNb3VzZXdoZWVsLmVuYWJsZS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgZGlzYWJsZTogTW91c2V3aGVlbC5kaXNhYmxlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBoYW5kbGU6IE1vdXNld2hlZWwuaGFuZGxlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBoYW5kbGVNb3VzZUVudGVyOiBNb3VzZXdoZWVsLmhhbmRsZU1vdXNlRW50ZXIuYmluZChzd2lwZXIpLFxuICAgICAgICAgIGhhbmRsZU1vdXNlTGVhdmU6IE1vdXNld2hlZWwuaGFuZGxlTW91c2VMZWF2ZS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgYW5pbWF0ZVNsaWRlcjogTW91c2V3aGVlbC5hbmltYXRlU2xpZGVyLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICByZWxlYXNlU2Nyb2xsOiBNb3VzZXdoZWVsLnJlbGVhc2VTY3JvbGwuYmluZChzd2lwZXIpLFxuICAgICAgICAgIGxhc3RTY3JvbGxUaW1lOiBVdGlscy5ub3coKSxcbiAgICAgICAgICBsYXN0RXZlbnRCZWZvcmVTbmFwOiB1bmRlZmluZWQsXG4gICAgICAgICAgcmVjZW50V2hlZWxFdmVudHM6IFtdLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5tb3VzZXdoZWVsLmVuYWJsZWQgJiYgc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICAgICAgc3dpcGVyLm1vdXNld2hlZWwuZGlzYWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLm1vdXNld2hlZWwuZW5hYmxlZCkgeyBzd2lwZXIubW91c2V3aGVlbC5lbmFibGUoKTsgfVxuICAgICAgfSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICAgICAgc3dpcGVyLm1vdXNld2hlZWwuZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN3aXBlci5tb3VzZXdoZWVsLmVuYWJsZWQpIHsgc3dpcGVyLm1vdXNld2hlZWwuZGlzYWJsZSgpOyB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgdmFyIE5hdmlnYXRpb24gPSB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICAvLyBVcGRhdGUgTmF2aWdhdGlvbiBCdXR0b25zXG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLm5hdmlnYXRpb247XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHsgcmV0dXJuOyB9XG4gICAgICB2YXIgcmVmID0gc3dpcGVyLm5hdmlnYXRpb247XG4gICAgICB2YXIgJG5leHRFbCA9IHJlZi4kbmV4dEVsO1xuICAgICAgdmFyICRwcmV2RWwgPSByZWYuJHByZXZFbDtcblxuICAgICAgaWYgKCRwcmV2RWwgJiYgJHByZXZFbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChzd2lwZXIuaXNCZWdpbm5pbmcpIHtcbiAgICAgICAgICAkcHJldkVsLmFkZENsYXNzKHBhcmFtcy5kaXNhYmxlZENsYXNzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkcHJldkVsLnJlbW92ZUNsYXNzKHBhcmFtcy5kaXNhYmxlZENsYXNzKTtcbiAgICAgICAgfVxuICAgICAgICAkcHJldkVsW3N3aXBlci5wYXJhbXMud2F0Y2hPdmVyZmxvdyAmJiBzd2lwZXIuaXNMb2NrZWQgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJ10ocGFyYW1zLmxvY2tDbGFzcyk7XG4gICAgICB9XG4gICAgICBpZiAoJG5leHRFbCAmJiAkbmV4dEVsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHN3aXBlci5pc0VuZCkge1xuICAgICAgICAgICRuZXh0RWwuYWRkQ2xhc3MocGFyYW1zLmRpc2FibGVkQ2xhc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRuZXh0RWwucmVtb3ZlQ2xhc3MocGFyYW1zLmRpc2FibGVkQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICAgICRuZXh0RWxbc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5pc0xvY2tlZCA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXShwYXJhbXMubG9ja0NsYXNzKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uUHJldkNsaWNrOiBmdW5jdGlvbiBvblByZXZDbGljayhlKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmIChzd2lwZXIuaXNCZWdpbm5pbmcgJiYgIXN3aXBlci5wYXJhbXMubG9vcCkgeyByZXR1cm47IH1cbiAgICAgIHN3aXBlci5zbGlkZVByZXYoKTtcbiAgICB9LFxuICAgIG9uTmV4dENsaWNrOiBmdW5jdGlvbiBvbk5leHRDbGljayhlKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmIChzd2lwZXIuaXNFbmQgJiYgIXN3aXBlci5wYXJhbXMubG9vcCkgeyByZXR1cm47IH1cbiAgICAgIHN3aXBlci5zbGlkZU5leHQoKTtcbiAgICB9LFxuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLm5hdmlnYXRpb247XG4gICAgICBpZiAoIShwYXJhbXMubmV4dEVsIHx8IHBhcmFtcy5wcmV2RWwpKSB7IHJldHVybjsgfVxuXG4gICAgICB2YXIgJG5leHRFbDtcbiAgICAgIHZhciAkcHJldkVsO1xuICAgICAgaWYgKHBhcmFtcy5uZXh0RWwpIHtcbiAgICAgICAgJG5leHRFbCA9ICQocGFyYW1zLm5leHRFbCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzd2lwZXIucGFyYW1zLnVuaXF1ZU5hdkVsZW1lbnRzXG4gICAgICAgICAgJiYgdHlwZW9mIHBhcmFtcy5uZXh0RWwgPT09ICdzdHJpbmcnXG4gICAgICAgICAgJiYgJG5leHRFbC5sZW5ndGggPiAxXG4gICAgICAgICAgJiYgc3dpcGVyLiRlbC5maW5kKHBhcmFtcy5uZXh0RWwpLmxlbmd0aCA9PT0gMVxuICAgICAgICApIHtcbiAgICAgICAgICAkbmV4dEVsID0gc3dpcGVyLiRlbC5maW5kKHBhcmFtcy5uZXh0RWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1zLnByZXZFbCkge1xuICAgICAgICAkcHJldkVsID0gJChwYXJhbXMucHJldkVsKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN3aXBlci5wYXJhbXMudW5pcXVlTmF2RWxlbWVudHNcbiAgICAgICAgICAmJiB0eXBlb2YgcGFyYW1zLnByZXZFbCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAmJiAkcHJldkVsLmxlbmd0aCA+IDFcbiAgICAgICAgICAmJiBzd2lwZXIuJGVsLmZpbmQocGFyYW1zLnByZXZFbCkubGVuZ3RoID09PSAxXG4gICAgICAgICkge1xuICAgICAgICAgICRwcmV2RWwgPSBzd2lwZXIuJGVsLmZpbmQocGFyYW1zLnByZXZFbCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCRuZXh0RWwgJiYgJG5leHRFbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICRuZXh0RWwub24oJ2NsaWNrJywgc3dpcGVyLm5hdmlnYXRpb24ub25OZXh0Q2xpY2spO1xuICAgICAgfVxuICAgICAgaWYgKCRwcmV2RWwgJiYgJHByZXZFbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICRwcmV2RWwub24oJ2NsaWNrJywgc3dpcGVyLm5hdmlnYXRpb24ub25QcmV2Q2xpY2spO1xuICAgICAgfVxuXG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLm5hdmlnYXRpb24sIHtcbiAgICAgICAgJG5leHRFbDogJG5leHRFbCxcbiAgICAgICAgbmV4dEVsOiAkbmV4dEVsICYmICRuZXh0RWxbMF0sXG4gICAgICAgICRwcmV2RWw6ICRwcmV2RWwsXG4gICAgICAgIHByZXZFbDogJHByZXZFbCAmJiAkcHJldkVsWzBdLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcmVmID0gc3dpcGVyLm5hdmlnYXRpb247XG4gICAgICB2YXIgJG5leHRFbCA9IHJlZi4kbmV4dEVsO1xuICAgICAgdmFyICRwcmV2RWwgPSByZWYuJHByZXZFbDtcbiAgICAgIGlmICgkbmV4dEVsICYmICRuZXh0RWwubGVuZ3RoKSB7XG4gICAgICAgICRuZXh0RWwub2ZmKCdjbGljaycsIHN3aXBlci5uYXZpZ2F0aW9uLm9uTmV4dENsaWNrKTtcbiAgICAgICAgJG5leHRFbC5yZW1vdmVDbGFzcyhzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24uZGlzYWJsZWRDbGFzcyk7XG4gICAgICB9XG4gICAgICBpZiAoJHByZXZFbCAmJiAkcHJldkVsLmxlbmd0aCkge1xuICAgICAgICAkcHJldkVsLm9mZignY2xpY2snLCBzd2lwZXIubmF2aWdhdGlvbi5vblByZXZDbGljayk7XG4gICAgICAgICRwcmV2RWwucmVtb3ZlQ2xhc3Moc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmRpc2FibGVkQ2xhc3MpO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG5cbiAgdmFyIE5hdmlnYXRpb24kMSA9IHtcbiAgICBuYW1lOiAnbmF2aWdhdGlvbicsXG4gICAgcGFyYW1zOiB7XG4gICAgICBuYXZpZ2F0aW9uOiB7XG4gICAgICAgIG5leHRFbDogbnVsbCxcbiAgICAgICAgcHJldkVsOiBudWxsLFxuXG4gICAgICAgIGhpZGVPbkNsaWNrOiBmYWxzZSxcbiAgICAgICAgZGlzYWJsZWRDbGFzczogJ3N3aXBlci1idXR0b24tZGlzYWJsZWQnLFxuICAgICAgICBoaWRkZW5DbGFzczogJ3N3aXBlci1idXR0b24taGlkZGVuJyxcbiAgICAgICAgbG9ja0NsYXNzOiAnc3dpcGVyLWJ1dHRvbi1sb2NrJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICBuYXZpZ2F0aW9uOiB7XG4gICAgICAgICAgaW5pdDogTmF2aWdhdGlvbi5pbml0LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICB1cGRhdGU6IE5hdmlnYXRpb24udXBkYXRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBkZXN0cm95OiBOYXZpZ2F0aW9uLmRlc3Ryb3kuYmluZChzd2lwZXIpLFxuICAgICAgICAgIG9uTmV4dENsaWNrOiBOYXZpZ2F0aW9uLm9uTmV4dENsaWNrLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBvblByZXZDbGljazogTmF2aWdhdGlvbi5vblByZXZDbGljay5iaW5kKHN3aXBlciksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgc3dpcGVyLm5hdmlnYXRpb24uaW5pdCgpO1xuICAgICAgICBzd2lwZXIubmF2aWdhdGlvbi51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICB0b0VkZ2U6IGZ1bmN0aW9uIHRvRWRnZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIHN3aXBlci5uYXZpZ2F0aW9uLnVwZGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIGZyb21FZGdlOiBmdW5jdGlvbiBmcm9tRWRnZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIHN3aXBlci5uYXZpZ2F0aW9uLnVwZGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBzd2lwZXIubmF2aWdhdGlvbi5kZXN0cm95KCk7XG4gICAgICB9LFxuICAgICAgY2xpY2s6IGZ1bmN0aW9uIGNsaWNrKGUpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIHZhciByZWYgPSBzd2lwZXIubmF2aWdhdGlvbjtcbiAgICAgICAgdmFyICRuZXh0RWwgPSByZWYuJG5leHRFbDtcbiAgICAgICAgdmFyICRwcmV2RWwgPSByZWYuJHByZXZFbDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5oaWRlT25DbGlja1xuICAgICAgICAgICYmICEkKGUudGFyZ2V0KS5pcygkcHJldkVsKVxuICAgICAgICAgICYmICEkKGUudGFyZ2V0KS5pcygkbmV4dEVsKVxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgaXNIaWRkZW47XG4gICAgICAgICAgaWYgKCRuZXh0RWwpIHtcbiAgICAgICAgICAgIGlzSGlkZGVuID0gJG5leHRFbC5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24uaGlkZGVuQ2xhc3MpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJHByZXZFbCkge1xuICAgICAgICAgICAgaXNIaWRkZW4gPSAkcHJldkVsLmhhc0NsYXNzKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5oaWRkZW5DbGFzcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0hpZGRlbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ25hdmlnYXRpb25TaG93Jywgc3dpcGVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ25hdmlnYXRpb25IaWRlJywgc3dpcGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCRuZXh0RWwpIHtcbiAgICAgICAgICAgICRuZXh0RWwudG9nZ2xlQ2xhc3Moc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmhpZGRlbkNsYXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCRwcmV2RWwpIHtcbiAgICAgICAgICAgICRwcmV2RWwudG9nZ2xlQ2xhc3Moc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmhpZGRlbkNsYXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICB2YXIgUGFnaW5hdGlvbiA9IHtcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgIC8vIFJlbmRlciB8fCBVcGRhdGUgUGFnaW5hdGlvbiBidWxsZXRzL2l0ZW1zXG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBydGwgPSBzd2lwZXIucnRsO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbjtcbiAgICAgIGlmICghcGFyYW1zLmVsIHx8ICFzd2lwZXIucGFnaW5hdGlvbi5lbCB8fCAhc3dpcGVyLnBhZ2luYXRpb24uJGVsIHx8IHN3aXBlci5wYWdpbmF0aW9uLiRlbC5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG4gICAgICB2YXIgc2xpZGVzTGVuZ3RoID0gc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQgPyBzd2lwZXIudmlydHVhbC5zbGlkZXMubGVuZ3RoIDogc3dpcGVyLnNsaWRlcy5sZW5ndGg7XG4gICAgICB2YXIgJGVsID0gc3dpcGVyLnBhZ2luYXRpb24uJGVsO1xuICAgICAgLy8gQ3VycmVudC9Ub3RhbFxuICAgICAgdmFyIGN1cnJlbnQ7XG4gICAgICB2YXIgdG90YWwgPSBzd2lwZXIucGFyYW1zLmxvb3AgPyBNYXRoLmNlaWwoKHNsaWRlc0xlbmd0aCAtIChzd2lwZXIubG9vcGVkU2xpZGVzICogMikpIC8gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCkgOiBzd2lwZXIuc25hcEdyaWQubGVuZ3RoO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICBjdXJyZW50ID0gTWF0aC5jZWlsKChzd2lwZXIuYWN0aXZlSW5kZXggLSBzd2lwZXIubG9vcGVkU2xpZGVzKSAvIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXApO1xuICAgICAgICBpZiAoY3VycmVudCA+IHNsaWRlc0xlbmd0aCAtIDEgLSAoc3dpcGVyLmxvb3BlZFNsaWRlcyAqIDIpKSB7XG4gICAgICAgICAgY3VycmVudCAtPSAoc2xpZGVzTGVuZ3RoIC0gKHN3aXBlci5sb29wZWRTbGlkZXMgKiAyKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnQgPiB0b3RhbCAtIDEpIHsgY3VycmVudCAtPSB0b3RhbDsgfVxuICAgICAgICBpZiAoY3VycmVudCA8IDAgJiYgc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uVHlwZSAhPT0gJ2J1bGxldHMnKSB7IGN1cnJlbnQgPSB0b3RhbCArIGN1cnJlbnQ7IH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN3aXBlci5zbmFwSW5kZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGN1cnJlbnQgPSBzd2lwZXIuc25hcEluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudCA9IHN3aXBlci5hY3RpdmVJbmRleCB8fCAwO1xuICAgICAgfVxuICAgICAgLy8gVHlwZXNcbiAgICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2J1bGxldHMnICYmIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMgJiYgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBidWxsZXRzID0gc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cztcbiAgICAgICAgdmFyIGZpcnN0SW5kZXg7XG4gICAgICAgIHZhciBsYXN0SW5kZXg7XG4gICAgICAgIHZhciBtaWRJbmRleDtcbiAgICAgICAgaWYgKHBhcmFtcy5keW5hbWljQnVsbGV0cykge1xuICAgICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldFNpemUgPSBidWxsZXRzLmVxKDApW3N3aXBlci5pc0hvcml6b250YWwoKSA/ICdvdXRlcldpZHRoJyA6ICdvdXRlckhlaWdodCddKHRydWUpO1xuICAgICAgICAgICRlbC5jc3Moc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ3dpZHRoJyA6ICdoZWlnaHQnLCAoKHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldFNpemUgKiAocGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyArIDQpKSArIFwicHhcIikpO1xuICAgICAgICAgIGlmIChwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzID4gMSAmJiBzd2lwZXIucHJldmlvdXNJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5keW5hbWljQnVsbGV0SW5kZXggKz0gKGN1cnJlbnQgLSBzd2lwZXIucHJldmlvdXNJbmRleCk7XG4gICAgICAgICAgICBpZiAoc3dpcGVyLnBhZ2luYXRpb24uZHluYW1pY0J1bGxldEluZGV4ID4gKHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHMgLSAxKSkge1xuICAgICAgICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5keW5hbWljQnVsbGV0SW5kZXggPSBwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzIC0gMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3dpcGVyLnBhZ2luYXRpb24uZHluYW1pY0J1bGxldEluZGV4IDwgMCkge1xuICAgICAgICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5keW5hbWljQnVsbGV0SW5kZXggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmaXJzdEluZGV4ID0gY3VycmVudCAtIHN3aXBlci5wYWdpbmF0aW9uLmR5bmFtaWNCdWxsZXRJbmRleDtcbiAgICAgICAgICBsYXN0SW5kZXggPSBmaXJzdEluZGV4ICsgKE1hdGgubWluKGJ1bGxldHMubGVuZ3RoLCBwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzKSAtIDEpO1xuICAgICAgICAgIG1pZEluZGV4ID0gKGxhc3RJbmRleCArIGZpcnN0SW5kZXgpIC8gMjtcbiAgICAgICAgfVxuICAgICAgICBidWxsZXRzLnJlbW92ZUNsYXNzKCgocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKSArIFwiIFwiICsgKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcykgKyBcIi1uZXh0IFwiICsgKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcykgKyBcIi1uZXh0LW5leHQgXCIgKyAocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKSArIFwiLXByZXYgXCIgKyAocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKSArIFwiLXByZXYtcHJldiBcIiArIChwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MpICsgXCItbWFpblwiKSk7XG4gICAgICAgIGlmICgkZWwubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGJ1bGxldHMuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGJ1bGxldCkge1xuICAgICAgICAgICAgdmFyICRidWxsZXQgPSAkKGJ1bGxldCk7XG4gICAgICAgICAgICB2YXIgYnVsbGV0SW5kZXggPSAkYnVsbGV0LmluZGV4KCk7XG4gICAgICAgICAgICBpZiAoYnVsbGV0SW5kZXggPT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgJGJ1bGxldC5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhcmFtcy5keW5hbWljQnVsbGV0cykge1xuICAgICAgICAgICAgICBpZiAoYnVsbGV0SW5kZXggPj0gZmlyc3RJbmRleCAmJiBidWxsZXRJbmRleCA8PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAkYnVsbGV0LmFkZENsYXNzKCgocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKSArIFwiLW1haW5cIikpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChidWxsZXRJbmRleCA9PT0gZmlyc3RJbmRleCkge1xuICAgICAgICAgICAgICAgICRidWxsZXRcbiAgICAgICAgICAgICAgICAgIC5wcmV2KClcbiAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygoKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcykgKyBcIi1wcmV2XCIpKVxuICAgICAgICAgICAgICAgICAgLnByZXYoKVxuICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCgocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKSArIFwiLXByZXYtcHJldlwiKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGJ1bGxldEluZGV4ID09PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAkYnVsbGV0XG4gICAgICAgICAgICAgICAgICAubmV4dCgpXG4gICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoKChwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MpICsgXCItbmV4dFwiKSlcbiAgICAgICAgICAgICAgICAgIC5uZXh0KClcbiAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygoKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcykgKyBcIi1uZXh0LW5leHRcIikpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyICRidWxsZXQgPSBidWxsZXRzLmVxKGN1cnJlbnQpO1xuICAgICAgICAgIHZhciBidWxsZXRJbmRleCA9ICRidWxsZXQuaW5kZXgoKTtcbiAgICAgICAgICAkYnVsbGV0LmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyk7XG4gICAgICAgICAgaWYgKHBhcmFtcy5keW5hbWljQnVsbGV0cykge1xuICAgICAgICAgICAgdmFyICRmaXJzdERpc3BsYXllZEJ1bGxldCA9IGJ1bGxldHMuZXEoZmlyc3RJbmRleCk7XG4gICAgICAgICAgICB2YXIgJGxhc3REaXNwbGF5ZWRCdWxsZXQgPSBidWxsZXRzLmVxKGxhc3RJbmRleCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gZmlyc3RJbmRleDsgaSA8PSBsYXN0SW5kZXg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICBidWxsZXRzLmVxKGkpLmFkZENsYXNzKCgocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKSArIFwiLW1haW5cIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICAgICAgICBpZiAoYnVsbGV0SW5kZXggPj0gYnVsbGV0cy5sZW5ndGggLSBwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSQxID0gcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0czsgaSQxID49IDA7IGkkMSAtPSAxKSB7XG4gICAgICAgICAgICAgICAgICBidWxsZXRzLmVxKGJ1bGxldHMubGVuZ3RoIC0gaSQxKS5hZGRDbGFzcygoKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcykgKyBcIi1tYWluXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnVsbGV0cy5lcShidWxsZXRzLmxlbmd0aCAtIHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHMgLSAxKS5hZGRDbGFzcygoKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcykgKyBcIi1wcmV2XCIpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkZmlyc3REaXNwbGF5ZWRCdWxsZXRcbiAgICAgICAgICAgICAgICAgIC5wcmV2KClcbiAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygoKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcykgKyBcIi1wcmV2XCIpKVxuICAgICAgICAgICAgICAgICAgLnByZXYoKVxuICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCgocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKSArIFwiLXByZXYtcHJldlwiKSk7XG4gICAgICAgICAgICAgICAgJGxhc3REaXNwbGF5ZWRCdWxsZXRcbiAgICAgICAgICAgICAgICAgIC5uZXh0KClcbiAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygoKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcykgKyBcIi1uZXh0XCIpKVxuICAgICAgICAgICAgICAgICAgLm5leHQoKVxuICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCgocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKSArIFwiLW5leHQtbmV4dFwiKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICRmaXJzdERpc3BsYXllZEJ1bGxldFxuICAgICAgICAgICAgICAgIC5wcmV2KClcbiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoKChwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MpICsgXCItcHJldlwiKSlcbiAgICAgICAgICAgICAgICAucHJldigpXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKCgocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKSArIFwiLXByZXYtcHJldlwiKSk7XG4gICAgICAgICAgICAgICRsYXN0RGlzcGxheWVkQnVsbGV0XG4gICAgICAgICAgICAgICAgLm5leHQoKVxuICAgICAgICAgICAgICAgIC5hZGRDbGFzcygoKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcykgKyBcIi1uZXh0XCIpKVxuICAgICAgICAgICAgICAgIC5uZXh0KClcbiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoKChwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MpICsgXCItbmV4dC1uZXh0XCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmFtcy5keW5hbWljQnVsbGV0cykge1xuICAgICAgICAgIHZhciBkeW5hbWljQnVsbGV0c0xlbmd0aCA9IE1hdGgubWluKGJ1bGxldHMubGVuZ3RoLCBwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzICsgNCk7XG4gICAgICAgICAgdmFyIGJ1bGxldHNPZmZzZXQgPSAoKChzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRTaXplICogZHluYW1pY0J1bGxldHNMZW5ndGgpIC0gKHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldFNpemUpKSAvIDIpIC0gKG1pZEluZGV4ICogc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0U2l6ZSk7XG4gICAgICAgICAgdmFyIG9mZnNldFByb3AgPSBydGwgPyAncmlnaHQnIDogJ2xlZnQnO1xuICAgICAgICAgIGJ1bGxldHMuY3NzKHN3aXBlci5pc0hvcml6b250YWwoKSA/IG9mZnNldFByb3AgOiAndG9wJywgKGJ1bGxldHNPZmZzZXQgKyBcInB4XCIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy50eXBlID09PSAnZnJhY3Rpb24nKSB7XG4gICAgICAgICRlbC5maW5kKChcIi5cIiArIChwYXJhbXMuY3VycmVudENsYXNzKSkpLnRleHQocGFyYW1zLmZvcm1hdEZyYWN0aW9uQ3VycmVudChjdXJyZW50ICsgMSkpO1xuICAgICAgICAkZWwuZmluZCgoXCIuXCIgKyAocGFyYW1zLnRvdGFsQ2xhc3MpKSkudGV4dChwYXJhbXMuZm9ybWF0RnJhY3Rpb25Ub3RhbCh0b3RhbCkpO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy50eXBlID09PSAncHJvZ3Jlc3NiYXInKSB7XG4gICAgICAgIHZhciBwcm9ncmVzc2JhckRpcmVjdGlvbjtcbiAgICAgICAgaWYgKHBhcmFtcy5wcm9ncmVzc2Jhck9wcG9zaXRlKSB7XG4gICAgICAgICAgcHJvZ3Jlc3NiYXJEaXJlY3Rpb24gPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb2dyZXNzYmFyRGlyZWN0aW9uID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ2hvcml6b250YWwnIDogJ3ZlcnRpY2FsJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgc2NhbGUgPSAoY3VycmVudCArIDEpIC8gdG90YWw7XG4gICAgICAgIHZhciBzY2FsZVggPSAxO1xuICAgICAgICB2YXIgc2NhbGVZID0gMTtcbiAgICAgICAgaWYgKHByb2dyZXNzYmFyRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBzY2FsZVggPSBzY2FsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzY2FsZVkgPSBzY2FsZTtcbiAgICAgICAgfVxuICAgICAgICAkZWwuZmluZCgoXCIuXCIgKyAocGFyYW1zLnByb2dyZXNzYmFyRmlsbENsYXNzKSkpLnRyYW5zZm9ybSgoXCJ0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGVYKFwiICsgc2NhbGVYICsgXCIpIHNjYWxlWShcIiArIHNjYWxlWSArIFwiKVwiKSkudHJhbnNpdGlvbihzd2lwZXIucGFyYW1zLnNwZWVkKTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2N1c3RvbScgJiYgcGFyYW1zLnJlbmRlckN1c3RvbSkge1xuICAgICAgICAkZWwuaHRtbChwYXJhbXMucmVuZGVyQ3VzdG9tKHN3aXBlciwgY3VycmVudCArIDEsIHRvdGFsKSk7XG4gICAgICAgIHN3aXBlci5lbWl0KCdwYWdpbmF0aW9uUmVuZGVyJywgc3dpcGVyLCAkZWxbMF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3BhZ2luYXRpb25VcGRhdGUnLCBzd2lwZXIsICRlbFswXSk7XG4gICAgICB9XG4gICAgICAkZWxbc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5pc0xvY2tlZCA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXShwYXJhbXMubG9ja0NsYXNzKTtcbiAgICB9LFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgLy8gUmVuZGVyIENvbnRhaW5lclxuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uO1xuICAgICAgaWYgKCFwYXJhbXMuZWwgfHwgIXN3aXBlci5wYWdpbmF0aW9uLmVsIHx8ICFzd2lwZXIucGFnaW5hdGlvbi4kZWwgfHwgc3dpcGVyLnBhZ2luYXRpb24uJGVsLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cbiAgICAgIHZhciBzbGlkZXNMZW5ndGggPSBzd2lwZXIudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCA/IHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGggOiBzd2lwZXIuc2xpZGVzLmxlbmd0aDtcblxuICAgICAgdmFyICRlbCA9IHN3aXBlci5wYWdpbmF0aW9uLiRlbDtcbiAgICAgIHZhciBwYWdpbmF0aW9uSFRNTCA9ICcnO1xuICAgICAgaWYgKHBhcmFtcy50eXBlID09PSAnYnVsbGV0cycpIHtcbiAgICAgICAgdmFyIG51bWJlck9mQnVsbGV0cyA9IHN3aXBlci5wYXJhbXMubG9vcCA/IE1hdGguY2VpbCgoc2xpZGVzTGVuZ3RoIC0gKHN3aXBlci5sb29wZWRTbGlkZXMgKiAyKSkgLyBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwKSA6IHN3aXBlci5zbmFwR3JpZC5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZCdWxsZXRzOyBpICs9IDEpIHtcbiAgICAgICAgICBpZiAocGFyYW1zLnJlbmRlckJ1bGxldCkge1xuICAgICAgICAgICAgcGFnaW5hdGlvbkhUTUwgKz0gcGFyYW1zLnJlbmRlckJ1bGxldC5jYWxsKHN3aXBlciwgaSwgcGFyYW1zLmJ1bGxldENsYXNzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFnaW5hdGlvbkhUTUwgKz0gXCI8XCIgKyAocGFyYW1zLmJ1bGxldEVsZW1lbnQpICsgXCIgY2xhc3M9XFxcIlwiICsgKHBhcmFtcy5idWxsZXRDbGFzcykgKyBcIlxcXCI+PC9cIiArIChwYXJhbXMuYnVsbGV0RWxlbWVudCkgKyBcIj5cIjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgJGVsLmh0bWwocGFnaW5hdGlvbkhUTUwpO1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzID0gJGVsLmZpbmQoKFwiLlwiICsgKHBhcmFtcy5idWxsZXRDbGFzcykpKTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2ZyYWN0aW9uJykge1xuICAgICAgICBpZiAocGFyYW1zLnJlbmRlckZyYWN0aW9uKSB7XG4gICAgICAgICAgcGFnaW5hdGlvbkhUTUwgPSBwYXJhbXMucmVuZGVyRnJhY3Rpb24uY2FsbChzd2lwZXIsIHBhcmFtcy5jdXJyZW50Q2xhc3MsIHBhcmFtcy50b3RhbENsYXNzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYWdpbmF0aW9uSFRNTCA9IFwiPHNwYW4gY2xhc3M9XFxcIlwiICsgKHBhcmFtcy5jdXJyZW50Q2xhc3MpICsgXCJcXFwiPjwvc3Bhbj5cIlxuICAgICAgICAgICsgJyAvICdcbiAgICAgICAgICArIFwiPHNwYW4gY2xhc3M9XFxcIlwiICsgKHBhcmFtcy50b3RhbENsYXNzKSArIFwiXFxcIj48L3NwYW4+XCI7XG4gICAgICAgIH1cbiAgICAgICAgJGVsLmh0bWwocGFnaW5hdGlvbkhUTUwpO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy50eXBlID09PSAncHJvZ3Jlc3NiYXInKSB7XG4gICAgICAgIGlmIChwYXJhbXMucmVuZGVyUHJvZ3Jlc3NiYXIpIHtcbiAgICAgICAgICBwYWdpbmF0aW9uSFRNTCA9IHBhcmFtcy5yZW5kZXJQcm9ncmVzc2Jhci5jYWxsKHN3aXBlciwgcGFyYW1zLnByb2dyZXNzYmFyRmlsbENsYXNzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYWdpbmF0aW9uSFRNTCA9IFwiPHNwYW4gY2xhc3M9XFxcIlwiICsgKHBhcmFtcy5wcm9ncmVzc2JhckZpbGxDbGFzcykgKyBcIlxcXCI+PC9zcGFuPlwiO1xuICAgICAgICB9XG4gICAgICAgICRlbC5odG1sKHBhZ2luYXRpb25IVE1MKTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbXMudHlwZSAhPT0gJ2N1c3RvbScpIHtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3BhZ2luYXRpb25SZW5kZXInLCBzd2lwZXIucGFnaW5hdGlvbi4kZWxbMF0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbjtcbiAgICAgIGlmICghcGFyYW1zLmVsKSB7IHJldHVybjsgfVxuXG4gICAgICB2YXIgJGVsID0gJChwYXJhbXMuZWwpO1xuICAgICAgaWYgKCRlbC5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgc3dpcGVyLnBhcmFtcy51bmlxdWVOYXZFbGVtZW50c1xuICAgICAgICAmJiB0eXBlb2YgcGFyYW1zLmVsID09PSAnc3RyaW5nJ1xuICAgICAgICAmJiAkZWwubGVuZ3RoID4gMVxuICAgICAgICAmJiBzd2lwZXIuJGVsLmZpbmQocGFyYW1zLmVsKS5sZW5ndGggPT09IDFcbiAgICAgICkge1xuICAgICAgICAkZWwgPSBzd2lwZXIuJGVsLmZpbmQocGFyYW1zLmVsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmFtcy50eXBlID09PSAnYnVsbGV0cycgJiYgcGFyYW1zLmNsaWNrYWJsZSkge1xuICAgICAgICAkZWwuYWRkQ2xhc3MocGFyYW1zLmNsaWNrYWJsZUNsYXNzKTtcbiAgICAgIH1cblxuICAgICAgJGVsLmFkZENsYXNzKHBhcmFtcy5tb2RpZmllckNsYXNzICsgcGFyYW1zLnR5cGUpO1xuXG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdidWxsZXRzJyAmJiBwYXJhbXMuZHluYW1pY0J1bGxldHMpIHtcbiAgICAgICAgJGVsLmFkZENsYXNzKChcIlwiICsgKHBhcmFtcy5tb2RpZmllckNsYXNzKSArIChwYXJhbXMudHlwZSkgKyBcIi1keW5hbWljXCIpKTtcbiAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uZHluYW1pY0J1bGxldEluZGV4ID0gMDtcbiAgICAgICAgaWYgKHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHMgPCAxKSB7XG4gICAgICAgICAgcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyA9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ3Byb2dyZXNzYmFyJyAmJiBwYXJhbXMucHJvZ3Jlc3NiYXJPcHBvc2l0ZSkge1xuICAgICAgICAkZWwuYWRkQ2xhc3MocGFyYW1zLnByb2dyZXNzYmFyT3Bwb3NpdGVDbGFzcyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJhbXMuY2xpY2thYmxlKSB7XG4gICAgICAgICRlbC5vbignY2xpY2snLCAoXCIuXCIgKyAocGFyYW1zLmJ1bGxldENsYXNzKSksIGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB2YXIgaW5kZXggPSAkKHRoaXMpLmluZGV4KCkgKiBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwO1xuICAgICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHsgaW5kZXggKz0gc3dpcGVyLmxvb3BlZFNsaWRlczsgfVxuICAgICAgICAgIHN3aXBlci5zbGlkZVRvKGluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIucGFnaW5hdGlvbiwge1xuICAgICAgICAkZWw6ICRlbCxcbiAgICAgICAgZWw6ICRlbFswXSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbjtcbiAgICAgIGlmICghcGFyYW1zLmVsIHx8ICFzd2lwZXIucGFnaW5hdGlvbi5lbCB8fCAhc3dpcGVyLnBhZ2luYXRpb24uJGVsIHx8IHN3aXBlci5wYWdpbmF0aW9uLiRlbC5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG4gICAgICB2YXIgJGVsID0gc3dpcGVyLnBhZ2luYXRpb24uJGVsO1xuXG4gICAgICAkZWwucmVtb3ZlQ2xhc3MocGFyYW1zLmhpZGRlbkNsYXNzKTtcbiAgICAgICRlbC5yZW1vdmVDbGFzcyhwYXJhbXMubW9kaWZpZXJDbGFzcyArIHBhcmFtcy50eXBlKTtcbiAgICAgIGlmIChzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzKSB7IHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMucmVtb3ZlQ2xhc3MocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKTsgfVxuICAgICAgaWYgKHBhcmFtcy5jbGlja2FibGUpIHtcbiAgICAgICAgJGVsLm9mZignY2xpY2snLCAoXCIuXCIgKyAocGFyYW1zLmJ1bGxldENsYXNzKSkpO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG5cbiAgdmFyIFBhZ2luYXRpb24kMSA9IHtcbiAgICBuYW1lOiAncGFnaW5hdGlvbicsXG4gICAgcGFyYW1zOiB7XG4gICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgIGVsOiBudWxsLFxuICAgICAgICBidWxsZXRFbGVtZW50OiAnc3BhbicsXG4gICAgICAgIGNsaWNrYWJsZTogZmFsc2UsXG4gICAgICAgIGhpZGVPbkNsaWNrOiBmYWxzZSxcbiAgICAgICAgcmVuZGVyQnVsbGV0OiBudWxsLFxuICAgICAgICByZW5kZXJQcm9ncmVzc2JhcjogbnVsbCxcbiAgICAgICAgcmVuZGVyRnJhY3Rpb246IG51bGwsXG4gICAgICAgIHJlbmRlckN1c3RvbTogbnVsbCxcbiAgICAgICAgcHJvZ3Jlc3NiYXJPcHBvc2l0ZTogZmFsc2UsXG4gICAgICAgIHR5cGU6ICdidWxsZXRzJywgLy8gJ2J1bGxldHMnIG9yICdwcm9ncmVzc2Jhcicgb3IgJ2ZyYWN0aW9uJyBvciAnY3VzdG9tJ1xuICAgICAgICBkeW5hbWljQnVsbGV0czogZmFsc2UsXG4gICAgICAgIGR5bmFtaWNNYWluQnVsbGV0czogMSxcbiAgICAgICAgZm9ybWF0RnJhY3Rpb25DdXJyZW50OiBmdW5jdGlvbiAobnVtYmVyKSB7IHJldHVybiBudW1iZXI7IH0sXG4gICAgICAgIGZvcm1hdEZyYWN0aW9uVG90YWw6IGZ1bmN0aW9uIChudW1iZXIpIHsgcmV0dXJuIG51bWJlcjsgfSxcbiAgICAgICAgYnVsbGV0Q2xhc3M6ICdzd2lwZXItcGFnaW5hdGlvbi1idWxsZXQnLFxuICAgICAgICBidWxsZXRBY3RpdmVDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLWJ1bGxldC1hY3RpdmUnLFxuICAgICAgICBtb2RpZmllckNsYXNzOiAnc3dpcGVyLXBhZ2luYXRpb24tJywgLy8gTkVXXG4gICAgICAgIGN1cnJlbnRDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLWN1cnJlbnQnLFxuICAgICAgICB0b3RhbENsYXNzOiAnc3dpcGVyLXBhZ2luYXRpb24tdG90YWwnLFxuICAgICAgICBoaWRkZW5DbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLWhpZGRlbicsXG4gICAgICAgIHByb2dyZXNzYmFyRmlsbENsYXNzOiAnc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXItZmlsbCcsXG4gICAgICAgIHByb2dyZXNzYmFyT3Bwb3NpdGVDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyLW9wcG9zaXRlJyxcbiAgICAgICAgY2xpY2thYmxlQ2xhc3M6ICdzd2lwZXItcGFnaW5hdGlvbi1jbGlja2FibGUnLCAvLyBORVdcbiAgICAgICAgbG9ja0NsYXNzOiAnc3dpcGVyLXBhZ2luYXRpb24tbG9jaycsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgIGluaXQ6IFBhZ2luYXRpb24uaW5pdC5iaW5kKHN3aXBlciksXG4gICAgICAgICAgcmVuZGVyOiBQYWdpbmF0aW9uLnJlbmRlci5iaW5kKHN3aXBlciksXG4gICAgICAgICAgdXBkYXRlOiBQYWdpbmF0aW9uLnVwZGF0ZS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgZGVzdHJveTogUGFnaW5hdGlvbi5kZXN0cm95LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBkeW5hbWljQnVsbGV0SW5kZXg6IDAsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uaW5pdCgpO1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5yZW5kZXIoKTtcbiAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24udXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgYWN0aXZlSW5kZXhDaGFuZ2U6IGZ1bmN0aW9uIGFjdGl2ZUluZGV4Q2hhbmdlKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnVwZGF0ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzd2lwZXIuc25hcEluZGV4ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc25hcEluZGV4Q2hhbmdlOiBmdW5jdGlvbiBzbmFwSW5kZXhDaGFuZ2UoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2xpZGVzTGVuZ3RoQ2hhbmdlOiBmdW5jdGlvbiBzbGlkZXNMZW5ndGhDaGFuZ2UoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24ucmVuZGVyKCk7XG4gICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24udXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzbmFwR3JpZExlbmd0aENoYW5nZTogZnVuY3Rpb24gc25hcEdyaWRMZW5ndGhDaGFuZ2UoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnJlbmRlcigpO1xuICAgICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLmRlc3Ryb3koKTtcbiAgICAgIH0sXG4gICAgICBjbGljazogZnVuY3Rpb24gY2xpY2soZSkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5lbFxuICAgICAgICAgICYmIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5oaWRlT25DbGlja1xuICAgICAgICAgICYmIHN3aXBlci5wYWdpbmF0aW9uLiRlbC5sZW5ndGggPiAwXG4gICAgICAgICAgJiYgISQoZS50YXJnZXQpLmhhc0NsYXNzKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5idWxsZXRDbGFzcylcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIGlzSGlkZGVuID0gc3dpcGVyLnBhZ2luYXRpb24uJGVsLmhhc0NsYXNzKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5oaWRkZW5DbGFzcyk7XG4gICAgICAgICAgaWYgKGlzSGlkZGVuID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzd2lwZXIuZW1pdCgncGFnaW5hdGlvblNob3cnLCBzd2lwZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzd2lwZXIuZW1pdCgncGFnaW5hdGlvbkhpZGUnLCBzd2lwZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi4kZWwudG9nZ2xlQ2xhc3Moc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmhpZGRlbkNsYXNzKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHZhciBTY3JvbGxiYXIgPSB7XG4gICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZWwgfHwgIXN3aXBlci5zY3JvbGxiYXIuZWwpIHsgcmV0dXJuOyB9XG4gICAgICB2YXIgc2Nyb2xsYmFyID0gc3dpcGVyLnNjcm9sbGJhcjtcbiAgICAgIHZhciBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlO1xuICAgICAgdmFyIHByb2dyZXNzID0gc3dpcGVyLnByb2dyZXNzO1xuICAgICAgdmFyIGRyYWdTaXplID0gc2Nyb2xsYmFyLmRyYWdTaXplO1xuICAgICAgdmFyIHRyYWNrU2l6ZSA9IHNjcm9sbGJhci50cmFja1NpemU7XG4gICAgICB2YXIgJGRyYWdFbCA9IHNjcm9sbGJhci4kZHJhZ0VsO1xuICAgICAgdmFyICRlbCA9IHNjcm9sbGJhci4kZWw7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXI7XG5cbiAgICAgIHZhciBuZXdTaXplID0gZHJhZ1NpemU7XG4gICAgICB2YXIgbmV3UG9zID0gKHRyYWNrU2l6ZSAtIGRyYWdTaXplKSAqIHByb2dyZXNzO1xuICAgICAgaWYgKHJ0bCkge1xuICAgICAgICBuZXdQb3MgPSAtbmV3UG9zO1xuICAgICAgICBpZiAobmV3UG9zID4gMCkge1xuICAgICAgICAgIG5ld1NpemUgPSBkcmFnU2l6ZSAtIG5ld1BvcztcbiAgICAgICAgICBuZXdQb3MgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKC1uZXdQb3MgKyBkcmFnU2l6ZSA+IHRyYWNrU2l6ZSkge1xuICAgICAgICAgIG5ld1NpemUgPSB0cmFja1NpemUgKyBuZXdQb3M7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobmV3UG9zIDwgMCkge1xuICAgICAgICBuZXdTaXplID0gZHJhZ1NpemUgKyBuZXdQb3M7XG4gICAgICAgIG5ld1BvcyA9IDA7XG4gICAgICB9IGVsc2UgaWYgKG5ld1BvcyArIGRyYWdTaXplID4gdHJhY2tTaXplKSB7XG4gICAgICAgIG5ld1NpemUgPSB0cmFja1NpemUgLSBuZXdQb3M7XG4gICAgICB9XG4gICAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICRkcmFnRWwudHJhbnNmb3JtKChcInRyYW5zbGF0ZTNkKFwiICsgbmV3UG9zICsgXCJweCwgMCwgMClcIikpO1xuICAgICAgICAkZHJhZ0VsWzBdLnN0eWxlLndpZHRoID0gbmV3U2l6ZSArIFwicHhcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRkcmFnRWwudHJhbnNmb3JtKChcInRyYW5zbGF0ZTNkKDBweCwgXCIgKyBuZXdQb3MgKyBcInB4LCAwKVwiKSk7XG4gICAgICAgICRkcmFnRWxbMF0uc3R5bGUuaGVpZ2h0ID0gbmV3U2l6ZSArIFwicHhcIjtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbXMuaGlkZSkge1xuICAgICAgICBjbGVhclRpbWVvdXQoc3dpcGVyLnNjcm9sbGJhci50aW1lb3V0KTtcbiAgICAgICAgJGVsWzBdLnN0eWxlLm9wYWNpdHkgPSAxO1xuICAgICAgICBzd2lwZXIuc2Nyb2xsYmFyLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAkZWxbMF0uc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgICAgICAgJGVsLnRyYW5zaXRpb24oNDAwKTtcbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZWwgfHwgIXN3aXBlci5zY3JvbGxiYXIuZWwpIHsgcmV0dXJuOyB9XG4gICAgICBzd2lwZXIuc2Nyb2xsYmFyLiRkcmFnRWwudHJhbnNpdGlvbihkdXJhdGlvbik7XG4gICAgfSxcbiAgICB1cGRhdGVTaXplOiBmdW5jdGlvbiB1cGRhdGVTaXplKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmVsIHx8ICFzd2lwZXIuc2Nyb2xsYmFyLmVsKSB7IHJldHVybjsgfVxuXG4gICAgICB2YXIgc2Nyb2xsYmFyID0gc3dpcGVyLnNjcm9sbGJhcjtcbiAgICAgIHZhciAkZHJhZ0VsID0gc2Nyb2xsYmFyLiRkcmFnRWw7XG4gICAgICB2YXIgJGVsID0gc2Nyb2xsYmFyLiRlbDtcblxuICAgICAgJGRyYWdFbFswXS5zdHlsZS53aWR0aCA9ICcnO1xuICAgICAgJGRyYWdFbFswXS5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgIHZhciB0cmFja1NpemUgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAkZWxbMF0ub2Zmc2V0V2lkdGggOiAkZWxbMF0ub2Zmc2V0SGVpZ2h0O1xuXG4gICAgICB2YXIgZGl2aWRlciA9IHN3aXBlci5zaXplIC8gc3dpcGVyLnZpcnR1YWxTaXplO1xuICAgICAgdmFyIG1vdmVEaXZpZGVyID0gZGl2aWRlciAqICh0cmFja1NpemUgLyBzd2lwZXIuc2l6ZSk7XG4gICAgICB2YXIgZHJhZ1NpemU7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZHJhZ1NpemUgPT09ICdhdXRvJykge1xuICAgICAgICBkcmFnU2l6ZSA9IHRyYWNrU2l6ZSAqIGRpdmlkZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkcmFnU2l6ZSA9IHBhcnNlSW50KHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmRyYWdTaXplLCAxMCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgJGRyYWdFbFswXS5zdHlsZS53aWR0aCA9IGRyYWdTaXplICsgXCJweFwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJGRyYWdFbFswXS5zdHlsZS5oZWlnaHQgPSBkcmFnU2l6ZSArIFwicHhcIjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRpdmlkZXIgPj0gMSkge1xuICAgICAgICAkZWxbMF0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRlbFswXS5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICB9XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuaGlkZSkge1xuICAgICAgICAkZWxbMF0uc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgICB9XG4gICAgICBVdGlscy5leHRlbmQoc2Nyb2xsYmFyLCB7XG4gICAgICAgIHRyYWNrU2l6ZTogdHJhY2tTaXplLFxuICAgICAgICBkaXZpZGVyOiBkaXZpZGVyLFxuICAgICAgICBtb3ZlRGl2aWRlcjogbW92ZURpdmlkZXIsXG4gICAgICAgIGRyYWdTaXplOiBkcmFnU2l6ZSxcbiAgICAgIH0pO1xuICAgICAgc2Nyb2xsYmFyLiRlbFtzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc3dpcGVyLmlzTG9ja2VkID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmxvY2tDbGFzcyk7XG4gICAgfSxcbiAgICBnZXRQb2ludGVyUG9zaXRpb246IGZ1bmN0aW9uIGdldFBvaW50ZXJQb3NpdGlvbihlKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgcmV0dXJuICgoZS50eXBlID09PSAndG91Y2hzdGFydCcgfHwgZS50eXBlID09PSAndG91Y2htb3ZlJykgPyBlLnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WCA6IGUuY2xpZW50WCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKChlLnR5cGUgPT09ICd0b3VjaHN0YXJ0JyB8fCBlLnR5cGUgPT09ICd0b3VjaG1vdmUnKSA/IGUudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRZIDogZS5jbGllbnRZKTtcbiAgICB9LFxuICAgIHNldERyYWdQb3NpdGlvbjogZnVuY3Rpb24gc2V0RHJhZ1Bvc2l0aW9uKGUpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHNjcm9sbGJhciA9IHN3aXBlci5zY3JvbGxiYXI7XG4gICAgICB2YXIgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZTtcbiAgICAgIHZhciAkZWwgPSBzY3JvbGxiYXIuJGVsO1xuICAgICAgdmFyIGRyYWdTaXplID0gc2Nyb2xsYmFyLmRyYWdTaXplO1xuICAgICAgdmFyIHRyYWNrU2l6ZSA9IHNjcm9sbGJhci50cmFja1NpemU7XG4gICAgICB2YXIgZHJhZ1N0YXJ0UG9zID0gc2Nyb2xsYmFyLmRyYWdTdGFydFBvcztcblxuICAgICAgdmFyIHBvc2l0aW9uUmF0aW87XG4gICAgICBwb3NpdGlvblJhdGlvID0gKChzY3JvbGxiYXIuZ2V0UG9pbnRlclBvc2l0aW9uKGUpKSAtICRlbC5vZmZzZXQoKVtzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnbGVmdCcgOiAndG9wJ11cbiAgICAgICAgLSAoZHJhZ1N0YXJ0UG9zICE9PSBudWxsID8gZHJhZ1N0YXJ0UG9zIDogZHJhZ1NpemUgLyAyKSkgLyAodHJhY2tTaXplIC0gZHJhZ1NpemUpO1xuICAgICAgcG9zaXRpb25SYXRpbyA9IE1hdGgubWF4KE1hdGgubWluKHBvc2l0aW9uUmF0aW8sIDEpLCAwKTtcbiAgICAgIGlmIChydGwpIHtcbiAgICAgICAgcG9zaXRpb25SYXRpbyA9IDEgLSBwb3NpdGlvblJhdGlvO1xuICAgICAgfVxuXG4gICAgICB2YXIgcG9zaXRpb24gPSBzd2lwZXIubWluVHJhbnNsYXRlKCkgKyAoKHN3aXBlci5tYXhUcmFuc2xhdGUoKSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKSkgKiBwb3NpdGlvblJhdGlvKTtcblxuICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKHBvc2l0aW9uKTtcbiAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUocG9zaXRpb24pO1xuICAgICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KCk7XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgIH0sXG4gICAgb25EcmFnU3RhcnQ6IGZ1bmN0aW9uIG9uRHJhZ1N0YXJ0KGUpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyO1xuICAgICAgdmFyIHNjcm9sbGJhciA9IHN3aXBlci5zY3JvbGxiYXI7XG4gICAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgICAgdmFyICRlbCA9IHNjcm9sbGJhci4kZWw7XG4gICAgICB2YXIgJGRyYWdFbCA9IHNjcm9sbGJhci4kZHJhZ0VsO1xuICAgICAgc3dpcGVyLnNjcm9sbGJhci5pc1RvdWNoZWQgPSB0cnVlO1xuICAgICAgc3dpcGVyLnNjcm9sbGJhci5kcmFnU3RhcnRQb3MgPSAoZS50YXJnZXQgPT09ICRkcmFnRWxbMF0gfHwgZS50YXJnZXQgPT09ICRkcmFnRWwpXG4gICAgICAgID8gc2Nyb2xsYmFyLmdldFBvaW50ZXJQb3NpdGlvbihlKSAtIGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3N3aXBlci5pc0hvcml6b250YWwoKSA/ICdsZWZ0JyA6ICd0b3AnXSA6IG51bGw7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAkd3JhcHBlckVsLnRyYW5zaXRpb24oMTAwKTtcbiAgICAgICRkcmFnRWwudHJhbnNpdGlvbigxMDApO1xuICAgICAgc2Nyb2xsYmFyLnNldERyYWdQb3NpdGlvbihlKTtcblxuICAgICAgY2xlYXJUaW1lb3V0KHN3aXBlci5zY3JvbGxiYXIuZHJhZ1RpbWVvdXQpO1xuXG4gICAgICAkZWwudHJhbnNpdGlvbigwKTtcbiAgICAgIGlmIChwYXJhbXMuaGlkZSkge1xuICAgICAgICAkZWwuY3NzKCdvcGFjaXR5JywgMSk7XG4gICAgICB9XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLmNzcygnc2Nyb2xsLXNuYXAtdHlwZScsICdub25lJyk7XG4gICAgICB9XG4gICAgICBzd2lwZXIuZW1pdCgnc2Nyb2xsYmFyRHJhZ1N0YXJ0JywgZSk7XG4gICAgfSxcbiAgICBvbkRyYWdNb3ZlOiBmdW5jdGlvbiBvbkRyYWdNb3ZlKGUpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHNjcm9sbGJhciA9IHN3aXBlci5zY3JvbGxiYXI7XG4gICAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgICAgdmFyICRlbCA9IHNjcm9sbGJhci4kZWw7XG4gICAgICB2YXIgJGRyYWdFbCA9IHNjcm9sbGJhci4kZHJhZ0VsO1xuXG4gICAgICBpZiAoIXN3aXBlci5zY3JvbGxiYXIuaXNUb3VjaGVkKSB7IHJldHVybjsgfVxuICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyB9XG4gICAgICBlbHNlIHsgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOyB9XG4gICAgICBzY3JvbGxiYXIuc2V0RHJhZ1Bvc2l0aW9uKGUpO1xuICAgICAgJHdyYXBwZXJFbC50cmFuc2l0aW9uKDApO1xuICAgICAgJGVsLnRyYW5zaXRpb24oMCk7XG4gICAgICAkZHJhZ0VsLnRyYW5zaXRpb24oMCk7XG4gICAgICBzd2lwZXIuZW1pdCgnc2Nyb2xsYmFyRHJhZ01vdmUnLCBlKTtcbiAgICB9LFxuICAgIG9uRHJhZ0VuZDogZnVuY3Rpb24gb25EcmFnRW5kKGUpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuXG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXI7XG4gICAgICB2YXIgc2Nyb2xsYmFyID0gc3dpcGVyLnNjcm9sbGJhcjtcbiAgICAgIHZhciAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7XG4gICAgICB2YXIgJGVsID0gc2Nyb2xsYmFyLiRlbDtcblxuICAgICAgaWYgKCFzd2lwZXIuc2Nyb2xsYmFyLmlzVG91Y2hlZCkgeyByZXR1cm47IH1cbiAgICAgIHN3aXBlci5zY3JvbGxiYXIuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLmNzcygnc2Nyb2xsLXNuYXAtdHlwZScsICcnKTtcbiAgICAgICAgJHdyYXBwZXJFbC50cmFuc2l0aW9uKCcnKTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbXMuaGlkZSkge1xuICAgICAgICBjbGVhclRpbWVvdXQoc3dpcGVyLnNjcm9sbGJhci5kcmFnVGltZW91dCk7XG4gICAgICAgIHN3aXBlci5zY3JvbGxiYXIuZHJhZ1RpbWVvdXQgPSBVdGlscy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgJGVsLmNzcygnb3BhY2l0eScsIDApO1xuICAgICAgICAgICRlbC50cmFuc2l0aW9uKDQwMCk7XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgfVxuICAgICAgc3dpcGVyLmVtaXQoJ3Njcm9sbGJhckRyYWdFbmQnLCBlKTtcbiAgICAgIGlmIChwYXJhbXMuc25hcE9uUmVsZWFzZSkge1xuICAgICAgICBzd2lwZXIuc2xpZGVUb0Nsb3Nlc3QoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGVuYWJsZURyYWdnYWJsZTogZnVuY3Rpb24gZW5hYmxlRHJhZ2dhYmxlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmVsKSB7IHJldHVybjsgfVxuICAgICAgdmFyIHNjcm9sbGJhciA9IHN3aXBlci5zY3JvbGxiYXI7XG4gICAgICB2YXIgdG91Y2hFdmVudHNUb3VjaCA9IHN3aXBlci50b3VjaEV2ZW50c1RvdWNoO1xuICAgICAgdmFyIHRvdWNoRXZlbnRzRGVza3RvcCA9IHN3aXBlci50b3VjaEV2ZW50c0Rlc2t0b3A7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICAgIHZhciAkZWwgPSBzY3JvbGxiYXIuJGVsO1xuICAgICAgdmFyIHRhcmdldCA9ICRlbFswXTtcbiAgICAgIHZhciBhY3RpdmVMaXN0ZW5lciA9IFN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHBhcmFtcy5wYXNzaXZlTGlzdGVuZXJzID8geyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogZmFsc2UgfSA6IGZhbHNlO1xuICAgICAgdmFyIHBhc3NpdmVMaXN0ZW5lciA9IFN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHBhcmFtcy5wYXNzaXZlTGlzdGVuZXJzID8geyBwYXNzaXZlOiB0cnVlLCBjYXB0dXJlOiBmYWxzZSB9IDogZmFsc2U7XG4gICAgICBpZiAoIVN1cHBvcnQudG91Y2gpIHtcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNEZXNrdG9wLnN0YXJ0LCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ1N0YXJ0LCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzRGVza3RvcC5tb3ZlLCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ01vdmUsIGFjdGl2ZUxpc3RlbmVyKTtcbiAgICAgICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNEZXNrdG9wLmVuZCwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c1RvdWNoLnN0YXJ0LCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ1N0YXJ0LCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzVG91Y2gubW92ZSwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdNb3ZlLCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzVG91Y2guZW5kLCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ0VuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRpc2FibGVEcmFnZ2FibGU6IGZ1bmN0aW9uIGRpc2FibGVEcmFnZ2FibGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZWwpIHsgcmV0dXJuOyB9XG4gICAgICB2YXIgc2Nyb2xsYmFyID0gc3dpcGVyLnNjcm9sbGJhcjtcbiAgICAgIHZhciB0b3VjaEV2ZW50c1RvdWNoID0gc3dpcGVyLnRvdWNoRXZlbnRzVG91Y2g7XG4gICAgICB2YXIgdG91Y2hFdmVudHNEZXNrdG9wID0gc3dpcGVyLnRvdWNoRXZlbnRzRGVza3RvcDtcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgICAgdmFyICRlbCA9IHNjcm9sbGJhci4kZWw7XG4gICAgICB2YXIgdGFyZ2V0ID0gJGVsWzBdO1xuICAgICAgdmFyIGFjdGl2ZUxpc3RlbmVyID0gU3VwcG9ydC5wYXNzaXZlTGlzdGVuZXIgJiYgcGFyYW1zLnBhc3NpdmVMaXN0ZW5lcnMgPyB7IHBhc3NpdmU6IGZhbHNlLCBjYXB0dXJlOiBmYWxzZSB9IDogZmFsc2U7XG4gICAgICB2YXIgcGFzc2l2ZUxpc3RlbmVyID0gU3VwcG9ydC5wYXNzaXZlTGlzdGVuZXIgJiYgcGFyYW1zLnBhc3NpdmVMaXN0ZW5lcnMgPyB7IHBhc3NpdmU6IHRydWUsIGNhcHR1cmU6IGZhbHNlIH0gOiBmYWxzZTtcbiAgICAgIGlmICghU3VwcG9ydC50b3VjaCkge1xuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c0Rlc2t0b3Auc3RhcnQsIHN3aXBlci5zY3JvbGxiYXIub25EcmFnU3RhcnQsIGFjdGl2ZUxpc3RlbmVyKTtcbiAgICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNEZXNrdG9wLm1vdmUsIHN3aXBlci5zY3JvbGxiYXIub25EcmFnTW92ZSwgYWN0aXZlTGlzdGVuZXIpO1xuICAgICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c0Rlc2t0b3AuZW5kLCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ0VuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzVG91Y2guc3RhcnQsIHN3aXBlci5zY3JvbGxiYXIub25EcmFnU3RhcnQsIGFjdGl2ZUxpc3RlbmVyKTtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNUb3VjaC5tb3ZlLCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ01vdmUsIGFjdGl2ZUxpc3RlbmVyKTtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNUb3VjaC5lbmQsIHN3aXBlci5zY3JvbGxiYXIub25EcmFnRW5kLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5lbCkgeyByZXR1cm47IH1cbiAgICAgIHZhciBzY3JvbGxiYXIgPSBzd2lwZXIuc2Nyb2xsYmFyO1xuICAgICAgdmFyICRzd2lwZXJFbCA9IHN3aXBlci4kZWw7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXI7XG5cbiAgICAgIHZhciAkZWwgPSAkKHBhcmFtcy5lbCk7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy51bmlxdWVOYXZFbGVtZW50cyAmJiB0eXBlb2YgcGFyYW1zLmVsID09PSAnc3RyaW5nJyAmJiAkZWwubGVuZ3RoID4gMSAmJiAkc3dpcGVyRWwuZmluZChwYXJhbXMuZWwpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAkZWwgPSAkc3dpcGVyRWwuZmluZChwYXJhbXMuZWwpO1xuICAgICAgfVxuXG4gICAgICB2YXIgJGRyYWdFbCA9ICRlbC5maW5kKChcIi5cIiArIChzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5kcmFnQ2xhc3MpKSk7XG4gICAgICBpZiAoJGRyYWdFbC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgJGRyYWdFbCA9ICQoKFwiPGRpdiBjbGFzcz1cXFwiXCIgKyAoc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZHJhZ0NsYXNzKSArIFwiXFxcIj48L2Rpdj5cIikpO1xuICAgICAgICAkZWwuYXBwZW5kKCRkcmFnRWwpO1xuICAgICAgfVxuXG4gICAgICBVdGlscy5leHRlbmQoc2Nyb2xsYmFyLCB7XG4gICAgICAgICRlbDogJGVsLFxuICAgICAgICBlbDogJGVsWzBdLFxuICAgICAgICAkZHJhZ0VsOiAkZHJhZ0VsLFxuICAgICAgICBkcmFnRWw6ICRkcmFnRWxbMF0sXG4gICAgICB9KTtcblxuICAgICAgaWYgKHBhcmFtcy5kcmFnZ2FibGUpIHtcbiAgICAgICAgc2Nyb2xsYmFyLmVuYWJsZURyYWdnYWJsZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgc3dpcGVyLnNjcm9sbGJhci5kaXNhYmxlRHJhZ2dhYmxlKCk7XG4gICAgfSxcbiAgfTtcblxuICB2YXIgU2Nyb2xsYmFyJDEgPSB7XG4gICAgbmFtZTogJ3Njcm9sbGJhcicsXG4gICAgcGFyYW1zOiB7XG4gICAgICBzY3JvbGxiYXI6IHtcbiAgICAgICAgZWw6IG51bGwsXG4gICAgICAgIGRyYWdTaXplOiAnYXV0bycsXG4gICAgICAgIGhpZGU6IGZhbHNlLFxuICAgICAgICBkcmFnZ2FibGU6IGZhbHNlLFxuICAgICAgICBzbmFwT25SZWxlYXNlOiB0cnVlLFxuICAgICAgICBsb2NrQ2xhc3M6ICdzd2lwZXItc2Nyb2xsYmFyLWxvY2snLFxuICAgICAgICBkcmFnQ2xhc3M6ICdzd2lwZXItc2Nyb2xsYmFyLWRyYWcnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICAgIHNjcm9sbGJhcjoge1xuICAgICAgICAgIGluaXQ6IFNjcm9sbGJhci5pbml0LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBkZXN0cm95OiBTY3JvbGxiYXIuZGVzdHJveS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgdXBkYXRlU2l6ZTogU2Nyb2xsYmFyLnVwZGF0ZVNpemUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIHNldFRyYW5zbGF0ZTogU2Nyb2xsYmFyLnNldFRyYW5zbGF0ZS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgc2V0VHJhbnNpdGlvbjogU2Nyb2xsYmFyLnNldFRyYW5zaXRpb24uYmluZChzd2lwZXIpLFxuICAgICAgICAgIGVuYWJsZURyYWdnYWJsZTogU2Nyb2xsYmFyLmVuYWJsZURyYWdnYWJsZS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgZGlzYWJsZURyYWdnYWJsZTogU2Nyb2xsYmFyLmRpc2FibGVEcmFnZ2FibGUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIHNldERyYWdQb3NpdGlvbjogU2Nyb2xsYmFyLnNldERyYWdQb3NpdGlvbi5iaW5kKHN3aXBlciksXG4gICAgICAgICAgZ2V0UG9pbnRlclBvc2l0aW9uOiBTY3JvbGxiYXIuZ2V0UG9pbnRlclBvc2l0aW9uLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBvbkRyYWdTdGFydDogU2Nyb2xsYmFyLm9uRHJhZ1N0YXJ0LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBvbkRyYWdNb3ZlOiBTY3JvbGxiYXIub25EcmFnTW92ZS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgb25EcmFnRW5kOiBTY3JvbGxiYXIub25EcmFnRW5kLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBpc1RvdWNoZWQ6IGZhbHNlLFxuICAgICAgICAgIHRpbWVvdXQ6IG51bGwsXG4gICAgICAgICAgZHJhZ1RpbWVvdXQ6IG51bGwsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgc3dpcGVyLnNjcm9sbGJhci5pbml0KCk7XG4gICAgICAgIHN3aXBlci5zY3JvbGxiYXIudXBkYXRlU2l6ZSgpO1xuICAgICAgICBzd2lwZXIuc2Nyb2xsYmFyLnNldFRyYW5zbGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgc3dpcGVyLnNjcm9sbGJhci51cGRhdGVTaXplKCk7XG4gICAgICB9LFxuICAgICAgcmVzaXplOiBmdW5jdGlvbiByZXNpemUoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBzd2lwZXIuc2Nyb2xsYmFyLnVwZGF0ZVNpemUoKTtcbiAgICAgIH0sXG4gICAgICBvYnNlcnZlclVwZGF0ZTogZnVuY3Rpb24gb2JzZXJ2ZXJVcGRhdGUoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBzd2lwZXIuc2Nyb2xsYmFyLnVwZGF0ZVNpemUoKTtcbiAgICAgIH0sXG4gICAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIHN3aXBlci5zY3JvbGxiYXIuc2V0VHJhbnNsYXRlKCk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgc3dpcGVyLnNjcm9sbGJhci5zZXRUcmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgc3dpcGVyLnNjcm9sbGJhci5kZXN0cm95KCk7XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgdmFyIFBhcmFsbGF4ID0ge1xuICAgIHNldFRyYW5zZm9ybTogZnVuY3Rpb24gc2V0VHJhbnNmb3JtKGVsLCBwcm9ncmVzcykge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcnRsID0gc3dpcGVyLnJ0bDtcblxuICAgICAgdmFyICRlbCA9ICQoZWwpO1xuICAgICAgdmFyIHJ0bEZhY3RvciA9IHJ0bCA/IC0xIDogMTtcblxuICAgICAgdmFyIHAgPSAkZWwuYXR0cignZGF0YS1zd2lwZXItcGFyYWxsYXgnKSB8fCAnMCc7XG4gICAgICB2YXIgeCA9ICRlbC5hdHRyKCdkYXRhLXN3aXBlci1wYXJhbGxheC14Jyk7XG4gICAgICB2YXIgeSA9ICRlbC5hdHRyKCdkYXRhLXN3aXBlci1wYXJhbGxheC15Jyk7XG4gICAgICB2YXIgc2NhbGUgPSAkZWwuYXR0cignZGF0YS1zd2lwZXItcGFyYWxsYXgtc2NhbGUnKTtcbiAgICAgIHZhciBvcGFjaXR5ID0gJGVsLmF0dHIoJ2RhdGEtc3dpcGVyLXBhcmFsbGF4LW9wYWNpdHknKTtcblxuICAgICAgaWYgKHggfHwgeSkge1xuICAgICAgICB4ID0geCB8fCAnMCc7XG4gICAgICAgIHkgPSB5IHx8ICcwJztcbiAgICAgIH0gZWxzZSBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgIHggPSBwO1xuICAgICAgICB5ID0gJzAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgeSA9IHA7XG4gICAgICAgIHggPSAnMCc7XG4gICAgICB9XG5cbiAgICAgIGlmICgoeCkuaW5kZXhPZignJScpID49IDApIHtcbiAgICAgICAgeCA9IChwYXJzZUludCh4LCAxMCkgKiBwcm9ncmVzcyAqIHJ0bEZhY3RvcikgKyBcIiVcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHggPSAoeCAqIHByb2dyZXNzICogcnRsRmFjdG9yKSArIFwicHhcIjtcbiAgICAgIH1cbiAgICAgIGlmICgoeSkuaW5kZXhPZignJScpID49IDApIHtcbiAgICAgICAgeSA9IChwYXJzZUludCh5LCAxMCkgKiBwcm9ncmVzcykgKyBcIiVcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHkgPSAoeSAqIHByb2dyZXNzKSArIFwicHhcIjtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcGFjaXR5ICE9PSAndW5kZWZpbmVkJyAmJiBvcGFjaXR5ICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBjdXJyZW50T3BhY2l0eSA9IG9wYWNpdHkgLSAoKG9wYWNpdHkgLSAxKSAqICgxIC0gTWF0aC5hYnMocHJvZ3Jlc3MpKSk7XG4gICAgICAgICRlbFswXS5zdHlsZS5vcGFjaXR5ID0gY3VycmVudE9wYWNpdHk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHNjYWxlID09PSAndW5kZWZpbmVkJyB8fCBzY2FsZSA9PT0gbnVsbCkge1xuICAgICAgICAkZWwudHJhbnNmb3JtKChcInRyYW5zbGF0ZTNkKFwiICsgeCArIFwiLCBcIiArIHkgKyBcIiwgMHB4KVwiKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgY3VycmVudFNjYWxlID0gc2NhbGUgLSAoKHNjYWxlIC0gMSkgKiAoMSAtIE1hdGguYWJzKHByb2dyZXNzKSkpO1xuICAgICAgICAkZWwudHJhbnNmb3JtKChcInRyYW5zbGF0ZTNkKFwiICsgeCArIFwiLCBcIiArIHkgKyBcIiwgMHB4KSBzY2FsZShcIiArIGN1cnJlbnRTY2FsZSArIFwiKVwiKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyICRlbCA9IHN3aXBlci4kZWw7XG4gICAgICB2YXIgc2xpZGVzID0gc3dpcGVyLnNsaWRlcztcbiAgICAgIHZhciBwcm9ncmVzcyA9IHN3aXBlci5wcm9ncmVzcztcbiAgICAgIHZhciBzbmFwR3JpZCA9IHN3aXBlci5zbmFwR3JpZDtcbiAgICAgICRlbC5jaGlsZHJlbignW2RhdGEtc3dpcGVyLXBhcmFsbGF4XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXhdLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgteV0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC1vcGFjaXR5XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXNjYWxlXScpXG4gICAgICAgIC5lYWNoKGZ1bmN0aW9uIChpbmRleCwgZWwpIHtcbiAgICAgICAgICBzd2lwZXIucGFyYWxsYXguc2V0VHJhbnNmb3JtKGVsLCBwcm9ncmVzcyk7XG4gICAgICAgIH0pO1xuICAgICAgc2xpZGVzLmVhY2goZnVuY3Rpb24gKHNsaWRlSW5kZXgsIHNsaWRlRWwpIHtcbiAgICAgICAgdmFyIHNsaWRlUHJvZ3Jlc3MgPSBzbGlkZUVsLnByb2dyZXNzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCA+IDEgJiYgc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3ICE9PSAnYXV0bycpIHtcbiAgICAgICAgICBzbGlkZVByb2dyZXNzICs9IE1hdGguY2VpbChzbGlkZUluZGV4IC8gMikgLSAocHJvZ3Jlc3MgKiAoc25hcEdyaWQubGVuZ3RoIC0gMSkpO1xuICAgICAgICB9XG4gICAgICAgIHNsaWRlUHJvZ3Jlc3MgPSBNYXRoLm1pbihNYXRoLm1heChzbGlkZVByb2dyZXNzLCAtMSksIDEpO1xuICAgICAgICAkKHNsaWRlRWwpLmZpbmQoJ1tkYXRhLXN3aXBlci1wYXJhbGxheF0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC14XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXldLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgtb3BhY2l0eV0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC1zY2FsZV0nKVxuICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uIChpbmRleCwgZWwpIHtcbiAgICAgICAgICAgIHN3aXBlci5wYXJhbGxheC5zZXRUcmFuc2Zvcm0oZWwsIHNsaWRlUHJvZ3Jlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgICBpZiAoIGR1cmF0aW9uID09PSB2b2lkIDAgKSBkdXJhdGlvbiA9IHRoaXMucGFyYW1zLnNwZWVkO1xuXG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciAkZWwgPSBzd2lwZXIuJGVsO1xuICAgICAgJGVsLmZpbmQoJ1tkYXRhLXN3aXBlci1wYXJhbGxheF0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC14XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXldLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgtb3BhY2l0eV0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC1zY2FsZV0nKVxuICAgICAgICAuZWFjaChmdW5jdGlvbiAoaW5kZXgsIHBhcmFsbGF4RWwpIHtcbiAgICAgICAgICB2YXIgJHBhcmFsbGF4RWwgPSAkKHBhcmFsbGF4RWwpO1xuICAgICAgICAgIHZhciBwYXJhbGxheER1cmF0aW9uID0gcGFyc2VJbnQoJHBhcmFsbGF4RWwuYXR0cignZGF0YS1zd2lwZXItcGFyYWxsYXgtZHVyYXRpb24nKSwgMTApIHx8IGR1cmF0aW9uO1xuICAgICAgICAgIGlmIChkdXJhdGlvbiA9PT0gMCkgeyBwYXJhbGxheER1cmF0aW9uID0gMDsgfVxuICAgICAgICAgICRwYXJhbGxheEVsLnRyYW5zaXRpb24ocGFyYWxsYXhEdXJhdGlvbik7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gIH07XG5cbiAgdmFyIFBhcmFsbGF4JDEgPSB7XG4gICAgbmFtZTogJ3BhcmFsbGF4JyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIHBhcmFsbGF4OiB7XG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICAgIHBhcmFsbGF4OiB7XG4gICAgICAgICAgc2V0VHJhbnNmb3JtOiBQYXJhbGxheC5zZXRUcmFuc2Zvcm0uYmluZChzd2lwZXIpLFxuICAgICAgICAgIHNldFRyYW5zbGF0ZTogUGFyYWxsYXguc2V0VHJhbnNsYXRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzZXRUcmFuc2l0aW9uOiBQYXJhbGxheC5zZXRUcmFuc2l0aW9uLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGJlZm9yZUluaXQ6IGZ1bmN0aW9uIGJlZm9yZUluaXQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMucGFyYWxsYXguZW5hYmxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLnBhcmFtcy53YXRjaFNsaWRlc1Byb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgc3dpcGVyLm9yaWdpbmFsUGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgfSxcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMucGFyYWxsYXguZW5hYmxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLnBhcmFsbGF4LnNldFRyYW5zbGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnBhcmFsbGF4LmVuYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5wYXJhbGxheC5zZXRUcmFuc2xhdGUoKTtcbiAgICAgIH0sXG4gICAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMucGFyYWxsYXguZW5hYmxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLnBhcmFsbGF4LnNldFRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHZhciBab29tID0ge1xuICAgIC8vIENhbGMgU2NhbGUgRnJvbSBNdWx0aS10b3VjaGVzXG4gICAgZ2V0RGlzdGFuY2VCZXR3ZWVuVG91Y2hlczogZnVuY3Rpb24gZ2V0RGlzdGFuY2VCZXR3ZWVuVG91Y2hlcyhlKSB7XG4gICAgICBpZiAoZS50YXJnZXRUb3VjaGVzLmxlbmd0aCA8IDIpIHsgcmV0dXJuIDE7IH1cbiAgICAgIHZhciB4MSA9IGUudGFyZ2V0VG91Y2hlc1swXS5wYWdlWDtcbiAgICAgIHZhciB5MSA9IGUudGFyZ2V0VG91Y2hlc1swXS5wYWdlWTtcbiAgICAgIHZhciB4MiA9IGUudGFyZ2V0VG91Y2hlc1sxXS5wYWdlWDtcbiAgICAgIHZhciB5MiA9IGUudGFyZ2V0VG91Y2hlc1sxXS5wYWdlWTtcbiAgICAgIHZhciBkaXN0YW5jZSA9IE1hdGguc3FydCgoTWF0aC5wb3coICh4MiAtIHgxKSwgMiApKSArIChNYXRoLnBvdyggKHkyIC0geTEpLCAyICkpKTtcbiAgICAgIHJldHVybiBkaXN0YW5jZTtcbiAgICB9LFxuICAgIC8vIEV2ZW50c1xuICAgIG9uR2VzdHVyZVN0YXJ0OiBmdW5jdGlvbiBvbkdlc3R1cmVTdGFydChlKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnpvb207XG4gICAgICB2YXIgem9vbSA9IHN3aXBlci56b29tO1xuICAgICAgdmFyIGdlc3R1cmUgPSB6b29tLmdlc3R1cmU7XG4gICAgICB6b29tLmZha2VHZXN0dXJlVG91Y2hlZCA9IGZhbHNlO1xuICAgICAgem9vbS5mYWtlR2VzdHVyZU1vdmVkID0gZmFsc2U7XG4gICAgICBpZiAoIVN1cHBvcnQuZ2VzdHVyZXMpIHtcbiAgICAgICAgaWYgKGUudHlwZSAhPT0gJ3RvdWNoc3RhcnQnIHx8IChlLnR5cGUgPT09ICd0b3VjaHN0YXJ0JyAmJiBlLnRhcmdldFRvdWNoZXMubGVuZ3RoIDwgMikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgem9vbS5mYWtlR2VzdHVyZVRvdWNoZWQgPSB0cnVlO1xuICAgICAgICBnZXN0dXJlLnNjYWxlU3RhcnQgPSBab29tLmdldERpc3RhbmNlQmV0d2VlblRvdWNoZXMoZSk7XG4gICAgICB9XG4gICAgICBpZiAoIWdlc3R1cmUuJHNsaWRlRWwgfHwgIWdlc3R1cmUuJHNsaWRlRWwubGVuZ3RoKSB7XG4gICAgICAgIGdlc3R1cmUuJHNsaWRlRWwgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KCcuc3dpcGVyLXNsaWRlJyk7XG4gICAgICAgIGlmIChnZXN0dXJlLiRzbGlkZUVsLmxlbmd0aCA9PT0gMCkgeyBnZXN0dXJlLiRzbGlkZUVsID0gc3dpcGVyLnNsaWRlcy5lcShzd2lwZXIuYWN0aXZlSW5kZXgpOyB9XG4gICAgICAgIGdlc3R1cmUuJGltYWdlRWwgPSBnZXN0dXJlLiRzbGlkZUVsLmZpbmQoJ2ltZywgc3ZnLCBjYW52YXMnKTtcbiAgICAgICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwgPSBnZXN0dXJlLiRpbWFnZUVsLnBhcmVudCgoXCIuXCIgKyAocGFyYW1zLmNvbnRhaW5lckNsYXNzKSkpO1xuICAgICAgICBnZXN0dXJlLm1heFJhdGlvID0gZ2VzdHVyZS4kaW1hZ2VXcmFwRWwuYXR0cignZGF0YS1zd2lwZXItem9vbScpIHx8IHBhcmFtcy5tYXhSYXRpbztcbiAgICAgICAgaWYgKGdlc3R1cmUuJGltYWdlV3JhcEVsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGdlc3R1cmUuJGltYWdlRWwgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBnZXN0dXJlLiRpbWFnZUVsLnRyYW5zaXRpb24oMCk7XG4gICAgICBzd2lwZXIuem9vbS5pc1NjYWxpbmcgPSB0cnVlO1xuICAgIH0sXG4gICAgb25HZXN0dXJlQ2hhbmdlOiBmdW5jdGlvbiBvbkdlc3R1cmVDaGFuZ2UoZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy56b29tO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIHZhciBnZXN0dXJlID0gem9vbS5nZXN0dXJlO1xuICAgICAgaWYgKCFTdXBwb3J0Lmdlc3R1cmVzKSB7XG4gICAgICAgIGlmIChlLnR5cGUgIT09ICd0b3VjaG1vdmUnIHx8IChlLnR5cGUgPT09ICd0b3VjaG1vdmUnICYmIGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggPCAyKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB6b29tLmZha2VHZXN0dXJlTW92ZWQgPSB0cnVlO1xuICAgICAgICBnZXN0dXJlLnNjYWxlTW92ZSA9IFpvb20uZ2V0RGlzdGFuY2VCZXR3ZWVuVG91Y2hlcyhlKTtcbiAgICAgIH1cbiAgICAgIGlmICghZ2VzdHVyZS4kaW1hZ2VFbCB8fCBnZXN0dXJlLiRpbWFnZUVsLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cbiAgICAgIGlmIChTdXBwb3J0Lmdlc3R1cmVzKSB7XG4gICAgICAgIHpvb20uc2NhbGUgPSBlLnNjYWxlICogem9vbS5jdXJyZW50U2NhbGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB6b29tLnNjYWxlID0gKGdlc3R1cmUuc2NhbGVNb3ZlIC8gZ2VzdHVyZS5zY2FsZVN0YXJ0KSAqIHpvb20uY3VycmVudFNjYWxlO1xuICAgICAgfVxuICAgICAgaWYgKHpvb20uc2NhbGUgPiBnZXN0dXJlLm1heFJhdGlvKSB7XG4gICAgICAgIHpvb20uc2NhbGUgPSAoZ2VzdHVyZS5tYXhSYXRpbyAtIDEpICsgKE1hdGgucG93KCAoKHpvb20uc2NhbGUgLSBnZXN0dXJlLm1heFJhdGlvKSArIDEpLCAwLjUgKSk7XG4gICAgICB9XG4gICAgICBpZiAoem9vbS5zY2FsZSA8IHBhcmFtcy5taW5SYXRpbykge1xuICAgICAgICB6b29tLnNjYWxlID0gKHBhcmFtcy5taW5SYXRpbyArIDEpIC0gKE1hdGgucG93KCAoKHBhcmFtcy5taW5SYXRpbyAtIHpvb20uc2NhbGUpICsgMSksIDAuNSApKTtcbiAgICAgIH1cbiAgICAgIGdlc3R1cmUuJGltYWdlRWwudHJhbnNmb3JtKChcInRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZShcIiArICh6b29tLnNjYWxlKSArIFwiKVwiKSk7XG4gICAgfSxcbiAgICBvbkdlc3R1cmVFbmQ6IGZ1bmN0aW9uIG9uR2VzdHVyZUVuZChlKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnpvb207XG4gICAgICB2YXIgem9vbSA9IHN3aXBlci56b29tO1xuICAgICAgdmFyIGdlc3R1cmUgPSB6b29tLmdlc3R1cmU7XG4gICAgICBpZiAoIVN1cHBvcnQuZ2VzdHVyZXMpIHtcbiAgICAgICAgaWYgKCF6b29tLmZha2VHZXN0dXJlVG91Y2hlZCB8fCAhem9vbS5mYWtlR2VzdHVyZU1vdmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlLnR5cGUgIT09ICd0b3VjaGVuZCcgfHwgKGUudHlwZSA9PT0gJ3RvdWNoZW5kJyAmJiBlLmNoYW5nZWRUb3VjaGVzLmxlbmd0aCA8IDIgJiYgIURldmljZS5hbmRyb2lkKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB6b29tLmZha2VHZXN0dXJlVG91Y2hlZCA9IGZhbHNlO1xuICAgICAgICB6b29tLmZha2VHZXN0dXJlTW92ZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICghZ2VzdHVyZS4kaW1hZ2VFbCB8fCBnZXN0dXJlLiRpbWFnZUVsLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cbiAgICAgIHpvb20uc2NhbGUgPSBNYXRoLm1heChNYXRoLm1pbih6b29tLnNjYWxlLCBnZXN0dXJlLm1heFJhdGlvKSwgcGFyYW1zLm1pblJhdGlvKTtcbiAgICAgIGdlc3R1cmUuJGltYWdlRWwudHJhbnNpdGlvbihzd2lwZXIucGFyYW1zLnNwZWVkKS50cmFuc2Zvcm0oKFwidHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlKFwiICsgKHpvb20uc2NhbGUpICsgXCIpXCIpKTtcbiAgICAgIHpvb20uY3VycmVudFNjYWxlID0gem9vbS5zY2FsZTtcbiAgICAgIHpvb20uaXNTY2FsaW5nID0gZmFsc2U7XG4gICAgICBpZiAoem9vbS5zY2FsZSA9PT0gMSkgeyBnZXN0dXJlLiRzbGlkZUVsID0gdW5kZWZpbmVkOyB9XG4gICAgfSxcbiAgICBvblRvdWNoU3RhcnQ6IGZ1bmN0aW9uIG9uVG91Y2hTdGFydChlKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciB6b29tID0gc3dpcGVyLnpvb207XG4gICAgICB2YXIgZ2VzdHVyZSA9IHpvb20uZ2VzdHVyZTtcbiAgICAgIHZhciBpbWFnZSA9IHpvb20uaW1hZ2U7XG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG4gICAgICBpZiAoaW1hZ2UuaXNUb3VjaGVkKSB7IHJldHVybjsgfVxuICAgICAgaWYgKERldmljZS5hbmRyb2lkKSB7IGUucHJldmVudERlZmF1bHQoKTsgfVxuICAgICAgaW1hZ2UuaXNUb3VjaGVkID0gdHJ1ZTtcbiAgICAgIGltYWdlLnRvdWNoZXNTdGFydC54ID0gZS50eXBlID09PSAndG91Y2hzdGFydCcgPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVggOiBlLnBhZ2VYO1xuICAgICAgaW1hZ2UudG91Y2hlc1N0YXJ0LnkgPSBlLnR5cGUgPT09ICd0b3VjaHN0YXJ0JyA/IGUudGFyZ2V0VG91Y2hlc1swXS5wYWdlWSA6IGUucGFnZVk7XG4gICAgfSxcbiAgICBvblRvdWNoTW92ZTogZnVuY3Rpb24gb25Ub3VjaE1vdmUoZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgem9vbSA9IHN3aXBlci56b29tO1xuICAgICAgdmFyIGdlc3R1cmUgPSB6b29tLmdlc3R1cmU7XG4gICAgICB2YXIgaW1hZ2UgPSB6b29tLmltYWdlO1xuICAgICAgdmFyIHZlbG9jaXR5ID0gem9vbS52ZWxvY2l0eTtcbiAgICAgIGlmICghZ2VzdHVyZS4kaW1hZ2VFbCB8fCBnZXN0dXJlLiRpbWFnZUVsLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cbiAgICAgIHN3aXBlci5hbGxvd0NsaWNrID0gZmFsc2U7XG4gICAgICBpZiAoIWltYWdlLmlzVG91Y2hlZCB8fCAhZ2VzdHVyZS4kc2xpZGVFbCkgeyByZXR1cm47IH1cblxuICAgICAgaWYgKCFpbWFnZS5pc01vdmVkKSB7XG4gICAgICAgIGltYWdlLndpZHRoID0gZ2VzdHVyZS4kaW1hZ2VFbFswXS5vZmZzZXRXaWR0aDtcbiAgICAgICAgaW1hZ2UuaGVpZ2h0ID0gZ2VzdHVyZS4kaW1hZ2VFbFswXS5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGltYWdlLnN0YXJ0WCA9IFV0aWxzLmdldFRyYW5zbGF0ZShnZXN0dXJlLiRpbWFnZVdyYXBFbFswXSwgJ3gnKSB8fCAwO1xuICAgICAgICBpbWFnZS5zdGFydFkgPSBVdGlscy5nZXRUcmFuc2xhdGUoZ2VzdHVyZS4kaW1hZ2VXcmFwRWxbMF0sICd5JykgfHwgMDtcbiAgICAgICAgZ2VzdHVyZS5zbGlkZVdpZHRoID0gZ2VzdHVyZS4kc2xpZGVFbFswXS5vZmZzZXRXaWR0aDtcbiAgICAgICAgZ2VzdHVyZS5zbGlkZUhlaWdodCA9IGdlc3R1cmUuJHNsaWRlRWxbMF0ub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBnZXN0dXJlLiRpbWFnZVdyYXBFbC50cmFuc2l0aW9uKDApO1xuICAgICAgICBpZiAoc3dpcGVyLnJ0bCkge1xuICAgICAgICAgIGltYWdlLnN0YXJ0WCA9IC1pbWFnZS5zdGFydFg7XG4gICAgICAgICAgaW1hZ2Uuc3RhcnRZID0gLWltYWdlLnN0YXJ0WTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gRGVmaW5lIGlmIHdlIG5lZWQgaW1hZ2UgZHJhZ1xuICAgICAgdmFyIHNjYWxlZFdpZHRoID0gaW1hZ2Uud2lkdGggKiB6b29tLnNjYWxlO1xuICAgICAgdmFyIHNjYWxlZEhlaWdodCA9IGltYWdlLmhlaWdodCAqIHpvb20uc2NhbGU7XG5cbiAgICAgIGlmIChzY2FsZWRXaWR0aCA8IGdlc3R1cmUuc2xpZGVXaWR0aCAmJiBzY2FsZWRIZWlnaHQgPCBnZXN0dXJlLnNsaWRlSGVpZ2h0KSB7IHJldHVybjsgfVxuXG4gICAgICBpbWFnZS5taW5YID0gTWF0aC5taW4oKChnZXN0dXJlLnNsaWRlV2lkdGggLyAyKSAtIChzY2FsZWRXaWR0aCAvIDIpKSwgMCk7XG4gICAgICBpbWFnZS5tYXhYID0gLWltYWdlLm1pblg7XG4gICAgICBpbWFnZS5taW5ZID0gTWF0aC5taW4oKChnZXN0dXJlLnNsaWRlSGVpZ2h0IC8gMikgLSAoc2NhbGVkSGVpZ2h0IC8gMikpLCAwKTtcbiAgICAgIGltYWdlLm1heFkgPSAtaW1hZ2UubWluWTtcblxuICAgICAgaW1hZ2UudG91Y2hlc0N1cnJlbnQueCA9IGUudHlwZSA9PT0gJ3RvdWNobW92ZScgPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVggOiBlLnBhZ2VYO1xuICAgICAgaW1hZ2UudG91Y2hlc0N1cnJlbnQueSA9IGUudHlwZSA9PT0gJ3RvdWNobW92ZScgPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVkgOiBlLnBhZ2VZO1xuXG4gICAgICBpZiAoIWltYWdlLmlzTW92ZWQgJiYgIXpvb20uaXNTY2FsaW5nKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzd2lwZXIuaXNIb3Jpem9udGFsKClcbiAgICAgICAgICAmJiAoXG4gICAgICAgICAgICAoTWF0aC5mbG9vcihpbWFnZS5taW5YKSA9PT0gTWF0aC5mbG9vcihpbWFnZS5zdGFydFgpICYmIGltYWdlLnRvdWNoZXNDdXJyZW50LnggPCBpbWFnZS50b3VjaGVzU3RhcnQueClcbiAgICAgICAgICAgIHx8IChNYXRoLmZsb29yKGltYWdlLm1heFgpID09PSBNYXRoLmZsb29yKGltYWdlLnN0YXJ0WCkgJiYgaW1hZ2UudG91Y2hlc0N1cnJlbnQueCA+IGltYWdlLnRvdWNoZXNTdGFydC54KVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaW1hZ2UuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGlmIChcbiAgICAgICAgICAhc3dpcGVyLmlzSG9yaXpvbnRhbCgpXG4gICAgICAgICAgJiYgKFxuICAgICAgICAgICAgKE1hdGguZmxvb3IoaW1hZ2UubWluWSkgPT09IE1hdGguZmxvb3IoaW1hZ2Uuc3RhcnRZKSAmJiBpbWFnZS50b3VjaGVzQ3VycmVudC55IDwgaW1hZ2UudG91Y2hlc1N0YXJ0LnkpXG4gICAgICAgICAgICB8fCAoTWF0aC5mbG9vcihpbWFnZS5tYXhZKSA9PT0gTWF0aC5mbG9vcihpbWFnZS5zdGFydFkpICYmIGltYWdlLnRvdWNoZXNDdXJyZW50LnkgPiBpbWFnZS50b3VjaGVzU3RhcnQueSlcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGltYWdlLmlzVG91Y2hlZCA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgaW1hZ2UuaXNNb3ZlZCA9IHRydWU7XG4gICAgICBpbWFnZS5jdXJyZW50WCA9IChpbWFnZS50b3VjaGVzQ3VycmVudC54IC0gaW1hZ2UudG91Y2hlc1N0YXJ0LngpICsgaW1hZ2Uuc3RhcnRYO1xuICAgICAgaW1hZ2UuY3VycmVudFkgPSAoaW1hZ2UudG91Y2hlc0N1cnJlbnQueSAtIGltYWdlLnRvdWNoZXNTdGFydC55KSArIGltYWdlLnN0YXJ0WTtcblxuICAgICAgaWYgKGltYWdlLmN1cnJlbnRYIDwgaW1hZ2UubWluWCkge1xuICAgICAgICBpbWFnZS5jdXJyZW50WCA9IChpbWFnZS5taW5YICsgMSkgLSAoTWF0aC5wb3coICgoaW1hZ2UubWluWCAtIGltYWdlLmN1cnJlbnRYKSArIDEpLCAwLjggKSk7XG4gICAgICB9XG4gICAgICBpZiAoaW1hZ2UuY3VycmVudFggPiBpbWFnZS5tYXhYKSB7XG4gICAgICAgIGltYWdlLmN1cnJlbnRYID0gKGltYWdlLm1heFggLSAxKSArIChNYXRoLnBvdyggKChpbWFnZS5jdXJyZW50WCAtIGltYWdlLm1heFgpICsgMSksIDAuOCApKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGltYWdlLmN1cnJlbnRZIDwgaW1hZ2UubWluWSkge1xuICAgICAgICBpbWFnZS5jdXJyZW50WSA9IChpbWFnZS5taW5ZICsgMSkgLSAoTWF0aC5wb3coICgoaW1hZ2UubWluWSAtIGltYWdlLmN1cnJlbnRZKSArIDEpLCAwLjggKSk7XG4gICAgICB9XG4gICAgICBpZiAoaW1hZ2UuY3VycmVudFkgPiBpbWFnZS5tYXhZKSB7XG4gICAgICAgIGltYWdlLmN1cnJlbnRZID0gKGltYWdlLm1heFkgLSAxKSArIChNYXRoLnBvdyggKChpbWFnZS5jdXJyZW50WSAtIGltYWdlLm1heFkpICsgMSksIDAuOCApKTtcbiAgICAgIH1cblxuICAgICAgLy8gVmVsb2NpdHlcbiAgICAgIGlmICghdmVsb2NpdHkucHJldlBvc2l0aW9uWCkgeyB2ZWxvY2l0eS5wcmV2UG9zaXRpb25YID0gaW1hZ2UudG91Y2hlc0N1cnJlbnQueDsgfVxuICAgICAgaWYgKCF2ZWxvY2l0eS5wcmV2UG9zaXRpb25ZKSB7IHZlbG9jaXR5LnByZXZQb3NpdGlvblkgPSBpbWFnZS50b3VjaGVzQ3VycmVudC55OyB9XG4gICAgICBpZiAoIXZlbG9jaXR5LnByZXZUaW1lKSB7IHZlbG9jaXR5LnByZXZUaW1lID0gRGF0ZS5ub3coKTsgfVxuICAgICAgdmVsb2NpdHkueCA9IChpbWFnZS50b3VjaGVzQ3VycmVudC54IC0gdmVsb2NpdHkucHJldlBvc2l0aW9uWCkgLyAoRGF0ZS5ub3coKSAtIHZlbG9jaXR5LnByZXZUaW1lKSAvIDI7XG4gICAgICB2ZWxvY2l0eS55ID0gKGltYWdlLnRvdWNoZXNDdXJyZW50LnkgLSB2ZWxvY2l0eS5wcmV2UG9zaXRpb25ZKSAvIChEYXRlLm5vdygpIC0gdmVsb2NpdHkucHJldlRpbWUpIC8gMjtcbiAgICAgIGlmIChNYXRoLmFicyhpbWFnZS50b3VjaGVzQ3VycmVudC54IC0gdmVsb2NpdHkucHJldlBvc2l0aW9uWCkgPCAyKSB7IHZlbG9jaXR5LnggPSAwOyB9XG4gICAgICBpZiAoTWF0aC5hYnMoaW1hZ2UudG91Y2hlc0N1cnJlbnQueSAtIHZlbG9jaXR5LnByZXZQb3NpdGlvblkpIDwgMikgeyB2ZWxvY2l0eS55ID0gMDsgfVxuICAgICAgdmVsb2NpdHkucHJldlBvc2l0aW9uWCA9IGltYWdlLnRvdWNoZXNDdXJyZW50Lng7XG4gICAgICB2ZWxvY2l0eS5wcmV2UG9zaXRpb25ZID0gaW1hZ2UudG91Y2hlc0N1cnJlbnQueTtcbiAgICAgIHZlbG9jaXR5LnByZXZUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwudHJhbnNmb3JtKChcInRyYW5zbGF0ZTNkKFwiICsgKGltYWdlLmN1cnJlbnRYKSArIFwicHgsIFwiICsgKGltYWdlLmN1cnJlbnRZKSArIFwicHgsMClcIikpO1xuICAgIH0sXG4gICAgb25Ub3VjaEVuZDogZnVuY3Rpb24gb25Ub3VjaEVuZCgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIHZhciBnZXN0dXJlID0gem9vbS5nZXN0dXJlO1xuICAgICAgdmFyIGltYWdlID0gem9vbS5pbWFnZTtcbiAgICAgIHZhciB2ZWxvY2l0eSA9IHpvb20udmVsb2NpdHk7XG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG4gICAgICBpZiAoIWltYWdlLmlzVG91Y2hlZCB8fCAhaW1hZ2UuaXNNb3ZlZCkge1xuICAgICAgICBpbWFnZS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICAgICAgaW1hZ2UuaXNNb3ZlZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpbWFnZS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICAgIGltYWdlLmlzTW92ZWQgPSBmYWxzZTtcbiAgICAgIHZhciBtb21lbnR1bUR1cmF0aW9uWCA9IDMwMDtcbiAgICAgIHZhciBtb21lbnR1bUR1cmF0aW9uWSA9IDMwMDtcbiAgICAgIHZhciBtb21lbnR1bURpc3RhbmNlWCA9IHZlbG9jaXR5LnggKiBtb21lbnR1bUR1cmF0aW9uWDtcbiAgICAgIHZhciBuZXdQb3NpdGlvblggPSBpbWFnZS5jdXJyZW50WCArIG1vbWVudHVtRGlzdGFuY2VYO1xuICAgICAgdmFyIG1vbWVudHVtRGlzdGFuY2VZID0gdmVsb2NpdHkueSAqIG1vbWVudHVtRHVyYXRpb25ZO1xuICAgICAgdmFyIG5ld1Bvc2l0aW9uWSA9IGltYWdlLmN1cnJlbnRZICsgbW9tZW50dW1EaXN0YW5jZVk7XG5cbiAgICAgIC8vIEZpeCBkdXJhdGlvblxuICAgICAgaWYgKHZlbG9jaXR5LnggIT09IDApIHsgbW9tZW50dW1EdXJhdGlvblggPSBNYXRoLmFicygobmV3UG9zaXRpb25YIC0gaW1hZ2UuY3VycmVudFgpIC8gdmVsb2NpdHkueCk7IH1cbiAgICAgIGlmICh2ZWxvY2l0eS55ICE9PSAwKSB7IG1vbWVudHVtRHVyYXRpb25ZID0gTWF0aC5hYnMoKG5ld1Bvc2l0aW9uWSAtIGltYWdlLmN1cnJlbnRZKSAvIHZlbG9jaXR5LnkpOyB9XG4gICAgICB2YXIgbW9tZW50dW1EdXJhdGlvbiA9IE1hdGgubWF4KG1vbWVudHVtRHVyYXRpb25YLCBtb21lbnR1bUR1cmF0aW9uWSk7XG5cbiAgICAgIGltYWdlLmN1cnJlbnRYID0gbmV3UG9zaXRpb25YO1xuICAgICAgaW1hZ2UuY3VycmVudFkgPSBuZXdQb3NpdGlvblk7XG5cbiAgICAgIC8vIERlZmluZSBpZiB3ZSBuZWVkIGltYWdlIGRyYWdcbiAgICAgIHZhciBzY2FsZWRXaWR0aCA9IGltYWdlLndpZHRoICogem9vbS5zY2FsZTtcbiAgICAgIHZhciBzY2FsZWRIZWlnaHQgPSBpbWFnZS5oZWlnaHQgKiB6b29tLnNjYWxlO1xuICAgICAgaW1hZ2UubWluWCA9IE1hdGgubWluKCgoZ2VzdHVyZS5zbGlkZVdpZHRoIC8gMikgLSAoc2NhbGVkV2lkdGggLyAyKSksIDApO1xuICAgICAgaW1hZ2UubWF4WCA9IC1pbWFnZS5taW5YO1xuICAgICAgaW1hZ2UubWluWSA9IE1hdGgubWluKCgoZ2VzdHVyZS5zbGlkZUhlaWdodCAvIDIpIC0gKHNjYWxlZEhlaWdodCAvIDIpKSwgMCk7XG4gICAgICBpbWFnZS5tYXhZID0gLWltYWdlLm1pblk7XG4gICAgICBpbWFnZS5jdXJyZW50WCA9IE1hdGgubWF4KE1hdGgubWluKGltYWdlLmN1cnJlbnRYLCBpbWFnZS5tYXhYKSwgaW1hZ2UubWluWCk7XG4gICAgICBpbWFnZS5jdXJyZW50WSA9IE1hdGgubWF4KE1hdGgubWluKGltYWdlLmN1cnJlbnRZLCBpbWFnZS5tYXhZKSwgaW1hZ2UubWluWSk7XG5cbiAgICAgIGdlc3R1cmUuJGltYWdlV3JhcEVsLnRyYW5zaXRpb24obW9tZW50dW1EdXJhdGlvbikudHJhbnNmb3JtKChcInRyYW5zbGF0ZTNkKFwiICsgKGltYWdlLmN1cnJlbnRYKSArIFwicHgsIFwiICsgKGltYWdlLmN1cnJlbnRZKSArIFwicHgsMClcIikpO1xuICAgIH0sXG4gICAgb25UcmFuc2l0aW9uRW5kOiBmdW5jdGlvbiBvblRyYW5zaXRpb25FbmQoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciB6b29tID0gc3dpcGVyLnpvb207XG4gICAgICB2YXIgZ2VzdHVyZSA9IHpvb20uZ2VzdHVyZTtcbiAgICAgIGlmIChnZXN0dXJlLiRzbGlkZUVsICYmIHN3aXBlci5wcmV2aW91c0luZGV4ICE9PSBzd2lwZXIuYWN0aXZlSW5kZXgpIHtcbiAgICAgICAgZ2VzdHVyZS4kaW1hZ2VFbC50cmFuc2Zvcm0oJ3RyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZSgxKScpO1xuICAgICAgICBnZXN0dXJlLiRpbWFnZVdyYXBFbC50cmFuc2Zvcm0oJ3RyYW5zbGF0ZTNkKDAsMCwwKScpO1xuXG4gICAgICAgIHpvb20uc2NhbGUgPSAxO1xuICAgICAgICB6b29tLmN1cnJlbnRTY2FsZSA9IDE7XG5cbiAgICAgICAgZ2VzdHVyZS4kc2xpZGVFbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZ2VzdHVyZS4kaW1hZ2VFbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSxcbiAgICAvLyBUb2dnbGUgWm9vbVxuICAgIHRvZ2dsZTogZnVuY3Rpb24gdG9nZ2xlKGUpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcblxuICAgICAgaWYgKHpvb20uc2NhbGUgJiYgem9vbS5zY2FsZSAhPT0gMSkge1xuICAgICAgICAvLyBab29tIE91dFxuICAgICAgICB6b29tLm91dCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gWm9vbSBJblxuICAgICAgICB6b29tLmluKGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaW46IGZ1bmN0aW9uIGluJDEoZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG5cbiAgICAgIHZhciB6b29tID0gc3dpcGVyLnpvb207XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy56b29tO1xuICAgICAgdmFyIGdlc3R1cmUgPSB6b29tLmdlc3R1cmU7XG4gICAgICB2YXIgaW1hZ2UgPSB6b29tLmltYWdlO1xuXG4gICAgICBpZiAoIWdlc3R1cmUuJHNsaWRlRWwpIHtcbiAgICAgICAgZ2VzdHVyZS4kc2xpZGVFbCA9IHN3aXBlci5jbGlja2VkU2xpZGUgPyAkKHN3aXBlci5jbGlja2VkU2xpZGUpIDogc3dpcGVyLnNsaWRlcy5lcShzd2lwZXIuYWN0aXZlSW5kZXgpO1xuICAgICAgICBnZXN0dXJlLiRpbWFnZUVsID0gZ2VzdHVyZS4kc2xpZGVFbC5maW5kKCdpbWcsIHN2ZywgY2FudmFzJyk7XG4gICAgICAgIGdlc3R1cmUuJGltYWdlV3JhcEVsID0gZ2VzdHVyZS4kaW1hZ2VFbC5wYXJlbnQoKFwiLlwiICsgKHBhcmFtcy5jb250YWluZXJDbGFzcykpKTtcbiAgICAgIH1cbiAgICAgIGlmICghZ2VzdHVyZS4kaW1hZ2VFbCB8fCBnZXN0dXJlLiRpbWFnZUVsLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cblxuICAgICAgZ2VzdHVyZS4kc2xpZGVFbC5hZGRDbGFzcygoXCJcIiArIChwYXJhbXMuem9vbWVkU2xpZGVDbGFzcykpKTtcblxuICAgICAgdmFyIHRvdWNoWDtcbiAgICAgIHZhciB0b3VjaFk7XG4gICAgICB2YXIgb2Zmc2V0WDtcbiAgICAgIHZhciBvZmZzZXRZO1xuICAgICAgdmFyIGRpZmZYO1xuICAgICAgdmFyIGRpZmZZO1xuICAgICAgdmFyIHRyYW5zbGF0ZVg7XG4gICAgICB2YXIgdHJhbnNsYXRlWTtcbiAgICAgIHZhciBpbWFnZVdpZHRoO1xuICAgICAgdmFyIGltYWdlSGVpZ2h0O1xuICAgICAgdmFyIHNjYWxlZFdpZHRoO1xuICAgICAgdmFyIHNjYWxlZEhlaWdodDtcbiAgICAgIHZhciB0cmFuc2xhdGVNaW5YO1xuICAgICAgdmFyIHRyYW5zbGF0ZU1pblk7XG4gICAgICB2YXIgdHJhbnNsYXRlTWF4WDtcbiAgICAgIHZhciB0cmFuc2xhdGVNYXhZO1xuICAgICAgdmFyIHNsaWRlV2lkdGg7XG4gICAgICB2YXIgc2xpZGVIZWlnaHQ7XG5cbiAgICAgIGlmICh0eXBlb2YgaW1hZ2UudG91Y2hlc1N0YXJ0LnggPT09ICd1bmRlZmluZWQnICYmIGUpIHtcbiAgICAgICAgdG91Y2hYID0gZS50eXBlID09PSAndG91Y2hlbmQnID8gZS5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWCA6IGUucGFnZVg7XG4gICAgICAgIHRvdWNoWSA9IGUudHlwZSA9PT0gJ3RvdWNoZW5kJyA/IGUuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVkgOiBlLnBhZ2VZO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG91Y2hYID0gaW1hZ2UudG91Y2hlc1N0YXJ0Lng7XG4gICAgICAgIHRvdWNoWSA9IGltYWdlLnRvdWNoZXNTdGFydC55O1xuICAgICAgfVxuXG4gICAgICB6b29tLnNjYWxlID0gZ2VzdHVyZS4kaW1hZ2VXcmFwRWwuYXR0cignZGF0YS1zd2lwZXItem9vbScpIHx8IHBhcmFtcy5tYXhSYXRpbztcbiAgICAgIHpvb20uY3VycmVudFNjYWxlID0gZ2VzdHVyZS4kaW1hZ2VXcmFwRWwuYXR0cignZGF0YS1zd2lwZXItem9vbScpIHx8IHBhcmFtcy5tYXhSYXRpbztcbiAgICAgIGlmIChlKSB7XG4gICAgICAgIHNsaWRlV2lkdGggPSBnZXN0dXJlLiRzbGlkZUVsWzBdLm9mZnNldFdpZHRoO1xuICAgICAgICBzbGlkZUhlaWdodCA9IGdlc3R1cmUuJHNsaWRlRWxbMF0ub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBvZmZzZXRYID0gZ2VzdHVyZS4kc2xpZGVFbC5vZmZzZXQoKS5sZWZ0O1xuICAgICAgICBvZmZzZXRZID0gZ2VzdHVyZS4kc2xpZGVFbC5vZmZzZXQoKS50b3A7XG4gICAgICAgIGRpZmZYID0gKG9mZnNldFggKyAoc2xpZGVXaWR0aCAvIDIpKSAtIHRvdWNoWDtcbiAgICAgICAgZGlmZlkgPSAob2Zmc2V0WSArIChzbGlkZUhlaWdodCAvIDIpKSAtIHRvdWNoWTtcblxuICAgICAgICBpbWFnZVdpZHRoID0gZ2VzdHVyZS4kaW1hZ2VFbFswXS5vZmZzZXRXaWR0aDtcbiAgICAgICAgaW1hZ2VIZWlnaHQgPSBnZXN0dXJlLiRpbWFnZUVsWzBdLm9mZnNldEhlaWdodDtcbiAgICAgICAgc2NhbGVkV2lkdGggPSBpbWFnZVdpZHRoICogem9vbS5zY2FsZTtcbiAgICAgICAgc2NhbGVkSGVpZ2h0ID0gaW1hZ2VIZWlnaHQgKiB6b29tLnNjYWxlO1xuXG4gICAgICAgIHRyYW5zbGF0ZU1pblggPSBNYXRoLm1pbigoKHNsaWRlV2lkdGggLyAyKSAtIChzY2FsZWRXaWR0aCAvIDIpKSwgMCk7XG4gICAgICAgIHRyYW5zbGF0ZU1pblkgPSBNYXRoLm1pbigoKHNsaWRlSGVpZ2h0IC8gMikgLSAoc2NhbGVkSGVpZ2h0IC8gMikpLCAwKTtcbiAgICAgICAgdHJhbnNsYXRlTWF4WCA9IC10cmFuc2xhdGVNaW5YO1xuICAgICAgICB0cmFuc2xhdGVNYXhZID0gLXRyYW5zbGF0ZU1pblk7XG5cbiAgICAgICAgdHJhbnNsYXRlWCA9IGRpZmZYICogem9vbS5zY2FsZTtcbiAgICAgICAgdHJhbnNsYXRlWSA9IGRpZmZZICogem9vbS5zY2FsZTtcblxuICAgICAgICBpZiAodHJhbnNsYXRlWCA8IHRyYW5zbGF0ZU1pblgpIHtcbiAgICAgICAgICB0cmFuc2xhdGVYID0gdHJhbnNsYXRlTWluWDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHJhbnNsYXRlWCA+IHRyYW5zbGF0ZU1heFgpIHtcbiAgICAgICAgICB0cmFuc2xhdGVYID0gdHJhbnNsYXRlTWF4WDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0cmFuc2xhdGVZIDwgdHJhbnNsYXRlTWluWSkge1xuICAgICAgICAgIHRyYW5zbGF0ZVkgPSB0cmFuc2xhdGVNaW5ZO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0cmFuc2xhdGVZID4gdHJhbnNsYXRlTWF4WSkge1xuICAgICAgICAgIHRyYW5zbGF0ZVkgPSB0cmFuc2xhdGVNYXhZO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2xhdGVYID0gMDtcbiAgICAgICAgdHJhbnNsYXRlWSA9IDA7XG4gICAgICB9XG4gICAgICBnZXN0dXJlLiRpbWFnZVdyYXBFbC50cmFuc2l0aW9uKDMwMCkudHJhbnNmb3JtKChcInRyYW5zbGF0ZTNkKFwiICsgdHJhbnNsYXRlWCArIFwicHgsIFwiICsgdHJhbnNsYXRlWSArIFwicHgsMClcIikpO1xuICAgICAgZ2VzdHVyZS4kaW1hZ2VFbC50cmFuc2l0aW9uKDMwMCkudHJhbnNmb3JtKChcInRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZShcIiArICh6b29tLnNjYWxlKSArIFwiKVwiKSk7XG4gICAgfSxcbiAgICBvdXQ6IGZ1bmN0aW9uIG91dCgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuXG4gICAgICB2YXIgem9vbSA9IHN3aXBlci56b29tO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuem9vbTtcbiAgICAgIHZhciBnZXN0dXJlID0gem9vbS5nZXN0dXJlO1xuXG4gICAgICBpZiAoIWdlc3R1cmUuJHNsaWRlRWwpIHtcbiAgICAgICAgZ2VzdHVyZS4kc2xpZGVFbCA9IHN3aXBlci5jbGlja2VkU2xpZGUgPyAkKHN3aXBlci5jbGlja2VkU2xpZGUpIDogc3dpcGVyLnNsaWRlcy5lcShzd2lwZXIuYWN0aXZlSW5kZXgpO1xuICAgICAgICBnZXN0dXJlLiRpbWFnZUVsID0gZ2VzdHVyZS4kc2xpZGVFbC5maW5kKCdpbWcsIHN2ZywgY2FudmFzJyk7XG4gICAgICAgIGdlc3R1cmUuJGltYWdlV3JhcEVsID0gZ2VzdHVyZS4kaW1hZ2VFbC5wYXJlbnQoKFwiLlwiICsgKHBhcmFtcy5jb250YWluZXJDbGFzcykpKTtcbiAgICAgIH1cbiAgICAgIGlmICghZ2VzdHVyZS4kaW1hZ2VFbCB8fCBnZXN0dXJlLiRpbWFnZUVsLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cblxuICAgICAgem9vbS5zY2FsZSA9IDE7XG4gICAgICB6b29tLmN1cnJlbnRTY2FsZSA9IDE7XG4gICAgICBnZXN0dXJlLiRpbWFnZVdyYXBFbC50cmFuc2l0aW9uKDMwMCkudHJhbnNmb3JtKCd0cmFuc2xhdGUzZCgwLDAsMCknKTtcbiAgICAgIGdlc3R1cmUuJGltYWdlRWwudHJhbnNpdGlvbigzMDApLnRyYW5zZm9ybSgndHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlKDEpJyk7XG4gICAgICBnZXN0dXJlLiRzbGlkZUVsLnJlbW92ZUNsYXNzKChcIlwiICsgKHBhcmFtcy56b29tZWRTbGlkZUNsYXNzKSkpO1xuICAgICAgZ2VzdHVyZS4kc2xpZGVFbCA9IHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIC8vIEF0dGFjaC9EZXRhY2ggRXZlbnRzXG4gICAgZW5hYmxlOiBmdW5jdGlvbiBlbmFibGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciB6b29tID0gc3dpcGVyLnpvb207XG4gICAgICBpZiAoem9vbS5lbmFibGVkKSB7IHJldHVybjsgfVxuICAgICAgem9vbS5lbmFibGVkID0gdHJ1ZTtcblxuICAgICAgdmFyIHBhc3NpdmVMaXN0ZW5lciA9IHN3aXBlci50b3VjaEV2ZW50cy5zdGFydCA9PT0gJ3RvdWNoc3RhcnQnICYmIFN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHN3aXBlci5wYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHsgcGFzc2l2ZTogdHJ1ZSwgY2FwdHVyZTogZmFsc2UgfSA6IGZhbHNlO1xuICAgICAgdmFyIGFjdGl2ZUxpc3RlbmVyV2l0aENhcHR1cmUgPSBTdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciA/IHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IHRydWUgfSA6IHRydWU7XG5cbiAgICAgIC8vIFNjYWxlIGltYWdlXG4gICAgICBpZiAoU3VwcG9ydC5nZXN0dXJlcykge1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vbignZ2VzdHVyZXN0YXJ0JywgJy5zd2lwZXItc2xpZGUnLCB6b29tLm9uR2VzdHVyZVN0YXJ0LCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vbignZ2VzdHVyZWNoYW5nZScsICcuc3dpcGVyLXNsaWRlJywgem9vbS5vbkdlc3R1cmVDaGFuZ2UsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9uKCdnZXN0dXJlZW5kJywgJy5zd2lwZXItc2xpZGUnLCB6b29tLm9uR2VzdHVyZUVuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgIH0gZWxzZSBpZiAoc3dpcGVyLnRvdWNoRXZlbnRzLnN0YXJ0ID09PSAndG91Y2hzdGFydCcpIHtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub24oc3dpcGVyLnRvdWNoRXZlbnRzLnN0YXJ0LCAnLnN3aXBlci1zbGlkZScsIHpvb20ub25HZXN0dXJlU3RhcnQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9uKHN3aXBlci50b3VjaEV2ZW50cy5tb3ZlLCAnLnN3aXBlci1zbGlkZScsIHpvb20ub25HZXN0dXJlQ2hhbmdlLCBhY3RpdmVMaXN0ZW5lcldpdGhDYXB0dXJlKTtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub24oc3dpcGVyLnRvdWNoRXZlbnRzLmVuZCwgJy5zd2lwZXItc2xpZGUnLCB6b29tLm9uR2VzdHVyZUVuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgICAgaWYgKHN3aXBlci50b3VjaEV2ZW50cy5jYW5jZWwpIHtcbiAgICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vbihzd2lwZXIudG91Y2hFdmVudHMuY2FuY2VsLCAnLnN3aXBlci1zbGlkZScsIHpvb20ub25HZXN0dXJlRW5kLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE1vdmUgaW1hZ2VcbiAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9uKHN3aXBlci50b3VjaEV2ZW50cy5tb3ZlLCAoXCIuXCIgKyAoc3dpcGVyLnBhcmFtcy56b29tLmNvbnRhaW5lckNsYXNzKSksIHpvb20ub25Ub3VjaE1vdmUsIGFjdGl2ZUxpc3RlbmVyV2l0aENhcHR1cmUpO1xuICAgIH0sXG4gICAgZGlzYWJsZTogZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIGlmICghem9vbS5lbmFibGVkKSB7IHJldHVybjsgfVxuXG4gICAgICBzd2lwZXIuem9vbS5lbmFibGVkID0gZmFsc2U7XG5cbiAgICAgIHZhciBwYXNzaXZlTGlzdGVuZXIgPSBzd2lwZXIudG91Y2hFdmVudHMuc3RhcnQgPT09ICd0b3VjaHN0YXJ0JyAmJiBTdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciAmJiBzd2lwZXIucGFyYW1zLnBhc3NpdmVMaXN0ZW5lcnMgPyB7IHBhc3NpdmU6IHRydWUsIGNhcHR1cmU6IGZhbHNlIH0gOiBmYWxzZTtcbiAgICAgIHZhciBhY3RpdmVMaXN0ZW5lcldpdGhDYXB0dXJlID0gU3VwcG9ydC5wYXNzaXZlTGlzdGVuZXIgPyB7IHBhc3NpdmU6IGZhbHNlLCBjYXB0dXJlOiB0cnVlIH0gOiB0cnVlO1xuXG4gICAgICAvLyBTY2FsZSBpbWFnZVxuICAgICAgaWYgKFN1cHBvcnQuZ2VzdHVyZXMpIHtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub2ZmKCdnZXN0dXJlc3RhcnQnLCAnLnN3aXBlci1zbGlkZScsIHpvb20ub25HZXN0dXJlU3RhcnQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9mZignZ2VzdHVyZWNoYW5nZScsICcuc3dpcGVyLXNsaWRlJywgem9vbS5vbkdlc3R1cmVDaGFuZ2UsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9mZignZ2VzdHVyZWVuZCcsICcuc3dpcGVyLXNsaWRlJywgem9vbS5vbkdlc3R1cmVFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICB9IGVsc2UgaWYgKHN3aXBlci50b3VjaEV2ZW50cy5zdGFydCA9PT0gJ3RvdWNoc3RhcnQnKSB7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9mZihzd2lwZXIudG91Y2hFdmVudHMuc3RhcnQsICcuc3dpcGVyLXNsaWRlJywgem9vbS5vbkdlc3R1cmVTdGFydCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub2ZmKHN3aXBlci50b3VjaEV2ZW50cy5tb3ZlLCAnLnN3aXBlci1zbGlkZScsIHpvb20ub25HZXN0dXJlQ2hhbmdlLCBhY3RpdmVMaXN0ZW5lcldpdGhDYXB0dXJlKTtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub2ZmKHN3aXBlci50b3VjaEV2ZW50cy5lbmQsICcuc3dpcGVyLXNsaWRlJywgem9vbS5vbkdlc3R1cmVFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICAgIGlmIChzd2lwZXIudG91Y2hFdmVudHMuY2FuY2VsKSB7XG4gICAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub2ZmKHN3aXBlci50b3VjaEV2ZW50cy5jYW5jZWwsICcuc3dpcGVyLXNsaWRlJywgem9vbS5vbkdlc3R1cmVFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTW92ZSBpbWFnZVxuICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub2ZmKHN3aXBlci50b3VjaEV2ZW50cy5tb3ZlLCAoXCIuXCIgKyAoc3dpcGVyLnBhcmFtcy56b29tLmNvbnRhaW5lckNsYXNzKSksIHpvb20ub25Ub3VjaE1vdmUsIGFjdGl2ZUxpc3RlbmVyV2l0aENhcHR1cmUpO1xuICAgIH0sXG4gIH07XG5cbiAgdmFyIFpvb20kMSA9IHtcbiAgICBuYW1lOiAnem9vbScsXG4gICAgcGFyYW1zOiB7XG4gICAgICB6b29tOiB7XG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBtYXhSYXRpbzogMyxcbiAgICAgICAgbWluUmF0aW86IDEsXG4gICAgICAgIHRvZ2dsZTogdHJ1ZSxcbiAgICAgICAgY29udGFpbmVyQ2xhc3M6ICdzd2lwZXItem9vbS1jb250YWluZXInLFxuICAgICAgICB6b29tZWRTbGlkZUNsYXNzOiAnc3dpcGVyLXNsaWRlLXpvb21lZCcsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciB6b29tID0ge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgc2NhbGU6IDEsXG4gICAgICAgIGN1cnJlbnRTY2FsZTogMSxcbiAgICAgICAgaXNTY2FsaW5nOiBmYWxzZSxcbiAgICAgICAgZ2VzdHVyZToge1xuICAgICAgICAgICRzbGlkZUVsOiB1bmRlZmluZWQsXG4gICAgICAgICAgc2xpZGVXaWR0aDogdW5kZWZpbmVkLFxuICAgICAgICAgIHNsaWRlSGVpZ2h0OiB1bmRlZmluZWQsXG4gICAgICAgICAgJGltYWdlRWw6IHVuZGVmaW5lZCxcbiAgICAgICAgICAkaW1hZ2VXcmFwRWw6IHVuZGVmaW5lZCxcbiAgICAgICAgICBtYXhSYXRpbzogMyxcbiAgICAgICAgfSxcbiAgICAgICAgaW1hZ2U6IHtcbiAgICAgICAgICBpc1RvdWNoZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICBpc01vdmVkOiB1bmRlZmluZWQsXG4gICAgICAgICAgY3VycmVudFg6IHVuZGVmaW5lZCxcbiAgICAgICAgICBjdXJyZW50WTogdW5kZWZpbmVkLFxuICAgICAgICAgIG1pblg6IHVuZGVmaW5lZCxcbiAgICAgICAgICBtaW5ZOiB1bmRlZmluZWQsXG4gICAgICAgICAgbWF4WDogdW5kZWZpbmVkLFxuICAgICAgICAgIG1heFk6IHVuZGVmaW5lZCxcbiAgICAgICAgICB3aWR0aDogdW5kZWZpbmVkLFxuICAgICAgICAgIGhlaWdodDogdW5kZWZpbmVkLFxuICAgICAgICAgIHN0YXJ0WDogdW5kZWZpbmVkLFxuICAgICAgICAgIHN0YXJ0WTogdW5kZWZpbmVkLFxuICAgICAgICAgIHRvdWNoZXNTdGFydDoge30sXG4gICAgICAgICAgdG91Y2hlc0N1cnJlbnQ6IHt9LFxuICAgICAgICB9LFxuICAgICAgICB2ZWxvY2l0eToge1xuICAgICAgICAgIHg6IHVuZGVmaW5lZCxcbiAgICAgICAgICB5OiB1bmRlZmluZWQsXG4gICAgICAgICAgcHJldlBvc2l0aW9uWDogdW5kZWZpbmVkLFxuICAgICAgICAgIHByZXZQb3NpdGlvblk6IHVuZGVmaW5lZCxcbiAgICAgICAgICBwcmV2VGltZTogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgKCdvbkdlc3R1cmVTdGFydCBvbkdlc3R1cmVDaGFuZ2Ugb25HZXN0dXJlRW5kIG9uVG91Y2hTdGFydCBvblRvdWNoTW92ZSBvblRvdWNoRW5kIG9uVHJhbnNpdGlvbkVuZCB0b2dnbGUgZW5hYmxlIGRpc2FibGUgaW4gb3V0Jykuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7XG4gICAgICAgIHpvb21bbWV0aG9kTmFtZV0gPSBab29tW21ldGhvZE5hbWVdLmJpbmQoc3dpcGVyKTtcbiAgICAgIH0pO1xuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICB6b29tOiB6b29tLFxuICAgICAgfSk7XG5cbiAgICAgIHZhciBzY2FsZSA9IDE7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3dpcGVyLnpvb20sICdzY2FsZScsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIHNjYWxlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgICAgIGlmIChzY2FsZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBpbWFnZUVsID0gc3dpcGVyLnpvb20uZ2VzdHVyZS4kaW1hZ2VFbCA/IHN3aXBlci56b29tLmdlc3R1cmUuJGltYWdlRWxbMF0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB2YXIgc2xpZGVFbCA9IHN3aXBlci56b29tLmdlc3R1cmUuJHNsaWRlRWwgPyBzd2lwZXIuem9vbS5nZXN0dXJlLiRzbGlkZUVsWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ3pvb21DaGFuZ2UnLCB2YWx1ZSwgaW1hZ2VFbCwgc2xpZGVFbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNjYWxlID0gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuem9vbS5lbmFibGVkKSB7XG4gICAgICAgICAgc3dpcGVyLnpvb20uZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgc3dpcGVyLnpvb20uZGlzYWJsZSgpO1xuICAgICAgfSxcbiAgICAgIHRvdWNoU3RhcnQ6IGZ1bmN0aW9uIHRvdWNoU3RhcnQoZSkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKCFzd2lwZXIuem9vbS5lbmFibGVkKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIuem9vbS5vblRvdWNoU3RhcnQoZSk7XG4gICAgICB9LFxuICAgICAgdG91Y2hFbmQ6IGZ1bmN0aW9uIHRvdWNoRW5kKGUpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLnpvb20uZW5hYmxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLnpvb20ub25Ub3VjaEVuZChlKTtcbiAgICAgIH0sXG4gICAgICBkb3VibGVUYXA6IGZ1bmN0aW9uIGRvdWJsZVRhcChlKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy56b29tLmVuYWJsZWQgJiYgc3dpcGVyLnpvb20uZW5hYmxlZCAmJiBzd2lwZXIucGFyYW1zLnpvb20udG9nZ2xlKSB7XG4gICAgICAgICAgc3dpcGVyLnpvb20udG9nZ2xlKGUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdHJhbnNpdGlvbkVuZDogZnVuY3Rpb24gdHJhbnNpdGlvbkVuZCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIuem9vbS5lbmFibGVkICYmIHN3aXBlci5wYXJhbXMuem9vbS5lbmFibGVkKSB7XG4gICAgICAgICAgc3dpcGVyLnpvb20ub25UcmFuc2l0aW9uRW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzbGlkZUNoYW5nZTogZnVuY3Rpb24gc2xpZGVDaGFuZ2UoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnpvb20uZW5hYmxlZCAmJiBzd2lwZXIucGFyYW1zLnpvb20uZW5hYmxlZCAmJiBzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgICAgICBzd2lwZXIuem9vbS5vblRyYW5zaXRpb25FbmQoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHZhciBMYXp5ID0ge1xuICAgIGxvYWRJblNsaWRlOiBmdW5jdGlvbiBsb2FkSW5TbGlkZShpbmRleCwgbG9hZEluRHVwbGljYXRlKSB7XG4gICAgICBpZiAoIGxvYWRJbkR1cGxpY2F0ZSA9PT0gdm9pZCAwICkgbG9hZEluRHVwbGljYXRlID0gdHJ1ZTtcblxuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5sYXp5O1xuICAgICAgaWYgKHR5cGVvZiBpbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuOyB9XG4gICAgICBpZiAoc3dpcGVyLnNsaWRlcy5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG4gICAgICB2YXIgaXNWaXJ0dWFsID0gc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG5cbiAgICAgIHZhciAkc2xpZGVFbCA9IGlzVmlydHVhbFxuICAgICAgICA/IHN3aXBlci4kd3JhcHBlckVsLmNoaWxkcmVuKChcIi5cIiArIChzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3MpICsgXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgaW5kZXggKyBcIlxcXCJdXCIpKVxuICAgICAgICA6IHN3aXBlci5zbGlkZXMuZXEoaW5kZXgpO1xuXG4gICAgICB2YXIgJGltYWdlcyA9ICRzbGlkZUVsLmZpbmQoKFwiLlwiICsgKHBhcmFtcy5lbGVtZW50Q2xhc3MpICsgXCI6bm90KC5cIiArIChwYXJhbXMubG9hZGVkQ2xhc3MpICsgXCIpOm5vdCguXCIgKyAocGFyYW1zLmxvYWRpbmdDbGFzcykgKyBcIilcIikpO1xuICAgICAgaWYgKCRzbGlkZUVsLmhhc0NsYXNzKHBhcmFtcy5lbGVtZW50Q2xhc3MpICYmICEkc2xpZGVFbC5oYXNDbGFzcyhwYXJhbXMubG9hZGVkQ2xhc3MpICYmICEkc2xpZGVFbC5oYXNDbGFzcyhwYXJhbXMubG9hZGluZ0NsYXNzKSkge1xuICAgICAgICAkaW1hZ2VzID0gJGltYWdlcy5hZGQoJHNsaWRlRWxbMF0pO1xuICAgICAgfVxuICAgICAgaWYgKCRpbWFnZXMubGVuZ3RoID09PSAwKSB7IHJldHVybjsgfVxuXG4gICAgICAkaW1hZ2VzLmVhY2goZnVuY3Rpb24gKGltYWdlSW5kZXgsIGltYWdlRWwpIHtcbiAgICAgICAgdmFyICRpbWFnZUVsID0gJChpbWFnZUVsKTtcbiAgICAgICAgJGltYWdlRWwuYWRkQ2xhc3MocGFyYW1zLmxvYWRpbmdDbGFzcyk7XG5cbiAgICAgICAgdmFyIGJhY2tncm91bmQgPSAkaW1hZ2VFbC5hdHRyKCdkYXRhLWJhY2tncm91bmQnKTtcbiAgICAgICAgdmFyIHNyYyA9ICRpbWFnZUVsLmF0dHIoJ2RhdGEtc3JjJyk7XG4gICAgICAgIHZhciBzcmNzZXQgPSAkaW1hZ2VFbC5hdHRyKCdkYXRhLXNyY3NldCcpO1xuICAgICAgICB2YXIgc2l6ZXMgPSAkaW1hZ2VFbC5hdHRyKCdkYXRhLXNpemVzJyk7XG5cbiAgICAgICAgc3dpcGVyLmxvYWRJbWFnZSgkaW1hZ2VFbFswXSwgKHNyYyB8fCBiYWNrZ3JvdW5kKSwgc3Jjc2V0LCBzaXplcywgZmFsc2UsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHN3aXBlciA9PT0gJ3VuZGVmaW5lZCcgfHwgc3dpcGVyID09PSBudWxsIHx8ICFzd2lwZXIgfHwgKHN3aXBlciAmJiAhc3dpcGVyLnBhcmFtcykgfHwgc3dpcGVyLmRlc3Ryb3llZCkgeyByZXR1cm47IH1cbiAgICAgICAgICBpZiAoYmFja2dyb3VuZCkge1xuICAgICAgICAgICAgJGltYWdlRWwuY3NzKCdiYWNrZ3JvdW5kLWltYWdlJywgKFwidXJsKFxcXCJcIiArIGJhY2tncm91bmQgKyBcIlxcXCIpXCIpKTtcbiAgICAgICAgICAgICRpbWFnZUVsLnJlbW92ZUF0dHIoJ2RhdGEtYmFja2dyb3VuZCcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc3Jjc2V0KSB7XG4gICAgICAgICAgICAgICRpbWFnZUVsLmF0dHIoJ3NyY3NldCcsIHNyY3NldCk7XG4gICAgICAgICAgICAgICRpbWFnZUVsLnJlbW92ZUF0dHIoJ2RhdGEtc3Jjc2V0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2l6ZXMpIHtcbiAgICAgICAgICAgICAgJGltYWdlRWwuYXR0cignc2l6ZXMnLCBzaXplcyk7XG4gICAgICAgICAgICAgICRpbWFnZUVsLnJlbW92ZUF0dHIoJ2RhdGEtc2l6ZXMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzcmMpIHtcbiAgICAgICAgICAgICAgJGltYWdlRWwuYXR0cignc3JjJywgc3JjKTtcbiAgICAgICAgICAgICAgJGltYWdlRWwucmVtb3ZlQXR0cignZGF0YS1zcmMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAkaW1hZ2VFbC5hZGRDbGFzcyhwYXJhbXMubG9hZGVkQ2xhc3MpLnJlbW92ZUNsYXNzKHBhcmFtcy5sb2FkaW5nQ2xhc3MpO1xuICAgICAgICAgICRzbGlkZUVsLmZpbmQoKFwiLlwiICsgKHBhcmFtcy5wcmVsb2FkZXJDbGFzcykpKS5yZW1vdmUoKTtcbiAgICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wICYmIGxvYWRJbkR1cGxpY2F0ZSkge1xuICAgICAgICAgICAgdmFyIHNsaWRlT3JpZ2luYWxJbmRleCA9ICRzbGlkZUVsLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4Jyk7XG4gICAgICAgICAgICBpZiAoJHNsaWRlRWwuaGFzQ2xhc3Moc3dpcGVyLnBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSkge1xuICAgICAgICAgICAgICB2YXIgb3JpZ2luYWxTbGlkZSA9IHN3aXBlci4kd3JhcHBlckVsLmNoaWxkcmVuKChcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyBzbGlkZU9yaWdpbmFsSW5kZXggKyBcIlxcXCJdOm5vdCguXCIgKyAoc3dpcGVyLnBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSArIFwiKVwiKSk7XG4gICAgICAgICAgICAgIHN3aXBlci5sYXp5LmxvYWRJblNsaWRlKG9yaWdpbmFsU2xpZGUuaW5kZXgoKSwgZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIGR1cGxpY2F0ZWRTbGlkZSA9IHN3aXBlci4kd3JhcHBlckVsLmNoaWxkcmVuKChcIi5cIiArIChzd2lwZXIucGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpICsgXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgc2xpZGVPcmlnaW5hbEluZGV4ICsgXCJcXFwiXVwiKSk7XG4gICAgICAgICAgICAgIHN3aXBlci5sYXp5LmxvYWRJblNsaWRlKGR1cGxpY2F0ZWRTbGlkZS5pbmRleCgpLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHN3aXBlci5lbWl0KCdsYXp5SW1hZ2VSZWFkeScsICRzbGlkZUVsWzBdLCAkaW1hZ2VFbFswXSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN3aXBlci5lbWl0KCdsYXp5SW1hZ2VMb2FkJywgJHNsaWRlRWxbMF0sICRpbWFnZUVsWzBdKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgbG9hZDogZnVuY3Rpb24gbG9hZCgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcbiAgICAgIHZhciBzd2lwZXJQYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG4gICAgICB2YXIgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgICB2YXIgaXNWaXJ0dWFsID0gc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyUGFyYW1zLnZpcnR1YWwuZW5hYmxlZDtcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXJQYXJhbXMubGF6eTtcblxuICAgICAgdmFyIHNsaWRlc1BlclZpZXcgPSBzd2lwZXJQYXJhbXMuc2xpZGVzUGVyVmlldztcbiAgICAgIGlmIChzbGlkZXNQZXJWaWV3ID09PSAnYXV0bycpIHtcbiAgICAgICAgc2xpZGVzUGVyVmlldyA9IDA7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNsaWRlRXhpc3QoaW5kZXgpIHtcbiAgICAgICAgaWYgKGlzVmlydHVhbCkge1xuICAgICAgICAgIGlmICgkd3JhcHBlckVsLmNoaWxkcmVuKChcIi5cIiArIChzd2lwZXJQYXJhbXMuc2xpZGVDbGFzcykgKyBcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyBpbmRleCArIFwiXFxcIl1cIikpLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNsaWRlc1tpbmRleF0pIHsgcmV0dXJuIHRydWU7IH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gc2xpZGVJbmRleChzbGlkZUVsKSB7XG4gICAgICAgIGlmIChpc1ZpcnR1YWwpIHtcbiAgICAgICAgICByZXR1cm4gJChzbGlkZUVsKS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAkKHNsaWRlRWwpLmluZGV4KCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3dpcGVyLmxhenkuaW5pdGlhbEltYWdlTG9hZGVkKSB7IHN3aXBlci5sYXp5LmluaXRpYWxJbWFnZUxvYWRlZCA9IHRydWU7IH1cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLndhdGNoU2xpZGVzVmlzaWJpbGl0eSkge1xuICAgICAgICAkd3JhcHBlckVsLmNoaWxkcmVuKChcIi5cIiArIChzd2lwZXJQYXJhbXMuc2xpZGVWaXNpYmxlQ2xhc3MpKSkuZWFjaChmdW5jdGlvbiAoZWxJbmRleCwgc2xpZGVFbCkge1xuICAgICAgICAgIHZhciBpbmRleCA9IGlzVmlydHVhbCA/ICQoc2xpZGVFbCkuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSA6ICQoc2xpZGVFbCkuaW5kZXgoKTtcbiAgICAgICAgICBzd2lwZXIubGF6eS5sb2FkSW5TbGlkZShpbmRleCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChzbGlkZXNQZXJWaWV3ID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gYWN0aXZlSW5kZXg7IGkgPCBhY3RpdmVJbmRleCArIHNsaWRlc1BlclZpZXc7IGkgKz0gMSkge1xuICAgICAgICAgIGlmIChzbGlkZUV4aXN0KGkpKSB7IHN3aXBlci5sYXp5LmxvYWRJblNsaWRlKGkpOyB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci5sYXp5LmxvYWRJblNsaWRlKGFjdGl2ZUluZGV4KTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbXMubG9hZFByZXZOZXh0KSB7XG4gICAgICAgIGlmIChzbGlkZXNQZXJWaWV3ID4gMSB8fCAocGFyYW1zLmxvYWRQcmV2TmV4dEFtb3VudCAmJiBwYXJhbXMubG9hZFByZXZOZXh0QW1vdW50ID4gMSkpIHtcbiAgICAgICAgICB2YXIgYW1vdW50ID0gcGFyYW1zLmxvYWRQcmV2TmV4dEFtb3VudDtcbiAgICAgICAgICB2YXIgc3B2ID0gc2xpZGVzUGVyVmlldztcbiAgICAgICAgICB2YXIgbWF4SW5kZXggPSBNYXRoLm1pbihhY3RpdmVJbmRleCArIHNwdiArIE1hdGgubWF4KGFtb3VudCwgc3B2KSwgc2xpZGVzLmxlbmd0aCk7XG4gICAgICAgICAgdmFyIG1pbkluZGV4ID0gTWF0aC5tYXgoYWN0aXZlSW5kZXggLSBNYXRoLm1heChzcHYsIGFtb3VudCksIDApO1xuICAgICAgICAgIC8vIE5leHQgU2xpZGVzXG4gICAgICAgICAgZm9yICh2YXIgaSQxID0gYWN0aXZlSW5kZXggKyBzbGlkZXNQZXJWaWV3OyBpJDEgPCBtYXhJbmRleDsgaSQxICs9IDEpIHtcbiAgICAgICAgICAgIGlmIChzbGlkZUV4aXN0KGkkMSkpIHsgc3dpcGVyLmxhenkubG9hZEluU2xpZGUoaSQxKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBQcmV2IFNsaWRlc1xuICAgICAgICAgIGZvciAodmFyIGkkMiA9IG1pbkluZGV4OyBpJDIgPCBhY3RpdmVJbmRleDsgaSQyICs9IDEpIHtcbiAgICAgICAgICAgIGlmIChzbGlkZUV4aXN0KGkkMikpIHsgc3dpcGVyLmxhenkubG9hZEluU2xpZGUoaSQyKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgbmV4dFNsaWRlID0gJHdyYXBwZXJFbC5jaGlsZHJlbigoXCIuXCIgKyAoc3dpcGVyUGFyYW1zLnNsaWRlTmV4dENsYXNzKSkpO1xuICAgICAgICAgIGlmIChuZXh0U2xpZGUubGVuZ3RoID4gMCkgeyBzd2lwZXIubGF6eS5sb2FkSW5TbGlkZShzbGlkZUluZGV4KG5leHRTbGlkZSkpOyB9XG5cbiAgICAgICAgICB2YXIgcHJldlNsaWRlID0gJHdyYXBwZXJFbC5jaGlsZHJlbigoXCIuXCIgKyAoc3dpcGVyUGFyYW1zLnNsaWRlUHJldkNsYXNzKSkpO1xuICAgICAgICAgIGlmIChwcmV2U2xpZGUubGVuZ3RoID4gMCkgeyBzd2lwZXIubGF6eS5sb2FkSW5TbGlkZShzbGlkZUluZGV4KHByZXZTbGlkZSkpOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICB9O1xuXG4gIHZhciBMYXp5JDEgPSB7XG4gICAgbmFtZTogJ2xhenknLFxuICAgIHBhcmFtczoge1xuICAgICAgbGF6eToge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgbG9hZFByZXZOZXh0OiBmYWxzZSxcbiAgICAgICAgbG9hZFByZXZOZXh0QW1vdW50OiAxLFxuICAgICAgICBsb2FkT25UcmFuc2l0aW9uU3RhcnQ6IGZhbHNlLFxuXG4gICAgICAgIGVsZW1lbnRDbGFzczogJ3N3aXBlci1sYXp5JyxcbiAgICAgICAgbG9hZGluZ0NsYXNzOiAnc3dpcGVyLWxhenktbG9hZGluZycsXG4gICAgICAgIGxvYWRlZENsYXNzOiAnc3dpcGVyLWxhenktbG9hZGVkJyxcbiAgICAgICAgcHJlbG9hZGVyQ2xhc3M6ICdzd2lwZXItbGF6eS1wcmVsb2FkZXInLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICAgIGxhenk6IHtcbiAgICAgICAgICBpbml0aWFsSW1hZ2VMb2FkZWQ6IGZhbHNlLFxuICAgICAgICAgIGxvYWQ6IExhenkubG9hZC5iaW5kKHN3aXBlciksXG4gICAgICAgICAgbG9hZEluU2xpZGU6IExhenkubG9hZEluU2xpZGUuYmluZChzd2lwZXIpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgYmVmb3JlSW5pdDogZnVuY3Rpb24gYmVmb3JlSW5pdCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxhenkuZW5hYmxlZCAmJiBzd2lwZXIucGFyYW1zLnByZWxvYWRJbWFnZXMpIHtcbiAgICAgICAgICBzd2lwZXIucGFyYW1zLnByZWxvYWRJbWFnZXMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sYXp5LmVuYWJsZWQgJiYgIXN3aXBlci5wYXJhbXMubG9vcCAmJiBzd2lwZXIucGFyYW1zLmluaXRpYWxTbGlkZSA9PT0gMCkge1xuICAgICAgICAgIHN3aXBlci5sYXp5LmxvYWQoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNjcm9sbDogZnVuY3Rpb24gc2Nyb2xsKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZnJlZU1vZGUgJiYgIXN3aXBlci5wYXJhbXMuZnJlZU1vZGVTdGlja3kpIHtcbiAgICAgICAgICBzd2lwZXIubGF6eS5sb2FkKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICByZXNpemU6IGZ1bmN0aW9uIHJlc2l6ZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxhenkuZW5hYmxlZCkge1xuICAgICAgICAgIHN3aXBlci5sYXp5LmxvYWQoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNjcm9sbGJhckRyYWdNb3ZlOiBmdW5jdGlvbiBzY3JvbGxiYXJEcmFnTW92ZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxhenkuZW5hYmxlZCkge1xuICAgICAgICAgIHN3aXBlci5sYXp5LmxvYWQoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRyYW5zaXRpb25TdGFydDogZnVuY3Rpb24gdHJhbnNpdGlvblN0YXJ0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubGF6eS5lbmFibGVkKSB7XG4gICAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubGF6eS5sb2FkT25UcmFuc2l0aW9uU3RhcnQgfHwgKCFzd2lwZXIucGFyYW1zLmxhenkubG9hZE9uVHJhbnNpdGlvblN0YXJ0ICYmICFzd2lwZXIubGF6eS5pbml0aWFsSW1hZ2VMb2FkZWQpKSB7XG4gICAgICAgICAgICBzd2lwZXIubGF6eS5sb2FkKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdHJhbnNpdGlvbkVuZDogZnVuY3Rpb24gdHJhbnNpdGlvbkVuZCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxhenkuZW5hYmxlZCAmJiAhc3dpcGVyLnBhcmFtcy5sYXp5LmxvYWRPblRyYW5zaXRpb25TdGFydCkge1xuICAgICAgICAgIHN3aXBlci5sYXp5LmxvYWQoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNsaWRlQ2hhbmdlOiBmdW5jdGlvbiBzbGlkZUNoYW5nZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxhenkuZW5hYmxlZCAmJiBzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgICAgICBzd2lwZXIubGF6eS5sb2FkKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICAvKiBlc2xpbnQgbm8tYml0d2lzZTogW1wiZXJyb3JcIiwgeyBcImFsbG93XCI6IFtcIj4+XCJdIH1dICovXG5cbiAgdmFyIENvbnRyb2xsZXIgPSB7XG4gICAgTGluZWFyU3BsaW5lOiBmdW5jdGlvbiBMaW5lYXJTcGxpbmUoeCwgeSkge1xuICAgICAgdmFyIGJpbmFyeVNlYXJjaCA9IChmdW5jdGlvbiBzZWFyY2goKSB7XG4gICAgICAgIHZhciBtYXhJbmRleDtcbiAgICAgICAgdmFyIG1pbkluZGV4O1xuICAgICAgICB2YXIgZ3Vlc3M7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJyYXksIHZhbCkge1xuICAgICAgICAgIG1pbkluZGV4ID0gLTE7XG4gICAgICAgICAgbWF4SW5kZXggPSBhcnJheS5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKG1heEluZGV4IC0gbWluSW5kZXggPiAxKSB7XG4gICAgICAgICAgICBndWVzcyA9IG1heEluZGV4ICsgbWluSW5kZXggPj4gMTtcbiAgICAgICAgICAgIGlmIChhcnJheVtndWVzc10gPD0gdmFsKSB7XG4gICAgICAgICAgICAgIG1pbkluZGV4ID0gZ3Vlc3M7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXhJbmRleCA9IGd1ZXNzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbWF4SW5kZXg7XG4gICAgICAgIH07XG4gICAgICB9KCkpO1xuICAgICAgdGhpcy54ID0geDtcbiAgICAgIHRoaXMueSA9IHk7XG4gICAgICB0aGlzLmxhc3RJbmRleCA9IHgubGVuZ3RoIC0gMTtcbiAgICAgIC8vIEdpdmVuIGFuIHggdmFsdWUgKHgyKSwgcmV0dXJuIHRoZSBleHBlY3RlZCB5MiB2YWx1ZTpcbiAgICAgIC8vICh4MSx5MSkgaXMgdGhlIGtub3duIHBvaW50IGJlZm9yZSBnaXZlbiB2YWx1ZSxcbiAgICAgIC8vICh4Myx5MykgaXMgdGhlIGtub3duIHBvaW50IGFmdGVyIGdpdmVuIHZhbHVlLlxuICAgICAgdmFyIGkxO1xuICAgICAgdmFyIGkzO1xuXG4gICAgICB0aGlzLmludGVycG9sYXRlID0gZnVuY3Rpb24gaW50ZXJwb2xhdGUoeDIpIHtcbiAgICAgICAgaWYgKCF4MikgeyByZXR1cm4gMDsgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgaW5kZXhlcyBvZiB4MSBhbmQgeDMgKHRoZSBhcnJheSBpbmRleGVzIGJlZm9yZSBhbmQgYWZ0ZXIgZ2l2ZW4geDIpOlxuICAgICAgICBpMyA9IGJpbmFyeVNlYXJjaCh0aGlzLngsIHgyKTtcbiAgICAgICAgaTEgPSBpMyAtIDE7XG5cbiAgICAgICAgLy8gV2UgaGF2ZSBvdXIgaW5kZXhlcyBpMSAmIGkzLCBzbyB3ZSBjYW4gY2FsY3VsYXRlIGFscmVhZHk6XG4gICAgICAgIC8vIHkyIDo9ICgoeDLiiJJ4MSkgw5cgKHkz4oiSeTEpKSDDtyAoeDPiiJJ4MSkgKyB5MVxuICAgICAgICByZXR1cm4gKCgoeDIgLSB0aGlzLnhbaTFdKSAqICh0aGlzLnlbaTNdIC0gdGhpcy55W2kxXSkpIC8gKHRoaXMueFtpM10gLSB0aGlzLnhbaTFdKSkgKyB0aGlzLnlbaTFdO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgLy8geHh4OiBmb3Igbm93IGkgd2lsbCBqdXN0IHNhdmUgb25lIHNwbGluZSBmdW5jdGlvbiB0byB0b1xuICAgIGdldEludGVycG9sYXRlRnVuY3Rpb246IGZ1bmN0aW9uIGdldEludGVycG9sYXRlRnVuY3Rpb24oYykge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5jb250cm9sbGVyLnNwbGluZSkge1xuICAgICAgICBzd2lwZXIuY29udHJvbGxlci5zcGxpbmUgPSBzd2lwZXIucGFyYW1zLmxvb3BcbiAgICAgICAgICA/IG5ldyBDb250cm9sbGVyLkxpbmVhclNwbGluZShzd2lwZXIuc2xpZGVzR3JpZCwgYy5zbGlkZXNHcmlkKVxuICAgICAgICAgIDogbmV3IENvbnRyb2xsZXIuTGluZWFyU3BsaW5lKHN3aXBlci5zbmFwR3JpZCwgYy5zbmFwR3JpZCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZShzZXRUcmFuc2xhdGUkMSwgYnlDb250cm9sbGVyKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBjb250cm9sbGVkID0gc3dpcGVyLmNvbnRyb2xsZXIuY29udHJvbDtcbiAgICAgIHZhciBtdWx0aXBsaWVyO1xuICAgICAgdmFyIGNvbnRyb2xsZWRUcmFuc2xhdGU7XG4gICAgICBmdW5jdGlvbiBzZXRDb250cm9sbGVkVHJhbnNsYXRlKGMpIHtcbiAgICAgICAgLy8gdGhpcyB3aWxsIGNyZWF0ZSBhbiBJbnRlcnBvbGF0ZSBmdW5jdGlvbiBiYXNlZCBvbiB0aGUgc25hcEdyaWRzXG4gICAgICAgIC8vIHggaXMgdGhlIEdyaWQgb2YgdGhlIHNjcm9sbGVkIHNjcm9sbGVyIGFuZCB5IHdpbGwgYmUgdGhlIGNvbnRyb2xsZWQgc2Nyb2xsZXJcbiAgICAgICAgLy8gaXQgbWFrZXMgc2Vuc2UgdG8gY3JlYXRlIHRoaXMgb25seSBvbmNlIGFuZCByZWNhbGwgaXQgZm9yIHRoZSBpbnRlcnBvbGF0aW9uXG4gICAgICAgIC8vIHRoZSBmdW5jdGlvbiBkb2VzIGEgbG90IG9mIHZhbHVlIGNhY2hpbmcgZm9yIHBlcmZvcm1hbmNlXG4gICAgICAgIHZhciB0cmFuc2xhdGUgPSBzd2lwZXIucnRsVHJhbnNsYXRlID8gLXN3aXBlci50cmFuc2xhdGUgOiBzd2lwZXIudHJhbnNsYXRlO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5jb250cm9sbGVyLmJ5ID09PSAnc2xpZGUnKSB7XG4gICAgICAgICAgc3dpcGVyLmNvbnRyb2xsZXIuZ2V0SW50ZXJwb2xhdGVGdW5jdGlvbihjKTtcbiAgICAgICAgICAvLyBpIGFtIG5vdCBzdXJlIHdoeSB0aGUgdmFsdWVzIGhhdmUgdG8gYmUgbXVsdGlwbGljYXRlZCB0aGlzIHdheSwgdHJpZWQgdG8gaW52ZXJ0IHRoZSBzbmFwR3JpZFxuICAgICAgICAgIC8vIGJ1dCBpdCBkaWQgbm90IHdvcmsgb3V0XG4gICAgICAgICAgY29udHJvbGxlZFRyYW5zbGF0ZSA9IC1zd2lwZXIuY29udHJvbGxlci5zcGxpbmUuaW50ZXJwb2xhdGUoLXRyYW5zbGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbnRyb2xsZWRUcmFuc2xhdGUgfHwgc3dpcGVyLnBhcmFtcy5jb250cm9sbGVyLmJ5ID09PSAnY29udGFpbmVyJykge1xuICAgICAgICAgIG11bHRpcGxpZXIgPSAoYy5tYXhUcmFuc2xhdGUoKSAtIGMubWluVHJhbnNsYXRlKCkpIC8gKHN3aXBlci5tYXhUcmFuc2xhdGUoKSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKSk7XG4gICAgICAgICAgY29udHJvbGxlZFRyYW5zbGF0ZSA9ICgodHJhbnNsYXRlIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSAqIG11bHRpcGxpZXIpICsgYy5taW5UcmFuc2xhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmNvbnRyb2xsZXIuaW52ZXJzZSkge1xuICAgICAgICAgIGNvbnRyb2xsZWRUcmFuc2xhdGUgPSBjLm1heFRyYW5zbGF0ZSgpIC0gY29udHJvbGxlZFRyYW5zbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBjLnVwZGF0ZVByb2dyZXNzKGNvbnRyb2xsZWRUcmFuc2xhdGUpO1xuICAgICAgICBjLnNldFRyYW5zbGF0ZShjb250cm9sbGVkVHJhbnNsYXRlLCBzd2lwZXIpO1xuICAgICAgICBjLnVwZGF0ZUFjdGl2ZUluZGV4KCk7XG4gICAgICAgIGMudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29udHJvbGxlZCkpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb250cm9sbGVkLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgaWYgKGNvbnRyb2xsZWRbaV0gIT09IGJ5Q29udHJvbGxlciAmJiBjb250cm9sbGVkW2ldIGluc3RhbmNlb2YgU3dpcGVyKSB7XG4gICAgICAgICAgICBzZXRDb250cm9sbGVkVHJhbnNsYXRlKGNvbnRyb2xsZWRbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb250cm9sbGVkIGluc3RhbmNlb2YgU3dpcGVyICYmIGJ5Q29udHJvbGxlciAhPT0gY29udHJvbGxlZCkge1xuICAgICAgICBzZXRDb250cm9sbGVkVHJhbnNsYXRlKGNvbnRyb2xsZWQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbiwgYnlDb250cm9sbGVyKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBjb250cm9sbGVkID0gc3dpcGVyLmNvbnRyb2xsZXIuY29udHJvbDtcbiAgICAgIHZhciBpO1xuICAgICAgZnVuY3Rpb24gc2V0Q29udHJvbGxlZFRyYW5zaXRpb24oYykge1xuICAgICAgICBjLnNldFRyYW5zaXRpb24oZHVyYXRpb24sIHN3aXBlcik7XG4gICAgICAgIGlmIChkdXJhdGlvbiAhPT0gMCkge1xuICAgICAgICAgIGMudHJhbnNpdGlvblN0YXJ0KCk7XG4gICAgICAgICAgaWYgKGMucGFyYW1zLmF1dG9IZWlnaHQpIHtcbiAgICAgICAgICAgIFV0aWxzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgYy51cGRhdGVBdXRvSGVpZ2h0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYy4kd3JhcHBlckVsLnRyYW5zaXRpb25FbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFjb250cm9sbGVkKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgaWYgKGMucGFyYW1zLmxvb3AgJiYgc3dpcGVyLnBhcmFtcy5jb250cm9sbGVyLmJ5ID09PSAnc2xpZGUnKSB7XG4gICAgICAgICAgICAgIGMubG9vcEZpeCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYy50cmFuc2l0aW9uRW5kKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2xsZWQpKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb250cm9sbGVkLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgaWYgKGNvbnRyb2xsZWRbaV0gIT09IGJ5Q29udHJvbGxlciAmJiBjb250cm9sbGVkW2ldIGluc3RhbmNlb2YgU3dpcGVyKSB7XG4gICAgICAgICAgICBzZXRDb250cm9sbGVkVHJhbnNpdGlvbihjb250cm9sbGVkW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29udHJvbGxlZCBpbnN0YW5jZW9mIFN3aXBlciAmJiBieUNvbnRyb2xsZXIgIT09IGNvbnRyb2xsZWQpIHtcbiAgICAgICAgc2V0Q29udHJvbGxlZFRyYW5zaXRpb24oY29udHJvbGxlZCk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbiAgdmFyIENvbnRyb2xsZXIkMSA9IHtcbiAgICBuYW1lOiAnY29udHJvbGxlcicsXG4gICAgcGFyYW1zOiB7XG4gICAgICBjb250cm9sbGVyOiB7XG4gICAgICAgIGNvbnRyb2w6IHVuZGVmaW5lZCxcbiAgICAgICAgaW52ZXJzZTogZmFsc2UsXG4gICAgICAgIGJ5OiAnc2xpZGUnLCAvLyBvciAnY29udGFpbmVyJ1xuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICAgIGNvbnRyb2xsZXI6IHtcbiAgICAgICAgICBjb250cm9sOiBzd2lwZXIucGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbCxcbiAgICAgICAgICBnZXRJbnRlcnBvbGF0ZUZ1bmN0aW9uOiBDb250cm9sbGVyLmdldEludGVycG9sYXRlRnVuY3Rpb24uYmluZChzd2lwZXIpLFxuICAgICAgICAgIHNldFRyYW5zbGF0ZTogQ29udHJvbGxlci5zZXRUcmFuc2xhdGUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIHNldFRyYW5zaXRpb246IENvbnRyb2xsZXIuc2V0VHJhbnNpdGlvbi5iaW5kKHN3aXBlciksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLmNvbnRyb2xsZXIuY29udHJvbCkgeyByZXR1cm47IH1cbiAgICAgICAgaWYgKHN3aXBlci5jb250cm9sbGVyLnNwbGluZSkge1xuICAgICAgICAgIHN3aXBlci5jb250cm9sbGVyLnNwbGluZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgc3dpcGVyLmNvbnRyb2xsZXIuc3BsaW5lO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcmVzaXplOiBmdW5jdGlvbiByZXNpemUoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci5jb250cm9sbGVyLmNvbnRyb2wpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmIChzd2lwZXIuY29udHJvbGxlci5zcGxpbmUpIHtcbiAgICAgICAgICBzd2lwZXIuY29udHJvbGxlci5zcGxpbmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIHN3aXBlci5jb250cm9sbGVyLnNwbGluZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9ic2VydmVyVXBkYXRlOiBmdW5jdGlvbiBvYnNlcnZlclVwZGF0ZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLmNvbnRyb2xsZXIuY29udHJvbCkgeyByZXR1cm47IH1cbiAgICAgICAgaWYgKHN3aXBlci5jb250cm9sbGVyLnNwbGluZSkge1xuICAgICAgICAgIHN3aXBlci5jb250cm9sbGVyLnNwbGluZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgc3dpcGVyLmNvbnRyb2xsZXIuc3BsaW5lO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUodHJhbnNsYXRlLCBieUNvbnRyb2xsZXIpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLmNvbnRyb2xsZXIuY29udHJvbCkgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLmNvbnRyb2xsZXIuc2V0VHJhbnNsYXRlKHRyYW5zbGF0ZSwgYnlDb250cm9sbGVyKTtcbiAgICAgIH0sXG4gICAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uLCBieUNvbnRyb2xsZXIpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLmNvbnRyb2xsZXIuY29udHJvbCkgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLmNvbnRyb2xsZXIuc2V0VHJhbnNpdGlvbihkdXJhdGlvbiwgYnlDb250cm9sbGVyKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICB2YXIgYTExeSA9IHtcbiAgICBtYWtlRWxGb2N1c2FibGU6IGZ1bmN0aW9uIG1ha2VFbEZvY3VzYWJsZSgkZWwpIHtcbiAgICAgICRlbC5hdHRyKCd0YWJJbmRleCcsICcwJyk7XG4gICAgICByZXR1cm4gJGVsO1xuICAgIH0sXG4gICAgYWRkRWxSb2xlOiBmdW5jdGlvbiBhZGRFbFJvbGUoJGVsLCByb2xlKSB7XG4gICAgICAkZWwuYXR0cigncm9sZScsIHJvbGUpO1xuICAgICAgcmV0dXJuICRlbDtcbiAgICB9LFxuICAgIGFkZEVsTGFiZWw6IGZ1bmN0aW9uIGFkZEVsTGFiZWwoJGVsLCBsYWJlbCkge1xuICAgICAgJGVsLmF0dHIoJ2FyaWEtbGFiZWwnLCBsYWJlbCk7XG4gICAgICByZXR1cm4gJGVsO1xuICAgIH0sXG4gICAgZGlzYWJsZUVsOiBmdW5jdGlvbiBkaXNhYmxlRWwoJGVsKSB7XG4gICAgICAkZWwuYXR0cignYXJpYS1kaXNhYmxlZCcsIHRydWUpO1xuICAgICAgcmV0dXJuICRlbDtcbiAgICB9LFxuICAgIGVuYWJsZUVsOiBmdW5jdGlvbiBlbmFibGVFbCgkZWwpIHtcbiAgICAgICRlbC5hdHRyKCdhcmlhLWRpc2FibGVkJywgZmFsc2UpO1xuICAgICAgcmV0dXJuICRlbDtcbiAgICB9LFxuICAgIG9uRW50ZXJLZXk6IGZ1bmN0aW9uIG9uRW50ZXJLZXkoZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5hMTF5O1xuICAgICAgaWYgKGUua2V5Q29kZSAhPT0gMTMpIHsgcmV0dXJuOyB9XG4gICAgICB2YXIgJHRhcmdldEVsID0gJChlLnRhcmdldCk7XG4gICAgICBpZiAoc3dpcGVyLm5hdmlnYXRpb24gJiYgc3dpcGVyLm5hdmlnYXRpb24uJG5leHRFbCAmJiAkdGFyZ2V0RWwuaXMoc3dpcGVyLm5hdmlnYXRpb24uJG5leHRFbCkpIHtcbiAgICAgICAgaWYgKCEoc3dpcGVyLmlzRW5kICYmICFzd2lwZXIucGFyYW1zLmxvb3ApKSB7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlTmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzd2lwZXIuaXNFbmQpIHtcbiAgICAgICAgICBzd2lwZXIuYTExeS5ub3RpZnkocGFyYW1zLmxhc3RTbGlkZU1lc3NhZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN3aXBlci5hMTF5Lm5vdGlmeShwYXJhbXMubmV4dFNsaWRlTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzd2lwZXIubmF2aWdhdGlvbiAmJiBzd2lwZXIubmF2aWdhdGlvbi4kcHJldkVsICYmICR0YXJnZXRFbC5pcyhzd2lwZXIubmF2aWdhdGlvbi4kcHJldkVsKSkge1xuICAgICAgICBpZiAoIShzd2lwZXIuaXNCZWdpbm5pbmcgJiYgIXN3aXBlci5wYXJhbXMubG9vcCkpIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVQcmV2KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN3aXBlci5pc0JlZ2lubmluZykge1xuICAgICAgICAgIHN3aXBlci5hMTF5Lm5vdGlmeShwYXJhbXMuZmlyc3RTbGlkZU1lc3NhZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN3aXBlci5hMTF5Lm5vdGlmeShwYXJhbXMucHJldlNsaWRlTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzd2lwZXIucGFnaW5hdGlvbiAmJiAkdGFyZ2V0RWwuaXMoKFwiLlwiICsgKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5idWxsZXRDbGFzcykpKSkge1xuICAgICAgICAkdGFyZ2V0RWxbMF0uY2xpY2soKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG5vdGlmeTogZnVuY3Rpb24gbm90aWZ5KG1lc3NhZ2UpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIG5vdGlmaWNhdGlvbiA9IHN3aXBlci5hMTF5LmxpdmVSZWdpb247XG4gICAgICBpZiAobm90aWZpY2F0aW9uLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cbiAgICAgIG5vdGlmaWNhdGlvbi5odG1sKCcnKTtcbiAgICAgIG5vdGlmaWNhdGlvbi5odG1sKG1lc3NhZ2UpO1xuICAgIH0sXG4gICAgdXBkYXRlTmF2aWdhdGlvbjogZnVuY3Rpb24gdXBkYXRlTmF2aWdhdGlvbigpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wIHx8ICFzd2lwZXIubmF2aWdhdGlvbikgeyByZXR1cm47IH1cbiAgICAgIHZhciByZWYgPSBzd2lwZXIubmF2aWdhdGlvbjtcbiAgICAgIHZhciAkbmV4dEVsID0gcmVmLiRuZXh0RWw7XG4gICAgICB2YXIgJHByZXZFbCA9IHJlZi4kcHJldkVsO1xuXG4gICAgICBpZiAoJHByZXZFbCAmJiAkcHJldkVsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHN3aXBlci5pc0JlZ2lubmluZykge1xuICAgICAgICAgIHN3aXBlci5hMTF5LmRpc2FibGVFbCgkcHJldkVsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuYTExeS5lbmFibGVFbCgkcHJldkVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCRuZXh0RWwgJiYgJG5leHRFbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChzd2lwZXIuaXNFbmQpIHtcbiAgICAgICAgICBzd2lwZXIuYTExeS5kaXNhYmxlRWwoJG5leHRFbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3dpcGVyLmExMXkuZW5hYmxlRWwoJG5leHRFbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHVwZGF0ZVBhZ2luYXRpb246IGZ1bmN0aW9uIHVwZGF0ZVBhZ2luYXRpb24oKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLmExMXk7XG4gICAgICBpZiAoc3dpcGVyLnBhZ2luYXRpb24gJiYgc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmNsaWNrYWJsZSAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzICYmIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMubGVuZ3RoKSB7XG4gICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMuZWFjaChmdW5jdGlvbiAoYnVsbGV0SW5kZXgsIGJ1bGxldEVsKSB7XG4gICAgICAgICAgdmFyICRidWxsZXRFbCA9ICQoYnVsbGV0RWwpO1xuICAgICAgICAgIHN3aXBlci5hMTF5Lm1ha2VFbEZvY3VzYWJsZSgkYnVsbGV0RWwpO1xuICAgICAgICAgIHN3aXBlci5hMTF5LmFkZEVsUm9sZSgkYnVsbGV0RWwsICdidXR0b24nKTtcbiAgICAgICAgICBzd2lwZXIuYTExeS5hZGRFbExhYmVsKCRidWxsZXRFbCwgcGFyYW1zLnBhZ2luYXRpb25CdWxsZXRNZXNzYWdlLnJlcGxhY2UoL3t7aW5kZXh9fS8sICRidWxsZXRFbC5pbmRleCgpICsgMSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcblxuICAgICAgc3dpcGVyLiRlbC5hcHBlbmQoc3dpcGVyLmExMXkubGl2ZVJlZ2lvbik7XG5cbiAgICAgIC8vIE5hdmlnYXRpb25cbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLmExMXk7XG4gICAgICB2YXIgJG5leHRFbDtcbiAgICAgIHZhciAkcHJldkVsO1xuICAgICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uICYmIHN3aXBlci5uYXZpZ2F0aW9uLiRuZXh0RWwpIHtcbiAgICAgICAgJG5leHRFbCA9IHN3aXBlci5uYXZpZ2F0aW9uLiRuZXh0RWw7XG4gICAgICB9XG4gICAgICBpZiAoc3dpcGVyLm5hdmlnYXRpb24gJiYgc3dpcGVyLm5hdmlnYXRpb24uJHByZXZFbCkge1xuICAgICAgICAkcHJldkVsID0gc3dpcGVyLm5hdmlnYXRpb24uJHByZXZFbDtcbiAgICAgIH1cbiAgICAgIGlmICgkbmV4dEVsKSB7XG4gICAgICAgIHN3aXBlci5hMTF5Lm1ha2VFbEZvY3VzYWJsZSgkbmV4dEVsKTtcbiAgICAgICAgc3dpcGVyLmExMXkuYWRkRWxSb2xlKCRuZXh0RWwsICdidXR0b24nKTtcbiAgICAgICAgc3dpcGVyLmExMXkuYWRkRWxMYWJlbCgkbmV4dEVsLCBwYXJhbXMubmV4dFNsaWRlTWVzc2FnZSk7XG4gICAgICAgICRuZXh0RWwub24oJ2tleWRvd24nLCBzd2lwZXIuYTExeS5vbkVudGVyS2V5KTtcbiAgICAgIH1cbiAgICAgIGlmICgkcHJldkVsKSB7XG4gICAgICAgIHN3aXBlci5hMTF5Lm1ha2VFbEZvY3VzYWJsZSgkcHJldkVsKTtcbiAgICAgICAgc3dpcGVyLmExMXkuYWRkRWxSb2xlKCRwcmV2RWwsICdidXR0b24nKTtcbiAgICAgICAgc3dpcGVyLmExMXkuYWRkRWxMYWJlbCgkcHJldkVsLCBwYXJhbXMucHJldlNsaWRlTWVzc2FnZSk7XG4gICAgICAgICRwcmV2RWwub24oJ2tleWRvd24nLCBzd2lwZXIuYTExeS5vbkVudGVyS2V5KTtcbiAgICAgIH1cblxuICAgICAgLy8gUGFnaW5hdGlvblxuICAgICAgaWYgKHN3aXBlci5wYWdpbmF0aW9uICYmIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5jbGlja2FibGUgJiYgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cyAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzLmxlbmd0aCkge1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi4kZWwub24oJ2tleWRvd24nLCAoXCIuXCIgKyAoc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmJ1bGxldENsYXNzKSksIHN3aXBlci5hMTF5Lm9uRW50ZXJLZXkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5hMTF5LmxpdmVSZWdpb24gJiYgc3dpcGVyLmExMXkubGl2ZVJlZ2lvbi5sZW5ndGggPiAwKSB7IHN3aXBlci5hMTF5LmxpdmVSZWdpb24ucmVtb3ZlKCk7IH1cblxuICAgICAgdmFyICRuZXh0RWw7XG4gICAgICB2YXIgJHByZXZFbDtcbiAgICAgIGlmIChzd2lwZXIubmF2aWdhdGlvbiAmJiBzd2lwZXIubmF2aWdhdGlvbi4kbmV4dEVsKSB7XG4gICAgICAgICRuZXh0RWwgPSBzd2lwZXIubmF2aWdhdGlvbi4kbmV4dEVsO1xuICAgICAgfVxuICAgICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uICYmIHN3aXBlci5uYXZpZ2F0aW9uLiRwcmV2RWwpIHtcbiAgICAgICAgJHByZXZFbCA9IHN3aXBlci5uYXZpZ2F0aW9uLiRwcmV2RWw7XG4gICAgICB9XG4gICAgICBpZiAoJG5leHRFbCkge1xuICAgICAgICAkbmV4dEVsLm9mZigna2V5ZG93bicsIHN3aXBlci5hMTF5Lm9uRW50ZXJLZXkpO1xuICAgICAgfVxuICAgICAgaWYgKCRwcmV2RWwpIHtcbiAgICAgICAgJHByZXZFbC5vZmYoJ2tleWRvd24nLCBzd2lwZXIuYTExeS5vbkVudGVyS2V5KTtcbiAgICAgIH1cblxuICAgICAgLy8gUGFnaW5hdGlvblxuICAgICAgaWYgKHN3aXBlci5wYWdpbmF0aW9uICYmIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5jbGlja2FibGUgJiYgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cyAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzLmxlbmd0aCkge1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi4kZWwub2ZmKCdrZXlkb3duJywgKFwiLlwiICsgKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5idWxsZXRDbGFzcykpLCBzd2lwZXIuYTExeS5vbkVudGVyS2V5KTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuICB2YXIgQTExeSA9IHtcbiAgICBuYW1lOiAnYTExeScsXG4gICAgcGFyYW1zOiB7XG4gICAgICBhMTF5OiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIG5vdGlmaWNhdGlvbkNsYXNzOiAnc3dpcGVyLW5vdGlmaWNhdGlvbicsXG4gICAgICAgIHByZXZTbGlkZU1lc3NhZ2U6ICdQcmV2aW91cyBzbGlkZScsXG4gICAgICAgIG5leHRTbGlkZU1lc3NhZ2U6ICdOZXh0IHNsaWRlJyxcbiAgICAgICAgZmlyc3RTbGlkZU1lc3NhZ2U6ICdUaGlzIGlzIHRoZSBmaXJzdCBzbGlkZScsXG4gICAgICAgIGxhc3RTbGlkZU1lc3NhZ2U6ICdUaGlzIGlzIHRoZSBsYXN0IHNsaWRlJyxcbiAgICAgICAgcGFnaW5hdGlvbkJ1bGxldE1lc3NhZ2U6ICdHbyB0byBzbGlkZSB7e2luZGV4fX0nLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICAgIGExMXk6IHtcbiAgICAgICAgICBsaXZlUmVnaW9uOiAkKChcIjxzcGFuIGNsYXNzPVxcXCJcIiArIChzd2lwZXIucGFyYW1zLmExMXkubm90aWZpY2F0aW9uQ2xhc3MpICsgXCJcXFwiIGFyaWEtbGl2ZT1cXFwiYXNzZXJ0aXZlXFxcIiBhcmlhLWF0b21pYz1cXFwidHJ1ZVxcXCI+PC9zcGFuPlwiKSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5rZXlzKGExMXkpLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZE5hbWUpIHtcbiAgICAgICAgc3dpcGVyLmExMXlbbWV0aG9kTmFtZV0gPSBhMTF5W21ldGhvZE5hbWVdLmJpbmQoc3dpcGVyKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMuYTExeS5lbmFibGVkKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIuYTExeS5pbml0KCk7XG4gICAgICAgIHN3aXBlci5hMTF5LnVwZGF0ZU5hdmlnYXRpb24oKTtcbiAgICAgIH0sXG4gICAgICB0b0VkZ2U6IGZ1bmN0aW9uIHRvRWRnZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5hMTF5LmVuYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5hMTF5LnVwZGF0ZU5hdmlnYXRpb24oKTtcbiAgICAgIH0sXG4gICAgICBmcm9tRWRnZTogZnVuY3Rpb24gZnJvbUVkZ2UoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMuYTExeS5lbmFibGVkKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIuYTExeS51cGRhdGVOYXZpZ2F0aW9uKCk7XG4gICAgICB9LFxuICAgICAgcGFnaW5hdGlvblVwZGF0ZTogZnVuY3Rpb24gcGFnaW5hdGlvblVwZGF0ZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5hMTF5LmVuYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5hMTF5LnVwZGF0ZVBhZ2luYXRpb24oKTtcbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLmExMXkuZW5hYmxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLmExMXkuZGVzdHJveSgpO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHZhciBIaXN0b3J5ID0ge1xuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5oaXN0b3J5KSB7IHJldHVybjsgfVxuICAgICAgaWYgKCF3aW4uaGlzdG9yeSB8fCAhd2luLmhpc3RvcnkucHVzaFN0YXRlKSB7XG4gICAgICAgIHN3aXBlci5wYXJhbXMuaGlzdG9yeS5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgIHN3aXBlci5wYXJhbXMuaGFzaE5hdmlnYXRpb24uZW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBoaXN0b3J5ID0gc3dpcGVyLmhpc3Rvcnk7XG4gICAgICBoaXN0b3J5LmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIGhpc3RvcnkucGF0aHMgPSBIaXN0b3J5LmdldFBhdGhWYWx1ZXMoKTtcbiAgICAgIGlmICghaGlzdG9yeS5wYXRocy5rZXkgJiYgIWhpc3RvcnkucGF0aHMudmFsdWUpIHsgcmV0dXJuOyB9XG4gICAgICBoaXN0b3J5LnNjcm9sbFRvU2xpZGUoMCwgaGlzdG9yeS5wYXRocy52YWx1ZSwgc3dpcGVyLnBhcmFtcy5ydW5DYWxsYmFja3NPbkluaXQpO1xuICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLmhpc3RvcnkucmVwbGFjZVN0YXRlKSB7XG4gICAgICAgIHdpbi5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIHN3aXBlci5oaXN0b3J5LnNldEhpc3RvcnlQb3BTdGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMuaGlzdG9yeS5yZXBsYWNlU3RhdGUpIHtcbiAgICAgICAgd2luLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgc3dpcGVyLmhpc3Rvcnkuc2V0SGlzdG9yeVBvcFN0YXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldEhpc3RvcnlQb3BTdGF0ZTogZnVuY3Rpb24gc2V0SGlzdG9yeVBvcFN0YXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBzd2lwZXIuaGlzdG9yeS5wYXRocyA9IEhpc3RvcnkuZ2V0UGF0aFZhbHVlcygpO1xuICAgICAgc3dpcGVyLmhpc3Rvcnkuc2Nyb2xsVG9TbGlkZShzd2lwZXIucGFyYW1zLnNwZWVkLCBzd2lwZXIuaGlzdG9yeS5wYXRocy52YWx1ZSwgZmFsc2UpO1xuICAgIH0sXG4gICAgZ2V0UGF0aFZhbHVlczogZnVuY3Rpb24gZ2V0UGF0aFZhbHVlcygpIHtcbiAgICAgIHZhciBwYXRoQXJyYXkgPSB3aW4ubG9jYXRpb24ucGF0aG5hbWUuc2xpY2UoMSkuc3BsaXQoJy8nKS5maWx0ZXIoZnVuY3Rpb24gKHBhcnQpIHsgcmV0dXJuIHBhcnQgIT09ICcnOyB9KTtcbiAgICAgIHZhciB0b3RhbCA9IHBhdGhBcnJheS5sZW5ndGg7XG4gICAgICB2YXIga2V5ID0gcGF0aEFycmF5W3RvdGFsIC0gMl07XG4gICAgICB2YXIgdmFsdWUgPSBwYXRoQXJyYXlbdG90YWwgLSAxXTtcbiAgICAgIHJldHVybiB7IGtleToga2V5LCB2YWx1ZTogdmFsdWUgfTtcbiAgICB9LFxuICAgIHNldEhpc3Rvcnk6IGZ1bmN0aW9uIHNldEhpc3Rvcnkoa2V5LCBpbmRleCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5oaXN0b3J5LmluaXRpYWxpemVkIHx8ICFzd2lwZXIucGFyYW1zLmhpc3RvcnkuZW5hYmxlZCkgeyByZXR1cm47IH1cbiAgICAgIHZhciBzbGlkZSA9IHN3aXBlci5zbGlkZXMuZXEoaW5kZXgpO1xuICAgICAgdmFyIHZhbHVlID0gSGlzdG9yeS5zbHVnaWZ5KHNsaWRlLmF0dHIoJ2RhdGEtaGlzdG9yeScpKTtcbiAgICAgIGlmICghd2luLmxvY2F0aW9uLnBhdGhuYW1lLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgdmFsdWUgPSBrZXkgKyBcIi9cIiArIHZhbHVlO1xuICAgICAgfVxuICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHdpbi5oaXN0b3J5LnN0YXRlO1xuICAgICAgaWYgKGN1cnJlbnRTdGF0ZSAmJiBjdXJyZW50U3RhdGUudmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmhpc3RvcnkucmVwbGFjZVN0YXRlKSB7XG4gICAgICAgIHdpbi5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7IHZhbHVlOiB2YWx1ZSB9LCBudWxsLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aW4uaGlzdG9yeS5wdXNoU3RhdGUoeyB2YWx1ZTogdmFsdWUgfSwgbnVsbCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2x1Z2lmeTogZnVuY3Rpb24gc2x1Z2lmeSh0ZXh0KSB7XG4gICAgICByZXR1cm4gdGV4dC50b1N0cmluZygpXG4gICAgICAgIC5yZXBsYWNlKC9cXHMrL2csICctJylcbiAgICAgICAgLnJlcGxhY2UoL1teXFx3LV0rL2csICcnKVxuICAgICAgICAucmVwbGFjZSgvLS0rL2csICctJylcbiAgICAgICAgLnJlcGxhY2UoL14tKy8sICcnKVxuICAgICAgICAucmVwbGFjZSgvLSskLywgJycpO1xuICAgIH0sXG4gICAgc2Nyb2xsVG9TbGlkZTogZnVuY3Rpb24gc2Nyb2xsVG9TbGlkZShzcGVlZCwgdmFsdWUsIHJ1bkNhbGxiYWNrcykge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHN3aXBlci5zbGlkZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICB2YXIgc2xpZGUgPSBzd2lwZXIuc2xpZGVzLmVxKGkpO1xuICAgICAgICAgIHZhciBzbGlkZUhpc3RvcnkgPSBIaXN0b3J5LnNsdWdpZnkoc2xpZGUuYXR0cignZGF0YS1oaXN0b3J5JykpO1xuICAgICAgICAgIGlmIChzbGlkZUhpc3RvcnkgPT09IHZhbHVlICYmICFzbGlkZS5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKSB7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBzbGlkZS5pbmRleCgpO1xuICAgICAgICAgICAgc3dpcGVyLnNsaWRlVG8oaW5kZXgsIHNwZWVkLCBydW5DYWxsYmFja3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oMCwgc3BlZWQsIHJ1bkNhbGxiYWNrcyk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICB2YXIgSGlzdG9yeSQxID0ge1xuICAgIG5hbWU6ICdoaXN0b3J5JyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIGhpc3Rvcnk6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHJlcGxhY2VTdGF0ZTogZmFsc2UsXG4gICAgICAgIGtleTogJ3NsaWRlcycsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgaGlzdG9yeToge1xuICAgICAgICAgIGluaXQ6IEhpc3RvcnkuaW5pdC5iaW5kKHN3aXBlciksXG4gICAgICAgICAgc2V0SGlzdG9yeTogSGlzdG9yeS5zZXRIaXN0b3J5LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzZXRIaXN0b3J5UG9wU3RhdGU6IEhpc3Rvcnkuc2V0SGlzdG9yeVBvcFN0YXRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzY3JvbGxUb1NsaWRlOiBIaXN0b3J5LnNjcm9sbFRvU2xpZGUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIGRlc3Ryb3k6IEhpc3RvcnkuZGVzdHJveS5iaW5kKHN3aXBlciksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuaGlzdG9yeS5lbmFibGVkKSB7XG4gICAgICAgICAgc3dpcGVyLmhpc3RvcnkuaW5pdCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmhpc3RvcnkuZW5hYmxlZCkge1xuICAgICAgICAgIHN3aXBlci5oaXN0b3J5LmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRyYW5zaXRpb25FbmQ6IGZ1bmN0aW9uIHRyYW5zaXRpb25FbmQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLmhpc3RvcnkuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICBzd2lwZXIuaGlzdG9yeS5zZXRIaXN0b3J5KHN3aXBlci5wYXJhbXMuaGlzdG9yeS5rZXksIHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzbGlkZUNoYW5nZTogZnVuY3Rpb24gc2xpZGVDaGFuZ2UoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLmhpc3RvcnkuaW5pdGlhbGl6ZWQgJiYgc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICAgICAgc3dpcGVyLmhpc3Rvcnkuc2V0SGlzdG9yeShzd2lwZXIucGFyYW1zLmhpc3Rvcnkua2V5LCBzd2lwZXIuYWN0aXZlSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgdmFyIEhhc2hOYXZpZ2F0aW9uID0ge1xuICAgIG9uSGFzaENhbmdlOiBmdW5jdGlvbiBvbkhhc2hDYW5nZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIG5ld0hhc2ggPSBkb2MubG9jYXRpb24uaGFzaC5yZXBsYWNlKCcjJywgJycpO1xuICAgICAgdmFyIGFjdGl2ZVNsaWRlSGFzaCA9IHN3aXBlci5zbGlkZXMuZXEoc3dpcGVyLmFjdGl2ZUluZGV4KS5hdHRyKCdkYXRhLWhhc2gnKTtcbiAgICAgIGlmIChuZXdIYXNoICE9PSBhY3RpdmVTbGlkZUhhc2gpIHtcbiAgICAgICAgdmFyIG5ld0luZGV4ID0gc3dpcGVyLiR3cmFwcGVyRWwuY2hpbGRyZW4oKFwiLlwiICsgKHN3aXBlci5wYXJhbXMuc2xpZGVDbGFzcykgKyBcIltkYXRhLWhhc2g9XFxcIlwiICsgbmV3SGFzaCArIFwiXFxcIl1cIikpLmluZGV4KCk7XG4gICAgICAgIGlmICh0eXBlb2YgbmV3SW5kZXggPT09ICd1bmRlZmluZWQnKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIuc2xpZGVUbyhuZXdJbmRleCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXRIYXNoOiBmdW5jdGlvbiBzZXRIYXNoKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5oYXNoTmF2aWdhdGlvbi5pbml0aWFsaXplZCB8fCAhc3dpcGVyLnBhcmFtcy5oYXNoTmF2aWdhdGlvbi5lbmFibGVkKSB7IHJldHVybjsgfVxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuaGFzaE5hdmlnYXRpb24ucmVwbGFjZVN0YXRlICYmIHdpbi5oaXN0b3J5ICYmIHdpbi5oaXN0b3J5LnJlcGxhY2VTdGF0ZSkge1xuICAgICAgICB3aW4uaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgbnVsbCwgKChcIiNcIiArIChzd2lwZXIuc2xpZGVzLmVxKHN3aXBlci5hY3RpdmVJbmRleCkuYXR0cignZGF0YS1oYXNoJykpKSB8fCAnJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHNsaWRlID0gc3dpcGVyLnNsaWRlcy5lcShzd2lwZXIuYWN0aXZlSW5kZXgpO1xuICAgICAgICB2YXIgaGFzaCA9IHNsaWRlLmF0dHIoJ2RhdGEtaGFzaCcpIHx8IHNsaWRlLmF0dHIoJ2RhdGEtaGlzdG9yeScpO1xuICAgICAgICBkb2MubG9jYXRpb24uaGFzaCA9IGhhc2ggfHwgJyc7XG4gICAgICB9XG4gICAgfSxcbiAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMuaGFzaE5hdmlnYXRpb24uZW5hYmxlZCB8fCAoc3dpcGVyLnBhcmFtcy5oaXN0b3J5ICYmIHN3aXBlci5wYXJhbXMuaGlzdG9yeS5lbmFibGVkKSkgeyByZXR1cm47IH1cbiAgICAgIHN3aXBlci5oYXNoTmF2aWdhdGlvbi5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgICB2YXIgaGFzaCA9IGRvYy5sb2NhdGlvbi5oYXNoLnJlcGxhY2UoJyMnLCAnJyk7XG4gICAgICBpZiAoaGFzaCkge1xuICAgICAgICB2YXIgc3BlZWQgPSAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gc3dpcGVyLnNsaWRlcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgIHZhciBzbGlkZSA9IHN3aXBlci5zbGlkZXMuZXEoaSk7XG4gICAgICAgICAgdmFyIHNsaWRlSGFzaCA9IHNsaWRlLmF0dHIoJ2RhdGEtaGFzaCcpIHx8IHNsaWRlLmF0dHIoJ2RhdGEtaGlzdG9yeScpO1xuICAgICAgICAgIGlmIChzbGlkZUhhc2ggPT09IGhhc2ggJiYgIXNsaWRlLmhhc0NsYXNzKHN3aXBlci5wYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpIHtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IHNsaWRlLmluZGV4KCk7XG4gICAgICAgICAgICBzd2lwZXIuc2xpZGVUbyhpbmRleCwgc3BlZWQsIHN3aXBlci5wYXJhbXMucnVuQ2FsbGJhY2tzT25Jbml0LCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmhhc2hOYXZpZ2F0aW9uLndhdGNoU3RhdGUpIHtcbiAgICAgICAgJCh3aW4pLm9uKCdoYXNoY2hhbmdlJywgc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLm9uSGFzaENhbmdlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmhhc2hOYXZpZ2F0aW9uLndhdGNoU3RhdGUpIHtcbiAgICAgICAgJCh3aW4pLm9mZignaGFzaGNoYW5nZScsIHN3aXBlci5oYXNoTmF2aWdhdGlvbi5vbkhhc2hDYW5nZSk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbiAgdmFyIEhhc2hOYXZpZ2F0aW9uJDEgPSB7XG4gICAgbmFtZTogJ2hhc2gtbmF2aWdhdGlvbicsXG4gICAgcGFyYW1zOiB7XG4gICAgICBoYXNoTmF2aWdhdGlvbjoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgcmVwbGFjZVN0YXRlOiBmYWxzZSxcbiAgICAgICAgd2F0Y2hTdGF0ZTogZmFsc2UsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgaGFzaE5hdmlnYXRpb246IHtcbiAgICAgICAgICBpbml0aWFsaXplZDogZmFsc2UsXG4gICAgICAgICAgaW5pdDogSGFzaE5hdmlnYXRpb24uaW5pdC5iaW5kKHN3aXBlciksXG4gICAgICAgICAgZGVzdHJveTogSGFzaE5hdmlnYXRpb24uZGVzdHJveS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgc2V0SGFzaDogSGFzaE5hdmlnYXRpb24uc2V0SGFzaC5iaW5kKHN3aXBlciksXG4gICAgICAgICAgb25IYXNoQ2FuZ2U6IEhhc2hOYXZpZ2F0aW9uLm9uSGFzaENhbmdlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5oYXNoTmF2aWdhdGlvbi5lbmFibGVkKSB7XG4gICAgICAgICAgc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLmluaXQoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5oYXNoTmF2aWdhdGlvbi5lbmFibGVkKSB7XG4gICAgICAgICAgc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRyYW5zaXRpb25FbmQ6IGZ1bmN0aW9uIHRyYW5zaXRpb25FbmQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLnNldEhhc2goKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNsaWRlQ2hhbmdlOiBmdW5jdGlvbiBzbGlkZUNoYW5nZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIuaGFzaE5hdmlnYXRpb24uaW5pdGlhbGl6ZWQgJiYgc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICAgICAgc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLnNldEhhc2goKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIC8qIGVzbGludCBuby11bmRlcnNjb3JlLWRhbmdsZTogXCJvZmZcIiAqL1xuXG4gIHZhciBBdXRvcGxheSA9IHtcbiAgICBydW46IGZ1bmN0aW9uIHJ1bigpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyICRhY3RpdmVTbGlkZUVsID0gc3dpcGVyLnNsaWRlcy5lcShzd2lwZXIuYWN0aXZlSW5kZXgpO1xuICAgICAgdmFyIGRlbGF5ID0gc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5kZWxheTtcbiAgICAgIGlmICgkYWN0aXZlU2xpZGVFbC5hdHRyKCdkYXRhLXN3aXBlci1hdXRvcGxheScpKSB7XG4gICAgICAgIGRlbGF5ID0gJGFjdGl2ZVNsaWRlRWwuYXR0cignZGF0YS1zd2lwZXItYXV0b3BsYXknKSB8fCBzd2lwZXIucGFyYW1zLmF1dG9wbGF5LmRlbGF5O1xuICAgICAgfVxuICAgICAgY2xlYXJUaW1lb3V0KHN3aXBlci5hdXRvcGxheS50aW1lb3V0KTtcbiAgICAgIHN3aXBlci5hdXRvcGxheS50aW1lb3V0ID0gVXRpbHMubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5yZXZlcnNlRGlyZWN0aW9uKSB7XG4gICAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgICAgICAgIHN3aXBlci5zbGlkZVByZXYoc3dpcGVyLnBhcmFtcy5zcGVlZCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICBzd2lwZXIuZW1pdCgnYXV0b3BsYXknKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFzd2lwZXIuaXNCZWdpbm5pbmcpIHtcbiAgICAgICAgICAgIHN3aXBlci5zbGlkZVByZXYoc3dpcGVyLnBhcmFtcy5zcGVlZCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICBzd2lwZXIuZW1pdCgnYXV0b3BsYXknKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFzd2lwZXIucGFyYW1zLmF1dG9wbGF5LnN0b3BPbkxhc3RTbGlkZSkge1xuICAgICAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLnNsaWRlcy5sZW5ndGggLSAxLCBzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCdhdXRvcGxheScpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkuc3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgICAgIHN3aXBlci5zbGlkZU5leHQoc3dpcGVyLnBhcmFtcy5zcGVlZCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXN3aXBlci5pc0VuZCkge1xuICAgICAgICAgIHN3aXBlci5zbGlkZU5leHQoc3dpcGVyLnBhcmFtcy5zcGVlZCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXN3aXBlci5wYXJhbXMuYXV0b3BsYXkuc3RvcE9uTGFzdFNsaWRlKSB7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlVG8oMCwgc3dpcGVyLnBhcmFtcy5zcGVlZCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5jc3NNb2RlICYmIHN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSB7IHN3aXBlci5hdXRvcGxheS5ydW4oKTsgfVxuICAgICAgfSwgZGVsYXkpO1xuICAgIH0sXG4gICAgc3RhcnQ6IGZ1bmN0aW9uIHN0YXJ0KCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIHN3aXBlci5hdXRvcGxheS50aW1lb3V0ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgIGlmIChzd2lwZXIuYXV0b3BsYXkucnVubmluZykgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgIHN3aXBlci5hdXRvcGxheS5ydW5uaW5nID0gdHJ1ZTtcbiAgICAgIHN3aXBlci5lbWl0KCdhdXRvcGxheVN0YXJ0Jyk7XG4gICAgICBzd2lwZXIuYXV0b3BsYXkucnVuKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICBpZiAodHlwZW9mIHN3aXBlci5hdXRvcGxheS50aW1lb3V0ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblxuICAgICAgaWYgKHN3aXBlci5hdXRvcGxheS50aW1lb3V0KSB7XG4gICAgICAgIGNsZWFyVGltZW91dChzd2lwZXIuYXV0b3BsYXkudGltZW91dCk7XG4gICAgICAgIHN3aXBlci5hdXRvcGxheS50aW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcgPSBmYWxzZTtcbiAgICAgIHN3aXBlci5lbWl0KCdhdXRvcGxheVN0b3AnKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgcGF1c2U6IGZ1bmN0aW9uIHBhdXNlKHNwZWVkKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcpIHsgcmV0dXJuOyB9XG4gICAgICBpZiAoc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCkgeyByZXR1cm47IH1cbiAgICAgIGlmIChzd2lwZXIuYXV0b3BsYXkudGltZW91dCkgeyBjbGVhclRpbWVvdXQoc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQpOyB9XG4gICAgICBzd2lwZXIuYXV0b3BsYXkucGF1c2VkID0gdHJ1ZTtcbiAgICAgIGlmIChzcGVlZCA9PT0gMCB8fCAhc3dpcGVyLnBhcmFtcy5hdXRvcGxheS53YWl0Rm9yVHJhbnNpdGlvbikge1xuICAgICAgICBzd2lwZXIuYXV0b3BsYXkucGF1c2VkID0gZmFsc2U7XG4gICAgICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBzd2lwZXIuYXV0b3BsYXkub25UcmFuc2l0aW9uRW5kKTtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0uYWRkRXZlbnRMaXN0ZW5lcignd2Via2l0VHJhbnNpdGlvbkVuZCcsIHN3aXBlci5hdXRvcGxheS5vblRyYW5zaXRpb25FbmQpO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG5cbiAgdmFyIEF1dG9wbGF5JDEgPSB7XG4gICAgbmFtZTogJ2F1dG9wbGF5JyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIGF1dG9wbGF5OiB7XG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBkZWxheTogMzAwMCxcbiAgICAgICAgd2FpdEZvclRyYW5zaXRpb246IHRydWUsXG4gICAgICAgIGRpc2FibGVPbkludGVyYWN0aW9uOiB0cnVlLFxuICAgICAgICBzdG9wT25MYXN0U2xpZGU6IGZhbHNlLFxuICAgICAgICByZXZlcnNlRGlyZWN0aW9uOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICBhdXRvcGxheToge1xuICAgICAgICAgIHJ1bm5pbmc6IGZhbHNlLFxuICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgICAgcnVuOiBBdXRvcGxheS5ydW4uYmluZChzd2lwZXIpLFxuICAgICAgICAgIHN0YXJ0OiBBdXRvcGxheS5zdGFydC5iaW5kKHN3aXBlciksXG4gICAgICAgICAgc3RvcDogQXV0b3BsYXkuc3RvcC5iaW5kKHN3aXBlciksXG4gICAgICAgICAgcGF1c2U6IEF1dG9wbGF5LnBhdXNlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBvblZpc2liaWxpdHlDaGFuZ2U6IGZ1bmN0aW9uIG9uVmlzaWJpbGl0eUNoYW5nZSgpIHtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICdoaWRkZW4nICYmIHN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSB7XG4gICAgICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5wYXVzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ3Zpc2libGUnICYmIHN3aXBlci5hdXRvcGxheS5wYXVzZWQpIHtcbiAgICAgICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnJ1bigpO1xuICAgICAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvblRyYW5zaXRpb25FbmQ6IGZ1bmN0aW9uIG9uVHJhbnNpdGlvbkVuZChlKSB7XG4gICAgICAgICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkIHx8ICFzd2lwZXIuJHdyYXBwZXJFbCkgeyByZXR1cm47IH1cbiAgICAgICAgICAgIGlmIChlLnRhcmdldCAhPT0gdGhpcykgeyByZXR1cm47IH1cbiAgICAgICAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBzd2lwZXIuYXV0b3BsYXkub25UcmFuc2l0aW9uRW5kKTtcbiAgICAgICAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCBzd2lwZXIuYXV0b3BsYXkub25UcmFuc2l0aW9uRW5kKTtcbiAgICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICghc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcpIHtcbiAgICAgICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnN0b3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9wbGF5LmVuYWJsZWQpIHtcbiAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkuc3RhcnQoKTtcbiAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgc3dpcGVyLmF1dG9wbGF5Lm9uVmlzaWJpbGl0eUNoYW5nZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBiZWZvcmVUcmFuc2l0aW9uU3RhcnQ6IGZ1bmN0aW9uIGJlZm9yZVRyYW5zaXRpb25TdGFydChzcGVlZCwgaW50ZXJuYWwpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIuYXV0b3BsYXkucnVubmluZykge1xuICAgICAgICAgIGlmIChpbnRlcm5hbCB8fCAhc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5kaXNhYmxlT25JbnRlcmFjdGlvbikge1xuICAgICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlKHNwZWVkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnN0b3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzbGlkZXJGaXJzdE1vdmU6IGZ1bmN0aW9uIHNsaWRlckZpcnN0TW92ZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIuYXV0b3BsYXkucnVubmluZykge1xuICAgICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9wbGF5LmRpc2FibGVPbkludGVyYWN0aW9uKSB7XG4gICAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkuc3RvcCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkucGF1c2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0b3VjaEVuZDogZnVuY3Rpb24gdG91Y2hFbmQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5jc3NNb2RlICYmIHN3aXBlci5hdXRvcGxheS5wYXVzZWQgJiYgIXN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZGlzYWJsZU9uSW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkucnVuKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSB7XG4gICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgc3dpcGVyLmF1dG9wbGF5Lm9uVmlzaWJpbGl0eUNoYW5nZSk7XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgdmFyIEZhZGUgPSB7XG4gICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgdmFyICRzbGlkZUVsID0gc3dpcGVyLnNsaWRlcy5lcShpKTtcbiAgICAgICAgdmFyIG9mZnNldCA9ICRzbGlkZUVsWzBdLnN3aXBlclNsaWRlT2Zmc2V0O1xuICAgICAgICB2YXIgdHggPSAtb2Zmc2V0O1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMudmlydHVhbFRyYW5zbGF0ZSkgeyB0eCAtPSBzd2lwZXIudHJhbnNsYXRlOyB9XG4gICAgICAgIHZhciB0eSA9IDA7XG4gICAgICAgIGlmICghc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICAgdHkgPSB0eDtcbiAgICAgICAgICB0eCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNsaWRlT3BhY2l0eSA9IHN3aXBlci5wYXJhbXMuZmFkZUVmZmVjdC5jcm9zc0ZhZGVcbiAgICAgICAgICA/IE1hdGgubWF4KDEgLSBNYXRoLmFicygkc2xpZGVFbFswXS5wcm9ncmVzcyksIDApXG4gICAgICAgICAgOiAxICsgTWF0aC5taW4oTWF0aC5tYXgoJHNsaWRlRWxbMF0ucHJvZ3Jlc3MsIC0xKSwgMCk7XG4gICAgICAgICRzbGlkZUVsXG4gICAgICAgICAgLmNzcyh7XG4gICAgICAgICAgICBvcGFjaXR5OiBzbGlkZU9wYWNpdHksXG4gICAgICAgICAgfSlcbiAgICAgICAgICAudHJhbnNmb3JtKChcInRyYW5zbGF0ZTNkKFwiICsgdHggKyBcInB4LCBcIiArIHR5ICsgXCJweCwgMHB4KVwiKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzO1xuICAgICAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcbiAgICAgIHNsaWRlcy50cmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLnZpcnR1YWxUcmFuc2xhdGUgJiYgZHVyYXRpb24gIT09IDApIHtcbiAgICAgICAgdmFyIGV2ZW50VHJpZ2dlcmVkID0gZmFsc2U7XG4gICAgICAgIHNsaWRlcy50cmFuc2l0aW9uRW5kKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoZXZlbnRUcmlnZ2VyZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgeyByZXR1cm47IH1cbiAgICAgICAgICBldmVudFRyaWdnZXJlZCA9IHRydWU7XG4gICAgICAgICAgc3dpcGVyLmFuaW1hdGluZyA9IGZhbHNlO1xuICAgICAgICAgIHZhciB0cmlnZ2VyRXZlbnRzID0gWyd3ZWJraXRUcmFuc2l0aW9uRW5kJywgJ3RyYW5zaXRpb25lbmQnXTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyaWdnZXJFdmVudHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICR3cmFwcGVyRWwudHJpZ2dlcih0cmlnZ2VyRXZlbnRzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG5cbiAgdmFyIEVmZmVjdEZhZGUgPSB7XG4gICAgbmFtZTogJ2VmZmVjdC1mYWRlJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIGZhZGVFZmZlY3Q6IHtcbiAgICAgICAgY3Jvc3NGYWRlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICBmYWRlRWZmZWN0OiB7XG4gICAgICAgICAgc2V0VHJhbnNsYXRlOiBGYWRlLnNldFRyYW5zbGF0ZS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgc2V0VHJhbnNpdGlvbjogRmFkZS5zZXRUcmFuc2l0aW9uLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGJlZm9yZUluaXQ6IGZ1bmN0aW9uIGJlZm9yZUluaXQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09ICdmYWRlJykgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLmNsYXNzTmFtZXMucHVzaCgoKHN3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcykgKyBcImZhZGVcIikpO1xuICAgICAgICB2YXIgb3ZlcndyaXRlUGFyYW1zID0ge1xuICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDEsXG4gICAgICAgICAgc2xpZGVzUGVyQ29sdW1uOiAxLFxuICAgICAgICAgIHNsaWRlc1Blckdyb3VwOiAxLFxuICAgICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgICAgc3BhY2VCZXR3ZWVuOiAwLFxuICAgICAgICAgIHZpcnR1YWxUcmFuc2xhdGU6IHRydWUsXG4gICAgICAgIH07XG4gICAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIucGFyYW1zLCBvdmVyd3JpdGVQYXJhbXMpO1xuICAgICAgICBVdGlscy5leHRlbmQoc3dpcGVyLm9yaWdpbmFsUGFyYW1zLCBvdmVyd3JpdGVQYXJhbXMpO1xuICAgICAgfSxcbiAgICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnZmFkZScpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5mYWRlRWZmZWN0LnNldFRyYW5zbGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIHNldFRyYW5zaXRpb246IGZ1bmN0aW9uIHNldFRyYW5zaXRpb24oZHVyYXRpb24pIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2ZhZGUnKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIuZmFkZUVmZmVjdC5zZXRUcmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICB2YXIgQ3ViZSA9IHtcbiAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyICRlbCA9IHN3aXBlci4kZWw7XG4gICAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG4gICAgICB2YXIgc3dpcGVyV2lkdGggPSBzd2lwZXIud2lkdGg7XG4gICAgICB2YXIgc3dpcGVySGVpZ2h0ID0gc3dpcGVyLmhlaWdodDtcbiAgICAgIHZhciBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlO1xuICAgICAgdmFyIHN3aXBlclNpemUgPSBzd2lwZXIuc2l6ZTtcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLmN1YmVFZmZlY3Q7XG4gICAgICB2YXIgaXNIb3Jpem9udGFsID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpO1xuICAgICAgdmFyIGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkO1xuICAgICAgdmFyIHdyYXBwZXJSb3RhdGUgPSAwO1xuICAgICAgdmFyICRjdWJlU2hhZG93RWw7XG4gICAgICBpZiAocGFyYW1zLnNoYWRvdykge1xuICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgJGN1YmVTaGFkb3dFbCA9ICR3cmFwcGVyRWwuZmluZCgnLnN3aXBlci1jdWJlLXNoYWRvdycpO1xuICAgICAgICAgIGlmICgkY3ViZVNoYWRvd0VsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgJGN1YmVTaGFkb3dFbCA9ICQoJzxkaXYgY2xhc3M9XCJzd2lwZXItY3ViZS1zaGFkb3dcIj48L2Rpdj4nKTtcbiAgICAgICAgICAgICR3cmFwcGVyRWwuYXBwZW5kKCRjdWJlU2hhZG93RWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAkY3ViZVNoYWRvd0VsLmNzcyh7IGhlaWdodDogKHN3aXBlcldpZHRoICsgXCJweFwiKSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkY3ViZVNoYWRvd0VsID0gJGVsLmZpbmQoJy5zd2lwZXItY3ViZS1zaGFkb3cnKTtcbiAgICAgICAgICBpZiAoJGN1YmVTaGFkb3dFbC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICRjdWJlU2hhZG93RWwgPSAkKCc8ZGl2IGNsYXNzPVwic3dpcGVyLWN1YmUtc2hhZG93XCI+PC9kaXY+Jyk7XG4gICAgICAgICAgICAkZWwuYXBwZW5kKCRjdWJlU2hhZG93RWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgdmFyICRzbGlkZUVsID0gc2xpZGVzLmVxKGkpO1xuICAgICAgICB2YXIgc2xpZGVJbmRleCA9IGk7XG4gICAgICAgIGlmIChpc1ZpcnR1YWwpIHtcbiAgICAgICAgICBzbGlkZUluZGV4ID0gcGFyc2VJbnQoJHNsaWRlRWwuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSwgMTApO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzbGlkZUFuZ2xlID0gc2xpZGVJbmRleCAqIDkwO1xuICAgICAgICB2YXIgcm91bmQgPSBNYXRoLmZsb29yKHNsaWRlQW5nbGUgLyAzNjApO1xuICAgICAgICBpZiAocnRsKSB7XG4gICAgICAgICAgc2xpZGVBbmdsZSA9IC1zbGlkZUFuZ2xlO1xuICAgICAgICAgIHJvdW5kID0gTWF0aC5mbG9vcigtc2xpZGVBbmdsZSAvIDM2MCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByb2dyZXNzID0gTWF0aC5tYXgoTWF0aC5taW4oJHNsaWRlRWxbMF0ucHJvZ3Jlc3MsIDEpLCAtMSk7XG4gICAgICAgIHZhciB0eCA9IDA7XG4gICAgICAgIHZhciB0eSA9IDA7XG4gICAgICAgIHZhciB0eiA9IDA7XG4gICAgICAgIGlmIChzbGlkZUluZGV4ICUgNCA9PT0gMCkge1xuICAgICAgICAgIHR4ID0gLXJvdW5kICogNCAqIHN3aXBlclNpemU7XG4gICAgICAgICAgdHogPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKChzbGlkZUluZGV4IC0gMSkgJSA0ID09PSAwKSB7XG4gICAgICAgICAgdHggPSAwO1xuICAgICAgICAgIHR6ID0gLXJvdW5kICogNCAqIHN3aXBlclNpemU7XG4gICAgICAgIH0gZWxzZSBpZiAoKHNsaWRlSW5kZXggLSAyKSAlIDQgPT09IDApIHtcbiAgICAgICAgICB0eCA9IHN3aXBlclNpemUgKyAocm91bmQgKiA0ICogc3dpcGVyU2l6ZSk7XG4gICAgICAgICAgdHogPSBzd2lwZXJTaXplO1xuICAgICAgICB9IGVsc2UgaWYgKChzbGlkZUluZGV4IC0gMykgJSA0ID09PSAwKSB7XG4gICAgICAgICAgdHggPSAtc3dpcGVyU2l6ZTtcbiAgICAgICAgICB0eiA9ICgzICogc3dpcGVyU2l6ZSkgKyAoc3dpcGVyU2l6ZSAqIDQgKiByb3VuZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJ0bCkge1xuICAgICAgICAgIHR4ID0gLXR4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0hvcml6b250YWwpIHtcbiAgICAgICAgICB0eSA9IHR4O1xuICAgICAgICAgIHR4ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0cmFuc2Zvcm0gPSBcInJvdGF0ZVgoXCIgKyAoaXNIb3Jpem9udGFsID8gMCA6IC1zbGlkZUFuZ2xlKSArIFwiZGVnKSByb3RhdGVZKFwiICsgKGlzSG9yaXpvbnRhbCA/IHNsaWRlQW5nbGUgOiAwKSArIFwiZGVnKSB0cmFuc2xhdGUzZChcIiArIHR4ICsgXCJweCwgXCIgKyB0eSArIFwicHgsIFwiICsgdHogKyBcInB4KVwiO1xuICAgICAgICBpZiAocHJvZ3Jlc3MgPD0gMSAmJiBwcm9ncmVzcyA+IC0xKSB7XG4gICAgICAgICAgd3JhcHBlclJvdGF0ZSA9IChzbGlkZUluZGV4ICogOTApICsgKHByb2dyZXNzICogOTApO1xuICAgICAgICAgIGlmIChydGwpIHsgd3JhcHBlclJvdGF0ZSA9ICgtc2xpZGVJbmRleCAqIDkwKSAtIChwcm9ncmVzcyAqIDkwKTsgfVxuICAgICAgICB9XG4gICAgICAgICRzbGlkZUVsLnRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgICBpZiAocGFyYW1zLnNsaWRlU2hhZG93cykge1xuICAgICAgICAgIC8vIFNldCBzaGFkb3dzXG4gICAgICAgICAgdmFyIHNoYWRvd0JlZm9yZSA9IGlzSG9yaXpvbnRhbCA/ICRzbGlkZUVsLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQnKSA6ICRzbGlkZUVsLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LXRvcCcpO1xuICAgICAgICAgIHZhciBzaGFkb3dBZnRlciA9IGlzSG9yaXpvbnRhbCA/ICRzbGlkZUVsLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LXJpZ2h0JykgOiAkc2xpZGVFbC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b20nKTtcbiAgICAgICAgICBpZiAoc2hhZG93QmVmb3JlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgc2hhZG93QmVmb3JlID0gJCgoXCI8ZGl2IGNsYXNzPVxcXCJzd2lwZXItc2xpZGUtc2hhZG93LVwiICsgKGlzSG9yaXpvbnRhbCA/ICdsZWZ0JyA6ICd0b3AnKSArIFwiXFxcIj48L2Rpdj5cIikpO1xuICAgICAgICAgICAgJHNsaWRlRWwuYXBwZW5kKHNoYWRvd0JlZm9yZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzaGFkb3dBZnRlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHNoYWRvd0FmdGVyID0gJCgoXCI8ZGl2IGNsYXNzPVxcXCJzd2lwZXItc2xpZGUtc2hhZG93LVwiICsgKGlzSG9yaXpvbnRhbCA/ICdyaWdodCcgOiAnYm90dG9tJykgKyBcIlxcXCI+PC9kaXY+XCIpKTtcbiAgICAgICAgICAgICRzbGlkZUVsLmFwcGVuZChzaGFkb3dBZnRlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzaGFkb3dCZWZvcmUubGVuZ3RoKSB7IHNoYWRvd0JlZm9yZVswXS5zdHlsZS5vcGFjaXR5ID0gTWF0aC5tYXgoLXByb2dyZXNzLCAwKTsgfVxuICAgICAgICAgIGlmIChzaGFkb3dBZnRlci5sZW5ndGgpIHsgc2hhZG93QWZ0ZXJbMF0uc3R5bGUub3BhY2l0eSA9IE1hdGgubWF4KHByb2dyZXNzLCAwKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAkd3JhcHBlckVsLmNzcyh7XG4gICAgICAgICctd2Via2l0LXRyYW5zZm9ybS1vcmlnaW4nOiAoXCI1MCUgNTAlIC1cIiArIChzd2lwZXJTaXplIC8gMikgKyBcInB4XCIpLFxuICAgICAgICAnLW1vei10cmFuc2Zvcm0tb3JpZ2luJzogKFwiNTAlIDUwJSAtXCIgKyAoc3dpcGVyU2l6ZSAvIDIpICsgXCJweFwiKSxcbiAgICAgICAgJy1tcy10cmFuc2Zvcm0tb3JpZ2luJzogKFwiNTAlIDUwJSAtXCIgKyAoc3dpcGVyU2l6ZSAvIDIpICsgXCJweFwiKSxcbiAgICAgICAgJ3RyYW5zZm9ybS1vcmlnaW4nOiAoXCI1MCUgNTAlIC1cIiArIChzd2lwZXJTaXplIC8gMikgKyBcInB4XCIpLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChwYXJhbXMuc2hhZG93KSB7XG4gICAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgICAkY3ViZVNoYWRvd0VsLnRyYW5zZm9ybSgoXCJ0cmFuc2xhdGUzZCgwcHgsIFwiICsgKChzd2lwZXJXaWR0aCAvIDIpICsgcGFyYW1zLnNoYWRvd09mZnNldCkgKyBcInB4LCBcIiArICgtc3dpcGVyV2lkdGggLyAyKSArIFwicHgpIHJvdGF0ZVgoOTBkZWcpIHJvdGF0ZVooMGRlZykgc2NhbGUoXCIgKyAocGFyYW1zLnNoYWRvd1NjYWxlKSArIFwiKVwiKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHNoYWRvd0FuZ2xlID0gTWF0aC5hYnMod3JhcHBlclJvdGF0ZSkgLSAoTWF0aC5mbG9vcihNYXRoLmFicyh3cmFwcGVyUm90YXRlKSAvIDkwKSAqIDkwKTtcbiAgICAgICAgICB2YXIgbXVsdGlwbGllciA9IDEuNSAtIChcbiAgICAgICAgICAgIChNYXRoLnNpbigoc2hhZG93QW5nbGUgKiAyICogTWF0aC5QSSkgLyAzNjApIC8gMilcbiAgICAgICAgICAgICsgKE1hdGguY29zKChzaGFkb3dBbmdsZSAqIDIgKiBNYXRoLlBJKSAvIDM2MCkgLyAyKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdmFyIHNjYWxlMSA9IHBhcmFtcy5zaGFkb3dTY2FsZTtcbiAgICAgICAgICB2YXIgc2NhbGUyID0gcGFyYW1zLnNoYWRvd1NjYWxlIC8gbXVsdGlwbGllcjtcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gcGFyYW1zLnNoYWRvd09mZnNldDtcbiAgICAgICAgICAkY3ViZVNoYWRvd0VsLnRyYW5zZm9ybSgoXCJzY2FsZTNkKFwiICsgc2NhbGUxICsgXCIsIDEsIFwiICsgc2NhbGUyICsgXCIpIHRyYW5zbGF0ZTNkKDBweCwgXCIgKyAoKHN3aXBlckhlaWdodCAvIDIpICsgb2Zmc2V0KSArIFwicHgsIFwiICsgKC1zd2lwZXJIZWlnaHQgLyAyIC8gc2NhbGUyKSArIFwicHgpIHJvdGF0ZVgoLTkwZGVnKVwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciB6RmFjdG9yID0gKEJyb3dzZXIuaXNTYWZhcmkgfHwgQnJvd3Nlci5pc1VpV2ViVmlldykgPyAoLXN3aXBlclNpemUgLyAyKSA6IDA7XG4gICAgICAkd3JhcHBlckVsXG4gICAgICAgIC50cmFuc2Zvcm0oKFwidHJhbnNsYXRlM2QoMHB4LDAsXCIgKyB6RmFjdG9yICsgXCJweCkgcm90YXRlWChcIiArIChzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAwIDogd3JhcHBlclJvdGF0ZSkgKyBcImRlZykgcm90YXRlWShcIiArIChzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAtd3JhcHBlclJvdGF0ZSA6IDApICsgXCJkZWcpXCIpKTtcbiAgICB9LFxuICAgIHNldFRyYW5zaXRpb246IGZ1bmN0aW9uIHNldFRyYW5zaXRpb24oZHVyYXRpb24pIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyICRlbCA9IHN3aXBlci4kZWw7XG4gICAgICB2YXIgc2xpZGVzID0gc3dpcGVyLnNsaWRlcztcbiAgICAgIHNsaWRlc1xuICAgICAgICAudHJhbnNpdGlvbihkdXJhdGlvbilcbiAgICAgICAgLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LXRvcCwgLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQsIC5zd2lwZXItc2xpZGUtc2hhZG93LWJvdHRvbSwgLnN3aXBlci1zbGlkZS1zaGFkb3ctbGVmdCcpXG4gICAgICAgIC50cmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmN1YmVFZmZlY3Quc2hhZG93ICYmICFzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgJGVsLmZpbmQoJy5zd2lwZXItY3ViZS1zaGFkb3cnKS50cmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuXG4gIHZhciBFZmZlY3RDdWJlID0ge1xuICAgIG5hbWU6ICdlZmZlY3QtY3ViZScsXG4gICAgcGFyYW1zOiB7XG4gICAgICBjdWJlRWZmZWN0OiB7XG4gICAgICAgIHNsaWRlU2hhZG93czogdHJ1ZSxcbiAgICAgICAgc2hhZG93OiB0cnVlLFxuICAgICAgICBzaGFkb3dPZmZzZXQ6IDIwLFxuICAgICAgICBzaGFkb3dTY2FsZTogMC45NCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICBjdWJlRWZmZWN0OiB7XG4gICAgICAgICAgc2V0VHJhbnNsYXRlOiBDdWJlLnNldFRyYW5zbGF0ZS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgc2V0VHJhbnNpdGlvbjogQ3ViZS5zZXRUcmFuc2l0aW9uLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGJlZm9yZUluaXQ6IGZ1bmN0aW9uIGJlZm9yZUluaXQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09ICdjdWJlJykgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLmNsYXNzTmFtZXMucHVzaCgoKHN3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcykgKyBcImN1YmVcIikpO1xuICAgICAgICBzd2lwZXIuY2xhc3NOYW1lcy5wdXNoKCgoc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKSArIFwiM2RcIikpO1xuICAgICAgICB2YXIgb3ZlcndyaXRlUGFyYW1zID0ge1xuICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDEsXG4gICAgICAgICAgc2xpZGVzUGVyQ29sdW1uOiAxLFxuICAgICAgICAgIHNsaWRlc1Blckdyb3VwOiAxLFxuICAgICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgICAgcmVzaXN0YW5jZVJhdGlvOiAwLFxuICAgICAgICAgIHNwYWNlQmV0d2VlbjogMCxcbiAgICAgICAgICBjZW50ZXJlZFNsaWRlczogZmFsc2UsXG4gICAgICAgICAgdmlydHVhbFRyYW5zbGF0ZTogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlci5wYXJhbXMsIG92ZXJ3cml0ZVBhcmFtcyk7XG4gICAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIub3JpZ2luYWxQYXJhbXMsIG92ZXJ3cml0ZVBhcmFtcyk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09ICdjdWJlJykgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLmN1YmVFZmZlY3Quc2V0VHJhbnNsYXRlKCk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnY3ViZScpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5jdWJlRWZmZWN0LnNldFRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHZhciBGbGlwID0ge1xuICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgc2xpZGVzID0gc3dpcGVyLnNsaWRlcztcbiAgICAgIHZhciBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgdmFyICRzbGlkZUVsID0gc2xpZGVzLmVxKGkpO1xuICAgICAgICB2YXIgcHJvZ3Jlc3MgPSAkc2xpZGVFbFswXS5wcm9ncmVzcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZmxpcEVmZmVjdC5saW1pdFJvdGF0aW9uKSB7XG4gICAgICAgICAgcHJvZ3Jlc3MgPSBNYXRoLm1heChNYXRoLm1pbigkc2xpZGVFbFswXS5wcm9ncmVzcywgMSksIC0xKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb2Zmc2V0ID0gJHNsaWRlRWxbMF0uc3dpcGVyU2xpZGVPZmZzZXQ7XG4gICAgICAgIHZhciByb3RhdGUgPSAtMTgwICogcHJvZ3Jlc3M7XG4gICAgICAgIHZhciByb3RhdGVZID0gcm90YXRlO1xuICAgICAgICB2YXIgcm90YXRlWCA9IDA7XG4gICAgICAgIHZhciB0eCA9IC1vZmZzZXQ7XG4gICAgICAgIHZhciB0eSA9IDA7XG4gICAgICAgIGlmICghc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICAgdHkgPSB0eDtcbiAgICAgICAgICB0eCA9IDA7XG4gICAgICAgICAgcm90YXRlWCA9IC1yb3RhdGVZO1xuICAgICAgICAgIHJvdGF0ZVkgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKHJ0bCkge1xuICAgICAgICAgIHJvdGF0ZVkgPSAtcm90YXRlWTtcbiAgICAgICAgfVxuXG4gICAgICAgICRzbGlkZUVsWzBdLnN0eWxlLnpJbmRleCA9IC1NYXRoLmFicyhNYXRoLnJvdW5kKHByb2dyZXNzKSkgKyBzbGlkZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmZsaXBFZmZlY3Quc2xpZGVTaGFkb3dzKSB7XG4gICAgICAgICAgLy8gU2V0IHNoYWRvd3NcbiAgICAgICAgICB2YXIgc2hhZG93QmVmb3JlID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctbGVmdCcpIDogJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wJyk7XG4gICAgICAgICAgdmFyIHNoYWRvd0FmdGVyID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQnKSA6ICRzbGlkZUVsLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LWJvdHRvbScpO1xuICAgICAgICAgIGlmIChzaGFkb3dCZWZvcmUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBzaGFkb3dCZWZvcmUgPSAkKChcIjxkaXYgY2xhc3M9XFxcInN3aXBlci1zbGlkZS1zaGFkb3ctXCIgKyAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ2xlZnQnIDogJ3RvcCcpICsgXCJcXFwiPjwvZGl2PlwiKSk7XG4gICAgICAgICAgICAkc2xpZGVFbC5hcHBlbmQoc2hhZG93QmVmb3JlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNoYWRvd0FmdGVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgc2hhZG93QWZ0ZXIgPSAkKChcIjxkaXYgY2xhc3M9XFxcInN3aXBlci1zbGlkZS1zaGFkb3ctXCIgKyAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ3JpZ2h0JyA6ICdib3R0b20nKSArIFwiXFxcIj48L2Rpdj5cIikpO1xuICAgICAgICAgICAgJHNsaWRlRWwuYXBwZW5kKHNoYWRvd0FmdGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNoYWRvd0JlZm9yZS5sZW5ndGgpIHsgc2hhZG93QmVmb3JlWzBdLnN0eWxlLm9wYWNpdHkgPSBNYXRoLm1heCgtcHJvZ3Jlc3MsIDApOyB9XG4gICAgICAgICAgaWYgKHNoYWRvd0FmdGVyLmxlbmd0aCkgeyBzaGFkb3dBZnRlclswXS5zdHlsZS5vcGFjaXR5ID0gTWF0aC5tYXgocHJvZ3Jlc3MsIDApOyB9XG4gICAgICAgIH1cbiAgICAgICAgJHNsaWRlRWxcbiAgICAgICAgICAudHJhbnNmb3JtKChcInRyYW5zbGF0ZTNkKFwiICsgdHggKyBcInB4LCBcIiArIHR5ICsgXCJweCwgMHB4KSByb3RhdGVYKFwiICsgcm90YXRlWCArIFwiZGVnKSByb3RhdGVZKFwiICsgcm90YXRlWSArIFwiZGVnKVwiKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzO1xuICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgICAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcbiAgICAgIHNsaWRlc1xuICAgICAgICAudHJhbnNpdGlvbihkdXJhdGlvbilcbiAgICAgICAgLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LXRvcCwgLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQsIC5zd2lwZXItc2xpZGUtc2hhZG93LWJvdHRvbSwgLnN3aXBlci1zbGlkZS1zaGFkb3ctbGVmdCcpXG4gICAgICAgIC50cmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLnZpcnR1YWxUcmFuc2xhdGUgJiYgZHVyYXRpb24gIT09IDApIHtcbiAgICAgICAgdmFyIGV2ZW50VHJpZ2dlcmVkID0gZmFsc2U7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICBzbGlkZXMuZXEoYWN0aXZlSW5kZXgpLnRyYW5zaXRpb25FbmQoZnVuY3Rpb24gb25UcmFuc2l0aW9uRW5kKCkge1xuICAgICAgICAgIGlmIChldmVudFRyaWdnZXJlZCkgeyByZXR1cm47IH1cbiAgICAgICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkKSB7IHJldHVybjsgfVxuICAgICAgICAgIC8vIGlmICghJCh0aGlzKS5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnNsaWRlQWN0aXZlQ2xhc3MpKSByZXR1cm47XG4gICAgICAgICAgZXZlbnRUcmlnZ2VyZWQgPSB0cnVlO1xuICAgICAgICAgIHN3aXBlci5hbmltYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB2YXIgdHJpZ2dlckV2ZW50cyA9IFsnd2Via2l0VHJhbnNpdGlvbkVuZCcsICd0cmFuc2l0aW9uZW5kJ107XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmlnZ2VyRXZlbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAkd3JhcHBlckVsLnRyaWdnZXIodHJpZ2dlckV2ZW50c1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuXG4gIHZhciBFZmZlY3RGbGlwID0ge1xuICAgIG5hbWU6ICdlZmZlY3QtZmxpcCcsXG4gICAgcGFyYW1zOiB7XG4gICAgICBmbGlwRWZmZWN0OiB7XG4gICAgICAgIHNsaWRlU2hhZG93czogdHJ1ZSxcbiAgICAgICAgbGltaXRSb3RhdGlvbjogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICBmbGlwRWZmZWN0OiB7XG4gICAgICAgICAgc2V0VHJhbnNsYXRlOiBGbGlwLnNldFRyYW5zbGF0ZS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgc2V0VHJhbnNpdGlvbjogRmxpcC5zZXRUcmFuc2l0aW9uLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGJlZm9yZUluaXQ6IGZ1bmN0aW9uIGJlZm9yZUluaXQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09ICdmbGlwJykgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLmNsYXNzTmFtZXMucHVzaCgoKHN3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcykgKyBcImZsaXBcIikpO1xuICAgICAgICBzd2lwZXIuY2xhc3NOYW1lcy5wdXNoKCgoc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKSArIFwiM2RcIikpO1xuICAgICAgICB2YXIgb3ZlcndyaXRlUGFyYW1zID0ge1xuICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDEsXG4gICAgICAgICAgc2xpZGVzUGVyQ29sdW1uOiAxLFxuICAgICAgICAgIHNsaWRlc1Blckdyb3VwOiAxLFxuICAgICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgICAgc3BhY2VCZXR3ZWVuOiAwLFxuICAgICAgICAgIHZpcnR1YWxUcmFuc2xhdGU6IHRydWUsXG4gICAgICAgIH07XG4gICAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIucGFyYW1zLCBvdmVyd3JpdGVQYXJhbXMpO1xuICAgICAgICBVdGlscy5leHRlbmQoc3dpcGVyLm9yaWdpbmFsUGFyYW1zLCBvdmVyd3JpdGVQYXJhbXMpO1xuICAgICAgfSxcbiAgICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnZmxpcCcpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5mbGlwRWZmZWN0LnNldFRyYW5zbGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIHNldFRyYW5zaXRpb246IGZ1bmN0aW9uIHNldFRyYW5zaXRpb24oZHVyYXRpb24pIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2ZsaXAnKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIuZmxpcEVmZmVjdC5zZXRUcmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICB2YXIgQ292ZXJmbG93ID0ge1xuICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgc3dpcGVyV2lkdGggPSBzd2lwZXIud2lkdGg7XG4gICAgICB2YXIgc3dpcGVySGVpZ2h0ID0gc3dpcGVyLmhlaWdodDtcbiAgICAgIHZhciBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzO1xuICAgICAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcbiAgICAgIHZhciBzbGlkZXNTaXplc0dyaWQgPSBzd2lwZXIuc2xpZGVzU2l6ZXNHcmlkO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuY292ZXJmbG93RWZmZWN0O1xuICAgICAgdmFyIGlzSG9yaXpvbnRhbCA9IHN3aXBlci5pc0hvcml6b250YWwoKTtcbiAgICAgIHZhciB0cmFuc2Zvcm0gPSBzd2lwZXIudHJhbnNsYXRlO1xuICAgICAgdmFyIGNlbnRlciA9IGlzSG9yaXpvbnRhbCA/IC10cmFuc2Zvcm0gKyAoc3dpcGVyV2lkdGggLyAyKSA6IC10cmFuc2Zvcm0gKyAoc3dpcGVySGVpZ2h0IC8gMik7XG4gICAgICB2YXIgcm90YXRlID0gaXNIb3Jpem9udGFsID8gcGFyYW1zLnJvdGF0ZSA6IC1wYXJhbXMucm90YXRlO1xuICAgICAgdmFyIHRyYW5zbGF0ZSA9IHBhcmFtcy5kZXB0aDtcbiAgICAgIC8vIEVhY2ggc2xpZGUgb2Zmc2V0IGZyb20gY2VudGVyXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gc2xpZGVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHZhciAkc2xpZGVFbCA9IHNsaWRlcy5lcShpKTtcbiAgICAgICAgdmFyIHNsaWRlU2l6ZSA9IHNsaWRlc1NpemVzR3JpZFtpXTtcbiAgICAgICAgdmFyIHNsaWRlT2Zmc2V0ID0gJHNsaWRlRWxbMF0uc3dpcGVyU2xpZGVPZmZzZXQ7XG4gICAgICAgIHZhciBvZmZzZXRNdWx0aXBsaWVyID0gKChjZW50ZXIgLSBzbGlkZU9mZnNldCAtIChzbGlkZVNpemUgLyAyKSkgLyBzbGlkZVNpemUpICogcGFyYW1zLm1vZGlmaWVyO1xuXG4gICAgICAgIHZhciByb3RhdGVZID0gaXNIb3Jpem9udGFsID8gcm90YXRlICogb2Zmc2V0TXVsdGlwbGllciA6IDA7XG4gICAgICAgIHZhciByb3RhdGVYID0gaXNIb3Jpem9udGFsID8gMCA6IHJvdGF0ZSAqIG9mZnNldE11bHRpcGxpZXI7XG4gICAgICAgIC8vIHZhciByb3RhdGVaID0gMFxuICAgICAgICB2YXIgdHJhbnNsYXRlWiA9IC10cmFuc2xhdGUgKiBNYXRoLmFicyhvZmZzZXRNdWx0aXBsaWVyKTtcblxuICAgICAgICB2YXIgdHJhbnNsYXRlWSA9IGlzSG9yaXpvbnRhbCA/IDAgOiBwYXJhbXMuc3RyZXRjaCAqIChvZmZzZXRNdWx0aXBsaWVyKTtcbiAgICAgICAgdmFyIHRyYW5zbGF0ZVggPSBpc0hvcml6b250YWwgPyBwYXJhbXMuc3RyZXRjaCAqIChvZmZzZXRNdWx0aXBsaWVyKSA6IDA7XG5cbiAgICAgICAgLy8gRml4IGZvciB1bHRyYSBzbWFsbCB2YWx1ZXNcbiAgICAgICAgaWYgKE1hdGguYWJzKHRyYW5zbGF0ZVgpIDwgMC4wMDEpIHsgdHJhbnNsYXRlWCA9IDA7IH1cbiAgICAgICAgaWYgKE1hdGguYWJzKHRyYW5zbGF0ZVkpIDwgMC4wMDEpIHsgdHJhbnNsYXRlWSA9IDA7IH1cbiAgICAgICAgaWYgKE1hdGguYWJzKHRyYW5zbGF0ZVopIDwgMC4wMDEpIHsgdHJhbnNsYXRlWiA9IDA7IH1cbiAgICAgICAgaWYgKE1hdGguYWJzKHJvdGF0ZVkpIDwgMC4wMDEpIHsgcm90YXRlWSA9IDA7IH1cbiAgICAgICAgaWYgKE1hdGguYWJzKHJvdGF0ZVgpIDwgMC4wMDEpIHsgcm90YXRlWCA9IDA7IH1cblxuICAgICAgICB2YXIgc2xpZGVUcmFuc2Zvcm0gPSBcInRyYW5zbGF0ZTNkKFwiICsgdHJhbnNsYXRlWCArIFwicHgsXCIgKyB0cmFuc2xhdGVZICsgXCJweCxcIiArIHRyYW5zbGF0ZVogKyBcInB4KSAgcm90YXRlWChcIiArIHJvdGF0ZVggKyBcImRlZykgcm90YXRlWShcIiArIHJvdGF0ZVkgKyBcImRlZylcIjtcblxuICAgICAgICAkc2xpZGVFbC50cmFuc2Zvcm0oc2xpZGVUcmFuc2Zvcm0pO1xuICAgICAgICAkc2xpZGVFbFswXS5zdHlsZS56SW5kZXggPSAtTWF0aC5hYnMoTWF0aC5yb3VuZChvZmZzZXRNdWx0aXBsaWVyKSkgKyAxO1xuICAgICAgICBpZiAocGFyYW1zLnNsaWRlU2hhZG93cykge1xuICAgICAgICAgIC8vIFNldCBzaGFkb3dzXG4gICAgICAgICAgdmFyICRzaGFkb3dCZWZvcmVFbCA9IGlzSG9yaXpvbnRhbCA/ICRzbGlkZUVsLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQnKSA6ICRzbGlkZUVsLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LXRvcCcpO1xuICAgICAgICAgIHZhciAkc2hhZG93QWZ0ZXJFbCA9IGlzSG9yaXpvbnRhbCA/ICRzbGlkZUVsLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LXJpZ2h0JykgOiAkc2xpZGVFbC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b20nKTtcbiAgICAgICAgICBpZiAoJHNoYWRvd0JlZm9yZUVsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgJHNoYWRvd0JlZm9yZUVsID0gJCgoXCI8ZGl2IGNsYXNzPVxcXCJzd2lwZXItc2xpZGUtc2hhZG93LVwiICsgKGlzSG9yaXpvbnRhbCA/ICdsZWZ0JyA6ICd0b3AnKSArIFwiXFxcIj48L2Rpdj5cIikpO1xuICAgICAgICAgICAgJHNsaWRlRWwuYXBwZW5kKCRzaGFkb3dCZWZvcmVFbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkc2hhZG93QWZ0ZXJFbC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICRzaGFkb3dBZnRlckVsID0gJCgoXCI8ZGl2IGNsYXNzPVxcXCJzd2lwZXItc2xpZGUtc2hhZG93LVwiICsgKGlzSG9yaXpvbnRhbCA/ICdyaWdodCcgOiAnYm90dG9tJykgKyBcIlxcXCI+PC9kaXY+XCIpKTtcbiAgICAgICAgICAgICRzbGlkZUVsLmFwcGVuZCgkc2hhZG93QWZ0ZXJFbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkc2hhZG93QmVmb3JlRWwubGVuZ3RoKSB7ICRzaGFkb3dCZWZvcmVFbFswXS5zdHlsZS5vcGFjaXR5ID0gb2Zmc2V0TXVsdGlwbGllciA+IDAgPyBvZmZzZXRNdWx0aXBsaWVyIDogMDsgfVxuICAgICAgICAgIGlmICgkc2hhZG93QWZ0ZXJFbC5sZW5ndGgpIHsgJHNoYWRvd0FmdGVyRWxbMF0uc3R5bGUub3BhY2l0eSA9ICgtb2Zmc2V0TXVsdGlwbGllcikgPiAwID8gLW9mZnNldE11bHRpcGxpZXIgOiAwOyB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2V0IGNvcnJlY3QgcGVyc3BlY3RpdmUgZm9yIElFMTBcbiAgICAgIGlmIChTdXBwb3J0LnBvaW50ZXJFdmVudHMgfHwgU3VwcG9ydC5wcmVmaXhlZFBvaW50ZXJFdmVudHMpIHtcbiAgICAgICAgdmFyIHdzID0gJHdyYXBwZXJFbFswXS5zdHlsZTtcbiAgICAgICAgd3MucGVyc3BlY3RpdmVPcmlnaW4gPSBjZW50ZXIgKyBcInB4IDUwJVwiO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBzd2lwZXIuc2xpZGVzXG4gICAgICAgIC50cmFuc2l0aW9uKGR1cmF0aW9uKVxuICAgICAgICAuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wLCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1yaWdodCwgLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tLCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0JylcbiAgICAgICAgLnRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgIH0sXG4gIH07XG5cbiAgdmFyIEVmZmVjdENvdmVyZmxvdyA9IHtcbiAgICBuYW1lOiAnZWZmZWN0LWNvdmVyZmxvdycsXG4gICAgcGFyYW1zOiB7XG4gICAgICBjb3ZlcmZsb3dFZmZlY3Q6IHtcbiAgICAgICAgcm90YXRlOiA1MCxcbiAgICAgICAgc3RyZXRjaDogMCxcbiAgICAgICAgZGVwdGg6IDEwMCxcbiAgICAgICAgbW9kaWZpZXI6IDEsXG4gICAgICAgIHNsaWRlU2hhZG93czogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICBjb3ZlcmZsb3dFZmZlY3Q6IHtcbiAgICAgICAgICBzZXRUcmFuc2xhdGU6IENvdmVyZmxvdy5zZXRUcmFuc2xhdGUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIHNldFRyYW5zaXRpb246IENvdmVyZmxvdy5zZXRUcmFuc2l0aW9uLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGJlZm9yZUluaXQ6IGZ1bmN0aW9uIGJlZm9yZUluaXQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09ICdjb3ZlcmZsb3cnKSB7IHJldHVybjsgfVxuXG4gICAgICAgIHN3aXBlci5jbGFzc05hbWVzLnB1c2goKChzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MpICsgXCJjb3ZlcmZsb3dcIikpO1xuICAgICAgICBzd2lwZXIuY2xhc3NOYW1lcy5wdXNoKCgoc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKSArIFwiM2RcIikpO1xuXG4gICAgICAgIHN3aXBlci5wYXJhbXMud2F0Y2hTbGlkZXNQcm9ncmVzcyA9IHRydWU7XG4gICAgICAgIHN3aXBlci5vcmlnaW5hbFBhcmFtcy53YXRjaFNsaWRlc1Byb2dyZXNzID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2NvdmVyZmxvdycpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5jb3ZlcmZsb3dFZmZlY3Quc2V0VHJhbnNsYXRlKCk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnY292ZXJmbG93JykgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLmNvdmVyZmxvd0VmZmVjdC5zZXRUcmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICB2YXIgVGh1bWJzID0ge1xuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciByZWYgPSBzd2lwZXIucGFyYW1zO1xuICAgICAgdmFyIHRodW1ic1BhcmFtcyA9IHJlZi50aHVtYnM7XG4gICAgICB2YXIgU3dpcGVyQ2xhc3MgPSBzd2lwZXIuY29uc3RydWN0b3I7XG4gICAgICBpZiAodGh1bWJzUGFyYW1zLnN3aXBlciBpbnN0YW5jZW9mIFN3aXBlckNsYXNzKSB7XG4gICAgICAgIHN3aXBlci50aHVtYnMuc3dpcGVyID0gdGh1bWJzUGFyYW1zLnN3aXBlcjtcbiAgICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlci50aHVtYnMuc3dpcGVyLm9yaWdpbmFsUGFyYW1zLCB7XG4gICAgICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICBzbGlkZVRvQ2xpY2tlZFNsaWRlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIudGh1bWJzLnN3aXBlci5wYXJhbXMsIHtcbiAgICAgICAgICB3YXRjaFNsaWRlc1Byb2dyZXNzOiB0cnVlLFxuICAgICAgICAgIHNsaWRlVG9DbGlja2VkU2xpZGU6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoVXRpbHMuaXNPYmplY3QodGh1bWJzUGFyYW1zLnN3aXBlcikpIHtcbiAgICAgICAgc3dpcGVyLnRodW1icy5zd2lwZXIgPSBuZXcgU3dpcGVyQ2xhc3MoVXRpbHMuZXh0ZW5kKHt9LCB0aHVtYnNQYXJhbXMuc3dpcGVyLCB7XG4gICAgICAgICAgd2F0Y2hTbGlkZXNWaXNpYmlsaXR5OiB0cnVlLFxuICAgICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgICAgc2xpZGVUb0NsaWNrZWRTbGlkZTogZmFsc2UsXG4gICAgICAgIH0pKTtcbiAgICAgICAgc3dpcGVyLnRodW1icy5zd2lwZXJDcmVhdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHN3aXBlci50aHVtYnMuc3dpcGVyLiRlbC5hZGRDbGFzcyhzd2lwZXIucGFyYW1zLnRodW1icy50aHVtYnNDb250YWluZXJDbGFzcyk7XG4gICAgICBzd2lwZXIudGh1bWJzLnN3aXBlci5vbigndGFwJywgc3dpcGVyLnRodW1icy5vblRodW1iQ2xpY2spO1xuICAgIH0sXG4gICAgb25UaHVtYkNsaWNrOiBmdW5jdGlvbiBvblRodW1iQ2xpY2soKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciB0aHVtYnNTd2lwZXIgPSBzd2lwZXIudGh1bWJzLnN3aXBlcjtcbiAgICAgIGlmICghdGh1bWJzU3dpcGVyKSB7IHJldHVybjsgfVxuICAgICAgdmFyIGNsaWNrZWRJbmRleCA9IHRodW1ic1N3aXBlci5jbGlja2VkSW5kZXg7XG4gICAgICB2YXIgY2xpY2tlZFNsaWRlID0gdGh1bWJzU3dpcGVyLmNsaWNrZWRTbGlkZTtcbiAgICAgIGlmIChjbGlja2VkU2xpZGUgJiYgJChjbGlja2VkU2xpZGUpLmhhc0NsYXNzKHN3aXBlci5wYXJhbXMudGh1bWJzLnNsaWRlVGh1bWJBY3RpdmVDbGFzcykpIHsgcmV0dXJuOyB9XG4gICAgICBpZiAodHlwZW9mIGNsaWNrZWRJbmRleCA9PT0gJ3VuZGVmaW5lZCcgfHwgY2xpY2tlZEluZGV4ID09PSBudWxsKSB7IHJldHVybjsgfVxuICAgICAgdmFyIHNsaWRlVG9JbmRleDtcbiAgICAgIGlmICh0aHVtYnNTd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgc2xpZGVUb0luZGV4ID0gcGFyc2VJbnQoJCh0aHVtYnNTd2lwZXIuY2xpY2tlZFNsaWRlKS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpLCAxMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbGlkZVRvSW5kZXggPSBjbGlja2VkSW5kZXg7XG4gICAgICB9XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgIHZhciBjdXJyZW50SW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgICAgIGlmIChzd2lwZXIuc2xpZGVzLmVxKGN1cnJlbnRJbmRleCkuaGFzQ2xhc3Moc3dpcGVyLnBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSkge1xuICAgICAgICAgIHN3aXBlci5sb29wRml4KCk7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgc3dpcGVyLl9jbGllbnRMZWZ0ID0gc3dpcGVyLiR3cmFwcGVyRWxbMF0uY2xpZW50TGVmdDtcbiAgICAgICAgICBjdXJyZW50SW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByZXZJbmRleCA9IHN3aXBlci5zbGlkZXMuZXEoY3VycmVudEluZGV4KS5wcmV2QWxsKChcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyBzbGlkZVRvSW5kZXggKyBcIlxcXCJdXCIpKS5lcSgwKS5pbmRleCgpO1xuICAgICAgICB2YXIgbmV4dEluZGV4ID0gc3dpcGVyLnNsaWRlcy5lcShjdXJyZW50SW5kZXgpLm5leHRBbGwoKFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIHNsaWRlVG9JbmRleCArIFwiXFxcIl1cIikpLmVxKDApLmluZGV4KCk7XG4gICAgICAgIGlmICh0eXBlb2YgcHJldkluZGV4ID09PSAndW5kZWZpbmVkJykgeyBzbGlkZVRvSW5kZXggPSBuZXh0SW5kZXg7IH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG5leHRJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHsgc2xpZGVUb0luZGV4ID0gcHJldkluZGV4OyB9XG4gICAgICAgIGVsc2UgaWYgKG5leHRJbmRleCAtIGN1cnJlbnRJbmRleCA8IGN1cnJlbnRJbmRleCAtIHByZXZJbmRleCkgeyBzbGlkZVRvSW5kZXggPSBuZXh0SW5kZXg7IH1cbiAgICAgICAgZWxzZSB7IHNsaWRlVG9JbmRleCA9IHByZXZJbmRleDsgfVxuICAgICAgfVxuICAgICAgc3dpcGVyLnNsaWRlVG8oc2xpZGVUb0luZGV4KTtcbiAgICB9LFxuICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKGluaXRpYWwpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHRodW1ic1N3aXBlciA9IHN3aXBlci50aHVtYnMuc3dpcGVyO1xuICAgICAgaWYgKCF0aHVtYnNTd2lwZXIpIHsgcmV0dXJuOyB9XG5cbiAgICAgIHZhciBzbGlkZXNQZXJWaWV3ID0gdGh1bWJzU3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3ID09PSAnYXV0bydcbiAgICAgICAgPyB0aHVtYnNTd2lwZXIuc2xpZGVzUGVyVmlld0R5bmFtaWMoKVxuICAgICAgICA6IHRodW1ic1N3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldztcblxuICAgICAgaWYgKHN3aXBlci5yZWFsSW5kZXggIT09IHRodW1ic1N3aXBlci5yZWFsSW5kZXgpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRUaHVtYnNJbmRleCA9IHRodW1ic1N3aXBlci5hY3RpdmVJbmRleDtcbiAgICAgICAgdmFyIG5ld1RodW1ic0luZGV4O1xuICAgICAgICBpZiAodGh1bWJzU3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgICAgaWYgKHRodW1ic1N3aXBlci5zbGlkZXMuZXEoY3VycmVudFRodW1ic0luZGV4KS5oYXNDbGFzcyh0aHVtYnNTd2lwZXIucGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKSB7XG4gICAgICAgICAgICB0aHVtYnNTd2lwZXIubG9vcEZpeCgpO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB0aHVtYnNTd2lwZXIuX2NsaWVudExlZnQgPSB0aHVtYnNTd2lwZXIuJHdyYXBwZXJFbFswXS5jbGllbnRMZWZ0O1xuICAgICAgICAgICAgY3VycmVudFRodW1ic0luZGV4ID0gdGh1bWJzU3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBGaW5kIGFjdHVhbCB0aHVtYnMgaW5kZXggdG8gc2xpZGUgdG9cbiAgICAgICAgICB2YXIgcHJldlRodW1ic0luZGV4ID0gdGh1bWJzU3dpcGVyLnNsaWRlcy5lcShjdXJyZW50VGh1bWJzSW5kZXgpLnByZXZBbGwoKFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIChzd2lwZXIucmVhbEluZGV4KSArIFwiXFxcIl1cIikpLmVxKDApLmluZGV4KCk7XG4gICAgICAgICAgdmFyIG5leHRUaHVtYnNJbmRleCA9IHRodW1ic1N3aXBlci5zbGlkZXMuZXEoY3VycmVudFRodW1ic0luZGV4KS5uZXh0QWxsKChcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyAoc3dpcGVyLnJlYWxJbmRleCkgKyBcIlxcXCJdXCIpKS5lcSgwKS5pbmRleCgpO1xuICAgICAgICAgIGlmICh0eXBlb2YgcHJldlRodW1ic0luZGV4ID09PSAndW5kZWZpbmVkJykgeyBuZXdUaHVtYnNJbmRleCA9IG5leHRUaHVtYnNJbmRleDsgfVxuICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBuZXh0VGh1bWJzSW5kZXggPT09ICd1bmRlZmluZWQnKSB7IG5ld1RodW1ic0luZGV4ID0gcHJldlRodW1ic0luZGV4OyB9XG4gICAgICAgICAgZWxzZSBpZiAobmV4dFRodW1ic0luZGV4IC0gY3VycmVudFRodW1ic0luZGV4ID09PSBjdXJyZW50VGh1bWJzSW5kZXggLSBwcmV2VGh1bWJzSW5kZXgpIHsgbmV3VGh1bWJzSW5kZXggPSBjdXJyZW50VGh1bWJzSW5kZXg7IH1cbiAgICAgICAgICBlbHNlIGlmIChuZXh0VGh1bWJzSW5kZXggLSBjdXJyZW50VGh1bWJzSW5kZXggPCBjdXJyZW50VGh1bWJzSW5kZXggLSBwcmV2VGh1bWJzSW5kZXgpIHsgbmV3VGh1bWJzSW5kZXggPSBuZXh0VGh1bWJzSW5kZXg7IH1cbiAgICAgICAgICBlbHNlIHsgbmV3VGh1bWJzSW5kZXggPSBwcmV2VGh1bWJzSW5kZXg7IH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdUaHVtYnNJbmRleCA9IHN3aXBlci5yZWFsSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRodW1ic1N3aXBlci52aXNpYmxlU2xpZGVzSW5kZXhlcyAmJiB0aHVtYnNTd2lwZXIudmlzaWJsZVNsaWRlc0luZGV4ZXMuaW5kZXhPZihuZXdUaHVtYnNJbmRleCkgPCAwKSB7XG4gICAgICAgICAgaWYgKHRodW1ic1N3aXBlci5wYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgICAgICAgIGlmIChuZXdUaHVtYnNJbmRleCA+IGN1cnJlbnRUaHVtYnNJbmRleCkge1xuICAgICAgICAgICAgICBuZXdUaHVtYnNJbmRleCA9IG5ld1RodW1ic0luZGV4IC0gTWF0aC5mbG9vcihzbGlkZXNQZXJWaWV3IC8gMikgKyAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3VGh1bWJzSW5kZXggPSBuZXdUaHVtYnNJbmRleCArIE1hdGguZmxvb3Ioc2xpZGVzUGVyVmlldyAvIDIpIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKG5ld1RodW1ic0luZGV4ID4gY3VycmVudFRodW1ic0luZGV4KSB7XG4gICAgICAgICAgICBuZXdUaHVtYnNJbmRleCA9IG5ld1RodW1ic0luZGV4IC0gc2xpZGVzUGVyVmlldyArIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRodW1ic1N3aXBlci5zbGlkZVRvKG5ld1RodW1ic0luZGV4LCBpbml0aWFsID8gMCA6IHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWN0aXZhdGUgdGh1bWJzXG4gICAgICB2YXIgdGh1bWJzVG9BY3RpdmF0ZSA9IDE7XG4gICAgICB2YXIgdGh1bWJBY3RpdmVDbGFzcyA9IHN3aXBlci5wYXJhbXMudGh1bWJzLnNsaWRlVGh1bWJBY3RpdmVDbGFzcztcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyA+IDEgJiYgIXN3aXBlci5wYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgICAgdGh1bWJzVG9BY3RpdmF0ZSA9IHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldztcbiAgICAgIH1cblxuICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnRodW1icy5tdWx0aXBsZUFjdGl2ZVRodW1icykge1xuICAgICAgICB0aHVtYnNUb0FjdGl2YXRlID0gMTtcbiAgICAgIH1cblxuICAgICAgdGh1bWJzVG9BY3RpdmF0ZSA9IE1hdGguZmxvb3IodGh1bWJzVG9BY3RpdmF0ZSk7XG5cbiAgICAgIHRodW1ic1N3aXBlci5zbGlkZXMucmVtb3ZlQ2xhc3ModGh1bWJBY3RpdmVDbGFzcyk7XG4gICAgICBpZiAodGh1bWJzU3dpcGVyLnBhcmFtcy5sb29wIHx8ICh0aHVtYnNTd2lwZXIucGFyYW1zLnZpcnR1YWwgJiYgdGh1bWJzU3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGh1bWJzVG9BY3RpdmF0ZTsgaSArPSAxKSB7XG4gICAgICAgICAgdGh1bWJzU3dpcGVyLiR3cmFwcGVyRWwuY2hpbGRyZW4oKFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIChzd2lwZXIucmVhbEluZGV4ICsgaSkgKyBcIlxcXCJdXCIpKS5hZGRDbGFzcyh0aHVtYkFjdGl2ZUNsYXNzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgdGh1bWJzVG9BY3RpdmF0ZTsgaSQxICs9IDEpIHtcbiAgICAgICAgICB0aHVtYnNTd2lwZXIuc2xpZGVzLmVxKHN3aXBlci5yZWFsSW5kZXggKyBpJDEpLmFkZENsYXNzKHRodW1iQWN0aXZlQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbiAgdmFyIFRodW1icyQxID0ge1xuICAgIG5hbWU6ICd0aHVtYnMnLFxuICAgIHBhcmFtczoge1xuICAgICAgdGh1bWJzOiB7XG4gICAgICAgIG11bHRpcGxlQWN0aXZlVGh1bWJzOiB0cnVlLFxuICAgICAgICBzd2lwZXI6IG51bGwsXG4gICAgICAgIHNsaWRlVGh1bWJBY3RpdmVDbGFzczogJ3N3aXBlci1zbGlkZS10aHVtYi1hY3RpdmUnLFxuICAgICAgICB0aHVtYnNDb250YWluZXJDbGFzczogJ3N3aXBlci1jb250YWluZXItdGh1bWJzJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICB0aHVtYnM6IHtcbiAgICAgICAgICBzd2lwZXI6IG51bGwsXG4gICAgICAgICAgaW5pdDogVGh1bWJzLmluaXQuYmluZChzd2lwZXIpLFxuICAgICAgICAgIHVwZGF0ZTogVGh1bWJzLnVwZGF0ZS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgb25UaHVtYkNsaWNrOiBUaHVtYnMub25UaHVtYkNsaWNrLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGJlZm9yZUluaXQ6IGZ1bmN0aW9uIGJlZm9yZUluaXQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICB2YXIgcmVmID0gc3dpcGVyLnBhcmFtcztcbiAgICAgICAgdmFyIHRodW1icyA9IHJlZi50aHVtYnM7XG4gICAgICAgIGlmICghdGh1bWJzIHx8ICF0aHVtYnMuc3dpcGVyKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIudGh1bWJzLmluaXQoKTtcbiAgICAgICAgc3dpcGVyLnRodW1icy51cGRhdGUodHJ1ZSk7XG4gICAgICB9LFxuICAgICAgc2xpZGVDaGFuZ2U6IGZ1bmN0aW9uIHNsaWRlQ2hhbmdlKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKCFzd2lwZXIudGh1bWJzLnN3aXBlcikgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLnRodW1icy51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLnRodW1icy5zd2lwZXIpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci50aHVtYnMudXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgcmVzaXplOiBmdW5jdGlvbiByZXNpemUoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci50aHVtYnMuc3dpcGVyKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIudGh1bWJzLnVwZGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIG9ic2VydmVyVXBkYXRlOiBmdW5jdGlvbiBvYnNlcnZlclVwZGF0ZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLnRodW1icy5zd2lwZXIpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci50aHVtYnMudXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgdmFyIHRodW1ic1N3aXBlciA9IHN3aXBlci50aHVtYnMuc3dpcGVyO1xuICAgICAgICBpZiAoIXRodW1ic1N3aXBlcikgeyByZXR1cm47IH1cbiAgICAgICAgdGh1bWJzU3dpcGVyLnNldFRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgfSxcbiAgICAgIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICB2YXIgdGh1bWJzU3dpcGVyID0gc3dpcGVyLnRodW1icy5zd2lwZXI7XG4gICAgICAgIGlmICghdGh1bWJzU3dpcGVyKSB7IHJldHVybjsgfVxuICAgICAgICBpZiAoc3dpcGVyLnRodW1icy5zd2lwZXJDcmVhdGVkICYmIHRodW1ic1N3aXBlcikge1xuICAgICAgICAgIHRodW1ic1N3aXBlci5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICAvLyBTd2lwZXIgQ2xhc3NcblxuICB2YXIgY29tcG9uZW50cyA9IFtcbiAgICBEZXZpY2UkMSxcbiAgICBTdXBwb3J0JDEsXG4gICAgQnJvd3NlciQxLFxuICAgIFJlc2l6ZSxcbiAgICBPYnNlcnZlciQxLFxuICAgIFZpcnR1YWwkMSxcbiAgICBLZXlib2FyZCQxLFxuICAgIE1vdXNld2hlZWwkMSxcbiAgICBOYXZpZ2F0aW9uJDEsXG4gICAgUGFnaW5hdGlvbiQxLFxuICAgIFNjcm9sbGJhciQxLFxuICAgIFBhcmFsbGF4JDEsXG4gICAgWm9vbSQxLFxuICAgIExhenkkMSxcbiAgICBDb250cm9sbGVyJDEsXG4gICAgQTExeSxcbiAgICBIaXN0b3J5JDEsXG4gICAgSGFzaE5hdmlnYXRpb24kMSxcbiAgICBBdXRvcGxheSQxLFxuICAgIEVmZmVjdEZhZGUsXG4gICAgRWZmZWN0Q3ViZSxcbiAgICBFZmZlY3RGbGlwLFxuICAgIEVmZmVjdENvdmVyZmxvdyxcbiAgICBUaHVtYnMkMVxuICBdO1xuXG4gIGlmICh0eXBlb2YgU3dpcGVyLnVzZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBTd2lwZXIudXNlID0gU3dpcGVyLkNsYXNzLnVzZTtcbiAgICBTd2lwZXIuaW5zdGFsbE1vZHVsZSA9IFN3aXBlci5DbGFzcy5pbnN0YWxsTW9kdWxlO1xuICB9XG5cbiAgU3dpcGVyLnVzZShjb21wb25lbnRzKTtcblxuICByZXR1cm4gU3dpcGVyO1xuXG59KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zd2lwZXIuanMubWFwXG4iLCIvKiBnbG9iYWwgZ2V0SGFzaFZhbHVlLCB0b2dnbGVIYXNoVXJsLCBnZXRSZXN0YXVyYW50Q291bnQgKi9cbi8qKlxuICogQ2F0ZWdvcnlCYXIgQ29tcG9uZW50XG4gKi9cblxuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuaW1wb3J0IHsgY2hlY2tQcm9wVHlwZXMsIG9uV2luZG93TG9hZCB9IGZyb20gJy4uL2xpYi9oZWxwZXJzJ1xuaW1wb3J0IHsgQ2hpcHNMaXN0LCBQb3B1cCwgU2VhcmNoQm94IH0gZnJvbSAnQHRha2Vhd2F5L3VpLXZhbmlsbGEnXG4vLyBpbXBvcnQgeyBDVVNUT01fRVZFTlRTIH0gZnJvbSAnLi4vZW51bXMvY3VzdG9tRXZlbnRzJ1xuaW1wb3J0IE1lZGlhUXVlcnlTZXJ2aWNlIGZyb20gJy4uL3NlcnZpY2VzL21lZGlhcXVlcnkuc2VydmljZSdcbi8vIGltcG9ydCB0cmFja2luZ1NlcnZpY2UgZnJvbSAnLi4vc2VydmljZXMvdHJhY2tpbmcuc2VydmljZSdcbi8vIGltcG9ydCB7IHBpaURhdGFSZXBsYWNlciB9IGZyb20gJy4uL3NlcnZpY2VzL3BpaURhdGEuc2VydmljZSdcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2F0ZWdvcnlCYXIge1xuICBfY2xhc3NTZWxlY3RvciA9IHtcbiAgICBDQVRFR09SWTogJ2tpdGNoZW4tdHlwZXNfX2NhdGVnb3J5JyxcbiAgICBDSElQOiAndHYtY2hpcHMtcmVzdWx0c19faXRlbScsXG4gICAgQ0hJUF9TRUxFQ1RfQUxMOiAndHYtY2hpcHMtcmVzdWx0c19faXRlbS0tc2VsZWN0LWFsbCcsXG4gICAgTk9fUkVTVUxUU19CVVRUT046ICd0di1jaGlwcy1uby1yZXN1bHRzX19idXR0b24nLFxuICAgIFNFTEVDVF9BTEw6ICdraXRjaGVuLXR5cGVzX19zZWxlY3QtYWxsJyxcbiAgICBTSE9XX01PUkU6ICdraXRjaGVuLXR5cGVzX19zaG93LW1vcmUnLFxuICAgIFNMSURFOiAnc3dpcGVyLXNsaWRlJyxcbiAgICBKU19TSE9XX01PUkU6ICdqcy1raXRjaGVuLXR5cGVzX19zaG93LW1vcmUnLFxuICAgIEpTX0NBVEVHT1JZOiAnanMta2l0Y2hlbi10eXBlc19fa2l0Y2hlbi10eXBlJyxcbiAgICBKU19DQVRFR09SWV9TSE9XX01PUkU6ICdqcy1jYXRlZ29yeS1mcm9tLXNob3ctbW9yZScsXG4gICAgSlNfS0lUQ0hFTl9CQVI6ICdqcy1raXRjaGVuLXR5cGUtc3RpY2t5JyxcbiAgICBKU19QT1BVUF9IRUFERVI6ICdqcy1oZWFkZXItY29udGVudCcsXG4gICAgSlNfU0VMRUNUX0FMTDogJ2pzLWtpdGNoZW4tdHlwZXNfX3NlbGVjdC1hbGwnLFxuICAgIEpTX1NFTEVDVEVEX0NBVEVHT1JZOiAnZmlsdGVyLWxhYmVsLXNlbGVjdGVkJyxcbiAgICBKU19LSVRDSEVOX0JBUl9DT05UQUlORVI6ICdqcy1raXRjaGVuLXR5cGUtd3JhcHBlcidcbiAgfVxuXG4gIF9kYXRhVHlwZVNlbGVjdG9yID0gJ0N1aXNpbmUnXG5cbiAgX21lZGlhUXVlcnlTZXJ2aWNlXG5cbiAgX3Byb3BUeXBlcyA9IHtcbiAgICBzd2lwZXI6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZFxuICB9XG5cbiAgX3N0YXRlID0ge1xuICAgIHNlbGVjdEFsbFVybDogdW5kZWZpbmVkLFxuICAgIG1heE51bWJlck9mQ2F0ZWdvcmllczogMCxcbiAgICBhbGxDYXRlZ29yaWVzOiBbXSxcbiAgICBkZWZhdWx0Q2F0ZWdvcmllczogW10sXG4gICAgc2xpZGVUb0luZGV4OiB1bmRlZmluZWQsXG4gICAgZXh0cmFDYXRlZ29yeUF0VGhlRW5kOiB1bmRlZmluZWQsXG4gICAgc2VsZWN0ZWRDYXRlZ29yeUZyb21Qb3B1cDogdW5kZWZpbmVkLFxuICAgIHNlYXJjaFN0cmluZzogdW5kZWZpbmVkXG4gIH1cblxuICBfdHJhbnNsYXRpb25zXG5cbiAgY29uc3RydWN0b3IgKGRhdGEpIHtcbiAgICBjaGVja1Byb3BUeXBlcyh0aGlzLl9wcm9wVHlwZXMsIGRhdGEsICdwcm9wJywgJ0tpdGNoZW5CYXInKVxuICAgIHRoaXMucHJvcHMgPSBPYmplY3QuZnJlZXplKGRhdGEpXG4gIH1cblxuICBpbml0ID0gKCkgPT4ge1xuICAgIHRoaXMuX21lZGlhUXVlcnlTZXJ2aWNlID0gbmV3IE1lZGlhUXVlcnlTZXJ2aWNlKClcblxuICAgIGNvbnN0ICRraXRjaGVuQmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7dGhpcy5fY2xhc3NTZWxlY3Rvci5KU19LSVRDSEVOX0JBUn1gKVxuXG4gICAgaWYgKCRraXRjaGVuQmFyKSB7XG4gICAgICB0aGlzLl90cmFuc2xhdGlvbnMgPSBKU09OLnBhcnNlKCRraXRjaGVuQmFyLmRhdGFzZXQudHJhbnNsYXRpb25zIHx8ICd7fScpXG4gICAgICB0aGlzLl9zdGF0ZS5hbGxDYXRlZ29yaWVzID0gSlNPTi5wYXJzZSgka2l0Y2hlbkJhci5kYXRhc2V0LmFsbENhdGVnb3JpZXMgfHwgJ1tdJylcbiAgICAgIHRoaXMuX3N0YXRlLnNlbGVjdEFsbFVybCA9ICRraXRjaGVuQmFyLmRhdGFzZXQudXJsU2VsZWN0QWxsIHx8ICcnXG4gICAgICAvLyBJZiB0aGVyZSBpcyBhIGhhc2ggaXQgb3ZlcmlkZXMgdGhlIGRlZmF1bHQgdmFsdWUga2l0Y2hlbmJhclxuICAgICAgaWYgKCFnZXRIYXNoVmFsdWUodGhpcy5fZGF0YVR5cGVTZWxlY3RvcikpIHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSBKU09OLnBhcnNlKCRraXRjaGVuQmFyLmRhdGFzZXQuc2VsZWN0ZWRDYXRlZ29yeSB8fCBge31gKS5jYXRlZ29yeSB8fCAnJ1xuICAgICAgICB0aGlzLl9zdGF0ZS5zZWxlY3RlZENhdGVnb3J5RnJvbVBvcHVwID0gdGhpcy5nZXRDYXRlZ29yeUJ5U2x1ZyhjYXRlZ29yeSlcbiAgICAgICAgaWYgKHRoaXMuX3N0YXRlLnNlbGVjdGVkQ2F0ZWdvcnlGcm9tUG9wdXAgIT09IG51bGwpIHtcbiAgICAgICAgICB0b2dnbGVIYXNoVXJsKHRoaXMuX2RhdGFUeXBlU2VsZWN0b3IsIHRoaXMuX3N0YXRlLnNlbGVjdGVkQ2F0ZWdvcnlGcm9tUG9wdXAuY2F0ZWdvcnlJZClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZXIgZXZlbnQgZm9yIFByZXYgQnV0dG9uXG4gICAgLy8gU2xpZGVzIHRvIHRoZSBzdGFydGluZyBwb3NpdGlvblxuICAgIGlmICh0aGlzLnByb3BzLnN3aXBlci5uYXZpZ2F0aW9uLnByZXZFbCkge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBjdXJyZW50IGV2ZW50IGxpc3RlbmVyXG4gICAgICB0aGlzLnByb3BzLnN3aXBlci5uYXZpZ2F0aW9uLmRlc3Ryb3koJ1ByZXZpb3VzQ2xpY2snKVxuICAgICAgLy8gQWRkIHRoZSBuZXcgZXZlbnQgbGlzdGVuZXJcbiAgICAgIHRoaXMucHJvcHMuc3dpcGVyLm5hdmlnYXRpb24ucHJldkVsLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdjbGljaycsXG4gICAgICAgIGV2ZW50SGFuZGxlciA9PiB7XG4gICAgICAgICAgZXZlbnRIYW5kbGVyLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICB0aGlzLnNsaWRlVG9TdGFydCgpXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyBIYW5kbGVyIGV2ZW50IGZvciBOZXh0IEJ1dHRvblxuICAgIC8vIFNsaWRlcyB0byB0aGUgZW5kaW5nIHBvc2l0aW9uXG4gICAgaWYgKHRoaXMucHJvcHMuc3dpcGVyLm5hdmlnYXRpb24ubmV4dEVsKSB7XG4gICAgICAvLyBSZW1vdmUgdGhlIGN1cnJlbnQgZXZlbnQgbGlzdGVuZXJcbiAgICAgIHRoaXMucHJvcHMuc3dpcGVyLm5hdmlnYXRpb24uZGVzdHJveSgnTmV4dENsaWNrJylcbiAgICAgIC8vIEFkZCB0aGUgbmV3IGV2ZW50IGxpc3RlbmVyXG4gICAgICB0aGlzLnByb3BzLnN3aXBlci5uYXZpZ2F0aW9uLm5leHRFbC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAnY2xpY2snLFxuICAgICAgICBldmVudEhhbmRsZXIgPT4ge1xuICAgICAgICAgIGV2ZW50SGFuZGxlci5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgdGhpcy5zbGlkZVRvRW5kKClcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cblxuICAgIHRoaXMucHJvcHMuc3dpcGVyLm9uKCdyZXNpemUnLCAoKSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcigpXG4gICAgfSlcblxuICAgIHRoaXMucmVuZGVyKClcblxuICAgIC8vIFRvIHVwZGF0ZSBncmlkIGNhbGN1bGF0aW9ucyBhZnRlciBsb2FkXG4gICAgb25XaW5kb3dMb2FkKCgpID0+IHRoaXMucHJvcHMuc3dpcGVyLnJlc2l6ZS5yZXNpemVIYW5kbGVyKCkpXG4gIH1cblxuICAvKipcbiAgICogVG8gdXBkYXRlIGNvbXBvbmVudCBjYWxjdWxhdGlvbnNcbiAgICovXG4gIHVwZGF0ZSAoKSB7XG4gICAgdGhpcy5zZXRTd2lwaW5nQ2xhc3MoKVxuICAgIHRoaXMucHJvcHMuc3dpcGVyLm5hdmlnYXRpb24udXBkYXRlKClcbiAgICB0aGlzLnByb3BzLnN3aXBlci51cGRhdGUoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB2aXNpYmxlIGNhdGVnb3JpZXMgZGVwZW5kaW5nIG9uIGRldmljZSB3aWR0aFxuICAgKi9cbiAgbWF4TnVtYmVyT2ZDYXRlZ29yaWVzID0gKCkgPT4ge1xuICAgIGxldCBudW1iZXJPZkNhdGVnb3JpZXMgPSA1XG4gICAgaWYgKHRoaXMuX21lZGlhUXVlcnlTZXJ2aWNlLnJlc3BvbmRUbygnPj1kZXNrdG9wJykpIHtcbiAgICAgIG51bWJlck9mQ2F0ZWdvcmllcyA9IDEyXG4gICAgfSBlbHNlIGlmICh0aGlzLl9tZWRpYVF1ZXJ5U2VydmljZS5yZXNwb25kVG8oJz49dGFibGV0LXBvcnRyYWl0JykpIHtcbiAgICAgIG51bWJlck9mQ2F0ZWdvcmllcyA9IDhcbiAgICB9XG4gICAgcmV0dXJuIG51bWJlck9mQ2F0ZWdvcmllc1xuICB9XG5cbiAgcmVuZGVyID0gKCkgPT4ge1xuICAgIGNvbnN0IG1heE51bWJlck9mQ2F0ZWdvcmllcyA9IHRoaXMubWF4TnVtYmVyT2ZDYXRlZ29yaWVzKClcbiAgICBjb25zdCBjYXRlZ29yaWVzID0gdGhpcy5fc3RhdGUuYWxsQ2F0ZWdvcmllcy5zbGljZSgwLCBtYXhOdW1iZXJPZkNhdGVnb3JpZXMpXG4gICAgY29uc3Qgc2VsZWN0ZWRDYXRlZ29yeUZyb21Qb3B1cCA9IHRoaXMuX3N0YXRlLnNlbGVjdGVkQ2F0ZWdvcnlGcm9tUG9wdXBcblxuICAgIC8vIENoZWNrIGlmIHJlLXJlbmRlcmluZyBpcyBuZWVkZWRcbiAgICBpZiAoXG4gICAgICBtYXhOdW1iZXJPZkNhdGVnb3JpZXMgIT09IHRoaXMuX3N0YXRlLm1heE51bWJlck9mQ2F0ZWdvcmllcyB8fFxuICAgICAgc2VsZWN0ZWRDYXRlZ29yeUZyb21Qb3B1cCAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICAvLyBIaWRlIHRoZSBiYXJcbiAgICAgIHRoaXMucHJvcHMuc3dpcGVyLiRlbFswXS5jbGFzc0xpc3QucmVtb3ZlKCd2aXNpYmxlJylcblxuICAgICAgLy8gRmlyZWQgb24gcGFnZSBsb2FkIGFuZCByZXNpemVcbiAgICAgIGlmIChtYXhOdW1iZXJPZkNhdGVnb3JpZXMgIT09IHRoaXMuX3N0YXRlLm1heE51bWJlck9mQ2F0ZWdvcmllcykge1xuICAgICAgICB0aGlzLl9zdGF0ZS5tYXhOdW1iZXJPZkNhdGVnb3JpZXMgPSBtYXhOdW1iZXJPZkNhdGVnb3JpZXNcbiAgICAgICAgdGhpcy5wcm9wcy5zd2lwZXIucmVtb3ZlQWxsU2xpZGVzKClcblxuICAgICAgICB0aGlzLl9zdGF0ZS5kZWZhdWx0Q2F0ZWdvcmllcyA9IFtdXG5cbiAgICAgICAgdGhpcy5hZGRTZWxlY3RBbGxCdXR0b24oKVxuXG4gICAgICAgIHRoaXMuYWRkRGVmYXVsdENhdGVnb3JpZXMoY2F0ZWdvcmllcylcbiAgICAgIH1cblxuICAgICAgLy8gRmlyZWQgb24gaW50ZXJhY3Rpb24gd2l0aCBwb3AtdXBcbiAgICAgIGlmIChzZWxlY3RlZENhdGVnb3J5RnJvbVBvcHVwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVFeHRyYUNhdGVnb3J5QXRUaGVFbmRPblBvcHVwSW50ZXJhY3Rpb24oc2VsZWN0ZWRDYXRlZ29yeUZyb21Qb3B1cClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEhhc2ggY2hlY2sgb24gcGFnZSBsb2FkXG4gICAgICAgIHRoaXMuaGFzaENoZWNrT25Mb2FkKClcbiAgICAgIH1cblxuICAgICAgLy8gRmlyZWQgd2hlbiBhIFNob3cgTW9yZSBidXR0b24gaXMgbmVlZGVkXG4gICAgICBpZiAodGhpcy5fc3RhdGUuYWxsQ2F0ZWdvcmllcy5sZW5ndGggPiBtYXhOdW1iZXJPZkNhdGVnb3JpZXMpIHtcbiAgICAgICAgdGhpcy5hZGRTaG93TW9yZUJ1dHRvbigpXG4gICAgICB9XG5cbiAgICAgIC8vIFNob3cgdGhlIGJhclxuICAgICAgdGhpcy5wcm9wcy5zd2lwZXIuJGVsWzBdLmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKVxuXG4gICAgICB0aGlzLnVwZGF0ZSgpXG4gICAgfVxuXG4gICAgdGhpcy5oYW5kbGVTbGlkZXJQb3NpdGlvbigpXG5cbiAgICB0aGlzLmFkZEJhckV2ZW50TGlzdGVuZXJzKClcbiAgfVxuXG4gIGhhbmRsZVNsaWRlclBvc2l0aW9uICgpIHtcbiAgICBpZiAodGhpcy5fc3RhdGUuc2xpZGVUb0luZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucHJvcHMuc3dpcGVyLnNsaWRlVG8odGhpcy5fc3RhdGUuc2xpZGVUb0luZGV4KVxuICAgICAgdGhpcy5fc3RhdGUuc2xpZGVUb0luZGV4ID0gdW5kZWZpbmVkXG4gICAgfVxuICB9XG5cbiAgYWRkU2hvd01vcmVCdXR0b24gKCkge1xuICAgIGxldCAkc2hvd01vcmUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHt0aGlzLl9jbGFzc1NlbGVjdG9yLkpTX1NIT1dfTU9SRX1gKVxuICAgIGlmICghJHNob3dNb3JlKSB7XG4gICAgICB0aGlzLnByb3BzLnN3aXBlci5hcHBlbmRTbGlkZSh0aGlzLnJlbmRlclNob3dNb3JlKCkpXG4gICAgICAkc2hvd01vcmUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHt0aGlzLl9jbGFzc1NlbGVjdG9yLkpTX1NIT1dfTU9SRX1gKVxuICAgICAgJHNob3dNb3JlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vcGVuU2hvd01vcmUpXG4gICAgfVxuICB9XG5cbiAgYWRkU2VsZWN0QWxsQnV0dG9uICgpIHtcbiAgICB0aGlzLnByb3BzLnN3aXBlci5hcHBlbmRTbGlkZSh0aGlzLnJlbmRlclNlbGVjdEFsbCgpKVxuICB9XG5cbiAgYWRkRGVmYXVsdENhdGVnb3JpZXMgKGNhdGVnb3JpZXMpIHtcbiAgICBjYXRlZ29yaWVzLmZvckVhY2goKGNhdGVnb3J5KSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnN3aXBlci5hcHBlbmRTbGlkZSh0aGlzLnJlbmRlclNpbmdsZUNhdGVnb3J5KHsgY2F0ZWdvcnkgfSkpXG4gICAgICB0aGlzLl9zdGF0ZS5kZWZhdWx0Q2F0ZWdvcmllcy5wdXNoKGNhdGVnb3J5KVxuICAgIH0pXG4gIH1cblxuICBoYXNoQ2hlY2tPbkxvYWQgKCkge1xuICAgIGxldCBjdXJyZW50U2VsZWN0aW9uID0gTnVtYmVyKGdldEhhc2hWYWx1ZSh0aGlzLl9kYXRhVHlwZVNlbGVjdG9yKSlcbiAgICBpZiAoaXNOYU4oY3VycmVudFNlbGVjdGlvbikpIHtcbiAgICAgIGN1cnJlbnRTZWxlY3Rpb24gPSAwXG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlQ2F0ZWdvcnkgPSB0aGlzLmdldENhdGVnb3J5QnlJZChjdXJyZW50U2VsZWN0aW9uKVxuXG4gICAgaWYgKGFjdGl2ZUNhdGVnb3J5ICE9PSBudWxsKSB7XG4gICAgICBpZiAoIXRoaXMuX3N0YXRlLmRlZmF1bHRDYXRlZ29yaWVzLmluY2x1ZGVzKGFjdGl2ZUNhdGVnb3J5KSkge1xuICAgICAgICB0aGlzLl9zdGF0ZS5leHRyYUNhdGVnb3J5QXRUaGVFbmQgPSBhY3RpdmVDYXRlZ29yeVxuICAgICAgICB0aGlzLnByb3BzLnN3aXBlci5hcHBlbmRTbGlkZSh0aGlzLnJlbmRlclNpbmdsZUNhdGVnb3J5KHsgY2F0ZWdvcnk6IGFjdGl2ZUNhdGVnb3J5IH0pKVxuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RDYXRlZ29yeShhY3RpdmVDYXRlZ29yeSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGVmYXVsdCBzZWxlY3Rpb24gaXMgXCJTZWxlY3QgQWxsXCIgYnV0dG9uXG4gICAgICB0aGlzLnNlbGVjdENhdGVnb3J5KClcbiAgICB9XG4gIH1cblxuICBoYW5kbGVFeHRyYUNhdGVnb3J5QXRUaGVFbmRPblBvcHVwSW50ZXJhY3Rpb24gKHNlbGVjdGVkQ2F0ZWdvcnlGcm9tUG9wdXApIHtcbiAgICAvLyBVc2VyIGNsaWNrZWQgYSBjYXRlZ29yeSBvbiBwb3AtdXBcbiAgICBjb25zdCBleHRyYUNhdGVnb3J5QXRUaGVFbmQgPSB0aGlzLl9zdGF0ZS5leHRyYUNhdGVnb3J5QXRUaGVFbmRcblxuICAgIGlmIChzZWxlY3RlZENhdGVnb3J5RnJvbVBvcHVwID09PSBudWxsKSB7XG4gICAgICAvLyBVc2VyIGNsaWNrZWQgU2VsZWN0IEFsbCBmcm9tIHBvcC11cFxuICAgICAgdGhpcy5zZWxlY3RDYXRlZ29yeSgpXG4gICAgfSBlbHNlIGlmIChleHRyYUNhdGVnb3J5QXRUaGVFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gVXNlciBjbGlja2VkIGEgY2F0ZWdvcnkgb24gcG9wLXVwLCBmaXJzdCB0aW1lXG4gICAgICBpZiAoIXRoaXMuX3N0YXRlLmRlZmF1bHRDYXRlZ29yaWVzLmluY2x1ZGVzKHNlbGVjdGVkQ2F0ZWdvcnlGcm9tUG9wdXApKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlU2hvd01vcmVCdXR0b24oKVxuICAgICAgICB0aGlzLnByb3BzLnN3aXBlci5hcHBlbmRTbGlkZSh0aGlzLnJlbmRlclNpbmdsZUNhdGVnb3J5KHsgY2F0ZWdvcnk6IHNlbGVjdGVkQ2F0ZWdvcnlGcm9tUG9wdXAgfSkpXG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdENhdGVnb3J5KHNlbGVjdGVkQ2F0ZWdvcnlGcm9tUG9wdXApXG4gICAgfSBlbHNlIGlmIChleHRyYUNhdGVnb3J5QXRUaGVFbmQgPT09IHNlbGVjdGVkQ2F0ZWdvcnlGcm9tUG9wdXApIHtcbiAgICAgIC8vIFVzZXIgY2xpY2tlZCB0aGUgYWN0aXZlIGNhdGVnb3J5IG9uIHBvcC11cFxuICAgICAgdGhpcy5zZWxlY3RDYXRlZ29yeShleHRyYUNhdGVnb3J5QXRUaGVFbmQpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVzZXIgY2xpY2tlZCBhIGRpZmZlcmVudCBjYXRlZ29yeSB0aGFuIGFjdGl2ZSBvbmUgb24gcG9wLXVwXG4gICAgICBpZiAoIXRoaXMuX3N0YXRlLmRlZmF1bHRDYXRlZ29yaWVzLmluY2x1ZGVzKHNlbGVjdGVkQ2F0ZWdvcnlGcm9tUG9wdXApKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlU2hvd01vcmVCdXR0b24oKVxuICAgICAgICB0aGlzLnJlbW92ZUxhc3RDYXRlZ29yeSgpXG4gICAgICAgIHRoaXMucHJvcHMuc3dpcGVyLmFwcGVuZFNsaWRlKHRoaXMucmVuZGVyU2luZ2xlQ2F0ZWdvcnkoeyBjYXRlZ29yeTogc2VsZWN0ZWRDYXRlZ29yeUZyb21Qb3B1cCB9KSlcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0Q2F0ZWdvcnkoc2VsZWN0ZWRDYXRlZ29yeUZyb21Qb3B1cClcbiAgICB9XG4gICAgdGhpcy5fc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeUZyb21Qb3B1cCA9IHVuZGVmaW5lZFxuICB9XG5cbiAgc2VsZWN0Q2F0ZWdvcnkgKHNlbGVjdGVkQ2F0ZWdvcnkgPSBudWxsKSB7XG4gICAgY29uc3QgJGtpdGNoZW5CYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHt0aGlzLl9jbGFzc1NlbGVjdG9yLkpTX0tJVENIRU5fQkFSfWApXG4gICAgY29uc3QgJGN1cnJlbnRTZWxlY3Rpb24gPSAka2l0Y2hlbkJhci5xdWVyeVNlbGVjdG9yKGAuJHt0aGlzLl9jbGFzc1NlbGVjdG9yLkpTX1NFTEVDVEVEX0NBVEVHT1JZfWApXG4gICAgbGV0ICRzZWxlY3RlZENhdGVnb3J5XG4gICAgbGV0IHNsaWRlVG9JbmRleFxuXG4gICAgLy8gRGUtc2VsZWN0IGN1cnJlbnQgc2VsZWN0aW9uLCBpZiBwcmVzZW50XG4gICAgaWYgKCRjdXJyZW50U2VsZWN0aW9uKSB7XG4gICAgICAkY3VycmVudFNlbGVjdGlvbi5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2NsYXNzU2VsZWN0b3IuSlNfU0VMRUNURURfQ0FURUdPUlkpXG4gICAgfVxuXG4gICAgaWYgKHNlbGVjdGVkQ2F0ZWdvcnkgPT09IG51bGwpIHtcbiAgICAgIC8vIFNlbGVjdCBBbGwgaXMgY2xpY2tlZFxuICAgICAgJHNlbGVjdGVkQ2F0ZWdvcnkgPSAka2l0Y2hlbkJhci5xdWVyeVNlbGVjdG9yKGAuJHt0aGlzLl9jbGFzc1NlbGVjdG9yLkpTX1NFTEVDVF9BTEx9YClcbiAgICAgIHNsaWRlVG9JbmRleCA9IDBcbiAgICB9IGVsc2Uge1xuICAgICAgJHNlbGVjdGVkQ2F0ZWdvcnkgPSAka2l0Y2hlbkJhci5xdWVyeVNlbGVjdG9yKGBbZGF0YS12YWx1ZT1cIiR7c2VsZWN0ZWRDYXRlZ29yeS5jYXRlZ29yeUlkfVwiXWApXG4gICAgICBzbGlkZVRvSW5kZXggPSB0aGlzLl9zdGF0ZS5kZWZhdWx0Q2F0ZWdvcmllcy5maW5kSW5kZXgoKGNhdGVnb3J5KSA9PiBjYXRlZ29yeS5jYXRlZ29yeUlkID09PSBOdW1iZXIoc2VsZWN0ZWRDYXRlZ29yeS5jYXRlZ29yeUlkKSlcblxuICAgICAgaWYgKCF0aGlzLl9zdGF0ZS5kZWZhdWx0Q2F0ZWdvcmllcy5pbmNsdWRlcyhzZWxlY3RlZENhdGVnb3J5KSkge1xuICAgICAgICB0aGlzLl9zdGF0ZS5leHRyYUNhdGVnb3J5QXRUaGVFbmQgPSBzZWxlY3RlZENhdGVnb3J5XG4gICAgICAgIHNsaWRlVG9JbmRleCA9IHRoaXMuX3N0YXRlLmRlZmF1bHRDYXRlZ29yaWVzLmxlbmd0aFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICgkc2VsZWN0ZWRDYXRlZ29yeSkge1xuICAgICAgJHNlbGVjdGVkQ2F0ZWdvcnkuY2xhc3NMaXN0LmFkZCh0aGlzLl9jbGFzc1NlbGVjdG9yLkpTX1NFTEVDVEVEX0NBVEVHT1JZKVxuICAgIH1cblxuICAgIGlmIChOdW1iZXIoc2xpZGVUb0luZGV4KSA+PSAwKSB7XG4gICAgICB0aGlzLl9zdGF0ZS5zbGlkZVRvSW5kZXggPSBzbGlkZVRvSW5kZXhcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIGZ1bmN0aW9uIGZvciBcIlNlbGVjdCBBbGxcIiBidXR0b24gYXQgdGhlIGJlZ2lubmluZ1xuICAgKi9cbiAgcmVuZGVyU2VsZWN0QWxsID0gKCkgPT4gYFxuICAgIDxhXG4gICAgICBkYXRhLXR5cGU9XCIke3RoaXMuX2RhdGFUeXBlU2VsZWN0b3J9XCJcbiAgICAgIGRhdGEtdmFsdWU9XCJyZXNldFwiXG4gICAgICBkYXRhLWljb249XCLupLhcIlxuICAgICAgY2xhc3M9XCJcbiAgICAgICAgZmlsdGVyLWxhYmVsXG4gICAgICAgIGZpbHRlci1yZXNldFxuICAgICAgICAke3RoaXMuX2NsYXNzU2VsZWN0b3IuU0xJREV9XG4gICAgICAgICR7dGhpcy5fY2xhc3NTZWxlY3Rvci5TRUxFQ1RfQUxMfVxuICAgICAgICAke3RoaXMuX2NsYXNzU2VsZWN0b3IuSlNfU0VMRUNUX0FMTH1cbiAgICAgIFwiXG4gICAgICBocmVmPVwiJHt0aGlzLl9zdGF0ZS5zZWxlY3RBbGxVcmx9XCJcbiAgICA+PHNwYW4gY2xhc3M9XCJzd2lwZXItc2xpZGVfX2NvbnRleHRcIj4ke3RoaXMuX3RyYW5zbGF0aW9ucy5zZWxlY3RBbGxUZXh0fTwvc3Bhbj48L2E+XG4gIGBcblxuICAvKipcbiAgICogUmVuZGVyIGZ1bmN0aW9uIGZvciBzaW5nbGUga2l0Y2hlbiB0eXBlXG4gICAqL1xuICByZW5kZXJTaW5nbGVDYXRlZ29yeSA9ICh7IGNhdGVnb3J5IH0pID0+IGBcbiAgICA8YVxuICAgICAgZGF0YS10eXBlPVwiJHt0aGlzLl9kYXRhVHlwZVNlbGVjdG9yfVwiXG4gICAgICBkYXRhLXZhbHVlPVwiJHtjYXRlZ29yeS5jYXRlZ29yeUlkfVwiXG4gICAgICBkYXRhLWljb249XCIke2NhdGVnb3J5Lmljb259XCJcbiAgICAgIGNsYXNzPVwiXG4gICAgICAgIGZpbHRlci1sYWJlbFxuICAgICAgICBzdWJjYXRsaW5rXG4gICAgICAgICR7dGhpcy5fY2xhc3NTZWxlY3Rvci5TTElERX1cbiAgICAgICAgJHt0aGlzLl9jbGFzc1NlbGVjdG9yLkNBVEVHT1JZfVxuICAgICAgICAke3RoaXMuX2NsYXNzU2VsZWN0b3IuSlNfQ0FURUdPUll9XG4gICAgICBcIlxuICAgICAgaHJlZj1cIiR7Y2F0ZWdvcnkuaHJlZn1cIlxuICAgICAgYWx0PVwiJHtjYXRlZ29yeS5hbHRUZXh0fVwiXG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3M9XCJzd2lwZXItc2xpZGVfX2NvbnRleHRcIj4ke2NhdGVnb3J5LmNhdGVnb3J5VGV4dH08L3NwYW4+XG4gICAgPC9hPlxuICBgXG5cbiAgLyoqXG4gICAqIFJlbmRlciBmdW5jdGlvbiBmb3IgXCJTaG93IE1vcmVcIiBidXR0b24gYXQgdGhlIGVuZFxuICAgKi9cbiAgcmVuZGVyU2hvd01vcmUgPSAoKSA9PiBgXG4gICAgPGFcbiAgICAgIGNsYXNzPVwiXG4gICAgICAgICR7dGhpcy5fY2xhc3NTZWxlY3Rvci5TTElERX1cbiAgICAgICAgJHt0aGlzLl9jbGFzc1NlbGVjdG9yLlNIT1dfTU9SRX1cbiAgICAgICAgJHt0aGlzLl9jbGFzc1NlbGVjdG9yLkpTX1NIT1dfTU9SRX1cbiAgICAgIFwiXG4gICAgICBhbHQ9XCIke3RoaXMuX3RyYW5zbGF0aW9ucy5zaG93TW9yZVRleHR9XCJcbiAgICA+XG4gICAgICA8c3BhbiBjbGFzcz1cInN3aXBlci1zbGlkZV9fY29udGV4dFwiPiR7dGhpcy5fdHJhbnNsYXRpb25zLnNob3dNb3JlVGV4dH08L3NwYW4+XG4gICAgPC9hPlxuICBgXG5cbiAgLyoqXG4gICAqIFNjcm9sbCB0byB0aGUgbmV4dCBcInBhZ2VcIiBvZiBjYXRlZ29yaWVzXG4gICAqL1xuICBzbGlkZVRvTmV4dCA9ICgpID0+IHtcbiAgICBsZXQgbmV4dEluZGV4ID0gdGhpcy5wcm9wcy5zd2lwZXIuYWN0aXZlSW5kZXggKyAxXG4gICAgaWYgKG5leHRJbmRleCA8PSB0aGlzLnByb3BzLnN3aXBlci5zbGlkZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnByb3BzLnN3aXBlci5zbGlkZVRvKG5leHRJbmRleClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zbGlkZVRvRW5kKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIHRvIHRoZSBwcmV2aW91cyBcInBhZ2VcIiBvZiBjYXRlZ29yaWVzXG4gICAqL1xuICBzbGlkZVRvUHJldmlvdXMgPSAoKSA9PiB7XG4gICAgbGV0IHByZXZpb3VzSW5kZXggPSB0aGlzLnByb3BzLnN3aXBlci5hY3RpdmVJbmRleCAtIDFcbiAgICBpZiAocHJldmlvdXNJbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLnByb3BzLnN3aXBlci5zbGlkZVRvKHByZXZpb3VzSW5kZXgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2xpZGVUb1N0YXJ0KClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIHRvIHRoZSBmaXJzdCBlbGVtZW50XG4gICAqL1xuICBzbGlkZVRvU3RhcnQgPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5zd2lwZXIuc2xpZGVUbygwKVxuICB9XG5cbiAgLyoqXG4gICAqIFNjcm9sbCB0byB0aGUgbGFzdCBlbGVtZW50XG4gICAqL1xuICBzbGlkZVRvRW5kID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMuc3dpcGVyLnNsaWRlVG8odGhpcy5wcm9wcy5zd2lwZXIuc2xpZGVzLmxlbmd0aClcbiAgfVxuXG4gIHJlbW92ZVNob3dNb3JlQnV0dG9uID0gKCkgPT4ge1xuICAgIGNvbnN0IGxhc3RCdXR0b25JbmRleCA9IFtcbiAgICAgIC4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke3RoaXMuX2NsYXNzU2VsZWN0b3IuSlNfS0lUQ0hFTl9CQVJ9IC4ke3RoaXMuX2NsYXNzU2VsZWN0b3IuU0xJREV9YClcbiAgICBdLmZpbmRJbmRleCgoY2F0ZWdvcnkpID0+IGNhdGVnb3J5LmNsYXNzTGlzdC5jb250YWlucyhgJHt0aGlzLl9jbGFzc1NlbGVjdG9yLkpTX1NIT1dfTU9SRX1gKSlcblxuICAgIGlmIChsYXN0QnV0dG9uSW5kZXggPiAwKSB7XG4gICAgICB0aGlzLnByb3BzLnN3aXBlci5yZW1vdmVTbGlkZShsYXN0QnV0dG9uSW5kZXgpXG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlTGFzdENhdGVnb3J5ID0gKCkgPT4ge1xuICAgIGNvbnN0IGxhc3RDYXRlZ29yeUluZGV4ID0gW1xuICAgICAgLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7dGhpcy5fY2xhc3NTZWxlY3Rvci5KU19LSVRDSEVOX0JBUn0gLiR7dGhpcy5fY2xhc3NTZWxlY3Rvci5TTElERX06bm90KC4ke3RoaXMuX2NsYXNzU2VsZWN0b3IuSlNfU0hPV19NT1JFfSlgKVxuICAgIF0ubGVuZ3RoXG5cbiAgICBpZiAobGFzdENhdGVnb3J5SW5kZXgpIHtcbiAgICAgIHRoaXMucHJvcHMuc3dpcGVyLnJlbW92ZVNsaWRlKGxhc3RDYXRlZ29yeUluZGV4IC0gMSlcbiAgICAgIHRoaXMuX3N0YXRlLmV4dHJhQ2F0ZWdvcnlBdFRoZUVuZCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxuXG4gIGdldENhdGVnb3J5QnlOYW1lID0gKGNhdGVnb3J5TmFtZSkgPT4gdGhpcy5fc3RhdGUuYWxsQ2F0ZWdvcmllcy5maW5kKFxuICAgICh7IGNhdGVnb3J5VGV4dCB9KSA9PiBjYXRlZ29yeVRleHQgPT09IGNhdGVnb3J5TmFtZVxuICApIHx8IG51bGxcblxuICBnZXRDYXRlZ29yeUJ5U2x1ZyA9IChjYXRlZ29yeVNsdWcpID0+IHRoaXMuX3N0YXRlLmFsbENhdGVnb3JpZXMuZmluZChcbiAgICAoeyBjd1NsdWcgfSkgPT4gY3dTbHVnID09PSBjYXRlZ29yeVNsdWcpIHx8IG51bGxcblxuICBnZXRDYXRlZ29yeUJ5SWQgPSAoY2F0ZWdvcnlJZCkgPT4gdGhpcy5fc3RhdGUuYWxsQ2F0ZWdvcmllcy5maW5kKFxuICAgIGNhdGVnb3J5ID0+IGNhdGVnb3J5LmNhdGVnb3J5SWQgPT09IGNhdGVnb3J5SWRcbiAgKSB8fCBudWxsXG5cbiAgZ2V0QWxsQ2F0ZWdvcnlOYW1lcyA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUuYWxsQ2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBjYXRlZ29yeS5jYXRlZ29yeVRleHQpXG4gIH1cblxuICBvcGVuU2hvd01vcmUgPSAoKSA9PiB7XG4gICAgLy8gT3BlbiB0aGUgcG9wdXBcbiAgICB0aGlzLnBvcHVwID0gbmV3IFBvcHVwKHtcbiAgICAgIGhlYWRlckNvbnRlbnQ6IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cImpzLWhlYWRlci1jb250ZW50XCI+XG4gICAgICAgICAgPGgxIGNsYXNzPVwidHYtcG9wdXBfX2hlYWRlci10ZXh0XCI+JHt0aGlzLl90cmFuc2xhdGlvbnMuYWxsQ2F0ZWdvcmllc308L2gxPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIGAsXG4gICAgICBtYWluQ29udGVudDogJycsXG4gICAgICBvcGVuQ2FsbGJhY2s6IHRoaXMuYWRkQ29udGVudFRvUG9wdXAsXG4gICAgICBjbG9zZUNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2VuZENsb3NlZFBvcHVwRXZlbnQoe1xuICAgICAgICAgIHNlYXJjaFN0cmluZzogcGlpRGF0YVJlcGxhY2VyKHsgZGF0YTogdGhpcy5fc3RhdGUuc2VhcmNoU3RyaW5nIH0pLFxuICAgICAgICAgIGNvdW50UmVzdGF1cmFudFNob3duOiAodHlwZW9mIGdldFJlc3RhdXJhbnRDb3VudCA9PT0gJ2Z1bmN0aW9uJykgPyBnZXRSZXN0YXVyYW50Q291bnQoKSA6IHVuZGVmaW5lZFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5wb3B1cC5yZW5kZXIoKVxuICAgIHRoaXMuc2VuZEhhc0NsaWNrZWRNb3JlS2l0Y2hlblR5cGVzRXZlbnQoKVxuICB9XG5cbiAgYWRkQ29udGVudFRvUG9wdXAgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBKU19LSVRDSEVOX0JBUl9DT05UQUlORVIsIEpTX1BPUFVQX0hFQURFUiwgSlNfU0VMRUNURURfQ0FURUdPUlkgfSA9IHRoaXMuX2NsYXNzU2VsZWN0b3JcbiAgICBsZXQgcmVzZXRTZWFyY2hcbiAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gWy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0pTX0tJVENIRU5fQkFSX0NPTlRBSU5FUn0gLiR7SlNfU0VMRUNURURfQ0FURUdPUll9YCldLm1hcChcbiAgICAgICRzZWxlY3RlZENhdGVnb3J5ID0+ICRzZWxlY3RlZENhdGVnb3J5LmlubmVyVGV4dC50cmltKClcbiAgICApXG5cbiAgICBjb25zdCAkY2hpcHNMb2NhdGlvbiA9IHRoaXMucG9wdXAuZ2V0TWFpbkNvbnRlbnQoKVxuICAgIGNvbnN0IGNoaXBMaXN0ID0gbmV3IENoaXBzTGlzdCh7XG4gICAgICAkY29udGFpbmVyOiAkY2hpcHNMb2NhdGlvbixcbiAgICAgIGNoaXBzTGlzdDogdGhpcy5nZXRBbGxDYXRlZ29yeU5hbWVzKCksXG4gICAgICBkZWZhdWx0U2VsZWN0ZWQ6IHNlbGVjdGVkSXRlbXMsXG4gICAgICBzZWxlY3RBbGxUZXh0OiB0aGlzLl90cmFuc2xhdGlvbnMuc2VsZWN0QWxsVGV4dCxcbiAgICAgIHNlbGVjdGVkQ2FsbGJhY2s6IChbaXRlbVRleHRdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2F0ZWdvcnkgPSB0aGlzLmdldENhdGVnb3J5QnlOYW1lKGl0ZW1UZXh0KVxuXG4gICAgICAgIHRoaXMuc2VuZEhhc0ZpbHRlcmVkS2l0Y2hlblR5cGVFdmVudCh7XG4gICAgICAgICAga2l0Y2hlblR5cGVJRDogKHNlbGVjdGVkQ2F0ZWdvcnkgPT09IG51bGwpXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogTnVtYmVyKHNlbGVjdGVkQ2F0ZWdvcnkuY2F0ZWdvcnlJZCksXG4gICAgICAgICAga2l0Y2hlblR5cGVMb2NhdGlvbjogJ3BvcHVwJyxcbiAgICAgICAgICBraXRjaGVuVHlwZVBvc2l0aW9uOiB1bmRlZmluZWRcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeSA9PT0gbnVsbCB8fCAoXG4gICAgICAgICAgICB0aGlzLl9zdGF0ZS5leHRyYUNhdGVnb3J5QXRUaGVFbmQgPT09IHNlbGVjdGVkQ2F0ZWdvcnkgJiZcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMuaW5jbHVkZXMoaXRlbVRleHQpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBVc2VyIGNsaWNrZWQgXCJTZWxlY3QgQWxsXCIgb3IgQWN0aXZlIENhdGVnb3J5IG9uIHBvcC11cFxuICAgICAgICAgIHRoaXMuX3N0YXRlLnNlbGVjdGVkQ2F0ZWdvcnlGcm9tUG9wdXAgPSBudWxsXG5cbiAgICAgICAgICB0b2dnbGVIYXNoVXJsKHRoaXMuX2RhdGFUeXBlU2VsZWN0b3IsICdyZXNldCcpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVXNlciBjbGlja2VkIGEgdmFsaWQgY2F0ZWdvcnkgb24gcG9wLXVwXG4gICAgICAgICAgdGhpcy5fc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeUZyb21Qb3B1cCA9IHNlbGVjdGVkQ2F0ZWdvcnlcblxuICAgICAgICAgIHRvZ2dsZUhhc2hVcmwodGhpcy5fZGF0YVR5cGVTZWxlY3Rvciwgc2VsZWN0ZWRDYXRlZ29yeS5jYXRlZ29yeUlkKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW5kZXIoKVxuXG4gICAgICAgIC8vIE1ha2UgdGhlIGNsb3NpbmcgbW9yZSB2aXN1YWxcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5wb3B1cC5jbG9zZVBvcHVwKClcbiAgICAgICAgfSwgMjAwKVxuICAgICAgfSxcbiAgICAgIG5vUmVzdWx0c1RleHQ6IHRoaXMuX3RyYW5zbGF0aW9ucy5ub0NhdGVnb3JpZXNUZXh0LFxuICAgICAgcG9zaXRpb246ICdiZWZvcmVlbmQnLFxuICAgICAgcmVzZXRDYWxsYmFjazogcmVzZXRTZWFyY2hcbiAgICB9KVxuICAgIGNoaXBMaXN0LnJlbmRlcigpXG4gICAgLy8gQFRPRE86IE1vdmUgdGhpcyBsb2dpYyB0byBpbml0aWFsaXphdGlvbiBvZiBDaGlwc0xpc3Qgd2l0aCBhIHBhcmFtZXRlciByZXNldFNlYXJjaFRleHQgZm9yIHRoZSBjb21wb25lbnRcbiAgICAkY2hpcHNMb2NhdGlvbi5xdWVyeVNlbGVjdG9yKGAuJHt0aGlzLl9jbGFzc1NlbGVjdG9yLk5PX1JFU1VMVFNfQlVUVE9OfWApLnRleHRDb250ZW50ID0gdGhpcy5fdHJhbnNsYXRpb25zLnJlc2V0U2VhcmNoXG5cbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtKU19QT1BVUF9IRUFERVJ9YCkuZm9yRWFjaCgoJGNvbnRhaW5lcikgPT4ge1xuICAgICAgbGV0IGhhc1N0YXJ0ZWRTZWFyY2ggPSBmYWxzZVxuICAgICAgY29uc3Qgc2VhcmNoQm94ID0gbmV3IFNlYXJjaEJveCh7XG4gICAgICAgICRjb250YWluZXI6ICRjb250YWluZXIsXG4gICAgICAgIHBsYWNlaG9sZGVyVGV4dDogdGhpcy5fdHJhbnNsYXRpb25zLnNlYXJjaENhdGVnb3JpZXMsXG4gICAgICAgIHNlYXJjaENoYW5nZUZuOiAoc2VhcmNoVmFsdWUpID0+IHtcbiAgICAgICAgICBjaGlwTGlzdC5maWx0ZXJDaGlwcyhzZWFyY2hWYWx1ZSlcbiAgICAgICAgICBpZiAoc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNlYXJjaFN0cmluZyA9IHNlYXJjaFZhbHVlXG5cbiAgICAgICAgICAgIGlmIChzZWFyY2hWYWx1ZS5sZW5ndGggPT09IDEgJiYgIWhhc1N0YXJ0ZWRTZWFyY2gpIHtcbiAgICAgICAgICAgICAgaGFzU3RhcnRlZFNlYXJjaCA9IHRydWVcbiAgICAgICAgICAgICAgdGhpcy5zZW5kSGFzU3RhcnRlZFNlYXJjaGluZygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNoaXBMaXN0LmNoZWNrSWZIYXNSZXN1bHRzKCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZW5kTm9TZWFyY2hSZXN1bHRzRXZlbnQoe1xuICAgICAgICAgICAgICAgIHNlYXJjaFN0cmluZzogcGlpRGF0YVJlcGxhY2VyKHsgZGF0YTogc2VhcmNoVmFsdWUgfSlcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlLnNlYXJjaFN0cmluZyAmJiB0aGlzLl9zdGF0ZS5zZWFyY2hTdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB0aGlzLnNlbmRIYXNSZXNldFNlYXJjaGluZygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZWFyY2hTdHJpbmcgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGhhc1N0YXJ0ZWRTZWFyY2ggPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaW5uZXJDb250ZW50OiAnJyxcbiAgICAgICAgcG9zaXRpb246ICdiZWZvcmVlbmQnXG4gICAgICB9KVxuICAgICAgc2VhcmNoQm94LnJlbmRlcigpXG4gICAgICBjaGlwTGlzdC5mb2N1c1NlbGVjdGVkKClcbiAgICAgIHJlc2V0U2VhcmNoID0gKCkgPT4gc2VhcmNoQm94LnNldFNlYXJjaCh7IG5ld1ZhbHVlOiAnJyB9KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGFsbCBzbGlkZXMgYXJlIHZpc2libGVcbiAgICovXG4gIGNoZWNrSWZBbGxTbGlkZXNBcmVWaXNpYmxlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgJHdyYXBwZXJFbCB9ID0gdGhpcy5wcm9wcy5zd2lwZXJcblxuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gJHdyYXBwZXJFbC5vdXRlcldpZHRoKClcblxuICAgIGxldCBjdXJyZW50V2lkdGggPSAwXG5cbiAgICAkd3JhcHBlckVsLmZpbmQoJy5zd2lwZXItc2xpZGUnKS5lYWNoKGZ1bmN0aW9uICgpIHsgY3VycmVudFdpZHRoICs9IHRoaXMub2Zmc2V0V2lkdGggfSlcblxuICAgIHJldHVybiBjdXJyZW50V2lkdGggPD0gY29udGFpbmVyV2lkdGhcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNpZGVzIHdoZW4gdG8gZW5hYmxlL2Rpc2FibGUgc3dpcGluZ1xuICAgKi9cbiAgc2V0U3dpcGluZ0NsYXNzID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLmNoZWNrSWZBbGxTbGlkZXNBcmVWaXNpYmxlKCkgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuZGlzYWJsZVN3aXBpbmcoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuYWJsZVN3aXBpbmcoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIHN3aXBpbmdcbiAgICovXG4gIGVuYWJsZVN3aXBpbmcgPSAoKSA9PiB7XG4gICAgY29uc3QgeyAkZWwsIHBhcmFtczogeyBub1N3aXBpbmdDbGFzcyB9IH0gPSB0aGlzLnByb3BzLnN3aXBlclxuICAgICRlbC5yZW1vdmVDbGFzcyhub1N3aXBpbmdDbGFzcylcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyBzd2lwaW5nXG4gICAqL1xuICBkaXNhYmxlU3dpcGluZyA9ICgpID0+IHtcbiAgICBjb25zdCB7ICRlbCwgcGFyYW1zOiB7IG5vU3dpcGluZ0NsYXNzIH0gfSA9IHRoaXMucHJvcHMuc3dpcGVyXG4gICAgJGVsLmFkZENsYXNzKG5vU3dpcGluZ0NsYXNzKVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYWNraW5nXG4gICAqL1xuXG4gIHNlbmROb1NlYXJjaFJlc3VsdHNFdmVudCA9ICh7IHNlYXJjaFN0cmluZyB9KSA9PiB0cmFja2luZ1NlcnZpY2Uuc2VuZCh7XG4gICAgZXZlbnROYW1lOiAnaGFzTm9TZWFyY2hSZXN1bHRzJyxcbiAgICBldmVudERhdGE6IHtcbiAgICAgIHNlYXJjaFN0cmluZyxcbiAgICAgIHNlYXJjaFR5cGU6ICdraXRjaGVuZmlsdGVyJ1xuICAgIH1cbiAgfSlcblxuICBzZW5kQ2xvc2VkUG9wdXBFdmVudCA9ICh7IHNlYXJjaFN0cmluZywgY291bnRSZXN0YXVyYW50U2hvd24gfSkgPT4gdHJhY2tpbmdTZXJ2aWNlLnNlbmQoe1xuICAgIGV2ZW50TmFtZTogJ2hhc0Nsb3NlZEtpdGNoZW5GaWx0ZXJQb3B1cCcsXG4gICAgZXZlbnREYXRhOiB7XG4gICAgICBzZWFyY2hTdHJpbmcsXG4gICAgICBjb3VudFJlc3RhdXJhbnRTaG93blxuICAgIH1cbiAgfSlcblxuICBzZW5kSGFzU3RhcnRlZFNlYXJjaGluZyA9ICgpID0+IHRyYWNraW5nU2VydmljZS5zZW5kKHtcbiAgICBldmVudE5hbWU6ICdoYXNTdGFydGVkU2VhcmNoaW5nJyxcbiAgICBldmVudERhdGE6IHtcbiAgICAgIHNlYXJjaFR5cGU6ICdraXRjaGVuZmlsdGVyJ1xuICAgIH1cbiAgfSlcblxuICBzZW5kSGFzUmVzZXRTZWFyY2hpbmcgPSAoKSA9PiB0cmFja2luZ1NlcnZpY2Uuc2VuZCh7XG4gICAgZXZlbnROYW1lOiAnaGFzUmVzZXRTZWFyY2hpbmcnLFxuICAgIGV2ZW50RGF0YToge1xuICAgICAgc2VhcmNoVHlwZTogJ2tpdGNoZW5maWx0ZXInXG4gICAgfVxuICB9KVxuXG4gIGFkZEJhckV2ZW50TGlzdGVuZXJzID0gKCkgPT4ge1xuICAgIGNvbnN0ICRzZWxlY3RBbGxCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHt0aGlzLl9jbGFzc1NlbGVjdG9yLkpTX1NFTEVDVF9BTEx9YClcbiAgICBpZiAoJHNlbGVjdEFsbEJ1dHRvbikge1xuICAgICAgJHNlbGVjdEFsbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgdGhpcy5zZW5kSGFzRmlsdGVyZWRLaXRjaGVuVHlwZUV2ZW50KHtcbiAgICAgICAgICBraXRjaGVuVHlwZUlEOiAwLFxuICAgICAgICAgIGtpdGNoZW5UeXBlTG9jYXRpb246ICdiYXInLFxuICAgICAgICAgIGtpdGNoZW5UeXBlUG9zaXRpb246IDBcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3QgJCRkZWZhdWx0Q2F0ZWdvcmllcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke3RoaXMuX2NsYXNzU2VsZWN0b3IuSlNfQ0FURUdPUll9YClcbiAgICBpZiAoJCRkZWZhdWx0Q2F0ZWdvcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAkJGRlZmF1bHRDYXRlZ29yaWVzLmZvckVhY2goKCRidXR0b24sIGluZGV4KSA9PiAkYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICB0aGlzLnNlbmRIYXNGaWx0ZXJlZEtpdGNoZW5UeXBlRXZlbnQoe1xuICAgICAgICAgIGtpdGNoZW5UeXBlSUQ6IE51bWJlcigkYnV0dG9uLmRhdGFzZXQudmFsdWUpLFxuICAgICAgICAgIGtpdGNoZW5UeXBlTG9jYXRpb246ICdiYXInLFxuICAgICAgICAgIGtpdGNoZW5UeXBlUG9zaXRpb246IGluZGV4ICsgMVxuICAgICAgICB9KVxuICAgICAgfSkpXG4gICAgfVxuICB9XG5cbiAgc2VuZEhhc0ZpbHRlcmVkS2l0Y2hlblR5cGVFdmVudCA9ICh7XG4gICAga2l0Y2hlblR5cGVJRCxcbiAgICBraXRjaGVuVHlwZUxvY2F0aW9uLFxuICAgIGtpdGNoZW5UeXBlUG9zaXRpb25cbiAgfSkgPT4ge1xuICAgIGNvbnN0IHsgbGFzdFNlbGVjdGVkS2l0Y2hlblR5cGUgfSA9IHdpbmRvdy5hcHAuZ2V0U3RhdGUoKVxuICAgIGlmIChsYXN0U2VsZWN0ZWRLaXRjaGVuVHlwZSAhPT0ga2l0Y2hlblR5cGVJRCkge1xuICAgICAgd2luZG93LmFwcC5zZXRTdGF0ZSh7XG4gICAgICAgIGxhc3RTZWxlY3RlZEtpdGNoZW5UeXBlOiBraXRjaGVuVHlwZUlEXG4gICAgICB9KVxuICAgICAgY29uc3QgZXZlbnRUb0JlRmlyZWQgPSAoKSA9PiB7XG4gICAgICAgIHRyYWNraW5nU2VydmljZS5zZW5kKHtcbiAgICAgICAgICBldmVudE5hbWU6ICdoYXNGaWx0ZXJlZEtpdGNoZW5UeXBlJyxcbiAgICAgICAgICBldmVudERhdGE6IHtcbiAgICAgICAgICAgIGtpdGNoZW5UeXBlSUQsXG4gICAgICAgICAgICBraXRjaGVuVHlwZUxvY2F0aW9uLFxuICAgICAgICAgICAga2l0Y2hlblR5cGVQb3NpdGlvbixcbiAgICAgICAgICAgIGNvdW50UmVzdGF1cmFudFNob3duOiAodHlwZW9mIGdldFJlc3RhdXJhbnRDb3VudCA9PT0gJ2Z1bmN0aW9uJykgPyBnZXRSZXN0YXVyYW50Q291bnQoKSA6IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLy8gSUUxMSBoYWNrIHRvIG9ubHkgZmlyZSB0aGlzIGV2ZW50IG9uY2UsIGluc3RlYWQgb2YgdXNpbmcgeyBvbmNlOiB0cnVlIH1cbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoQ1VTVE9NX0VWRU5UUy5WSVNJQkxFX1JFU1RBVVJBTlRTX0NPVU5URVJfVVBEQVRFRCwgZXZlbnRUb0JlRmlyZWQpXG4gICAgICB9XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihDVVNUT01fRVZFTlRTLlZJU0lCTEVfUkVTVEFVUkFOVFNfQ09VTlRFUl9VUERBVEVELCBldmVudFRvQmVGaXJlZClcbiAgICB9XG4gIH1cblxuICBzZW5kSGFzQ2xpY2tlZE1vcmVLaXRjaGVuVHlwZXNFdmVudCA9ICgpID0+IHtcbiAgICB0cmFja2luZ1NlcnZpY2Uuc2VuZCh7XG4gICAgICBldmVudE5hbWU6ICdoYXNDbGlja2VkTW9yZUtpdGNoZW5UeXBlcydcbiAgICB9KVxuICB9XG59XG4iLCIvKipcbiAqIEtpdGNoZW5CYXIgQ29tcG9uZW50XG4gKlxuICogQGF1dGhvciBEYW5ueSBWZXJwb29ydCA8ZGFubnkudmVycG9vcnRAdGFrZWF3YXkuY29tPlxuICovXG5cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCB7IGNoZWNrUHJvcFR5cGVzIH0gZnJvbSAnLi4vbGliL2hlbHBlcnMnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEtpdGNoZW5CYXIge1xuICBfcHJvcFR5cGVzID0ge1xuICAgIHN3aXBlcjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkXG4gIH1cblxuICBjb25zdHJ1Y3RvciAoZGF0YSkge1xuICAgIGNoZWNrUHJvcFR5cGVzKHRoaXMuX3Byb3BUeXBlcywgZGF0YSwgJ3Byb3AnLCAnS2l0Y2hlbkJhcicpXG4gICAgdGhpcy5wcm9wcyA9IE9iamVjdC5mcmVlemUoZGF0YSlcbiAgfVxuXG4gIGluaXQgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMuc3dpcGVyLm5hdmlnYXRpb24ubmV4dEVsKSB7XG4gICAgICAvLyBSZW1vdmUgdGhlIGN1cnJlbnQgZXZlbnRsaXN0ZW5lclxuICAgICAgdGhpcy5wcm9wcy5zd2lwZXIubmF2aWdhdGlvbi5kZXN0cm95KCdOZXh0Q2xpY2snKVxuICAgICAgLy8gQWRkIHRoZSBuZXcgZXZlbnRsaXN0ZW5lclxuICAgICAgdGhpcy5wcm9wcy5zd2lwZXIubmF2aWdhdGlvbi5uZXh0RWwuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2NsaWNrJyxcbiAgICAgICAgZXZlbnRIYW5kbGVyID0+IHtcbiAgICAgICAgICBldmVudEhhbmRsZXIucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgIHRoaXMuc2xpZGVOZXh0KClcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLnN3aXBlci5uYXZpZ2F0aW9uLnByZXZFbCkge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBjdXJyZW50IGV2ZW50bGlzdGVuZXJcbiAgICAgIHRoaXMucHJvcHMuc3dpcGVyLm5hdmlnYXRpb24uZGVzdHJveSgnUHJldmlvdXNDbGljaycpXG4gICAgICAvLyBBZGQgdGhlIG5ldyBldmVudGxpc3RlbmVyXG4gICAgICB0aGlzLnByb3BzLnN3aXBlci5uYXZpZ2F0aW9uLnByZXZFbC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAnY2xpY2snLFxuICAgICAgICBldmVudEhhbmRsZXIgPT4ge1xuICAgICAgICAgIGV2ZW50SGFuZGxlci5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgdGhpcy5zbGlkZVByZXZpb3VzKClcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cbiAgICAvLyBTaG93IHRoZSBpdGVtcyBpbiB0aGUga2l0Y2hlbmJhclxuICAgIHRoaXMucHJvcHMuc3dpcGVyLiRlbFswXS5jbGFzc0xpc3QuYWRkKCd2aXNpYmxlJylcbiAgICB0aGlzLnByb3BzLnN3aXBlci5vbigndHJhbnNpdGlvbkVuZCcsICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5wcm9wcy5zd2lwZXIuaXNFbmQpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5zd2lwZXIuc2xpZGVUb0Nsb3Nlc3QoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9wcy5zd2lwZXIuc2xpZGVUbyhcbiAgICAgICAgICB0aGlzLnByb3BzLnN3aXBlci5zbmFwR3JpZC5sZW5ndGggLSAxXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5wcm9wcy5zd2lwZXIub24oJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgIHRoaXMucHJvcHMuc3dpcGVyLnVwZGF0ZSgpXG4gICAgfSlcblxuICAgIHRoaXMucHJvcHMuc3dpcGVyLm5hdmlnYXRpb24udXBkYXRlKClcbiAgICB0aGlzLnByb3BzLnN3aXBlci51cGRhdGUoKVxuICB9XG5cbiAgLyoqXG4gICAqIFNjcm9sbCB0byB0aGUgbmV4dCBcInBhZ2VcIiBvZiBzbGlkZXNcbiAgICovXG4gIHNsaWRlTmV4dCA9ICgpID0+IHtcbiAgICAvLyBzbGlkZXNHcmlkIGhhcyB0aGUgbGVmdCBwb3NpdGlvbiBvZiBhbGwgZWxlbWVudHMgYWJsZSB0byBzY3JvbGwgY29tcGxldGVseSB0byB0aGUgbGVmdCBzaWRlIG9mIHRoZSBjb250YWluZXJcbiAgICAvLyBhY3RpdmVJbmRleCBpcyB0aGUgZmlyc3QgdmlzaWJsZSBpbmRleFxuICAgIGNvbnN0IHsgc2xpZGVzR3JpZCwgYWN0aXZlSW5kZXgsICR3cmFwcGVyRWwsIHBhcmFtczogeyBzcGFjZUJldHdlZW4gfSB9ID0gdGhpcy5wcm9wcy5zd2lwZXJcbiAgICAvLyBDdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBzaG93biBlbGVtZW50ICsgd2lkdGggb2YgdGhlIGNvbnRhaW5lclxuICAgIGNvbnN0IHNjcm9sbFdpZHRoID0gc2xpZGVzR3JpZFthY3RpdmVJbmRleF0gKyAkd3JhcHBlckVsLm91dGVyV2lkdGgoKVxuICAgIC8vIEZpbmQgdGhlIGl0ZW0gd2hpY2ggaXMgcG9zaXRpb25lZCBhdCB0aGUgc2Nyb2xsV2lkdGhcbiAgICBjb25zdCBmb3VuZEluZGV4ID0gc2xpZGVzR3JpZC5maW5kSW5kZXgoKHBvc2l0aW9uKSA9PiBwb3NpdGlvbiAtIHNwYWNlQmV0d2VlbiA+PSBzY3JvbGxXaWR0aClcbiAgICBjb25zdCBnb3RvSW5kZXggPSBmb3VuZEluZGV4ID09PSAtMVxuICAgICAgPyBzbGlkZXNHcmlkLmxlbmd0aCAtIDEgLy8gTm8gaW5kZXggZm91bmQgZ290byB0aGUgbGFzdCBzbGlkZVxuICAgICAgOiBmb3VuZEluZGV4IC0gMiAvLyBHb3RvIHRoZSBzbGlkZSB3aGljaCBpcyBqdXN0IGJlZm9yZSB0aGUgZm91bmQgc2xpZGVcbiAgICB0aGlzLnByb3BzLnN3aXBlci5zbGlkZVRvKGdvdG9JbmRleClcbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGwgdG8gdGhlIHByZXZpb3VzIFwicGFnZVwiIG9mIHNsaWRlc1xuICAgKi9cbiAgc2xpZGVQcmV2aW91cyA9ICgpID0+IHtcbiAgICAvLyBhY3RpdmVJbmRleCBpcyB0aGUgZmlyc3QgdmlzaWJsZSBpbmRleFxuICAgIC8vIHNsaWRlc0dyaWQgaGFzIHRoZSBsZWZ0IHBvc2l0aW9uIG9mIGFsbCBlbGVtZW50cyBhYmxlIHRvIHNjcm9sbCBjb21wbGV0ZWx5IHRvIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGNvbnRhaW5lclxuICAgIGNvbnN0IHsgc2xpZGVzR3JpZCwgJHdyYXBwZXJFbCwgYWN0aXZlSW5kZXgsIHBhcmFtczogeyBzcGFjZUJldHdlZW4gfSB9ID0gdGhpcy5wcm9wcy5zd2lwZXJcblxuICAgIC8vIEdldCB0aGUgd2lkdGggb2YgdGhlIGtpdGNoZW5CYXJcbiAgICBjb25zdCBjb250YWluZXJXaWR0aCA9ICR3cmFwcGVyRWwub3V0ZXJXaWR0aCgpXG4gICAgLy8gTW92ZSBmcm9tIHRoZSBmb3VuZCBwb3NpdGlvbiBtaW51cyB0aGUgd2lkdGggb2YgdGhlIGNvbnRhaW5lcixcbiAgICAvLyBiZWNhdXNlIHdlIHRvb2sgdGhlIHJpZ2h0IHNpZGUgaXQgc2hvdWxkIGJlIGZ1bGx5IHZpc2libGVcbiAgICBsZXQgcHJldmlvdXNJbmRleCA9IFsuLi5zbGlkZXNHcmlkXS5maW5kSW5kZXgoKHBvc2l0aW9uKSA9PiB7XG4gICAgICBsZXQgaW5kZXggPSBhY3RpdmVJbmRleFxuICAgICAgcmV0dXJuIHBvc2l0aW9uID49IChzbGlkZXNHcmlkW2luZGV4ICsgMV0gLSBzcGFjZUJldHdlZW4gLSBjb250YWluZXJXaWR0aClcbiAgICB9KVxuICAgIC8vIFNsaWRlIHRvIHRoZSBcInByZXZpb3VzXCIgaW5kZXhcbiAgICB0aGlzLnByb3BzLnN3aXBlci5zbGlkZVRvKHByZXZpb3VzSW5kZXgpXG4gIH1cbn1cbiIsImNvbnN0IEtleUNvZGUgPSB7XG4gIERPV046IDQwLFxuICBFTlRFUjogMTMsXG4gIEVTQ0FQRTogMjcsXG4gIFJJR0hUOiAzOSxcbiAgU1BBQ0U6IDMyLFxuICBUQUI6IDksXG4gIFVQOiAzOFxufVxuXG5leHBvcnQgZGVmYXVsdCBLZXlDb2RlXG4iLCJpbXBvcnQgeyByZWFkeSwgZ2V0Q29va2llQnlOYW1lIH0gZnJvbSAnLi9saWIvaGVscGVycydcbmltcG9ydCBTd2lwZXIgZnJvbSBcInN3aXBlclwiO1xuaW1wb3J0IENhdGVnb3J5QmFyIGZyb20gXCIuL2NvbXBvbmVudHMvY2F0ZWdvcnlCYXJDb21wb25lbnRcIjtcbmltcG9ydCBLaXRjaGVuQmFyIGZyb20gXCIuL2NvbXBvbmVudHMva2l0Y2hlblR5cGVDb21wb25lbnRcIjtcbmltcG9ydCB7IENvb2tpZUNvbnNlbnQsIENvb2tpZVNldHRpbmdzLCBDb29raWVTZXR0aW5nc0dyYW51bGFyLCBDb29raWVXYWxsLCBDb29raWVXYWxsR3JhbnVsYXIsIE5vdGlmeSB9IGZyb20gJ0B0YWtlYXdheS91aS12YW5pbGxhJ1xuaW1wb3J0IHsgSmV0Rm0gfSBmcm9tIFwiLi9zZXJ2aWNlcy9mZWF0dXJlbWFuYWdlbWVudFwiO1xuXG5cbmNsYXNzIEFwcCB7XG4gICAgY29tcG9uZW50cyA9IHt9XG59XG5cbnJlYWR5KCgpID0+IHtcbiAgICB3aW5kb3cuYXBwID0gbmV3IEFwcCgpXG4gICAgY29uc3QgY29uc2VudENvb2tpZSA9IGdldENvb2tpZUJ5TmFtZSgnY29va2llQ29uc2VudCcpXG4gICAgaWYoY29uc2VudENvb2tpZSA9PSAnZnVsbCcpe1xuICAgICAgICBjb25zdCBqZXRmbSA9IG5ldyBKZXRGbSgpO1xuICAgICAgICBqZXRmbS5pbml0KCk7XG4gICAgfVxuXG4gICAgJC5mbi5pc0luVmlld3BvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRUb3AgPSAkKHRoaXMpLm9mZnNldCgpLnRvcFxuICAgICAgICBjb25zdCBlbGVtZW50Qm90dG9tID0gZWxlbWVudFRvcCArICQodGhpcykub3V0ZXJIZWlnaHQoKVxuICAgICAgICBjb25zdCB2aWV3cG9ydFRvcCA9ICQod2luZG93KS5zY3JvbGxUb3AoKVxuICAgICAgICBjb25zdCB2aWV3cG9ydEJvdHRvbSA9IHZpZXdwb3J0VG9wICsgJCh3aW5kb3cpLmhlaWdodCgpXG4gICAgICAgIGNvbnN0IHNjcm9sbGVyID0gJCgnLm1lbnUtY2F0ZWdvcnktYmFyLWNvbnRhaW5lcicpXG4gICAgICAgIGNvbnN0IHNjcm9sbGVySGVpZ2h0ID0gc2Nyb2xsZXIubGVuZ3RoID4gMCA/IHNjcm9sbGVyLm91dGVySGVpZ2h0KCkgOiAwXG4gICAgICAgIGNvbnN0IHNtYXJ0QmFubmVyID0gJCgnLnNtYXJ0Ym5yJylcbiAgICAgICAgY29uc3Qgc21hcnRCYW5uZXJIZWlnaHQgPSBzbWFydEJhbm5lci5sZW5ndGggPiAwID8gc21hcnRCYW5uZXIub3V0ZXJIZWlnaHQoKSA6IDBcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRCb3R0b20gPiAodmlld3BvcnRUb3AgKyBzY3JvbGxlckhlaWdodCArIHNtYXJ0QmFubmVySGVpZ2h0KSAmJiBlbGVtZW50VG9wIDwgdmlld3BvcnRCb3R0b21cbiAgICB9XG5cbiAgICBjb25zdCByZXN0YXVyYW50Q2F0ZWdvcnlTd2lwZXIgPSBuZXcgU3dpcGVyKCcuanMtc3dpcGVyJywge1xuICAgICAgICBzbGlkZXNQZXJWaWV3OiAnYXV0bycsXG4gICAgICAgIGZyZWVNb2RlOiB0cnVlLFxuICAgICAgICBsb29wOiBmYWxzZSxcbiAgICAgICAgd2F0Y2hPdmVyZmxvdzogdHJ1ZSxcbiAgICAgICAgbmF2aWdhdGlvbjoge1xuICAgICAgICAgICAgbmV4dEVsOiAnLnN3aXBlLW5leHQnXG4gICAgICAgIH1cbiAgICB9KVxuXG4gICAgY29uc3Qga2l0Y2hlbkJhclNlbGVjdG9yID0gJy5qcy1tZW51LWNhdGVnb3J5LWJhci1zdGlja3kgLmpzLXN3aXBlcidcbiAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihraXRjaGVuQmFyU2VsZWN0b3IpKSB7XG5cbiAgICAgICAgY29uc3Qgc3dpcGVyOiBTd2lwZXIgPSBuZXcgU3dpcGVyKGtpdGNoZW5CYXJTZWxlY3Rvciwge1xuICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogJ2F1dG8nLFxuICAgICAgICAgICAgZnJlZU1vZGU6IHRydWUsXG4gICAgICAgICAgICBzcGVlZDogMTAwMCxcbiAgICAgICAgICAgIGxvb3A6IGZhbHNlLFxuICAgICAgICAgICAgc2xpZGVUb0NsaWNrZWRTbGlkZTogdHJ1ZSxcbiAgICAgICAgICAgIHdhdGNoT3ZlcmZsb3c6IHRydWUsXG4gICAgICAgICAgICBuYXZpZ2F0aW9uOiB7XG4gICAgICAgICAgICAgICAgbmV4dEVsOiAnLnN3aXBlci1idXR0b24tbmV4dCcsXG4gICAgICAgICAgICAgICAgcHJldkVsOiAnLnN3aXBlci1idXR0b24tcHJldidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgc3dpcGVyLnNuYXBHcmlkW3N3aXBlci5zbmFwR3JpZC5sZW5ndGggLSAxXSA9IHN3aXBlci5zbGlkZXNHcmlkW3N3aXBlci5zbGlkZXNHcmlkLmxlbmd0aCAtIDFdXG4gICAgICAgIHdpbmRvdy5hcHAuY29tcG9uZW50cy5raXRjaGVuQmFyID0gbmV3IEtpdGNoZW5CYXIoe1xuICAgICAgICAgICAgc3dpcGVyOiBzd2lwZXJcbiAgICAgICAgfSlcbiAgICAgICAgd2luZG93LmFwcC5jb21wb25lbnRzLmtpdGNoZW5CYXIuaW5pdCgpXG4gICAgfVxuXG5cbiAgICAkKGRvY3VtZW50KS5zY3JvbGwoKCkgPT4ge1xuICAgICAgICBzdGlja3lDYXRlZ29yaWVzKClcbiAgICAgICAgc2Nyb2xsQ2F0ZWdvcmllcygpXG4gICAgfSlcblxuICAgIGNvbnN0IG1lbnVDYXRlZ29yeUJhciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tZW51LWNhdGVnb3J5LWJhcicpXG4gICAgY29uc3QgbWVudUNhdGVnb3J5Q29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLW1lbnUtY2F0ZWdvcnktYmFyLXN0aWNreScpXG4gICAgY29uc3QgbWVudUNhcmRNYWluQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmZ1bGwnKVxuICAgIGNvbnN0IHNjcm9sbGluZ0NsYXNzID0gJ2NhdGVnb3J5LXNjcm9sbGluZydcblxuICAgIGZ1bmN0aW9uIHN0aWNreUNhdGVnb3JpZXMgKCkge1xuICAgICAgICBpZiAobWVudUNhcmRNYWluQ29udGFpbmVyICYmIG1lbnVDYXRlZ29yeUNvbnRhaW5lciAmJiBtZW51Q2F0ZWdvcnlCYXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNtYXJ0QmFubmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNtYXJ0Ym5yJykgLy8gYWRkZWQgYWZ0ZXJ3YXJkLCBiZWNhdXNlIG9mIGFqYXggbG9hZFxuICAgICAgICAgICAgY29uc3QgZnJvbVRvcCA9IHNtYXJ0QmFubmVyID8gc21hcnRCYW5uZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0IDogMFxuICAgICAgICAgICAgaWYgKG1lbnVDYXRlZ29yeUNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgPD0gZnJvbVRvcCkge1xuICAgICAgICAgICAgICAgIG1lbnVDYXJkTWFpbkNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKHNjcm9sbGluZ0NsYXNzKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtZW51Q2FyZE1haW5Db250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShzY3JvbGxpbmdDbGFzcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjcm9sbENhdGVnb3JpZXMgKCkge1xuICAgICAgICAvLyBGaW5kIHRoZSBoZWlnaGVzdCBlbGVtZW50IGluIHRoZSB2aWV3cG9ydFxuICAgICAgICBsZXQgaGVpZ2hlc3RFbGVtZW50XG4gICAgICAgICQoJy5tZW51Y2FyZF9fbWVhbHMtZ3JvdXAnKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICgkKHRoaXMpLmlzSW5WaWV3cG9ydCgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhlaWdoZXN0RWxlbWVudCA9PT0gdW5kZWZpbmVkIHx8ICQodGhpcykucG9zaXRpb24oKS50b3AgPCAkKGhlaWdoZXN0RWxlbWVudCkucG9zaXRpb24oKS50b3ApIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2hlc3RFbGVtZW50ID0gdGhpc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICAvLyBTZXQgdGhlIGFjdGl2ZSBpbmRleCBvbiB0aGUgY2F0ZWdvcnkgc2xpZGVyXG4gICAgICAgIGxldCBpbmRleCA9ICQoaGVpZ2hlc3RFbGVtZW50KS5hdHRyKCdhbmNob3ItaWQnKVxuICAgICAgICBpZiAodHlwZW9mIGluZGV4ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaWYgKHJlc3RhdXJhbnRDYXRlZ29yeVN3aXBlci5zbGlkZXMgJiYgcmVzdGF1cmFudENhdGVnb3J5U3dpcGVyLnNsaWRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXN0YXVyYW50Q2F0ZWdvcnlTd2lwZXIuc2xpZGVUbygwKVxuICAgICAgICAgICAgICAgICQoJy5zd2lwZXItc2xpZGUnKS5yZW1vdmVDbGFzcygnc2xpZGUtYWN0aXZlJylcbiAgICAgICAgICAgICAgICAkKCcuc3dpcGVyLXdyYXBwZXIgYTpmaXJzdC1jaGlsZCcpLmFkZENsYXNzKCdzbGlkZS1hY3RpdmUnKVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0ICRlbCA9ICQoJ2FbaHJlZj1cIiMnICsgaW5kZXggKyAnXCJdJylcblxuICAgICAgICAgICAgcmVzdGF1cmFudENhdGVnb3J5U3dpcGVyLnNsaWRlVG8oJGVsLmluZGV4KCkpXG4gICAgICAgICAgICAkKCcuc3dpcGVyLXNsaWRlJykucmVtb3ZlQ2xhc3MoJ3NsaWRlLWFjdGl2ZScpXG4gICAgICAgICAgICAkZWwuYWRkQ2xhc3MoJ3NsaWRlLWFjdGl2ZScpXG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIGNvbnN0IG5hdmlnYXRlVG9BbmNob3IgPSAoJGFuY2hvckVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKCRhbmNob3JFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRQb3NpdGlvbiA9ICRhbmNob3JFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgICAgICBjb25zdCBiYXJIZWlnaHQgPSBtZW51Q2F0ZWdvcnlCYXIgPyBtZW51Q2F0ZWdvcnlCYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0IDogMFxuICAgICAgICAgICAgLy8gY29uc3Qgc21hcnRCYW5uZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc21hcnRibnInKVxuICAgICAgICAgICAgLy8gY29uc3Qgc21hcnRCYW5uZXJIZWlnaHQgPSBzbWFydEJhbm5lciA/IHNtYXJ0QmFubmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCA6IDBcbiAgICAgICAgICAgIGNvbnN0IHdpbmRvd1lQb3NpdGlvbiA9IHdpbmRvdy5zY3JvbGxZIHwgd2luZG93LnBhZ2VZT2Zmc2V0IC8vIGlmIElFXG4gICAgICAgICAgICBjb25zdCBuZXdZUG9zaXRpb24gPSB3aW5kb3dZUG9zaXRpb24gKyB0YXJnZXRQb3NpdGlvbi50b3AgLSBiYXJIZWlnaHRcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzY3JvbGxUbygwLCAnICsgbmV3WVBvc2l0aW9uICsgJyknKVxuICAgICAgICAgICAgY29uc29sZS5sb2cobmV3WVBvc2l0aW9uKVxuICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIG5ld1lQb3NpdGlvbikgLy8gT3B0aW9ucyBvYmplY3QgZG9lc24ndCBmaXJlIGluIElFXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHbyB0byBhIGNlcnRhaW4gY2F0ZWdvcnlcbiAgICBjb25zdCBzd2lwZXJJdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tZW51LWNhdGVnb3J5LWxpc3QgLnN3aXBlci1zbGlkZScpXG4gICAgZm9yIChsZXQgaiBpbiBzd2lwZXJJdGVtcykge1xuICAgICAgICBjb25zdCBzd2lwZXJJdGVtID0gc3dpcGVySXRlbXNbal1cbiAgICAgICAgaWYgKHR5cGVvZiBzd2lwZXJJdGVtID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgc3dpcGVySXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYXRlZ29yeUlkID0gdGhpcy5kYXRhc2V0LmNhdGVnb3J5XG4gICAgICAgICAgICAgICAgaWYgKGNhdGVnb3J5SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1RhcmdldCA9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhdGVnb3J5SWQgIT09ICcwJykgeyAvLyBwb3B1bGFyIHByb2R1Y3RzXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdUYXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjYXRlZ29yeUlkKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghbmV3VGFyZ2V0KSB7IC8vIGFzc3VtcHRpb24gYzFpY2tlZCBvbiB0aGUgcG9wdWxhciBkaXNoZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1RhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tZW51LW1lYWxzLWdyb3VwLXBvcHVsYWlyJylcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmV3VGFyZ2V0KSB7IC8vIFN0aWxsIG5vdGhpbmcsIHNlbGVjdCB0aGUgY29udGFpbmVyIHRvIHNjcm9sbCB1cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1RhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tZW51LW1lbnVjYXJkJylcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0ZVRvQW5jaG9yKG5ld1RhcmdldClcbiAgICAgICAgICAgICAgICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgbnVsbCwgJCh0aGlzKS5hdHRyKCdocmVmJykpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENPTVBPTkVOVDogQ09PS0lFIFdBTExcbiAgICAgKiBJdCdzIGFuIGluZGVwZW5kZW50IGNvbXBvbmVudCwgdGhhdCdzIHdoeSB3ZSBkb24ndCBleHBvc2UgYW55dGhpbmcgdG8gZ2xvYmFsIHNjb3BlLlxuICAgICAqIEBhdXRob3IgRE9OJ1QgUE9MTFVURSBHTE9CQUwgU0NPUEUgVEVBTVxuICAgICAqL1xuICAgIHdpbmRvdy5kYXRhTGF5ZXIgPSB3aW5kb3cuZGF0YUxheWVyIHx8IFtdXG4gICAgZnVuY3Rpb24gZ3RhZyAoKSB7IGRhdGFMYXllci5wdXNoKGFyZ3VtZW50cykgfVxuXG4gICAgbGV0IGxlZ2FjeUNvb2tpZUJhbm5lckxvYWRlZCA9IGZhbHNlXG4gICAgbGV0IGxhc3RMZWdhY3lDb29raWVWYWx1ZVxuXG4gICAgY29uc3QgdXBkYXRlQ29va2llRm5MZWdhY3kgPSAobmV3VmFsdWUpID0+IHtcblxuICAgICAgICBpZiAoIWxlZ2FjeUNvb2tpZUJhbm5lckxvYWRlZCkge1xuICAgICAgICAgICAgbGFzdExlZ2FjeUNvb2tpZVZhbHVlID0gbmV3VmFsdWVcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxldCBncmFudWxhckNvb2tpZUJhbm5lckxvYWRlZCA9IGZhbHNlXG4gICAgbGV0IGxhc3RHcmFudWxhckNvb2tpZVZhbHVlXG4gICAgY29uc3QgdXBkYXRlQ29va2llRm5HcmFudWxhciA9IChuZXdWYWx1ZSkgPT4ge1xuICAgICAgICBpZiAoIW5ld1ZhbHVlKSByZXR1cm5cbiAgICAgICAgaWYgKCFncmFudWxhckNvb2tpZUJhbm5lckxvYWRlZCkge1xuICAgICAgICAgICAgbGFzdEdyYW51bGFyQ29va2llVmFsdWUgPSBuZXdWYWx1ZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNQZXJzb25hbCA9IG5ld1ZhbHVlID09PSAnZnVsbCdcblxuICAgICAgICBndGFnKCdjb25zZW50JywgJ3VwZGF0ZScsIHtcbiAgICAgICAgICBhZF91c2VyX2RhdGE6IGlzUGVyc29uYWwgPyAnZ3JhbnRlZCcgOiAnZGVuaWVkJyxcbiAgICAgICAgICBhZF9wZXJzb25hbGl6YXRpb246IGlzUGVyc29uYWwgPyAnZ3JhbnRlZCcgOiAnZGVuaWVkJyxcbiAgICAgICAgICBhZF9zdG9yYWdlOiBpc1BlcnNvbmFsID8gJ2dyYW50ZWQnIDogJ2RlbmllZCcsXG4gICAgICAgICAgYW5hbHl0aWNzX3N0b3JhZ2U6IGlzUGVyc29uYWwgPyAnZ3JhbnRlZCcgOiAnZGVuaWVkJ1xuICAgICAgICB9KVxuICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goeyBldmVudDogJ1BhZ2V2aWV3JyB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENPTVBPTkVOVDogQ09PS0lFIFNFVFRJTkdTXG4gICAgICovXG4gICAgbGV0IGxlZ2FjeUNvb2tpZVNldHRpbmdzSXNMb2FkZWQgPSBmYWxzZVxuICAgIGNvbnN0IHVwZGF0ZUxlZ2FjeUNvb2tpZVNldHRpbmdzRm4gPSAoY29va2llQ29uc2VudCkgPT4ge1xuICAgICAgICBpZiAoIWxlZ2FjeUNvb2tpZVNldHRpbmdzSXNMb2FkZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAvLyBXYWl0IHVudGlsIGNvb2tpZVNldHRpbmdzIGlzIGxvYWRlZFxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzUGVyc29uYWwgPSBjb29raWVDb25zZW50ID09PSAnZnVsbCdcbiAgICAgICAgZ3RhZygnY29uc2VudCcsICd1cGRhdGUnLCB7XG4gICAgICAgICAgYWRfdXNlcl9kYXRhOiBpc1BlcnNvbmFsID8gJ2dyYW50ZWQnIDogJ2RlbmllZCcsXG4gICAgICAgICAgYWRfcGVyc29uYWxpemF0aW9uOiBpc1BlcnNvbmFsID8gJ2dyYW50ZWQnIDogJ2RlbmllZCcsXG4gICAgICAgICAgYWRfc3RvcmFnZTogaXNQZXJzb25hbCA/ICdncmFudGVkJyA6ICdkZW5pZWQnLFxuICAgICAgICAgIGFuYWx5dGljc19zdG9yYWdlOiBpc1BlcnNvbmFsID8gJ2dyYW50ZWQnIDogJ2RlbmllZCdcbiAgICAgICAgfSlcbiAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKHsgZXZlbnQ6ICdQYWdldmlldycgfSlcbiAgICB9XG5cbiAgICBsZXQgZ3JhbnVsYXJDb29raWVTZWV0aW5nc0lzTG9hZGVkID0gZmFsc2VcbiAgICBjb25zdCB1cGRhdGVHcmFudWxhckNvb2tpZVNldHRpbmdzRm4gPSAoY29va2llQ29uc2VudCkgPT4ge1xuICAgICAgICBpZiAoIWdyYW51bGFyQ29va2llU2VldGluZ3NJc0xvYWRlZCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNQZXJzb25hbCA9IGNvb2tpZUNvbnNlbnQgPT09ICdmdWxsJ1xuICAgICAgICBndGFnKCdjb25zZW50JywgJ3VwZGF0ZScsIHtcbiAgICAgICAgICBhZF91c2VyX2RhdGE6IGlzUGVyc29uYWwgPyAnZ3JhbnRlZCcgOiAnZGVuaWVkJyxcbiAgICAgICAgICBhZF9wZXJzb25hbGl6YXRpb246IGlzUGVyc29uYWwgPyAnZ3JhbnRlZCcgOiAnZGVuaWVkJyxcbiAgICAgICAgICBhZF9zdG9yYWdlOiBpc1BlcnNvbmFsID8gJ2dyYW50ZWQnIDogJ2RlbmllZCcsXG4gICAgICAgICAgYW5hbHl0aWNzX3N0b3JhZ2U6IGlzUGVyc29uYWwgPyAnZ3JhbnRlZCcgOiAnZGVuaWVkJ1xuICAgICAgICB9KVxuICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goeyBldmVudDogJ1BhZ2V2aWV3JyB9KVxuICAgIH1cblxuICAgIGNvbnN0ICRjb250YWluZXJDb29raWVTZXR0aW5ncyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5qcy1jb250YWluZXItY29va2llLXNldHRpbmdzJylcbiAgICBpZiAoXG4gICAgICAgICRjb250YWluZXJDb29raWVTZXR0aW5ncyAmJlxuICAgICAgICB0eXBlb2YgX0NPT0tJRV9TRVRUSU5HU19JMThOICE9PSAndW5kZWZpbmVkJ1xuICAgICkge1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXcgKi9cbiAgICAgICAgbmV3IENvb2tpZVNldHRpbmdzKHtcbiAgICAgICAgICAgICRjb250YWluZXI6ICRjb250YWluZXJDb29raWVTZXR0aW5ncyxcbiAgICAgICAgICAgIGkxOG46IF9DT09LSUVfU0VUVElOR1NfSTE4TiwgLy8gQHNlZSBBcHAvTGF5b3V0L1BhZ2UvU2VydmljZXBhZ2VzL0Nvb2tpZVN0YXRlbWVudC5waHRtbFxuICAgICAgICAgICAgbm90aWZ5U3VjY2VzczogTm90aWZ5Lm5vdGlmeVN1Y2Nlc3MsXG4gICAgICAgICAgICB1cGRhdGVDb29raWVGbjogdXBkYXRlTGVnYWN5Q29va2llU2V0dGluZ3NGblxuICAgICAgICB9KVxuICAgICAgICBsZWdhY3lDb29raWVTZXR0aW5nc0lzTG9hZGVkID0gdHJ1ZVxuICAgIH1cblxuICAgIGNvbnN0ICRncmFudWxhckNvb2tpZUNvbnNlbnRNYW5hZ2VMaW5rID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLW1hbmFnZS1jb29raWUtcHJlZmVyZW5jZXMnKVxuICAgIGxldCBncmFudWxhckNvb2tpZVNldHRpbmdzUG9wdXBcbiAgICBpZiAoJGdyYW51bGFyQ29va2llQ29uc2VudE1hbmFnZUxpbmsgJiZcbiAgICAgICAgdHlwZW9mIF9DT09LSUVfU0VUVElOR1NfR1JBTlVMQVJfSTE4TiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgJGdyYW51bGFyQ29va2llQ29uc2VudE1hbmFnZUxpbmsuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAgICAgICAgIGlmICghZ3JhbnVsYXJDb29raWVTZXR0aW5nc1BvcHVwKSB7XG4gICAgICAgICAgICAgICAgZ3JhbnVsYXJDb29raWVTZXR0aW5nc1BvcHVwID0gbmV3IENvb2tpZVNldHRpbmdzR3JhbnVsYXIoe1xuICAgICAgICAgICAgICAgICAgICBjbGFzc0xpc3Q6IFsnaS1hbS1zdGVwLTMnXSxcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlckNvbnRlbnQ6IGA8ZGl2IGNsYXNzPVwianMtaGVhZGVyLWNvbnRlbnRcIj48aDIgY2xhc3M9XCJjb29raWUtY29uc2VudC1ncmFudWxhci1tb2RhbC1oZWFkZXJcIj4ke19DT09LSUVfU0VUVElOR1NfR1JBTlVMQVJfSTE4Ti5NT0RBTF9USVRMRX08L2gyPjwvZGl2PmAsXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNvb2tpZUZuOiB1cGRhdGVHcmFudWxhckNvb2tpZVNldHRpbmdzRm4sXG4gICAgICAgICAgICAgICAgICAgIHN1YkhlYWRlckNvbnRlbnRzOiBfQ09PS0lFX1NFVFRJTkdTX0dSQU5VTEFSX0kxOE4uTU9EQUxfQ09OVEVOVCxcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0QWxsVGV4dDogX0NPT0tJRV9TRVRUSU5HU19HUkFOVUxBUl9JMThOLkJVVFRPTl9BQ0NFUFRfQUxMLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25seVNlbGVjdGVkVGV4dDogX0NPT0tJRV9TRVRUSU5HU19HUkFOVUxBUl9JMThOLkJVVFRPTl9PTkxZX1NFTEVDVEVEXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGNvbnNlbnRzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VudElkOiAxMDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VudENhbkJlQWx0ZXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VudEdpdmVuOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlbnREZXNjcmlwdGlvbjogX0NPT0tJRV9TRVRUSU5HU19HUkFOVUxBUl9JMThOLkNPTlNFTlRfMTAzX0RFU0NSSVBUSU9OLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlbnRUaXRsZTogX0NPT0tJRV9TRVRUSU5HU19HUkFOVUxBUl9JMThOLkNPTlNFTlRfMTAzX1RJVExFXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlbnRJZDogMTA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlbnRUaXRsZTogX0NPT0tJRV9TRVRUSU5HU19HUkFOVUxBUl9JMThOLkNPTlNFTlRfMTA0X1RJVExFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlbnRDYW5CZUFsdGVyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VudERlc2NyaXB0aW9uOiBfQ09PS0lFX1NFVFRJTkdTX0dSQU5VTEFSX0kxOE4uQ09OU0VOVF8xMDRfREVTQ1JJUFRJT05cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VudElkOiAxMDUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VudFRpdGxlOiBfQ09PS0lFX1NFVFRJTkdTX0dSQU5VTEFSX0kxOE4uQ09OU0VOVF8xMDVfVElUTEUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VudENhbkJlQWx0ZXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZW50RGVzY3JpcHRpb246IF9DT09LSUVfU0VUVElOR1NfR1JBTlVMQVJfSTE4Ti5DT05TRU5UXzEwNV9ERVNDUklQVElPTlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZW50SWQ6IDEwNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZW50VGl0bGU6IF9DT09LSUVfU0VUVElOR1NfR1JBTlVMQVJfSTE4Ti5DT05TRU5UXzEwNl9USVRMRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZW50Q2FuQmVBbHRlcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlbnREZXNjcmlwdGlvbjogX0NPT0tJRV9TRVRUSU5HU19HUkFOVUxBUl9JMThOLkNPTlNFTlRfMTA2X0RFU0NSSVBUSU9OXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZ3JhbnVsYXJDb29raWVTZXR0aW5nc1BvcHVwKSB7XG4gICAgICAgICAgICAgICAgZ3JhbnVsYXJDb29raWVTZWV0aW5nc0lzTG9hZGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgIGdyYW51bGFyQ29va2llU2V0dGluZ3NQb3B1cC5yZW5kZXIoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENPTVBPTkVOVDogQ09PS0lFIFdBTExcbiAgICAgKiBJdCdzIGFuIGluZGVwZW5kZW50IGNvbXBvbmVudCwgdGhhdCdzIHdoeSB3ZSBkb24ndCBleHBvc2UgYW55dGhpbmcgdG8gZ2xvYmFsIHNjb3BlLlxuICAgICAqIEBhdXRob3IgRE9OJ1QgUE9MTFVURSBHTE9CQUwgU0NPUEUgVEVBTVxuICAgICAqL1xuXG4gICAgICAgIC8vIE1heWJlIG1ha2UgdGhpcyBhIGZlYXR1cmV0b2dnbGUgaW4gdGhlIGZ1dHVyZSwgYnV0IHBsZWFzZSBtYWtlIHN1cmUgdG8gdGVzdCBhbGwgZG9tYWlucyBiZWZvcmUgcm9sbGluZyBvdXQgdG8gYWxsIGRvbWFpbnNcbiAgICBjb25zdCBpc0Rlbm1hcmsgPSBzaXRlLmNjID09PSAnNydcblxuICAgIGlmICghaXNEZW5tYXJrKSB7XG4gICAgICAgIGNvbnN0ICRjb250YWluZXJDb29raWVXYWxsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNjLWJhbm5lcicpXG5cbiAgICAgICAgaWYgKCRjb250YWluZXJDb29raWVXYWxsKSB7XG4gICAgICAgICAgICBjb25zdCBjb29raWVXYWxsID0gbmV3IENvb2tpZVdhbGwoe1xuICAgICAgICAgICAgICAgICRjb250YWluZXI6ICRjb250YWluZXJDb29raWVXYWxsLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRUZXh0OiAkY29udGFpbmVyQ29va2llV2FsbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29udGVudC10ZXh0JyksXG4gICAgICAgICAgICAgICAgdXJsOiAkY29udGFpbmVyQ29va2llV2FsbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdXJsJyksXG4gICAgICAgICAgICAgICAgdXJsVGV4dDogJGNvbnRhaW5lckNvb2tpZVdhbGwuZ2V0QXR0cmlidXRlKCdkYXRhLXVybC10ZXh0JyksXG4gICAgICAgICAgICAgICAgYnV0dG9uVGV4dDogJGNvbnRhaW5lckNvb2tpZVdhbGwuZ2V0QXR0cmlidXRlKCdkYXRhLWJ1dHRvbi10ZXh0JyksXG4gICAgICAgICAgICAgICAgaGlkZUxpbmtBZnRlclRleHQ6IHRydWUsXG4gICAgICAgICAgICAgICAgYnV0dG9uRXNzZW50aWFsUGFja2FnZTogJGNvbnRhaW5lckNvb2tpZVdhbGwuZ2V0QXR0cmlidXRlKCdkYXRhLWJ1dHRvbi1lc3NlbnRpYWwtcGFja2FnZScpLFxuICAgICAgICAgICAgICAgIGJ1dHRvblRleHRBcmlhOiAkY29udGFpbmVyQ29va2llV2FsbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnV0dG9uLXRleHQtYXJpYScpLFxuICAgICAgICAgICAgICAgIGJ1dHRvbkVzc2VudGlhbFBhY2thZ2VBcmlhOiAkY29udGFpbmVyQ29va2llV2FsbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnV0dG9uLWVzc2VudGlhbC1wYWNrYWdlLWFyaWEnKSxcbiAgICAgICAgICAgICAgICB1cGRhdGVDb29raWVGbjogdXBkYXRlQ29va2llRm5MZWdhY3lcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB3aW5kb3cuYXBwLmNvbXBvbmVudHMuY29va2llV2FsbCA9IGNvb2tpZVdhbGxcbiAgICAgICAgICAgIGxlZ2FjeUNvb2tpZUJhbm5lckxvYWRlZCA9IHRydWVcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0ICRjb250YWluZXJDb29raWVXYWxsR3JhbnVsYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2MtYmFubmVyLWdyYW51bGFyJylcbiAgICAgICAgbGV0IHByaW1hcnlUaXRsZSA9ICRjb250YWluZXJDb29raWVXYWxsR3JhbnVsYXIgJiYgJGNvbnRhaW5lckNvb2tpZVdhbGxHcmFudWxhci5nZXRBdHRyaWJ1dGUoJ2RhdGEtcHJpbWFyeS1wcmVmZXJlbmNlcy1tb2RhbC10aXRsZScpXG4gICAgICAgICAgICA/ICRjb250YWluZXJDb29raWVXYWxsR3JhbnVsYXIuZ2V0QXR0cmlidXRlKCdkYXRhLXByaW1hcnktcHJlZmVyZW5jZXMtbW9kYWwtdGl0bGUnKSA6ICcnXG4gICAgICAgIGxldCBzZWNvbmRhcnlUaXRsZSA9ICRjb250YWluZXJDb29raWVXYWxsR3JhbnVsYXIgJiYgJGNvbnRhaW5lckNvb2tpZVdhbGxHcmFudWxhci5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2Vjb25kYXJ5LXByZWZlcmVuY2VzLW1vZGFsLXRpdGxlJylcbiAgICAgICAgICAgID8gJGNvbnRhaW5lckNvb2tpZVdhbGxHcmFudWxhci5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2Vjb25kYXJ5LXByZWZlcmVuY2VzLW1vZGFsLXRpdGxlJykgOiAnJ1xuICAgICAgICAvLyBXZWlyZCBmaXggZm9yIGZsb3dcbiAgICAgICAgaWYgKCFwcmltYXJ5VGl0bGUpIHtcbiAgICAgICAgICAgIHByaW1hcnlUaXRsZSA9ICcnXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNlY29uZGFyeVRpdGxlKSB7XG4gICAgICAgICAgICBzZWNvbmRhcnlUaXRsZSA9ICcnXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGNvbnRhaW5lckNvb2tpZVdhbGxHcmFudWxhcikge1xuICAgICAgICAgICAgY29uc3QgY29va2llV2FsbEdyYW51bGFyID0gbmV3IENvb2tpZVdhbGxHcmFudWxhcih7XG4gICAgICAgICAgICAgICAgJGNvbnRhaW5lcjogJGNvbnRhaW5lckNvb2tpZVdhbGxHcmFudWxhcixcbiAgICAgICAgICAgICAgICBzZWxlY3RlZExhbmd1YWdlOiAkY29udGFpbmVyQ29va2llV2FsbEdyYW51bGFyLmdldEF0dHJpYnV0ZSgnZGF0YS1jdXJyZW50LWxhbmd1YWdlJyksXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VTZXR0aW5nczoge1xuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5TGFuZ3VhZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlS2V5OiAkY29udGFpbmVyQ29va2llV2FsbEdyYW51bGFyLmdldEF0dHJpYnV0ZSgnZGF0YS1wcmltYXJ5LWxhbmd1YWdla2V5JyksXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b25UZXh0OiAkY29udGFpbmVyQ29va2llV2FsbEdyYW51bGFyLmdldEF0dHJpYnV0ZSgnZGF0YS1wcmltYXJ5LWJhbm5lci1idXR0b24tYWNjZXB0LWFsbCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFRleHQ6ICRjb250YWluZXJDb29raWVXYWxsR3JhbnVsYXIuZ2V0QXR0cmlidXRlKCdkYXRhLXByaW1hcnktYmFubmVyLWNvbnRlbnQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbk5lY2Vzc2FyeVBhY2thZ2U6ICRjb250YWluZXJDb29raWVXYWxsR3JhbnVsYXIuZ2V0QXR0cmlidXRlKCdkYXRhLXByaW1hcnktYmFubmVyLWJ1dHRvbi1hY2NlcHQtbmVjZXNzYXJ5JyksXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b25OZWNlc3NhcnlQYWNrYWdlQXJpYTogJGNvbnRhaW5lckNvb2tpZVdhbGxHcmFudWxhci5nZXRBdHRyaWJ1dGUoJ2RhdGEtcHJpbWFyeS1iYW5uZXItYnV0dG9uLWFjY2VwdC1uZWNlc3NhcnknKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvblRleHRBcmlhOiAkY29udGFpbmVyQ29va2llV2FsbEdyYW51bGFyLmdldEF0dHJpYnV0ZSgnZGF0YS1wcmltYXJ5LWJhbm5lci1idXR0b24tYWNjZXB0LWFsbCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFubmVyVGl0bGU6ICRjb250YWluZXJDb29raWVXYWxsR3JhbnVsYXIuZ2V0QXR0cmlidXRlKCdkYXRhLXByaW1hcnktYmFubmVyLXRpdGxlJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nc01vZGFsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyVGl0bGU6IGA8ZGl2IGNsYXNzPVwianMtaGVhZGVyLWNvbnRlbnRcIj48aDIgY2xhc3M9XCJjb29raWUtY29uc2VudC1ncmFudWxhci1tb2RhbC1oZWFkZXJcIj4ke3ByaW1hcnlUaXRsZX08L2gyPjwvZGl2PmAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdqcy1ncmFudWxhci1jb25zZW50LXBvcHVwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluU2VsZWN0b3I6ICdqcy1jb25zZW50LXBvcHVwLW1haW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlclNlbGVjdG9yOiAnanMtY29uc2VudC1wb3B1cC1oZWFkZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YkhlYWRlckNvbnRlbnRzOiAkY29udGFpbmVyQ29va2llV2FsbEdyYW51bGFyLmdldEF0dHJpYnV0ZSgnZGF0YS1wcmltYXJ5LXByZWZlcmVuY2VzLW1vZGFsLWhlYWRpbmcnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25BY2NlcHRBbGw6ICRjb250YWluZXJDb29raWVXYWxsR3JhbnVsYXIuZ2V0QXR0cmlidXRlKCdkYXRhLXByaW1hcnktcHJlZmVyZW5jZXMtbW9kYWwtYnV0dG9ucy1hY2NlcHQtYWxsJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uT25seVNlbGVjdGVkOiAkY29udGFpbmVyQ29va2llV2FsbEdyYW51bGFyLmdldEF0dHJpYnV0ZSgnZGF0YS1wcmltYXJ5LXByZWZlcmVuY2VzLW1vZGFsLWJ1dHRvbnMtb25seS1zZWxlY3RlZCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlbnRzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlbnRJZDogMTAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VudFRpdGxlOiAkY29udGFpbmVyQ29va2llV2FsbEdyYW51bGFyLmdldEF0dHJpYnV0ZSgnZGF0YS1wcmltYXJ5LWNvbnNlbnQtMTAzLXRpdGxlJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZW50Q2FuQmVBbHRlcmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlbnRHaXZlbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlbnREZXNjcmlwdGlvbjogJGNvbnRhaW5lckNvb2tpZVdhbGxHcmFudWxhci5nZXRBdHRyaWJ1dGUoJ2RhdGEtcHJpbWFyeS1jb25zZW50LTEwMy1kZXNjcmlwdGlvbicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlbnRJZDogMTA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VudFRpdGxlOiAkY29udGFpbmVyQ29va2llV2FsbEdyYW51bGFyLmdldEF0dHJpYnV0ZSgnZGF0YS1wcmltYXJ5LWNvbnNlbnQtMTA0LXRpdGxlJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZW50Q2FuQmVBbHRlcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VudEdpdmVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlbnREZXNjcmlwdGlvbjogJGNvbnRhaW5lckNvb2tpZVdhbGxHcmFudWxhci5nZXRBdHRyaWJ1dGUoJ2RhdGEtcHJpbWFyeS1jb25zZW50LTEwNC1kZXNjcmlwdGlvbicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlbnRJZDogMTA1LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VudFRpdGxlOiAkY29udGFpbmVyQ29va2llV2FsbEdyYW51bGFyLmdldEF0dHJpYnV0ZSgnZGF0YS1wcmltYXJ5LWNvbnNlbnQtMTA1LXRpdGxlJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZW50Q2FuQmVBbHRlcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VudEdpdmVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlbnREZXNjcmlwdGlvbjogJGNvbnRhaW5lckNvb2tpZVdhbGxHcmFudWxhci5nZXRBdHRyaWJ1dGUoJ2RhdGEtcHJpbWFyeS1jb25zZW50LTEwNS1kZXNjcmlwdGlvbicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlbnRJZDogMTA2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VudFRpdGxlOiAkY29udGFpbmVyQ29va2llV2FsbEdyYW51bGFyLmdldEF0dHJpYnV0ZSgnZGF0YS1wcmltYXJ5LWNvbnNlbnQtMTA2LXRpdGxlJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZW50Q2FuQmVBbHRlcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VudEdpdmVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlbnREZXNjcmlwdGlvbjogJGNvbnRhaW5lckNvb2tpZVdhbGxHcmFudWxhci5nZXRBdHRyaWJ1dGUoJ2RhdGEtcHJpbWFyeS1jb25zZW50LTEwNi1kZXNjcmlwdGlvbicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZGFyeUxhbmd1YWdlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUtleTogJGNvbnRhaW5lckNvb2tpZVdhbGxHcmFudWxhci5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2Vjb25kYXJ5LWxhbmd1YWdla2V5JyksXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b25UZXh0OiAkY29udGFpbmVyQ29va2llV2FsbEdyYW51bGFyLmdldEF0dHJpYnV0ZSgnZGF0YS1zZWNvbmRhcnktYmFubmVyLWJ1dHRvbi1hY2NlcHQtYWxsJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50VGV4dDogJGNvbnRhaW5lckNvb2tpZVdhbGxHcmFudWxhci5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2Vjb25kYXJ5LWJhbm5lci1jb250ZW50JyksXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b25OZWNlc3NhcnlQYWNrYWdlOiAkY29udGFpbmVyQ29va2llV2FsbEdyYW51bGFyLmdldEF0dHJpYnV0ZSgnZGF0YS1zZWNvbmRhcnktYmFubmVyLWJ1dHRvbi1hY2NlcHQtbmVjZXNzYXJ5JyksXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b25OZWNlc3NhcnlQYWNrYWdlQXJpYTogJGNvbnRhaW5lckNvb2tpZVdhbGxHcmFudWxhci5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2Vjb25kYXJ5LWJhbm5lci1idXR0b24tYWNjZXB0LW5lY2Vzc2FyeScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uVGV4dEFyaWE6ICRjb250YWluZXJDb29raWVXYWxsR3JhbnVsYXIuZ2V0QXR0cmlidXRlKCdkYXRhLXNlY29uZGFyeS1iYW5uZXItYnV0dG9uLWFjY2VwdC1hbGwnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhbm5lclRpdGxlOiAkY29udGFpbmVyQ29va2llV2FsbEdyYW51bGFyLmdldEF0dHJpYnV0ZSgnZGF0YS1zZWNvbmRhcnktYmFubmVyLXRpdGxlJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nc01vZGFsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyVGl0bGU6IGA8ZGl2IGNsYXNzPVwianMtaGVhZGVyLWNvbnRlbnRcIj48aDIgY2xhc3M9XCJjb29raWUtY29uc2VudC1ncmFudWxhci1tb2RhbC1oZWFkZXJcIj4ke3NlY29uZGFyeVRpdGxlfTwvaDI+PC9kaXY+YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2pzLWdyYW51bGFyLWNvbnNlbnQtcG9wdXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5TZWxlY3RvcjogJ2pzLWNvbnNlbnQtcG9wdXAtbWFpbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyU2VsZWN0b3I6ICdqcy1jb25zZW50LXBvcHVwLWhlYWRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViSGVhZGVyQ29udGVudHM6ICRjb250YWluZXJDb29raWVXYWxsR3JhbnVsYXIuZ2V0QXR0cmlidXRlKCdkYXRhLXNlY29uZGFyeS1wcmVmZXJlbmNlcy1tb2RhbC1oZWFkaW5nJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uQWNjZXB0QWxsOiAkY29udGFpbmVyQ29va2llV2FsbEdyYW51bGFyLmdldEF0dHJpYnV0ZSgnZGF0YS1zZWNvbmRhcnktcHJlZmVyZW5jZXMtbW9kYWwtYnV0dG9ucy1hY2NlcHQtYWxsJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uT25seVNlbGVjdGVkOiAkY29udGFpbmVyQ29va2llV2FsbEdyYW51bGFyLmdldEF0dHJpYnV0ZSgnZGF0YS1zZWNvbmRhcnktcHJlZmVyZW5jZXMtbW9kYWwtYnV0dG9ucy1vbmx5LXNlbGVjdGVkJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VudHM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VudElkOiAxMDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZW50VGl0bGU6ICRjb250YWluZXJDb29raWVXYWxsR3JhbnVsYXIuZ2V0QXR0cmlidXRlKCdkYXRhLXNlY29uZGFyeS1jb25zZW50LTEwMy10aXRsZScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VudENhbkJlQWx0ZXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZW50R2l2ZW46IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZW50RGVzY3JpcHRpb246ICRjb250YWluZXJDb29raWVXYWxsR3JhbnVsYXIuZ2V0QXR0cmlidXRlKCdkYXRhLXNlY29uZGFyeS1jb25zZW50LTEwMy1kZXNjcmlwdGlvbicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlbnRJZDogMTA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VudFRpdGxlOiAkY29udGFpbmVyQ29va2llV2FsbEdyYW51bGFyLmdldEF0dHJpYnV0ZSgnZGF0YS1zZWNvbmRhcnktY29uc2VudC0xMDQtdGl0bGUnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlbnRDYW5CZUFsdGVyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZW50R2l2ZW46IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VudERlc2NyaXB0aW9uOiAkY29udGFpbmVyQ29va2llV2FsbEdyYW51bGFyLmdldEF0dHJpYnV0ZSgnZGF0YS1zZWNvbmRhcnktY29uc2VudC0xMDQtZGVzY3JpcHRpb24nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZW50SWQ6IDEwNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlbnRUaXRsZTogJGNvbnRhaW5lckNvb2tpZVdhbGxHcmFudWxhci5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2Vjb25kYXJ5LWNvbnNlbnQtMTA1LXRpdGxlJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZW50Q2FuQmVBbHRlcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VudEdpdmVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlbnREZXNjcmlwdGlvbjogJGNvbnRhaW5lckNvb2tpZVdhbGxHcmFudWxhci5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2Vjb25kYXJ5LWNvbnNlbnQtMTA1LWRlc2NyaXB0aW9uJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VudElkOiAxMDYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZW50VGl0bGU6ICRjb250YWluZXJDb29raWVXYWxsR3JhbnVsYXIuZ2V0QXR0cmlidXRlKCdkYXRhLXNlY29uZGFyeS1jb25zZW50LTEwNi10aXRsZScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VudENhbkJlQWx0ZXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlbnRHaXZlbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZW50RGVzY3JpcHRpb246ICRjb250YWluZXJDb29raWVXYWxsR3JhbnVsYXIuZ2V0QXR0cmlidXRlKCdkYXRhLXNlY29uZGFyeS1jb25zZW50LTEwNi1kZXNjcmlwdGlvbicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHVwZGF0ZUNvb2tpZUZuOiB1cGRhdGVDb29raWVGbkdyYW51bGFyXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgd2luZG93LmFwcC5jb21wb25lbnRzLmNvb2tpZVdhbGxHcmFudWxhciA9IGNvb2tpZVdhbGxHcmFudWxhclxuICAgICAgICAgICAgZ3JhbnVsYXJDb29raWVCYW5uZXJMb2FkZWQgPSB0cnVlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBidG5FbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLWJ0bi1vaycpXG4gICAgaWYgKGJ0bkVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgYnRuRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgamV0Zm0gPSBuZXcgSmV0Rm0oKTtcbiAgICAgICAgamV0Zm0uaW5pdCgpO1xuICAgICAgfSlcbiAgICB9XG59KVxuIiwiaW1wb3J0IEtleUNvZGUgZnJvbSAnLi8uLi9lbnVtcy9rZXlDb2RlJ1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuXG4vLyBAVE9ETzogU29ydCBhbHBoYWJldGljYWxseVxuXG5cbi8qKlxuICogQSB3cmFwcGVyIGZvciBjaGVja1Byb3BUeXBlcyBtZXRob2QgZnJvbSAncHJvcC10eXBlcycgcGFja2FnZS4gT3JpZ2luYWxseSBpdCBsb2dzIGVycm9ycyBvbiBjb25zb2xlLiBCdXQgaW4gY2xhc3NcbiAqIGRlZmluaXRpb25zIHdlJ2QgbGlrZSB0byB0aHJvdyBlcnJvcnMgaW5zdGVhZCBvZiBsb2dnaW5nLiBUbyBub3QgY2hhbmdlIDNyZCBwYXJ0eSBjb2RlLCB3ZSB0ZW1wb3JhcmlseSBvdmVyd3JpdGVcbiAqIGNvbnNvbGUuZXJyb3IoKS4gSWYgY2hlY2tQcm9wVHlwZXMgcmV0dXJuIGEgdmFsdWUgb25lIGRheSwgd2UgY2FuIHJlbW92ZSB0aGlzIHdyYXBwZXIuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcHJvcC10eXBlcy9pc3N1ZXMvMTY5XG4gKlxuICogT3JpZ2luYWwgZG9jcyBhcmUgYmVsb3cuXG4gKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXMgKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2sgPSB1bmRlZmluZWQpIHtcbiAgY29uc3QgdCA9IGNvbnNvbGUuZXJyb3JcbiAgY29uc29sZS5lcnJvciA9IG1zZyA9PiB7IHRocm93IG5ldyBFcnJvcihtc2cpIH1cbiAgLy8gUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgb25seSBjb25zb2xlLmVycm9yJ3MgYSBnaXZlbiBtZXNzYWdlIG9uY2UuIFRvIHJlc2V0IHRoZSBlcnJvciB3YXJuaW5nIGNhY2hlIGluIHRlc3RzLFxuICAvLyBjYWxsIFByb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSgpXG4gIFByb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSgpXG4gIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKVxuICBjb25zb2xlLmVycm9yID0gdFxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iakVtcHR5IChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2JpbGVPUyAoKSB7XG4gIGNvbnN0IHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQgfHwgbmF2aWdhdG9yLnZlbmRvciB8fCB3aW5kb3cub3BlcmFcbiAgcmV0dXJuIHtcbiAgICBpc0FuZHJvaWQ6ICgpID0+IC9hbmRyb2lkL2kudGVzdCh1c2VyQWdlbnQpLFxuICAgIGlzSU9TOiAoKSA9PiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdCh1c2VyQWdlbnQpICYmICF3aW5kb3cuTVNTdHJlYW0gLy8gaU9TIGRldGVjdGlvbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS85MDM5ODg1LzE3NzcxMFxuICB9XG59XG5cbi8qKlxuICogVGhyb3cgYSBUeXBlRXJyb3IgZm9yIGEgZ2l2ZW4gdHlwZSBvbiBhIGdpdmVuIHN1YmplY3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBleHBlY3RlZFxuICogQHBhcmFtIHsqfSBhY3R1YWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocm93VHlwZUVycm9yIChzdWJqZWN0LCBleHBlY3RlZCwgYWN0dWFsKSB7XG4gIGNvbnN0IHR5cGUgPSAoe30pLnRvU3RyaW5nLmNhbGwoYWN0dWFsKS5zcGxpdCgnICcpWzFdLnNsaWNlKDAsIC0xKVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKGBHaXZlbiAke3N1YmplY3R9IG11c3QgYmUgb2YgdHlwZSBcIiR7ZXhwZWN0ZWR9XCIsIFwiJHt0eXBlfVwiIGdpdmVuYClcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSB0aGF0IGFsbCBnaXZlbiBrZXlzIGFyZSBwcmVzZW50IGluIGEgZ2l2ZW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtBcnJheX0gcmVxdWlyZWRLZXlzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZU9iamVjdEtleXMgKG9iaiwgcmVxdWlyZWRLZXlzKSB7XG4gIGNvbnN0IG1pc3NpbmdLZXlzID0gcmVxdWlyZWRLZXlzLmZpbHRlcihpdGVtID0+ICFvYmouaGFzT3duUHJvcGVydHkoaXRlbSkpXG5cbiAgaWYgKG1pc3NpbmdLZXlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0aWVzOiBbXCIke21pc3NpbmdLZXlzLmpvaW4oJ1wiICxcIicpfVwiXWApXG4gIH1cbn1cblxuLyoqXG4gKiBQdXNoIGEgY2VydGFpbiB2YWx1ZSB0byB0aGUgdXNlcidzIGNsaXBib2FyZC5cbiAqXG4gKiBUaGlzIGlzIGRvbmUgYnkgYWRkaW5nIGFuIGludmlzaWJsZSB0ZXh0YXJlYSwgY29weWluZyB0aGUgdmFsdWUsIHJlbW92aW5nIHRoZSB0ZXh0YXJlYSBhbmQgdGhlbiByZS1zZWxlY3QgYW55XG4gKiBwcmV2aW91cyBzZWxlY3Rpb25zIHRoZSB1c2VyIG1pZ2h0IGhhdmUgaGFkLlxuICpcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHBhcmFtIGVsZW1lbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUb0NsaXBib2FyZCAodmFsdWUsIGVsZW1lbnQpIHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpXG4gIGVsLnZhbHVlID0gdmFsdWVcbiAgZWwuc2V0QXR0cmlidXRlKCdyZWFkb25seScsICcnKVxuICBlbC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSdcbiAgZWwuc3R5bGUubGVmdCA9ICctOTk5OTlweCdcbiAgbGV0IGFkZFRvRWxlbWVudCA9IGRvY3VtZW50LmJvZHlcbiAgLy8gUHJldmVudHMgc2Nyb2xsaW5nIGluIElFXG4gIGlmIChlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50LmFwcGVuZENoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgYWRkVG9FbGVtZW50ID0gZWxlbWVudFxuICB9XG4gIGFkZFRvRWxlbWVudC5hcHBlbmRDaGlsZChlbClcbiAgY29uc3Qgc2VsZWN0ZWQgPVxuICAgIGRvY3VtZW50LmdldFNlbGVjdGlvbigpLnJhbmdlQ291bnQgPiAwXG4gICAgICA/IGRvY3VtZW50LmdldFNlbGVjdGlvbigpLmdldFJhbmdlQXQoMClcbiAgICAgIDogZmFsc2VcblxuICBpZiAoZ2V0TW9iaWxlT1MoKS5pc0lPUygpKSB7XG4gICAgLy8gb24gaU9TIHdlIG5lZWQgdG8gdGFrZSBhIGRpZmZlcmVudCBhcHByb2FjaCBzZWxlY3RpbmcgdGhlIHRleHRcbiAgICAvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9ycHJvZW5jYS82NDc4MWM2YTEzMjliNDhhNDU1YjY0NWQzNjFhOWFhM1xuICAgIGVsLnNldFNlbGVjdGlvblJhbmdlKDAsIDk5OTk5OSlcbiAgfSBlbHNlIHtcbiAgICBlbC5zZWxlY3QoKVxuICB9XG5cbiAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKVxuICBhZGRUb0VsZW1lbnQucmVtb3ZlQ2hpbGQoZWwpXG4gIGlmIChzZWxlY3RlZCkge1xuICAgIGRvY3VtZW50LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpXG4gICAgZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuYWRkUmFuZ2Uoc2VsZWN0ZWQpXG4gIH1cbn1cblxuLyoqXG4gKiBEbyBhIGNhbGxiYWNrIGZ1bmN0aW9uIGFmdGVyIHRoZSBET00gaXMgcmVhZHkuXG4gKiBAcGFyYW0gZm5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWR5IChmbikge1xuICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgZm4oKVxuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmbilcbiAgfVxufVxuXG4vKipcbiAqIERvIGEgY2FsbGJhY2sgZnVuY3Rpb24gYWZ0ZXIgdGhlIFdpbmRvdyBpcyBsb2FkZWQuXG4gKiBAcGFyYW0gZm5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uV2luZG93TG9hZCAoZm4pIHtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmbilcbn1cblxuLyoqXG4gKiBXaGlsZSB1c2luZyB0YWJzIGluIGEgbW9kYWwgdGhlIGZvY3VzIG1pZ2h0IGdvIGJhY2sgdG8gdGhlIGVsZW1lbnRzIG91dHNpZGVcbiAqIFRoaXMgZnVuY3Rpb24ga2VlcHMgdGhlIGZvY3VzIGluc2lkZSB0aGUgbW9kYWxcbiAqIEBwYXJhbSBlbGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBrZWVwRm9jdXNXaXRoaW5Nb2RhbCAoeyBtb2RhbEVsZW1lbnQgfSkge1xuICBpZiAobW9kYWxFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ub3QtZm9jdXMtbW9kYWwnKSkge1xuICAgIHJldHVyblxuICB9XG4gIGxldCBmb2N1c2FibGVFbGVtZW50cyA9IEFycmF5LmZyb20obW9kYWxFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFxuICAgIGFbaHJlZl06bm90KFtkaXNhYmxlZF0pLFxuICAgIGJ1dHRvbjpub3QoW2Rpc2FibGVkXSksXG4gICAgdGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pLFxuICAgIGlucHV0W3R5cGU9XCJ0ZXh0XCJdOm5vdChbZGlzYWJsZWRdKSxcbiAgICBpbnB1dFt0eXBlPVwicmFkaW9cIl06bm90KFtkaXNhYmxlZF0pLFxuICAgIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpub3QoW2Rpc2FibGVkXSksXG4gICAgc2VsZWN0Om5vdChbZGlzYWJsZWRdKSxcbiAgICBbdGFiaW5kZXhdXG4gIGApKS5maWx0ZXIoZWxlbWVudCA9PiB7XG4gICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0V2lkdGggPiAwICYmIGVsZW1lbnQub2Zmc2V0SGVpZ2h0ID4gMFxuICB9KVxuXG4gIGZvY3VzYWJsZUVsZW1lbnRzID0gZm9jdXNhYmxlRWxlbWVudHMuZmlsdGVyKGVsZW1lbnQgPT4ge1xuICAgIC8vIENoZWNrIGlmIGVsZW1lbnQgaXMgdmlzaWJsZVxuICAgIGlmIChlbGVtZW50Lm9mZnNldFdpZHRoID4gMCAmJiBlbGVtZW50Lm9mZnNldEhlaWdodCA+IDApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IGxhc3RGb2N1c2FibGVFbGVtZW50ID0gZm9jdXNhYmxlRWxlbWVudHNbZm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoIC0gMV1cbiAgY29uc3QgZmlyc3RGb2N1c2FibGVFbGVtZW50ID0gZm9jdXNhYmxlRWxlbWVudHNbMF1cblxuICBsYXN0Rm9jdXNhYmxlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IEtleUNvZGUuVEFCICYmICFldmVudC5zaGlmdEtleSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIGZpcnN0Rm9jdXNhYmxlRWxlbWVudC5mb2N1cygpXG4gICAgfVxuICB9KVxuXG4gIGZpcnN0Rm9jdXNhYmxlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IEtleUNvZGUuVEFCICYmIGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgbGFzdEZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKVxuICAgIH1cbiAgfSlcblxuICBmaXJzdEZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVHdWlkICgpIHtcbiAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgKGMpID0+IHtcbiAgICBjb25zdCByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMDsgY29uc3QgdiA9IGMgPT09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OClcbiAgICByZXR1cm4gdi50b1N0cmluZygxNilcbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nSlNPTiAoc3RyKSB7XG4gIHRyeSB7XG4gICAgSlNPTi5wYXJzZShzdHIpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKCdGQUlMRUQ6IGlzU3RyaW5nSlNPTigpJylcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIFN0ZXAgMTogRmVlZCBtZSBhcnJheSBvZiBzZWxlY3RvcnMuXG4gKiBTdGVwIDI6IERlc3RydWN0dXJlLlxuICogU3RlcCAzOiA/Pz9cbiAqIFN0ZXAgNDogUHJvZml0IVxuICpcbiAqIEBwYXJhbSBzZWxlY3RvcnNcbiAqIEByZXR1cm5zIGFycmF5XG4gKi9cbmV4cG9ydCBjb25zdCBxdWVyeU11bHRpcGxlU2VsZWN0b3JzID0gKHNlbGVjdG9ycykgPT4ge1xuICByZXR1cm4gc2VsZWN0b3JzLm1hcChzZWxlY3RvciA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSlcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIG9mIGEgY29va2llIGJ5IG5hbWVcbiAqIEBwYXJhbSBuYW1lXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDb29raWVCeU5hbWUgPSAobmFtZSkgPT4ge1xuICBpZiAoIW5hbWUgfHwgdHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgICBjb25zdCBmb3VuZENvb2tpZSA9IGRvY3VtZW50LmNvb2tpZVxuICAgICAgICAgIC5zcGxpdCgnOycpXG4gICAgICAgICAgLm1hcChjb29raWUgPT4gY29va2llLnRyaW0oKSlcbiAgICAgICAgICAuZmluZChjb29raWUgPT4gY29va2llLnN0YXJ0c1dpdGgoYCR7bmFtZX09YCkpO1xuICAgICAgICAgIFxuICAgICAgcmV0dXJuIGZvdW5kQ29va2llID8gZm91bmRDb29raWUuc3Vic3RyaW5nKG5hbWUubGVuZ3RoICsgMSkgOiBudWxsO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgY29uc29sZS5sb2coJ2Vycm9yIHJlYWRpbmcgY29va2llJywgZXJyb3IpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcbiIsIlxuaW1wb3J0IGNyZWF0ZUZlYXR1cmVNYW5hZ2VtZW50SW5zdGFuY2UgZnJvbSAnQGp1c3RlYXQvZmVhdHVyZS1tYW5hZ2VtZW50JztcbmltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcblxuY29uc3Qgc2l4dHlTZWNvbmRzID0gNjAgKiAxMDAwO1xuY29uc3QgZml2ZVNlY29uZHMgPSA1MDAwO1xuXG5jbGFzcyBKZXRGbUxvZyB7XG4gIGluZm8obWVzc2FnZSwgdGFncywgcGF5bG9hZCA9IHt9KSB7XG4gICAgY29uc29sZS5pbmZvKFwiW2pldGZtXVwiLCBtZXNzYWdlLCB0YWdzLCBwYXlsb2FkKTtcbiAgfVxuXG4gIHdhcm4obWVzc2FnZSwgdGFncywgcGF5bG9hZCA9IHt9KSB7XG4gICAgY29uc29sZS53YXJuKFwiW2pldGZtXVwiLCBtZXNzYWdlLCB0YWdzLCBwYXlsb2FkKTtcbiAgfVxuXG4gIGVycm9yKG1lc3NhZ2UsIGV4Y2VwdGlvbiwgdGFncywgcGF5bG9hZCA9IHt9KSB7XG4gICAgY29uc29sZS5lcnJvcihcIltqZXRmbV1cIiwgbWVzc2FnZSwgZXhjZXB0aW9uLCB0YWdzLCBwYXlsb2FkKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSmV0Rm0ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNlcnZpY2UgPSBudWxsO1xuICB9XG5cblxuICBpbml0KCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IFxuICAgIHtcbiAgICAgIGtleVByZWZpeDogJ2pldC1taW5pc2l0ZXMnLFxuICAgICAgY2RuOiB7XG4gICAgICAgIGhvc3Q6ICdodHRwczovL2ZlYXR1cmVzLmFwaS5qdXN0ZWF0dGFrZWF3YXkuY29tJyxcbiAgICAgICAgc2NvcGU6ICdqZXQtbWluaXNpdGVzJyxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHByb2Nlc3MuZW52Lk5PREVfRU5WIHx8ICdkZXZlbG9wbWVudCcsXG4gICAgICAgIGtleTogJycsXG4gICAgICAgIHBvbGw6IHRydWUsXG4gICAgICAgIHBvbGxJbnRlcnZhbDogc2l4dHlTZWNvbmRzLCAvLyBkZWZhdWx0IHZhbHVlIGluIGRvY3NcbiAgICAgIH0sXG4gICAgICBjb250ZXh0R2V0dGVyOiAoKSA9PiB7ICAgICAgICBcbiAgICAgICAgcmV0dXJuIHsgYXBwVmVyc2lvbjogJzEuMi4zJywgdGVuYW50OiAnYWxsJyB9O1xuICAgICAgfSxcbiAgICAgIG9uVHJhY2s6IChrZXksIHZhcmlhbnQpID0+IHtcbiAgICAgICAgd2luZG93LmRhdGFMYXllciA9IHdpbmRvdy5kYXRhTGF5ZXIgfHwgW107XG4gICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaCh7XG4gICAgICAgICAgZXZlbnQ6ICdleHBlcmltZW50X2FjdGl2ZScsXG4gICAgICAgICAgdG1zX2RhdGE6IHtcbiAgICAgICAgICAgICAgZXZlbnREYXRhOiB7XG4gICAgICAgICAgICAgICAgICBleHBlcmltZW50X3ZhcmlhbnQ6IHZhcmlhbnQsXG4gICAgICAgICAgICAgICAgICBleHBlcmltZW50X2tleToga2V5LFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbmZpZy5sb2cgPSBuZXcgSmV0Rm1Mb2coKTtcbiAgICBjb25zdCBodHRwQ2xpZW50ID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgIHRpbWVvdXQ6IGZpdmVTZWNvbmRzXG4gIH0pO1xuXG5jb25zdCBzZXJ2aWNlID0gY3JlYXRlRmVhdHVyZU1hbmFnZW1lbnRJbnN0YW5jZShjb25maWcsIGh0dHBDbGllbnQpO1xuY29uc3Qgc2VsZiA9IHRoaXM7XG5zZXJ2aWNlLmxvYWRGcm9tQ2RuKClcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHNlbGYuc2VydmljZSA9IHNlcnZpY2U7ICAgICAgICBcbiAgICAgICAgc2VsZi5zZXJ2aWNlLmdldEJvb2xlYW5WYWx1ZShcImZlYXR1cmVfc2hvd19vcmRlcm1vZHVsZVwiKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfSlcbiAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBjb25maWcubG9nLmVycm9yKCdFcnJvciBsb2FkaW5nIGZyb20gSkVURk0nLCBlcnJvcik7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIE1lZGlhUXVlcnkgU2VydmljZXNcbiAqXG4gKiBAYXV0aG9yIFJveSBTcGVrcmVpanNlIDxyb3kuc3Bla3JlaWpzZUB0YWtlYXdheS5jb20+XG4gKlxuICovXG5cbi8vIEtFRVAgVEhFU0UgQlJFQUtQT0lOVFMgVVBUTyBEQVRFIHdpdGggdGhlIFNBU1MgYnJlYWtwb2ludHNcbi8vIFNlZSBBcHBcXFNvdXJjZVxcU2Fzc1xcY29uZmlnXFxfY29uZmlnLnNjc3NcbmNvbnN0IGJyZWFrUG9pbnRzID0ge1xuICAnbW9iaWxlJzogMzIwLFxuICAndGFibGV0LXBvcnRyYWl0JzogNTcwLFxuICAndGFibGV0LWxhbmRzY2FwZSc6IDEwMDQsXG4gICdkZXNrdG9wJzogMTI4MFxufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVkaWFRdWVyeVNlcnZpY2Uge1xuICAvKipcbiAgKiBAcGFyYW0gc2l6ZTEge3N0cmluZ31cbiAgKiBAcGFyYW0gc2l6ZTIge29wdGlvbmFsIHN0cmluZ31cbiAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAqIHNhbXBsZSBhcHAubWVkaWFRdWVyeVNlcnZpY2UucmVzcG9uZFRvKCc+PXRhYmxldC1sYW5kc2NhcGUnLCAnPGRlc2t0b3AnKVxuICAqL1xuICByZXNwb25kVG8gKHNpemUxLCBzaXplMikge1xuICAgIGNvbnN0IHNpemVzID0gW11cbiAgICBpZiAoc2l6ZTEpIHtcbiAgICAgIHNpemVzLnB1c2goc2l6ZTEpXG4gICAgfVxuICAgIGlmIChzaXplMikge1xuICAgICAgc2l6ZXMucHVzaChzaXplMilcbiAgICB9XG4gICAgaWYgKHNpemVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHNpemVzLmV2ZXJ5KHNpemUgPT4ge1xuICAgICAgICBjb25zdCBjb21wYXJlciA9IHNpemUucmVwbGFjZSgvW148Pj1dL2csICcnKVxuICAgICAgICBsZXQgYnJlYWtwb2ludCA9IGJyZWFrUG9pbnRzW3NpemUucmVwbGFjZShjb21wYXJlciwgJycpXVxuICAgICAgICBpZiAoIWJyZWFrcG9pbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gYnJlYWtwb2ludCcpXG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChjb21wYXJlcikge1xuICAgICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDw9IChicmVha3BvaW50IC0gMSlcbiAgICAgICAgICBjYXNlICc8PSc6XG4gICAgICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPD0gYnJlYWtwb2ludFxuICAgICAgICAgIGNhc2UgJz4nOlxuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoID49IChicmVha3BvaW50ICsgMSlcbiAgICAgICAgICBjYXNlICc+PSc6XG4gICAgICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPj0gYnJlYWtwb2ludFxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gY29tcGFyaXNvbicpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iXX0="}</pre></body></html>