{"version":3,"file":"../checkout-324.min.js","sources":["checkout-324.js"],"sourcesContent":["/**\n * Checkout Script\n * \n * Replaces the original WooCommerce `checkout.js`.\n */\n\n/* global wc_checkout_params */\njQuery( function( $ ) {\n\n\t// wc_checkout_params is required to continue, ensure the object exists\n\tif ( typeof wc_checkout_params === 'undefined' ) {\n\t\treturn false;\n\t}\n\n\t// CHANGE: Create flag to allow or block updating the checkout\n\twindow.can_update_checkout = true;\n\n\t// CHANGE: Add flag to up prevent users from leaving the page when there is unsaved data\n\tvar _updateBeforeUnload = false;\n\n\t// CHANGE: Add default settings object\n\tvar _settings = {\n\t\tformRowSelector: '.form-row',\n\t\tcheckoutPlaceOrderSelector: '#place_order, .fc-place-order-button',\n\t\tcheckoutTermsSelector: '.fc-terms-checkbox',\n\t\tcheckoutUpdateFieldsSelector: '.address-field input.input-text, .update_totals_on_change input.input-text',\n\t\tcheckoutLoadingInputSelector: '.loading_indicator_on_change input.input-text',\n\t\tfocusedFieldSkipFragmentReplaceSelector: 'input[type=\"text\"], input[type=\"color\"], input[type=\"date\"], input[type=\"datetime\"], input[type=\"datetime-local\"], input[type=\"email\"], input[type=\"file\"], input[type=\"image\"], input[type=\"month\"], input[type=\"number\"], input[type=\"password\"], input[type=\"search\"], input[type=\"tel\"], input[type=\"time\"], input[type=\"url\"], input[type=\"week\"], select, textarea, .fc-select2-field',\n\t\tphoneFieldSelector: 'input[type=\"tel\"], [data-phone-field], input.js-phone-field, .js-phone-field input',\n\t\tloginButtonSelector: '.fc-contact-login__action',\n\t\temailFieldSelector: 'form.woocommerce-checkout input[name=\"billing_email\"]',\n\t\tusernameFieldSelector: '.fc-login-form__inner input[name=\"username\"]',\n\n\t\tsameAsCheckboxSelector: '#billing_same_as_shipping, #shipping_same_as_billing',\n\t\tsameAsCheckboxAvailableSelector: '#billing_same_as_shipping_available, #shipping_same_as_billing_available',\n\t\taddressFieldsSectionSelector: '.woocommerce-billing-fields, .woocommerce-shipping-fields',\n\t\taddressFieldsSectionSelectorTemplate: '.woocommerce-###FIELD_GROUP###-fields',\n\t\taddressFieldsWrapperSelector: '#woocommerce-billing-fields__field-wrapper, #woocommerce-shipping-fields__field-wrapper',\n\t\taddressFieldsToMirrorSelector: 'select, input, textarea',\n\t\t\n\t\tloadingClass: 'fc-loading',\n\t\tcheckoutBlockUISelector: '.woocommerce-checkout-payment, .fc-shipping-method__packages',\n\n\t\tcheckoutPlaceOrderApplyLoadingClass: 'yes',\n\t\tcheckoutUpdateBeforeUnload: 'yes',\n\t\tcheckoutUpdateOnVisibilityChange: 'yes',\n\t};\n\t// CHANGE: END - Add default settings object\n\n\t$.blockUI.defaults.overlayCSS.cursor = 'default';\n\n\tvar wc_checkout_form = {\n\t\tupdateTimer: false,\n\t\tdirtyInput: false,\n\t\tselectedPaymentMethod: false,\n\t\txhr: false,\n\t\t$order_review: $( '#order_review' ),\n\t\t$checkout_form: $( 'form.checkout' ),\n\t\tinit: function() {\n\t\t\t// CHANGE: Maybe merge default settings object with values from the server settings object\n\t\t\tif ( window.fcSettings ) {\n\t\t\t\t_settings = FCUtils.extendObject( true, _settings, window.fcSettings.checkout );\n\t\t\t}\n\n\t\t\t$( document.body ).on( 'update_checkout', this.update_checkout );\n\t\t\t$( document.body ).on( 'init_checkout', this.init_checkout );\n\n\t\t\t// CHANGE: Add event handlers to autocomplete attributes\n\t\t\t$( document.body ).on( 'init_checkout', this.set_autocomplete_attribute_from_data );\n\t\t\t$( document.body ).on( 'updated_checkout', this.set_autocomplete_attribute_from_data );\n\n\t\t\t// Payment methods\n\t\t\tthis.$checkout_form.on( 'click', 'input[name=\"payment_method\"]', this.payment_method_selected );\n\n\t\t\tif ( $( document.body ).hasClass( 'woocommerce-order-pay' ) ) {\n\t\t\t\tthis.$order_review.on( 'click', 'input[name=\"payment_method\"]', this.payment_method_selected );\n\t\t\t\tthis.$order_review.on( 'submit', this.submitOrder );\n\t\t\t\tthis.$order_review.attr( 'novalidate', 'novalidate' );\n\t\t\t}\n\n\t\t\t// Prevent HTML5 validation which can conflict.\n\t\t\tthis.$checkout_form.attr( 'novalidate', 'novalidate' );\n\n\t\t\t// Form submission\n\t\t\tthis.$checkout_form.on( 'submit', this.submit );\n\n\t\t\t// CHANGE: Maybe disable inline validation from default WooCommerce checkout script when Fluid Checkout inline validation is enabled\n\t\t\tif ( ! window.CheckoutValidation ) {\n\t\t\t\t// Inline validation\n\t\t\t\tthis.$checkout_form.on( 'input validate change', '.input-text, select, input:checkbox', this.validate_field );\n\t\t\t}\n\n\t\t\t// Manual trigger\n\t\t\tthis.$checkout_form.on( 'update', this.trigger_update_checkout );\n\n\t\t\t// Inputs/selects which update totals\n\t\t\t// CHANGE: Removed selector `#ship-to-different-address input`\n\t\t\tthis.$checkout_form.on( 'change', 'select.shipping_method, input[name^=\"shipping_method\"], .update_totals_on_change select, .update_totals_on_change input[type=\"radio\"], .update_totals_on_change input[type=\"checkbox\"], .update_totals_on_change input:not([type=\"hidden\"])', this.trigger_update_checkout ); // eslint-disable-line max-len\n\t\t\tthis.$checkout_form.on( 'change', '.address-field select', this.input_changed );\n\n\t\t\t// CHANGE: Move CSS selector for fields that trigger update checkout when value is changed\n\t\t\tthis.$checkout_form.on( 'change', _settings.checkoutUpdateFieldsSelector, this.maybe_input_changed ); // eslint-disable-line max-len\n\t\t\tthis.$checkout_form.on( 'keydown', _settings.checkoutUpdateFieldsSelector, this.queue_update_checkout ); // eslint-disable-line max-len\n\n\t\t\t// Address fields\n\t\t\t// CHANGE: Removed shipping to different address checkout `change` listener\n\n\t\t\t// CHANGE: Update checkout totals to save data to session when user switches tabs, apps, goes to homescreen, etc.\n\t\t\tdocument.addEventListener( 'visibilitychange', FCUtils.debounce( this.maybe_update_checkout_visibility_change, 50 ) );\n\n\t\t\t// CHANGE: Maybe prevent leaving the page if there are unsaved changes, and trigger `update_checkout` to save the data.\n\t\t\tif ( 'yes' === _settings.checkoutUpdateBeforeUnload ) {\n\t\t\t\tthis.$checkout_form.on( 'change, input', 'select, input, textarea', this.maybe_prevent_unload );\n\t\t\t}\n\n\t\t\t// CHANGE: Update checkout when \"same as address\" checkboxes state changes\n\t\t\tthis.$checkout_form.on( 'change', _settings.sameAsCheckboxSelector, this.same_as_address_checkbox_changed );\n\n\t\t\t// CHANGE: Trigger reinitialization functions after checkout is updated\n\t\t\t$( document.body ).on( 'updated_checkout', this.maybe_reinitialize_collapsible_blocks );\n\t\t\t$( document.body ).on( 'updated_checkout', this.maybe_reinitialize_flyout_blocks );\n\n\t\t\t// CHANGE: Add event listener to sync terms checkbox state\n\t\t\tthis.$checkout_form.on( 'change', _settings.checkoutTermsSelector, this.terms_checked_changed );\n\n\t\t\t// Trigger events\n\t\t\t// CHANGE: Removed shipping to different address checkout `change` trigger\n\t\t\tthis.init_payment_methods();\n\n\t\t\t// Update on page load\n\t\t\tif ( wc_checkout_params.is_checkout === '1' ) {\n\t\t\t\t$( document.body ).trigger( 'init_checkout' );\n\t\t\t}\n\t\t\tif ( wc_checkout_params.option_guest_checkout === 'yes' ) {\n\t\t\t\t// CHANGE: Use native `change` event instead jQuery to handle create account checkbox toggle\n\t\t\t\tdocument.addEventListener( 'change', this.toggle_create_account, true );\n\t\t\t}\n\n\t\t\t// CHANGE: Add handler for login form modal initialization\n\t\t\tdocument.addEventListener( 'click', this.maybe_copy_email_to_login_form, true );\n\n\t\t\t// CHANGE: Enhance dropdown fields on initialization and updates\n\t\t\tif ( window.FCEnhancedSelect ) {\n\t\t\t\tthis.init_enhanced_dropdowns();\n\t\t\t\t$( document.body ).on( 'fc_checkout_fragments_replace_after', this.init_enhanced_dropdowns );\n\t\t\t}\n\t\t},\n\t\t// CHANGE: Enhance dropdown fields\n\t\tinit_enhanced_dropdowns: function() {\n\t\t\tFCEnhancedSelect.enhanceFields();\n\t\t},\n\t\t// CHANGE: Check if the \"same as\" address checkbox option is checked\n\t\tis_same_as_address_option_checked: function( fieldGroup ) {\n\t\t\t// Bail if field group is not valid\n\t\t\tif ( 'billing' !== fieldGroup && 'shipping' !== fieldGroup ) { return false; }\n\n\t\t\t// Get fields section\n\t\t\tvar fieldsSectionSelector = _settings.addressFieldsSectionSelectorTemplate.replace( '###FIELD_GROUP###', fieldGroup );\n\t\t\tvar fieldsSection = document.querySelector( fieldsSectionSelector );\n\n\t\t\t// Bail if field section was not found\n\t\t\tif ( ! fieldsSection ) { return false; }\n\n\t\t\t// Get field that determines whether \"same as\" checkbox is available\n\t\t\tvar isCheckboxAvailableField = fieldsSection.querySelector( _settings.sameAsCheckboxAvailableSelector );\n\n\t\t\t// Bail if checkbox availability field was found, but the checkbox is not available\n\t\t\tif ( isCheckboxAvailableField && '1' !== isCheckboxAvailableField.value ) { return false; }\n\n\t\t\t// Get the checkbox field\n\t\t\tvar sameAsCheckbox = fieldsSection.querySelector( _settings.sameAsCheckboxSelector );\n\n\t\t\t// Bail if \"same as\" checkbox was not found\n\t\t\tif ( ! sameAsCheckbox ) { return false; }\n\n\t\t\t// Get the checkbox field type\n\t\t\tvar checkboxFieldType = sameAsCheckbox.getAttribute( 'type' );\n\n\t\t\t// Initialize return value\n\t\t\tvar isChecked = false;\n\n\t\t\t// Test whether the checkbox is checked based on its field type\n\t\t\tswitch ( checkboxFieldType ) {\n\t\t\t\tcase 'hidden':\n\t\t\t\t\tisChecked = '1' === sameAsCheckbox.value;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tisChecked = sameAsCheckbox.checked;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn isChecked;\n\t\t},\n\t\t// CHANGE: Update checkout when \"billing same as shipping\" checked state changes\n\t\tsame_as_address_checkbox_changed: function( e ) {\n\t\t\t// Initialize variables\n\t\t\tvar fieldsSection = e.target.closest( _settings.addressFieldsSectionSelector );\n\t\t\tvar fieldsWrapper = fieldsSection ? fieldsSection.querySelector( _settings.addressFieldsWrapperSelector ) : null;\n\t\t\tvar sameAsCheckbox = fieldsSection ? fieldsSection.querySelector( _settings.sameAsCheckboxSelector ) : null;\n\t\t\tvar fieldGroup = sameAsCheckbox && 0 === sameAsCheckbox.id.indexOf( 'billing' ) ? 'billing' : 'shipping';\n\n\t\t\t// Check whether required elements are available\n\t\t\tif ( window.CollapsibleBlock && sameAsCheckbox && fieldsWrapper ) {\n\t\t\t\t// Toggle state\n\t\t\t\tif ( ! wc_checkout_form.is_same_as_address_option_checked( fieldGroup ) ) {\n\t\t\t\t\t// Expand fields wrapper\n\t\t\t\t\tCollapsibleBlock.expand( fieldsWrapper );\n\n\t\t\t\t\t// Show section as loading\n\t\t\t\t\t$( fieldsWrapper ).block({\n\t\t\t\t\t\tmessage: null,\n\t\t\t\t\t\toverlayCSS: {\n\t\t\t\t\t\t\tbackground: '#fff',\n\t\t\t\t\t\t\topacity: 0.6\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Collapse fields wrapper\n\t\t\t\t\tCollapsibleBlock.collapse( fieldsWrapper );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Trigger update checkout\n\t\t\t$( document.body ).trigger( 'update_checkout' );\n\t\t},\n\t\t// CHANGE: Mirror the address field value to the other address group (copy billing to shipping, or shipping to billing)\n\t\tmirror_address_field_value: function( field ) {\n\t\t\t// Bail if not a valid field\n\t\t\tif ( ! field || ! field.matches( _settings.addressFieldsToMirrorSelector ) ) { return; }\n\n\t\t\t// Get field key\n\t\t\tvar fieldKey = field.getAttribute( 'name' );\n\n\t\t\t// Bail if not address field\n\t\t\tif ( ! fieldKey || ( 0 !== fieldKey.indexOf( 'billing_' ) && 0 !== fieldKey.indexOf( 'shipping_' ) ) ) { return; }\n\n\t\t\t// Get field groups\n\t\t\tvar fieldGroup = 0 === fieldKey.indexOf( 'billing_' ) ? 'billing' : 'shipping';\n\t\t\tvar mirrorFieldGroup = 'billing' === fieldGroup ? 'shipping' : 'billing';\n\t\t\tvar mirrorFieldGroupElement = document.querySelector( '.woocommerce-' + mirrorFieldGroup + '-fields__field-wrapper' );\n\n\t\t\t// Bail if no mirror field group element\n\t\t\tif ( ! mirrorFieldGroupElement ) { return; }\n\n\t\t\t// Get checkbox state\n\t\t\tvar isSameAsAddressChecked = wc_checkout_form.is_same_as_address_option_checked( mirrorFieldGroup );\n\n\t\t\t// Bail if \"same as\" checkbox is not checked\n\t\t\tif ( ! isSameAsAddressChecked ) { return; }\n\n\t\t\t// Get mirror field\n\t\t\tvar mirrorFieldKey = fieldKey.replace( fieldGroup + '_', mirrorFieldGroup + '_' );\n\t\t\tvar mirrorField = mirrorFieldGroupElement.querySelector( '[name=\"' + mirrorFieldKey + '\"]' );\n\n\t\t\t// Bail if no mirror field\n\t\t\tif ( ! mirrorField ) { return; }\n\n\t\t\t// Mirror field value\n\t\t\tmirrorField.value = field.value;\n\t\t},\n\t\t// CHANGE: Mirror all address field values between billing and shipping fields when \"same as address\" checkbox is checked\n\t\tmaybe_mirror_all_address_field_values: function() {\n\t\t\t// Get checkbox field\n\t\t\tvar sameAsCheckbox = document.querySelector( _settings.sameAsCheckboxSelector );\n\n\t\t\t// Bail if checkbox was not found\n\t\t\tif ( ! sameAsCheckbox ) { return; }\n\n\t\t\t// Get the field groups based on the available checkbox element\n\t\t\tvar targetFieldGroup = 0 === sameAsCheckbox.id.indexOf( 'billing' ) ? 'billing' : 'shipping';\n\t\t\tvar originFieldGroup = 'billing' === targetFieldGroup ? 'shipping' : 'billing';\n\n\t\t\t// Get the checkbox state\n\t\t\tvar isSameAsAddressChecked = wc_checkout_form.is_same_as_address_option_checked( targetFieldGroup );\n\n\t\t\t// Bail if \"same as\" checkbox is not checked\n\t\t\tif ( ! isSameAsAddressChecked ) { return; }\n\n\t\t\t// Get origin section and wrapper elements\n\t\t\tvar originFieldsSectionSelector = _settings.addressFieldsSectionSelectorTemplate.replace( '###FIELD_GROUP###', originFieldGroup );\n\t\t\tvar originFieldsSection = document.querySelector( originFieldsSectionSelector );\n\t\t\tvar originFieldsWrapper = originFieldsSection ? originFieldsSection.querySelector( _settings.addressFieldsWrapperSelector ) : null;\n\n\t\t\t// Bail if origin fields section and wrapper were not found\n\t\t\tif ( ! originFieldsSection || ! originFieldsWrapper ) { return; }\n\n\t\t\t// Bail if no origin field group element\n\t\t\tif ( ! originFieldsWrapper ) { return; }\n\n\t\t\t// Get origin address fields\n\t\t\tvar originAddressFields = originFieldsWrapper.querySelectorAll( _settings.addressFieldsToMirrorSelector );\n\n\t\t\t// Iterate over address fields and mirror their values\n\t\t\tfor ( var i = 0; i < originAddressFields.length; i++ ) {\n\t\t\t\tvar originField = originAddressFields[ i ];\n\t\t\t\twc_checkout_form.mirror_address_field_value( originField );\n\t\t\t}\n\t\t},\n\t\t// CHANGE: Reinitialize collapsible blocks after checkout update\n\t\tmaybe_reinitialize_collapsible_blocks: function() {\n\t\t\t// Bail if collapsible blocks are not available\n\t\t\tif ( ! window.CollapsibleBlock ) { return; }\n\n\t\t\t// Try to initialize collapsible blocks if not yet initialized\n\t\t\tCollapsibleBlock.init( window.fcSettings ? fcSettings.collapsibleBlock : null );\n\n\t\t\tvar collapsibleBlocks = document.querySelectorAll( '[data-collapsible]' );\n\t\t\tfor ( var i = 0; i < collapsibleBlocks.length; i++ ) {\n\t\t\t\tvar collapsibleBlock = collapsibleBlocks[i];\n\n\t\t\t\t// Maybe initialize the collapsible block\n\t\t\t\tif ( ! CollapsibleBlock.getInstance( collapsibleBlock ) ) {\n\t\t\t\t\tCollapsibleBlock.initializeElement( collapsibleBlock );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// CHANGE: Reinitialize flyout blocks after checkout update\n\t\tmaybe_reinitialize_flyout_blocks: function() {\n\t\t\t// Bail if flyout blocks are not available\n\t\t\tif ( ! window.FlyoutBlock ) { return; }\n\n\t\t\tFlyoutBlock.initTriggers();\n\t\t},\n\t\t// CHANGE: Update checkout when page gets hidden or visible again\n\t\tmaybe_update_checkout_visibility_change: function() {\n\t\t\t// Bail if update on visibility change is disabled\n\t\t\tif ( 'yes' !== _settings.checkoutUpdateOnVisibilityChange ) { return; }\n\n\t\t\t// Trigger update if visibility state is changed to `hidden` or `visible`\n\t\t\tif ( 'hidden' == document.visibilityState || 'visible' == document.visibilityState ) {\n\t\t\t\t$( document.body ).trigger( 'update_checkout', { refresh_payment_methods: false } );\n\t\t\t}\n\t\t},\n\t\t// CHANGE: Prompt user that they might lose data when closing tab or leaving the current page after they change some values in the checkout form\n\t\tmaybe_prevent_unload: function( e ) {\n\t\t\t// Ignore some fields\n\t\t\tif ( e && e.target.closest( '.payment_box, input#createaccount' ) ) { return; }\n\n\t\t\tif ( ! _updateBeforeUnload ) {\n\n\t\t\t\tvar preventUnload = function( e ) {\n\t\t\t\t\t// Prompt user if there is unsaved data\n\t\t\t\t\tif ( _updateBeforeUnload ) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.returnValue = '';\n\n\t\t\t\t\t\t// Proceed to update the checkout totals if the user cancel the event\n\t\t\t\t\t\t$( document.body ).trigger( 'update_checkout' );\n\n\t\t\t\t\t\t// Reset flag to update on `beforeunload`\n\t\t\t\t\t\t_updateBeforeUnload = false;\n\t\t\t\t\t\twindow.removeEventListener( 'beforeunload', preventUnload );\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\twindow.addEventListener( 'beforeunload', preventUnload );\n\t\t\t\t_updateBeforeUnload = true;\n\t\t\t}\n\t\t},\n\t\tinit_payment_methods: function() {\n\t\t\tvar $payment_methods = $( '.woocommerce-checkout' ).find( 'input[name=\"payment_method\"]' );\n\n\t\t\t// If there is one method, we can hide the radio input\n\t\t\tif ( 1 === $payment_methods.length ) {\n\t\t\t\t$payment_methods.eq(0).hide();\n\t\t\t}\n\n\t\t\t// If there was a previously selected method, check that one.\n\t\t\tif ( wc_checkout_form.selectedPaymentMethod ) {\n\t\t\t\t$( '#' + wc_checkout_form.selectedPaymentMethod ).prop( 'checked', true );\n\t\t\t}\n\n\t\t\t// If there are none selected, select the first.\n\t\t\tif ( 0 === $payment_methods.filter( ':checked' ).length ) {\n\t\t\t\t$payment_methods.eq(0).prop( 'checked', true );\n\t\t\t}\n\n\t\t\t// Get name of new selected method.\n\t\t\tvar checkedPaymentMethod = $payment_methods.filter( ':checked' ).eq(0).prop( 'id' );\n\n\t\t\tif ( $payment_methods.length > 1 ) {\n\t\t\t\t// Hide open descriptions.\n\t\t\t\t$( 'div.payment_box:not(\".' + checkedPaymentMethod + '\")' ).filter( ':visible' ).slideUp( 0 );\n\t\t\t}\n\n\t\t\t// Trigger click event for selected method\n\t\t\t$payment_methods.filter( ':checked' ).eq(0).trigger( 'click' );\n\t\t},\n\t\tget_payment_method: function() {\n\t\t\treturn wc_checkout_form.$checkout_form.find( 'input[name=\"payment_method\"]:checked' ).val();\n\t\t},\n\t\tpayment_method_selected: function( e ) {\n\t\t\te.stopPropagation();\n\n\t\t\tif ( $( '.payment_methods input.input-radio' ).length > 1 ) {\n\t\t\t\tvar target_payment_box = $( 'div.payment_box.' + $( this ).attr( 'ID' ) ),\n\t\t\t\t\tis_checked = $( this ).is( ':checked' );\n\n\t\t\t\tif ( is_checked && ! target_payment_box.is( ':visible' ) ) {\n\t\t\t\t\t$( 'div.payment_box' ).filter( ':visible' ).slideUp( 230 );\n\n\t\t\t\t\tif ( is_checked ) {\n\t\t\t\t\t\ttarget_payment_box.slideDown( 230 );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$( 'div.payment_box' ).show();\n\t\t\t}\n\n\t\t\tif ( $( this ).data( 'order_button_text' ) ) {\n\t\t\t\t// CHANGE: replaced the place order button css selector with an extended custom selector\n\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).text( $( this ).data( 'order_button_text' ) );\n\t\t\t} else {\n\t\t\t\t// CHANGE: replaced the place order button css selector with an extended custom selector\n\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).text( $( _settings.checkoutPlaceOrderSelector ).data( 'value' ) );\n\t\t\t}\n\n\t\t\tvar selectedPaymentMethod = $( '.woocommerce-checkout input[name=\"payment_method\"]:checked' ).attr( 'id' );\n\n\t\t\tif ( selectedPaymentMethod !== wc_checkout_form.selectedPaymentMethod ) {\n\t\t\t\t$( document.body ).trigger( 'payment_method_selected' );\n\t\t\t}\n\n\t\t\t// CHANGE: Add body class for selected payment method\n\t\t\tdocument.body.classList.remove( 'has-payment-method-selected--' + wc_checkout_form.selectedPaymentMethod );\n\t\t\tdocument.body.classList.add( 'has-payment-method-selected--' + selectedPaymentMethod );\n\n\t\t\twc_checkout_form.selectedPaymentMethod = selectedPaymentMethod;\n\t\t},\n\t\t// CHANGE: Add `e` parameter needed for checking target element\n\t\ttoggle_create_account: function( e ) {\n\t\t\t// CHANGE: Use collapsible block instead of jQuery to show/hide accoung fields section\n\t\t\t// Bail if not target element\n\t\t\tif ( ! e.target || ! e.target.matches( 'input#createaccount' ) ) { return; }\n\n\t\t\t// Bail if collapsible block not available\n\t\t\tif ( ! window.CollapsibleBlock ) { return; }\n\n\t\t\tvar checkbox = document.querySelector( 'input#createaccount' );\n\t\t\tvar createAccountBlock = document.querySelector( 'div.create-account' );\n\n\t\t\t// Toggle state\n\t\t\tif ( checkbox.checked ) {\n\t\t\t\tCollapsibleBlock.expand( createAccountBlock );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tCollapsibleBlock.collapse( createAccountBlock );\n\t\t\t}\n\t\t\t// CHANGE: END - Use collapsible block instead of jQuery to show/hide accoung fields section\n\t\t},\n\t\t// CHANGE: Add function to copy email field value to the login form username field\n\t\tmaybe_copy_email_to_login_form: function( e ) {\n\t\t\t// CHANGE: Use collapsible block instead of jQuery to show/hide accoung fields section\n\t\t\t// Bail if not target element\n\t\t\tif ( ! e.target || ! e.target.closest( _settings.loginButtonSelector ) ) { return; }\n\n\t\t\tvar billingEmailField = document.querySelector( _settings.emailFieldSelector );\n\t\t\tvar usernameField = document.querySelector( _settings.usernameFieldSelector );\n\t\t\t\n\t\t\t// Maybe copy email to username field\n\t\t\tif ( billingEmailField && usernameField ) {\n\t\t\t\tusernameField.value = billingEmailField.value;\n\t\t\t}\n\t\t},\n\t\t// CHANGE: END - Add function to copy email field value to the login form username field\n\t\tinit_checkout: function() {\n\t\t\t$( document.body ).trigger( 'update_checkout' );\n\t\t},\n\t\tmaybe_input_changed: function( e ) {\n\t\t\tif ( wc_checkout_form.dirtyInput ) {\n\t\t\t\twc_checkout_form.input_changed( e );\n\t\t\t}\n\t\t},\n\t\t// CHANGE: Add function to set the autocomplete attribute values form data attributes. This fixes issue with lost user data when refreshing the page while using the Firefox Browser.\n\t\tset_autocomplete_attribute_from_data: function( e ) {\n\t\t\tvar $fields = $( 'form.checkout' ).find( 'input, select, textarea' );\n\t\t\t$fields.each( function() {\n\t\t\t\tif ( $( this ).attr( 'data-autocomplete' ) ) {\n\t\t\t\t\t$( this ).attr( 'autocomplete', $( this ).attr( 'data-autocomplete' ) );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\t\t// CHANGE: Add function to sync the terms checkbox state\n\t\tterms_checked_changed: function( e ) {\n\t\t\tvar termsCheckBoxChecked = $( e.target ).prop( 'checked' );\n\t\t\t$( _settings.checkoutTermsSelector ).prop( 'checked', termsCheckBoxChecked );\n\t\t},\n\t\t// CHANGE: Maybe add loading class to the form row\n\t\tmaybe_set_form_row_loading: function( e ) {\n\t\t\tif ( e.target && e.target.matches( _settings.checkoutLoadingInputSelector ) ) {\n\t\t\t\tvar formRow = e.target.closest( _settings.formRowSelector );\n\t\t\t\tif ( formRow ) {\n\t\t\t\t\tformRow.classList.add( _settings.loadingClass );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// CHANGE: Add function to remove loading classes from elements after updating the checkout fragments\n\t\tmaybe_stop_form_row_loading_indicators: function() {\n\t\t\tvar maybeLoadingFields = document.querySelectorAll( _settings.checkoutLoadingInputSelector );\n\t\t\tfor ( var i = 0; i < maybeLoadingFields.length; i++ ) {\n\t\t\t\tvar input = maybeLoadingFields[ i ];\n\t\t\t\tvar formRow = input.closest( _settings.formRowSelector );\n\t\t\t\tif ( formRow ) {\n\t\t\t\t\tformRow.classList.remove( _settings.loadingClass );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tinput_changed: function( e ) {\n\t\t\twc_checkout_form.dirtyInput = e.target;\n\t\t\twc_checkout_form.maybe_update_checkout();\n\t\t\t// CHANGE: Maybe add loading class to the form row\n\t\t\twc_checkout_form.maybe_set_form_row_loading( e );\n\t\t},\n\t\tqueue_update_checkout: function( e ) {\n\t\t\t// CHANGE: Add key detection to use the `event.key` property which is more reliable than `event.keyCode` or `event.which`.\n\t\t\tvar code = e.key;\n\n\t\t\t// CHANGE: Also skip `update_checkout` when pressing other controls keys such as \"Shift\", \"Control\", \"Command\", \"Alt\" and \"Arrows\"\n\t\t\tif ( FCUtils.keyboardKeys.TAB === code || FCUtils.keyboardKeys.SHIFT === code || FCUtils.keyboardKeys.CONTROL === code || FCUtils.keyboardKeys.ALT === code || FCUtils.keyboardKeys.COMMAND_OR_WINDOWS === code || FCUtils.keyboardKeys.ARROW_LEFT === code || FCUtils.keyboardKeys.ARROW_RIGHT === code || FCUtils.keyboardKeys.ARROW_UP === code || FCUtils.keyboardKeys.ARROW_DOWN === code ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\twc_checkout_form.dirtyInput = this;\n\t\t\twc_checkout_form.reset_update_checkout_timer();\n\t\t\twc_checkout_form.updateTimer = setTimeout( wc_checkout_form.maybe_update_checkout, '1000' );\n\t\t\t// CHANGE: Maybe add loading class to the form row\n\t\t\twc_checkout_form.maybe_set_form_row_loading( e );\n\t\t},\n\t\ttrigger_update_checkout: function() {\n\t\t\twc_checkout_form.reset_update_checkout_timer();\n\t\t\twc_checkout_form.dirtyInput = false;\n\t\t\t$( document.body ).trigger( 'update_checkout' );\n\t\t},\n\t\tmaybe_update_checkout: function() {\n\t\t\tvar update_totals = true;\n\n\t\t\tif ( $( wc_checkout_form.dirtyInput ).length ) {\n\t\t\t\tvar $required_inputs = $( wc_checkout_form.dirtyInput ).closest( 'div' ).find( '.address-field.validate-required' );\n\n\t\t\t\tif ( $required_inputs.length ) {\n\t\t\t\t\t$required_inputs.each( function() {\n\t\t\t\t\t\tif ( $( this ).find( 'input.input-text' ).val() === '' ) {\n\t\t\t\t\t\t\tupdate_totals = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( update_totals ) {\n\t\t\t\twc_checkout_form.trigger_update_checkout();\n\t\t\t}\n\t\t},\n\t\t// CHANGE: Removed shipping to different address checkout `change` listener handler function\n\t\treset_update_checkout_timer: function() {\n\t\t\tclearTimeout( wc_checkout_form.updateTimer );\n\t\t},\n\t\tis_valid_json: function( raw_json ) {\n\t\t\ttry {\n\t\t\t\tvar json = JSON.parse( raw_json );\n\n\t\t\t\treturn ( json && 'object' === typeof json );\n\t\t\t} catch ( e ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tvalidate_field: function( e ) {\n\t\t\tvar $this = $( this ),\n\t\t\t\t$parent = $this.closest( '.form-row' ),\n\t\t\t\tvalidated = true,\n\t\t\t\tvalidate_required = $parent.is( '.validate-required' ),\n\t\t\t\tvalidate_email = $parent.is( '.validate-email' ),\n\t\t\t\tvalidate_phone = $parent.is( '.validate-phone' ),\n\t\t\t\tpattern = '',\n\t\t\t\tevent_type = e.type;\n\n\t\t\tif ( 'input' === event_type ) {\n\t\t\t\t$parent.removeClass( 'woocommerce-invalid woocommerce-invalid-required-field woocommerce-invalid-email woocommerce-invalid-phone woocommerce-validated' ); // eslint-disable-line max-len\n\t\t\t}\n\n\t\t\tif ( 'validate' === event_type || 'change' === event_type ) {\n\n\t\t\t\tif ( validate_required ) {\n\t\t\t\t\tif ( 'checkbox' === $this.attr( 'type' ) && ! $this.is( ':checked' ) ) {\n\t\t\t\t\t\t$parent.removeClass( 'woocommerce-validated' ).addClass( 'woocommerce-invalid woocommerce-invalid-required-field' );\n\t\t\t\t\t\tvalidated = false;\n\t\t\t\t\t} else if ( $this.val() === '' ) {\n\t\t\t\t\t\t$parent.removeClass( 'woocommerce-validated' ).addClass( 'woocommerce-invalid woocommerce-invalid-required-field' );\n\t\t\t\t\t\tvalidated = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( validate_email ) {\n\t\t\t\t\tif ( $this.val() ) {\n\t\t\t\t\t\t/* https://stackoverflow.com/questions/2855865/jquery-validate-e-mail-address-regex */\n\t\t\t\t\t\tpattern = new RegExp( /^([a-z\\d!#$%&'*+\\-\\/=?^_`{|}~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+(\\.[a-z\\d!#$%&'*+\\-\\/=?^_`{|}~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+)*|\"((([ \\t]*\\r\\n)?[ \\t]+)?([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f\\x21\\x23-\\x5b\\x5d-\\x7e\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))*(([ \\t]*\\r\\n)?[ \\t]+)?\")@(([a-z\\d\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]|[a-z\\d\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF][a-z\\d\\-._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]*[a-z\\d\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])\\.)+([a-z\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]|[a-z\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF][a-z\\d\\-._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]*[0-9a-z\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])\\.?$/i ); // eslint-disable-line max-len\n\n\t\t\t\t\t\tif ( ! pattern.test( $this.val() ) ) {\n\t\t\t\t\t\t\t$parent.removeClass( 'woocommerce-validated' ).addClass( 'woocommerce-invalid woocommerce-invalid-email woocommerce-invalid-phone' ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tvalidated = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( validate_phone ) {\n\t\t\t\t\tpattern = new RegExp( /[\\s\\#0-9_\\-\\+\\/\\(\\)\\.]/g );\n\n\t\t\t\t\tif ( 0 < $this.val().replace( pattern, '' ).length ) {\n\t\t\t\t\t\t$parent.removeClass( 'woocommerce-validated' ).addClass( 'woocommerce-invalid woocommerce-invalid-phone' );\n\t\t\t\t\t\tvalidated = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( validated ) {\n\t\t\t\t\t$parent.removeClass( 'woocommerce-invalid woocommerce-invalid-required-field woocommerce-invalid-email woocommerce-invalid-phone' ).addClass( 'woocommerce-validated' ); // eslint-disable-line max-len\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tupdate_checkout: function( event, args ) {\n\t\t\t// CHANGE: Mirror all field values\n\t\t\twc_checkout_form.maybe_mirror_all_address_field_values();\n\n\t\t\t// Small timeout to prevent multiple requests when several fields update at the same time\n\t\t\twc_checkout_form.reset_update_checkout_timer();\n\t\t\twc_checkout_form.updateTimer = setTimeout( wc_checkout_form.update_checkout_action, '5', args );\n\t\t},\n\t\tupdate_checkout_action: function( args ) {\n\t\t\t// CHANGE: Check flag that allows or block updating the checkout\n\t\t\tif ( ! window.can_update_checkout ) { return; }\n\n\t\t\tif ( wc_checkout_form.xhr ) {\n\t\t\t\twc_checkout_form.xhr.abort();\n\t\t\t}\n\n\t\t\tif ( $( 'form.checkout' ).length === 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\targs = typeof args !== 'undefined' ? args : {\n\t\t\t\tupdate_shipping_method: true\n\t\t\t};\n\n\t\t\tvar country\t\t\t = $( '#billing_country' ).val(),\n\t\t\t\tstate\t\t\t = $( '#billing_state' ).val(),\n\t\t\t\tpostcode\t\t = $( ':input#billing_postcode' ).val(),\n\t\t\t\tcity\t\t\t = $( '#billing_city' ).val(),\n\t\t\t\taddress\t\t\t = $( ':input#billing_address_1' ).val(),\n\t\t\t\taddress_2\t\t = $( ':input#billing_address_2' ).val(),\n\t\t\t\t// CHANGE: Always get shipping address values from shipping fields\n\t\t\t\ts_country\t\t = $( '#shipping_country' ).val(),\n\t\t\t\ts_state\t\t\t = $( '#shipping_state' ).val(),\n\t\t\t\ts_postcode\t\t = $( ':input#shipping_postcode' ).val(),\n\t\t\t\ts_city\t\t\t = $( '#shipping_city' ).val(),\n\t\t\t\ts_address\t\t = $( ':input#shipping_address_1' ).val(),\n\t\t\t\ts_address_2\t\t = $( ':input#shipping_address_2' ).val(),\n\t\t\t\t// END - CHANGE: Always get shipping address values from shipping fields\n\t\t\t\t$required_inputs = $( wc_checkout_form.$checkout_form ).find( '.address-field.validate-required:visible' ),\n\t\t\t\thas_full_address = true;\n\n\t\t\tif ( $required_inputs.length ) {\n\t\t\t\t$required_inputs.each( function() {\n\t\t\t\t\tif ( $( this ).find( ':input' ).val() === '' ) {\n\t\t\t\t\t\thas_full_address = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// CHANGE: Removed if handling of different shipping address checkbox, always get shipping address values from shipping fields (see above)\n\n\t\t\tvar data = {\n\t\t\t\tsecurity : wc_checkout_params.update_order_review_nonce,\n\t\t\t\tpayment_method : wc_checkout_form.get_payment_method(),\n\t\t\t\tcountry : country,\n\t\t\t\tstate : state,\n\t\t\t\tpostcode : postcode,\n\t\t\t\tcity : city,\n\t\t\t\taddress : address,\n\t\t\t\taddress_2 : address_2,\n\t\t\t\ts_country : s_country,\n\t\t\t\ts_state : s_state,\n\t\t\t\ts_postcode : s_postcode,\n\t\t\t\ts_city : s_city,\n\t\t\t\ts_address : s_address,\n\t\t\t\ts_address_2 : s_address_2,\n\t\t\t\thas_full_address: has_full_address,\n\t\t\t\tpost_data : $( 'form.checkout' ).serialize()\n\t\t\t};\n\n\t\t\tif ( false !== args.update_shipping_method ) {\n\t\t\t\tvar shipping_methods = {};\n\n\t\t\t\t// eslint-disable-next-line max-len\n\t\t\t\t$( 'select.shipping_method, input[name^=\"shipping_method\"][type=\"radio\"]:checked, input[name^=\"shipping_method\"][type=\"hidden\"]' ).each( function() {\n\t\t\t\t\tshipping_methods[ $( this ).data( 'index' ) ] = $( this ).val();\n\t\t\t\t} );\n\n\t\t\t\tdata.shipping_method = shipping_methods;\n\t\t\t}\n\n\t\t\t// CHANGE: Define selector for blocking UI of sections as a variable, also block the shipping methods section when updating\n\t\t\tvar blockui_selector = _settings.checkoutBlockUISelector;\n\n\t\t\t// CHANGE: Add flag to indicate whether payment methods fragment should be refreshed\n\t\t\tif ( false === args.refresh_payment_methods ) {\n\t\t\t\tblockui_selector = blockui_selector.replace( '.woocommerce-checkout-payment, ', '' );\n\t\t\t\tdata.refresh_payment_methods = 'false';\n\t\t\t}\n\n\t\t\t// CHANGE: Use selector from settings to Block UI elements\n\t\t\t$( blockui_selector ).block({\n\t\t\t\tmessage: null,\n\t\t\t\toverlayCSS: {\n\t\t\t\t\tbackground: '#fff',\n\t\t\t\t\topacity: 0.6\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// CHANGE: Set body class for processing checkout update\n\t\t\tdocument.body.classList.add( 'fc-processing-update' );\n\n\t\t\twc_checkout_form.xhr = $.ajax({\n\t\t\t\ttype:\t\t'POST',\n\t\t\t\turl:\t\twc_checkout_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'update_order_review' ),\n\t\t\t\tdata:\t\tdata,\n\t\t\t\tsuccess:\tfunction( data ) {\n\n\t\t\t\t\t// Reload the page if requested\n\t\t\t\t\tif ( data && true === data.reload ) {\n\t\t\t\t\t\twindow.location.reload();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// CHANGE: Set global flag for processing checkout update\n\t\t\t\t\twindow.processing_checkout_update = true;\n\n\t\t\t\t\t// Remove any notices added previously\n\t\t\t\t\t$( '.woocommerce-NoticeGroup-updateOrderReview' ).remove();\n\n\t\t\t\t\t// CHANGE: replaced the terms checkbox css selector\n\t\t\t\t\tvar termsCheckBoxChecked = $( _settings.checkoutTermsSelector ).prop( 'checked' );\n\n\t\t\t\t\t// Save payment details to a temporary object\n\t\t\t\t\tvar paymentDetails = {};\n\t\t\t\t\t$( '.payment_box :input' ).each( function() {\n\t\t\t\t\t\tvar ID = $( this ).attr( 'id' );\n\n\t\t\t\t\t\tif ( ID ) {\n\t\t\t\t\t\t\tif ( $.inArray( $( this ).attr( 'type' ), [ 'checkbox', 'radio' ] ) !== -1 ) {\n\t\t\t\t\t\t\t\tpaymentDetails[ ID ] = $( this ).prop( 'checked' );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tpaymentDetails[ ID ] = $( this ).val();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t// CHANGE: Set variables for current focused element\n\t\t\t\t\tFCUtils.setCurrentFocusedElementGlobalVariables();\n\n\t\t\t\t\t// Always update the fragments\n\t\t\t\t\tif ( data && data.fragments ) {\n\t\t\t\t\t\t// CHANGE: Trigger custom event before fragments are replaced.\n\t\t\t\t\t\t$( document.body ).trigger( 'fc_checkout_fragments_replace_before', [ data ] );\n\n\t\t\t\t\t\t// CHANGE: Try to remove intl-tel-input components from existing fields before replacing fragments\n\t\t\t\t\t\tif ( window.intlTelInput && window.intlTelInputGlobals ) {\n\t\t\t\t\t\t\tvar allPhoneFields = document.querySelectorAll( _settings.phoneFieldSelector );\n\t\t\t\t\t\t\tfor ( var i = 0; i < allPhoneFields.length; i++ ) {\n\t\t\t\t\t\t\t\tvar field = allPhoneFields[i];\n\t\t\t\t\t\t\t\tvar phoneField = window.intlTelInputGlobals.getInstance( field );\n\t\t\t\t\t\t\t\tif ( phoneField ) {\n\t\t\t\t\t\t\t\t\tvar preservedValue = phoneField.getNumber();\n\t\t\t\t\t\t\t\t\tphoneField.destroy();\n\t\t\t\t\t\t\t\t\tfield.value = preservedValue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// CHANGE: END - Try to remove intl-tel-input components from existing fields before replacing fragments\n\n\t\t\t\t\t\t$.each( data.fragments, function ( key, value ) {\n\t\t\t\t\t\t\t// CHANGE: Declare local variables needed for some checks before replacing the fragment\n\t\t\t\t\t\t\tvar fragmentToReplace = document.querySelector( key );\n\t\t\t\t\t\t\tvar replaceFragment = true;\n\n\t\t\t\t\t\t\t// CHANGE: Maybe set to skip fragment with the focus within it. This avoids unexpected closing of mobile keyboard and lost of focus when updating fragments.\n\t\t\t\t\t\t\tif ( fragmentToReplace && window.fcCurrentFocusedElement.closest( key ) && window.fcCurrentFocusedElement.closest( _settings.focusedFieldSkipFragmentReplaceSelector ) ) {\n\t\t\t\t\t\t\t\treplaceFragment = false;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// CHANGE: Allow fragments to be replaced every time even when their contents are equal the existing elements in the DOM, this overseeds the check for focus within the fragment.\n\t\t\t\t\t\t\tif ( value && -1 !== value.toString().indexOf( 'fc-fragment-always-replace' ) ) {\n\t\t\t\t\t\t\t\treplaceFragment = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( replaceFragment && ( ! wc_checkout_form.fragments || wc_checkout_form.fragments[ key ] !== value ) ) {\n\t\t\t\t\t\t\t\t// CHANGE: Log replaced fragment to console if debug mode is enabled.\n\t\t\t\t\t\t\t\tif ( fcSettings.debugMode ) {\n\t\t\t\t\t\t\t\t\tconsole.log( 'Replacing fragment: ' + key );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t$( key ).replaceWith( value );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// CHANGE: Log skipped fragment to console if debug mode is enabled.\n\t\t\t\t\t\t\telse if ( fcSettings.debugMode ) {\n\t\t\t\t\t\t\t\tconsole.log( 'Skipping fragment: ' + key );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t$( key ).unblock();\n\t\t\t\t\t\t} );\n\t\t\t\t\t\twc_checkout_form.fragments = data.fragments;\n\n\t\t\t\t\t\t// CHANGE: Trigger custom event after fragments are replaced.\n\t\t\t\t\t\t$( document.body ).trigger( 'fc_checkout_fragments_replace_after', [ data ] );\n\t\t\t\t\t}\n\n\t\t\t\t\t// CHANGE: Unblock remaining blocked fragments after updating.\n\t\t\t\t\t$( _settings.checkoutBlockUISelector ).unblock();\n\n\t\t\t\t\t// CHANGE: Unset body class for processing checkout update\n\t\t\t\t\tdocument.body.classList.remove( 'fc-processing-update' );\n\n\t\t\t\t\t// CHANGE: Re-set focus to the element with focus previously to updating fragments\n\t\t\t\t\tFCUtils.maybeRefocusElement( window.fcCurrentFocusedElement, window.fcCurrentFocusedElementValue );\n\n\t\t\t\t\t// Recheck the terms and conditions box, if needed\n\t\t\t\t\tif ( termsCheckBoxChecked ) {\n\t\t\t\t\t\t// CHANGE: replaced the terms checkbox css selector\n\t\t\t\t\t\t$( _settings.checkoutTermsSelector ).prop( 'checked', true );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fill in the payment details if possible without overwriting data if set.\n\t\t\t\t\tif ( ! $.isEmptyObject( paymentDetails ) ) {\n\t\t\t\t\t\t$( '.payment_box :input' ).each( function() {\n\t\t\t\t\t\t\tvar ID = $( this ).attr( 'id' );\n\t\t\t\t\t\t\tif ( ID ) {\n\t\t\t\t\t\t\t\tif ( $.inArray( $( this ).attr( 'type' ), [ 'checkbox', 'radio' ] ) !== -1 ) {\n\t\t\t\t\t\t\t\t\t$( this ).prop( 'checked', paymentDetails[ ID ] ).trigger( 'change' );\n\t\t\t\t\t\t\t\t} else if ( $.inArray( $( this ).attr( 'type' ), [ 'select' ] ) !== -1 ) {\n\t\t\t\t\t\t\t\t\t$( this ).val( paymentDetails[ ID ] ).trigger( 'change' );\n\t\t\t\t\t\t\t\t} else if ( null !== $( this ).val() && 0 === $( this ).val().length ) {\n\t\t\t\t\t\t\t\t\t$( this ).val( paymentDetails[ ID ] ).trigger( 'change' );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check for error\n\t\t\t\t\tif ( data && 'failure' === data.result ) {\n\n\t\t\t\t\t\tvar $form = $( 'form.checkout' );\n\n\t\t\t\t\t\t// Remove notices from all sources\n\t\t\t\t\t\t$( '.woocommerce-error, .woocommerce-message' ).remove();\n\n\t\t\t\t\t\t// Add new errors returned by this event\n\t\t\t\t\t\tif ( data.messages ) {\n\t\t\t\t\t\t\t$form.prepend( '
' + data.messages + '
' ); // eslint-disable-line max-len\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$form.prepend( data );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Lose focus for all fields\n\t\t\t\t\t\t$form.find( '.input-text, select, input:checkbox' ).trigger( 'validate' ).trigger( 'blur' );\n\n\t\t\t\t\t\twc_checkout_form.scroll_to_notices();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Re-init methods\n\t\t\t\t\twc_checkout_form.init_payment_methods();\n\n\t\t\t\t\t// CHANGE: Unset global flag for processing checkout update\n\t\t\t\t\twindow.processing_checkout_update = false;\n\n\t\t\t\t\t// CHANGE: Set to not prompt user before leaving the page\n\t\t\t\t\t_updateBeforeUnload = false;\n\n\t\t\t\t\t// Fire updated_checkout event.\n\t\t\t\t\t$( document.body ).trigger( 'updated_checkout', [ data ] );\n\n\t\t\t\t\t// CHANGE: Unset current focused element and value\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\tFCUtils.unsetCurrentFocusedElementGlobalVariables();\n\t\t\t\t\t}, 60 );\n\n\t\t\t\t\t// CHANGE: Maybe remove loading class from form rows when completing the ajax request\n\t\t\t\t\twc_checkout_form.maybe_stop_form_row_loading_indicators();\n\t\t\t\t},\n\t\t\t\t// CHANGE: Maybe remove loading class from form rows when completing the ajax request\n\t\t\t\terror: function() {\n\t\t\t\t\twc_checkout_form.maybe_stop_form_row_loading_indicators();\n\t\t\t\t}\n\t\t\t\t// CHANGE: END - Maybe remove loading class from form rows when completing the ajax request\n\n\t\t\t});\n\t\t},\n\t\thandleUnloadEvent: function( e ) {\n\t\t\t// Modern browsers have their own standard generic messages that they will display.\n\t\t\t// Confirm, alert, prompt or custom message are not allowed during the unload event\n\t\t\t// Browsers will display their own standard messages\n\n\t\t\t// Check if the browser is Internet Explorer\n\t\t\tif((navigator.userAgent.indexOf('MSIE') !== -1 ) || (!!document.documentMode)) {\n\t\t\t\t// IE handles unload events differently than modern browsers\n\t\t\t\te.preventDefault();\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\t\tattachUnloadEventsOnSubmit: function() {\n\t\t\t$( window ).on('beforeunload', this.handleUnloadEvent);\n\t\t},\n\t\tdetachUnloadEventsOnSubmit: function() {\n\t\t\t$( window ).off('beforeunload', this.handleUnloadEvent);\n\t\t},\n\t\tblockOnSubmit: function( $form ) {\n\t\t\tvar isBlocked = $form.data( 'blockUI.isBlocked' );\n\n\t\t\tif ( 1 !== isBlocked ) {\n\t\t\t\t$form.block({\n\t\t\t\t\tmessage: null,\n\t\t\t\t\toverlayCSS: {\n\t\t\t\t\t\tbackground: '#fff',\n\t\t\t\t\t\topacity: 0.6\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tsubmitOrder: function() {\n\t\t\twc_checkout_form.blockOnSubmit( $( this ) );\n\t\t},\n\t\tsubmit: function() {\n\t\t\twc_checkout_form.reset_update_checkout_timer();\n\t\t\tvar $form = $( this );\n\n\t\t\tif ( $form.is( '.processing' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// CHANGE: Reset flag to update on `beforeunload`\n\t\t\t_updateBeforeUnload = false;\n\n\t\t\t// CHANGE: Mirror all field values\n\t\t\twc_checkout_form.maybe_mirror_all_address_field_values();\n\n\t\t\t// Trigger a handler to let gateways manipulate the checkout if needed\n\t\t\t// eslint-disable-next-line max-len\n\t\t\tif ( $form.triggerHandler( 'checkout_place_order', [ wc_checkout_form ] ) !== false && $form.triggerHandler( 'checkout_place_order_' + wc_checkout_form.get_payment_method(), [ wc_checkout_form ] ) !== false ) {\n\n\t\t\t\t$form.addClass( 'processing' );\n\n\t\t\t\t// CHANGE: Disable place order button\n\t\t\t\tvar currentFocusedElement = document.activeElement;\n\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).attr( 'disabled', 'disabled' );\n\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).addClass( 'disabled' );\n\t\t\t\tif ( 'yes' === _settings.checkoutPlaceOrderApplyLoadingClass ) {\n\t\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).addClass( _settings.loadingClass );\n\t\t\t\t}\n\t\t\t\t// END - Disable place order button\n\n\t\t\t\t// CHANGE: Block checkout update requests\n\t\t\t\twindow.can_update_checkout = false;\n\n\t\t\t\twc_checkout_form.blockOnSubmit( $form );\n\n\t\t\t\t// Attach event to block reloading the page when the form has been submitted\n\t\t\t\twc_checkout_form.attachUnloadEventsOnSubmit();\n\n\t\t\t\t// ajaxSetup is global, but we use it to ensure JSON is valid once returned.\n\t\t\t\t$.ajaxSetup( {\n\t\t\t\t\tdataFilter: function( raw_response, dataType ) {\n\t\t\t\t\t\t// We only want to work with JSON\n\t\t\t\t\t\tif ( 'json' !== dataType ) {\n\t\t\t\t\t\t\treturn raw_response;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( wc_checkout_form.is_valid_json( raw_response ) ) {\n\t\t\t\t\t\t\treturn raw_response;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Attempt to fix the malformed JSON\n\t\t\t\t\t\t\tvar maybe_valid_json = raw_response.match( /{\"result.*}/ );\n\n\t\t\t\t\t\t\tif ( null === maybe_valid_json ) {\n\t\t\t\t\t\t\t\tconsole.log( 'Unable to fix malformed JSON' );\n\t\t\t\t\t\t\t} else if ( wc_checkout_form.is_valid_json( maybe_valid_json[0] ) ) {\n\t\t\t\t\t\t\t\tconsole.log( 'Fixed malformed JSON. Original:' );\n\t\t\t\t\t\t\t\tconsole.log( raw_response );\n\t\t\t\t\t\t\t\traw_response = maybe_valid_json[0];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconsole.log( 'Unable to fix malformed JSON' );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn raw_response;\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\t$.ajax({\n\t\t\t\t\ttype:\t\t'POST',\n\t\t\t\t\turl:\t\twc_checkout_params.checkout_url,\n\t\t\t\t\tdata:\t\t$form.serialize(),\n\t\t\t\t\tdataType: 'json',\n\t\t\t\t\tsuccess:\tfunction( result ) {\n\t\t\t\t\t\t// Detach the unload handler that prevents a reload / redirect\n\t\t\t\t\t\twc_checkout_form.detachUnloadEventsOnSubmit();\n\n\t\t\t\t\t\t// CHANGE: Set to not prompt user before leaving the page\n\t\t\t\t\t\t_updateBeforeUnload = false;\n\n\t\t\t\t\t\t// CHANGE: Use event like trigger to allow other scripts to stop the code execution at this point\n\t\t\t\t\t\tvar eventResult = $( document.body ).triggerHandler( 'fc_checkout_request_place_order_success', [ result, wc_checkout_form ] );\n\t\t\t\t\t\tif ( eventResult === false ) {\n\t\t\t\t\t\t\t// CHANGE: Unblock checkout update requests\n\t\t\t\t\t\t\twindow.can_update_checkout = true;\n\n\t\t\t\t\t\t\t// CHANGE: Unblock the place order button\n\t\t\t\t\t\t\tif ( 'yes' === _settings.checkoutPlaceOrderApplyLoadingClass ) {\n\t\t\t\t\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).removeClass( _settings.loadingClass );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).removeAttr( 'disabled' );\n\t\t\t\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).removeClass( 'disabled' );\n\t\t\t\t\t\t\tFCUtils.maybeRefocusElement( currentFocusedElement );\n\t\t\t\t\t\t\t// END - Unblock the place order button\n\n\t\t\t\t\t\t\treturn; // Exit the function if the event returned value is false\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tif ( 'success' === result.result && $form.triggerHandler( 'checkout_place_order_success', [ result, wc_checkout_form ] ) !== false ) {\n\t\t\t\t\t\t\t\tif ( -1 === result.redirect.indexOf( 'https://' ) || -1 === result.redirect.indexOf( 'http://' ) ) {\n\t\t\t\t\t\t\t\t\twindow.location = result.redirect;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\twindow.location = decodeURI( result.redirect );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( 'failure' === result.result ) {\n\t\t\t\t\t\t\t\tthrow 'Result failure';\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow 'Invalid response';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch( err ) {\n\t\t\t\t\t\t\t// Reload page\n\t\t\t\t\t\t\tif ( true === result.reload ) {\n\t\t\t\t\t\t\t\twindow.location.reload();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// CHANGE: Unblock checkout update requests\n\t\t\t\t\t\t\twindow.can_update_checkout = true;\n\n\t\t\t\t\t\t\t// CHANGE: Unblock the place order button\n\t\t\t\t\t\t\tif ( 'yes' === _settings.checkoutPlaceOrderApplyLoadingClass ) {\n\t\t\t\t\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).removeClass( _settings.loadingClass );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).removeAttr( 'disabled' );\n\t\t\t\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).removeClass( 'disabled' );\n\t\t\t\t\t\t\tFCUtils.maybeRefocusElement( currentFocusedElement );\n\t\t\t\t\t\t\t// END - Unblock the place order button\n\n\t\t\t\t\t\t\t// Trigger update in case we need a fresh nonce\n\t\t\t\t\t\t\tif ( true === result.refresh ) {\n\t\t\t\t\t\t\t\t$( document.body ).trigger( 'update_checkout' );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Add new errors\n\t\t\t\t\t\t\tif ( result.messages ) {\n\t\t\t\t\t\t\t\twc_checkout_form.submit_error( result.messages );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twc_checkout_form.submit_error( '
' + wc_checkout_params.i18n_checkout_error + '
' ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\terror:\tfunction( jqXHR, textStatus, errorThrown ) {\n\t\t\t\t\t\t// CHANGE: Unblock checkout update requests\n\t\t\t\t\t\twindow.can_update_checkout = true;\n\n\t\t\t\t\t\t// CHANGE: Unblock the place order button\n\t\t\t\t\t\tif ( 'yes' === _settings.checkoutPlaceOrderApplyLoadingClass ) {\n\t\t\t\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).removeClass( _settings.loadingClass );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).removeAttr( 'disabled' );\n\t\t\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).removeClass( 'disabled' );\n\t\t\t\t\t\tFCUtils.maybeRefocusElement( currentFocusedElement );\n\t\t\t\t\t\t// END - Unblock the place order button\n\n\t\t\t\t\t\t// Detach the unload handler that prevents a reload / redirect\n\t\t\t\t\t\twc_checkout_form.detachUnloadEventsOnSubmit();\n\n\t\t\t\t\t\twc_checkout_form.submit_error(\n\t\t\t\t\t\t\t'
' +\n\t\t\t\t\t\t\t( errorThrown || wc_checkout_params.i18n_checkout_error ) +\n\t\t\t\t\t\t\t'
'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\t\tsubmit_error: function( error_message ) {\n\t\t\t$( '.woocommerce-NoticeGroup-checkout, .woocommerce-error, .woocommerce-message' ).remove();\n\t\t\twc_checkout_form.$checkout_form.prepend( '
' + error_message + '
' ); // eslint-disable-line max-len\n\t\t\twc_checkout_form.$checkout_form.removeClass( 'processing' ).unblock();\n\t\t\t// CHANGE: Unblock the place order button\n\t\t\t$( _settings.checkoutPlaceOrderSelector ).removeAttr( 'disabled' );\n\t\t\t$( _settings.checkoutPlaceOrderSelector ).removeClass( 'disabled' );\n\t\t\t// END - Unblock the place order button\n\t\t\twc_checkout_form.$checkout_form.find( '.input-text, select, input:checkbox' ).trigger( 'validate' ).trigger( 'blur' );\n\t\t\twc_checkout_form.scroll_to_notices();\n\t\t\t$( document.body ).trigger( 'checkout_error' , [ error_message ] );\n\t\t},\n\t\tscroll_to_notices: function() {\n\t\t\tvar scrollElement = $( '.woocommerce-NoticeGroup-updateOrderReview, .woocommerce-NoticeGroup-checkout' );\n\n\t\t\tif ( ! scrollElement.length ) {\n\t\t\t\tscrollElement = $( 'form.checkout' );\n\t\t\t}\n\t\t\t$.scroll_to_notices( scrollElement );\n\t\t}\n\t};\n\n\tvar wc_checkout_coupons = {\n\t\tinit: function() {\n\t\t\t$( document.body ).on( 'click', 'a.showcoupon', this.show_coupon_form );\n\t\t\t$( document.body ).on( 'click', '.woocommerce-remove-coupon', this.remove_coupon );\n\t\t\t$( 'form.checkout_coupon' ).hide().on( 'submit', this.submit );\n\t\t},\n\t\tshow_coupon_form: function() {\n\t\t\t$( '.checkout_coupon' ).slideToggle( 400, function() {\n\t\t\t\t$( '.checkout_coupon' ).find( ':input:eq(0)' ).trigger( 'focus' );\n\t\t\t});\n\t\t\treturn false;\n\t\t},\n\t\tsubmit: function() {\n\t\t\tvar $form = $( this );\n\n\t\t\tif ( $form.is( '.processing' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t$form.addClass( 'processing' ).block({\n\t\t\t\tmessage: null,\n\t\t\t\toverlayCSS: {\n\t\t\t\t\tbackground: '#fff',\n\t\t\t\t\topacity: 0.6\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar data = {\n\t\t\t\tsecurity:\t\twc_checkout_params.apply_coupon_nonce,\n\t\t\t\tcoupon_code:\t$form.find( 'input[name=\"coupon_code\"]' ).val()\n\t\t\t};\n\n\t\t\t$.ajax({\n\t\t\t\ttype:\t\t'POST',\n\t\t\t\turl:\t\twc_checkout_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'apply_coupon' ),\n\t\t\t\tdata:\t\tdata,\n\t\t\t\tsuccess:\tfunction( code ) {\n\t\t\t\t\t$( '.woocommerce-error, .woocommerce-message' ).remove();\n\t\t\t\t\t$form.removeClass( 'processing' ).unblock();\n\n\t\t\t\t\tif ( code ) {\n\t\t\t\t\t\t$form.before( code );\n\t\t\t\t\t\t$form.slideUp();\n\n\t\t\t\t\t\t$( document.body ).trigger( 'applied_coupon_in_checkout', [ data.coupon_code ] );\n\t\t\t\t\t\t$( document.body ).trigger( 'update_checkout', { update_shipping_method: false } );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdataType: 'html'\n\t\t\t});\n\n\t\t\treturn false;\n\t\t},\n\t\tremove_coupon: function( e ) {\n\t\t\t// CHANGE: Bail when Fluid Checkout integrated coupon code feature is enabled\n\t\t\tif ( _settings.checkoutCoupons && 'yes' === _settings.checkoutCoupons.isEnabled ) { return; }\n\n\t\t\te.preventDefault();\n\n\t\t\tvar container = $( this ).parents( '.woocommerce-checkout-review-order' ),\n\t\t\t\tcoupon = $( this ).data( 'coupon' );\n\n\t\t\tcontainer.addClass( 'processing' ).block({\n\t\t\t\tmessage: null,\n\t\t\t\toverlayCSS: {\n\t\t\t\t\tbackground: '#fff',\n\t\t\t\t\topacity: 0.6\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar data = {\n\t\t\t\tsecurity: wc_checkout_params.remove_coupon_nonce,\n\t\t\t\tcoupon: coupon\n\t\t\t};\n\n\t\t\t$.ajax({\n\t\t\t\ttype: 'POST',\n\t\t\t\turl: wc_checkout_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'remove_coupon' ),\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: function( code ) {\n\t\t\t\t\t$( '.woocommerce-error, .woocommerce-message' ).remove();\n\t\t\t\t\tcontainer.removeClass( 'processing' ).unblock();\n\n\t\t\t\t\tif ( code ) {\n\t\t\t\t\t\t$( 'form.woocommerce-checkout' ).before( code );\n\n\t\t\t\t\t\t$( document.body ).trigger( 'removed_coupon_in_checkout', [ data.coupon ] );\n\t\t\t\t\t\t$( document.body ).trigger( 'update_checkout', { update_shipping_method: false } );\n\n\t\t\t\t\t\t// Remove coupon code from coupon field\n\t\t\t\t\t\t$( 'form.checkout_coupon' ).find( 'input[name=\"coupon_code\"]' ).val( '' );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\terror: function ( jqXHR ) {\n\t\t\t\t\tif ( wc_checkout_params.debug_mode ) {\n\t\t\t\t\t\t/* jshint devel: true */\n\t\t\t\t\t\tconsole.log( jqXHR.responseText );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdataType: 'html'\n\t\t\t});\n\t\t}\n\t};\n\n\tvar wc_checkout_login_form = {\n\t\tinit: function() {\n\t\t\t$( document.body ).on( 'click', 'a.showlogin', this.show_login_form );\n\t\t},\n\t\tshow_login_form: function() {\n\t\t\t$( 'form.login, form.woocommerce-form--login' ).slideToggle();\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tvar wc_terms_toggle = {\n\t\tinit: function() {\n\t\t\t$( document.body ).on( 'click', 'a.woocommerce-terms-and-conditions-link', this.toggle_terms );\n\t\t},\n\n\t\ttoggle_terms: function() {\n\t\t\tif ( $( '.woocommerce-terms-and-conditions' ).length ) {\n\t\t\t\t$( '.woocommerce-terms-and-conditions' ).slideToggle( function() {\n\t\t\t\t\tvar link_toggle = $( '.woocommerce-terms-and-conditions-link' );\n\n\t\t\t\t\tif ( $( '.woocommerce-terms-and-conditions' ).is( ':visible' ) ) {\n\t\t\t\t\t\tlink_toggle.addClass( 'woocommerce-terms-and-conditions-link--open' );\n\t\t\t\t\t\tlink_toggle.removeClass( 'woocommerce-terms-and-conditions-link--closed' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlink_toggle.removeClass( 'woocommerce-terms-and-conditions-link--open' );\n\t\t\t\t\t\tlink_toggle.addClass( 'woocommerce-terms-and-conditions-link--closed' );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t};\n\n\twc_checkout_form.init();\n\twc_checkout_coupons.init();\n\twc_checkout_login_form.init();\n\twc_terms_toggle.init();\n});\n"],"names":["jQuery","$","wc_checkout_params","_updateBeforeUnload","window","can_update_checkout","_settings","formRowSelector","checkoutPlaceOrderSelector","checkoutTermsSelector","checkoutUpdateFieldsSelector","checkoutLoadingInputSelector","focusedFieldSkipFragmentReplaceSelector","phoneFieldSelector","loginButtonSelector","emailFieldSelector","usernameFieldSelector","sameAsCheckboxSelector","sameAsCheckboxAvailableSelector","addressFieldsSectionSelector","addressFieldsSectionSelectorTemplate","addressFieldsWrapperSelector","addressFieldsToMirrorSelector","loadingClass","checkoutBlockUISelector","checkoutPlaceOrderApplyLoadingClass","checkoutUpdateBeforeUnload","checkoutUpdateOnVisibilityChange","wc_checkout_form","updateTimer","blockUI","defaults","overlayCSS","cursor","dirtyInput","selectedPaymentMethod","xhr","$order_review","$checkout_form","init","fcSettings","FCUtils","extendObject","checkout","document","body","on","this","update_checkout","init_checkout","set_autocomplete_attribute_from_data","payment_method_selected","hasClass","submitOrder","attr","submit","CheckoutValidation","validate_field","trigger_update_checkout","input_changed","maybe_input_changed","queue_update_checkout","addEventListener","debounce","maybe_update_checkout_visibility_change","maybe_prevent_unload","same_as_address_checkbox_changed","maybe_reinitialize_collapsible_blocks","maybe_reinitialize_flyout_blocks","terms_checked_changed","init_payment_methods","is_checkout","trigger","option_guest_checkout","toggle_create_account","maybe_copy_email_to_login_form","FCEnhancedSelect","init_enhanced_dropdowns","enhanceFields","is_same_as_address_option_checked","fieldGroup","isCheckboxAvailableField","sameAsCheckbox","fieldsSectionSelector","replace","fieldsSection","querySelector","value","getAttribute","checked","e","target","closest","fieldsWrapper","id","indexOf","CollapsibleBlock","collapse","expand","block","message","background","opacity","mirror_address_field_value","field","mirrorFieldGroup","mirrorFieldGroupElement","mirrorFieldKey","mirrorField","matches","fieldKey","maybe_mirror_all_address_field_values","targetFieldGroup","originFieldGroup","originFieldsSectionSelector","originFieldsSection","originFieldsWrapper","originAddressFields","querySelectorAll","i","length","originField","collapsibleBlock","collapsibleBlocks","getInstance","initializeElement","FlyoutBlock","initTriggers","visibilityState","refresh_payment_methods","preventUnload","preventDefault","returnValue","removeEventListener","$payment_methods","find","checkedPaymentMethod","eq","hide","prop","filter","slideUp","get_payment_method","val","stopPropagation","target_payment_box","is_checked","is","slideDown","show","data","text","classList","remove","add","createAccountBlock","checkbox","usernameField","billingEmailField","each","termsCheckBoxChecked","maybe_set_form_row_loading","formRow","maybe_stop_form_row_loading_indicators","maybeLoadingFields","maybe_update_checkout","code","key","keyboardKeys","TAB","SHIFT","CONTROL","ALT","COMMAND_OR_WINDOWS","ARROW_LEFT","ARROW_RIGHT","ARROW_UP","ARROW_DOWN","reset_update_checkout_timer","setTimeout","$required_inputs","update_totals","clearTimeout","is_valid_json","raw_json","json","JSON","parse","$this","$parent","validated","validate_required","validate_email","validate_phone","pattern","event_type","type","removeClass","addClass","RegExp","test","event","args","update_checkout_action","state","postcode","city","address","address_2","s_country","s_state","s_postcode","s_city","s_address","s_address_2","has_full_address","shipping_methods","blockui_selector","abort","update_shipping_method","country","security","update_order_review_nonce","payment_method","post_data","serialize","shipping_method","ajax","url","wc_ajax_url","toString","success","reload","location","processing_checkout_update","paymentDetails","ID","inArray","setCurrentFocusedElementGlobalVariables","fragments","intlTelInput","intlTelInputGlobals","allPhoneFields","preservedValue","phoneField","getNumber","destroy","replaceFragment","fcCurrentFocusedElement","debugMode","console","log","replaceWith","unblock","maybeRefocusElement","fcCurrentFocusedElementValue","isEmptyObject","result","$form","messages","prepend","scroll_to_notices","unsetCurrentFocusedElementGlobalVariables","error","handleUnloadEvent","navigator","userAgent","documentMode","attachUnloadEventsOnSubmit","detachUnloadEventsOnSubmit","off","blockOnSubmit","currentFocusedElement","triggerHandler","activeElement","ajaxSetup","dataFilter","raw_response","dataType","maybe_valid_json","match","checkout_url","removeAttr","redirect","decodeURI","err","refresh","submit_error","i18n_checkout_error","jqXHR","textStatus","errorThrown","error_message","scrollElement","wc_checkout_coupons","show_coupon_form","remove_coupon","slideToggle","apply_coupon_nonce","coupon_code","before","container","checkoutCoupons","isEnabled","parents","coupon","remove_coupon_nonce","debug_mode","responseText","wc_checkout_login_form","show_login_form","wc_terms_toggle","toggle_terms","link_toggle"],"mappings":"AAOAA,OAAQ,SAAUC,GAGjB,GAAmC,aAA9B,OAAOC,mBACX,MAAO,CAAA,EAOR,IAAIC,EAAsB,EAH1BC,OAAOC,oBAAsB,CAAA,GAMzBC,EAAY,CACfC,gBAA8C,YAC9CC,2BAA8C,uCAC9CC,sBAA8C,qBAC9CC,6BAA8C,6EAC9CC,6BAA8C,gDAC9CC,wCAA8C,8XAC9CC,mBAA8C,qFAC9CC,oBAA8C,4BAC9CC,mBAA8C,wDAC9CC,sBAA8C,+CAE9CC,uBAA8C,uDAC9CC,gCAA8C,2EAC9CC,6BAA8C,4DAC9CC,qCAA8C,wCAC9CC,6BAA8C,0FAC9CC,8BAA8C,0BAE9CC,aAA8C,aAC9CC,wBAA8C,+DAE9CC,oCAA8C,MAC9CC,2BAA8C,MAC9CC,iCAA8C,KAC/C,EAKIC,EAAmB,CACtBC,YAAa,EAHd5B,EAAE6B,QAAQC,SAASC,WAAWC,OAAS,WAItCC,WAAY,CAAA,EACZC,sBAAuB,CAAA,EACvBC,IAAK,CAAA,EACLC,cAAepC,EAAG,eAAgB,EAClCqC,eAAgBrC,EAAG,eAAgB,EACnCsC,KAAM,WAEAnC,OAAOoC,aACXlC,EAAYmC,QAAQC,aAAc,CAAA,EAAMpC,EAAWF,OAAOoC,WAAWG,QAAS,GAG/E1C,EAAG2C,SAASC,IAAK,EAAEC,GAAI,kBAAmBC,KAAKC,eAAgB,EAC/D/C,EAAG2C,SAASC,IAAK,EAAEC,GAAI,gBAAiBC,KAAKE,aAAc,EAG3DhD,EAAG2C,SAASC,IAAK,EAAEC,GAAI,gBAAiBC,KAAKG,oCAAqC,EAClFjD,EAAG2C,SAASC,IAAK,EAAEC,GAAI,mBAAoBC,KAAKG,oCAAqC,EAGrFH,KAAKT,eAAeQ,GAAI,QAAS,+BAAgCC,KAAKI,uBAAwB,EAEzFlD,EAAG2C,SAASC,IAAK,EAAEO,SAAU,uBAAwB,IACzDL,KAAKV,cAAcS,GAAI,QAAS,+BAAgCC,KAAKI,uBAAwB,EAC7FJ,KAAKV,cAAcS,GAAI,SAAUC,KAAKM,WAAY,EAClDN,KAAKV,cAAciB,KAAM,aAAc,YAAa,GAIrDP,KAAKT,eAAegB,KAAM,aAAc,YAAa,EAGrDP,KAAKT,eAAeQ,GAAI,SAAUC,KAAKQ,MAAO,EAGvCnD,OAAOoD,oBAEbT,KAAKT,eAAeQ,GAAI,wBAAyB,sCAAuCC,KAAKU,cAAe,EAI7GV,KAAKT,eAAeQ,GAAI,SAAUC,KAAKW,uBAAwB,EAI/DX,KAAKT,eAAeQ,GAAI,SAAU,8OAA+OC,KAAKW,uBAAwB,EAC9SX,KAAKT,eAAeQ,GAAI,SAAU,wBAAyBC,KAAKY,aAAc,EAG9EZ,KAAKT,eAAeQ,GAAI,SAAUxC,EAAUI,6BAA8BqC,KAAKa,mBAAoB,EACnGb,KAAKT,eAAeQ,GAAI,UAAWxC,EAAUI,6BAA8BqC,KAAKc,qBAAsB,EAMtGjB,SAASkB,iBAAkB,mBAAoBrB,QAAQsB,SAAUhB,KAAKiB,wCAAyC,EAAG,CAAE,EAG/G,QAAU1D,EAAUoB,4BACxBqB,KAAKT,eAAeQ,GAAI,gBAAiB,0BAA2BC,KAAKkB,oBAAqB,EAI/FlB,KAAKT,eAAeQ,GAAI,SAAUxC,EAAUW,uBAAwB8B,KAAKmB,gCAAiC,EAG1GjE,EAAG2C,SAASC,IAAK,EAAEC,GAAI,mBAAoBC,KAAKoB,qCAAsC,EACtFlE,EAAG2C,SAASC,IAAK,EAAEC,GAAI,mBAAoBC,KAAKqB,gCAAiC,EAGjFrB,KAAKT,eAAeQ,GAAI,SAAUxC,EAAUG,sBAAuBsC,KAAKsB,qBAAsB,EAI9FtB,KAAKuB,qBAAqB,EAGc,MAAnCpE,mBAAmBqE,aACvBtE,EAAG2C,SAASC,IAAK,EAAE2B,QAAS,eAAgB,EAEK,QAA7CtE,mBAAmBuE,uBAEvB7B,SAASkB,iBAAkB,SAAUf,KAAK2B,sBAAuB,CAAA,CAAK,EAIvE9B,SAASkB,iBAAkB,QAASf,KAAK4B,+BAAgC,CAAA,CAAK,EAGzEvE,OAAOwE,mBACX7B,KAAK8B,wBAAwB,EAC7B5E,EAAG2C,SAASC,IAAK,EAAEC,GAAI,sCAAuCC,KAAK8B,uBAAwB,EAE7F,EAEAA,wBAAyB,WACxBD,iBAAiBE,cAAc,CAChC,EAEAC,kCAAmC,SAAUC,GAE5C,IAUIC,EAMAC,EAhBJ,MAAA,EAAK,YAAcF,GAAc,aAAeA,IAG5CG,EAAwB7E,EAAUc,qCAAqCgE,QAAS,oBAAqBJ,CAAW,EAI7GK,EAHHA,EAAgBzC,SAAS0C,cAAeH,CAAsB,MAM9DF,EAA2BI,EAAcC,cAAehF,EAAUY,+BAAgC,IAGrE,MAAQ+D,EAAyBM,OAM3DL,EAHHA,EAAiBG,EAAcC,cAAehF,EAAUW,sBAAuB,MAa7E,WAPkBiE,EAAeM,aAAc,MAAO,EAQ9C,MAAQN,EAAeK,MAGvBL,EAAeO,QAK9B,EAEAvB,iCAAkC,SAAUwB,GAE3C,IAAIL,EAAgBK,EAAEC,OAAOC,QAAStF,EAAUa,4BAA6B,EACzE0E,EAAgBR,EAAgBA,EAAcC,cAAehF,EAAUe,4BAA6B,EAAI,KACxG6D,EAAiBG,EAAgBA,EAAcC,cAAehF,EAAUW,sBAAuB,EAAI,KACnG+D,EAAaE,GAAkB,IAAMA,EAAeY,GAAGC,QAAS,SAAU,EAAI,UAAY,WAGzF3F,OAAO4F,kBAAoBd,GAAkBW,IAE1CjE,EAAiBmD,kCAAmCC,CAAW,EAerEgB,iBAAiBC,SAAUJ,CAAc,GAbzCG,iBAAiBE,OAAQL,CAAc,EAGvC5F,EAAG4F,CAAc,EAAEM,MAAM,CACxBC,QAAS,KACTpE,WAAY,CACXqE,WAAY,OACZC,QAAS,EACV,CACD,CAAC,IASHrG,EAAG2C,SAASC,IAAK,EAAE2B,QAAS,iBAAkB,CAC/C,EAEA+B,2BAA4B,SAAUC,GAErC,IAUIC,EACAC,EAYAC,EACAC,EAxBGJ,GAAWA,EAAMK,QAASvG,EAAUgB,6BAA8B,IAMpE,EAHDwF,EAAWN,EAAMhB,aAAc,MAAO,IAGrB,IAAMsB,EAASf,QAAS,UAAW,GAAK,IAAMe,EAASf,QAAS,WAAY,IAI7FU,EAAmB,YADnBzB,EAAa,IAAM8B,EAASf,QAAS,UAAW,EAAI,UAAY,YAClB,WAAa,WAC3DW,EAA0B9D,SAAS0C,cAAe,gBAAkBmB,EAAmB,wBAAyB,IAMvF7E,EAAiBmD,kCAAmC0B,CAAiB,IAM9FE,EAAiBG,EAAS1B,QAASJ,EAAa,IAAKyB,EAAmB,GAAI,EAC5EG,EAAcF,EAAwBpB,cAAe,UAAYqB,EAAiB,IAAK,KAM3FC,EAAYrB,MAAQiB,EAAMjB,QAC3B,EAEAwB,sCAAuC,WAEtC,IAAI7B,EAAiBtC,SAAS0C,cAAehF,EAAUW,sBAAuB,EAG9E,GAAOiE,EAAP,CAGA,IAAI8B,EAAmB,IAAM9B,EAAeY,GAAGC,QAAS,SAAU,EAAI,UAAY,WAC9EkB,EAAmB,WAAcD,EAAmB,WAAa,UAMrE,GAH6BpF,EAAiBmD,kCAAmCiC,CAAiB,EAGlG,CAGIE,EAA8B5G,EAAUc,qCAAqCgE,QAAS,oBAAqB6B,CAAiB,EAC5HE,EAAsBvE,SAAS0C,cAAe4B,CAA4B,EAC1EE,EAAsBD,EAAsBA,EAAoB7B,cAAehF,EAAUe,4BAA6B,EAAI,KAG9H,GAAO8F,GAAyBC,EAShC,IAHA,IAAIC,EAAsBD,EAAoBE,iBAAkBhH,EAAUgB,6BAA8B,EAG9FiG,EAAI,EAAGA,EAAIF,EAAoBG,OAAQD,CAAC,GAAK,CACtD,IAAIE,EAAcJ,EAAqBE,GACvC3F,EAAiB2E,2BAA4BkB,CAAY,CAC1D,CApB0C,CAVR,CA+BnC,EAEAtD,sCAAuC,WAEtC,GAAO/D,OAAO4F,iBAAd,CAGAA,iBAAiBzD,KAAMnC,OAAOoC,WAAaA,WAAWkF,iBAAmB,IAAK,EAG9E,IADA,IAAIC,EAAoB/E,SAAS0E,iBAAkB,oBAAqB,EAC9DC,EAAI,EAAGA,EAAII,EAAkBH,OAAQD,CAAC,GAAK,CACpD,IAAIG,EAAmBC,EAAkBJ,GAGlCvB,iBAAiB4B,YAAaF,CAAiB,GACrD1B,iBAAiB6B,kBAAmBH,CAAiB,CAEvD,CAb2C,CAc5C,EAEAtD,iCAAkC,WAE1BhE,OAAO0H,aAEdA,YAAYC,aAAa,CAC1B,EAEA/D,wCAAyC,WAEnC,QAAU1D,EAAUqB,kCAGpB,UAAYiB,SAASoF,iBAAmB,WAAapF,SAASoF,iBAClE/H,EAAG2C,SAASC,IAAK,EAAE2B,QAAS,kBAAmB,CAAEyD,wBAAyB,CAAA,CAAM,CAAE,CAEpF,EAEAhE,qBAAsB,SAAUyB,GAE/B,IAIKwC,EAJAxC,GAAKA,EAAEC,OAAOC,QAAS,mCAAoC,GAEzDzF,IAEF+H,EAAgB,SAAUxC,GAExBvF,IACJuF,EAAEyC,eAAe,EACjBzC,EAAE0C,YAAc,GAGhBnI,EAAG2C,SAASC,IAAK,EAAE2B,QAAS,iBAAkB,EAG9CrE,EAAsB,CAAA,EACtBC,OAAOiI,oBAAqB,eAAgBH,CAAc,EAE5D,EAEA9H,OAAO0D,iBAAkB,eAAgBoE,CAAc,EACvD/H,EAAsB,CAAA,EAExB,EACAmE,qBAAsB,WACrB,IAAIgE,EAAmBrI,EAAG,uBAAwB,EAAEsI,KAAM,8BAA+B,EAkBrFC,GAfC,IAAMF,EAAiBd,QAC3Bc,EAAiBG,GAAG,CAAC,EAAEC,KAAK,EAIxB9G,EAAiBO,uBACrBlC,EAAG,IAAM2B,EAAiBO,qBAAsB,EAAEwG,KAAM,UAAW,CAAA,CAAK,EAIpE,IAAML,EAAiBM,OAAQ,UAAW,EAAEpB,QAChDc,EAAiBG,GAAG,CAAC,EAAEE,KAAM,UAAW,CAAA,CAAK,EAInBL,EAAiBM,OAAQ,UAAW,EAAEH,GAAG,CAAC,EAAEE,KAAM,IAAK,GAEnD,EAA1BL,EAAiBd,QAErBvH,EAAG,yBAA2BuI,EAAuB,IAAK,EAAEI,OAAQ,UAAW,EAAEC,QAAS,CAAE,EAI7FP,EAAiBM,OAAQ,UAAW,EAAEH,GAAG,CAAC,EAAEjE,QAAS,OAAQ,CAC9D,EACAsE,mBAAoB,WACnB,OAAOlH,EAAiBU,eAAeiG,KAAM,sCAAuC,EAAEQ,IAAI,CAC3F,EACA5F,wBAAyB,SAAUuC,GAClCA,EAAEsD,gBAAgB,EAEsC,EAAnD/I,EAAG,oCAAqC,EAAEuH,QAC1CyB,EAAqBhJ,EAAG,mBAAqBA,EAAG8C,IAAK,EAAEO,KAAM,IAAK,CAAE,GACvE4F,EAAqBjJ,EAAG8C,IAAK,EAAEoG,GAAI,UAAW,IAE5B,CAAEF,EAAmBE,GAAI,UAAW,IACtDlJ,EAAG,iBAAkB,EAAE2I,OAAQ,UAAW,EAAEC,QAAS,GAAI,EAEpDK,IACJD,EAAmBG,UAAW,GAAI,GAIpCnJ,EAAG,iBAAkB,EAAEoJ,KAAK,EAGxBpJ,EAAG8C,IAAK,EAAEuG,KAAM,mBAAoB,EAExCrJ,EAAGK,EAAUE,0BAA2B,EAAE+I,KAAMtJ,EAAG8C,IAAK,EAAEuG,KAAM,mBAAoB,CAAE,EAGtFrJ,EAAGK,EAAUE,0BAA2B,EAAE+I,KAAMtJ,EAAGK,EAAUE,0BAA2B,EAAE8I,KAAM,OAAQ,CAAE,EApB3G,IAuBInH,EAAwBlC,EAAG,4DAA6D,EAAEqD,KAAM,IAAK,EAEpGnB,IAA0BP,EAAiBO,uBAC/ClC,EAAG2C,SAASC,IAAK,EAAE2B,QAAS,yBAA0B,EAIvD5B,SAASC,KAAK2G,UAAUC,OAAQ,gCAAkC7H,EAAiBO,qBAAsB,EACzGS,SAASC,KAAK2G,UAAUE,IAAK,gCAAkCvH,CAAsB,EAErFP,EAAiBO,sBAAwBA,CAC1C,EAEAuC,sBAAuB,SAAUgB,GAGhC,IAMIiE,EANGjE,EAAEC,QAAYD,EAAEC,OAAOkB,QAAS,qBAAsB,GAGtDzG,OAAO4F,mBAEV4D,EAAWhH,SAAS0C,cAAe,qBAAsB,EACzDqE,EAAqB/G,SAAS0C,cAAe,oBAAqB,EAGjEsE,EAASnE,QACbO,iBAAiBE,OAAQyD,CAAmB,EAG5C3D,iBAAiBC,SAAU0D,CAAmB,EAGhD,EAEAhF,+BAAgC,SAAUe,GAGzC,IAGImE,EAHGnE,EAAEC,QAAYD,EAAEC,OAAOC,QAAStF,EAAUQ,mBAAoB,IAEjEgJ,EAAoBlH,SAAS0C,cAAehF,EAAUS,kBAAmB,EACzE8I,EAAgBjH,SAAS0C,cAAehF,EAAUU,qBAAsB,EAGvE8I,IAAqBD,IACzBA,EAActE,MAAQuE,EAAkBvE,MAE1C,EAEAtC,cAAe,WACdhD,EAAG2C,SAASC,IAAK,EAAE2B,QAAS,iBAAkB,CAC/C,EACAZ,oBAAqB,SAAU8B,GACzB9D,EAAiBM,YACrBN,EAAiB+B,cAAe+B,CAAE,CAEpC,EAEAxC,qCAAsC,SAAUwC,GACjCzF,EAAG,eAAgB,EAAEsI,KAAM,yBAA0B,EAC3DwB,KAAM,WACR9J,EAAG8C,IAAK,EAAEO,KAAM,mBAAoB,GACxCrD,EAAG8C,IAAK,EAAEO,KAAM,eAAgBrD,EAAG8C,IAAK,EAAEO,KAAM,mBAAoB,CAAE,CAExE,CAAE,CACH,EAEAe,sBAAuB,SAAUqB,GAC5BsE,EAAuB/J,EAAGyF,EAAEC,MAAO,EAAEgD,KAAM,SAAU,EACzD1I,EAAGK,EAAUG,qBAAsB,EAAEkI,KAAM,UAAWqB,CAAqB,CAC5E,EAEAC,2BAA4B,SAAUvE,GAChCA,EAAEC,QAAUD,EAAEC,OAAOkB,QAASvG,EAAUK,4BAA6B,IACrEuJ,EAAUxE,EAAEC,OAAOC,QAAStF,EAAUC,eAAgB,IAEzD2J,EAAQV,UAAUE,IAAKpJ,EAAUiB,YAAa,CAGjD,EAEA4I,uCAAwC,WAEvC,IADA,IAAIC,EAAqBxH,SAAS0E,iBAAkBhH,EAAUK,4BAA6B,EACjF4G,EAAI,EAAGA,EAAI6C,EAAmB5C,OAAQD,CAAC,GAAK,CACrD,IACI2C,EADQE,EAAoB7C,GACZ3B,QAAStF,EAAUC,eAAgB,EAClD2J,GACJA,EAAQV,UAAUC,OAAQnJ,EAAUiB,YAAa,CAEnD,CACD,EACAoC,cAAe,SAAU+B,GACxB9D,EAAiBM,WAAawD,EAAEC,OAChC/D,EAAiByI,sBAAsB,EAEvCzI,EAAiBqI,2BAA4BvE,CAAE,CAChD,EACA7B,sBAAuB,SAAU6B,GAEhC,IAAI4E,EAAO5E,EAAE6E,IAGb,GAAK9H,QAAQ+H,aAAaC,MAAQH,GAAQ7H,QAAQ+H,aAAaE,QAAUJ,GAAQ7H,QAAQ+H,aAAaG,UAAYL,GAAQ7H,QAAQ+H,aAAaI,MAAQN,GAAQ7H,QAAQ+H,aAAaK,qBAAuBP,GAAQ7H,QAAQ+H,aAAaM,aAAeR,GAAQ7H,QAAQ+H,aAAaO,cAAgBT,GAAQ7H,QAAQ+H,aAAaQ,WAAaV,GAAQ7H,QAAQ+H,aAAaS,aAAeX,EACzX,MAAO,CAAA,EAGR1I,EAAiBM,WAAaa,KAC9BnB,EAAiBsJ,4BAA4B,EAC7CtJ,EAAiBC,YAAcsJ,WAAYvJ,EAAiByI,sBAAuB,MAAO,EAE1FzI,EAAiBqI,2BAA4BvE,CAAE,CAChD,EACAhC,wBAAyB,WACxB9B,EAAiBsJ,4BAA4B,EAC7CtJ,EAAiBM,WAAa,CAAA,EAC9BjC,EAAG2C,SAASC,IAAK,EAAE2B,QAAS,iBAAkB,CAC/C,EACA6F,sBAAuB,WACtB,IAGKe,EAHDC,EAAgB,CAAA,EAEfpL,EAAG2B,EAAiBM,UAAW,EAAEsF,SACjC4D,EAAmBnL,EAAG2B,EAAiBM,UAAW,EAAE0D,QAAS,KAAM,EAAE2C,KAAM,kCAAmC,GAE5Ff,QACrB4D,EAAiBrB,KAAM,WAC8B,KAA/C9J,EAAG8C,IAAK,EAAEwF,KAAM,kBAAmB,EAAEQ,IAAI,IAC7CsC,EAAgB,CAAA,EAElB,CAAC,EAGEA,GACJzJ,EAAiB8B,wBAAwB,CAE3C,EAEAwH,4BAA6B,WAC5BI,aAAc1J,EAAiBC,WAAY,CAC5C,EACA0J,cAAe,SAAUC,GACxB,IACC,IAAIC,EAAOC,KAAKC,MAAOH,CAAS,EAEhC,OAASC,GAAQ,UAAa,OAAOA,CAGtC,CAFE,MAAQ/F,GACT,MAAO,CAAA,CACR,CACD,EACAjC,eAAgB,SAAUiC,GACzB,IAAIkG,EAAoB3L,EAAG8C,IAAK,EAC/B8I,EAAoBD,EAAMhG,QAAS,WAAY,EAC/CkG,EAAoB,CAAA,EACpBC,EAAoBF,EAAQ1C,GAAI,oBAAqB,EACrD6C,EAAoBH,EAAQ1C,GAAI,iBAAkB,EAClD8C,EAAoBJ,EAAQ1C,GAAI,iBAAkB,EAClD+C,EAAoB,GACpBC,EAAoBzG,EAAE0G,KAElB,UAAYD,GAChBN,EAAQQ,YAAa,kIAAmI,EAGpJ,aAAeF,GAAc,WAAaA,IAEzCJ,IACC,aAAeH,EAAMtI,KAAM,MAAO,GAAOsI,CAAAA,EAAMzC,GAAI,UAAW,GAGvC,KAAhByC,EAAM7C,IAAI,KAFrB8C,EAAQQ,YAAa,uBAAwB,EAAEC,SAAU,wDAAyD,EAClHR,EAAY,CAAA,GAOTE,GACCJ,EAAM7C,IAAI,GAIPmD,EAFPA,EAAU,IAAIK,OAAQ,mvBAAovB,GAE3vBC,KAAMZ,EAAM7C,IAAI,CAAE,IAChC8C,EAAQQ,YAAa,uBAAwB,EAAEC,SAAU,yEAA0E,EACnIR,EAAY,CAAA,GAKVG,IACJC,EAAU,IAAIK,OAAQ,yBAA0B,EAE3C,EAAIX,EAAM7C,IAAI,EAAE3D,QAAS8G,EAAS,EAAG,EAAE1E,UAC3CqE,EAAQQ,YAAa,uBAAwB,EAAEC,SAAU,+CAAgD,EACzGR,EAAY,CAAA,GAITA,GACJD,EAAQQ,YAAa,4GAA6G,EAAEC,SAAU,uBAAwB,EAGzK,EACAtJ,gBAAiB,SAAUyJ,EAAOC,GAEjC9K,EAAiBmF,sCAAsC,EAGvDnF,EAAiBsJ,4BAA4B,EAC7CtJ,EAAiBC,YAAcsJ,WAAYvJ,EAAiB+K,uBAAwB,IAAKD,CAAK,CAC/F,EACAC,uBAAwB,SAAUD,GAEjC,IAeCE,EACAC,EACAC,EACAC,EACAC,EAEAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAGAC,EAYGjE,EAoBCkE,EAWDC,EAxEGrN,OAAOC,sBAETuB,EAAiBQ,KACrBR,EAAiBQ,IAAIsL,MAAM,EAGS,IAAhCzN,EAAG,eAAgB,EAAEuH,UAI1BkF,EAAuB,KAAA,IAATA,EAAuBA,EAAO,CAC3CiB,uBAAwB,CAAA,CACzB,EAEIC,EAAa3N,EAAG,kBAAmB,EAAE8I,IAAI,EAC5C6D,EAAW3M,EAAG,gBAAiB,EAAE8I,IAAI,EACrC8D,EAAa5M,EAAG,yBAA0B,EAAE8I,IAAI,EAChD+D,EAAU7M,EAAG,eAAgB,EAAE8I,IAAI,EACnCgE,EAAa9M,EAAG,0BAA2B,EAAE8I,IAAI,EACjDiE,EAAc/M,EAAG,0BAA2B,EAAE8I,IAAI,EAElDkE,EAAchN,EAAG,mBAAoB,EAAE8I,IAAI,EAC3CmE,EAAajN,EAAG,iBAAkB,EAAE8I,IAAI,EACxCoE,EAAelN,EAAG,0BAA2B,EAAE8I,IAAI,EACnDqE,EAAYnN,EAAG,gBAAiB,EAAE8I,IAAI,EACtCsE,EAAcpN,EAAG,2BAA4B,EAAE8I,IAAI,EACnDuE,EAAgBrN,EAAG,2BAA4B,EAAE8I,IAAI,EAErDqC,EAAmBnL,EAAG2B,EAAiBU,cAAe,EAAEiG,KAAM,0CAA2C,EACzGgF,EAAmB,CAAA,EAEfnC,EAAiB5D,QACrB4D,EAAiBrB,KAAM,WACoB,KAArC9J,EAAG8C,IAAK,EAAEwF,KAAM,QAAS,EAAEQ,IAAI,IACnCwE,EAAmB,CAAA,EAErB,CAAC,EAwBG,EAnBDjE,EAAO,CACVuE,SAAkB3N,mBAAmB4N,0BACrCC,eAAkBnM,EAAiBkH,mBAAmB,EACtD8E,QAAkBA,EAClBhB,MAAkBA,EAClBC,SAAkBA,EAClBC,KAAkBA,EAClBC,QAAkBA,EAClBC,UAAkBA,EAClBC,UAAkBA,EAClBC,QAAkBA,EAClBC,WAAkBA,EAClBC,OAAkBA,EAClBC,UAAkBA,EAClBC,YAAkBA,EAClBC,iBAAkBA,EAClBS,UAAkB/N,EAAG,eAAgB,EAAEgO,UAAU,CAClD,KAEevB,EAAKiB,yBACfH,EAAmB,GAGvBvN,EAAG,6HAA8H,EAAE8J,KAAM,WACxIyD,EAAkBvN,EAAG8C,IAAK,EAAEuG,KAAM,OAAQ,GAAMrJ,EAAG8C,IAAK,EAAEgG,IAAI,CAC/D,CAAE,EAEFO,EAAK4E,gBAAkBV,GAIpBC,EAAmBnN,EAAUkB,wBAG5B,CAAA,IAAUkL,EAAKzE,0BACnBwF,EAAmBA,EAAiBrI,QAAS,kCAAmC,EAAG,EACnFkE,EAAKrB,wBAA0B,SAIhChI,EAAGwN,CAAiB,EAAEtH,MAAM,CAC3BC,QAAS,KACTpE,WAAY,CACXqE,WAAY,OACZC,QAAS,EACV,CACD,CAAC,EAGD1D,SAASC,KAAK2G,UAAUE,IAAK,sBAAuB,EAEpD9H,EAAiBQ,IAAMnC,EAAEkO,KAAK,CAC7B/B,KAAO,OACPgC,IAAMlO,mBAAmBmO,YAAYC,SAAS,EAAElJ,QAAS,eAAgB,qBAAsB,EAC/FkE,KAAOA,EACPiF,QAAS,SAAUjF,GAGlB,GAAKA,GAAQ,CAAA,IAASA,EAAKkF,OAC1BpO,OAAOqO,SAASD,OAAO,MADxB,CAMApO,OAAOsO,2BAA6B,CAAA,EAGpCzO,EAAG,4CAA6C,EAAEwJ,OAAO,EAGzD,IAAIO,EAAuB/J,EAAGK,EAAUG,qBAAsB,EAAEkI,KAAM,SAAU,EAG5EgG,EAAiB,GAiBrB,GAhBA1O,EAAG,qBAAsB,EAAE8J,KAAM,WAChC,IAAI6E,EAAK3O,EAAG8C,IAAK,EAAEO,KAAM,IAAK,EAEzBsL,IACoE,CAAC,IAApE3O,EAAE4O,QAAS5O,EAAG8C,IAAK,EAAEO,KAAM,MAAO,EAAG,CAAE,WAAY,QAAU,EACjEqL,EAAgBC,GAAO3O,EAAG8C,IAAK,EAAE4F,KAAM,SAAU,EAEjDgG,EAAgBC,GAAO3O,EAAG8C,IAAK,EAAEgG,IAAI,EAGxC,CAAC,EAGDtG,QAAQqM,wCAAwC,EAG3CxF,GAAQA,EAAKyF,UAAY,CAK7B,GAHA9O,EAAG2C,SAASC,IAAK,EAAE2B,QAAS,uCAAwC,CAAE8E,EAAO,EAGxElJ,OAAO4O,cAAgB5O,OAAO6O,oBAElC,IADA,IAAIC,EAAiBtM,SAAS0E,iBAAkBhH,EAAUO,kBAAmB,EACnE0G,EAAI,EAAGA,EAAI2H,EAAe1H,OAAQD,CAAC,GAAK,CACjD,IAGK4H,EAHD3I,EAAQ0I,EAAe3H,GACvB6H,EAAahP,OAAO6O,oBAAoBrH,YAAapB,CAAM,EAC1D4I,IACAD,EAAiBC,EAAWC,UAAU,EAC1CD,EAAWE,QAAQ,EACnB9I,EAAMjB,MAAQ4J,EAEhB,CAIDlP,EAAE8J,KAAMT,EAAKyF,UAAW,SAAWxE,EAAKhF,GAEvC,IACIgK,EAAkB,CAAA,EADE3M,SAAS0C,cAAeiF,CAAI,GAI1BnK,OAAOoP,wBAAwB5J,QAAS2E,CAAI,GAAKnK,OAAOoP,wBAAwB5J,QAAStF,EAAUM,uCAAwC,IACpK2O,EAAkB,CAAA,GAQdA,EAHJA,EADIhK,GAAS,CAAC,IAAMA,EAAM+I,SAAS,EAAEvI,QAAS,4BAA6B,EACzD,CAAA,EAGdwJ,IAAuB3N,EAAiBmN,WAAanN,EAAiBmN,UAAWxE,KAAUhF,EAQtF/C,WAAWiN,WACpBC,QAAQC,IAAK,sBAAwBpF,CAAI,GAPpC/H,WAAWiN,WACfC,QAAQC,IAAK,uBAAyBpF,CAAI,EAE3CtK,EAAGsK,CAAI,EAAEqF,YAAarK,CAAM,GAO7BtF,EAAGsK,CAAI,EAAEsF,QAAQ,CAClB,CAAE,EACFjO,EAAiBmN,UAAYzF,EAAKyF,UAGlC9O,EAAG2C,SAASC,IAAK,EAAE2B,QAAS,sCAAuC,CAAE8E,EAAO,CAC7E,CAGArJ,EAAGK,EAAUkB,uBAAwB,EAAEqO,QAAQ,EAG/CjN,SAASC,KAAK2G,UAAUC,OAAQ,sBAAuB,EAGvDhH,QAAQqN,oBAAqB1P,OAAOoP,wBAAyBpP,OAAO2P,4BAA6B,EAG5F/F,GAEJ/J,EAAGK,EAAUG,qBAAsB,EAAEkI,KAAM,UAAW,CAAA,CAAK,EAIrD1I,EAAE+P,cAAerB,CAAe,GACtC1O,EAAG,qBAAsB,EAAE8J,KAAM,WAChC,IAAI6E,EAAK3O,EAAG8C,IAAK,EAAEO,KAAM,IAAK,EACzBsL,IACoE,CAAC,IAApE3O,EAAE4O,QAAS5O,EAAG8C,IAAK,EAAEO,KAAM,MAAO,EAAG,CAAE,WAAY,QAAU,EACjErD,EAAG8C,IAAK,EAAE4F,KAAM,UAAWgG,EAAgBC,EAAK,EAAEpK,QAAS,QAAS,GACD,CAAC,IAAzDvE,EAAE4O,QAAS5O,EAAG8C,IAAK,EAAEO,KAAM,MAAO,EAAG,CAAE,SAAW,GAElD,OAASrD,EAAG8C,IAAK,EAAEgG,IAAI,GAAK,IAAM9I,EAAG8C,IAAK,EAAEgG,IAAI,EAAEvB,SAC7DvH,EAAG8C,IAAK,EAAEgG,IAAK4F,EAAgBC,EAAK,EAAEpK,QAAS,QAAS,EAG3D,CAAC,EAIG8E,GAAQ,YAAcA,EAAK2G,SAE3BC,EAAQjQ,EAAG,eAAgB,EAG/BA,EAAG,0CAA2C,EAAEwJ,OAAO,EAGlDH,EAAK6G,SACTD,EAAME,QAAS,kFAAoF9G,EAAK6G,SAAW,QAAS,EAE5HD,EAAME,QAAS9G,CAAK,EAIrB4G,EAAM3H,KAAM,qCAAsC,EAAE/D,QAAS,UAAW,EAAEA,QAAS,MAAO,EAE1F5C,EAAiByO,kBAAkB,GAIpCzO,EAAiB0C,qBAAqB,EAGtClE,OAAOsO,2BAA6B,CAAA,EAGpCvO,EAAsB,CAAA,EAGtBF,EAAG2C,SAASC,IAAK,EAAE2B,QAAS,mBAAoB,CAAE8E,EAAO,EAGzD6B,WAAY,WACX1I,QAAQ6N,0CAA0C,CACnD,EAAG,EAAG,EAGN1O,EAAiBuI,uCAAuC,CAzJxD,CA0JD,EAEAoG,MAAO,WACN3O,EAAiBuI,uCAAuC,CACzD,CAGD,CAAC,EACF,EACAqG,kBAAmB,SAAU9K,GAM5B,GAA4C,CAAC,IAAzC+K,UAAUC,UAAU3K,QAAQ,MAAM,GAAiBnD,CAAAA,SAAS+N,aAMhE,MAAO,CAAA,EAJNjL,EAAEyC,eAAe,CAKnB,EACAyI,2BAA4B,WAC3B3Q,EAAGG,MAAO,EAAE0C,GAAG,eAAgBC,KAAKyN,iBAAiB,CACtD,EACAK,2BAA4B,WAC3B5Q,EAAGG,MAAO,EAAE0Q,IAAI,eAAgB/N,KAAKyN,iBAAiB,CACvD,EACAO,cAAe,SAAUb,GAGnB,IAFWA,EAAM5G,KAAM,mBAAoB,GAG/C4G,EAAM/J,MAAM,CACXC,QAAS,KACTpE,WAAY,CACXqE,WAAY,OACZC,QAAS,EACV,CACD,CAAC,CAEH,EACAjD,YAAa,WACZzB,EAAiBmP,cAAe9Q,EAAG8C,IAAK,CAAE,CAC3C,EACAQ,OAAQ,WACP3B,EAAiBsJ,4BAA4B,EAC7C,IAmBK8F,EAnBDd,EAAQjQ,EAAG8C,IAAK,EAmKpB,OAjKKmN,EAAM/G,GAAI,aAAc,IAK7BhJ,EAAsB,CAAA,EAGtByB,EAAiBmF,sCAAsC,EAIuB,CAAA,IAAzEmJ,EAAMe,eAAgB,uBAAwB,CAAErP,EAAmB,GAAiI,CAAA,IAAlHsO,EAAMe,eAAgB,wBAA0BrP,EAAiBkH,mBAAmB,EAAG,CAAElH,EAAmB,IAElMsO,EAAM5D,SAAU,YAAa,EAGzB0E,EAAwBpO,SAASsO,cACrCjR,EAAGK,EAAUE,0BAA2B,EAAE8C,KAAM,WAAY,UAAW,EACvErD,EAAGK,EAAUE,0BAA2B,EAAE8L,SAAU,UAAW,EAC1D,QAAUhM,EAAUmB,qCACxBxB,EAAGK,EAAUE,0BAA2B,EAAE8L,SAAUhM,EAAUiB,YAAa,EAK5EnB,OAAOC,oBAAsB,CAAA,EAE7BuB,EAAiBmP,cAAeb,CAAM,EAGtCtO,EAAiBgP,2BAA2B,EAG5C3Q,EAAEkR,UAAW,CACZC,WAAY,SAAUC,EAAcC,GAuBnC,MArBK,SAAWA,GAIX1P,EAAiB2J,cAAe8F,CAAa,IAM5C,QAFDE,EAAmBF,EAAaG,MAAO,aAAc,IAI7C5P,EAAiB2J,cAAegG,EAAiB,EAAG,GAC/D7B,QAAQC,IAAK,iCAAkC,EAC/CD,QAAQC,IAAK0B,CAAa,EAC1BA,EAAeE,EAAiB,IAEhC7B,QAAQC,IAAK,8BAA+B,GAIvC0B,CACR,CACD,CAAE,EAEFpR,EAAEkO,KAAK,CACN/B,KAAO,OACPgC,IAAMlO,mBAAmBuR,aACzBnI,KAAO4G,EAAMjC,UAAU,EACvBqD,SAAY,OACZ/C,QAAS,SAAU0B,GASlB,GAPArO,EAAiBiP,2BAA2B,GAG5C1Q,EAAsB,CAAA,KAGJF,EAAG2C,SAASC,IAAK,EAAEoO,eAAgB,0CAA2C,CAAEhB,EAAQrO,EAAmB,EAG5HxB,OAAOC,oBAAsB,CAAA,EAGxB,QAAUC,EAAUmB,qCACxBxB,EAAGK,EAAUE,0BAA2B,EAAE6L,YAAa/L,EAAUiB,YAAa,EAE/EtB,EAAGK,EAAUE,0BAA2B,EAAEkR,WAAY,UAAW,EACjEzR,EAAGK,EAAUE,0BAA2B,EAAE6L,YAAa,UAAW,EAClE5J,QAAQqN,oBAAqBkB,CAAsB,OAMpD,IACC,GAAK,YAAcf,EAAOA,QAAmG,CAAA,IAAzFC,EAAMe,eAAgB,+BAAgC,CAAEhB,EAAQrO,EAAmB,EAMhH,KAAK,YAAcqO,EAAOA,OAC1B,iBAEA,mBARD,CAAC,IAAMA,EAAO0B,SAAS5L,QAAS,UAAW,GAAK,CAAC,IAAMkK,EAAO0B,SAAS5L,QAAS,SAAU,EAC9F3F,OAAOqO,SAAWwB,EAAO0B,SAEzBvR,OAAOqO,SAAWmD,UAAW3B,EAAO0B,QAAS,CAqChD,CA9BE,MAAOE,GAEH,CAAA,IAAS5B,EAAOzB,OACpBpO,OAAOqO,SAASD,OAAO,GAKxBpO,OAAOC,oBAAsB,CAAA,EAGxB,QAAUC,EAAUmB,qCACxBxB,EAAGK,EAAUE,0BAA2B,EAAE6L,YAAa/L,EAAUiB,YAAa,EAE/EtB,EAAGK,EAAUE,0BAA2B,EAAEkR,WAAY,UAAW,EACjEzR,EAAGK,EAAUE,0BAA2B,EAAE6L,YAAa,UAAW,EAClE5J,QAAQqN,oBAAqBkB,CAAsB,EAI9C,CAAA,IAASf,EAAO6B,SACpB7R,EAAG2C,SAASC,IAAK,EAAE2B,QAAS,iBAAkB,EAI1CyL,EAAOE,SACXvO,EAAiBmQ,aAAc9B,EAAOE,QAAS,EAE/CvO,EAAiBmQ,aAAc,kCAAoC7R,mBAAmB8R,oBAAsB,QAAS,EAEvH,CACD,EACAzB,MAAO,SAAU0B,EAAOC,EAAYC,GAEnC/R,OAAOC,oBAAsB,CAAA,EAGxB,QAAUC,EAAUmB,qCACxBxB,EAAGK,EAAUE,0BAA2B,EAAE6L,YAAa/L,EAAUiB,YAAa,EAE/EtB,EAAGK,EAAUE,0BAA2B,EAAEkR,WAAY,UAAW,EACjEzR,EAAGK,EAAUE,0BAA2B,EAAE6L,YAAa,UAAW,EAClE5J,QAAQqN,oBAAqBkB,CAAsB,EAInDpP,EAAiBiP,2BAA2B,EAE5CjP,EAAiBmQ,aAChB,mCACEI,GAAejS,mBAAmB8R,qBACpC,QACD,CACD,CACD,CAAC,IAGK,CAAA,CACR,EACAD,aAAc,SAAUK,GACvBnS,EAAG,6EAA8E,EAAEwJ,OAAO,EAC1F7H,EAAiBU,eAAe8N,QAAS,yEAA2EgC,EAAgB,QAAS,EAC7IxQ,EAAiBU,eAAe+J,YAAa,YAAa,EAAEwD,QAAQ,EAEpE5P,EAAGK,EAAUE,0BAA2B,EAAEkR,WAAY,UAAW,EACjEzR,EAAGK,EAAUE,0BAA2B,EAAE6L,YAAa,UAAW,EAElEzK,EAAiBU,eAAeiG,KAAM,qCAAsC,EAAE/D,QAAS,UAAW,EAAEA,QAAS,MAAO,EACpH5C,EAAiByO,kBAAkB,EACnCpQ,EAAG2C,SAASC,IAAK,EAAE2B,QAAS,iBAAmB,CAAE4N,EAAgB,CAClE,EACA/B,kBAAmB,WAClB,IAAIgC,EAA0BpS,EAAG,+EAAgF,EAE1GoS,EAAc7K,SACpB6K,EAAgBpS,EAAG,eAAgB,GAEpCA,EAAEoQ,kBAAmBgC,CAAc,CACpC,CACD,EAEIC,EAAsB,CACzB/P,KAAM,WACLtC,EAAG2C,SAASC,IAAK,EAAEC,GAAI,QAAS,eAAgBC,KAAKwP,gBAAiB,EACtEtS,EAAG2C,SAASC,IAAK,EAAEC,GAAI,QAAS,6BAA8BC,KAAKyP,aAAc,EACjFvS,EAAG,sBAAuB,EAAEyI,KAAK,EAAE5F,GAAI,SAAUC,KAAKQ,MAAO,CAC9D,EACAgP,iBAAkB,WAIjB,OAHAtS,EAAG,kBAAmB,EAAEwS,YAAa,IAAK,WACzCxS,EAAG,kBAAmB,EAAEsI,KAAM,cAAe,EAAE/D,QAAS,OAAQ,CACjE,CAAC,EACM,CAAA,CACR,EACAjB,OAAQ,WACP,IAcI+F,EAdA4G,EAAQjQ,EAAG8C,IAAK,EAsCpB,OApCKmN,EAAM/G,GAAI,aAAc,IAI7B+G,EAAM5D,SAAU,YAAa,EAAEnG,MAAM,CACpCC,QAAS,KACTpE,WAAY,CACXqE,WAAY,OACZC,QAAS,EACV,CACD,CAAC,EAEGgD,EAAO,CACVuE,SAAW3N,mBAAmBwS,mBAC9BC,YAAazC,EAAM3H,KAAM,2BAA4B,EAAEQ,IAAI,CAC5D,EAEA9I,EAAEkO,KAAK,CACN/B,KAAO,OACPgC,IAAMlO,mBAAmBmO,YAAYC,SAAS,EAAElJ,QAAS,eAAgB,cAAe,EACxFkE,KAAOA,EACPiF,QAAS,SAAUjE,GAClBrK,EAAG,0CAA2C,EAAEwJ,OAAO,EACvDyG,EAAM7D,YAAa,YAAa,EAAEwD,QAAQ,EAErCvF,IACJ4F,EAAM0C,OAAQtI,CAAK,EACnB4F,EAAMrH,QAAQ,EAEd5I,EAAG2C,SAASC,IAAK,EAAE2B,QAAS,6BAA8B,CAAE8E,EAAKqJ,YAAc,EAC/E1S,EAAG2C,SAASC,IAAK,EAAE2B,QAAS,kBAAmB,CAAEmJ,uBAAwB,CAAA,CAAM,CAAE,EAEnF,EACA2D,SAAU,MACX,CAAC,GAEM,CAAA,CACR,EACAkB,cAAe,SAAU9M,GAExB,IAIImN,EAWAvJ,EAfChJ,EAAUwS,iBAAmB,QAAUxS,EAAUwS,gBAAgBC,YAEtErN,EAAEyC,eAAe,EAEb0K,EAAY5S,EAAG8C,IAAK,EAAEiQ,QAAS,oCAAqC,EACvEC,EAAYhT,EAAG8C,IAAK,EAAEuG,KAAM,QAAS,EAEtCuJ,EAAUvG,SAAU,YAAa,EAAEnG,MAAM,CACxCC,QAAS,KACTpE,WAAY,CACXqE,WAAY,OACZC,QAAS,EACV,CACD,CAAC,EAEGgD,EAAO,CACVuE,SAAU3N,mBAAmBgT,oBAC7BD,OAAUA,CACX,EAEAhT,EAAEkO,KAAK,CACN/B,KAAS,OACTgC,IAASlO,mBAAmBmO,YAAYC,SAAS,EAAElJ,QAAS,eAAgB,eAAgB,EAC5FkE,KAASA,EACTiF,QAAS,SAAUjE,GAClBrK,EAAG,0CAA2C,EAAEwJ,OAAO,EACvDoJ,EAAUxG,YAAa,YAAa,EAAEwD,QAAQ,EAEzCvF,IACJrK,EAAG,2BAA4B,EAAE2S,OAAQtI,CAAK,EAE9CrK,EAAG2C,SAASC,IAAK,EAAE2B,QAAS,6BAA8B,CAAE8E,EAAK2J,OAAS,EAC1EhT,EAAG2C,SAASC,IAAK,EAAE2B,QAAS,kBAAmB,CAAEmJ,uBAAwB,CAAA,CAAM,CAAE,EAGjF1N,EAAG,sBAAuB,EAAEsI,KAAM,2BAA4B,EAAEQ,IAAK,EAAG,EAE1E,EACAwH,MAAO,SAAW0B,GACZ/R,mBAAmBiT,YAEvBzD,QAAQC,IAAKsC,EAAMmB,YAAa,CAElC,EACA9B,SAAU,MACX,CAAC,EACF,CACD,EAEI+B,EAAyB,CAC5B9Q,KAAM,WACLtC,EAAG2C,SAASC,IAAK,EAAEC,GAAI,QAAS,cAAeC,KAAKuQ,eAAgB,CACrE,EACAA,gBAAiB,WAEhB,OADArT,EAAG,0CAA2C,EAAEwS,YAAY,EACrD,CAAA,CACR,CACD,EAEIc,EAAkB,CACrBhR,KAAM,WACLtC,EAAG2C,SAASC,IAAK,EAAEC,GAAI,QAAS,0CAA2CC,KAAKyQ,YAAa,CAC9F,EAEAA,aAAc,WACb,GAAKvT,EAAG,mCAAoC,EAAEuH,OAa7C,OAZAvH,EAAG,mCAAoC,EAAEwS,YAAa,WACrD,IAAIgB,EAAcxT,EAAG,wCAAyC,EAEzDA,EAAG,mCAAoC,EAAEkJ,GAAI,UAAW,GAC5DsK,EAAYnH,SAAU,6CAA8C,EACpEmH,EAAYpH,YAAa,+CAAgD,IAEzEoH,EAAYpH,YAAa,6CAA8C,EACvEoH,EAAYnH,SAAU,+CAAgD,EAExE,CAAE,EAEK,CAAA,CAET,CACD,EAEA1K,EAAiBW,KAAK,EACtB+P,EAAoB/P,KAAK,EACzB8Q,EAAuB9Q,KAAK,EAC5BgR,EAAgBhR,KAAK,CACtB,CAAC"}