ng-easycommerce 0.0.593 → 0.0.595
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +915 -910
- package/assets/bamboo.html +145 -145
- package/assets/bancardCatastro.html +49 -49
- package/assets/bancardFrameBase.html +104 -104
- package/assets/cecaFrameRedirectBase.html +172 -172
- package/assets/decidirFormEc.html +516 -516
- package/assets/docs/COOKIES.md +158 -158
- package/assets/docs/Parametros-Frontend.md +56 -56
- package/assets/ec-i18n/ct.json +282 -282
- package/assets/ec-i18n/en.json +3 -1
- package/assets/ec-i18n/es.json +393 -391
- package/assets/ec-i18n/fr.json +0 -0
- package/assets/ec-i18n/gl.json +282 -282
- package/assets/ec-i18n/pr.json +282 -282
- package/assets/images/whatsapp.png +0 -0
- package/assets/mpFrameRedirectBase.html +114 -114
- package/assets/recaptcha/recaptcha-site-keys.json +3 -3
- package/assets/recaptcha/recaptcha-sites-prod.json +38 -38
- package/assets/recaptcha/recaptcha-sites.json +52 -52
- package/assets/redirect.html +62 -62
- package/assets/redsysAuthVdosBase.html +78 -78
- package/assets/redsysAuthVunoBase.html +84 -84
- package/assets/redsysFrameRedirectBase.html +102 -102
- package/assets/redsysFrameRedirectOutBase.html +102 -102
- package/assets/redsysFrameSendBase.html +71 -71
- package/assets/redsysProBase.html +399 -399
- package/assets/redsysStateBase.html +63 -63
- package/assets/scss/_colors.scss +17 -17
- package/assets/scss/_styles.scss +22 -22
- package/assets/svg/chevron-left-black.svg +61 -61
- package/assets/svg/chevron-right-black.svg +61 -61
- package/bundles/ng-easycommerce.umd.js +19241 -19232
- package/bundles/ng-easycommerce.umd.js.map +1 -1
- package/bundles/ng-easycommerce.umd.min.js +1 -1
- package/bundles/ng-easycommerce.umd.min.js.map +1 -1
- package/esm2015/lib/api/connection.service.js +77 -77
- package/esm2015/lib/classes/checkout/step-service.js +39 -39
- package/esm2015/lib/classes/checkout/step.js +22 -22
- package/esm2015/lib/classes/checkout-process-state.js +2 -2
- package/esm2015/lib/classes/component-helper.js +14 -14
- package/esm2015/lib/classes/filters/AttributesFilter.js +61 -61
- package/esm2015/lib/classes/filters/CategoryFilter.js +54 -54
- package/esm2015/lib/classes/filters/DinamycsFilter.js +58 -58
- package/esm2015/lib/classes/filters/Filter.js +75 -75
- package/esm2015/lib/classes/filters/PriceRangeFilter.js +51 -51
- package/esm2015/lib/classes/filters/SortFilter.js +79 -79
- package/esm2015/lib/classes/user-role-type.js +1 -1
- package/esm2015/lib/classes/user.js +108 -108
- package/esm2015/lib/core.consts.js +402 -402
- package/esm2015/lib/ec-component/account-ec/account-ec.component.js +45 -45
- package/esm2015/lib/ec-component/account-ec/order-ec/order-ec.component.js +112 -112
- package/esm2015/lib/ec-component/account-ec/orders-list-ec/orders-list-ec.component.js +188 -188
- package/esm2015/lib/ec-component/auth-ec/auth-ec.component.js +115 -115
- package/esm2015/lib/ec-component/auth-ec/confirm-account-ec/confirm-account-ec.component.js +44 -44
- package/esm2015/lib/ec-component/auth-ec/forgot-password-ec/forgot-password-ec.component.js +58 -58
- package/esm2015/lib/ec-component/auth-ec/login-form-ec/login-form-ec.component.js +108 -108
- package/esm2015/lib/ec-component/auth-ec/register-form-ec/register-form-ec.component.js +166 -166
- package/esm2015/lib/ec-component/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.js +165 -165
- package/esm2015/lib/ec-component/auth-ec/select-channel-ec/select-channel-ec.component.js +78 -78
- package/esm2015/lib/ec-component/blocks-ec/block-banner-boxes-ec/block-banner-boxes-ec.component.js +138 -138
- package/esm2015/lib/ec-component/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.js +110 -110
- package/esm2015/lib/ec-component/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.js +138 -138
- package/esm2015/lib/ec-component/blocks-ec/block-html-ec/block-html-ec.component.js +38 -38
- package/esm2015/lib/ec-component/blocks-ec/block-newsletter-ec/contact-form-news-ec.component.js +152 -152
- package/esm2015/lib/ec-component/blocks-ec/block-products-ec/block-products-ec.component.js +119 -119
- package/esm2015/lib/ec-component/blocks-ec/blocks-ec.component.js +70 -70
- package/esm2015/lib/ec-component/build-your-ec/build-your-ec.component.js +305 -305
- package/esm2015/lib/ec-component/build-your-ec/product-found-ec/product-found-ec.component.js +85 -85
- package/esm2015/lib/ec-component/cart-ec/cart-ec.component.js +383 -383
- package/esm2015/lib/ec-component/checkout-ec/checkout-ec.component.js +146 -146
- package/esm2015/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +354 -354
- package/esm2015/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +78 -78
- package/esm2015/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +127 -127
- package/esm2015/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.js +112 -112
- package/esm2015/lib/ec-component/checkout-ec/step-ec/step-ec.component.js +53 -53
- package/esm2015/lib/ec-component/checkout-ec/success-ec/success-ec.component.js +65 -65
- package/esm2015/lib/ec-component/checkout-error-ec/checkout-error-ec.component.js +80 -80
- package/esm2015/lib/ec-component/collection-ec/collection-ec.component.js +220 -220
- package/esm2015/lib/ec-component/compared-products-ec/compared-products-ec.component.js +186 -186
- package/esm2015/lib/ec-component/cookies-ec/cookies-ec.component.js +109 -109
- package/esm2015/lib/ec-component/cookies-ec/modal-config-ec/modal-config-ec.component.js +32 -32
- package/esm2015/lib/ec-component/cookies-ec/modal-cookies-ec/modal-cookies-ec.component.js +34 -34
- package/esm2015/lib/ec-component/cookies-ec/sidebar-cookies-ec/sidebar-cookies-ec.component.js +34 -34
- package/esm2015/lib/ec-component/cookies-ec/toast-cookies-ec/toast-cookies-ec.component.js +35 -35
- package/esm2015/lib/ec-component/coupon-ec/coupon-ec.component.js +53 -53
- package/esm2015/lib/ec-component/faqs-content-ec/faqs-content-ec.component.js +49 -49
- package/esm2015/lib/ec-component/filters-ec/filters-ec.component.js +152 -152
- package/esm2015/lib/ec-component/filters-top-ec/filters-top-ec.component.js +102 -102
- package/esm2015/lib/ec-component/footer-ec/footer-ec.component.js +80 -80
- package/esm2015/lib/ec-component/header-ec/header-ec.component.js +186 -186
- package/esm2015/lib/ec-component/home-ec/home-ec.component.js +37 -37
- package/esm2015/lib/ec-component/index.js +241 -241
- package/esm2015/lib/ec-component/login-ec/login-ec.component.js +102 -102
- package/esm2015/lib/ec-component/multiple-items-to-cart-ec/multiple-items-to-cart-ec.component.js +90 -90
- package/esm2015/lib/ec-component/password-reset-ec/password-reset-ec.component.js +103 -103
- package/esm2015/lib/ec-component/product-detail-ec/product-detail-ec.component.js +165 -165
- package/esm2015/lib/ec-component/product-ec/product-ec.component.js +123 -123
- package/esm2015/lib/ec-component/related-products-ec/related-products-ec.component.js +94 -94
- package/esm2015/lib/ec-component/reviews-ec/reviews-ec.component.js +69 -69
- package/esm2015/lib/ec-component/reviews-form-ec/reviews-form-ec.component.js +138 -138
- package/esm2015/lib/ec-component/section-container-ec/section-container-ec.component.js +86 -86
- package/esm2015/lib/ec-component/seller-dashboard-container-ec/seller-dashboard-container-ec.component.js +130 -130
- package/esm2015/lib/ec-component/share-block-ec/share-block-ec.component.js +149 -149
- package/esm2015/lib/ec-component/sidebar-ec/sidebar-ec.component.js +117 -117
- package/esm2015/lib/ec-component/stores-ec/stores-ec.component.js +192 -192
- package/esm2015/lib/ec-component/variants-ec/variants-ec.component.js +56 -56
- package/esm2015/lib/ec-component/widgets-ec/bamboo-ec/bamboo-ec.component.js +205 -205
- package/esm2015/lib/ec-component/widgets-ec/bancard-catastro-ec/bancard-catastro-ec.component.js +296 -296
- package/esm2015/lib/ec-component/widgets-ec/bancard-ec/bancard-ec.component.js +154 -154
- package/esm2015/lib/ec-component/widgets-ec/bancard-redirect-ec/bancard-redirect-ec.component.js +144 -144
- package/esm2015/lib/ec-component/widgets-ec/cart-load-ec/cart-load-ec.component.js +49 -49
- package/esm2015/lib/ec-component/widgets-ec/ceca-redirect-ec/ceca-redirect-ec.component.js +133 -133
- package/esm2015/lib/ec-component/widgets-ec/culqi-ec/culqi-ec.component.js +152 -152
- package/esm2015/lib/ec-component/widgets-ec/decidir-ec/decidir-ec.component.js +175 -175
- package/esm2015/lib/ec-component/widgets-ec/loading-full-ec/loading-full-ec.component.js +30 -30
- package/esm2015/lib/ec-component/widgets-ec/loading-inline-ec/loading-inline-ec.component.js +26 -26
- package/esm2015/lib/ec-component/widgets-ec/loading-section-ec/loading-section-ec.component.js +21 -21
- package/esm2015/lib/ec-component/widgets-ec/mercadopago-ec/mp-redirect-ec/mp-redirect-ec.component.js +156 -156
- package/esm2015/lib/ec-component/widgets-ec/mercadopago-ec/mpcredit-ec/mpcredit-ec.component.js +368 -368
- package/esm2015/lib/ec-component/widgets-ec/mobbex-ec/mobbex-ec.component.js +151 -151
- package/esm2015/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.js +178 -178
- package/esm2015/lib/ec-component/widgets-ec/price-ec/price-ec.component.js +44 -44
- package/esm2015/lib/ec-component/widgets-ec/rating-ec/rating-ec.component.js +83 -83
- package/esm2015/lib/ec-component/widgets-ec/re-captcha-ec/re-captcha-ec.component.js +50 -50
- package/esm2015/lib/ec-component/widgets-ec/redsys-catch-ec/redsys-catch-ec.component.js +90 -90
- package/esm2015/lib/ec-component/widgets-ec/redsys-pro-ec/redsys-pro-ec.component.js +143 -143
- package/esm2015/lib/ec-component/widgets-ec/redsys-redirect-ec/redsys-redirect-ec.component.js +128 -128
- package/esm2015/lib/ec-component/widgets-ec/redsys-redirect-out-ec/redsys-redirect-out-ec.component.js +145 -145
- package/esm2015/lib/ec-component/widgets-ec/zoom-ec/magnizoom.component.js +167 -167
- package/esm2015/lib/ec-directive/add-action-redirect.directive.js +85 -85
- package/esm2015/lib/ec-directive/auth-wholesaler.directive.js +54 -54
- package/esm2015/lib/ec-directive/index.js +36 -36
- package/esm2015/lib/ec-directive/product-mini-standard.directive.js +65 -65
- package/esm2015/lib/ec-directive/product-off.directive.js +144 -144
- package/esm2015/lib/ec-directive/product-stock.directive.js +75 -75
- package/esm2015/lib/ec-directive/reload-view.directive.js +34 -34
- package/esm2015/lib/ec-pipe/ec-currency-symbol.pipe.js +72 -72
- package/esm2015/lib/ec-pipe/ec-sanitizer-html.pipe.js +26 -26
- package/esm2015/lib/ec-pipe/ec-sanitizer-url.pipe.js +26 -26
- package/esm2015/lib/ec-pipe/index.js +13 -13
- package/esm2015/lib/guards/able-buyer-guard.service.js +36 -36
- package/esm2015/lib/guards/auth-guard.service.js +36 -36
- package/esm2015/lib/guards/checkout-ready.service.js +36 -36
- package/esm2015/lib/guards/loggedin-guard.service.js +36 -36
- package/esm2015/lib/guards/user-role-guard.service.js +38 -38
- package/esm2015/lib/interceptors/auth.interceptor.js +55 -55
- package/esm2015/lib/interceptors/customer.interceptor.js +48 -48
- package/esm2015/lib/interfaces/Script.js +1 -1
- package/esm2015/lib/interfaces/analytics/event-key.model.js +1 -1
- package/esm2015/lib/interfaces/analytics/facebook-pixel/facebook-pixel-model.js +1 -1
- package/esm2015/lib/interfaces/analytics/gtm-config.js +1 -1
- package/esm2015/lib/interfaces/analytics/metricool-pixel.js +1 -1
- package/esm2015/lib/interfaces/block.js +1 -1
- package/esm2015/lib/interfaces/cart/cart-affordable.js +1 -1
- package/esm2015/lib/interfaces/checkout/checkout-error.js +1 -1
- package/esm2015/lib/interfaces/checkout-data.js +1 -1
- package/esm2015/lib/interfaces/choose-options/filter-option.js +6 -6
- package/esm2015/lib/interfaces/choose-options/options-of-product-list.js +1 -1
- package/esm2015/lib/interfaces/cookies.js +1 -1
- package/esm2015/lib/interfaces/core.interfaces.js +1 -1
- package/esm2015/lib/interfaces/coupon.js +1 -1
- package/esm2015/lib/interfaces/deserializable.js +1 -1
- package/esm2015/lib/interfaces/faqs.js +1 -1
- package/esm2015/lib/interfaces/filter.js +1 -1
- package/esm2015/lib/interfaces/filterStep.js +1 -1
- package/esm2015/lib/interfaces/observable-error.interface.js +1 -1
- package/esm2015/lib/interfaces/paginate.js +1 -1
- package/esm2015/lib/interfaces/parameters.js +1 -1
- package/esm2015/lib/interfaces/selection.js +4 -4
- package/esm2015/lib/interfaces/step.js +1 -1
- package/esm2015/lib/interfaces/store.js +1 -1
- package/esm2015/lib/ng-easycommerce.module.js +179 -179
- package/esm2015/lib/pipes/order-by.pipe.js +101 -101
- package/esm2015/lib/services/account/orders.service.js +102 -102
- package/esm2015/lib/services/analytics.service.js +57 -57
- package/esm2015/lib/services/auth.service.js +339 -339
- package/esm2015/lib/services/banner.service.js +72 -72
- package/esm2015/lib/services/blocks/blocks-repository.service.js +62 -62
- package/esm2015/lib/services/blocks/blocks.service.js +71 -71
- package/esm2015/lib/services/captcha.service.js +130 -130
- package/esm2015/lib/services/cart.service.js +572 -563
- package/esm2015/lib/services/channel-config.service.js +105 -105
- package/esm2015/lib/services/checkout/addressing.service.js +222 -222
- package/esm2015/lib/services/checkout/checkout.service.js +233 -235
- package/esm2015/lib/services/checkout/error-handler.service.js +81 -81
- package/esm2015/lib/services/checkout/payment.service.js +77 -77
- package/esm2015/lib/services/checkout/shipment.service.js +183 -183
- package/esm2015/lib/services/concatenated-associations.service.js +120 -120
- package/esm2015/lib/services/cookies.service.js +208 -208
- package/esm2015/lib/services/currency.service.js +161 -161
- package/esm2015/lib/services/dataform.service.js +46 -46
- package/esm2015/lib/services/filters.service.js +122 -122
- package/esm2015/lib/services/gift-card.service.js +61 -61
- package/esm2015/lib/services/ip-address.service.js +34 -34
- package/esm2015/lib/services/options.service.js +275 -275
- package/esm2015/lib/services/pagination.service.js +73 -73
- package/esm2015/lib/services/parameters.service.js +72 -72
- package/esm2015/lib/services/products/product-detail.service.js +429 -429
- package/esm2015/lib/services/products/products.service.js +287 -287
- package/esm2015/lib/services/reviews.service.js +107 -107
- package/esm2015/lib/services/stores.service.js +37 -37
- package/esm2015/lib/services/windows.service.js +52 -52
- package/esm2015/lib/services/wishlist.service.js +70 -70
- package/esm2015/lib/strategies/standard.strategy.js +43 -43
- package/esm2015/lib/utils/analytics/doppler.service.js +37 -37
- package/esm2015/lib/utils/analytics/facebook-pixel.service.js +141 -141
- package/esm2015/lib/utils/analytics/google-analytics.service.js +265 -265
- package/esm2015/lib/utils/analytics/gtm.service.js +341 -341
- package/esm2015/lib/utils/analytics/metricool-pixel.service.js +48 -48
- package/esm2015/lib/utils/options-of-product-list-data.service.js +96 -96
- package/esm2015/lib/utils/order-util.service.js +72 -72
- package/esm2015/lib/utils/payment-utils.service.js +35 -35
- package/esm2015/lib/utils/shipment-transformer.service.js +66 -66
- package/esm2015/lib/utils/toast.service.js +42 -42
- package/esm2015/lib/utils/utils.service.js +20 -20
- package/esm2015/ng-easycommerce.js +33 -33
- package/esm2015/public-api.js +146 -146
- package/esm5/lib/api/connection.service.js +90 -90
- package/esm5/lib/classes/checkout/step-service.js +74 -74
- package/esm5/lib/classes/checkout/step.js +25 -25
- package/esm5/lib/classes/checkout-process-state.js +2 -2
- package/esm5/lib/classes/component-helper.js +18 -18
- package/esm5/lib/classes/filters/AttributesFilter.js +79 -79
- package/esm5/lib/classes/filters/CategoryFilter.js +72 -72
- package/esm5/lib/classes/filters/DinamycsFilter.js +76 -76
- package/esm5/lib/classes/filters/Filter.js +78 -78
- package/esm5/lib/classes/filters/PriceRangeFilter.js +68 -68
- package/esm5/lib/classes/filters/SortFilter.js +97 -97
- package/esm5/lib/classes/user-role-type.js +1 -1
- package/esm5/lib/classes/user.js +120 -120
- package/esm5/lib/core.consts.js +422 -422
- package/esm5/lib/ec-component/account-ec/account-ec.component.js +62 -62
- package/esm5/lib/ec-component/account-ec/order-ec/order-ec.component.js +166 -166
- package/esm5/lib/ec-component/account-ec/orders-list-ec/orders-list-ec.component.js +205 -205
- package/esm5/lib/ec-component/auth-ec/auth-ec.component.js +132 -132
- package/esm5/lib/ec-component/auth-ec/confirm-account-ec/confirm-account-ec.component.js +60 -60
- package/esm5/lib/ec-component/auth-ec/forgot-password-ec/forgot-password-ec.component.js +74 -74
- package/esm5/lib/ec-component/auth-ec/login-form-ec/login-form-ec.component.js +125 -125
- package/esm5/lib/ec-component/auth-ec/register-form-ec/register-form-ec.component.js +183 -183
- package/esm5/lib/ec-component/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.js +182 -182
- package/esm5/lib/ec-component/auth-ec/select-channel-ec/select-channel-ec.component.js +106 -106
- package/esm5/lib/ec-component/blocks-ec/block-banner-boxes-ec/block-banner-boxes-ec.component.js +166 -166
- package/esm5/lib/ec-component/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.js +138 -138
- package/esm5/lib/ec-component/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.js +165 -165
- package/esm5/lib/ec-component/blocks-ec/block-html-ec/block-html-ec.component.js +54 -54
- package/esm5/lib/ec-component/blocks-ec/block-newsletter-ec/contact-form-news-ec.component.js +180 -180
- package/esm5/lib/ec-component/blocks-ec/block-products-ec/block-products-ec.component.js +146 -146
- package/esm5/lib/ec-component/blocks-ec/blocks-ec.component.js +90 -90
- package/esm5/lib/ec-component/build-your-ec/build-your-ec.component.js +327 -327
- package/esm5/lib/ec-component/build-your-ec/product-found-ec/product-found-ec.component.js +112 -112
- package/esm5/lib/ec-component/cart-ec/cart-ec.component.js +467 -467
- package/esm5/lib/ec-component/checkout-ec/checkout-ec.component.js +163 -163
- package/esm5/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +439 -439
- package/esm5/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +95 -95
- package/esm5/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +217 -217
- package/esm5/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.js +162 -162
- package/esm5/lib/ec-component/checkout-ec/step-ec/step-ec.component.js +69 -69
- package/esm5/lib/ec-component/checkout-ec/success-ec/success-ec.component.js +82 -82
- package/esm5/lib/ec-component/checkout-error-ec/checkout-error-ec.component.js +97 -97
- package/esm5/lib/ec-component/collection-ec/collection-ec.component.js +261 -261
- package/esm5/lib/ec-component/compared-products-ec/compared-products-ec.component.js +209 -209
- package/esm5/lib/ec-component/cookies-ec/cookies-ec.component.js +126 -126
- package/esm5/lib/ec-component/cookies-ec/modal-config-ec/modal-config-ec.component.js +34 -34
- package/esm5/lib/ec-component/cookies-ec/modal-cookies-ec/modal-cookies-ec.component.js +36 -36
- package/esm5/lib/ec-component/cookies-ec/sidebar-cookies-ec/sidebar-cookies-ec.component.js +36 -36
- package/esm5/lib/ec-component/cookies-ec/toast-cookies-ec/toast-cookies-ec.component.js +37 -37
- package/esm5/lib/ec-component/coupon-ec/coupon-ec.component.js +71 -71
- package/esm5/lib/ec-component/faqs-content-ec/faqs-content-ec.component.js +66 -66
- package/esm5/lib/ec-component/filters-ec/filters-ec.component.js +168 -168
- package/esm5/lib/ec-component/filters-top-ec/filters-top-ec.component.js +118 -118
- package/esm5/lib/ec-component/footer-ec/footer-ec.component.js +109 -109
- package/esm5/lib/ec-component/header-ec/header-ec.component.js +245 -245
- package/esm5/lib/ec-component/home-ec/home-ec.component.js +53 -53
- package/esm5/lib/ec-component/index.js +241 -241
- package/esm5/lib/ec-component/login-ec/login-ec.component.js +118 -118
- package/esm5/lib/ec-component/multiple-items-to-cart-ec/multiple-items-to-cart-ec.component.js +106 -106
- package/esm5/lib/ec-component/password-reset-ec/password-reset-ec.component.js +119 -119
- package/esm5/lib/ec-component/product-detail-ec/product-detail-ec.component.js +192 -192
- package/esm5/lib/ec-component/product-ec/product-ec.component.js +141 -141
- package/esm5/lib/ec-component/related-products-ec/related-products-ec.component.js +111 -111
- package/esm5/lib/ec-component/reviews-ec/reviews-ec.component.js +85 -85
- package/esm5/lib/ec-component/reviews-form-ec/reviews-form-ec.component.js +155 -155
- package/esm5/lib/ec-component/section-container-ec/section-container-ec.component.js +103 -103
- package/esm5/lib/ec-component/seller-dashboard-container-ec/seller-dashboard-container-ec.component.js +149 -149
- package/esm5/lib/ec-component/share-block-ec/share-block-ec.component.js +166 -166
- package/esm5/lib/ec-component/sidebar-ec/sidebar-ec.component.js +120 -120
- package/esm5/lib/ec-component/stores-ec/stores-ec.component.js +214 -214
- package/esm5/lib/ec-component/variants-ec/variants-ec.component.js +72 -72
- package/esm5/lib/ec-component/widgets-ec/bamboo-ec/bamboo-ec.component.js +221 -221
- package/esm5/lib/ec-component/widgets-ec/bancard-catastro-ec/bancard-catastro-ec.component.js +313 -313
- package/esm5/lib/ec-component/widgets-ec/bancard-ec/bancard-ec.component.js +170 -170
- package/esm5/lib/ec-component/widgets-ec/bancard-redirect-ec/bancard-redirect-ec.component.js +160 -160
- package/esm5/lib/ec-component/widgets-ec/cart-load-ec/cart-load-ec.component.js +83 -83
- package/esm5/lib/ec-component/widgets-ec/ceca-redirect-ec/ceca-redirect-ec.component.js +149 -149
- package/esm5/lib/ec-component/widgets-ec/culqi-ec/culqi-ec.component.js +156 -156
- package/esm5/lib/ec-component/widgets-ec/decidir-ec/decidir-ec.component.js +192 -192
- package/esm5/lib/ec-component/widgets-ec/loading-full-ec/loading-full-ec.component.js +46 -46
- package/esm5/lib/ec-component/widgets-ec/loading-inline-ec/loading-inline-ec.component.js +42 -42
- package/esm5/lib/ec-component/widgets-ec/loading-section-ec/loading-section-ec.component.js +23 -23
- package/esm5/lib/ec-component/widgets-ec/mercadopago-ec/mp-redirect-ec/mp-redirect-ec.component.js +174 -174
- package/esm5/lib/ec-component/widgets-ec/mercadopago-ec/mpcredit-ec/mpcredit-ec.component.js +396 -396
- package/esm5/lib/ec-component/widgets-ec/mobbex-ec/mobbex-ec.component.js +167 -167
- package/esm5/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.js +231 -231
- package/esm5/lib/ec-component/widgets-ec/price-ec/price-ec.component.js +60 -60
- package/esm5/lib/ec-component/widgets-ec/rating-ec/rating-ec.component.js +100 -100
- package/esm5/lib/ec-component/widgets-ec/re-captcha-ec/re-captcha-ec.component.js +53 -53
- package/esm5/lib/ec-component/widgets-ec/redsys-catch-ec/redsys-catch-ec.component.js +124 -124
- package/esm5/lib/ec-component/widgets-ec/redsys-pro-ec/redsys-pro-ec.component.js +159 -159
- package/esm5/lib/ec-component/widgets-ec/redsys-redirect-ec/redsys-redirect-ec.component.js +144 -144
- package/esm5/lib/ec-component/widgets-ec/redsys-redirect-out-ec/redsys-redirect-out-ec.component.js +162 -162
- package/esm5/lib/ec-component/widgets-ec/zoom-ec/magnizoom.component.js +181 -181
- package/esm5/lib/ec-directive/add-action-redirect.directive.js +104 -104
- package/esm5/lib/ec-directive/auth-wholesaler.directive.js +60 -60
- package/esm5/lib/ec-directive/index.js +36 -36
- package/esm5/lib/ec-directive/product-mini-standard.directive.js +72 -72
- package/esm5/lib/ec-directive/product-off.directive.js +163 -163
- package/esm5/lib/ec-directive/product-stock.directive.js +81 -81
- package/esm5/lib/ec-directive/reload-view.directive.js +35 -35
- package/esm5/lib/ec-pipe/ec-currency-symbol.pipe.js +74 -74
- package/esm5/lib/ec-pipe/ec-sanitizer-html.pipe.js +27 -27
- package/esm5/lib/ec-pipe/ec-sanitizer-url.pipe.js +27 -27
- package/esm5/lib/ec-pipe/index.js +13 -13
- package/esm5/lib/guards/able-buyer-guard.service.js +37 -37
- package/esm5/lib/guards/auth-guard.service.js +37 -37
- package/esm5/lib/guards/checkout-ready.service.js +37 -37
- package/esm5/lib/guards/loggedin-guard.service.js +37 -37
- package/esm5/lib/guards/user-role-guard.service.js +39 -39
- package/esm5/lib/interceptors/auth.interceptor.js +57 -57
- package/esm5/lib/interceptors/customer.interceptor.js +50 -50
- package/esm5/lib/interfaces/Script.js +1 -1
- package/esm5/lib/interfaces/analytics/event-key.model.js +1 -1
- package/esm5/lib/interfaces/analytics/facebook-pixel/facebook-pixel-model.js +1 -1
- package/esm5/lib/interfaces/analytics/gtm-config.js +1 -1
- package/esm5/lib/interfaces/analytics/metricool-pixel.js +1 -1
- package/esm5/lib/interfaces/block.js +1 -1
- package/esm5/lib/interfaces/cart/cart-affordable.js +1 -1
- package/esm5/lib/interfaces/checkout/checkout-error.js +1 -1
- package/esm5/lib/interfaces/checkout-data.js +1 -1
- package/esm5/lib/interfaces/choose-options/filter-option.js +6 -6
- package/esm5/lib/interfaces/choose-options/options-of-product-list.js +1 -1
- package/esm5/lib/interfaces/cookies.js +1 -1
- package/esm5/lib/interfaces/core.interfaces.js +1 -1
- package/esm5/lib/interfaces/coupon.js +1 -1
- package/esm5/lib/interfaces/deserializable.js +1 -1
- package/esm5/lib/interfaces/faqs.js +1 -1
- package/esm5/lib/interfaces/filter.js +1 -1
- package/esm5/lib/interfaces/filterStep.js +1 -1
- package/esm5/lib/interfaces/observable-error.interface.js +1 -1
- package/esm5/lib/interfaces/paginate.js +1 -1
- package/esm5/lib/interfaces/parameters.js +1 -1
- package/esm5/lib/interfaces/selection.js +4 -4
- package/esm5/lib/interfaces/step.js +1 -1
- package/esm5/lib/interfaces/store.js +1 -1
- package/esm5/lib/ng-easycommerce.module.js +183 -183
- package/esm5/lib/pipes/order-by.pipe.js +106 -106
- package/esm5/lib/services/account/orders.service.js +120 -120
- package/esm5/lib/services/analytics.service.js +60 -60
- package/esm5/lib/services/auth.service.js +413 -413
- package/esm5/lib/services/banner.service.js +81 -81
- package/esm5/lib/services/blocks/blocks-repository.service.js +94 -94
- package/esm5/lib/services/blocks/blocks.service.js +79 -79
- package/esm5/lib/services/captcha.service.js +132 -132
- package/esm5/lib/services/cart.service.js +701 -690
- package/esm5/lib/services/channel-config.service.js +107 -107
- package/esm5/lib/services/checkout/addressing.service.js +280 -280
- package/esm5/lib/services/checkout/checkout.service.js +316 -318
- package/esm5/lib/services/checkout/error-handler.service.js +83 -83
- package/esm5/lib/services/checkout/payment.service.js +125 -125
- package/esm5/lib/services/checkout/shipment.service.js +265 -265
- package/esm5/lib/services/concatenated-associations.service.js +162 -162
- package/esm5/lib/services/cookies.service.js +222 -222
- package/esm5/lib/services/currency.service.js +205 -205
- package/esm5/lib/services/dataform.service.js +48 -48
- package/esm5/lib/services/filters.service.js +125 -125
- package/esm5/lib/services/gift-card.service.js +63 -63
- package/esm5/lib/services/ip-address.service.js +35 -35
- package/esm5/lib/services/options.service.js +376 -376
- package/esm5/lib/services/pagination.service.js +79 -79
- package/esm5/lib/services/parameters.service.js +74 -74
- package/esm5/lib/services/products/product-detail.service.js +494 -494
- package/esm5/lib/services/products/products.service.js +345 -345
- package/esm5/lib/services/reviews.service.js +116 -116
- package/esm5/lib/services/stores.service.js +39 -39
- package/esm5/lib/services/windows.service.js +79 -79
- package/esm5/lib/services/wishlist.service.js +71 -71
- package/esm5/lib/strategies/standard.strategy.js +44 -44
- package/esm5/lib/utils/analytics/doppler.service.js +39 -39
- package/esm5/lib/utils/analytics/facebook-pixel.service.js +145 -145
- package/esm5/lib/utils/analytics/google-analytics.service.js +280 -280
- package/esm5/lib/utils/analytics/gtm.service.js +358 -358
- package/esm5/lib/utils/analytics/metricool-pixel.service.js +40 -40
- package/esm5/lib/utils/options-of-product-list-data.service.js +98 -98
- package/esm5/lib/utils/order-util.service.js +75 -75
- package/esm5/lib/utils/payment-utils.service.js +37 -37
- package/esm5/lib/utils/shipment-transformer.service.js +78 -78
- package/esm5/lib/utils/toast.service.js +61 -61
- package/esm5/lib/utils/utils.service.js +22 -22
- package/esm5/ng-easycommerce.js +33 -33
- package/esm5/public-api.js +146 -146
- package/fesm2015/ng-easycommerce.js +16252 -16245
- package/fesm2015/ng-easycommerce.js.map +1 -1
- package/fesm5/ng-easycommerce.js +19245 -19236
- package/fesm5/ng-easycommerce.js.map +1 -1
- package/lib/api/connection.service.d.ts +28 -28
- package/lib/classes/checkout/step-service.d.ts +28 -28
- package/lib/classes/checkout/step.d.ts +14 -14
- package/lib/classes/checkout-process-state.d.ts +12 -12
- package/lib/classes/component-helper.d.ts +8 -8
- package/lib/classes/filters/AttributesFilter.d.ts +18 -18
- package/lib/classes/filters/CategoryFilter.d.ts +17 -17
- package/lib/classes/filters/DinamycsFilter.d.ts +15 -15
- package/lib/classes/filters/Filter.d.ts +19 -19
- package/lib/classes/filters/PriceRangeFilter.d.ts +18 -18
- package/lib/classes/filters/SortFilter.d.ts +15 -15
- package/lib/classes/user-role-type.d.ts +5 -5
- package/lib/classes/user.d.ts +68 -68
- package/lib/core.consts.d.ts +211 -211
- package/lib/ec-component/account-ec/account-ec.component.d.ts +13 -13
- package/lib/ec-component/account-ec/order-ec/order-ec.component.d.ts +31 -31
- package/lib/ec-component/account-ec/orders-list-ec/orders-list-ec.component.d.ts +82 -82
- package/lib/ec-component/auth-ec/auth-ec.component.d.ts +35 -35
- package/lib/ec-component/auth-ec/confirm-account-ec/confirm-account-ec.component.d.ts +13 -13
- package/lib/ec-component/auth-ec/forgot-password-ec/forgot-password-ec.component.d.ts +16 -16
- package/lib/ec-component/auth-ec/login-form-ec/login-form-ec.component.d.ts +26 -26
- package/lib/ec-component/auth-ec/register-form-ec/register-form-ec.component.d.ts +34 -34
- package/lib/ec-component/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.d.ts +42 -42
- package/lib/ec-component/auth-ec/select-channel-ec/select-channel-ec.component.d.ts +23 -23
- package/lib/ec-component/blocks-ec/block-banner-boxes-ec/block-banner-boxes-ec.component.d.ts +34 -34
- package/lib/ec-component/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.d.ts +27 -27
- package/lib/ec-component/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.d.ts +34 -34
- package/lib/ec-component/blocks-ec/block-html-ec/block-html-ec.component.d.ts +10 -10
- package/lib/ec-component/blocks-ec/block-newsletter-ec/contact-form-news-ec.component.d.ts +40 -40
- package/lib/ec-component/blocks-ec/block-products-ec/block-products-ec.component.d.ts +25 -25
- package/lib/ec-component/blocks-ec/blocks-ec.component.d.ts +24 -24
- package/lib/ec-component/build-your-ec/build-your-ec.component.d.ts +122 -122
- package/lib/ec-component/build-your-ec/product-found-ec/product-found-ec.component.d.ts +41 -41
- package/lib/ec-component/cart-ec/cart-ec.component.d.ts +52 -52
- package/lib/ec-component/checkout-ec/checkout-ec.component.d.ts +42 -42
- package/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.d.ts +92 -92
- package/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.d.ts +20 -20
- package/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.d.ts +51 -51
- package/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.d.ts +34 -34
- package/lib/ec-component/checkout-ec/step-ec/step-ec.component.d.ts +18 -18
- package/lib/ec-component/checkout-ec/success-ec/success-ec.component.d.ts +32 -32
- package/lib/ec-component/checkout-error-ec/checkout-error-ec.component.d.ts +25 -25
- package/lib/ec-component/collection-ec/collection-ec.component.d.ts +67 -67
- package/lib/ec-component/compared-products-ec/compared-products-ec.component.d.ts +70 -70
- package/lib/ec-component/cookies-ec/cookies-ec.component.d.ts +44 -44
- package/lib/ec-component/cookies-ec/modal-config-ec/modal-config-ec.component.d.ts +10 -10
- package/lib/ec-component/cookies-ec/modal-cookies-ec/modal-cookies-ec.component.d.ts +8 -8
- package/lib/ec-component/cookies-ec/sidebar-cookies-ec/sidebar-cookies-ec.component.d.ts +9 -9
- package/lib/ec-component/cookies-ec/toast-cookies-ec/toast-cookies-ec.component.d.ts +9 -9
- package/lib/ec-component/coupon-ec/coupon-ec.component.d.ts +17 -17
- package/lib/ec-component/faqs-content-ec/faqs-content-ec.component.d.ts +15 -15
- package/lib/ec-component/filters-ec/filters-ec.component.d.ts +33 -33
- package/lib/ec-component/filters-top-ec/filters-top-ec.component.d.ts +23 -23
- package/lib/ec-component/footer-ec/footer-ec.component.d.ts +30 -30
- package/lib/ec-component/header-ec/header-ec.component.d.ts +65 -65
- package/lib/ec-component/home-ec/home-ec.component.d.ts +13 -13
- package/lib/ec-component/index.d.ts +80 -80
- package/lib/ec-component/login-ec/login-ec.component.d.ts +26 -26
- package/lib/ec-component/multiple-items-to-cart-ec/multiple-items-to-cart-ec.component.d.ts +28 -28
- package/lib/ec-component/password-reset-ec/password-reset-ec.component.d.ts +27 -27
- package/lib/ec-component/product-detail-ec/product-detail-ec.component.d.ts +58 -58
- package/lib/ec-component/product-ec/product-ec.component.d.ts +46 -46
- package/lib/ec-component/related-products-ec/related-products-ec.component.d.ts +22 -22
- package/lib/ec-component/reviews-ec/reviews-ec.component.d.ts +29 -29
- package/lib/ec-component/reviews-form-ec/reviews-form-ec.component.d.ts +61 -61
- package/lib/ec-component/section-container-ec/section-container-ec.component.d.ts +22 -22
- package/lib/ec-component/seller-dashboard-container-ec/seller-dashboard-container-ec.component.d.ts +37 -37
- package/lib/ec-component/share-block-ec/share-block-ec.component.d.ts +26 -26
- package/lib/ec-component/sidebar-ec/sidebar-ec.component.d.ts +23 -23
- package/lib/ec-component/stores-ec/stores-ec.component.d.ts +54 -54
- package/lib/ec-component/variants-ec/variants-ec.component.d.ts +14 -14
- package/lib/ec-component/widgets-ec/bamboo-ec/bamboo-ec.component.d.ts +60 -60
- package/lib/ec-component/widgets-ec/bancard-catastro-ec/bancard-catastro-ec.component.d.ts +105 -105
- package/lib/ec-component/widgets-ec/bancard-ec/bancard-ec.component.d.ts +46 -46
- package/lib/ec-component/widgets-ec/bancard-redirect-ec/bancard-redirect-ec.component.d.ts +44 -44
- package/lib/ec-component/widgets-ec/cart-load-ec/cart-load-ec.component.d.ts +14 -14
- package/lib/ec-component/widgets-ec/ceca-redirect-ec/ceca-redirect-ec.component.d.ts +38 -38
- package/lib/ec-component/widgets-ec/culqi-ec/culqi-ec.component.d.ts +38 -38
- package/lib/ec-component/widgets-ec/decidir-ec/decidir-ec.component.d.ts +53 -53
- package/lib/ec-component/widgets-ec/loading-full-ec/loading-full-ec.component.d.ts +6 -6
- package/lib/ec-component/widgets-ec/loading-inline-ec/loading-inline-ec.component.d.ts +5 -5
- package/lib/ec-component/widgets-ec/loading-section-ec/loading-section-ec.component.d.ts +5 -5
- package/lib/ec-component/widgets-ec/mercadopago-ec/mp-redirect-ec/mp-redirect-ec.component.d.ts +43 -43
- package/lib/ec-component/widgets-ec/mercadopago-ec/mpcredit-ec/mpcredit-ec.component.d.ts +64 -64
- package/lib/ec-component/widgets-ec/mobbex-ec/mobbex-ec.component.d.ts +46 -46
- package/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.d.ts +41 -41
- package/lib/ec-component/widgets-ec/price-ec/price-ec.component.d.ts +12 -12
- package/lib/ec-component/widgets-ec/rating-ec/rating-ec.component.d.ts +28 -28
- package/lib/ec-component/widgets-ec/re-captcha-ec/re-captcha-ec.component.d.ts +24 -24
- package/lib/ec-component/widgets-ec/redsys-catch-ec/redsys-catch-ec.component.d.ts +14 -14
- package/lib/ec-component/widgets-ec/redsys-pro-ec/redsys-pro-ec.component.d.ts +44 -44
- package/lib/ec-component/widgets-ec/redsys-redirect-ec/redsys-redirect-ec.component.d.ts +38 -38
- package/lib/ec-component/widgets-ec/redsys-redirect-out-ec/redsys-redirect-out-ec.component.d.ts +42 -42
- package/lib/ec-component/widgets-ec/zoom-ec/magnizoom.component.d.ts +66 -66
- package/lib/ec-directive/add-action-redirect.directive.d.ts +26 -26
- package/lib/ec-directive/auth-wholesaler.directive.d.ts +17 -17
- package/lib/ec-directive/index.d.ts +6 -6
- package/lib/ec-directive/product-mini-standard.directive.d.ts +19 -19
- package/lib/ec-directive/product-off.directive.d.ts +22 -22
- package/lib/ec-directive/product-stock.directive.d.ts +15 -15
- package/lib/ec-directive/reload-view.directive.d.ts +8 -8
- package/lib/ec-pipe/ec-currency-symbol.pipe.d.ts +19 -19
- package/lib/ec-pipe/ec-sanitizer-html.pipe.d.ts +7 -7
- package/lib/ec-pipe/ec-sanitizer-url.pipe.d.ts +7 -7
- package/lib/ec-pipe/index.d.ts +4 -4
- package/lib/guards/able-buyer-guard.service.d.ts +8 -8
- package/lib/guards/auth-guard.service.d.ts +8 -8
- package/lib/guards/checkout-ready.service.d.ts +8 -8
- package/lib/guards/loggedin-guard.service.d.ts +8 -8
- package/lib/guards/user-role-guard.service.d.ts +8 -8
- package/lib/interceptors/auth.interceptor.d.ts +9 -9
- package/lib/interceptors/customer.interceptor.d.ts +9 -9
- package/lib/interfaces/Script.d.ts +5 -5
- package/lib/interfaces/analytics/event-key.model.d.ts +1 -1
- package/lib/interfaces/analytics/facebook-pixel/facebook-pixel-model.d.ts +5 -5
- package/lib/interfaces/analytics/gtm-config.d.ts +6 -6
- package/lib/interfaces/analytics/metricool-pixel.d.ts +3 -3
- package/lib/interfaces/block.d.ts +33 -33
- package/lib/interfaces/cart/cart-affordable.d.ts +8 -8
- package/lib/interfaces/cart-item.d.ts +8 -8
- package/lib/interfaces/checkout/checkout-error.d.ts +7 -7
- package/lib/interfaces/checkout-data.d.ts +6 -6
- package/lib/interfaces/choose-options/filter-option.d.ts +16 -16
- package/lib/interfaces/choose-options/options-of-product-list.d.ts +5 -5
- package/lib/interfaces/cookies.d.ts +49 -49
- package/lib/interfaces/core.interfaces.d.ts +4 -4
- package/lib/interfaces/coupon.d.ts +5 -5
- package/lib/interfaces/currencyConfig.d.ts +10 -10
- package/lib/interfaces/deserializable.d.ts +3 -3
- package/lib/interfaces/faqs.d.ts +12 -12
- package/lib/interfaces/filter.d.ts +51 -51
- package/lib/interfaces/filterStep.d.ts +29 -29
- package/lib/interfaces/navbar-items.d.ts +9 -9
- package/lib/interfaces/observable-error.interface.d.ts +5 -5
- package/lib/interfaces/paginate.d.ts +1 -1
- package/lib/interfaces/parameters.d.ts +10 -10
- package/lib/interfaces/paramsInterfaces/paramsProductsWithUniqueVariant.d.ts +6 -6
- package/lib/interfaces/product.d.ts +46 -46
- package/lib/interfaces/selection.d.ts +10 -10
- package/lib/interfaces/step.d.ts +8 -8
- package/lib/interfaces/store.d.ts +17 -17
- package/lib/ng-easycommerce.module.d.ts +5 -5
- package/lib/pipes/order-by.pipe.d.ts +5 -5
- package/lib/services/account/orders.service.d.ts +29 -29
- package/lib/services/analytics.service.d.ts +21 -21
- package/lib/services/auth.service.d.ts +116 -116
- package/lib/services/banner.service.d.ts +26 -26
- package/lib/services/blocks/blocks-repository.service.d.ts +19 -19
- package/lib/services/blocks/blocks.service.d.ts +25 -25
- package/lib/services/captcha.service.d.ts +76 -76
- package/lib/services/cart.service.d.ts +139 -139
- package/lib/services/channel-config.service.d.ts +35 -35
- package/lib/services/checkout/addressing.service.d.ts +239 -239
- package/lib/services/checkout/checkout.service.d.ts +71 -71
- package/lib/services/checkout/error-handler.service.d.ts +19 -19
- package/lib/services/checkout/payment.service.d.ts +32 -32
- package/lib/services/checkout/shipment.service.d.ts +58 -58
- package/lib/services/concatenated-associations.service.d.ts +57 -57
- package/lib/services/cookies.service.d.ts +66 -66
- package/lib/services/currency.service.d.ts +65 -65
- package/lib/services/dataform.service.d.ts +13 -13
- package/lib/services/filters.service.d.ts +48 -48
- package/lib/services/gift-card.service.d.ts +19 -19
- package/lib/services/ip-address.service.d.ts +10 -10
- package/lib/services/options.service.d.ts +61 -61
- package/lib/services/pagination.service.d.ts +30 -30
- package/lib/services/parameters.service.d.ts +18 -18
- package/lib/services/products/product-detail.service.d.ts +115 -115
- package/lib/services/products/products.service.d.ts +101 -101
- package/lib/services/reviews.service.d.ts +71 -71
- package/lib/services/stores.service.d.ts +11 -11
- package/lib/services/windows.service.d.ts +13 -13
- package/lib/services/wishlist.service.d.ts +13 -13
- package/lib/strategies/standard.strategy.d.ts +12 -12
- package/lib/utils/analytics/doppler.service.d.ts +9 -9
- package/lib/utils/analytics/facebook-pixel.service.d.ts +23 -23
- package/lib/utils/analytics/google-analytics.service.d.ts +30 -30
- package/lib/utils/analytics/gtm.service.d.ts +34 -34
- package/lib/utils/analytics/metricool-pixel.service.d.ts +9 -9
- package/lib/utils/options-of-product-list-data.service.d.ts +5 -5
- package/lib/utils/order-util.service.d.ts +12 -12
- package/lib/utils/payment-utils.service.d.ts +5 -5
- package/lib/utils/shipment-transformer.service.d.ts +8 -8
- package/lib/utils/toast.service.d.ts +15 -15
- package/lib/utils/utils.service.d.ts +4 -4
- package/ng-easycommerce.d.ts +33 -33
- package/ng-easycommerce.metadata.json +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +144 -144
|
@@ -1,383 +1,383 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
8
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
9
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
10
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
11
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
12
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
13
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
14
|
-
});
|
|
15
|
-
};
|
|
16
|
-
import { Component } from "@angular/core";
|
|
17
|
-
import { Router } from "@angular/router";
|
|
18
|
-
import { BsModalService } from "ngx-bootstrap/modal";
|
|
19
|
-
import { Constants } from "../../core.consts";
|
|
20
|
-
import { AuthService } from '../../services/auth.service';
|
|
21
|
-
import { ProductsService } from '../../services/products/products.service';
|
|
22
|
-
import { CartService } from '../../services/cart.service';
|
|
23
|
-
import { ComponentHelper } from "../../classes/component-helper";
|
|
24
|
-
import { ToastService } from "../../utils/toast.service";
|
|
25
|
-
import { AddressingService } from '../../services/checkout/addressing.service';
|
|
26
|
-
let CartEcComponent = class CartEcComponent extends ComponentHelper {
|
|
27
|
-
constructor(cartService, authService, consts, productsService, router, modalService, toastrService, addressingService) {
|
|
28
|
-
super();
|
|
29
|
-
this.cartService = cartService;
|
|
30
|
-
this.authService = authService;
|
|
31
|
-
this.consts = consts;
|
|
32
|
-
this.productsService = productsService;
|
|
33
|
-
this.router = router;
|
|
34
|
-
this.modalService = modalService;
|
|
35
|
-
this.toastrService = toastrService;
|
|
36
|
-
this.addressingService = addressingService;
|
|
37
|
-
this.variantsToShow = ['TALLE', 'COLOR'];
|
|
38
|
-
this.isLoggedIn = false;
|
|
39
|
-
this.mediaUrl = '';
|
|
40
|
-
this.promotions = [];
|
|
41
|
-
this.cargando = false;
|
|
42
|
-
this.channel = {};
|
|
43
|
-
this.updateStock = false;
|
|
44
|
-
this.exitUpdate = false;
|
|
45
|
-
this.isDisabled = false;
|
|
46
|
-
this.toDecimal = (amount) => this.consts.toDecimal(amount);
|
|
47
|
-
this.actualizarCantidad = (item, cantidad, stock, id) => {
|
|
48
|
-
if (id) {
|
|
49
|
-
this.isDisabled = true; // Actualiza la propiedad vinculada a `[disabled]`
|
|
50
|
-
if (cantidad > 0 && cantidad <= stock) {
|
|
51
|
-
this.cartService.updateItemQuantity(item, cantidad);
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
this.toastrService.show('out-of-stock-actually');
|
|
55
|
-
}
|
|
56
|
-
setTimeout(() => {
|
|
57
|
-
this.isDisabled = false;
|
|
58
|
-
}, 1000);
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
if (cantidad > 0 && cantidad <= stock) {
|
|
62
|
-
this.cartService.updateItemQuantity(item, cantidad);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
this.toastrService.show('out-of-stock-actually');
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
this.redirectRegister = () => this.router.navigateByUrl(`/auth/login`);
|
|
70
|
-
this.getVariants = product => {
|
|
71
|
-
let item = product.product;
|
|
72
|
-
if (item.variants && item.variants.length && item.variants[0].options && item.variants[0].options.length) {
|
|
73
|
-
let options = item.variants[0].options;
|
|
74
|
-
options = options.filter(option => this.variantsToShow.find(name => option.hasOwnProperty(name)));
|
|
75
|
-
let optionsMap = [];
|
|
76
|
-
options.map(option => {
|
|
77
|
-
Object.keys(option).forEach((entry) => {
|
|
78
|
-
let optionAdded = false; // Variable para evitar múltiples inserciones
|
|
79
|
-
item.options.forEach(option2 => {
|
|
80
|
-
if (option2.code == 'COLOR') {
|
|
81
|
-
option2.values.forEach(color => {
|
|
82
|
-
if (color.code == option[entry] && !optionAdded) {
|
|
83
|
-
optionsMap.push({ name: entry, value: option[entry], image: color.image, mobileImage: color.mobileImage });
|
|
84
|
-
optionAdded = true; // Marcar opción agregada
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
// Si no se añadió la opción de COLOR, manejar otras opciones
|
|
90
|
-
if (!optionAdded) {
|
|
91
|
-
item.options.forEach(option2 => {
|
|
92
|
-
if (option2.code !== 'COLOR') {
|
|
93
|
-
optionsMap.push({
|
|
94
|
-
name: entry,
|
|
95
|
-
value: option[entry]
|
|
96
|
-
});
|
|
97
|
-
optionAdded = true;
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
return optionsMap;
|
|
103
|
-
});
|
|
104
|
-
return optionsMap;
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
return null;
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
this.getMinimumPurchaseAmount = () => {
|
|
111
|
-
return this.channel.type == 'b2b' ? this.channel.wholesalerMinimumPurchaseAmount : this.channel.retailerMinimumPurchaseAmount;
|
|
112
|
-
};
|
|
113
|
-
this.exceedsMinimumAmount = (value) => value >= this.getMinimumPurchaseAmount() ? this.redirectCheckout() : this.toastrService.show('quantity-not-exceeded', { amount: this.getMinimumPurchaseAmount() });
|
|
114
|
-
this.ecOnConstruct();
|
|
115
|
-
this.isLoggedIn = this.authService.isAuthenticated();
|
|
116
|
-
this.mediaUrl = this.consts.mediaUrl();
|
|
117
|
-
}
|
|
118
|
-
ngOnChanges() {
|
|
119
|
-
this.isLoggedIn = this.authService.isAuthenticated();
|
|
120
|
-
}
|
|
121
|
-
updateLoggedIn() {
|
|
122
|
-
this.isLoggedIn = this.authService.isAuthenticated();
|
|
123
|
-
}
|
|
124
|
-
ngOnInit() {
|
|
125
|
-
window.scroll(0, 0);
|
|
126
|
-
this.cartService.promotions.subscribe(promotions => this.promotions = promotions);
|
|
127
|
-
// console.log(this.cartService.getTaxes());
|
|
128
|
-
this.ecOnInit();
|
|
129
|
-
}
|
|
130
|
-
redirectCheckout() {
|
|
131
|
-
if (this.cartService.hasSufficientCreditsForCartTotal()) {
|
|
132
|
-
this.router.navigateByUrl(`/checkout`);
|
|
133
|
-
return true;
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
console.warn("No se puede redirigir al checkout debido a una validación fallida.");
|
|
137
|
-
return false;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
openModal(template) {
|
|
141
|
-
this.modalRef = this.modalService.show(template, { class: 'modal-xl', keyboard: false });
|
|
142
|
-
}
|
|
143
|
-
redirectDetailProduct(product) {
|
|
144
|
-
let variant = product.variants[0];
|
|
145
|
-
let path = '/product/';
|
|
146
|
-
path += variant.code;
|
|
147
|
-
path += variant.options.length ? "?variant=true" : "";
|
|
148
|
-
this.router.navigateByUrl(path);
|
|
149
|
-
}
|
|
150
|
-
formatDate(date) {
|
|
151
|
-
var d = new Date(date), month = '' + (d.getMonth() + 1), day = '' + d.getDate(), year = d.getFullYear();
|
|
152
|
-
if (month.length < 2)
|
|
153
|
-
month = '0' + month;
|
|
154
|
-
if (day.length < 2)
|
|
155
|
-
day = '0' + day;
|
|
156
|
-
return [year, month, day].join('-');
|
|
157
|
-
}
|
|
158
|
-
cargaModal(item) {
|
|
159
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
160
|
-
// Obtiene las sedes del cliente
|
|
161
|
-
const sedes = yield this.cartService.getAddressBook();
|
|
162
|
-
// Creo una serie de variables que voy a necesitar, id para controlar las vueltas que da y cuantas lineas hay y allID para almacenar los ID de los lotes.
|
|
163
|
-
var id = 1;
|
|
164
|
-
var this_ = this;
|
|
165
|
-
var allID = [];
|
|
166
|
-
// Añade los datos al encabezado del Modal
|
|
167
|
-
document.getElementById('encabezadoModal').innerHTML = '<a class="title text-dark text-decoration-none h5 d-block m-0 p-0 m-0 p-0"><p class="nombre mb-0" id="productName">' + item['product']['name'] + '</p><small class="text-secondary ps-2 ms-1" id="productRef">Ref:' + item['variant_id'] + '</small></a>';
|
|
168
|
-
// Borramos todos los datos de los lotes anteriores
|
|
169
|
-
var bodyTable = document.getElementById("lot_body_table");
|
|
170
|
-
bodyTable.innerHTML = '';
|
|
171
|
-
// Recorre todos los articulos y encuentra si tienen lotes o no, si tiene crea las lineas
|
|
172
|
-
this_.cartService.getCart2().forEach(i => {
|
|
173
|
-
if (i['item_id'] == item.item_id && i['lot'] != '') {
|
|
174
|
-
bodyTable.innerHTML = '';
|
|
175
|
-
i['lot'].forEach(lot => {
|
|
176
|
-
var row = bodyTable.insertRow(bodyTable.rows.length);
|
|
177
|
-
var cell1 = row.insertCell(0);
|
|
178
|
-
var cell2 = row.insertCell(1);
|
|
179
|
-
var cell3 = row.insertCell(2);
|
|
180
|
-
var cell4 = row.insertCell(3);
|
|
181
|
-
var cell5 = row.insertCell(4);
|
|
182
|
-
var cell6 = row.insertCell(5);
|
|
183
|
-
var date = new Date(Date.parse(lot['date_request']));
|
|
184
|
-
cell1.innerHTML = '<input id="id' + id + '" style="border: 0;" value="' + lot.id + '" disabled>';
|
|
185
|
-
cell2.innerHTML = '<input type="number" id="quantity' + id + '" value= "' + lot.quantity + '"class="form-control w-50" max="' + lot.quantity + '">';
|
|
186
|
-
cell3.innerHTML = '<input type="date" value="' + this.formatDate(date) + '" id="deliveryDate' + id + '" class="form-control w-75">';
|
|
187
|
-
var opciones = "";
|
|
188
|
-
sedes.forEach(sede => {
|
|
189
|
-
if (sede.id == lot.shipping_address_id) {
|
|
190
|
-
opciones += '<option value="' + sede.id + '" selected>' + sede.city + ' - ' + sede.street + '</option>';
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
opciones += '<option value="' + sede.id + '">' + sede.city + ' - ' + sede.street + '</option>';
|
|
194
|
-
}
|
|
195
|
-
});
|
|
196
|
-
cell4.innerHTML = '<select id="shippingAddress' + id + '" class="form-control w-75">' + opciones + '</select>';
|
|
197
|
-
cell5.innerHTML = '<input type="button" class="btn btn-primary btnSeguir" type="button" data-bs-toggle="collapse" data-bs-target="#collapseExample' + id + '" aria-expanded="false" aria-controls="collapseExample' + id + '" value="Ver"></input>';
|
|
198
|
-
cell6.innerHTML = '<div class="col-1 flex-grow-0 text-right btnBorrar d-none d-md-block d-none d-md-block"><button value="' + lot.id + '" class="btn" id="botonBorrar"><img src="./assets/maquetado/img/ic-borrar.svg" alt=""> </button></div>';
|
|
199
|
-
var row2 = bodyTable.insertRow(bodyTable.rows.length);
|
|
200
|
-
var fila2 = row2.insertCell(0);
|
|
201
|
-
fila2.colSpan = 6;
|
|
202
|
-
fila2.innerHTML = '<div class="collapse" id="collapseExample' + id + '"><input id="notes' + id + '" class="form-control" value="' + lot.notes + '" placeholder="Ingrese un comentario en caso de que sea necesario." type="text"/></div>';
|
|
203
|
-
id = id + 1;
|
|
204
|
-
allID.push(lot['id']);
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
});
|
|
208
|
-
document.getElementById('botonAgregar').onclick = function () {
|
|
209
|
-
// // Se calcula la cantidad y el contador para que no exceda la cantidad de la linea al crear un nuevo lote.
|
|
210
|
-
var cantidadActual = 0;
|
|
211
|
-
for (let index = 1; index < id; index++) {
|
|
212
|
-
if (document.getElementById("quantity" + index)) {
|
|
213
|
-
cantidadActual = cantidadActual + parseInt(document.getElementById("quantity" + index).value);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
// Se añade la linea siempre y cuando la cantidad restante no sea cero.
|
|
217
|
-
if (cantidadActual < item['quantity']) {
|
|
218
|
-
var row = bodyTable.insertRow(bodyTable.rows.length);
|
|
219
|
-
var cell1 = row.insertCell(0);
|
|
220
|
-
var cell2 = row.insertCell(1);
|
|
221
|
-
var cell3 = row.insertCell(2);
|
|
222
|
-
var cell4 = row.insertCell(3);
|
|
223
|
-
var cell5 = row.insertCell(4);
|
|
224
|
-
var cell6 = row.insertCell(5);
|
|
225
|
-
cell1.innerHTML = '<input id="id' + id + '" style="border: 0;" value="Pendt." disabled>';
|
|
226
|
-
cell2.innerHTML = '<input type="number" id="quantity' + id + '" value= "' + (item['quantity'] - cantidadActual) + '"class="form-control w-50" max="' + (item['quantity'] - cantidadActual) + '">';
|
|
227
|
-
cell3.innerHTML = '<input type="date" id="deliveryDate' + id + '" class="form-control w-75">';
|
|
228
|
-
var opciones = "";
|
|
229
|
-
sedes.forEach(sede => { opciones += '<option value="' + sede.id + '">' + sede.city + ' - ' + sede.street + '</option>'; });
|
|
230
|
-
cell4.innerHTML = '<select id="shippingAddress' + id + '" class="form-control w-75">' + opciones + '</select>';
|
|
231
|
-
cell5.innerHTML = '<input type="button" class="btn btn-primary btnSeguir" type="button" data-bs-toggle="collapse" data-bs-target="#collapseExample' + id + '" aria-expanded="false" aria-controls="collapseExample' + id + '" value="Ver"></input>';
|
|
232
|
-
cell6.innerHTML = '<div class="col-1 flex-grow-0 text-right btnBorrar d-none d-md-block d-none d-md-block"><button class="btn" id="botonBorrar"><img src="./assets/maquetado/img/ic-borrar.svg" alt=""> </butt></div>';
|
|
233
|
-
var row2 = bodyTable.insertRow(bodyTable.rows.length);
|
|
234
|
-
var fila2 = row2.insertCell(0);
|
|
235
|
-
fila2.colSpan = 6;
|
|
236
|
-
fila2.innerHTML = '<div class="collapse" id="collapseExample' + id + '"><input id="notes' + id + '" class="form-control" placeholder="Ingrese un comentario en caso de que sea necesario." type="text"/></div>';
|
|
237
|
-
id = id + 1;
|
|
238
|
-
}
|
|
239
|
-
else {
|
|
240
|
-
this_.toastrService.show('lot-max-quantity');
|
|
241
|
-
}
|
|
242
|
-
};
|
|
243
|
-
// Cuando se pulsa el boton para guardar el lote recorre la funcion y el for , recorre linea a linea y lanza el endpoint con una pausa para que no se pierda ninguno y no se quede pillado.
|
|
244
|
-
document.getElementById('botonGuardar').onclick = function () {
|
|
245
|
-
this_.toastrService.show('lot-saving');
|
|
246
|
-
this_.cargando = true;
|
|
247
|
-
var lotID = '';
|
|
248
|
-
var cantidadLotes = 0;
|
|
249
|
-
//Controla que las cantidades de los lotes no sea superior a la del producto en el carrito.
|
|
250
|
-
for (let index = 1; index < id; index++) {
|
|
251
|
-
if (document.getElementById("quantity" + index)) {
|
|
252
|
-
cantidadLotes = cantidadLotes + parseInt(document.getElementById("quantity" + index).value);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
if (item.quantity >= cantidadLotes) {
|
|
256
|
-
// console.log(cantidadLotes);
|
|
257
|
-
var y = 0;
|
|
258
|
-
for (let index = 1; index < id; index++) {
|
|
259
|
-
if (document.getElementById("quantity" + index)) {
|
|
260
|
-
var quantity = parseInt(document.getElementById("quantity" + index).value);
|
|
261
|
-
var deliveryDate = document.getElementById("deliveryDate" + index).value;
|
|
262
|
-
var shippingAddress = $("#shippingAddress" + index).val();
|
|
263
|
-
var notes = $("#notes" + index).val();
|
|
264
|
-
var shippingAddressName = $('#shippingAddress' + index + ' option:selected').text();
|
|
265
|
-
}
|
|
266
|
-
if (document.getElementById("id" + index)) {
|
|
267
|
-
lotID = document.getElementById("id" + index).value;
|
|
268
|
-
var myIndex = allID.indexOf(parseInt(lotID));
|
|
269
|
-
if (myIndex !== -1) {
|
|
270
|
-
allID.splice(myIndex, 1);
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
if (lotID == 'Pendt.') {
|
|
274
|
-
// console.log('nuevo');
|
|
275
|
-
this_.cartService.addToLot(item.product, 0, item.variant_id, 0, item.item_id, quantity, item.product.price, item.quantity, item.discount, item.product.price * quantity, 'new', deliveryDate, notes, parseInt(shippingAddress), shippingAddressName, 'newlot');
|
|
276
|
-
}
|
|
277
|
-
else if (lotID != '') {
|
|
278
|
-
console.log(lotID);
|
|
279
|
-
this_.cartService.addToLot(item.product, 0, item.variant_id, parseInt(lotID), item.item_id, quantity, item.product.price, item.quantity, item.discount, item.product.price * quantity, 'edited', deliveryDate, notes, parseInt(shippingAddress), shippingAddressName, 'editlot');
|
|
280
|
-
}
|
|
281
|
-
y = index;
|
|
282
|
-
}
|
|
283
|
-
allID.forEach(element => {
|
|
284
|
-
// console.log('borrar');
|
|
285
|
-
this_.cartService.addToLot(item.product, 0, item.variant_id, element, 0, 0, 0, 0, 0, 0, 'delete', 0, '', 0, 'delete', 'deletelot');
|
|
286
|
-
});
|
|
287
|
-
setTimeout(function () { this_.cartService.loadCartByToken(this_.cartService.getCartToken()); }, 300 * y);
|
|
288
|
-
setTimeout(function () { this_.toastrService.show('lot-saved'); }, 300 * y);
|
|
289
|
-
setTimeout(function () { this_.cargando = false; }, 300 * y);
|
|
290
|
-
}
|
|
291
|
-
else {
|
|
292
|
-
this_.toastrService.show('La cantidad de los lotes es superior a la cantidad del producto.');
|
|
293
|
-
}
|
|
294
|
-
};
|
|
295
|
-
$(document).on('click', '#botonBorrar', function (event) {
|
|
296
|
-
event.preventDefault();
|
|
297
|
-
// console.log(this);
|
|
298
|
-
$(this).closest('tr').remove();
|
|
299
|
-
});
|
|
300
|
-
});
|
|
301
|
-
}
|
|
302
|
-
closeModal(id) {
|
|
303
|
-
$('#' + id).modal('hide');
|
|
304
|
-
}
|
|
305
|
-
checkStock(item) {
|
|
306
|
-
for (const variant of item.product.variants) {
|
|
307
|
-
if (item.variant_id === variant.code) {
|
|
308
|
-
if (variant.stock === 0) {
|
|
309
|
-
this.updateStock = true;
|
|
310
|
-
return '0';
|
|
311
|
-
}
|
|
312
|
-
else if (item.quantity > variant.stock) {
|
|
313
|
-
this.updateStock = true;
|
|
314
|
-
return variant.stock;
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
return false; // Solo se ejecuta si no se cumple la condición
|
|
319
|
-
}
|
|
320
|
-
updateAllStock() {
|
|
321
|
-
const items = [];
|
|
322
|
-
// Define la suscripción antes de usarla
|
|
323
|
-
this.cartService.cartItems.subscribe(res => {
|
|
324
|
-
res.forEach(item => {
|
|
325
|
-
for (const variant of item.product.variants) {
|
|
326
|
-
if (item.variant_id === variant.code && !this.exitUpdate) {
|
|
327
|
-
if (variant.stock === 0) {
|
|
328
|
-
this.cartService.deleteCartItem(item, false); // Borra el artículo
|
|
329
|
-
}
|
|
330
|
-
else if (item.quantity > variant.stock) {
|
|
331
|
-
items.push({
|
|
332
|
-
productCode: item.product.id,
|
|
333
|
-
quantity: variant.stock,
|
|
334
|
-
variantCode: variant.code,
|
|
335
|
-
});
|
|
336
|
-
}
|
|
337
|
-
else {
|
|
338
|
-
items.push({
|
|
339
|
-
productCode: item.product.id,
|
|
340
|
-
quantity: item.quantity,
|
|
341
|
-
variantCode: variant.code,
|
|
342
|
-
});
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
});
|
|
347
|
-
if (items.length > 0 && !this.exitUpdate) {
|
|
348
|
-
// subscription.unsubscribe(); // Desuscríbete antes de actualizar
|
|
349
|
-
this.cartService.addAllToCart(items); // Actualiza el carrito
|
|
350
|
-
this.updateStock = false;
|
|
351
|
-
this.exitUpdate = true;
|
|
352
|
-
// this.updateAllStock(); // Vuelve a verificar el stock
|
|
353
|
-
}
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
|
-
createDiscountMessage(saleprice, price) {
|
|
357
|
-
if (isNaN(saleprice) || isNaN(price) || saleprice >= price || saleprice <= 0 || price <= 0) {
|
|
358
|
-
return '';
|
|
359
|
-
}
|
|
360
|
-
let discountPercentage = Math.round(((price - saleprice) / price) * 100);
|
|
361
|
-
let discountMessage = `${discountPercentage}% OFF`;
|
|
362
|
-
return discountMessage;
|
|
363
|
-
}
|
|
364
|
-
};
|
|
365
|
-
CartEcComponent.ctorParameters = () => [
|
|
366
|
-
{ type: CartService },
|
|
367
|
-
{ type: AuthService },
|
|
368
|
-
{ type: Constants },
|
|
369
|
-
{ type: ProductsService },
|
|
370
|
-
{ type: Router },
|
|
371
|
-
{ type: BsModalService },
|
|
372
|
-
{ type: ToastService },
|
|
373
|
-
{ type: AddressingService }
|
|
374
|
-
];
|
|
375
|
-
CartEcComponent = __decorate([
|
|
376
|
-
Component({
|
|
377
|
-
selector: 'app-cart-ec',
|
|
378
|
-
template: "",
|
|
379
|
-
styles: [""]
|
|
380
|
-
})
|
|
381
|
-
], CartEcComponent);
|
|
382
|
-
export { CartEcComponent };
|
|
383
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2NhcnQtZWMvY2FydC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBOEIsTUFBTSxlQUFlLENBQUE7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQVUvRSxJQUFhLGVBQWUsR0FBNUIsTUFBYSxlQUFnQixTQUFRLGVBQWU7SUFnQmhELFlBQW1CLFdBQXdCLEVBQVMsV0FBd0IsRUFBWSxNQUFpQixFQUM5RixlQUFnQyxFQUFTLE1BQWMsRUFBUyxZQUE0QixFQUFZLGFBQTJCLEVBQVEsaUJBQW9DO1FBQ3RMLEtBQUssRUFBRSxDQUFDO1FBRk8sZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBUyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFZLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDOUYsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtR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V0FBVztZQUFzQixXQUFXO1lBQW9CLFNBQVM7WUFDN0UsZUFBZTtZQUFpQixNQUFNO1lBQXVCLGNBQWM7WUFBMkIsWUFBWTtZQUEyQixpQkFBaUI7O0FBakJqTCxlQUFlO0lBTDNCLFNBQVMsQ0FBQztRQUNQLFFBQVEsRUFBRSxhQUFhO1FBQ3ZCLFlBQXVDOztLQUUxQyxDQUFDO0dBQ1csZUFBZSxDQXNZM0I7U0F0WVksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tIFwibmd4LWJvb3RzdHJhcC9tb2RhbFwiO1xyXG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbC9icy1tb2RhbC1yZWYuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gXCIuLi8uLi9jb3JlLmNvbnN0c1wiO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IFByb2R1Y3RzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Byb2R1Y3RzL3Byb2R1Y3RzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NhcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudEhlbHBlciB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NvbXBvbmVudC1oZWxwZXJcIjtcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3RvYXN0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgaW50ZXJ2YWwsIE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBBZGRyZXNzaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoZWNrb3V0L2FkZHJlc3Npbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5kZWNsYXJlIHZhciAkOmFueTtcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYXBwLWNhcnQtZWMnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NhcnQtZWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY2FydC1lYy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYXJ0RWNDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRIZWxwZXIgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuXHJcbiAgICBwdWJsaWMgdmFyaWFudHNUb1Nob3c6IHN0cmluZ1tdID0gWydUQUxMRScsICdDT0xPUiddO1xyXG4gICAgcHVibGljIGlzTG9nZ2VkSW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBtZWRpYVVybCA9ICcnO1xyXG4gICAgcHVibGljIG1vZGFsUmVmOiBCc01vZGFsUmVmIHwgbnVsbDtcclxuICAgIHB1YmxpYyBwcm9tb3Rpb25zID0gW107XHJcbiAgICBwdWJsaWMgaXRlbXM6IE9ic2VydmFibGU8YW55PjtcclxuICAgIHByaXZhdGUgY2FyZ2FuZG86IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBjaGFubmVsOiBhbnkgPSB7fTtcclxuICAgIHB1YmxpYyB1cGRhdGVTdG9jazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGV4aXRVcGRhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjYXJ0U2VydmljZTogQ2FydFNlcnZpY2UsIHB1YmxpYyBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsIHByb3RlY3RlZCBjb25zdHM6IENvbnN0YW50cyxcclxuICAgICAgICBwdWJsaWMgcHJvZHVjdHNTZXJ2aWNlOiBQcm9kdWN0c1NlcnZpY2UsIHB1YmxpYyByb3V0ZXI6IFJvdXRlciwgcHVibGljIG1vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsIHByb3RlY3RlZCB0b2FzdHJTZXJ2aWNlOiBUb2FzdFNlcnZpY2UscHVibGljIGFkZHJlc3NpbmdTZXJ2aWNlOiBBZGRyZXNzaW5nU2VydmljZSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5lY09uQ29uc3RydWN0KClcclxuICAgICAgICB0aGlzLmlzTG9nZ2VkSW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCgpO1xyXG4gICAgICAgIHRoaXMubWVkaWFVcmwgPSB0aGlzLmNvbnN0cy5tZWRpYVVybCgpO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICAgICAgdGhpcy5pc0xvZ2dlZEluID0gdGhpcy5hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVMb2dnZWRJbigpIHtcclxuICAgICAgICB0aGlzLmlzTG9nZ2VkSW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHdpbmRvdy5zY3JvbGwoMCwgMCk7XHJcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5wcm9tb3Rpb25zLnN1YnNjcmliZShwcm9tb3Rpb25zID0+IHRoaXMucHJvbW90aW9ucyA9IHByb21vdGlvbnMpO1xyXG4gICAgIC8vICAgIGNvbnNvbGUubG9nKHRoaXMuY2FydFNlcnZpY2UuZ2V0VGF4ZXMoKSk7XHJcbiAgICAgICAgdGhpcy5lY09uSW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRvRGVjaW1hbCA9IChhbW91bnQpID0+IHRoaXMuY29uc3RzLnRvRGVjaW1hbChhbW91bnQpO1xyXG5cclxuICAgIGFjdHVhbGl6YXJDYW50aWRhZCA9IChpdGVtLCBjYW50aWRhZCwgc3RvY2ssIGlkPykgPT4ge1xyXG4gICAgICAgIGlmIChpZCkge1xyXG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSB0cnVlOyAvLyBBY3R1YWxpemEgbGEgcHJvcGllZGFkIHZpbmN1bGFkYSBhIGBbZGlzYWJsZWRdYFxyXG4gICAgICAgICAgICBpZiAoY2FudGlkYWQgPiAwICYmIGNhbnRpZGFkIDw9IHN0b2NrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnVwZGF0ZUl0ZW1RdWFudGl0eShpdGVtLCBjYW50aWRhZCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrLWFjdHVhbGx5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgLy8gRnVuY2nDs24gZGUgZmxlY2hhIHBhcmEgcHJlc2VydmFyIGVsIGNvbnRleHRvXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGNhbnRpZGFkID4gMCAmJiBjYW50aWRhZCA8PSBzdG9jaykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS51cGRhdGVJdGVtUXVhbnRpdHkoaXRlbSwgY2FudGlkYWQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jay1hY3R1YWxseScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFxyXG5cclxuICAgIHJlZGlyZWN0Q2hlY2tvdXQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FydFNlcnZpY2UuaGFzU3VmZmljaWVudENyZWRpdHNGb3JDYXJ0VG90YWwoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvY2hlY2tvdXRgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiTm8gc2UgcHVlZGUgcmVkaXJpZ2lyIGFsIGNoZWNrb3V0IGRlYmlkbyBhIHVuYSB2YWxpZGFjacOzbiBmYWxsaWRhLlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZWRpcmVjdFJlZ2lzdGVyID0gKCkgPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2F1dGgvbG9naW5gKVxyXG5cclxuICAgIG9wZW5Nb2RhbCh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xyXG4gICAgICAgIHRoaXMubW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KHRlbXBsYXRlLCB7IGNsYXNzOiAnbW9kYWwteGwnLCBrZXlib2FyZDogZmFsc2UgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVkaXJlY3REZXRhaWxQcm9kdWN0KHByb2R1Y3QpIHtcclxuICAgICAgICBsZXQgdmFyaWFudCA9IHByb2R1Y3QudmFyaWFudHNbMF1cclxuICAgICAgICBsZXQgcGF0aCA9ICcvcHJvZHVjdC8nXHJcbiAgICAgICAgcGF0aCArPSB2YXJpYW50LmNvZGVcclxuICAgICAgICBwYXRoICs9IHZhcmlhbnQub3B0aW9ucy5sZW5ndGggPyBcIj92YXJpYW50PXRydWVcIiA6IFwiXCJcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHBhdGgpXHJcbiAgICB9XHJcblxyXG4gICAgZm9ybWF0RGF0ZShkYXRlKSB7XHJcbiAgICAgdmFyIGQgPSBuZXcgRGF0ZShkYXRlKSxcclxuICAgICAgICAgbW9udGggPSAnJyArIChkLmdldE1vbnRoKCkgKyAxKSxcclxuICAgICAgICAgZGF5ID0gJycgKyBkLmdldERhdGUoKSxcclxuICAgICAgICAgeWVhciA9IGQuZ2V0RnVsbFllYXIoKTtcclxuXHJcbiAgICAgaWYgKG1vbnRoLmxlbmd0aCA8IDIpXHJcbiAgICAgICAgIG1vbnRoID0gJzAnICsgbW9udGg7XHJcbiAgICAgaWYgKGRheS5sZW5ndGggPCAyKVxyXG4gICAgICAgICBkYXkgPSAnMCcgKyBkYXk7XHJcblxyXG4gICAgIHJldHVybiBbeWVhciwgbW9udGgsIGRheV0uam9pbignLScpO1xyXG4gfVxyXG5cclxuICAgICBhc3luYyBjYXJnYU1vZGFsKGl0ZW0pe1xyXG5cclxuICAgICAvLyBPYnRpZW5lIGxhcyBzZWRlcyBkZWwgY2xpZW50ZVxyXG4gICAgIGNvbnN0IHNlZGVzID0gYXdhaXQgdGhpcy5jYXJ0U2VydmljZS5nZXRBZGRyZXNzQm9vaygpO1xyXG5cclxuICAgICAvLyBDcmVvIHVuYSBzZXJpZSBkZSB2YXJpYWJsZXMgcXVlIHZveSBhIG5lY2VzaXRhciwgaWQgcGFyYSBjb250cm9sYXIgbGFzIHZ1ZWx0YXMgcXVlIGRhIHkgY3VhbnRhcyBsaW5lYXMgaGF5IHkgYWxsSUQgcGFyYSBhbG1hY2VuYXIgbG9zIElEIGRlIGxvcyBsb3Rlcy5cclxuICAgICB2YXIgaWQgPSAxO1xyXG4gICAgIHZhciB0aGlzXz10aGlzO1xyXG4gICAgIHZhciBhbGxJRCA9ICBbXTtcclxuXHJcbiAgICAgLy8gQcOxYWRlIGxvcyBkYXRvcyBhbCBlbmNhYmV6YWRvIGRlbCBNb2RhbFxyXG4gICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbmNhYmV6YWRvTW9kYWwnKS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJ0aXRsZSB0ZXh0LWRhcmsgdGV4dC1kZWNvcmF0aW9uLW5vbmUgaDUgZC1ibG9jayBtLTAgcC0wIG0tMCBwLTBcIj48cCBjbGFzcz1cIm5vbWJyZSBtYi0wXCIgaWQ9XCJwcm9kdWN0TmFtZVwiPicrIGl0ZW1bJ3Byb2R1Y3QnXVsnbmFtZSddKyc8L3A+PHNtYWxsIGNsYXNzPVwidGV4dC1zZWNvbmRhcnkgcHMtMiBtcy0xXCIgaWQ9XCJwcm9kdWN0UmVmXCI+UmVmOicraXRlbVsndmFyaWFudF9pZCddKyc8L3NtYWxsPjwvYT4nO1xyXG5cclxuICAgICAvLyBCb3JyYW1vcyB0b2RvcyBsb3MgZGF0b3MgZGUgbG9zIGxvdGVzIGFudGVyaW9yZXNcclxuICAgICB2YXIgYm9keVRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJsb3RfYm9keV90YWJsZVwiKSBhcyBIVE1MVGFibGVFbGVtZW50O1xyXG4gICAgIGJvZHlUYWJsZS5pbm5lckhUTUw9Jyc7XHJcblxyXG4gICAgIC8vIFJlY29ycmUgdG9kb3MgbG9zIGFydGljdWxvcyB5IGVuY3VlbnRyYSBzaSB0aWVuZW4gbG90ZXMgbyBubywgc2kgdGllbmUgY3JlYSBsYXMgbGluZWFzXHJcbiAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5nZXRDYXJ0MigpLmZvckVhY2goaSA9PiB7XHJcblxyXG4gICAgICAgICAgICBpZiAoaVsnaXRlbV9pZCddID09IGl0ZW0uaXRlbV9pZCAmJiBpWydsb3QnXSAhPSAnJyl7XHJcbiAgICAgICAgICAgICAgICAgYm9keVRhYmxlLmlubmVySFRNTD0nJztcclxuICAgICAgICAgICAgICAgICBpWydsb3QnXS5mb3JFYWNoKGxvdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgcm93ID0gYm9keVRhYmxlLmluc2VydFJvdyhib2R5VGFibGUucm93cy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwxID0gcm93Lmluc2VydENlbGwoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDIgPSByb3cuaW5zZXJ0Q2VsbCgxKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsMyA9IHJvdy5pbnNlcnRDZWxsKDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGw0ID0gcm93Lmluc2VydENlbGwoMyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDUgPSByb3cuaW5zZXJ0Q2VsbCg0KTtcclxuICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsNiA9IHJvdy5pbnNlcnRDZWxsKDUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKGxvdFsnZGF0ZV9yZXF1ZXN0J10pKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNlbGwxLmlubmVySFRNTCA9ICc8aW5wdXQgaWQ9XCJpZCcraWQrJ1wiICBzdHlsZT1cImJvcmRlcjogMDtcIiB2YWx1ZT1cIicrbG90LmlkKydcIiBkaXNhYmxlZD4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2VsbDIuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJxdWFudGl0eScraWQrJ1wiIHZhbHVlPSBcIicrIGxvdC5xdWFudGl0eSArJ1wiY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy01MFwiIG1heD1cIicrIGxvdC5xdWFudGl0eSArJ1wiPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjZWxsMy5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9XCJkYXRlXCIgdmFsdWU9XCInKyB0aGlzLmZvcm1hdERhdGUoZGF0ZSkgKydcIiBpZD1cImRlbGl2ZXJ5RGF0ZScraWQrJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIHctNzVcIj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFyIG9wY2lvbmVzID0gXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgc2VkZXMuZm9yRWFjaChzZWRlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWRlLmlkID09IGxvdC5zaGlwcGluZ19hZGRyZXNzX2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbmVzKz0nPG9wdGlvbiB2YWx1ZT1cIicrc2VkZS5pZCsnXCIgc2VsZWN0ZWQ+Jysgc2VkZS5jaXR5KyAnIC0gJyArIHNlZGUuc3RyZWV0Kyc8L29wdGlvbj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbmVzKz0nPG9wdGlvbiB2YWx1ZT1cIicrc2VkZS5pZCsnXCI+Jysgc2VkZS5jaXR5KyAnIC0gJyArIHNlZGUuc3RyZWV0Kyc8L29wdGlvbj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2VsbDQuaW5uZXJIVE1MID0gJzxzZWxlY3QgIGlkPVwic2hpcHBpbmdBZGRyZXNzJytpZCsnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy03NVwiPicrb3BjaW9uZXMrJzwvc2VsZWN0Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjZWxsNS5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG5TZWd1aXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI2NvbGxhcHNlRXhhbXBsZScraWQrJ1wiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtY29udHJvbHM9XCJjb2xsYXBzZUV4YW1wbGUnK2lkKydcIiB2YWx1ZT1cIlZlclwiPjwvaW5wdXQ+JztcclxuICAgICAgICAgICAgICAgICAgICAgIGNlbGw2LmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiY29sLTEgZmxleC1ncm93LTAgdGV4dC1yaWdodCBidG5Cb3JyYXIgZC1ub25lIGQtbWQtYmxvY2sgZC1ub25lIGQtbWQtYmxvY2tcIj48YnV0dG9uIHZhbHVlPVwiJysgbG90LmlkICsnXCIgY2xhc3M9XCJidG5cIiBpZD1cImJvdG9uQm9ycmFyXCI+PGltZyBzcmM9XCIuL2Fzc2V0cy9tYXF1ZXRhZG8vaW1nL2ljLWJvcnJhci5zdmdcIiBhbHQ9XCJcIj4gPC9idXR0b24+PC9kaXY+JztcclxuICAgICAgICAgICAgICAgICAgICAgIHZhciByb3cyID0gYm9keVRhYmxlLmluc2VydFJvdyhib2R5VGFibGUucm93cy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGEyICA9IHJvdzIuaW5zZXJ0Q2VsbCgwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgZmlsYTIuY29sU3BhbiA9IDY7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmaWxhMi5pbm5lckhUTUw9JzxkaXYgY2xhc3M9XCJjb2xsYXBzZVwiIGlkPVwiY29sbGFwc2VFeGFtcGxlJytpZCsnXCI+PGlucHV0IGlkPVwibm90ZXMnK2lkKydcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHZhbHVlPVwiJytsb3Qubm90ZXMrJ1wiIHBsYWNlaG9sZGVyPVwiSW5ncmVzZSB1biBjb21lbnRhcmlvIGVuIGNhc28gZGUgcXVlIHNlYSBuZWNlc2FyaW8uXCIgdHlwZT1cInRleHRcIi8+PC9kaXY+JztcclxuICAgICAgICAgICAgICAgICAgICAgIGlkID0gaWQrMTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICBhbGxJRC5wdXNoKGxvdFsnaWQnXSk7XHJcbiAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgIH0pO1xyXG5cclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3RvbkFncmVnYXInKS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIC8vIC8vIFNlIGNhbGN1bGEgbGEgY2FudGlkYWQgeSBlbCBjb250YWRvciBwYXJhIHF1ZSBubyBleGNlZGEgbGEgY2FudGlkYWQgZGUgbGEgbGluZWEgYWwgY3JlYXIgdW4gbnVldm8gbG90ZS5cclxuICAgICAgICB2YXIgY2FudGlkYWRBY3R1YWw9MDtcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgaWQ7IGluZGV4KyspIHtcclxuICAgICAgICAgIGlmICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIraW5kZXgpKXtcclxuICAgICAgICAgICAgICAgY2FudGlkYWRBY3R1YWwgPSBjYW50aWRhZEFjdHVhbCArIHBhcnNlSW50KCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIraW5kZXgpKS52YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZSBhw7FhZGUgbGEgbGluZWEgc2llbXByZSB5IGN1YW5kbyBsYSBjYW50aWRhZCByZXN0YW50ZSBubyBzZWEgY2Vyby5cclxuICAgICAgICBpZiAoY2FudGlkYWRBY3R1YWwgPCBpdGVtWydxdWFudGl0eSddKXtcclxuICAgICAgICAgICAgIHZhciByb3cgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICB2YXIgY2VsbDEgPSByb3cuaW5zZXJ0Q2VsbCgwKTtcclxuICAgICAgICAgICAgIHZhciBjZWxsMiA9IHJvdy5pbnNlcnRDZWxsKDEpO1xyXG4gICAgICAgICAgICAgdmFyIGNlbGwzID0gcm93Lmluc2VydENlbGwoMik7XHJcbiAgICAgICAgICAgICB2YXIgY2VsbDQgPSByb3cuaW5zZXJ0Q2VsbCgzKTtcclxuICAgICAgICAgICAgIHZhciBjZWxsNSA9IHJvdy5pbnNlcnRDZWxsKDQpO1xyXG4gICAgICAgICAgICAgdmFyIGNlbGw2ID0gcm93Lmluc2VydENlbGwoNSk7XHJcbiAgICAgICAgICAgICBjZWxsMS5pbm5lckhUTUwgPSAnPGlucHV0IGlkPVwiaWQnK2lkKydcIiAgc3R5bGU9XCJib3JkZXI6IDA7XCIgdmFsdWU9XCJQZW5kdC5cIiBkaXNhYmxlZD4nO1xyXG4gICAgICAgICAgICAgY2VsbDIuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJxdWFudGl0eScraWQrJ1wiIHZhbHVlPSBcIicrIChpdGVtWydxdWFudGl0eSddIC0gIGNhbnRpZGFkQWN0dWFsICkrJ1wiY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy01MFwiIG1heD1cIicrIChpdGVtWydxdWFudGl0eSddIC0gIGNhbnRpZGFkQWN0dWFsICkgKydcIj4nO1xyXG4gICAgICAgICAgICAgY2VsbDMuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiZGF0ZVwiIGlkPVwiZGVsaXZlcnlEYXRlJytpZCsnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy03NVwiPic7XHJcbiAgICAgICAgICAgICB2YXIgb3BjaW9uZXMgPSBcIlwiXHJcbiAgICAgICAgICAgICBzZWRlcy5mb3JFYWNoKHNlZGUgPT4geyBvcGNpb25lcys9JzxvcHRpb24gdmFsdWU9XCInK3NlZGUuaWQrJ1wiPicrIHNlZGUuY2l0eSsgJyAtICcgKyBzZWRlLnN0cmVldCsnPC9vcHRpb24+Jzt9KTtcclxuICAgICAgICAgICAgIGNlbGw0LmlubmVySFRNTCA9ICc8c2VsZWN0ICBpZD1cInNoaXBwaW5nQWRkcmVzcycraWQrJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIHctNzVcIj4nK29wY2lvbmVzKyc8L3NlbGVjdD4nO1xyXG4gICAgICAgICAgICAgY2VsbDUuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuU2VndWlyXCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLWJzLXRhcmdldD1cIiNjb2xsYXBzZUV4YW1wbGUnK2lkKydcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBhcmlhLWNvbnRyb2xzPVwiY29sbGFwc2VFeGFtcGxlJytpZCsnXCIgdmFsdWU9XCJWZXJcIj48L2lucHV0Pic7XHJcbiAgICAgICAgICAgICBjZWxsNi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbC0xIGZsZXgtZ3Jvdy0wIHRleHQtcmlnaHQgYnRuQm9ycmFyIGQtbm9uZSBkLW1kLWJsb2NrIGQtbm9uZSBkLW1kLWJsb2NrXCI+PGJ1dHRvbiBjbGFzcz1cImJ0blwiIGlkPVwiYm90b25Cb3JyYXJcIj48aW1nIHNyYz1cIi4vYXNzZXRzL21hcXVldGFkby9pbWcvaWMtYm9ycmFyLnN2Z1wiIGFsdD1cIlwiPiA8L2J1dHQ+PC9kaXY+JztcclxuICAgICAgICAgICAgIHZhciByb3cyID0gYm9keVRhYmxlLmluc2VydFJvdyhib2R5VGFibGUucm93cy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgdmFyIGZpbGEyICA9IHJvdzIuaW5zZXJ0Q2VsbCgwKVxyXG4gICAgICAgICAgICAgZmlsYTIuY29sU3BhbiA9IDY7XHJcbiAgICAgICAgICAgICBmaWxhMi5pbm5lckhUTUw9JzxkaXYgY2xhc3M9XCJjb2xsYXBzZVwiIGlkPVwiY29sbGFwc2VFeGFtcGxlJytpZCsnXCI+PGlucHV0IGlkPVwibm90ZXMnK2lkKydcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiSW5ncmVzZSB1biBjb21lbnRhcmlvIGVuIGNhc28gZGUgcXVlIHNlYSBuZWNlc2FyaW8uXCIgdHlwZT1cInRleHRcIi8+PC9kaXY+JztcclxuXHJcblxyXG4gICAgICAgICAgICAgaWQgPSBpZCsxO1xyXG4gICAgICAgIH0gZWxzZXtcclxuICAgICAgICAgIHRoaXNfLnRvYXN0clNlcnZpY2Uuc2hvdygnbG90LW1heC1xdWFudGl0eScpO1xyXG4gICAgICAgIH1cclxuICAgICB9XHJcblxyXG4gICAgIC8vIEN1YW5kbyBzZSBwdWxzYSBlbCBib3RvbiBwYXJhIGd1YXJkYXIgZWwgbG90ZSByZWNvcnJlIGxhIGZ1bmNpb24geSBlbCBmb3IgLCByZWNvcnJlIGxpbmVhIGEgbGluZWEgeSBsYW56YSBlbCBlbmRwb2ludCBjb24gdW5hIHBhdXNhIHBhcmEgcXVlIG5vIHNlIHBpZXJkYSBuaW5ndW5vIHkgbm8gc2UgcXVlZGUgcGlsbGFkby5cclxuICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90b25HdWFyZGFyJykub25jbGljayA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdsb3Qtc2F2aW5nJyk7XHJcbiAgICAgICAgICB0aGlzXy5jYXJnYW5kbyA9IHRydWU7XHJcbiAgICAgICAgICB2YXIgbG90SUQgPSAnJztcclxuICAgICAgICAgIHZhciBjYW50aWRhZExvdGVzPTA7XHJcbiAgICAgICAgICAvL0NvbnRyb2xhIHF1ZSBsYXMgY2FudGlkYWRlcyBkZSBsb3MgbG90ZXMgbm8gc2VhIHN1cGVyaW9yIGEgbGEgZGVsIHByb2R1Y3RvIGVuIGVsIGNhcnJpdG8uXHJcbiAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgaWQ7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgaWYgKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVhbnRpdHlcIitpbmRleCkpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbnRpZGFkTG90ZXMgPSBjYW50aWRhZExvdGVzICsgcGFyc2VJbnQoKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVhbnRpdHlcIitpbmRleCkpLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChpdGVtLnF1YW50aXR5ID49IGNhbnRpZGFkTG90ZXMpe1xyXG4gICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhjYW50aWRhZExvdGVzKTtcclxuICAgICAgICAgICAgICAgdmFyIHkgPSAwO1xyXG4gICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBpZDsgaW5kZXgrKykge1xyXG5cclxuICAgICAgICAgICAgICAgaWYoKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVhbnRpdHlcIitpbmRleCkpKXtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcXVhbnRpdHkgPSBwYXJzZUludCgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiK2luZGV4KSkudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBkZWxpdmVyeURhdGUgPSAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkZWxpdmVyeURhdGVcIitpbmRleCkpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzaGlwcGluZ0FkZHJlc3MgPSAkKFwiI3NoaXBwaW5nQWRkcmVzc1wiK2luZGV4KS52YWwoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbm90ZXMgPSAkKFwiI25vdGVzXCIraW5kZXgpLnZhbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzaGlwcGluZ0FkZHJlc3NOYW1lID0gICQoJyNzaGlwcGluZ0FkZHJlc3MnK2luZGV4Kycgb3B0aW9uOnNlbGVjdGVkJykudGV4dCgpO1xyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIGlmICgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpZFwiK2luZGV4KSkpe1xyXG4gICAgICAgICAgICAgICAgICAgIGxvdElEID0gKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaWRcIitpbmRleCkpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBteUluZGV4ID0gYWxsSUQuaW5kZXhPZihwYXJzZUludChsb3RJRCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChteUluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxJRC5zcGxpY2UobXlJbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChsb3RJRCA9PSAnUGVuZHQuJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ251ZXZvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LDAsaXRlbS52YXJpYW50X2lkLDAsaXRlbS5pdGVtX2lkLHF1YW50aXR5LGl0ZW0ucHJvZHVjdC5wcmljZSxpdGVtLnF1YW50aXR5LGl0ZW0uZGlzY291bnQsaXRlbS5wcm9kdWN0LnByaWNlKnF1YW50aXR5LCduZXcnLGRlbGl2ZXJ5RGF0ZSxub3RlcyxwYXJzZUludChzaGlwcGluZ0FkZHJlc3MpLHNoaXBwaW5nQWRkcmVzc05hbWUsICduZXdsb3QnKTtcclxuXHJcbiAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG90SUQgIT0gJycpe1xyXG4gICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsb3RJRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LDAsaXRlbS52YXJpYW50X2lkLHBhcnNlSW50KGxvdElEKSxpdGVtLml0ZW1faWQscXVhbnRpdHksaXRlbS5wcm9kdWN0LnByaWNlLGl0ZW0ucXVhbnRpdHksaXRlbS5kaXNjb3VudCxpdGVtLnByb2R1Y3QucHJpY2UqcXVhbnRpdHksJ2VkaXRlZCcsZGVsaXZlcnlEYXRlLG5vdGVzLHBhcnNlSW50KHNoaXBwaW5nQWRkcmVzcyksc2hpcHBpbmdBZGRyZXNzTmFtZSwgJ2VkaXRsb3QnKTtcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICB5PWluZGV4O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgIGFsbElELmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgIC8vICAgY29uc29sZS5sb2coJ2JvcnJhcicpO1xyXG4gICAgICAgICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5hZGRUb0xvdChpdGVtLnByb2R1Y3QsMCxpdGVtLnZhcmlhbnRfaWQsZWxlbWVudCwwLDAsMCwwLDAsMCwnZGVsZXRlJywwLCcnLDAsJ2RlbGV0ZScsJ2RlbGV0ZWxvdCcpO1xyXG4gICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpc18uY2FydFNlcnZpY2UubG9hZENhcnRCeVRva2VuKHRoaXNfLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpKTt9LCAzMDAgKiB5KTtcclxuXHJcbiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpc18udG9hc3RyU2VydmljZS5zaG93KCdsb3Qtc2F2ZWQnKTt9LCAzMDAgKiB5KTtcclxuXHJcbiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpc18uY2FyZ2FuZG8gPSBmYWxzZX0sIDMwMCAqIHkpO1xyXG5cclxuICAgICAgICAgIH0gZWxzZXtcclxuICAgICAgICAgICAgICAgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdMYSBjYW50aWRhZCBkZSBsb3MgbG90ZXMgZXMgc3VwZXJpb3IgYSBsYSBjYW50aWRhZCBkZWwgcHJvZHVjdG8uJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcjYm90b25Cb3JyYXInLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzKTtcclxuICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCd0cicpLnJlbW92ZSgpO1xyXG5cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICB9XHJcblxyXG4gICAgIGNsb3NlTW9kYWwoaWQpe1xyXG4gICAgICAgICAgJCgnIycraWQpLm1vZGFsKCdoaWRlJyk7XHJcbiAgICAgfVxyXG5cclxuICAgICBjaGVja1N0b2NrKGl0ZW0pIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgaXRlbS5wcm9kdWN0LnZhcmlhbnRzKSB7XHJcbiAgICAgICAgICBpZiAoaXRlbS52YXJpYW50X2lkID09PSB2YXJpYW50LmNvZGUpIHtcclxuICAgICAgICAgICAgaWYodmFyaWFudC5zdG9jayA9PT0gMCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0b2NrPXRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZiAoaXRlbS5xdWFudGl0eSA+IHZhcmlhbnQuc3RvY2spIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RvY2s9dHJ1ZTtcclxuICAgICAgICAgICAgICByZXR1cm4gdmFyaWFudC5zdG9jaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFNvbG8gc2UgZWplY3V0YSBzaSBubyBzZSBjdW1wbGUgbGEgY29uZGljacOzblxyXG4gICAgICB9XHJcblxyXG4gICAgICB1cGRhdGVBbGxTdG9jaygpIHtcclxuICAgICAgICBjb25zdCBpdGVtczogYW55W10gPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBEZWZpbmUgbGEgc3VzY3JpcGNpw7NuIGFudGVzIGRlIHVzYXJsYVxyXG4gICAgICAgIFxyXG4gICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmNhcnRJdGVtcy5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgIHJlcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgaXRlbS5wcm9kdWN0LnZhcmlhbnRzKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGl0ZW0udmFyaWFudF9pZCA9PT0gdmFyaWFudC5jb2RlICYmICF0aGlzLmV4aXRVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LnN0b2NrID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZGVsZXRlQ2FydEl0ZW0oaXRlbSwgZmFsc2UpOyAvLyBCb3JyYSBlbCBhcnTDrWN1bG9cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5xdWFudGl0eSA+IHZhcmlhbnQuc3RvY2spIHtcclxuICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCxcclxuICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogdmFyaWFudC5zdG9jayxcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50Q29kZTogdmFyaWFudC5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRDb2RlOiB2YXJpYW50LmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDAgJiYgIXRoaXMuZXhpdFVwZGF0ZSkge1xyXG4gICAgICAgICAgICAvLyBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsgIC8vIERlc3VzY3LDrWJldGUgYW50ZXMgZGUgYWN0dWFsaXphclxyXG4gICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmFkZEFsbFRvQ2FydChpdGVtcyk7ICAvLyBBY3R1YWxpemEgZWwgY2Fycml0b1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0b2NrPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5leGl0VXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgLy8gdGhpcy51cGRhdGVBbGxTdG9jaygpOyAgLy8gVnVlbHZlIGEgdmVyaWZpY2FyIGVsIHN0b2NrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIFxyXG5cclxuICAgIGdldFZhcmlhbnRzID0gcHJvZHVjdCA9PiB7XHJcblxyXG4gICAgICAgIGxldCBpdGVtID0gcHJvZHVjdC5wcm9kdWN0XHJcblxyXG4gICAgICAgIGlmIChpdGVtLnZhcmlhbnRzICYmIGl0ZW0udmFyaWFudHMubGVuZ3RoICYmIGl0ZW0udmFyaWFudHNbMF0ub3B0aW9ucyAmJiBpdGVtLnZhcmlhbnRzWzBdLm9wdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICBsZXQgb3B0aW9ucyA9IGl0ZW0udmFyaWFudHNbMF0ub3B0aW9uc1xyXG4gICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiB0aGlzLnZhcmlhbnRzVG9TaG93LmZpbmQobmFtZSA9PiBvcHRpb24uaGFzT3duUHJvcGVydHkobmFtZSkpKVxyXG4gICAgICAgICAgICAgbGV0IG9wdGlvbnNNYXAgPSBbXVxyXG4gICAgICAgICAgICAgb3B0aW9ucy5tYXAob3B0aW9uID0+IHtcclxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhvcHRpb24pLmZvckVhY2goKGVudHJ5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBvcHRpb25BZGRlZCA9IGZhbHNlOyAgLy8gVmFyaWFibGUgcGFyYSBldml0YXIgbcO6bHRpcGxlcyBpbnNlcmNpb25lc1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIGl0ZW0ub3B0aW9ucy5mb3JFYWNoKG9wdGlvbjIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbjIuY29kZSA9PSAnQ09MT1InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uMi52YWx1ZXMuZm9yRWFjaChjb2xvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xvci5jb2RlID09IG9wdGlvbltlbnRyeV0gJiYgIW9wdGlvbkFkZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zTWFwLnB1c2goeyBuYW1lOiBlbnRyeSwgdmFsdWU6IG9wdGlvbltlbnRyeV0sIGltYWdlOiBjb2xvci5pbWFnZSwgbW9iaWxlSW1hZ2U6IGNvbG9yLm1vYmlsZUltYWdlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uQWRkZWQgPSB0cnVlOyAvLyBNYXJjYXIgb3BjacOzbiBhZ3JlZ2FkYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgIC8vIFNpIG5vIHNlIGHDsWFkacOzIGxhIG9wY2nDs24gZGUgQ09MT1IsIG1hbmVqYXIgb3RyYXMgb3BjaW9uZXNcclxuICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uQWRkZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ub3B0aW9ucy5mb3JFYWNoKG9wdGlvbjIgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uMi5jb2RlICE9PSAnQ09MT1InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNNYXAucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBlbnRyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBvcHRpb25bZW50cnldXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uQWRkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnNNYXA7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnNNYXA7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICByZXR1cm4gbnVsbFxyXG4gICAgICAgIH1cclxuXHJcbiAgIH1cclxuXHJcbiAgIGNyZWF0ZURpc2NvdW50TWVzc2FnZShzYWxlcHJpY2U6IG51bWJlciwgcHJpY2U6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAoaXNOYU4oc2FsZXByaWNlKSB8fCBpc05hTihwcmljZSkgfHwgc2FsZXByaWNlID49IHByaWNlIHx8IHNhbGVwcmljZSA8PSAwIHx8IHByaWNlIDw9IDApIHtcclxuICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkaXNjb3VudFBlcmNlbnRhZ2UgPSBNYXRoLnJvdW5kKCgocHJpY2UgLSBzYWxlcHJpY2UpIC8gcHJpY2UpICogMTAwKTtcclxuXHJcbiAgICBsZXQgZGlzY291bnRNZXNzYWdlID0gYCR7ZGlzY291bnRQZXJjZW50YWdlfSUgT0ZGYDtcclxuICAgIHJldHVybiBkaXNjb3VudE1lc3NhZ2U7XHJcbn1cclxuZ2V0TWluaW11bVB1cmNoYXNlQW1vdW50ID0gKCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hhbm5lbC50eXBlID09ICdiMmInID8gdGhpcy5jaGFubmVsLndob2xlc2FsZXJNaW5pbXVtUHVyY2hhc2VBbW91bnQgOiB0aGlzLmNoYW5uZWwucmV0YWlsZXJNaW5pbXVtUHVyY2hhc2VBbW91bnRcclxuXHJcbn1cclxuXHJcbmV4Y2VlZHNNaW5pbXVtQW1vdW50ID0gKHZhbHVlOiBudW1iZXIpID0+IHZhbHVlID49IHRoaXMuZ2V0TWluaW11bVB1cmNoYXNlQW1vdW50KCkgPyB0aGlzLnJlZGlyZWN0Q2hlY2tvdXQoKSA6IHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdxdWFudGl0eS1ub3QtZXhjZWVkZWQnLCB7IGFtb3VudDogdGhpcy5nZXRNaW5pbXVtUHVyY2hhc2VBbW91bnQoKSB9KVxyXG5cclxuXHJcbn1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4iXX0=
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
8
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
9
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
10
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
11
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
12
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
13
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
import { Component } from "@angular/core";
|
|
17
|
+
import { Router } from "@angular/router";
|
|
18
|
+
import { BsModalService } from "ngx-bootstrap/modal";
|
|
19
|
+
import { Constants } from "../../core.consts";
|
|
20
|
+
import { AuthService } from '../../services/auth.service';
|
|
21
|
+
import { ProductsService } from '../../services/products/products.service';
|
|
22
|
+
import { CartService } from '../../services/cart.service';
|
|
23
|
+
import { ComponentHelper } from "../../classes/component-helper";
|
|
24
|
+
import { ToastService } from "../../utils/toast.service";
|
|
25
|
+
import { AddressingService } from '../../services/checkout/addressing.service';
|
|
26
|
+
let CartEcComponent = class CartEcComponent extends ComponentHelper {
|
|
27
|
+
constructor(cartService, authService, consts, productsService, router, modalService, toastrService, addressingService) {
|
|
28
|
+
super();
|
|
29
|
+
this.cartService = cartService;
|
|
30
|
+
this.authService = authService;
|
|
31
|
+
this.consts = consts;
|
|
32
|
+
this.productsService = productsService;
|
|
33
|
+
this.router = router;
|
|
34
|
+
this.modalService = modalService;
|
|
35
|
+
this.toastrService = toastrService;
|
|
36
|
+
this.addressingService = addressingService;
|
|
37
|
+
this.variantsToShow = ['TALLE', 'COLOR'];
|
|
38
|
+
this.isLoggedIn = false;
|
|
39
|
+
this.mediaUrl = '';
|
|
40
|
+
this.promotions = [];
|
|
41
|
+
this.cargando = false;
|
|
42
|
+
this.channel = {};
|
|
43
|
+
this.updateStock = false;
|
|
44
|
+
this.exitUpdate = false;
|
|
45
|
+
this.isDisabled = false;
|
|
46
|
+
this.toDecimal = (amount) => this.consts.toDecimal(amount);
|
|
47
|
+
this.actualizarCantidad = (item, cantidad, stock, id) => {
|
|
48
|
+
if (id) {
|
|
49
|
+
this.isDisabled = true; // Actualiza la propiedad vinculada a `[disabled]`
|
|
50
|
+
if (cantidad > 0 && cantidad <= stock) {
|
|
51
|
+
this.cartService.updateItemQuantity(item, cantidad);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
this.toastrService.show('out-of-stock-actually');
|
|
55
|
+
}
|
|
56
|
+
setTimeout(() => {
|
|
57
|
+
this.isDisabled = false;
|
|
58
|
+
}, 1000);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
if (cantidad > 0 && cantidad <= stock) {
|
|
62
|
+
this.cartService.updateItemQuantity(item, cantidad);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
this.toastrService.show('out-of-stock-actually');
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
this.redirectRegister = () => this.router.navigateByUrl(`/auth/login`);
|
|
70
|
+
this.getVariants = product => {
|
|
71
|
+
let item = product.product;
|
|
72
|
+
if (item.variants && item.variants.length && item.variants[0].options && item.variants[0].options.length) {
|
|
73
|
+
let options = item.variants[0].options;
|
|
74
|
+
options = options.filter(option => this.variantsToShow.find(name => option.hasOwnProperty(name)));
|
|
75
|
+
let optionsMap = [];
|
|
76
|
+
options.map(option => {
|
|
77
|
+
Object.keys(option).forEach((entry) => {
|
|
78
|
+
let optionAdded = false; // Variable para evitar múltiples inserciones
|
|
79
|
+
item.options.forEach(option2 => {
|
|
80
|
+
if (option2.code == 'COLOR') {
|
|
81
|
+
option2.values.forEach(color => {
|
|
82
|
+
if (color.code == option[entry] && !optionAdded) {
|
|
83
|
+
optionsMap.push({ name: entry, value: option[entry], image: color.image, mobileImage: color.mobileImage });
|
|
84
|
+
optionAdded = true; // Marcar opción agregada
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
// Si no se añadió la opción de COLOR, manejar otras opciones
|
|
90
|
+
if (!optionAdded) {
|
|
91
|
+
item.options.forEach(option2 => {
|
|
92
|
+
if (option2.code !== 'COLOR') {
|
|
93
|
+
optionsMap.push({
|
|
94
|
+
name: entry,
|
|
95
|
+
value: option[entry]
|
|
96
|
+
});
|
|
97
|
+
optionAdded = true;
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
return optionsMap;
|
|
103
|
+
});
|
|
104
|
+
return optionsMap;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
this.getMinimumPurchaseAmount = () => {
|
|
111
|
+
return this.channel.type == 'b2b' ? this.channel.wholesalerMinimumPurchaseAmount : this.channel.retailerMinimumPurchaseAmount;
|
|
112
|
+
};
|
|
113
|
+
this.exceedsMinimumAmount = (value) => value >= this.getMinimumPurchaseAmount() ? this.redirectCheckout() : this.toastrService.show('quantity-not-exceeded', { amount: this.getMinimumPurchaseAmount() });
|
|
114
|
+
this.ecOnConstruct();
|
|
115
|
+
this.isLoggedIn = this.authService.isAuthenticated();
|
|
116
|
+
this.mediaUrl = this.consts.mediaUrl();
|
|
117
|
+
}
|
|
118
|
+
ngOnChanges() {
|
|
119
|
+
this.isLoggedIn = this.authService.isAuthenticated();
|
|
120
|
+
}
|
|
121
|
+
updateLoggedIn() {
|
|
122
|
+
this.isLoggedIn = this.authService.isAuthenticated();
|
|
123
|
+
}
|
|
124
|
+
ngOnInit() {
|
|
125
|
+
window.scroll(0, 0);
|
|
126
|
+
this.cartService.promotions.subscribe(promotions => this.promotions = promotions);
|
|
127
|
+
// console.log(this.cartService.getTaxes());
|
|
128
|
+
this.ecOnInit();
|
|
129
|
+
}
|
|
130
|
+
redirectCheckout() {
|
|
131
|
+
if (this.cartService.hasSufficientCreditsForCartTotal()) {
|
|
132
|
+
this.router.navigateByUrl(`/checkout`);
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
console.warn("No se puede redirigir al checkout debido a una validación fallida.");
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
openModal(template) {
|
|
141
|
+
this.modalRef = this.modalService.show(template, { class: 'modal-xl', keyboard: false });
|
|
142
|
+
}
|
|
143
|
+
redirectDetailProduct(product) {
|
|
144
|
+
let variant = product.variants[0];
|
|
145
|
+
let path = '/product/';
|
|
146
|
+
path += variant.code;
|
|
147
|
+
path += variant.options.length ? "?variant=true" : "";
|
|
148
|
+
this.router.navigateByUrl(path);
|
|
149
|
+
}
|
|
150
|
+
formatDate(date) {
|
|
151
|
+
var d = new Date(date), month = '' + (d.getMonth() + 1), day = '' + d.getDate(), year = d.getFullYear();
|
|
152
|
+
if (month.length < 2)
|
|
153
|
+
month = '0' + month;
|
|
154
|
+
if (day.length < 2)
|
|
155
|
+
day = '0' + day;
|
|
156
|
+
return [year, month, day].join('-');
|
|
157
|
+
}
|
|
158
|
+
cargaModal(item) {
|
|
159
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
160
|
+
// Obtiene las sedes del cliente
|
|
161
|
+
const sedes = yield this.cartService.getAddressBook();
|
|
162
|
+
// Creo una serie de variables que voy a necesitar, id para controlar las vueltas que da y cuantas lineas hay y allID para almacenar los ID de los lotes.
|
|
163
|
+
var id = 1;
|
|
164
|
+
var this_ = this;
|
|
165
|
+
var allID = [];
|
|
166
|
+
// Añade los datos al encabezado del Modal
|
|
167
|
+
document.getElementById('encabezadoModal').innerHTML = '<a class="title text-dark text-decoration-none h5 d-block m-0 p-0 m-0 p-0"><p class="nombre mb-0" id="productName">' + item['product']['name'] + '</p><small class="text-secondary ps-2 ms-1" id="productRef">Ref:' + item['variant_id'] + '</small></a>';
|
|
168
|
+
// Borramos todos los datos de los lotes anteriores
|
|
169
|
+
var bodyTable = document.getElementById("lot_body_table");
|
|
170
|
+
bodyTable.innerHTML = '';
|
|
171
|
+
// Recorre todos los articulos y encuentra si tienen lotes o no, si tiene crea las lineas
|
|
172
|
+
this_.cartService.getCart2().forEach(i => {
|
|
173
|
+
if (i['item_id'] == item.item_id && i['lot'] != '') {
|
|
174
|
+
bodyTable.innerHTML = '';
|
|
175
|
+
i['lot'].forEach(lot => {
|
|
176
|
+
var row = bodyTable.insertRow(bodyTable.rows.length);
|
|
177
|
+
var cell1 = row.insertCell(0);
|
|
178
|
+
var cell2 = row.insertCell(1);
|
|
179
|
+
var cell3 = row.insertCell(2);
|
|
180
|
+
var cell4 = row.insertCell(3);
|
|
181
|
+
var cell5 = row.insertCell(4);
|
|
182
|
+
var cell6 = row.insertCell(5);
|
|
183
|
+
var date = new Date(Date.parse(lot['date_request']));
|
|
184
|
+
cell1.innerHTML = '<input id="id' + id + '" style="border: 0;" value="' + lot.id + '" disabled>';
|
|
185
|
+
cell2.innerHTML = '<input type="number" id="quantity' + id + '" value= "' + lot.quantity + '"class="form-control w-50" max="' + lot.quantity + '">';
|
|
186
|
+
cell3.innerHTML = '<input type="date" value="' + this.formatDate(date) + '" id="deliveryDate' + id + '" class="form-control w-75">';
|
|
187
|
+
var opciones = "";
|
|
188
|
+
sedes.forEach(sede => {
|
|
189
|
+
if (sede.id == lot.shipping_address_id) {
|
|
190
|
+
opciones += '<option value="' + sede.id + '" selected>' + sede.city + ' - ' + sede.street + '</option>';
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
opciones += '<option value="' + sede.id + '">' + sede.city + ' - ' + sede.street + '</option>';
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
cell4.innerHTML = '<select id="shippingAddress' + id + '" class="form-control w-75">' + opciones + '</select>';
|
|
197
|
+
cell5.innerHTML = '<input type="button" class="btn btn-primary btnSeguir" type="button" data-bs-toggle="collapse" data-bs-target="#collapseExample' + id + '" aria-expanded="false" aria-controls="collapseExample' + id + '" value="Ver"></input>';
|
|
198
|
+
cell6.innerHTML = '<div class="col-1 flex-grow-0 text-right btnBorrar d-none d-md-block d-none d-md-block"><button value="' + lot.id + '" class="btn" id="botonBorrar"><img src="./assets/maquetado/img/ic-borrar.svg" alt=""> </button></div>';
|
|
199
|
+
var row2 = bodyTable.insertRow(bodyTable.rows.length);
|
|
200
|
+
var fila2 = row2.insertCell(0);
|
|
201
|
+
fila2.colSpan = 6;
|
|
202
|
+
fila2.innerHTML = '<div class="collapse" id="collapseExample' + id + '"><input id="notes' + id + '" class="form-control" value="' + lot.notes + '" placeholder="Ingrese un comentario en caso de que sea necesario." type="text"/></div>';
|
|
203
|
+
id = id + 1;
|
|
204
|
+
allID.push(lot['id']);
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
document.getElementById('botonAgregar').onclick = function () {
|
|
209
|
+
// // Se calcula la cantidad y el contador para que no exceda la cantidad de la linea al crear un nuevo lote.
|
|
210
|
+
var cantidadActual = 0;
|
|
211
|
+
for (let index = 1; index < id; index++) {
|
|
212
|
+
if (document.getElementById("quantity" + index)) {
|
|
213
|
+
cantidadActual = cantidadActual + parseInt(document.getElementById("quantity" + index).value);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// Se añade la linea siempre y cuando la cantidad restante no sea cero.
|
|
217
|
+
if (cantidadActual < item['quantity']) {
|
|
218
|
+
var row = bodyTable.insertRow(bodyTable.rows.length);
|
|
219
|
+
var cell1 = row.insertCell(0);
|
|
220
|
+
var cell2 = row.insertCell(1);
|
|
221
|
+
var cell3 = row.insertCell(2);
|
|
222
|
+
var cell4 = row.insertCell(3);
|
|
223
|
+
var cell5 = row.insertCell(4);
|
|
224
|
+
var cell6 = row.insertCell(5);
|
|
225
|
+
cell1.innerHTML = '<input id="id' + id + '" style="border: 0;" value="Pendt." disabled>';
|
|
226
|
+
cell2.innerHTML = '<input type="number" id="quantity' + id + '" value= "' + (item['quantity'] - cantidadActual) + '"class="form-control w-50" max="' + (item['quantity'] - cantidadActual) + '">';
|
|
227
|
+
cell3.innerHTML = '<input type="date" id="deliveryDate' + id + '" class="form-control w-75">';
|
|
228
|
+
var opciones = "";
|
|
229
|
+
sedes.forEach(sede => { opciones += '<option value="' + sede.id + '">' + sede.city + ' - ' + sede.street + '</option>'; });
|
|
230
|
+
cell4.innerHTML = '<select id="shippingAddress' + id + '" class="form-control w-75">' + opciones + '</select>';
|
|
231
|
+
cell5.innerHTML = '<input type="button" class="btn btn-primary btnSeguir" type="button" data-bs-toggle="collapse" data-bs-target="#collapseExample' + id + '" aria-expanded="false" aria-controls="collapseExample' + id + '" value="Ver"></input>';
|
|
232
|
+
cell6.innerHTML = '<div class="col-1 flex-grow-0 text-right btnBorrar d-none d-md-block d-none d-md-block"><button class="btn" id="botonBorrar"><img src="./assets/maquetado/img/ic-borrar.svg" alt=""> </butt></div>';
|
|
233
|
+
var row2 = bodyTable.insertRow(bodyTable.rows.length);
|
|
234
|
+
var fila2 = row2.insertCell(0);
|
|
235
|
+
fila2.colSpan = 6;
|
|
236
|
+
fila2.innerHTML = '<div class="collapse" id="collapseExample' + id + '"><input id="notes' + id + '" class="form-control" placeholder="Ingrese un comentario en caso de que sea necesario." type="text"/></div>';
|
|
237
|
+
id = id + 1;
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
this_.toastrService.show('lot-max-quantity');
|
|
241
|
+
}
|
|
242
|
+
};
|
|
243
|
+
// Cuando se pulsa el boton para guardar el lote recorre la funcion y el for , recorre linea a linea y lanza el endpoint con una pausa para que no se pierda ninguno y no se quede pillado.
|
|
244
|
+
document.getElementById('botonGuardar').onclick = function () {
|
|
245
|
+
this_.toastrService.show('lot-saving');
|
|
246
|
+
this_.cargando = true;
|
|
247
|
+
var lotID = '';
|
|
248
|
+
var cantidadLotes = 0;
|
|
249
|
+
//Controla que las cantidades de los lotes no sea superior a la del producto en el carrito.
|
|
250
|
+
for (let index = 1; index < id; index++) {
|
|
251
|
+
if (document.getElementById("quantity" + index)) {
|
|
252
|
+
cantidadLotes = cantidadLotes + parseInt(document.getElementById("quantity" + index).value);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
if (item.quantity >= cantidadLotes) {
|
|
256
|
+
// console.log(cantidadLotes);
|
|
257
|
+
var y = 0;
|
|
258
|
+
for (let index = 1; index < id; index++) {
|
|
259
|
+
if (document.getElementById("quantity" + index)) {
|
|
260
|
+
var quantity = parseInt(document.getElementById("quantity" + index).value);
|
|
261
|
+
var deliveryDate = document.getElementById("deliveryDate" + index).value;
|
|
262
|
+
var shippingAddress = $("#shippingAddress" + index).val();
|
|
263
|
+
var notes = $("#notes" + index).val();
|
|
264
|
+
var shippingAddressName = $('#shippingAddress' + index + ' option:selected').text();
|
|
265
|
+
}
|
|
266
|
+
if (document.getElementById("id" + index)) {
|
|
267
|
+
lotID = document.getElementById("id" + index).value;
|
|
268
|
+
var myIndex = allID.indexOf(parseInt(lotID));
|
|
269
|
+
if (myIndex !== -1) {
|
|
270
|
+
allID.splice(myIndex, 1);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
if (lotID == 'Pendt.') {
|
|
274
|
+
// console.log('nuevo');
|
|
275
|
+
this_.cartService.addToLot(item.product, 0, item.variant_id, 0, item.item_id, quantity, item.product.price, item.quantity, item.discount, item.product.price * quantity, 'new', deliveryDate, notes, parseInt(shippingAddress), shippingAddressName, 'newlot');
|
|
276
|
+
}
|
|
277
|
+
else if (lotID != '') {
|
|
278
|
+
console.log(lotID);
|
|
279
|
+
this_.cartService.addToLot(item.product, 0, item.variant_id, parseInt(lotID), item.item_id, quantity, item.product.price, item.quantity, item.discount, item.product.price * quantity, 'edited', deliveryDate, notes, parseInt(shippingAddress), shippingAddressName, 'editlot');
|
|
280
|
+
}
|
|
281
|
+
y = index;
|
|
282
|
+
}
|
|
283
|
+
allID.forEach(element => {
|
|
284
|
+
// console.log('borrar');
|
|
285
|
+
this_.cartService.addToLot(item.product, 0, item.variant_id, element, 0, 0, 0, 0, 0, 0, 'delete', 0, '', 0, 'delete', 'deletelot');
|
|
286
|
+
});
|
|
287
|
+
setTimeout(function () { this_.cartService.loadCartByToken(this_.cartService.getCartToken()); }, 300 * y);
|
|
288
|
+
setTimeout(function () { this_.toastrService.show('lot-saved'); }, 300 * y);
|
|
289
|
+
setTimeout(function () { this_.cargando = false; }, 300 * y);
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
this_.toastrService.show('La cantidad de los lotes es superior a la cantidad del producto.');
|
|
293
|
+
}
|
|
294
|
+
};
|
|
295
|
+
$(document).on('click', '#botonBorrar', function (event) {
|
|
296
|
+
event.preventDefault();
|
|
297
|
+
// console.log(this);
|
|
298
|
+
$(this).closest('tr').remove();
|
|
299
|
+
});
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
closeModal(id) {
|
|
303
|
+
$('#' + id).modal('hide');
|
|
304
|
+
}
|
|
305
|
+
checkStock(item) {
|
|
306
|
+
for (const variant of item.product.variants) {
|
|
307
|
+
if (item.variant_id === variant.code) {
|
|
308
|
+
if (variant.stock === 0) {
|
|
309
|
+
this.updateStock = true;
|
|
310
|
+
return '0';
|
|
311
|
+
}
|
|
312
|
+
else if (item.quantity > variant.stock) {
|
|
313
|
+
this.updateStock = true;
|
|
314
|
+
return variant.stock;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
return false; // Solo se ejecuta si no se cumple la condición
|
|
319
|
+
}
|
|
320
|
+
updateAllStock() {
|
|
321
|
+
const items = [];
|
|
322
|
+
// Define la suscripción antes de usarla
|
|
323
|
+
this.cartService.cartItems.subscribe(res => {
|
|
324
|
+
res.forEach(item => {
|
|
325
|
+
for (const variant of item.product.variants) {
|
|
326
|
+
if (item.variant_id === variant.code && !this.exitUpdate) {
|
|
327
|
+
if (variant.stock === 0) {
|
|
328
|
+
this.cartService.deleteCartItem(item, false); // Borra el artículo
|
|
329
|
+
}
|
|
330
|
+
else if (item.quantity > variant.stock) {
|
|
331
|
+
items.push({
|
|
332
|
+
productCode: item.product.id,
|
|
333
|
+
quantity: variant.stock,
|
|
334
|
+
variantCode: variant.code,
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
items.push({
|
|
339
|
+
productCode: item.product.id,
|
|
340
|
+
quantity: item.quantity,
|
|
341
|
+
variantCode: variant.code,
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
});
|
|
347
|
+
if (items.length > 0 && !this.exitUpdate) {
|
|
348
|
+
// subscription.unsubscribe(); // Desuscríbete antes de actualizar
|
|
349
|
+
this.cartService.addAllToCart(items); // Actualiza el carrito
|
|
350
|
+
this.updateStock = false;
|
|
351
|
+
this.exitUpdate = true;
|
|
352
|
+
// this.updateAllStock(); // Vuelve a verificar el stock
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
createDiscountMessage(saleprice, price) {
|
|
357
|
+
if (isNaN(saleprice) || isNaN(price) || saleprice >= price || saleprice <= 0 || price <= 0) {
|
|
358
|
+
return '';
|
|
359
|
+
}
|
|
360
|
+
let discountPercentage = Math.round(((price - saleprice) / price) * 100);
|
|
361
|
+
let discountMessage = `${discountPercentage}% OFF`;
|
|
362
|
+
return discountMessage;
|
|
363
|
+
}
|
|
364
|
+
};
|
|
365
|
+
CartEcComponent.ctorParameters = () => [
|
|
366
|
+
{ type: CartService },
|
|
367
|
+
{ type: AuthService },
|
|
368
|
+
{ type: Constants },
|
|
369
|
+
{ type: ProductsService },
|
|
370
|
+
{ type: Router },
|
|
371
|
+
{ type: BsModalService },
|
|
372
|
+
{ type: ToastService },
|
|
373
|
+
{ type: AddressingService }
|
|
374
|
+
];
|
|
375
|
+
CartEcComponent = __decorate([
|
|
376
|
+
Component({
|
|
377
|
+
selector: 'app-cart-ec',
|
|
378
|
+
template: "",
|
|
379
|
+
styles: [""]
|
|
380
|
+
})
|
|
381
|
+
], CartEcComponent);
|
|
382
|
+
export { CartEcComponent };
|
|
383
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2NhcnQtZWMvY2FydC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBOEIsTUFBTSxlQUFlLENBQUE7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQVUvRSxJQUFhLGVBQWUsR0FBNUIsTUFBYSxlQUFnQixTQUFRLGVBQWU7SUFnQmhELFlBQW1CLFdBQXdCLEVBQVMsV0FBd0IsRUFBWSxNQUFpQixFQUM5RixlQUFnQyxFQUFTLE1BQWMsRUFBUyxZQUE0QixFQUFZLGFBQTJCLEVBQVEsaUJBQW9DO1FBQ3RMLEtBQUssRUFBRSxDQUFDO1FBRk8sZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBUyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFZLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDOUYsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFTLGlCQUFZLEdBQVosWUFBWSxDQUFnQjtRQUFZLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQVEsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQWRuTCxtQkFBYyxHQUFhLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVkLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFFZixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzNCLFlBQU8sR0FBUSxFQUFFLENBQUM7UUFDbEIsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0IsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixlQUFVLEdBQVksS0FBSyxDQUFDO1FBNkJuQyxjQUFTLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXRELHVCQUFrQixHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRyxFQUFFLEVBQUU7WUFDaEQsSUFBSSxFQUFFLEVBQUU7Z0JBQ0osSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxrREFBa0Q7Z0JBQzFFLElBQUksUUFBUSxHQUFHLENBQUMsSUFBSSxRQUFRLElBQUksS0FBSyxFQUFFO29CQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztpQkFDdkQ7cUJBQU07b0JBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztpQkFDcEQ7Z0JBRUQsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDWixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFDNUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ1o7aUJBQU07Z0JBQ0gsSUFBSSxRQUFRLEdBQUcsQ0FBQyxJQUFJLFFBQVEsSUFBSSxLQUFLLEVBQUU7b0JBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2lCQUN2RDtxQkFBTTtvQkFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2lCQUNwRDthQUNKO1FBQ0wsQ0FBQyxDQUFDO1FBYUYscUJBQWdCLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUE7UUF3UGpFLGdCQUFXLEdBQUcsT0FBTyxDQUFDLEVBQUU7WUFFcEIsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQTtZQUUxQixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO2dCQUNyRyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtnQkFDdEMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUNqRyxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUE7Z0JBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7d0JBQ2xDLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFFLDZDQUE2Qzt3QkFFdkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7NEJBQzNCLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLEVBQUU7Z0NBQ3pCLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO29DQUMzQixJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO3dDQUM3QyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQzt3Q0FDM0csV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLHlCQUF5QjtxQ0FDaEQ7Z0NBQ0wsQ0FBQyxDQUFDLENBQUM7NkJBQ047d0JBQ0wsQ0FBQyxDQUFDLENBQUM7d0JBQ0YsNkRBQTZEO3dCQUM3RCxJQUFJLENBQUMsV0FBVyxFQUFFOzRCQUNmLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dDQUUzQixJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO29DQUMxQixVQUFVLENBQUMsSUFBSSxDQUFDO3dDQUNaLElBQUksRUFBRSxLQUFLO3dDQUNYLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDO3FDQUV2QixDQUFDLENBQUM7b0NBQ0gsV0FBVyxHQUFHLElBQUksQ0FBQztpQ0FDdEI7NEJBQ0wsQ0FBQyxDQUFDLENBQUM7eUJBQ047b0JBQ0wsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsT0FBTyxVQUFVLENBQUM7Z0JBQ3RCLENBQUMsQ0FBQyxDQUFDO2dCQUVBLE9BQU8sVUFBVSxDQUFDO2FBRXRCO2lCQUFNO2dCQUNGLE9BQU8sSUFBSSxDQUFBO2FBQ2Y7UUFFTixDQUFDLENBQUE7UUFZSiw2QkFBd0IsR0FBRyxHQUFHLEVBQUU7WUFDNUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUE7UUFFakksQ0FBQyxDQUFBO1FBRUQseUJBQW9CLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQWhYcE0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFFM0MsQ0FBQztJQUdELFdBQVc7UUFDUCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUVELFFBQVE7UUFDSixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBQ3JGLCtDQUErQztRQUM1QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7SUFFbkIsQ0FBQztJQTBCRCxnQkFBZ0I7UUFDWixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0NBQWdDLEVBQUUsRUFBRTtZQUNyRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN2QyxPQUFPLElBQUksQ0FBQztTQUNmO2FBQU07WUFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLG9FQUFvRSxDQUFDLENBQUM7WUFDbkYsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDTCxDQUFDO0lBSUQsU0FBUyxDQUFDLFFBQTBCO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRUQscUJBQXFCLENBQUMsT0FBTztRQUN6QixJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2pDLElBQUksSUFBSSxHQUFHLFdBQVcsQ0FBQTtRQUN0QixJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQTtRQUNwQixJQUFJLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ25DLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBSTtRQUNkLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUNsQixLQUFLLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUMvQixHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFDdEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUUzQixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUNoQixLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUNkLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBRXBCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRVMsVUFBVSxDQUFDLElBQUk7O1lBRXJCLGdDQUFnQztZQUNoQyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFdEQseUpBQXlKO1lBQ3pKLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNYLElBQUksS0FBSyxHQUFDLElBQUksQ0FBQztZQUNmLElBQUksS0FBSyxHQUFJLEVBQUUsQ0FBQztZQUVoQiwwQ0FBMEM7WUFDMUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsR0FBRyxxSEFBcUgsR0FBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUMsa0VBQWtFLEdBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFDLGNBQWMsQ0FBQztZQUUzUyxtREFBbUQ7WUFDbkQsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBcUIsQ0FBQztZQUM5RSxTQUFTLENBQUMsU0FBUyxHQUFDLEVBQUUsQ0FBQztZQUV2Qix5RkFBeUY7WUFDdkYsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBRXBDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBQztvQkFDOUMsU0FBUyxDQUFDLFNBQVMsR0FBQyxFQUFFLENBQUM7b0JBQ3ZCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7d0JBQ2xCLElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDckQsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDOUIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDOUIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDOUIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDOUIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDOUIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDOUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNyRCxLQUFLLENBQUMsU0FBUyxHQUFHLGVBQWUsR0FBQyxFQUFFLEdBQUMsK0JBQStCLEdBQUMsR0FBRyxDQUFDLEVBQUUsR0FBQyxhQUFhLENBQUM7d0JBQzFGLEtBQUssQ0FBQyxTQUFTLEdBQUcsbUNBQW1DLEdBQUMsRUFBRSxHQUFDLFlBQVksR0FBRSxHQUFHLENBQUMsUUFBUSxHQUFFLGtDQUFrQyxHQUFFLEdBQUcsQ0FBQyxRQUFRLEdBQUUsSUFBSSxDQUFDO3dCQUM1SSxLQUFLLENBQUMsU0FBUyxHQUFHLDRCQUE0QixHQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUUsb0JBQW9CLEdBQUMsRUFBRSxHQUFDLDhCQUE4QixDQUFDO3dCQUM5SCxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUE7d0JBQ2pCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7NEJBQ2xCLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsbUJBQW1CLEVBQUU7Z0NBQ25DLFFBQVEsSUFBRSxpQkFBaUIsR0FBQyxJQUFJLENBQUMsRUFBRSxHQUFDLGFBQWEsR0FBRSxJQUFJLENBQUMsSUFBSSxHQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFDLFdBQVcsQ0FBQzs2QkFDbEc7aUNBQ0k7Z0NBQ0EsUUFBUSxJQUFFLGlCQUFpQixHQUFDLElBQUksQ0FBQyxFQUFFLEdBQUMsSUFBSSxHQUFFLElBQUksQ0FBQyxJQUFJLEdBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUMsV0FBVyxDQUFDOzZCQUN6Rjt3QkFBQSxDQUFDLENBQUMsQ0FBQzt3QkFDUCxLQUFLLENBQUMsU0FBUyxHQUFHLDhCQUE4QixHQUFDLEVBQUUsR0FBQyw4QkFBOEIsR0FBQyxRQUFRLEdBQUMsV0FBVyxDQUFDO3dCQUN4RyxLQUFLLENBQUMsU0FBUyxHQUFHLGlJQUFpSSxHQUFDLEVBQUUsR0FBQyx3REFBd0QsR0FBQyxFQUFFLEdBQUMsd0JBQXdCLENBQUM7d0JBQzVPLEtBQUssQ0FBQyxTQUFTLEdBQUcseUdBQXlHLEdBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRSx3R0FBd0csQ0FBQzt3QkFDOU8sSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUN0RCxJQUFJLEtBQUssR0FBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFBO3dCQUMvQixLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQzt3QkFDbEIsS0FBSyxDQUFDLFNBQVMsR0FBQywyQ0FBMkMsR0FBQyxFQUFFLEdBQUMsb0JBQW9CLEdBQUMsRUFBRSxHQUFDLGdDQUFnQyxHQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUMseUZBQXlGLENBQUM7d0JBQzVOLEVBQUUsR0FBRyxFQUFFLEdBQUMsQ0FBQyxDQUFDO3dCQUVWLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQzNCLENBQUMsQ0FBQyxDQUFDO2lCQUNQO1lBQ04sQ0FBQyxDQUFDLENBQUM7WUFFTixRQUFRLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sR0FBRztnQkFFOUMsNkdBQTZHO2dCQUM3RyxJQUFJLGNBQWMsR0FBQyxDQUFDLENBQUM7Z0JBQ3JCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ3ZDLElBQXNCLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxHQUFDLEtBQUssQ0FBQyxFQUFDO3dCQUMzRCxjQUFjLEdBQUcsY0FBYyxHQUFHLFFBQVEsQ0FBb0IsUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEdBQUMsS0FBSyxDQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQ3BIO2lCQUNGO2dCQUVELHVFQUF1RTtnQkFDdkUsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFDO29CQUNqQyxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3JELElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlCLEtBQUssQ0FBQyxTQUFTLEdBQUcsZUFBZSxHQUFDLEVBQUUsR0FBQyxnREFBZ0QsQ0FBQztvQkFDdEYsS0FBSyxDQUFDLFNBQVMsR0FBRyxtQ0FBbUMsR0FBQyxFQUFFLEdBQUMsWUFBWSxHQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFJLGNBQWMsQ0FBRSxHQUFDLGtDQUFrQyxHQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFJLGNBQWMsQ0FBRSxHQUFFLElBQUksQ0FBQztvQkFDN0wsS0FBSyxDQUFDLFNBQVMsR0FBRyxxQ0FBcUMsR0FBQyxFQUFFLEdBQUMsOEJBQThCLENBQUM7b0JBQzFGLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQTtvQkFDakIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLFFBQVEsSUFBRSxpQkFBaUIsR0FBQyxJQUFJLENBQUMsRUFBRSxHQUFDLElBQUksR0FBRSxJQUFJLENBQUMsSUFBSSxHQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFDLFdBQVcsQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDO29CQUNoSCxLQUFLLENBQUMsU0FBUyxHQUFHLDhCQUE4QixHQUFDLEVBQUUsR0FBQyw4QkFBOEIsR0FBQyxRQUFRLEdBQUMsV0FBVyxDQUFDO29CQUN4RyxLQUFLLENBQUMsU0FBUyxHQUFHLGlJQUFpSSxHQUFDLEVBQUUsR0FBQyx3REFBd0QsR0FBQyxFQUFFLEdBQUMsd0JBQXdCLENBQUM7b0JBQzVPLEtBQUssQ0FBQyxTQUFTLEdBQUcsb01BQW9NLENBQUM7b0JBQ3ZOLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdEQsSUFBSSxLQUFLLEdBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtvQkFDL0IsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7b0JBQ2xCLEtBQUssQ0FBQyxTQUFTLEdBQUMsMkNBQTJDLEdBQUMsRUFBRSxHQUFDLG9CQUFvQixHQUFDLEVBQUUsR0FBQyw4R0FBOEcsQ0FBQztvQkFHdE0sRUFBRSxHQUFHLEVBQUUsR0FBQyxDQUFDLENBQUM7aUJBQ2Q7cUJBQUs7b0JBQ0osS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztpQkFDOUM7WUFDSixDQUFDLENBQUE7WUFFRCwyTEFBMkw7WUFDM0wsUUFBUSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLEdBQUc7Z0JBQzdDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUN2QyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDdEIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUNmLElBQUksYUFBYSxHQUFDLENBQUMsQ0FBQztnQkFDcEIsMkZBQTJGO2dCQUMzRixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUNwQyxJQUFzQixRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBQyxLQUFLLENBQUMsRUFBQzt3QkFDM0QsYUFBYSxHQUFHLGFBQWEsR0FBRyxRQUFRLENBQW9CLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxHQUFDLEtBQUssQ0FBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUNsSDtpQkFDRjtnQkFFSixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksYUFBYSxFQUFDO29CQUM5Qiw4QkFBOEI7b0JBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDZCxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFO3dCQUVyQyxJQUFzQixRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBQyxLQUFLLENBQUUsRUFBQzs0QkFDNUQsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFvQixRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBQyxLQUFLLENBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDN0YsSUFBSSxZQUFZLEdBQXNCLFFBQVEsQ0FBQyxjQUFjLENBQUMsY0FBYyxHQUFDLEtBQUssQ0FBRSxDQUFDLEtBQUssQ0FBQzs0QkFDM0YsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixHQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDOzRCQUN4RCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDOzRCQUNwQyxJQUFJLG1CQUFtQixHQUFJLENBQUMsQ0FBQyxrQkFBa0IsR0FBQyxLQUFLLEdBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzt5QkFDckY7d0JBQ0QsSUFBdUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUMsS0FBSyxDQUFFLEVBQUM7NEJBQ3ZELEtBQUssR0FBc0IsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUMsS0FBSyxDQUFFLENBQUMsS0FBSyxDQUFDOzRCQUN0RSxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOzRCQUM3QyxJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRTtnQ0FDaEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7NkJBQzVCO3lCQUVEO3dCQUNKLElBQUksS0FBSyxJQUFJLFFBQVEsRUFBQzs0QkFDbEIsd0JBQXdCOzRCQUN4QixLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsVUFBVSxFQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsT0FBTyxFQUFDLFFBQVEsRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBQyxJQUFJLENBQUMsUUFBUSxFQUFDLElBQUksQ0FBQyxRQUFRLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxZQUFZLEVBQUMsS0FBSyxFQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsQ0FBQzt5QkFFblA7NkJBQU0sSUFBSSxLQUFLLElBQUksRUFBRSxFQUFDOzRCQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUNwQixLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBQyxJQUFJLENBQUMsT0FBTyxFQUFDLFFBQVEsRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBQyxJQUFJLENBQUMsUUFBUSxFQUFDLElBQUksQ0FBQyxRQUFRLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxZQUFZLEVBQUMsS0FBSyxFQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBQyxtQkFBbUIsRUFBRSxTQUFTLENBQUMsQ0FBQzt5QkFDclE7d0JBQ0QsQ0FBQyxHQUFDLEtBQUssQ0FBQztxQkFDWjtvQkFDQSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUNwQiwyQkFBMkI7d0JBQzNCLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLFFBQVEsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxRQUFRLEVBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3RILENBQUMsQ0FBQyxDQUFDO29CQUNOLFVBQVUsQ0FBQyxjQUFXLEtBQUssQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFBLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBRXRHLFVBQVUsQ0FBQyxjQUFXLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUEsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFFeEUsVUFBVSxDQUFDLGNBQVcsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUEsQ0FBQSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUV2RDtxQkFBSztvQkFDRCxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO2lCQUNqRztZQUNELENBQUMsQ0FBQztZQUVGLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFTLEtBQUs7Z0JBQ2pELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIscUJBQXFCO2dCQUNyQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBRXBDLENBQUMsQ0FBQyxDQUFDO1FBRVIsQ0FBQztLQUFBO0lBRUQsVUFBVSxDQUFDLEVBQUU7UUFDUixDQUFDLENBQUMsR0FBRyxHQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsVUFBVSxDQUFDLElBQUk7UUFDWixLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQzNDLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxPQUFPLENBQUMsSUFBSSxFQUFFO2dCQUNwQyxJQUFHLE9BQU8sQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFDO29CQUNuQixJQUFJLENBQUMsV0FBVyxHQUFDLElBQUksQ0FBQztvQkFDdEIsT0FBTyxHQUFHLENBQUM7aUJBQ2Q7cUJBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUU7b0JBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQUMsSUFBSSxDQUFDO29CQUN4QixPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7aUJBQ3RCO2FBQ0Y7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFDLENBQUMsK0NBQStDO0lBQy9ELENBQUM7SUFFRCxjQUFjO1FBQ1osTUFBTSxLQUFLLEdBQVUsRUFBRSxDQUFDO1FBRXhCLHdDQUF3QztRQUV2QyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDMUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDakIsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtvQkFDM0MsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO3dCQUN4RCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFOzRCQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxvQkFBb0I7eUJBQ25FOzZCQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFOzRCQUN4QyxLQUFLLENBQUMsSUFBSSxDQUFDO2dDQUNULFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0NBQzVCLFFBQVEsRUFBRSxPQUFPLENBQUMsS0FBSztnQ0FDdkIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxJQUFJOzZCQUMxQixDQUFDLENBQUM7eUJBQ0o7NkJBQUs7NEJBQ0YsS0FBSyxDQUFDLElBQUksQ0FBQztnQ0FDUCxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dDQUM1QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0NBQ3ZCLFdBQVcsRUFBRSxPQUFPLENBQUMsSUFBSTs2QkFDMUIsQ0FBQyxDQUFDO3lCQUNSO3FCQUNGO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDeEMsbUVBQW1FO2dCQUNuRSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFFLHVCQUF1QjtnQkFDOUQsSUFBSSxDQUFDLFdBQVcsR0FBRSxLQUFLLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUN2Qix5REFBeUQ7YUFDMUQ7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFvREoscUJBQXFCLENBQUMsU0FBaUIsRUFBRSxLQUFhO1FBQ3JELElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLElBQUksS0FBSyxJQUFJLFNBQVMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRTtZQUN2RixPQUFPLEVBQUUsQ0FBQztTQUNkO1FBRUQsSUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFFekUsSUFBSSxlQUFlLEdBQUcsR0FBRyxrQkFBa0IsT0FBTyxDQUFDO1FBQ25ELE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7Q0FTQSxDQUFBOztZQXRYbUMsV0FBVztZQUFzQixXQUFXO1lBQW9CLFNBQVM7WUFDN0UsZUFBZTtZQUFpQixNQUFNO1lBQXVCLGNBQWM7WUFBMkIsWUFBWTtZQUEyQixpQkFBaUI7O0FBakJqTCxlQUFlO0lBTDNCLFNBQVMsQ0FBQztRQUNQLFFBQVEsRUFBRSxhQUFhO1FBQ3ZCLFlBQXVDOztLQUUxQyxDQUFDO0dBQ1csZUFBZSxDQXNZM0I7U0F0WVksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gXCJuZ3gtYm9vdHN0cmFwL21vZGFsXCI7XG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbC9icy1tb2RhbC1yZWYuc2VydmljZSc7XG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tIFwiLi4vLi4vY29yZS5jb25zdHNcIjtcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2R1Y3RzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Byb2R1Y3RzL3Byb2R1Y3RzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50SGVscGVyIH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvY29tcG9uZW50LWhlbHBlclwiO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3RvYXN0LnNlcnZpY2VcIjtcbmltcG9ydCB7IGludGVydmFsLCBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IEFkZHJlc3NpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hlY2tvdXQvYWRkcmVzc2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuZGVjbGFyZSB2YXIgJDphbnk7XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtY2FydC1lYycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NhcnQtZWMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NhcnQtZWMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDYXJ0RWNDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRIZWxwZXIgaW1wbGVtZW50cyBPbkluaXQge1xuXG5cbiAgICBwdWJsaWMgdmFyaWFudHNUb1Nob3c6IHN0cmluZ1tdID0gWydUQUxMRScsICdDT0xPUiddO1xuICAgIHB1YmxpYyBpc0xvZ2dlZEluID0gZmFsc2U7XG4gICAgcHVibGljIG1lZGlhVXJsID0gJyc7XG4gICAgcHVibGljIG1vZGFsUmVmOiBCc01vZGFsUmVmIHwgbnVsbDtcbiAgICBwdWJsaWMgcHJvbW90aW9ucyA9IFtdO1xuICAgIHB1YmxpYyBpdGVtczogT2JzZXJ2YWJsZTxhbnk+O1xuICAgIHByaXZhdGUgY2FyZ2FuZG86IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgY2hhbm5lbDogYW55ID0ge307XG4gICAgcHVibGljIHVwZGF0ZVN0b2NrOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGV4aXRVcGRhdGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgaXNEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLCBwdWJsaWMgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwcm90ZWN0ZWQgY29uc3RzOiBDb25zdGFudHMsXG4gICAgICAgIHB1YmxpYyBwcm9kdWN0c1NlcnZpY2U6IFByb2R1Y3RzU2VydmljZSwgcHVibGljIHJvdXRlcjogUm91dGVyLCBwdWJsaWMgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSwgcHJvdGVjdGVkIHRvYXN0clNlcnZpY2U6IFRvYXN0U2VydmljZSxwdWJsaWMgYWRkcmVzc2luZ1NlcnZpY2U6IEFkZHJlc3NpbmdTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuZWNPbkNvbnN0cnVjdCgpXG4gICAgICAgIHRoaXMuaXNMb2dnZWRJbiA9IHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCk7XG4gICAgICAgIHRoaXMubWVkaWFVcmwgPSB0aGlzLmNvbnN0cy5tZWRpYVVybCgpO1xuXG4gICAgfVxuXG5cbiAgICBuZ09uQ2hhbmdlcygpIHtcbiAgICAgICAgdGhpcy5pc0xvZ2dlZEluID0gdGhpcy5hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcbiAgICB9XG5cbiAgICB1cGRhdGVMb2dnZWRJbigpIHtcbiAgICAgICAgdGhpcy5pc0xvZ2dlZEluID0gdGhpcy5hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgd2luZG93LnNjcm9sbCgwLCAwKTtcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5wcm9tb3Rpb25zLnN1YnNjcmliZShwcm9tb3Rpb25zID0+IHRoaXMucHJvbW90aW9ucyA9IHByb21vdGlvbnMpO1xuICAgICAvLyAgICBjb25zb2xlLmxvZyh0aGlzLmNhcnRTZXJ2aWNlLmdldFRheGVzKCkpO1xuICAgICAgICB0aGlzLmVjT25Jbml0KClcblxuICAgIH1cblxuICAgIHRvRGVjaW1hbCA9IChhbW91bnQpID0+IHRoaXMuY29uc3RzLnRvRGVjaW1hbChhbW91bnQpO1xuXG4gICAgYWN0dWFsaXphckNhbnRpZGFkID0gKGl0ZW0sIGNhbnRpZGFkLCBzdG9jaywgaWQ/KSA9PiB7XG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gdHJ1ZTsgLy8gQWN0dWFsaXphIGxhIHByb3BpZWRhZCB2aW5jdWxhZGEgYSBgW2Rpc2FibGVkXWBcbiAgICAgICAgICAgIGlmIChjYW50aWRhZCA+IDAgJiYgY2FudGlkYWQgPD0gc3RvY2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnVwZGF0ZUl0ZW1RdWFudGl0eShpdGVtLCBjYW50aWRhZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdvdXQtb2Ytc3RvY2stYWN0dWFsbHknKTtcbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyAvLyBGdW5jacOzbiBkZSBmbGVjaGEgcGFyYSBwcmVzZXJ2YXIgZWwgY29udGV4dG9cbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNhbnRpZGFkID4gMCAmJiBjYW50aWRhZCA8PSBzdG9jaykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UudXBkYXRlSXRlbVF1YW50aXR5KGl0ZW0sIGNhbnRpZGFkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jay1hY3R1YWxseScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBcblxuICAgIHJlZGlyZWN0Q2hlY2tvdXQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmNhcnRTZXJ2aWNlLmhhc1N1ZmZpY2llbnRDcmVkaXRzRm9yQ2FydFRvdGFsKCkpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9jaGVja291dGApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJObyBzZSBwdWVkZSByZWRpcmlnaXIgYWwgY2hlY2tvdXQgZGViaWRvIGEgdW5hIHZhbGlkYWNpw7NuIGZhbGxpZGEuXCIpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVkaXJlY3RSZWdpc3RlciA9ICgpID0+IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9hdXRoL2xvZ2luYClcblxuICAgIG9wZW5Nb2RhbCh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgICAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyh0ZW1wbGF0ZSwgeyBjbGFzczogJ21vZGFsLXhsJywga2V5Ym9hcmQ6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIHJlZGlyZWN0RGV0YWlsUHJvZHVjdChwcm9kdWN0KSB7XG4gICAgICAgIGxldCB2YXJpYW50ID0gcHJvZHVjdC52YXJpYW50c1swXVxuICAgICAgICBsZXQgcGF0aCA9ICcvcHJvZHVjdC8nXG4gICAgICAgIHBhdGggKz0gdmFyaWFudC5jb2RlXG4gICAgICAgIHBhdGggKz0gdmFyaWFudC5vcHRpb25zLmxlbmd0aCA/IFwiP3ZhcmlhbnQ9dHJ1ZVwiIDogXCJcIlxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHBhdGgpXG4gICAgfVxuXG4gICAgZm9ybWF0RGF0ZShkYXRlKSB7XG4gICAgIHZhciBkID0gbmV3IERhdGUoZGF0ZSksXG4gICAgICAgICBtb250aCA9ICcnICsgKGQuZ2V0TW9udGgoKSArIDEpLFxuICAgICAgICAgZGF5ID0gJycgKyBkLmdldERhdGUoKSxcbiAgICAgICAgIHllYXIgPSBkLmdldEZ1bGxZZWFyKCk7XG5cbiAgICAgaWYgKG1vbnRoLmxlbmd0aCA8IDIpXG4gICAgICAgICBtb250aCA9ICcwJyArIG1vbnRoO1xuICAgICBpZiAoZGF5Lmxlbmd0aCA8IDIpXG4gICAgICAgICBkYXkgPSAnMCcgKyBkYXk7XG5cbiAgICAgcmV0dXJuIFt5ZWFyLCBtb250aCwgZGF5XS5qb2luKCctJyk7XG4gfVxuXG4gICAgIGFzeW5jIGNhcmdhTW9kYWwoaXRlbSl7XG5cbiAgICAgLy8gT2J0aWVuZSBsYXMgc2VkZXMgZGVsIGNsaWVudGVcbiAgICAgY29uc3Qgc2VkZXMgPSBhd2FpdCB0aGlzLmNhcnRTZXJ2aWNlLmdldEFkZHJlc3NCb29rKCk7XG5cbiAgICAgLy8gQ3JlbyB1bmEgc2VyaWUgZGUgdmFyaWFibGVzIHF1ZSB2b3kgYSBuZWNlc2l0YXIsIGlkIHBhcmEgY29udHJvbGFyIGxhcyB2dWVsdGFzIHF1ZSBkYSB5IGN1YW50YXMgbGluZWFzIGhheSB5IGFsbElEIHBhcmEgYWxtYWNlbmFyIGxvcyBJRCBkZSBsb3MgbG90ZXMuXG4gICAgIHZhciBpZCA9IDE7XG4gICAgIHZhciB0aGlzXz10aGlzO1xuICAgICB2YXIgYWxsSUQgPSAgW107XG5cbiAgICAgLy8gQcOxYWRlIGxvcyBkYXRvcyBhbCBlbmNhYmV6YWRvIGRlbCBNb2RhbFxuICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW5jYWJlemFkb01vZGFsJykuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwidGl0bGUgdGV4dC1kYXJrIHRleHQtZGVjb3JhdGlvbi1ub25lIGg1IGQtYmxvY2sgbS0wIHAtMCBtLTAgcC0wXCI+PHAgY2xhc3M9XCJub21icmUgbWItMFwiIGlkPVwicHJvZHVjdE5hbWVcIj4nKyBpdGVtWydwcm9kdWN0J11bJ25hbWUnXSsnPC9wPjxzbWFsbCBjbGFzcz1cInRleHQtc2Vjb25kYXJ5IHBzLTIgbXMtMVwiIGlkPVwicHJvZHVjdFJlZlwiPlJlZjonK2l0ZW1bJ3ZhcmlhbnRfaWQnXSsnPC9zbWFsbD48L2E+JztcblxuICAgICAvLyBCb3JyYW1vcyB0b2RvcyBsb3MgZGF0b3MgZGUgbG9zIGxvdGVzIGFudGVyaW9yZXNcbiAgICAgdmFyIGJvZHlUYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibG90X2JvZHlfdGFibGVcIikgYXMgSFRNTFRhYmxlRWxlbWVudDtcbiAgICAgYm9keVRhYmxlLmlubmVySFRNTD0nJztcblxuICAgICAvLyBSZWNvcnJlIHRvZG9zIGxvcyBhcnRpY3Vsb3MgeSBlbmN1ZW50cmEgc2kgdGllbmVuIGxvdGVzIG8gbm8sIHNpIHRpZW5lIGNyZWEgbGFzIGxpbmVhc1xuICAgICAgIHRoaXNfLmNhcnRTZXJ2aWNlLmdldENhcnQyKCkuZm9yRWFjaChpID0+IHtcblxuICAgICAgICAgICAgaWYgKGlbJ2l0ZW1faWQnXSA9PSBpdGVtLml0ZW1faWQgJiYgaVsnbG90J10gIT0gJycpe1xuICAgICAgICAgICAgICAgICBib2R5VGFibGUuaW5uZXJIVE1MPScnO1xuICAgICAgICAgICAgICAgICBpWydsb3QnXS5mb3JFYWNoKGxvdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHJvdyA9IGJvZHlUYWJsZS5pbnNlcnRSb3coYm9keVRhYmxlLnJvd3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDEgPSByb3cuaW5zZXJ0Q2VsbCgwKTtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDIgPSByb3cuaW5zZXJ0Q2VsbCgxKTtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDMgPSByb3cuaW5zZXJ0Q2VsbCgyKTtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDQgPSByb3cuaW5zZXJ0Q2VsbCgzKTtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDUgPSByb3cuaW5zZXJ0Q2VsbCg0KTtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDYgPSByb3cuaW5zZXJ0Q2VsbCg1KTtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKERhdGUucGFyc2UobG90WydkYXRlX3JlcXVlc3QnXSkpO1xuICAgICAgICAgICAgICAgICAgICAgIGNlbGwxLmlubmVySFRNTCA9ICc8aW5wdXQgaWQ9XCJpZCcraWQrJ1wiICBzdHlsZT1cImJvcmRlcjogMDtcIiB2YWx1ZT1cIicrbG90LmlkKydcIiBkaXNhYmxlZD4nO1xuICAgICAgICAgICAgICAgICAgICAgIGNlbGwyLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwicXVhbnRpdHknK2lkKydcIiB2YWx1ZT0gXCInKyBsb3QucXVhbnRpdHkgKydcImNsYXNzPVwiZm9ybS1jb250cm9sIHctNTBcIiBtYXg9XCInKyBsb3QucXVhbnRpdHkgKydcIj4nO1xuICAgICAgICAgICAgICAgICAgICAgIGNlbGwzLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cImRhdGVcIiB2YWx1ZT1cIicrIHRoaXMuZm9ybWF0RGF0ZShkYXRlKSArJ1wiIGlkPVwiZGVsaXZlcnlEYXRlJytpZCsnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy03NVwiPic7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIG9wY2lvbmVzID0gXCJcIlxuICAgICAgICAgICAgICAgICAgICAgIHNlZGVzLmZvckVhY2goc2VkZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZGUuaWQgPT0gbG90LnNoaXBwaW5nX2FkZHJlc3NfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbmVzKz0nPG9wdGlvbiB2YWx1ZT1cIicrc2VkZS5pZCsnXCIgc2VsZWN0ZWQ+Jysgc2VkZS5jaXR5KyAnIC0gJyArIHNlZGUuc3RyZWV0Kyc8L29wdGlvbj4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbmVzKz0nPG9wdGlvbiB2YWx1ZT1cIicrc2VkZS5pZCsnXCI+Jysgc2VkZS5jaXR5KyAnIC0gJyArIHNlZGUuc3RyZWV0Kyc8L29wdGlvbj4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgIH19KTtcbiAgICAgICAgICAgICAgICAgICAgICBjZWxsNC5pbm5lckhUTUwgPSAnPHNlbGVjdCAgaWQ9XCJzaGlwcGluZ0FkZHJlc3MnK2lkKydcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JytvcGNpb25lcysnPC9zZWxlY3Q+JztcbiAgICAgICAgICAgICAgICAgICAgICBjZWxsNS5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG5TZWd1aXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI2NvbGxhcHNlRXhhbXBsZScraWQrJ1wiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtY29udHJvbHM9XCJjb2xsYXBzZUV4YW1wbGUnK2lkKydcIiB2YWx1ZT1cIlZlclwiPjwvaW5wdXQ+JztcbiAgICAgICAgICAgICAgICAgICAgICBjZWxsNi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbC0xIGZsZXgtZ3Jvdy0wIHRleHQtcmlnaHQgYnRuQm9ycmFyIGQtbm9uZSBkLW1kLWJsb2NrIGQtbm9uZSBkLW1kLWJsb2NrXCI+PGJ1dHRvbiB2YWx1ZT1cIicrIGxvdC5pZCArJ1wiIGNsYXNzPVwiYnRuXCIgaWQ9XCJib3RvbkJvcnJhclwiPjxpbWcgc3JjPVwiLi9hc3NldHMvbWFxdWV0YWRvL2ltZy9pYy1ib3JyYXIuc3ZnXCIgYWx0PVwiXCI+IDwvYnV0dG9uPjwvZGl2Pic7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHJvdzIgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGEyICA9IHJvdzIuaW5zZXJ0Q2VsbCgwKVxuICAgICAgICAgICAgICAgICAgICAgIGZpbGEyLmNvbFNwYW4gPSA2O1xuICAgICAgICAgICAgICAgICAgICAgIGZpbGEyLmlubmVySFRNTD0nPGRpdiBjbGFzcz1cImNvbGxhcHNlXCIgaWQ9XCJjb2xsYXBzZUV4YW1wbGUnK2lkKydcIj48aW5wdXQgaWQ9XCJub3RlcycraWQrJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdmFsdWU9XCInK2xvdC5ub3RlcysnXCIgcGxhY2Vob2xkZXI9XCJJbmdyZXNlIHVuIGNvbWVudGFyaW8gZW4gY2FzbyBkZSBxdWUgc2VhIG5lY2VzYXJpby5cIiB0eXBlPVwidGV4dFwiLz48L2Rpdj4nO1xuICAgICAgICAgICAgICAgICAgICAgIGlkID0gaWQrMTtcblxuICAgICAgICAgICAgICAgICAgICAgIGFsbElELnB1c2gobG90WydpZCddKTtcbiAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgfSk7XG5cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90b25BZ3JlZ2FyJykub25jbGljayA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIC8vIC8vIFNlIGNhbGN1bGEgbGEgY2FudGlkYWQgeSBlbCBjb250YWRvciBwYXJhIHF1ZSBubyBleGNlZGEgbGEgY2FudGlkYWQgZGUgbGEgbGluZWEgYWwgY3JlYXIgdW4gbnVldm8gbG90ZS5cbiAgICAgICAgdmFyIGNhbnRpZGFkQWN0dWFsPTA7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBpZDsgaW5kZXgrKykge1xuICAgICAgICAgIGlmICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIraW5kZXgpKXtcbiAgICAgICAgICAgICAgIGNhbnRpZGFkQWN0dWFsID0gY2FudGlkYWRBY3R1YWwgKyBwYXJzZUludCgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiK2luZGV4KSkudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNlIGHDsWFkZSBsYSBsaW5lYSBzaWVtcHJlIHkgY3VhbmRvIGxhIGNhbnRpZGFkIHJlc3RhbnRlIG5vIHNlYSBjZXJvLlxuICAgICAgICBpZiAoY2FudGlkYWRBY3R1YWwgPCBpdGVtWydxdWFudGl0eSddKXtcbiAgICAgICAgICAgICB2YXIgcm93ID0gYm9keVRhYmxlLmluc2VydFJvdyhib2R5VGFibGUucm93cy5sZW5ndGgpO1xuICAgICAgICAgICAgIHZhciBjZWxsMSA9IHJvdy5pbnNlcnRDZWxsKDApO1xuICAgICAgICAgICAgIHZhciBjZWxsMiA9IHJvdy5pbnNlcnRDZWxsKDEpO1xuICAgICAgICAgICAgIHZhciBjZWxsMyA9IHJvdy5pbnNlcnRDZWxsKDIpO1xuICAgICAgICAgICAgIHZhciBjZWxsNCA9IHJvdy5pbnNlcnRDZWxsKDMpO1xuICAgICAgICAgICAgIHZhciBjZWxsNSA9IHJvdy5pbnNlcnRDZWxsKDQpO1xuICAgICAgICAgICAgIHZhciBjZWxsNiA9IHJvdy5pbnNlcnRDZWxsKDUpO1xuICAgICAgICAgICAgIGNlbGwxLmlubmVySFRNTCA9ICc8aW5wdXQgaWQ9XCJpZCcraWQrJ1wiICBzdHlsZT1cImJvcmRlcjogMDtcIiB2YWx1ZT1cIlBlbmR0LlwiIGRpc2FibGVkPic7XG4gICAgICAgICAgICAgY2VsbDIuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJxdWFudGl0eScraWQrJ1wiIHZhbHVlPSBcIicrIChpdGVtWydxdWFudGl0eSddIC0gIGNhbnRpZGFkQWN0dWFsICkrJ1wiY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy01MFwiIG1heD1cIicrIChpdGVtWydxdWFudGl0eSddIC0gIGNhbnRpZGFkQWN0dWFsICkgKydcIj4nO1xuICAgICAgICAgICAgIGNlbGwzLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cImRhdGVcIiBpZD1cImRlbGl2ZXJ5RGF0ZScraWQrJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIHctNzVcIj4nO1xuICAgICAgICAgICAgIHZhciBvcGNpb25lcyA9IFwiXCJcbiAgICAgICAgICAgICBzZWRlcy5mb3JFYWNoKHNlZGUgPT4geyBvcGNpb25lcys9JzxvcHRpb24gdmFsdWU9XCInK3NlZGUuaWQrJ1wiPicrIHNlZGUuY2l0eSsgJyAtICcgKyBzZWRlLnN0cmVldCsnPC9vcHRpb24+Jzt9KTtcbiAgICAgICAgICAgICBjZWxsNC5pbm5lckhUTUwgPSAnPHNlbGVjdCAgaWQ9XCJzaGlwcGluZ0FkZHJlc3MnK2lkKydcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JytvcGNpb25lcysnPC9zZWxlY3Q+JztcbiAgICAgICAgICAgICBjZWxsNS5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG5TZWd1aXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI2NvbGxhcHNlRXhhbXBsZScraWQrJ1wiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtY29udHJvbHM9XCJjb2xsYXBzZUV4YW1wbGUnK2lkKydcIiB2YWx1ZT1cIlZlclwiPjwvaW5wdXQ+JztcbiAgICAgICAgICAgICBjZWxsNi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbC0xIGZsZXgtZ3Jvdy0wIHRleHQtcmlnaHQgYnRuQm9ycmFyIGQtbm9uZSBkLW1kLWJsb2NrIGQtbm9uZSBkLW1kLWJsb2NrXCI+PGJ1dHRvbiBjbGFzcz1cImJ0blwiIGlkPVwiYm90b25Cb3JyYXJcIj48aW1nIHNyYz1cIi4vYXNzZXRzL21hcXVldGFkby9pbWcvaWMtYm9ycmFyLnN2Z1wiIGFsdD1cIlwiPiA8L2J1dHQ+PC9kaXY+JztcbiAgICAgICAgICAgICB2YXIgcm93MiA9IGJvZHlUYWJsZS5pbnNlcnRSb3coYm9keVRhYmxlLnJvd3MubGVuZ3RoKTtcbiAgICAgICAgICAgICB2YXIgZmlsYTIgID0gcm93Mi5pbnNlcnRDZWxsKDApXG4gICAgICAgICAgICAgZmlsYTIuY29sU3BhbiA9IDY7XG4gICAgICAgICAgICAgZmlsYTIuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPVwiY29sbGFwc2VcIiBpZD1cImNvbGxhcHNlRXhhbXBsZScraWQrJ1wiPjxpbnB1dCBpZD1cIm5vdGVzJytpZCsnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIkluZ3Jlc2UgdW4gY29tZW50YXJpbyBlbiBjYXNvIGRlIHF1ZSBzZWEgbmVjZXNhcmlvLlwiIHR5cGU9XCJ0ZXh0XCIvPjwvZGl2Pic7XG5cblxuICAgICAgICAgICAgIGlkID0gaWQrMTtcbiAgICAgICAgfSBlbHNle1xuICAgICAgICAgIHRoaXNfLnRvYXN0clNlcnZpY2Uuc2hvdygnbG90LW1heC1xdWFudGl0eScpO1xuICAgICAgICB9XG4gICAgIH1cblxuICAgICAvLyBDdWFuZG8gc2UgcHVsc2EgZWwgYm90b24gcGFyYSBndWFyZGFyIGVsIGxvdGUgcmVjb3JyZSBsYSBmdW5jaW9uIHkgZWwgZm9yICwgcmVjb3JyZSBsaW5lYSBhIGxpbmVhIHkgbGFuemEgZWwgZW5kcG9pbnQgY29uIHVuYSBwYXVzYSBwYXJhIHF1ZSBubyBzZSBwaWVyZGEgbmluZ3VubyB5IG5vIHNlIHF1ZWRlIHBpbGxhZG8uXG4gICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3Rvbkd1YXJkYXInKS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdsb3Qtc2F2aW5nJyk7XG4gICAgICAgICAgdGhpc18uY2FyZ2FuZG8gPSB0cnVlO1xuICAgICAgICAgIHZhciBsb3RJRCA9ICcnO1xuICAgICAgICAgIHZhciBjYW50aWRhZExvdGVzPTA7XG4gICAgICAgICAgLy9Db250cm9sYSBxdWUgbGFzIGNhbnRpZGFkZXMgZGUgbG9zIGxvdGVzIG5vIHNlYSBzdXBlcmlvciBhIGxhIGRlbCBwcm9kdWN0byBlbiBlbCBjYXJyaXRvLlxuICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBpZDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgaWYgKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVhbnRpdHlcIitpbmRleCkpe1xuICAgICAgICAgICAgICAgICAgICBjYW50aWRhZExvdGVzID0gY2FudGlkYWRMb3RlcyArIHBhcnNlSW50KCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIraW5kZXgpKS52YWx1ZSk7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGl0ZW0ucXVhbnRpdHkgPj0gY2FudGlkYWRMb3Rlcyl7XG4gICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhjYW50aWRhZExvdGVzKTtcbiAgICAgICAgICAgICAgIHZhciB5ID0gMDtcbiAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGlkOyBpbmRleCsrKSB7XG5cbiAgICAgICAgICAgICAgIGlmKCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIraW5kZXgpKSl7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxdWFudGl0eSA9IHBhcnNlSW50KCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIraW5kZXgpKS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkZWxpdmVyeURhdGUgPSAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkZWxpdmVyeURhdGVcIitpbmRleCkpLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2hpcHBpbmdBZGRyZXNzID0gJChcIiNzaGlwcGluZ0FkZHJlc3NcIitpbmRleCkudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBub3RlcyA9ICQoXCIjbm90ZXNcIitpbmRleCkudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaGlwcGluZ0FkZHJlc3NOYW1lID0gICQoJyNzaGlwcGluZ0FkZHJlc3MnK2luZGV4Kycgb3B0aW9uOnNlbGVjdGVkJykudGV4dCgpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgaWYgKCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImlkXCIraW5kZXgpKSl7XG4gICAgICAgICAgICAgICAgICAgIGxvdElEID0gKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaWRcIitpbmRleCkpLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbXlJbmRleCA9IGFsbElELmluZGV4T2YocGFyc2VJbnQobG90SUQpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG15SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxJRC5zcGxpY2UobXlJbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobG90SUQgPT0gJ1BlbmR0Licpe1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnbnVldm8nKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LDAsaXRlbS52YXJpYW50X2lkLDAsaXRlbS5pdGVtX2lkLHF1YW50aXR5LGl0ZW0ucHJvZHVjdC5wcmljZSxpdGVtLnF1YW50aXR5LGl0ZW0uZGlzY291bnQsaXRlbS5wcm9kdWN0LnByaWNlKnF1YW50aXR5LCduZXcnLGRlbGl2ZXJ5RGF0ZSxub3RlcyxwYXJzZUludChzaGlwcGluZ0FkZHJlc3MpLHNoaXBwaW5nQWRkcmVzc05hbWUsICduZXdsb3QnKTtcblxuICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb3RJRCAhPSAnJyl7XG4gICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsb3RJRCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNfLmNhcnRTZXJ2aWNlLmFkZFRvTG90KGl0ZW0ucHJvZHVjdCwwLGl0ZW0udmFyaWFudF9pZCxwYXJzZUludChsb3RJRCksaXRlbS5pdGVtX2lkLHF1YW50aXR5LGl0ZW0ucHJvZHVjdC5wcmljZSxpdGVtLnF1YW50aXR5LGl0ZW0uZGlzY291bnQsaXRlbS5wcm9kdWN0LnByaWNlKnF1YW50aXR5LCdlZGl0ZWQnLGRlbGl2ZXJ5RGF0ZSxub3RlcyxwYXJzZUludChzaGlwcGluZ0FkZHJlc3MpLHNoaXBwaW5nQWRkcmVzc05hbWUsICdlZGl0bG90Jyk7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICB5PWluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAgYWxsSUQuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgIC8vICAgY29uc29sZS5sb2coJ2JvcnJhcicpO1xuICAgICAgICAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LDAsaXRlbS52YXJpYW50X2lkLGVsZW1lbnQsMCwwLDAsMCwwLDAsJ2RlbGV0ZScsMCwnJywwLCdkZWxldGUnLCdkZWxldGVsb3QnKTtcbiAgICAgICAgICAgICB9KTtcbiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpc18uY2FydFNlcnZpY2UubG9hZENhcnRCeVRva2VuKHRoaXNfLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpKTt9LCAzMDAgKiB5KTtcblxuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzXy50b2FzdHJTZXJ2aWNlLnNob3coJ2xvdC1zYXZlZCcpO30sIDMwMCAqIHkpO1xuXG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXNfLmNhcmdhbmRvID0gZmFsc2V9LCAzMDAgKiB5KTtcblxuICAgICAgICAgIH0gZWxzZXtcbiAgICAgICAgICAgICAgIHRoaXNfLnRvYXN0clNlcnZpY2Uuc2hvdygnTGEgY2FudGlkYWQgZGUgbG9zIGxvdGVzIGVzIHN1cGVyaW9yIGEgbGEgY2FudGlkYWQgZGVsIHByb2R1Y3RvLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJyNib3RvbkJvcnJhcicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcyk7XG4gICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ3RyJykucmVtb3ZlKCk7XG5cbiAgICAgICAgICB9KTtcblxuICAgICB9XG5cbiAgICAgY2xvc2VNb2RhbChpZCl7XG4gICAgICAgICAgJCgnIycraWQpLm1vZGFsKCdoaWRlJyk7XG4gICAgIH1cblxuICAgICBjaGVja1N0b2NrKGl0ZW0pIHtcbiAgICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIGl0ZW0ucHJvZHVjdC52YXJpYW50cykge1xuICAgICAgICAgIGlmIChpdGVtLnZhcmlhbnRfaWQgPT09IHZhcmlhbnQuY29kZSkge1xuICAgICAgICAgICAgaWYodmFyaWFudC5zdG9jayA9PT0gMCl7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdG9jaz10cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiAnMCc7XG4gICAgICAgICAgICB9ZWxzZSBpZiAoaXRlbS5xdWFudGl0eSA+IHZhcmlhbnQuc3RvY2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0b2NrPXRydWU7XG4gICAgICAgICAgICAgIHJldHVybiB2YXJpYW50LnN0b2NrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFNvbG8gc2UgZWplY3V0YSBzaSBubyBzZSBjdW1wbGUgbGEgY29uZGljacOzblxuICAgICAgfVxuXG4gICAgICB1cGRhdGVBbGxTdG9jaygpIHtcbiAgICAgICAgY29uc3QgaXRlbXM6IGFueVtdID0gW107XG4gICAgICAgIFxuICAgICAgICAvLyBEZWZpbmUgbGEgc3VzY3JpcGNpw7NuIGFudGVzIGRlIHVzYXJsYVxuICAgICAgICBcbiAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuY2FydEl0ZW1zLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgIHJlcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIGl0ZW0ucHJvZHVjdC52YXJpYW50cykge1xuICAgICAgICAgICAgICBpZiAoaXRlbS52YXJpYW50X2lkID09PSB2YXJpYW50LmNvZGUgJiYgIXRoaXMuZXhpdFVwZGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LnN0b2NrID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmRlbGV0ZUNhcnRJdGVtKGl0ZW0sIGZhbHNlKTsgLy8gQm9ycmEgZWwgYXJ0w61jdWxvXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnF1YW50aXR5ID4gdmFyaWFudC5zdG9jaykge1xuICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3RDb2RlOiBpdGVtLnByb2R1Y3QuaWQsXG4gICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiB2YXJpYW50LnN0b2NrLFxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50Q29kZTogdmFyaWFudC5jb2RlLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNle1xuICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RDb2RlOiBpdGVtLnByb2R1Y3QuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRDb2RlOiB2YXJpYW50LmNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDAgJiYgIXRoaXMuZXhpdFVwZGF0ZSkge1xuICAgICAgICAgICAgLy8gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7ICAvLyBEZXN1c2Nyw61iZXRlIGFudGVzIGRlIGFjdHVhbGl6YXJcbiAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkQWxsVG9DYXJ0KGl0ZW1zKTsgIC8vIEFjdHVhbGl6YSBlbCBjYXJyaXRvXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0b2NrPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZXhpdFVwZGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAvLyB0aGlzLnVwZGF0ZUFsbFN0b2NrKCk7ICAvLyBWdWVsdmUgYSB2ZXJpZmljYXIgZWwgc3RvY2tcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICBcblxuICAgIGdldFZhcmlhbnRzID0gcHJvZHVjdCA9PiB7XG5cbiAgICAgICAgbGV0IGl0ZW0gPSBwcm9kdWN0LnByb2R1Y3RcblxuICAgICAgICBpZiAoaXRlbS52YXJpYW50cyAmJiBpdGVtLnZhcmlhbnRzLmxlbmd0aCAmJiBpdGVtLnZhcmlhbnRzWzBdLm9wdGlvbnMgJiYgaXRlbS52YXJpYW50c1swXS5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgIGxldCBvcHRpb25zID0gaXRlbS52YXJpYW50c1swXS5vcHRpb25zXG4gICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiB0aGlzLnZhcmlhbnRzVG9TaG93LmZpbmQobmFtZSA9PiBvcHRpb24uaGFzT3duUHJvcGVydHkobmFtZSkpKVxuICAgICAgICAgICAgIGxldCBvcHRpb25zTWFwID0gW11cbiAgICAgICAgICAgICBvcHRpb25zLm1hcChvcHRpb24gPT4ge1xuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhvcHRpb24pLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uQWRkZWQgPSBmYWxzZTsgIC8vIFZhcmlhYmxlIHBhcmEgZXZpdGFyIG3Dumx0aXBsZXMgaW5zZXJjaW9uZXNcbiAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIGl0ZW0ub3B0aW9ucy5mb3JFYWNoKG9wdGlvbjIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24yLmNvZGUgPT0gJ0NPTE9SJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24yLnZhbHVlcy5mb3JFYWNoKGNvbG9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xvci5jb2RlID09IG9wdGlvbltlbnRyeV0gJiYgIW9wdGlvbkFkZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc01hcC5wdXNoKHsgbmFtZTogZW50cnksIHZhbHVlOiBvcHRpb25bZW50cnldLCBpbWFnZTogY29sb3IuaW1hZ2UsIG1vYmlsZUltYWdlOiBjb2xvci5tb2JpbGVJbWFnZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25BZGRlZCA9IHRydWU7IC8vIE1hcmNhciBvcGNpw7NuIGFncmVnYWRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIH0gXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAvLyBTaSBubyBzZSBhw7FhZGnDsyBsYSBvcGNpw7NuIGRlIENPTE9SLCBtYW5lamFyIG90cmFzIG9wY2lvbmVzXG4gICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25BZGRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ub3B0aW9ucy5mb3JFYWNoKG9wdGlvbjIgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24yLmNvZGUgIT09ICdDT0xPUicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNNYXAucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZW50cnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG9wdGlvbltlbnRyeV1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25BZGRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiBvcHRpb25zTWFwO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIFxuICAgICAgICAgICAgIHJldHVybiBvcHRpb25zTWFwO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfVxuXG4gICB9XG5cbiAgIGNyZWF0ZURpc2NvdW50TWVzc2FnZShzYWxlcHJpY2U6IG51bWJlciwgcHJpY2U6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGlzTmFOKHNhbGVwcmljZSkgfHwgaXNOYU4ocHJpY2UpIHx8IHNhbGVwcmljZSA+PSBwcmljZSB8fCBzYWxlcHJpY2UgPD0gMCB8fCBwcmljZSA8PSAwKSB7XG4gICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgbGV0IGRpc2NvdW50UGVyY2VudGFnZSA9IE1hdGgucm91bmQoKChwcmljZSAtIHNhbGVwcmljZSkgLyBwcmljZSkgKiAxMDApO1xuXG4gICAgbGV0IGRpc2NvdW50TWVzc2FnZSA9IGAke2Rpc2NvdW50UGVyY2VudGFnZX0lIE9GRmA7XG4gICAgcmV0dXJuIGRpc2NvdW50TWVzc2FnZTtcbn1cbmdldE1pbmltdW1QdXJjaGFzZUFtb3VudCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5jaGFubmVsLnR5cGUgPT0gJ2IyYicgPyB0aGlzLmNoYW5uZWwud2hvbGVzYWxlck1pbmltdW1QdXJjaGFzZUFtb3VudCA6IHRoaXMuY2hhbm5lbC5yZXRhaWxlck1pbmltdW1QdXJjaGFzZUFtb3VudFxuXG59XG5cbmV4Y2VlZHNNaW5pbXVtQW1vdW50ID0gKHZhbHVlOiBudW1iZXIpID0+IHZhbHVlID49IHRoaXMuZ2V0TWluaW11bVB1cmNoYXNlQW1vdW50KCkgPyB0aGlzLnJlZGlyZWN0Q2hlY2tvdXQoKSA6IHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdxdWFudGl0eS1ub3QtZXhjZWVkZWQnLCB7IGFtb3VudDogdGhpcy5nZXRNaW5pbXVtUHVyY2hhc2VBbW91bnQoKSB9KVxuXG5cbn1cblxuXG5cblxuXG5cblxuXG5cblxuXG4iXX0=
|