jQuery.fn.extend({
    updatePuzzleDiv: function (newdata,options,callback)
    {
                if(newdata == null) newdata = {};
                if(options == null) options = {};

                if($(this).length==0) console.log('Puzzle error : unfound puzzle div selector '+$(this).selector);

                var data = $(this).data();

                getParams = getSearchParams();
                if ($.isEmptyObject(getParams) == false && data.gets != undefined) {
                    $.each(getParams, function(key, getValue){
                        data.gets[key] = getValue;
                    });
                }

                var post = {};
                $.each(data, function( index, value ){
                    post['data-'+index] = value;
                });

                $.each(newdata, function( index, value ){
                    post['data-'+index] = value;
                });

                getParams = getSearchParams();
                if (getParams.length > 0) {
                    $.each(getParams, function(key, getValue){
                        data.gets[key] = getValue;
                    });
                }

                var testIfRichText = $("#"+$(this).attr('id')).find('.puzzle-richtext').length;
                if(tinyMCE != 'null' && testIfRichText)
                {
                   tinymce.remove("#"+$(this).attr('id')+" .puzzle-richtext");
                }

                /*
                *WE FIRST CHECK THE REQUIRED DATA ATTRIBUTES
                */
                if(post['data-module'] != null){var module = post['data-module'];}
                else throw new Error('data-module isnt defined in updatePuzleAjax '+$(this).attr('id'));

                if(post['data-script'] != null){var script = post['data-script'];}
                else throw new Error('data-script isnt defined in updatePuzleAjax '+$(this).attr('id'));

                /*
                * WE GET THE DISPLAY OPTION, CALLED AFTER CALLING IN POST
                */
                if(options['setListenersAfter'] == null){options['setListenersAfter'] = true;}
                else {options['setListenersAfter'] = false;}

                if(options['displayFunction'] != null){var displayFunction = options['displayFunction'];}
                else var displayFunction = '';

                if(options['displayOptions'] != null){var displayOptions = eval ('(' + options['displayOptions'] + ')'); }
                else var displayOptions = {};

                if(options['displayStyle'] != null) {var displayStyle = options['displayStyle']; }
                else var displayStyle = 'block';

                if(options['callbackFunction'] != null) {var callbackFunction = options['callbackFunction']; }
                else var callbackFunction = '';

                if(options['callbackArgs'] != null) {var callbackArgs = options['callbackArgs']; }
                else var callbackArgs = '';

                /*
                * WE GET THE CURRENT DOM AND ADD DATA ATTRIBUTES
                */

                var divDom = $(this);
                //alert(divDom.attr('class'));

                /*
                 *LOADER EFFECT !
                 */
                //divDom.css('opacity','0.4');
                if($('.puzzle-loading').length > 0) {
                    $('.puzzle-loading').show();
                }



                /*
                * WE CALL THE SCRIPT AND PUT HTML RESULT IN THE DIV DOM
                */
               $.ajax({
                    type : 'POST',
                    url : ROOT_URL+LANG+'/m/'+module+'/ajax/'+script,
                    data : post
               })
               .done(function(xhr) {
                        //Remove unicode character
                        xhr = xhr.replace(/[\u200B-\u200D\uFEFF]/g, '');
                        divDom.html(xhr);//WE PUT THE THE RESPONSE IN THE DESTINATION DIV

                        //divDom.css('opacity','1');
                        if($('.puzzle-loading').length > 0){
                            $('.puzzle-loading').hide();
                        }


                       //WE EDIT THE DATA ATTRIBUTES OF THE DOM ELEMENT
                       $.each(post, function( index, value ){

                            if(index != 'data-responsearray' && index != 'data-submitted')
                            {
                                index = index.replace("data-","");
                                divDom.data(index,value);
                                divDom.attr('data-'+index,value);
                            }
                       });

                       if(typeof(callback) == "function")
                       {
                            callback();
                       }

                       if ($.isFunction($.fn.select2)) {
                        $('.select2').select2();
                       }

                      if(options['setListenersAfter']) divDom.setPuzzleDivListeners();//SET ALL LISTENERS AGAIN
                 }
                );
       // });
    },
    /*********************************
     ** WE GET AGAIN ALL THE LISTENERS
     **********************************/
    setPuzzleDivListeners : function()
    {


        $(function(){
            var dateFormat = LANG === 'en' ? 'MM/DD/YYYY' : 'DD/MM/YYYY';

			$('input.field-phonenumber[type="text"]').not('.puzzle-table-filter input.field-phonenumber[type="text"]').each(function(){

				var visibleField = $(this);
				var hiddenField = $(this).closest('div').find('input[type="hidden"]');

				visibleField.intlTelInput({
                    preferredCountries: [...new Set([LANG, "fr", "gb", "es", "de", "it"])],
                    nationalMode: true,
				  utilsScript: ROOT_URL+"assets/libs/intl-tel-input-master/build/js/utils.js" // just for formatting/placeholders etc
				});

				visibleField.on("keyup change",function(){

					var extension = "+"+visibleField.closest('div').find('.country-list li.active').data("dial-code");
					var intlNumber = visibleField.intlTelInput("getNumber");

					var shortNumber = intlNumber.replace(extension,"");

					if(shortNumber.length > 0)
					{
						var formattedNumber = extension+"-"+shortNumber;
					}
					else
					{
						var formattedNumber = '';
					}


					/*console.log(extension);
					console.log(intlNumber);
					console.log(formattedNumber);*/

					hiddenField.val(formattedNumber);

				});

				hiddenField.val();

			});

            /*$('.dateRangePicker').daterangepicker({
                format: dateFormat
            });*/

            $('.datePicker').each(function(){

                var currentDateTimePicker = $(this);

                // Init DateRange plugin
                if($(this).data('type') == 'datetime') {
                    if (LANG == 'en') {
                        var datetimeFormat = dateFormat +' h:mm a';
                    } else {
                        var datetimeFormat = dateFormat +' HH:mm';
                    }
                } else {
                    var datetimeFormat = dateFormat;
                }

                if($(this).attr('data-maxdate')) {
                    $(this).datetimepicker({
                        format: datetimeFormat,
                        maxDate : moment().add($(this).data('maxdate'), 'd')
                    });
                } else {
                    $(this).datetimepicker({
                        defaultDate: (currentDateTimePicker.parent().hasClass('tdFilter') || currentDateTimePicker.parent().parent().hasClass('tdAddinline')) ? null : new Date(),
                        format: datetimeFormat
                    });
                }

            });

           /* $('.fancybox').fancybox({
                openEffect : 'elastic',
                helpers: {
                    overlay: {
                        locked: false
                    }
                }
            });*/

          /*  $('.tablesorter').tablesorter({
                sortList: [[0,0]],
                cssInfoBlock : "tablesorter-no-sort",
                widgets: [ 'stickyHeaders' ]
            });

            $('.tablesorter .tablesorter-no-sort').unbind('click').bind('click',function(){
                $(this).next('.tablesorter-sort').toggle();
            }).css('cursor', 'pointer');
			*/

			$('select').not('.no-selectpicker').each( function(){

                if ($(this).find('option').length > 10) {
                    $(this).data('actions-box', 'true');
                    $(this).data('live-search', 'true');
                }

                if(typeof selectpicker=== "function"){
                    $(this).selectpicker( {container:'#'+$(this).closest('.puzzle-div').attr('id')} );
                }

			});

            if(typeof selectpicker=== "function"){
                $('.inlineEdition select').selectpicker('destroy');
            }




            //$('select[multiple]').selectpicker({'title': 'Aucune sélection',container:'body'});

/*
            $('.input-tokenfield input').not('.puzzle-table-filter .input-tokenfield input').tokenfield({
                autocomplete: {
                    //source: ['red','blue','green','yellow','violet','brown','purple','black','white'],
                    delay: 100
                },
                showAutocompleteOnFocus: true
            });
			*/
			$('input.field-phonenumber[type="text"]').not('.puzzle-table-filter input.field-phonenumber[type="text"]').each(function(){

				/*var visibleField = $(this);
				var hiddenField = $(this).closest('div').find('input[type="hidden"]');


				visibleField.intlTelInput({
				  preferredCountries: ["fr","gb","es","de","it"],
				  nationalMode: true,
				  utilsScript: ROOT_URL+"assets/libs/intl-tel-input-master/build/js/utils.js" // just for formatting/placeholders etc
				});

				visibleField.on("keyup change",function(){

					var extension = "+"+visibleField.closest('div').find('.country-list li.active').data("dial-code");
					var intlNumber = visibleField.intlTelInput("getNumber");

					var shortNumber = intlNumber.replace(extension,"");

					if(shortNumber.length > 0)
					{
						var formattedNumber = extension+"-"+shortNumber;
					}
					else
					{
						var formattedNumber = '';
					}

					hiddenField.val(formattedNumber);

				});

				hiddenField.val();*/

			});



        });

            if(tinyMCE != 'null')
			{

				tinymce.remove("#"+$(this).attr('id')+" .puzzle-richtext");

				tinymce.init({
					height :  $("#"+$(this).attr('id')+" .puzzle-richtext").css("height"),
					selector: "#"+$(this).attr('id')+" .puzzle-richtext[readonly!='readonly']",
					document_base_url: ROOT_URL,
					resize: false,
					language : 'fr',
					relative_urls: false,
					remove_script_host : false,
					plugins: [
						/*"advlist autolink lists link image charmap print preview anchor autosave",
						"searchreplace visualblocks code fullscreen",
						"insertdatetime media table contextmenu paste moxiemanager textcolor colorpicker"*/
					],
					menubar:false,
					toolbar: "undo redo bold italic underline strikethrough | alignleft aligncenter alignright alignjustify bullist numlist outdent indent"
				});
			}



            $('.panel-tabs li,.nav-pills li').unbind('click').bind('click',function(){

                var divID = $(this).find('a').attr('href');

                var collection = $(this).closest('.panel').find('.tab-content '+divID+' .puzzle-div');

                collection.each(function(i,e){


                    $(this).updatePuzzleDiv();
                });

            });

			$('input.typeahead').not('.binded').each(function(){

				var DOM = $(this);

				DOM.addClass("binded");

				$.post(
					ROOT_URL+'/'+LANG+'/a/getlist',
					{
						formid:"form_select_contents",
						moduleisbackside:true,
						modulename:'contents',
						fieldid: DOM.data('name'),
						table: DOM.closest('form').find('#table').val(),
						parentform: DOM.closest('form').find('#formid').val(),
						targetmodule: DOM.closest('form').find('#modulename').val()
					},
					function(data)
					{
						if(jsonArray = tryParseJSON(data))
						{
							/*WHEN WE ENTER TEXT MANUALLY WE DELETE THE ID SO THE FIELD WILL BE EMPTY UNTIL WE CLICK*/
							DOM.keyup(function(e){
								if(e.keyCode != 13)
								{
									if(DOM.val().length > 0)
									{
										if(DOM.closest('td.tdFilter').length == 0)
										{
											$('input[name="'+DOM.data('name')+'"]').val("__undefined__");
										}
									}
									else $('input[name="'+DOM.data('name')+'"]').val("");
								}
							});

							DOM.typeahead({
								hint: false,
								highlight: true,
								minLength: 1
							  },
							  {
								name: 'states',
								source: substringMatcher(jsonArray)
							  });

							 DOM.bind('typeahead:select', function(ev, suggestion) {

								var conds = '{"'+DOM.data('titlecol')+'":"'+DOM.val()+'"}';

								$.post(
									ROOT_URL+'/'+LANG+'/a/select',
									{
										formid:"form_select_contents",
										modulename:'contents',
										table: DOM.data('table'),
										cols:DOM.data('iduniquecol'),
										conds:conds
									},
									function(data)
									{
										if(jsonArray = tryParseJSON(data))
										{
											var id = DOM.data('iduniquecol');
											$('input[name="'+DOM.data('name')+'"]').val(jsonArray[0][id]);
										}

									}
								);

							 });

						}
					}
				);


			});

            /*
             * TABLE ADD BUTTON
             */

            // PENDING
            $('#'+$(this).attr('id')+' .addBtn').unbind('click').bind('click',function(){

                var parentPuzzle = $(this).closest('.puzzle-div');
                var targetmodule = parentPuzzle.closest('.puzzle-div');
                //console.log(targetmodule.data);

                var post = {};

                post.script = 'addmodal';
                post.module = parentPuzzle.data('module');

                post.targetmodule = parentPuzzle.data('targetmodule');

                $('#productModal .puzzle-div').updatePuzzleDiv(post);

                $('#productModal').modal();

                return false;
            });


            /*$('#'+$(this).attr('id')+' .addTableBtn').unbind('click').bind('click',function(){

				alert('test');

                var parentPuzzle = $(this).closest('.puzzle-div');
                var targetmodule = parentPuzzle.closest('.puzzle-div');
                //console.log(targetmodule.data);

                var post = {};

				var hiddenFields = parentPuzzle.find('form input[type="hidden"]');
				var hiddenFieldsValues = {};

				hiddenFields.each(function(e,i)
				{
					hiddenFieldsValues[$(this).attr('name')] = $(this).val();
				})

				console.log('DISPLAY');
				console.log(hiddenFieldsValues);
                post.script = 'addtablemodal';
                post.module = parentPuzzle.data('module');

                post.targetmodule = $(this).closest('table').data('module');
				post.tableid = $(this).closest('table').attr('id');
				post.idunique = $(this).closest('.puzzle-div').data('idunique');
				post.submodule = $(this).closest('.tab-pane').attr('id');
				post.parentmodule = $(this).closest('.panel').data('parentmodule');
				post.hiddenfields = hiddenFieldsValues;

                $('#productModal .puzzle-div').updatePuzzleDiv(post);
                $('#productModal').modal();

                return false;
            });*/



             $('.emptyFieldBtn').each(function(){

                 var btnDom = $(this);
                 var divDom = $(this).closest('div,td');

                 var divInput = divDom.find('input');

                 divInput.keyup(function(e)
                 {
                     if($(this).val()=='') btnDom.hide();
                     else btnDom.show();
                 });

                 if(divInput.val()!='') btnDom.show();

             })



            /*
             * WE DEAL WITH TAB ISSUE IN PUZZLE AJAX FORM
             */
            $('#'+$(this).attr('id')+" .nav-tabs li a").click(function()
            {

                var tabID = $(this).attr('href').replace('#','');

                //alert(tabID);

                $(this).closest('.puzzle-div').data('currenttab',tabID);

                //return false;
            });

                /*
             * DAY AND MONTH FIELDS
             */
            $('#'+$(this).attr('id')+' .single-info.type-day select, #'+$(this).attr('id')+' .single-info.type-month select, #'+$(this).attr('id')+' .single-info.type-year select').change(function(){


				var formGroup = $(this).closest('.single-info');

				//YEAR
				var yearVal = $(this).closest('.single-info').find("select[name$='_fieldYear']").val();

				//MONTH
				if(formGroup.hasClass('type-year')) {
					var monthVal = 1;
				}
				else {
					var monthVal = $(this).closest('.single-info').find("select[name$='_fieldMonth']").val() - 1;
				}

				//DAY
				if( formGroup.hasClass('type-month') || formGroup.hasClass('type-year') )
				{
					var dayVal = 1;
				}
				else {
					var dayVal = $(this).closest('.control-group').find("select[name$='_fieldDay']").val();
				}
                if( dayVal > 0 && monthVal > 0 && yearVal > 0)
                {
                   var time = new Date(yearVal, monthVal,dayVal, 0, 0, 0, 0).getTime() / 1000;

                   formGroup.find('input[type="hidden"]').val(time);
                }
                else
                {
                   formGroup.find('input[type="hidden"]').val('');
                }

            })

            /*
             * BY DEFAULT WE DEACTIVATE THE NORMAL SUBMISSION
             */
            $('#'+$(this).attr('id')).submit(function( event )
            {
                return false;
            });

            /*
             * CLICK AND PICK FIELDS
             */
            $('#'+$(this).attr('id')+' .clickandpick').focus(function(){

               var post = {};

               post.module = 'contents';
               post.script = 'clickandpickmodal';

               post.formdomid = $(this).parents('form').attr('id');
               post.formid = $(this).parents('form').find('#formid').val();
               post.targetmodule = $(this).parents('form').find('#modulename').val();
               post.fieldid = $(this).data('fieldid');
               post.fieldname = $(this).data('fieldname');

				/*
				WE CHECK IF A MODAL IS CURRENTLY OPEN
				*/
				/*var currentModal = $('.modal.fade.in');
				if(currentModal.length)
				{
					//alert('testY');

					$('#modal-clickandpick').on('hidden.bs.modal', function (e) {
						currentModal.modal('show');
					})
					currentModal.modal('hide');
				}*/

                $('#modal-clickandpick-container').updatePuzzleDiv(post);

                $('#modal-clickandpick .modal-dialog').css('width', '80%');

                $('#modal-clickandpick').modal();
           });

            $('#'+$(this).attr('id')+' .multiclickandpick').focus(function(){

                var post = {};

                post.module = 'contents';
                post.script = 'multiclickandpickmodal';

                post.formdomid = $(this).parents('form').attr('id');
                post.formid = $(this).parents('form').find('#formid').val();
                post.targetmodule = $(this).parents('form').find('#modulename').val();
                post.fieldid = $(this).data('fieldid');
                post.fieldname = $(this).data('fieldname');

                /*
                 * we define index if we have to
                 */
                var index = $(this).closest('indexd')

				/*
				WE CHECK IF A MODAL IS CURRENTLY OPEN
				*/
				var currentModal = $('.modal.fade.in');
				if(currentModal.length)
				{
					$('#modal-clickandpick').on('hidden.bs.modal', function (e) {

						currentModal.modal('show');

					})

					currentModal.modal('hide');
				}
                $('#modal-clickandpick-container').updatePuzzleDiv(post);

                $('#modal-clickandpick .modal-dialog').css('width', '80%');

                $('#modal-clickandpick').modal();

            });

            /*
             *ON CHANGE LISTS
             */
            $('#'+$(this).attr('id')+' .onchange').change(function(){


                var Div = $(this).parents('.puzzle-div:first');
                var Form = Div.find('form');

                var testIfRichText = Div.find('.richtext').length;
                if(tinyMCE != 'null' && testIfRichText)
                {
                   tinymce.remove("#"+Div.attr('id')+" .puzzle-richtext");
                }

                var post = {};
                post.currentvalues = {};

                var i = 0;

                $.each(Form.serializeArray(), function( index, elem ){

                    /*
                     * IN CASE OF MULTIPLE FIELDS (CHECKBOXES, MULTISELECT....)
                     */
                    if(elem.name.indexOf('[]') > 0)
                    {
                        var elementName = elem.name.replace("[]","");

                        //FIRST ELEMENT WE HAVE TO DECLARE THE ARRAY
                        if(typeof post.currentvalues[elementName] === 'undefined')
                        {
                            post.currentvalues[elementName] = new Array();
                        }

                        post.currentvalues[elementName].push(elem.value);
                    }
                    else
                    {
                        post.currentvalues[elem.name] = elem.value;
                    }
                });

                Div.updatePuzzleDiv(post);

            });

            /*
             * FORM : SUBMIT BUTTON
             */
            $('#'+$(this).attr('id')+' form.puzzle-form .submitBtn').unbind('click').bind('click',function()
            {
                disableButton($(this));
                $('.link-delete-file').unbind();
                if($('.puzzle-loading').length > 0) {
                    $('.puzzle-loading').show();
                }

                 var Form = $(this).parents('form:first');

                 var testIfRichText = Form.find('.richtext').length;
                 if(tinyMCE != 'null' && testIfRichText)
                 {
                    tinyMCE.triggerSave();
                 }

                 //console.log(Form.attr('id'));//alert(Form.attr('id'));
                 var postArray = Form.serializeArray();

                 //console.log(postArray);

                 //alert('test');
                 $.post(
                        Form.attr('action'),
                        postArray,
                        function(data)
                        {
                           Form.puzzleCallback(data);
                           //console.log(responseJson);
                        }
                 );

                 return false;
            });

            function disableButton (element) {
                    element.prop('disabled', true);
                    element.html(element.text() + ' <span><i class="fa fa-spinner fa-spin"></i></span>')

                    element.css('cursor', 'not-allowed')
                }

            // PENDING

            /*
            $('#'+$(this).attr('id')+' form.puzzle-form input').keydown(function(e)
            {

                 if(e.keyCode == 13)
                 {
                    var Form = $(this).parents('form:first');


                    var testIfRichText = Form.find('.richtext').length;
                    if(tinyMCE != 'null' && testIfRichText)
                    {
                       tinyMCE.triggerSave();
                    }

                    //console.log(Form.attr('id'));//alert(Form.attr('id'));
                    var postArray = Form.serializeArray();

                    //alert('test');
                    $.post(
                           Form.attr('action'),
                           postArray,
                           function(data)
                           {
                              Form.puzzleCallback(data);
                              //console.log(responseJson);
                           }
                    );

                    return false;
                 }
            });
            */

            /*
             * FORM : EDIT BUTTON
             */
            $('#'+$(this).attr('id')+' form.puzzle-form .editBtn').click(function()
            {
                var divDOM = $(this).closest('.puzzle-div');

				//WE GET CURRENT TAB IF EXISTS
				var activeTabA = divDOM.find('.panel-heading li.active a');
				if(activeTabA.length)
				{
					var currentTab = activeTabA.attr('href').replace("#","");
				}
				else currentTab = '';

                var post = {};
                post.formmode = 'w';
				post.currenttab = currentTab;

                divDOM.updatePuzzleDiv(post);

                return false;
            });

            /*
             * FORM : CANCEL BUTTON
             */
            $('#'+$(this).attr('id')+' form.puzzle-form .cancelBtn').click(function()
            {
                var divDOM = $(this).closest('.puzzle-div');

                var testIfRichText = divDOM.find('.richtext').length;
                if(tinyMCE != 'null' && testIfRichText)
                {
                   tinymce.remove("#"+divDOM.attr('id')+" .puzzle-richtext");
                }

				//WE GET CURRENT TAB IF EXISTS
				var activeTabA = divDOM.find('.panel-heading li.active a');
				if(activeTabA.length)
				{
					var currentTab = activeTabA.attr('href').replace("#","");
				}
				else currentTab = '';

                var post = {};
                post.formmode = '';
				post.currenttab = currentTab;

                divDOM.updatePuzzleDiv(post);

                return false;
            });

			$('#productModal .cancelBtn').unbind('click').bind('click',function()
            {
					$(this).closest('.modal ').modal('hide');
			});

            /*
             * FORM : CANCEL BUTTON
             */
            $('#'+$(this).attr('id')+' form.puzzle-form .emptyFieldBtn').click(function()
            {

                //console.log('123');
                var divDOM = $(this).closest('div,td');

                divDOM.find('input,select').val('');
                $(this).hide();

                return false;
            });

            $(this).updatePuzzleTable();
        }

});

/****************************
 *WE LOAD ALL PUZZZLE AJAX
 ****************************/


var puzzleDivCollection = $('.puzzle-div').not('.puzzle-div-manual, .panel .tab-content .tab-pane:not(.active) .puzzle-div');

puzzleDivCollection.each(function(index)
{
    if($(this).data('module') != null && $(this).data('script') != null)
    {
        $(this).updatePuzzleDiv();
    }
});


function tryParseJSON (jsonString){
    try {
        var o = JSON.parse(jsonString);

        // Handle non-exception-throwing cases:
        // Neither JSON.parse(false) or JSON.parse(1234) throw errors, hence the type-checking,
        // but... JSON.parse(null) returns 'null', and typeof null === "object",
        // so we must check for that, too.
        if (o && typeof o === "object" && o !== null) {
            return o;
        }
    }
    catch (e) { console.log("tryParseJSON error : "+e) }

    return false;
};


/*FUNCTION TO GET/EDIT CURRENT PAGE */
function UpdateQueryString(key, value, url) {
    if (!url) url = window.location.href;
    var re = new RegExp("([?&])" + key + "=.*?(&|#|$)(.*)", "gi"),
        hash;

    if (re.test(url)) {
        if (typeof value !== 'undefined' && value !== null)
            return url.replace(re, '$1' + key + "=" + value + '$2$3');
        else {
            hash = url.split('#');
            url = hash[0].replace(re, '$1$3').replace(/(&|\?)$/, '');
            if (typeof hash[1] !== 'undefined' && hash[1] !== null)
                url += '#' + hash[1];
            return url;
        }
    }
    else {
        if (typeof value !== 'undefined' && value !== null) {
            var separator = url.indexOf('?') !== -1 ? '&' : '?';
            hash = url.split('#');
            url = hash[0] + separator + key + '=' + value;
            if (typeof hash[1] !== 'undefined' && hash[1] !== null)
                url += '#' + hash[1];
            return url;
        }
        else
            return url;
    }
}

function getSearchParams(k){
    var p={};
    location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){p[k]=v})
    return k?p[k]:p;
}
