Domain: lemmonlines.com
Server Adress: 208.122.217.104

privdayz.com

/home/httpd/html/verobeach.marketing/public_html/
Dosya Yükle :
Current File : /home/httpd/html/verobeach.marketing/public_html/base-libs.js

function executeFunctionByName(functionName, context) {
    for (var args = Array.prototype.slice.call(arguments, 2), namespaces = functionName.split("."), func = namespaces.pop(), i = 0; i < namespaces.length; i++) context = context[namespaces[i]];
    return context[func].apply(context, args)
}

function str_replace(search, replace, subject, count) {
    var i = 0,
        j = 0,
        temp = "",
        repl = "",
        sl = 0,
        fl = 0,
        f = [].concat(search),
        r = [].concat(replace),
        s = subject,
        ra = r instanceof Array,
        sa = s instanceof Array;
    for (s = [].concat(s), count && (this.window[count] = 0), i = 0, sl = s.length; sl > i; i++)
        if ("" !== s[i])
            for (j = 0, fl = f.length; fl > j; j++) temp = s[i] + "", repl = ra ? void 0 !== r[j] ? r[j] : "" : r[0], s[i] = temp.split(f[j]).join(repl), count && s[i] !== temp && (this.window[count] += (temp.length - s[i].length) / f[j].length);
    return sa ? s : s[0]
}

function is_numeric(input) {
    return input - 0 == input && input.length > 0
}

function stripos(f_haystack, f_needle, f_offset) {
    var haystack = (f_haystack + "").toLowerCase(),
        needle = (f_needle + "").toLowerCase(),
        index = 0;
    return -1 !== (index = haystack.indexOf(needle, f_offset)) ? index : !1
}

function addCommas(nStr) {
    nStr += "", x = nStr.split("."), x1 = x[0], x2 = x.length > 1 ? "." + x[1] : "";
    for (var rgx = /(\d+)(\d{3})/; rgx.test(x1);) x1 = x1.replace(rgx, "$1,$2");
    return x1.replace(/\$-/, "-$") + x2
}

function pad(number, length) {
    for (var str = "" + number; str.length < length;) str = "0" + str;
    return str
}

function handleAjaxErrorResponse(response) {
    response.responseText && "unauthorized" == response.responseText ? window.location.reload(!0) : ($("#inline_login").val(window.location), console.log("cool!")), checkForUpdates = !1
}

function ucwords(str) {
    return (str + "").replace(/^([a-z])|\s+([a-z])/g, function($1) {
        return $1.toUpperCase()
    })
}

function gaEvent(category, action, userType) {
    _gaq.push(["_trackEvent", category, action, userType])
}

function checkValidDates() {
    $("#event_date_end").hasClass("error-border") || $("#event_date").hasClass("error-border") ? ($(".bottom-wrap .createIt").addClass("error").removeClass("success"), $("#splashCreateButton").attr("disabled", "disabled"), $("#splashCreateButtonFake").hasClass("disabled") || $("#splashCreateButtonFake").addClass("disabled")) : ($(".bottom-wrap .createIt").removeClass("error").addClass("success"), $("#splashCreateButton").removeAttr("disabled"), $("#splashTypeWrap").find(".form-inactive").removeClass("form-inactive"), $("#splashCreateButtonFake").removeClass("disabled"))
}

function doneTypingDomain(params) {
    var obj_input = !0,
        bad_chars = !1;
    params = params ? params : {};
    var $inputObj = "undefined" != typeof params.inputObj ? params.inputObj : null,
        $settingsModal = "undefined" != typeof params.modal ? params.modal : null,
        createPage = $("body").hasClass("createPage");
    if (createPage) var $domainInput = $("#event-domain"),
    $domainValid = $("#valid-domain"), $domainText = $("#event-domain-field"), $domainCheck = $("#domain-check"), $domainContainer = $("#domain-input"), $eventTitle = $("#event-title"), $eventHashtag = $("#event-hashtag");
    else if (null != $settingsModal && $settingsModal.length) var $domainInput = $settingsModal.find(".settings-domain-input"),
    $domainValid = $settingsModal.find(".settings-domain-valid"), $domainText = $settingsModal.find(".settings-domain-text"), $domainCheck = $settingsModal.find(".settings-domain-check"), $domainContainer = $settingsModal.find(".settings-domain-container"), $eventTitle = $(), $eventHashtag = $();
    else {
        if (!($("#dupe-event-domain").length > 0)) return console.log("Error, unknown case"), !1;
        var $domainInput = $("#dupe-event-domain"),
            $domainText = $(),
            $domainCheck = $("#domain-check"),
            $domainContainer = $(),
            $domainValid = $(),
            $eventTitle = $("#dupe-event-title"),
            $eventHashtag = $()
    } if ($domainInput.hasClass("skipThis")) return $domainValid.length && $domainValid.val("1"), !1;
    if (null != $inputObj) {
        var $obj = $inputObj,
            domain_val = $obj.val();
        (domain_val.match(/^www\./) || domain_val.match(/\./g) || domain_val.match(/ /g) || domain_val.match(/^https?:\/\//)) && (bad_chars = !0);
        var domain_name = $.trim($obj.val().replace(/^https?:\/\//, "").replace(/^www\./, "").replace(/\./g, "").replace(/ /g, ""));
        domain_name != $obj.val() && $obj.val(domain_name)
    } else if ($domainText.length > 0) {
        var $obj = $domainText,
            domain_name = $.trim($obj.text().replace(/^https?:\/\//, "").replace(/^www\./, "").replace(/\./g, "").replace(/ /g, "")),
            domain_val = $domainText.text();
        (domain_val.match(/^www\./) || domain_val.match(/\./g) || domain_val.match(/ /g) || domain_val.match(/^https?:\/\//)) && (bad_chars = !0), domain_val != $domainInput.val() ? (bad_chars && $obj.text(domain_name), obj_input = !1, $domainInput.val(domain_name), "undefined" != typeof domain_changes && (domain_changes = !0)) : bad_chars && (obj_input = !1, $domainInput.val(domain_name), "undefined" != typeof domain_changes && (domain_changes = !0))
    } else {
        var $obj = $domainInput,
            domain_name = $.trim($obj.val().replace(/^https?:\/\//, "").replace(/^www\./, "").replace(/\./g, "").replace(/ /g, ""));
        domain_name != $obj.val() && (bad_chars && $obj.val(domain_name), "undefined" != typeof domain_changes && (domain_changes = !0))
    } if ("" == domain_name) return error_msg = "&#10006; 3 character minimum.", $domainCheck.removeClass("success").addClass("error").hide().html(error_msg).fadeIn(100), $domainValid.length && $domainValid.val(0), $domainContainer.removeClass("success").addClass("error"), $eventTitle.length && $eventHashtag.length && ($eventTitle.removeClass("error").removeClass("success"), $eventHashtag.removeClass("error").removeClass("success")), $(".bottom-wrap .createIt").addClass("error").removeClass("success"), $("#splashCreateButton").attr("disabled", "disabled"), $("#splashCreateButtonFake").hasClass("disabled") || $("#splashCreateButtonFake").addClass("disabled"), !1;
    domain_name = domain_name.toLowerCase(), $obj.val(domain_name);
    var reg = /^([a-z0-9])([a-z0-9-])+([a-z0-9])$/i;
    if (!reg.test(domain_name)) {
        $obj.addClass("error-border");
        var error_msg = "&#10006;  Not a valid domain.";
        return obj_input ? $obj.val().length < 3 && (error_msg = "&#10006; 3 character minimum.") : $obj.text().length < 3 && (error_msg = "&#10006; 3 character minimum."), null != $inputObj ? ($inputObj.addClass("error").parents(".simple-modal:first").removeClass("success domainTaken").addClass("error"), $("#dupe-event-domain").length > 0 && $domainCheck.removeClass("success").addClass("error").hide().html(error_msg).fadeIn(100)) : (createPage ? ($domainCheck.removeClass("success").addClass("error").hide().html(error_msg).fadeIn(100), $domainContainer.removeClass("success").addClass("error"), $eventTitle.removeClass("success").addClass("error"), $eventHashtag.removeClass("success").addClass("error"), $(".bottom-wrap .createIt").addClass("error").removeClass("success"), $("#splashCreateButton").attr("disabled", "disabled"), $("#splashCreateButtonFake").hasClass("disabled") || $("#splashCreateButtonFake").addClass("disabled")) : $("#dupe-event-domain").length > 0 ? $domainCheck.removeClass("success").addClass("error").hide().html(error_msg).fadeIn(100) : ($domainCheck.removeClass("success").addClass("error").hide().html("").fadeIn(100), $domainContainer.addClass("error"), $domainCheck.append('<div id="domainStateText" class="hide">3 character minimum.</div>')), $domainValid.length && $domainValid.val(0)), current_text = domain_name, !1
    }
    if (domain_name != current_text) {
        var domain_check = "/splash/checkDomainAvailability";
        $.post(domain_check, {
            domain: domain_name,
            event_id: splash.server.constants.event_id
        }, function(response) {
            var jq = $.parseJSON(response);
            return jq.taken ? ($domainInput.addClass("error-border"), null != $inputObj ? ($inputObj.removeClass("success").addClass("error").parents(".simple-modal:first").removeClass("success").addClass("error domainTaken"), $("#dupe-event-domain").length > 0 && $domainCheck.removeClass("success").addClass("error").hide().html('<span class="icon-f-rte-delete"></span> Domain not available.').fadeIn(100)) : createPage ? ($domainCheck.removeClass("success").addClass("error").hide().html('<span class="icon-f-rte-delete"></span> Domain not available.').fadeIn(100), $domainContainer.removeClass("success").addClass("error"), $eventTitle.removeClass("success").addClass("error"), $eventHashtag.removeClass("success").addClass("error"), $(".bottom-wrap .createIt").addClass("error").removeClass("success"), $("#splashCreateButton").attr("disabled", "disabled"), $("#splashCreateButtonFake").hasClass("disabled") || $("#splashCreateButtonFake").addClass("disabled")) : $("#dupe-event-domain").length > 0 ? $domainCheck.removeClass("success").addClass("error").hide().html('<span class="icon-f-rte-delete"></span> Domain not available.').fadeIn(100) : ($domainCheck.removeClass("success").addClass("error").hide().html("").fadeIn(100), $domainContainer.addClass("error"), $domainCheck.append('<div id="domainStateText" class="hide">Domain not</br>available.</div>')), $("#splashDomainLink").length && ($("#splashDomainLink").hide(), $("#splashDomainManual").show()), $domainValid.length && $domainValid.val(0), !1) : (null != $inputObj ? ($inputObj.removeClass("error").addClass("success").parents(".simple-modal:first").removeClass("error domainTaken").addClass("success"), $("#dupe-event-domain").length > 0 && $domainCheck.removeClass("error").addClass("success").hide().html('<span class="icon-f-tb-save"></span> Great domain!').fadeIn(100)) : ($obj.removeClass("error-border"), createPage ? ($domainCheck.removeClass("error").addClass("success").hide().html('<span class="icon-f-tb-save"></span> Great domain!').fadeIn(100), $domainContainer.removeClass("error").addClass("success"), $eventTitle.removeClass("error").addClass("success"), $eventHashtag.removeClass("error").addClass("success"), $(".bottom-wrap .createIt").removeClass("error").addClass("success"), $("#splashCreateButton").removeAttr("disabled"), $("#splashTypeWrap").find(".form-inactive").removeClass("form-inactive"), $("#splashCreateButtonFake").removeClass("disabled")) : $("#dupe-event-domain").length > 0 ? $domainCheck.removeClass("error").addClass("success").hide().html('<span class="icon-f-tb-save"></span> Great domain!').fadeIn(100) : ($domainCheck.removeClass("error").addClass("success").hide().html("&#10003;").fadeIn(100), $domainContainer.removeClass("error"), $domainCheck.append('<div id="domainStateText" class="hide"><span class="icon-f-tb-save"></span> Great Domain!</div>'))), $domainValid.length && $domainValid.val("1"), current_text = domain_name, void $obj.addClass("changes-made"))
        })
    }
}

function getHash() {
    var href = window.location.href.split("#"),
        hash = "";
    return href.length && (hash = $.trim(href.pop())), hash
}

function capitalizeFirstLetter(string) {
    return "undefined" != typeof string && null != string ? ("" + string).charAt(0).toUpperCase() + ("" + string).slice(1) : void 0
}

function getHash() {
    var href = window.location.href.split("#"),
        hash = "";
    return href.length > 1 && (hash = $.trim(href.pop())), hash
}

function formatSuffix(dateText) {
    var suffix = "";
    switch (dateText.charAt(dateText.length - 1)) {
        case "1":
            suffix = "st";
            break;
        case "2":
            suffix = "nd";
            break;
        case "3":
            suffix = "rd";
            break;
        default:
            suffix = "th"
    }
    var two_digits = dateText.substr(-2);
    ("13" == two_digits || "12" == two_digits || "11" == two_digits) && (suffix = "th");
    var date_value = dateText + suffix;
    return date_value
}

function getMonthName(month) {
    return months[month]
}

function getDayName(day) {
    return days[day]
}

function closeRevealModal() {
    $("div.zurb-ajax-modal,div.reveal-modal-bg").fadeOut("fast", function() {
        $(this).remove(), $("#planning-tools").hasClass("expanded") && $("body").addClass("lockItUp")
    })
}

function convertAMPMto24Hour(time, format) {
    var matches = time.match(/^(\d+):(\d+):{0,1}(\d{0,2})/),
        hours = Number(matches[1]),
        minutes = Number(matches[2]);
    /PM/i.test(time) && 12 > hours && (hours += 12), /AM/i.test(time) && 12 == hours && (hours -= 12);
    var sHours = hours.toString(),
        sMinutes = minutes.toString();
    return 10 > hours && (sHours = "0" + sHours), 10 > minutes && (sMinutes = "0" + sMinutes), "format-simple" == format ? sHours + sMinutes : sHours + ":" + sMinutes + ("" != matches[3] ? ":" + matches[3] : ":00")
}

function getParameterByName(name) {
    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
        results = regex.exec(location.search);
    return null === results ? "" : decodeURIComponent(results[1].replace(/\+/g, " "))
}

function copyToClipboard(text) {
    window.prompt("Copy to clipboard: Ctrl+C, Enter", text)
}

function killFlashTabs() {
    $("#nuTool").find(".toolBtn").removeClass("fvFlash")
}

function highlightBottomNav(num) {
    return $("body").hasClass("flashNav") ? (thisTab = ".planning-tools-nav li:nth-child(" + num + ")", $(thisTab).addClass("highlight"), $(thisTab).siblings().removeClass("highlight"), void 0) : !1
}

function flashBottomNav(num) {
    return $("body").hasClass("flashNav") ? (thisTab = ".planning-tools-nav li:nth-child(" + num + ")", $(thisTab).addClass("flash"), $(thisTab).siblings().removeClass("flash"), void 0) : !1
}

function arrayUnique(a) {
    return a.reduce(function(p, c) {
        return p.indexOf(c) < 0 && p.push(c), p
    }, [])
}

function killFirstView() {
    killFlashTabs(), $("body").removeClass("flashNav giftWrap"), $("#firstViewOverlay").fadeOut(100, function() {
        $(this).remove(), $("body").removeClass("showTutorial"), $("#revertPath").length > 0 && $("#revertPath").show()
    })
}

function killSecondView() {
    $("body").removeClass("flashNav giftWrap"), $("#secondViewOverlay").fadeOut(100, function() {
        $(this).remove(), $("body").removeClass("showTut2"), $("#revertPath").length > 0 && $("#revertPath").show()
    })
}

function bindSplashDropdown($dropdown, open, forceBound) {
    if ($dropdown.data("splash-dropdown") !== !0 || forceBound) {
        $dropdown.data("splash-dropdown", !0);
        var open = open || !1;
        if (open && ($dropdown.addClass("open"), $dropdown.parents("#nav-embed").length > 0)) {
            var $last_option = $dropdown.find(".option:last"),
                top_position = $last_option.offset().top + $last_option.height();
            setTimeout(function() {
                $("#nav-embed .content").scrollTop(top_position)
            }, 1)
        }
        var $current = $dropdown.find(".current:first");
        $current.unbind("mousedown").mousedown(function() {
            if ($dropdown.hasClass("open")) $current.hasClass("no-close") || $dropdown.removeClass("open");
            else if ($dropdown.addClass("open"), $dropdown.parents("#nav-embed").length > 0) {
                var $last_option = $dropdown.find(".option:last"),
                    top_position = $last_option.offset().top + $last_option.height();
                setTimeout(function() {
                    $("#nav-embed .content").scrollTop(top_position)
                }, 1)
            }
        }), $dropdown.on("click", ".options:first > div", function() {
            var $opt = $(this),
                value = $opt.attr("value");
            if (!$current.hasClass("external-link")) {
                if ($(this).hasClass("edit-fonts")) return !1;
                $opt.addClass("active").siblings().removeClass("active"), "undefined" == typeof value && (value = $opt.html()), $current.hasClass("locked") || $opt.hasClass("locked") || $current.html($opt.html()), $current.hasClass("no-close") || $opt.hasClass("no-close") || $dropdown.removeClass("open").trigger("change"), $current.hasClass("no-val-change") || $opt.hasClass("no-val-change") || $dropdown.find("input:first").val(value).trigger("change")
            }
        });
        var drpclr;
        $dropdown.unbind("mouseover").mouseover(function() {
            clearTimeout(drpclr)
        }), $dropdown.unbind("mouseout").mouseout(function() {
            clearTimeout(drpclr), drpclr = setTimeout(function() {
                $current.hasClass("no-close") || $dropdown.removeClass("open"), $dropdown.hasClass("unit-dropdown") && $dropdown.parents(".bx:first").removeClass("dd-open")
            }, 750)
        })
    }
}

function bindSplashAccordion($accordion, open, forceBound) {
    if ($accordion.data("splash-accordion") !== !0 || forceBound) {
        $accordion.data("splash-accordion", !0);
        var open = open || !1;
        open && !$accordion.hasClass("customEdit") && $accordion.addClass("open");
        var $current = $accordion.find(".current:first"),
            $trig = $accordion.find(".nu-accord-trig:first");
        $trig.click(function() {
            $accordion.hasClass("open") ? $accordion.removeClass("open") : $accordion.addClass("open")
        });
        var $options = $accordion.find(" .options:first");
        $options.on("click", "div.option", function() {
            var $opt = $(this),
                value = $opt.attr("value");
            $options.find(".active").addClass("lastActive").siblings().removeClass("lastActive"), $opt.removeClass("active").siblings().removeClass("active"), $opt.addClass("active").siblings().removeClass("active"), "undefined" == typeof value && (value = $opt.html()), $current.html($opt.html()), $accordion.find("input:first").val(value).trigger("change")
        })
    }
}

function bindSplashTip($tip) {
    var w = $tip.attr("open-width") || 300;
    $tip.addClass("bound").find("> span:first").css({
        width: w + "px",
        marginLeft: w / -2 + "px"
    })
}

function bindSplashCheck($check) {
    var clickNuCheckbox = function() {
        var c = "checked";
        if ("undefined" != typeof $check.attr("vals")) var vals = $check.attr("vals").split(",");
        var thisVal = $check.find("input[type='hidden']:first").attr("use-val");
        if ("include_other_opt" == thisVal && (thisVal = void 0), $check.hasClass(c)) {
            var v = "undefined" != typeof vals ? vals[0] : 0;
            "undefined" != typeof $check.attr("rev") && (v = 1), "undefined" != typeof thisVal && (v = thisVal), $check.removeClass(c).find("input[type='hidden']:first").val(v).trigger("change")
        } else {
            var v = "undefined" != typeof vals ? vals[1] : 1;
            $check.attr("rev") && (v = 0), "undefined" != typeof thisVal && (v = thisVal), $check.addClass(c).find("input[type='hidden']:first").val(v).trigger("change")
        }
    };
    $check.unbind("click").click(clickNuCheckbox), clickNuCheckbox()
}

function flipAccordion($acc, newVal, triggerChange) {
    $acc.hasClass("nu-accord") || ($acc = $acc.parents(".nu-accord:first")), null != triggerChange && 1 == triggerChange ? $acc.find("input:first").val(newVal).trigger("change") : $acc.find("input:first").val(newVal);
    var $opt = $acc.find('.options div[value="' + newVal + '"]');
    $opt.addClass("active").siblings().removeClass("active"), $acc.find(".current").html($opt.html())
}

function flipDropDown($dd, newVal, triggerChange, forceResetAfterSelection) {
    $dd.hasClass("nu-dropdown") || ($dd = $dd.parents(".nu-dropdown:first")), null != triggerChange && 1 == triggerChange ? $dd.find("input:first").val(newVal).trigger("change") : $dd.find("input:first").val(newVal);
    var $opt = $dd.find("div.options").find('div[value="' + newVal + '"]:first');
    if ($opt.length < 1 && "undefined" != typeof newVal) var $opt = $dd.find("div.options").find('div[value="' + capitalizeFirstLetter(newVal) + '"]:first');
    $opt.length > 0 ? ($opt.addClass("active").siblings().removeClass("active"), $dd.find(".current").html($opt.html())) : ($dd.find("div.options").removeClass("active"), $dd.find(".current").html(""));
    var forceResetAfterSelection = forceResetAfterSelection || !1;
    (forceResetAfterSelection === !0 || "string" == typeof forceResetAfterSelection) && ($dd.find(".current").html("string" == typeof forceResetAfterSelection ? forceResetAfterSelection : "Select"), $opt.removeClass("active"))
}

function bindSplashRadio($radio, skipFirstClick) {
    var skipFirstClick = skipFirstClick || !1,
        myClick = function(e) {
            var c = "select",
                name = $radio.attr("name");
            $radio.hasClass(c) ? $radio.removeClass(c).find("input[type='hidden']:first").val(0).prop("checked", !1).trigger("change") : ($radio.parents(".nu-radio-contain:first").find(".nu-radio[name='" + name + "']").each(function() {
                $(this).find("input[type='hidden']:first").val(0).prop("checked", !1).trigger("change").end().removeClass("select")
            }), $radio.addClass(c).find("input[type='hidden']:first").val(1).prop("checked", !0).trigger("change")), e && e.stopPropagation()
        };
    $radio.unbind("click").click(myClick), skipFirstClick || myClick()
}

function setCheck($obj, value, forceTrigger) {
    $obj.hasClass("nu-checkbox") && ($obj = $obj.find("input:first")), "1" == value || "true" == value ? $obj.val(1).parent().addClass("checked") : $obj.val(0).parent().removeClass("checked"), null != forceTrigger && 1 == forceTrigger && $obj.trigger("change")
}

function getChangedInputsArray($changed_inputs) {
    var postData = {};
    return $changed_inputs.each(function() {
        "" != this.name && ("checkbox" == this.type ? $(this).hasClass("rsvp-field") ? postData["data[EventSetting][rsvp_fields][" + this.value + "]"] = 1 == this.checked ? 1 : 0 : postData[this.name] = 1 == this.checked ? 1 : 0 : "radio" == this.type ? 1 == this.checked && (postData[this.name] = this.value) : "undefined" != typeof postData[this.name] ? $.isArray(postData[this.name]) ? postData[this.name].push(this.value) : postData[this.name] = [postData[this.name], this.value] : postData[this.name] = this.value)
    }), postData
}

function flashTabs(pos) {
    var timeout = 200;
    "top" == pos ? ($tab1 = $("#nuToolBtns").find(".toolBtn:eq(0)"), $tab2 = $("#nuToolBtns").find(".toolBtn:eq(1)"), $tab3 = $("#nuToolBtns").find(".toolBtn:eq(2)"), $tab4 = $("#nuToolBtns").find(".toolBtn:eq(3)")) : "bottom" == pos && ($tab1 = $("#nuPlanBtns").find(".toolBtn:eq(0)"), $tab2 = $("#nuPlanBtns").find(".toolBtn:eq(1)"), $tab3 = $("#nuPlanBtns").find(".toolBtn:eq(2)"), $tab4 = $("#nuPlanBtns").find(".toolBtn:eq(3)")), $tab1.addClass("fvFlash"), setTimeout(function() {
        $tab2.addClass("fvFlash"), setTimeout(function() {
            $tab3.addClass("fvFlash"), setTimeout(function() {
                $tab4.addClass("fvFlash")
            }, timeout)
        }, timeout)
    }, timeout)
}

function saveTags(tags, _callBack, _errorCallBack) {
    tags && 0 != tags.length && $.ajax({
        url: "/address_book/saveTags",
        type: "post",
        data: {
            tags: tags
        },
        dataType: "json"
    }).done(function() {
        "function" == typeof _callBack && _callBack()
    }).fail(function(jqXHR, textStatus) {
        console.log("Error saving tags: " + textStatus), "function" == typeof _errorCallBack && _errorCallBack()
    })
}

function isValidEmail(val) {
    var reg = /^([A-Za-z0-9_\-\.\+:])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]*)$/;
    return reg.test($.trim(val))
}

function debounce(func, wait, immediate) {
    var timeout;
    return function() {
        var context = this,
            args = arguments;
        clearTimeout(timeout), timeout = setTimeout(function() {
            timeout = null, immediate || func.apply(context, args)
        }, wait), immediate && !timeout && func.apply(context, args)
    }
}

function trackIndicativeEvent(value, params) {
    return "undefined" != typeof Indicative ? !1 : void 0
}

function scrollToBlock($block, options) {
    if (options = options ? options : {}, "undefined" == typeof options.force && (options.force = !1), "undefined" == typeof options.pulse && (options.pulse = !0), "undefined" == typeof options.offset && (options.offset = 0), "undefined" == typeof options.percentageOffset && (options.percentageOffset = 0), "undefined" == typeof options.toBlockTop && (options.toBlockTop = !1), options.pulse && pulseBlock($block), "undefined" == typeof $block || 1 == splash.server.constants.prevent_scroll || $("body").hasClass("is-viewing-modal") || 0 == $block.length || !$block.is(":visible") && !$block.hasClass("nav-jump")) return !1;
    $block.length > 1 && ($block = $block.first());
    var clientHeight = document.documentElement.clientHeight,
        percentageOffset = Math.abs(options.percentageOffset) < 1 ? options.percentageOffset : options.percentageOffset / 100;
    if (options.toBlockTop) var insideBlockOffset = 0;
    else var insideBlockOffset = $block.height() / 2;
    (options.force || !isBlockInViewport($block)) && $("html, body").animate({
        scrollTop: $block.offset().top + insideBlockOffset - clientHeight / 2 + clientHeight * percentageOffset + options.offset
    }, 300)
}

function pulseBlock($block) {
    if ($block.addClass("pulse"), setTimeout(function() {
        $block.removeClass("pulse")
    }, 2e3), splash.finetune && splash.finetune.workspace.isPseudoActive() && $block.closest(".dope-repeatable-master").length) {
        var $linkedRepeatableElements = splash.repeatableElement.finetune.getRepeatedElements($block);
        $linkedRepeatableElements.length && ($linkedRepeatableElements.addClass("pulse"), setTimeout(function() {
            $linkedRepeatableElements.removeClass("pulse")
        }, 2e3))
    }
}

function isBlockInViewport($block) {
    var viewportHeight = jQuery(window).height(),
        documentScrollTop = jQuery(document).scrollTop(),
        minTop = documentScrollTop,
        maxTop = documentScrollTop + viewportHeight,
        elementOffset = $block.offset();
    return elementOffset.top > minTop && elementOffset.top < maxTop
}

function setAddressAutocomplete($input, options) {
    if ("undefined" == typeof google || google === !1) return console.log("Setting address field autocomplete: google is not defined"), !1;
    options = options ? options : {}, autocomplete_options = {}, options.only_cities && (autocomplete_options.types = ["geocode"]);
    var autocomplete = new google.maps.places.Autocomplete($input[0], autocomplete_options),
        listener = google.maps.event.addListener(autocomplete, "place_changed", function() {
            var place = autocomplete.getPlace(),
                address_fields = {
                    name: place.name,
                    street_number: "",
                    address: "",
                    city: "",
                    state: "",
                    zip: ""
                };
            if (place.address_components)
                for (var i in place.address_components) "postal_code" == place.address_components[i].types[0] ? address_fields.zip = place.address_components[i].long_name : "street_number" == place.address_components[i].types[0] ? address_fields.street_number = place.address_components[i].long_name : "route" == place.address_components[i].types[0] ? address_fields.address = place.address_components[i].long_name : "locality" == place.address_components[i].types[0] ? address_fields.city = place.address_components[i].long_name : "administrative_area_level_1" == place.address_components[i].types[0] ? address_fields.state = place.address_components[i].short_name : "country" == place.address_components[i].types[0] && (address_fields.country = place.address_components[i].long_name);
            if (address_fields.address = address_fields.street_number + " " + address_fields.address, $input.addClass("autocompleted"), $input.closest(".venue-search-container").length) {
                var $container = $input.closest(".venue-search-container");
                if ($container.find(".venue-search-name").val(address_fields.name).end().find(".venue-search-city").val(address_fields.city).end().find(".venue-search-state").val(address_fields.state).end().find(".venue-search-country").val(address_fields.country).end().find(".venue-search-address").val(address_fields.address).end().find(".venue-search-zip-code").val(address_fields.zip), "undefined" != typeof place.geometry && $container.find(".venue-search-lat").val(place.geometry.location.lat()).end().find(".venue-search-lng").val(place.geometry.location.lng()), setCheck($container.find(".venue-search-tbd-input"), 0), "venue-search" == $input.prop("id")) {
                    var $maps_on_page = $("#splash-container").find("div.map.sf:visible");
                    1 == $maps_on_page.length && "undefined" != typeof getGoogleMapImg && getGoogleMapImg(function(data) {
                        var address_string = createNewMapString(address_fields),
                            sfid = $maps_on_page.prop("id").replace("sfid-", "");
                        $maps_on_page.find("div.embed").find("img:first").prop("src", data.image), $maps_on_page.find("div.body").html(address_string), finetuneEditedFields["data[SplashFeed][" + sfid + "][embed_code]"] = '<img src="' + data.image + '" />', finetuneEditedFields["data[SplashFeed][" + sfid + "][body]"] = address_string, finetuneFieldChangesMade()
                    }, $container)
                }
            }
            if ($input.closest(".address-holder").find(".address-autocomplete-field").length) {
                var $holder = $input.closest(".address-holder");
                $holder.find(".address-autocomplete-field[growth-machine=venue_name]").val(address_fields.name).end().find(".address-autocomplete-field[growth-machine=city]").val(address_fields.city).end().find(".address-autocomplete-field[growth-machine=state]").val(address_fields.state).end().find(".address-autocomplete-field[growth-machine=country]").val(address_fields.country).end().find(".address-autocomplete-field[growth-machine=address]").val(address_fields.address).end().find(".address-autocomplete-field[growth-machine=zipcode]").val(address_fields.zip).end(), "undefined" != typeof place.geometry && $holder.find(".address-autocomplete-field[growth-machine=lat]").val(place.geometry.location.lat()).end().find(".address-autocomplete-field[growth-machine=lng]").val(place.geometry.location.lng())
            }
            $input.closest("#rsvp-form-inner").length && ($rsvp_form = $input.closest("#rsvp-form-inner"), $rsvp_form.find(".auto-country").length && "undefined" != typeof address_fields.country && $rsvp_form.find(".auto-country input").val(address_fields.country), $rsvp_form.find(".auto-state").length && "undefined" != typeof address_fields.state && $rsvp_form.find(".auto-state input").val(address_fields.state), $rsvp_form.find(".auto-city").length && "undefined" != typeof address_fields.city && $rsvp_form.find(".auto-city input").val(address_fields.city), $rsvp_form.find(".auto-address").length && "undefined" != typeof address_fields.address && $rsvp_form.find(".auto-address input").val(address_fields.address), $rsvp_form.find(".auto-zipcode").length && "undefined" != typeof address_fields.zip && $rsvp_form.find(".auto-zipcode input").val(address_fields.zip), $rsvp_form.find(".auto-venue").length && "undefined" != typeof address_fields.name && $rsvp_form.find(".auto-venue input").val(address_fields.name), $rsvp_form.find(".auto-address").length && "undefined" != typeof address_fields.address && $rsvp_form.find(".auto-address input").val(address_fields.address), "undefined" != typeof place.geometry && $rsvp_form.find(".auto-latitude").length && $rsvp_form.find(".auto-latitude input").val(place.geometry.location.lat()), "undefined" != typeof place.geometry && $rsvp_form.find(".auto-longitude").length && $rsvp_form.find(".auto-longitude input").val(place.geometry.location.lng())), "function" == typeof options.done && options.done(place, address_fields)
        });
    $input.data({
        googleAutocompleteListener: listener,
        googleAutocomplete: autocomplete
    })
}

function removeAddressAutocomplete($input) {
    var listener = $input.data("googleAutocompleteListener"),
        autocomplete = $input.data("googleAutocomplete");
    void 0 !== autocomplete && google.maps.event.clearInstanceListeners(autocomplete), void 0 !== listener && google.maps.event.removeListener(listener), $(".pac-container").remove()
}

function closeSimpleModal(options) {
    null == options && (options = {});
    var $addNewSection = $("#add-new-element");
    if ($addNewSection.length > 0 && $addNewSection.is(":visible") && $addNewSection.removeClass("set").find(".active").removeClass("active"), "undefined" != typeof openDatePicker && openDatePicker !== !1) return !1;
    "undefined" != typeof cropImageJcrop && cropImageJcrop.destroy && cropImageJcrop.destroy();
    var currentModal = splash.modal.stack.getCurrent();
    if (!currentModal || !currentModal.persistent || 1 != currentModal.persistent || options.persistent) {
        "undefined" != typeof options.closeAll && options.closeAll && splash.modal.stack.clear();
        for (var previousModal = splash.modal.stack.pop(); currentModal && previousModal && currentModal.id && previousModal.id && currentModal.id == previousModal.id;) previousModal = splash.modal.stack.pop();
        var $wrap = $("#simple-modal-wrap");
        if (previousModal && $wrap.find("#" + previousModal.id).length > 0) return fireSimpleModalOpts = {
            fromStack: !0
        }, "undefined" != typeof previousModal.params && (fireSimpleModalOpts.settings = previousModal.params), $wrap.find("#" + previousModal.id).fireSimpleModal(fireSimpleModalOpts), !1;
        currentModal && "video-embed" == currentModal.id ? splash.videoElement.finetune.stopVideoPlay() : currentModal && "audio-embed" == currentModal.id && splash.audioElement.finetune.stopAudioPlay(), $wrap.find(".simple-modal-flow-control > .simple-modal, #simple-modal-ajax").hide(), $("#simple-modal-ajax").removeClass("email-send").empty();
        var classesToRemove = "showSimple custom-editor";
        $("#planning-tools").hasClass("expanded") || $("body").hasClass("is-viewing-modal") || (classesToRemove += " lockItUp"), $("body").removeClass(classesToRemove), $("#galleryWrap").hide()
    }
}

function fireAjaxModal($link, params, callback) {
    var params = params || {}, $link = $link || $(),
        loading_content = "",
        ajaxUrl = params.href || $link.attr("reveal-href"),
        cacheId = params.cacheId || $link.attr("cache-modal"),
        xtraAttr = params.xtraAttr || $link.attr("xtra-attr"),
        xtraClasses = params.xtraClasses || $link.attr("xtra-classes");
    if ("undefined" == typeof ajaxUrl) {
        if ("undefined" == typeof params.href) return;
        ajaxUrl = params.href
    }
    if ("undefined" == typeof params.event_id && "undefined" != typeof splash && "undefined" != typeof splash.server && "undefined" != typeof splash.server.constants && "undefined" != typeof splash.server.constants.event_id && (params.event_id = splash.server.constants.event_id), "undefined" == typeof xtraAttr && "undefined" != typeof params.xtraAttr && (xtraAttr = params.xtraAttr), "undefined" == typeof xtraClasses && (xtraClasses = "undefined" != typeof params.xtraClasses ? params.xtraClasses : ""), "undefined" != typeof cacheId) {
        var $cachedModal = $("#" + cacheId);
        if ($cachedModal.length > 0) return $cachedModal.fireSimpleModal(), void("function" == typeof callback && callback($ajaxModal))
    }
    $link.length && "undefined" != typeof $link.attr("section-title") && (loading_content += "<h3>" + $link.attr("section-title") + "</h3>"), loading_content += '<div class="nu-loader med loading"></div>';
    var $ajaxModal = $("#simple-modal-ajax");
    $ajaxModal.removeAttr("xtra-attr event-id").fireSimpleModal(params).html(loading_content), "dev-tools-btn" === $link.attr("id") ? $ajaxModal.addClass("code-sleeker").css("overflow-y", "hidden") : $ajaxModal.addClass("code-sleeker").css("overflow-y", ""), $.ajax({
        url: ajaxUrl,
        data: params,
        type: "POST",
        dataType: "html"
    }).done(function(responseText) {
        xtraAttr && $ajaxModal.attr("xtra-attr", xtraAttr), modal_visible = !0, modal_offset = $ajaxModal.offset().top, cacheId ? ($("#simple-modal-wrap").find(".simple-modal-flow-control").append('<div id="' + cacheId + '" class="simple-modal hide">' + responseText + "</div>"), closeSimpleModal(), $("#" + cacheId).fireSimpleModal(), "function" == typeof callback && callback($ajaxModal)) : ($ajaxModal.html(responseText), $ajaxModal.children().hasClass("simple-modal") ? $ajaxModal.removeClass("simple-modal sleeker full-sleeker").children(".simple-modal").show().css("display", "inline-block").addClass(xtraClasses) : $ajaxModal.addClass("simple-modal sleeker full-sleeker " + xtraClasses)), "function" == typeof callback && callback($ajaxModal)
    }).fail(function() {
        closeSimpleModal()
    })
}

function empty(mixed_var) {
    var undef, key, i, len, emptyValues = [undef, null, !1, 0, "", "0"];
    for (i = 0, len = emptyValues.length; len > i; i++)
        if (mixed_var === emptyValues[i]) return !0;
    if ("object" == typeof mixed_var) {
        for (key in mixed_var) return !1;
        return !0
    }
    return !1
}

function arrEmpty(variable, index1, index2, index3, index4, index5, index6) {
    return empty(variable) ? !0 : index1 ? empty(variable[index1]) ? !0 : index2 ? empty(variable[index1][index2]) ? !0 : index3 ? empty(variable[index1][index2][index3]) ? !0 : index4 ? empty(variable[index1][index2][index3][index4]) ? !0 : index5 ? empty(variable[index1][index2][index3][index4][index5]) ? !0 : index6 ? empty(variable[index1][index2][index3][index4][index5][index6]) ? !0 : void 0 : !1 : !1 : !1 : !1 : !1 : !1
}

function addListener(element, type, expression, bubbling) {
    return bubbling = bubbling || !1, window.addEventListener ? (element.addEventListener(type, expression, bubbling), !0) : window.attachEvent ? (element.attachEvent("on" + type, expression), !0) : !1
}
if (window.Modernizr = function(a, b, c) {
    function C(a) {
        j.cssText = a
    }

    function D(a, b) {
        return C(n.join(a + ";") + (b || ""))
    }

    function E(a, b) {
        return typeof a === b
    }

    function F(a, b) {
        return !!~("" + a).indexOf(b)
    }

    function G(a, b) {
        for (var d in a) {
            var e = a[d];
            if (!F(e, "-") && j[e] !== c) return "pfx" == b ? e : !0
        }
        return !1
    }

    function H(a, b, d) {
        for (var e in a) {
            var f = b[a[e]];
            if (f !== c) return d === !1 ? a[e] : E(f, "function") ? f.bind(d || b) : f
        }
        return !1
    }

    function I(a, b, c) {
        var d = a.charAt(0).toUpperCase() + a.slice(1),
            e = (a + " " + p.join(d + " ") + d).split(" ");
        return E(b, "string") || E(b, "undefined") ? G(e, b) : (e = (a + " " + q.join(d + " ") + d).split(" "), H(e, b, c))
    }

    function J() {
        e.input = function(c) {
            for (var d = 0, e = c.length; e > d; d++) u[c[d]] = c[d] in k;
            return u.list && (u.list = !! b.createElement("datalist") && !! a.HTMLDataListElement), u
        }("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")), e.inputtypes = function(a) {
            for (var e, f, h, d = 0, i = a.length; i > d; d++) k.setAttribute("type", f = a[d]), e = "text" !== k.type, e && (k.value = l, k.style.cssText = "position:absolute;visibility:hidden;", /^range$/.test(f) && k.style.WebkitAppearance !== c ? (g.appendChild(k), h = b.defaultView, e = h.getComputedStyle && "textfield" !== h.getComputedStyle(k, null).WebkitAppearance && 0 !== k.offsetHeight, g.removeChild(k)) : /^(search|tel)$/.test(f) || (e = /^(url|email)$/.test(f) ? k.checkValidity && k.checkValidity() === !1 : k.value != l)), t[a[d]] = !! e;
            return t
        }("search tel url email datetime date month week time datetime-local number range color".split(" "))
    }
    var x, B, d = "2.8.3",
        e = {}, f = !0,
        g = b.documentElement,
        h = "modernizr",
        i = b.createElement(h),
        j = i.style,
        k = b.createElement("input"),
        l = ":)",
        m = {}.toString,
        n = " -webkit- -moz- -o- -ms- ".split(" "),
        o = "Webkit Moz O ms",
        p = o.split(" "),
        q = o.toLowerCase().split(" "),
        r = {
            svg: "http://www.w3.org/2000/svg"
        }, s = {}, t = {}, u = {}, v = [],
        w = v.slice,
        y = function(a, c, d, e) {
            var f, i, j, k, l = b.createElement("div"),
                m = b.body,
                n = m || b.createElement("body");
            if (parseInt(d, 10))
                for (; d--;) j = b.createElement("div"), j.id = e ? e[d] : h + (d + 1), l.appendChild(j);
            return f = ["&#173;", '<style id="s', h, '">', a, "</style>"].join(""), l.id = h, (m ? l : n).innerHTML += f, n.appendChild(l), m || (n.style.background = "", n.style.overflow = "hidden", k = g.style.overflow, g.style.overflow = "hidden", g.appendChild(n)), i = c(l, a), m ? l.parentNode.removeChild(l) : (n.parentNode.removeChild(n), g.style.overflow = k), !! i
        }, z = function() {
            function d(d, e) {
                e = e || b.createElement(a[d] || "div"), d = "on" + d;
                var f = d in e;
                return f || (e.setAttribute || (e = b.createElement("div")), e.setAttribute && e.removeAttribute && (e.setAttribute(d, ""), f = E(e[d], "function"), E(e[d], "undefined") || (e[d] = c), e.removeAttribute(d))), e = null, f
            }
            var a = {
                select: "input",
                change: "input",
                submit: "form",
                reset: "form",
                error: "img",
                load: "img",
                abort: "img"
            };
            return d
        }(),
        A = {}.hasOwnProperty;
    B = E(A, "undefined") || E(A.call, "undefined") ? function(a, b) {
        return b in a && E(a.constructor.prototype[b], "undefined")
    } : function(a, b) {
        return A.call(a, b)
    }, Function.prototype.bind || (Function.prototype.bind = function(b) {
        var c = this;
        if ("function" != typeof c) throw new TypeError;
        var d = w.call(arguments, 1),
            e = function() {
                if (this instanceof e) {
                    var a = function() {};
                    a.prototype = c.prototype;
                    var f = new a,
                        g = c.apply(f, d.concat(w.call(arguments)));
                    return Object(g) === g ? g : f
                }
                return c.apply(b, d.concat(w.call(arguments)))
            };
        return e
    }), s.flexbox = function() {
        return I("flexWrap")
    }, s.flexboxlegacy = function() {
        return I("boxDirection")
    }, s.canvas = function() {
        var a = b.createElement("canvas");
        return !!a.getContext && !! a.getContext("2d")
    }, s.canvastext = function() {
        return !!e.canvas && !! E(b.createElement("canvas").getContext("2d").fillText, "function")
    }, s.webgl = function() {
        return !!a.WebGLRenderingContext
    }, s.touch = function() {
        var c;
        return "ontouchstart" in a || a.DocumentTouch && b instanceof DocumentTouch ? c = !0 : y(["@media (", n.join("touch-enabled),("), h, ")", "{#modernizr{top:9px;position:absolute}}"].join(""), function(a) {
            c = 9 === a.offsetTop
        }), c
    }, s.geolocation = function() {
        return "geolocation" in navigator
    }, s.postmessage = function() {
        return !!a.postMessage
    }, s.websqldatabase = function() {
        return !!a.openDatabase
    }, s.indexedDB = function() {
        return !!I("indexedDB", a)
    }, s.hashchange = function() {
        return z("hashchange", a) && (b.documentMode === c || b.documentMode > 7)
    }, s.history = function() {
        return !!a.history && !! history.pushState
    }, s.draganddrop = function() {
        var a = b.createElement("div");
        return "draggable" in a || "ondragstart" in a && "ondrop" in a
    }, s.websockets = function() {
        return "WebSocket" in a || "MozWebSocket" in a
    }, s.rgba = function() {
        return C("background-color:rgba(150,255,150,.5)"), F(j.backgroundColor, "rgba")
    }, s.hsla = function() {
        return C("background-color:hsla(120,40%,100%,.5)"), F(j.backgroundColor, "rgba") || F(j.backgroundColor, "hsla")
    }, s.multiplebgs = function() {
        return C("background:url(https://),url(https://),red url(https://)"), /(url\s*\(.*?){3}/.test(j.background)
    }, s.backgroundsize = function() {
        return I("backgroundSize")
    }, s.borderimage = function() {
        return I("borderImage")
    }, s.borderradius = function() {
        return I("borderRadius")
    }, s.boxshadow = function() {
        return I("boxShadow")
    }, s.textshadow = function() {
        return "" === b.createElement("div").style.textShadow
    }, s.opacity = function() {
        return D("opacity:.55"), /^0.55$/.test(j.opacity)
    }, s.cssanimations = function() {
        return I("animationName")
    }, s.csscolumns = function() {
        return I("columnCount")
    }, s.cssgradients = function() {
        var a = "background-image:",
            b = "gradient(linear,left top,right bottom,from(#9f9),to(white));",
            c = "linear-gradient(left top,#9f9, white);";
        return C((a + "-webkit- ".split(" ").join(b + a) + n.join(c + a)).slice(0, -a.length)), F(j.backgroundImage, "gradient")
    }, s.cssreflections = function() {
        return I("boxReflect")
    }, s.csstransforms = function() {
        return !!I("transform")
    }, s.csstransforms3d = function() {
        var a = !! I("perspective");
        return a && "webkitPerspective" in g.style && y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}", function(b) {
            a = 9 === b.offsetLeft && 3 === b.offsetHeight
        }), a
    }, s.csstransitions = function() {
        return I("transition")
    }, s.fontface = function() {
        var a;
        return y('@font-face {font-family:"font";src:url("https://")}', function(c, d) {
            var e = b.getElementById("smodernizr"),
                f = e.sheet || e.styleSheet,
                g = f ? f.cssRules && f.cssRules[0] ? f.cssRules[0].cssText : f.cssText || "" : "";
            a = /src/i.test(g) && 0 === g.indexOf(d.split(" ")[0])
        }), a
    }, s.generatedcontent = function() {
        var a;
        return y(["#", h, "{font:0/0 a}#", h, ':after{content:"', l, '";visibility:hidden;font:3px/1 a}'].join(""), function(b) {
            a = b.offsetHeight >= 3
        }), a
    }, s.video = function() {
        var a = b.createElement("video"),
            c = !1;
        try {
            (c = !! a.canPlayType) && (c = new Boolean(c), c.ogg = a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/, ""), c.h264 = a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/, ""), c.webm = a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/, ""))
        } catch (d) {}
        return c
    }, s.audio = function() {
        var a = b.createElement("audio"),
            c = !1;
        try {
            (c = !! a.canPlayType) && (c = new Boolean(c), c.ogg = a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, ""), c.mp3 = a.canPlayType("audio/mpeg;").replace(/^no$/, ""), c.wav = a.canPlayType('audio/wav; codecs="1"').replace(/^no$/, ""), c.m4a = (a.canPlayType("audio/x-m4a;") || a.canPlayType("audio/aac;")).replace(/^no$/, ""))
        } catch (d) {}
        return c
    }, s.localstorage = function() {
        try {
            return localStorage.setItem(h, h), localStorage.removeItem(h), !0
        } catch (a) {
            return !1
        }
    }, s.sessionstorage = function() {
        try {
            return sessionStorage.setItem(h, h), sessionStorage.removeItem(h), !0
        } catch (a) {
            return !1
        }
    }, s.webworkers = function() {
        return !!a.Worker
    }, s.applicationcache = function() {
        return !!a.applicationCache
    }, s.svg = function() {
        return !!b.createElementNS && !! b.createElementNS(r.svg, "svg").createSVGRect
    }, s.inlinesvg = function() {
        var a = b.createElement("div");
        return a.innerHTML = "<svg/>", (a.firstChild && a.firstChild.namespaceURI) == r.svg
    }, s.smil = function() {
        return !!b.createElementNS && /SVGAnimate/.test(m.call(b.createElementNS(r.svg, "animate")))
    }, s.svgclippaths = function() {
        return !!b.createElementNS && /SVGClipPath/.test(m.call(b.createElementNS(r.svg, "clipPath")))
    };
    for (var K in s) B(s, K) && (x = K.toLowerCase(), e[x] = s[K](), v.push((e[x] ? "" : "no-") + x));
    return e.input || J(), e.addTest = function(a, b) {
        if ("object" == typeof a)
            for (var d in a) B(a, d) && e.addTest(d, a[d]);
        else {
            if (a = a.toLowerCase(), e[a] !== c) return e;
            b = "function" == typeof b ? b() : b, "undefined" != typeof f && f && (g.className += " m-" + (b ? "" : "no-") + a), e[a] = b
        }
        return e
    }, C(""), i = k = null,
    function(a, b) {
        function l(a, b) {
            var c = a.createElement("p"),
                d = a.getElementsByTagName("head")[0] || a.documentElement;
            return c.innerHTML = "x<style>" + b + "</style>", d.insertBefore(c.lastChild, d.firstChild)
        }

        function m() {
            var a = s.elements;
            return "string" == typeof a ? a.split(" ") : a
        }

        function n(a) {
            var b = j[a[h]];
            return b || (b = {}, i++, a[h] = i, j[i] = b), b
        }

        function o(a, c, d) {
            if (c || (c = b), k) return c.createElement(a);
            d || (d = n(c));
            var g;
            return g = d.cache[a] ? d.cache[a].cloneNode() : f.test(a) ? (d.cache[a] = d.createElem(a)).cloneNode() : d.createElem(a), !g.canHaveChildren || e.test(a) || g.tagUrn ? g : d.frag.appendChild(g)
        }

        function p(a, c) {
            if (a || (a = b), k) return a.createDocumentFragment();
            c = c || n(a);
            for (var d = c.frag.cloneNode(), e = 0, f = m(), g = f.length; g > e; e++) d.createElement(f[e]);
            return d
        }

        function q(a, b) {
            b.cache || (b.cache = {}, b.createElem = a.createElement, b.createFrag = a.createDocumentFragment, b.frag = b.createFrag()), a.createElement = function(c) {
                return s.shivMethods ? o(c, a, b) : b.createElem(c)
            }, a.createDocumentFragment = Function("h,f", "return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&(" + m().join().replace(/[\w\-]+/g, function(a) {
                return b.createElem(a), b.frag.createElement(a), 'c("' + a + '")'
            }) + ");return n}")(s, b.frag)
        }

        function r(a) {
            a || (a = b);
            var c = n(a);
            return s.shivCSS && !g && !c.hasCSS && (c.hasCSS = !! l(a, "article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")), k || q(a, c), a
        }
        var g, k, c = "3.7.0",
            d = a.html5 || {}, e = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,
            f = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,
            h = "_html5shiv",
            i = 0,
            j = {};
        ! function() {
            try {
                var a = b.createElement("a");
                a.innerHTML = "<xyz></xyz>", g = "hidden" in a, k = 1 == a.childNodes.length || function() {
                    b.createElement("a");
                    var a = b.createDocumentFragment();
                    return "undefined" == typeof a.cloneNode || "undefined" == typeof a.createDocumentFragment || "undefined" == typeof a.createElement
                }()
            } catch (c) {
                g = !0, k = !0
            }
        }();
        var s = {
            elements: d.elements || "abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",
            version: c,
            shivCSS: d.shivCSS !== !1,
            supportsUnknownElements: k,
            shivMethods: d.shivMethods !== !1,
            type: "default",
            shivDocument: r,
            createElement: o,
            createDocumentFragment: p
        };
        a.html5 = s, r(b)
    }(this, b), e._version = d, e._prefixes = n, e._domPrefixes = q, e._cssomPrefixes = p, e.hasEvent = z, e.testProp = function(a) {
        return G([a])
    }, e.testAllProps = I, e.testStyles = y, g.className = g.className.replace(/(^|\s)no-js(\s|$)/, "$1$2") + (f ? " m-js m-" + v.join(" m-") : ""), e
}(this, this.document), function(a, b, c) {
    function d(a) {
        return "[object Function]" == o.call(a)
    }

    function e(a) {
        return "string" == typeof a
    }

    function f() {}

    function g(a) {
        return !a || "loaded" == a || "complete" == a || "uninitialized" == a
    }

    function h() {
        var a = p.shift();
        q = 1, a ? a.t ? m(function() {
            ("c" == a.t ? B.injectCss : B.injectJs)(a.s, 0, a.a, a.x, a.e, 1)
        }, 0) : (a(), h()) : q = 0
    }

    function i(a, c, d, e, f, i, j) {
        function k(b) {
            if (!o && g(l.readyState) && (u.r = o = 1, !q && h(), l.onload = l.onreadystatechange = null, b)) {
                "img" != a && m(function() {
                    t.removeChild(l)
                }, 50);
                for (var d in y[c]) y[c].hasOwnProperty(d) && y[c][d].onload()
            }
        }
        var j = j || B.errorTimeout,
            l = b.createElement(a),
            o = 0,
            r = 0,
            u = {
                t: d,
                s: c,
                e: f,
                a: i,
                x: j
            };
        1 === y[c] && (r = 1, y[c] = []), "object" == a ? l.data = c : (l.src = c, l.type = a), l.width = l.height = "0", l.onerror = l.onload = l.onreadystatechange = function() {
            k.call(this, r)
        }, p.splice(e, 0, u), "img" != a && (r || 2 === y[c] ? (t.insertBefore(l, s ? null : n), m(k, j)) : y[c].push(l))
    }

    function j(a, b, c, d, f) {
        return q = 0, b = b || "j", e(a) ? i("c" == b ? v : u, a, b, this.i++, c, d, f) : (p.splice(this.i++, 0, a), 1 == p.length && h()), this
    }

    function k() {
        var a = B;
        return a.loader = {
            load: j,
            i: 0
        }, a
    }
    var A, B, l = b.documentElement,
        m = a.setTimeout,
        n = b.getElementsByTagName("script")[0],
        o = {}.toString,
        p = [],
        q = 0,
        r = "MozAppearance" in l.style,
        s = r && !! b.createRange().compareNode,
        t = s ? l : n.parentNode,
        l = a.opera && "[object Opera]" == o.call(a.opera),
        l = !! b.attachEvent && !l,
        u = r ? "object" : l ? "script" : "img",
        v = l ? "script" : u,
        w = Array.isArray || function(a) {
            return "[object Array]" == o.call(a)
        }, x = [],
        y = {}, z = {
            timeout: function(a, b) {
                return b.length && (a.timeout = b[0]), a
            }
        };
    B = function(a) {
        function b(a) {
            var e, f, g, a = a.split("!"),
                b = x.length,
                c = a.pop(),
                d = a.length,
                c = {
                    url: c,
                    origUrl: c,
                    prefixes: a
                };
            for (f = 0; d > f; f++) g = a[f].split("="), (e = z[g.shift()]) && (c = e(c, g));
            for (f = 0; b > f; f++) c = x[f](c);
            return c
        }

        function g(a, e, f, g, h) {
            var i = b(a),
                j = i.autoCallback;
            i.url.split(".").pop().split("?").shift(), i.bypass || (e && (e = d(e) ? e : e[a] || e[g] || e[a.split("/").pop().split("?")[0]]), i.instead ? i.instead(a, e, f, g, h) : (y[i.url] ? i.noexec = !0 : y[i.url] = 1, f.load(i.url, i.forceCSS || !i.forceJS && "css" == i.url.split(".").pop().split("?").shift() ? "c" : c, i.noexec, i.attrs, i.timeout), (d(e) || d(j)) && f.load(function() {
                k(), e && e(i.origUrl, h, g), j && j(i.origUrl, h, g), y[i.url] = 2
            })))
        }

        function h(a, b) {
            function c(a, c) {
                if (a) {
                    if (e(a)) c || (j = function() {
                        var a = [].slice.call(arguments);
                        k.apply(this, a), l()
                    }), g(a, j, b, 0, h);
                    else if (Object(a) === a)
                        for (n in m = function() {
                            var c, b = 0;
                            for (c in a) a.hasOwnProperty(c) && b++;
                            return b
                        }(), a) a.hasOwnProperty(n) && (!c && !--m && (d(j) ? j = function() {
                            var a = [].slice.call(arguments);
                            k.apply(this, a), l()
                        } : j[n] = function(a) {
                            return function() {
                                var b = [].slice.call(arguments);
                                a && a.apply(this, b), l()
                            }
                        }(k[n])), g(a[n], j, b, n, h))
                } else !c && l()
            }
            var m, n, h = !! a.test,
                i = a.load || a.both,
                j = a.callback || f,
                k = j,
                l = a.complete || f;
            c(h ? a.yep : a.nope, !! i), i && c(i)
        }
        var i, j, l = this.yepnope.loader;
        if (e(a)) g(a, 0, l, 0);
        else if (w(a))
            for (i = 0; i < a.length; i++) j = a[i], e(j) ? g(j, 0, l, 0) : w(j) ? B(j) : Object(j) === j && h(j, l);
        else Object(a) === a && h(a, l)
    }, B.addPrefix = function(a, b) {
        z[a] = b
    }, B.addFilter = function(a) {
        x.push(a)
    }, B.errorTimeout = 1e4, null == b.readyState && b.addEventListener && (b.readyState = "loading", b.addEventListener("DOMContentLoaded", A = function() {
        b.removeEventListener("DOMContentLoaded", A, 0), b.readyState = "complete"
    }, 0)), a.yepnope = k(), a.yepnope.executeStack = h, a.yepnope.injectJs = function(a, c, d, e, i, j) {
        var l, o, k = b.createElement("script"),
            e = e || B.errorTimeout;
        k.src = a;
        for (o in d) k.setAttribute(o, d[o]);
        c = j ? h : c || f, k.onreadystatechange = k.onload = function() {
            !l && g(k.readyState) && (l = 1, c(), k.onload = k.onreadystatechange = null)
        }, m(function() {
            l || (l = 1, c(1))
        }, e), i ? k.onload() : n.parentNode.insertBefore(k, n)
    }, a.yepnope.injectCss = function(a, c, d, e, g, i) {
        var j, e = b.createElement("link"),
            c = i ? h : c || f;
        e.href = a, e.rel = "stylesheet", e.type = "text/css";
        for (j in d) e.setAttribute(j, d[j]);
        g || (n.parentNode.insertBefore(e, n), m(c, 0))
    }
}(this, document), Modernizr.load = function() {
    yepnope.apply(window, [].slice.call(arguments, 0))
}, function() {
    function createReduce(dir) {
        function iterator(obj, iteratee, memo, keys, index, length) {
            for (; index >= 0 && length > index; index += dir) {
                var currentKey = keys ? keys[index] : index;
                memo = iteratee(memo, obj[currentKey], currentKey, obj)
            }
            return memo
        }
        return function(obj, iteratee, memo, context) {
            iteratee = optimizeCb(iteratee, context, 4);
            var keys = !isArrayLike(obj) && _.keys(obj),
                length = (keys || obj).length,
                index = dir > 0 ? 0 : length - 1;
            return arguments.length < 3 && (memo = obj[keys ? keys[index] : index], index += dir), iterator(obj, iteratee, memo, keys, index, length)
        }
    }

    function createPredicateIndexFinder(dir) {
        return function(array, predicate, context) {
            predicate = cb(predicate, context);
            for (var length = getLength(array), index = dir > 0 ? 0 : length - 1; index >= 0 && length > index; index += dir)
                if (predicate(array[index], index, array)) return index;
            return -1
        }
    }

    function createIndexFinder(dir, predicateFind, sortedIndex) {
        return function(array, item, idx) {
            var i = 0,
                length = getLength(array);
            if ("number" == typeof idx) dir > 0 ? i = idx >= 0 ? idx : Math.max(idx + length, i) : length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
            else if (sortedIndex && idx && length) return idx = sortedIndex(array, item), array[idx] === item ? idx : -1;
            if (item !== item) return idx = predicateFind(slice.call(array, i, length), _.isNaN), idx >= 0 ? idx + i : -1;
            for (idx = dir > 0 ? i : length - 1; idx >= 0 && length > idx; idx += dir)
                if (array[idx] === item) return idx;
            return -1
        }
    }

    function collectNonEnumProps(obj, keys) {
        var nonEnumIdx = nonEnumerableProps.length,
            constructor = obj.constructor,
            proto = _.isFunction(constructor) && constructor.prototype || ObjProto,
            prop = "constructor";
        for (_.has(obj, prop) && !_.contains(keys, prop) && keys.push(prop); nonEnumIdx--;) prop = nonEnumerableProps[nonEnumIdx], prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop) && keys.push(prop)
    }
    var root = this,
        previousUnderscore = root._,
        ArrayProto = Array.prototype,
        ObjProto = Object.prototype,
        FuncProto = Function.prototype,
        push = ArrayProto.push,
        slice = ArrayProto.slice,
        toString = ObjProto.toString,
        hasOwnProperty = ObjProto.hasOwnProperty,
        nativeIsArray = Array.isArray,
        nativeKeys = Object.keys,
        nativeBind = FuncProto.bind,
        nativeCreate = Object.create,
        Ctor = function() {}, _ = function(obj) {
            return obj instanceof _ ? obj : this instanceof _ ? void(this._wrapped = obj) : new _(obj)
        };
    "undefined" != typeof exports ? ("undefined" != typeof module && module.exports && (exports = module.exports = _), exports._ = _) : root._ = _, _.VERSION = "1.8.3";
    var optimizeCb = function(func, context, argCount) {
        if (void 0 === context) return func;
        switch (null == argCount ? 3 : argCount) {
            case 1:
                return function(value) {
                    return func.call(context, value)
                };
            case 2:
                return function(value, other) {
                    return func.call(context, value, other)
                };
            case 3:
                return function(value, index, collection) {
                    return func.call(context, value, index, collection)
                };
            case 4:
                return function(accumulator, value, index, collection) {
                    return func.call(context, accumulator, value, index, collection)
                }
        }
        return function() {
            return func.apply(context, arguments)
        }
    }, cb = function(value, context, argCount) {
            return null == value ? _.identity : _.isFunction(value) ? optimizeCb(value, context, argCount) : _.isObject(value) ? _.matcher(value) : _.property(value)
        };
    _.iteratee = function(value, context) {
        return cb(value, context, 1 / 0)
    };
    var createAssigner = function(keysFunc, undefinedOnly) {
        return function(obj) {
            var length = arguments.length;
            if (2 > length || null == obj) return obj;
            for (var index = 1; length > index; index++)
                for (var source = arguments[index], keys = keysFunc(source), l = keys.length, i = 0; l > i; i++) {
                    var key = keys[i];
                    undefinedOnly && void 0 !== obj[key] || (obj[key] = source[key])
                }
            return obj
        }
    }, baseCreate = function(prototype) {
            if (!_.isObject(prototype)) return {};
            if (nativeCreate) return nativeCreate(prototype);
            Ctor.prototype = prototype;
            var result = new Ctor;
            return Ctor.prototype = null, result
        }, property = function(key) {
            return function(obj) {
                return null == obj ? void 0 : obj[key]
            }
        }, MAX_ARRAY_INDEX = Math.pow(2, 53) - 1,
        getLength = property("length"),
        isArrayLike = function(collection) {
            var length = getLength(collection);
            return "number" == typeof length && length >= 0 && MAX_ARRAY_INDEX >= length
        };
    _.each = _.forEach = function(obj, iteratee, context) {
        iteratee = optimizeCb(iteratee, context);
        var i, length;
        if (isArrayLike(obj))
            for (i = 0, length = obj.length; length > i; i++) iteratee(obj[i], i, obj);
        else {
            var keys = _.keys(obj);
            for (i = 0, length = keys.length; length > i; i++) iteratee(obj[keys[i]], keys[i], obj)
        }
        return obj
    }, _.map = _.collect = function(obj, iteratee, context) {
        iteratee = cb(iteratee, context);
        for (var keys = !isArrayLike(obj) && _.keys(obj), length = (keys || obj).length, results = Array(length), index = 0; length > index; index++) {
            var currentKey = keys ? keys[index] : index;
            results[index] = iteratee(obj[currentKey], currentKey, obj)
        }
        return results
    }, _.reduce = _.foldl = _.inject = createReduce(1), _.reduceRight = _.foldr = createReduce(-1), _.find = _.detect = function(obj, predicate, context) {
        var key;
        return key = isArrayLike(obj) ? _.findIndex(obj, predicate, context) : _.findKey(obj, predicate, context), void 0 !== key && -1 !== key ? obj[key] : void 0
    }, _.filter = _.select = function(obj, predicate, context) {
        var results = [];
        return predicate = cb(predicate, context), _.each(obj, function(value, index, list) {
            predicate(value, index, list) && results.push(value)
        }), results
    }, _.reject = function(obj, predicate, context) {
        return _.filter(obj, _.negate(cb(predicate)), context)
    }, _.every = _.all = function(obj, predicate, context) {
        predicate = cb(predicate, context);
        for (var keys = !isArrayLike(obj) && _.keys(obj), length = (keys || obj).length, index = 0; length > index; index++) {
            var currentKey = keys ? keys[index] : index;
            if (!predicate(obj[currentKey], currentKey, obj)) return !1
        }
        return !0
    }, _.some = _.any = function(obj, predicate, context) {
        predicate = cb(predicate, context);
        for (var keys = !isArrayLike(obj) && _.keys(obj), length = (keys || obj).length, index = 0; length > index; index++) {
            var currentKey = keys ? keys[index] : index;
            if (predicate(obj[currentKey], currentKey, obj)) return !0
        }
        return !1
    }, _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {
        return isArrayLike(obj) || (obj = _.values(obj)), ("number" != typeof fromIndex || guard) && (fromIndex = 0), _.indexOf(obj, item, fromIndex) >= 0
    }, _.invoke = function(obj, method) {
        var args = slice.call(arguments, 2),
            isFunc = _.isFunction(method);
        return _.map(obj, function(value) {
            var func = isFunc ? method : value[method];
            return null == func ? func : func.apply(value, args)
        })
    }, _.pluck = function(obj, key) {
        return _.map(obj, _.property(key))
    }, _.where = function(obj, attrs) {
        return _.filter(obj, _.matcher(attrs))
    }, _.findWhere = function(obj, attrs) {
        return _.find(obj, _.matcher(attrs))
    }, _.max = function(obj, iteratee, context) {
        var value, computed, result = -1 / 0,
            lastComputed = -1 / 0;
        if (null == iteratee && null != obj) {
            obj = isArrayLike(obj) ? obj : _.values(obj);
            for (var i = 0, length = obj.length; length > i; i++) value = obj[i], value > result && (result = value)
        } else iteratee = cb(iteratee, context), _.each(obj, function(value, index, list) {
            computed = iteratee(value, index, list), (computed > lastComputed || computed === -1 / 0 && result === -1 / 0) && (result = value, lastComputed = computed)
        });
        return result
    }, _.min = function(obj, iteratee, context) {
        var value, computed, result = 1 / 0,
            lastComputed = 1 / 0;
        if (null == iteratee && null != obj) {
            obj = isArrayLike(obj) ? obj : _.values(obj);
            for (var i = 0, length = obj.length; length > i; i++) value = obj[i], result > value && (result = value)
        } else iteratee = cb(iteratee, context), _.each(obj, function(value, index, list) {
            computed = iteratee(value, index, list), (lastComputed > computed || 1 / 0 === computed && 1 / 0 === result) && (result = value, lastComputed = computed)
        });
        return result
    }, _.shuffle = function(obj) {
        for (var rand, set = isArrayLike(obj) ? obj : _.values(obj), length = set.length, shuffled = Array(length), index = 0; length > index; index++) rand = _.random(0, index), rand !== index && (shuffled[index] = shuffled[rand]), shuffled[rand] = set[index];
        return shuffled
    }, _.sample = function(obj, n, guard) {
        return null == n || guard ? (isArrayLike(obj) || (obj = _.values(obj)), obj[_.random(obj.length - 1)]) : _.shuffle(obj).slice(0, Math.max(0, n))
    }, _.sortBy = function(obj, iteratee, context) {
        return iteratee = cb(iteratee, context), _.pluck(_.map(obj, function(value, index, list) {
            return {
                value: value,
                index: index,
                criteria: iteratee(value, index, list)
            }
        }).sort(function(left, right) {
            var a = left.criteria,
                b = right.criteria;
            if (a !== b) {
                if (a > b || void 0 === a) return 1;
                if (b > a || void 0 === b) return -1
            }
            return left.index - right.index
        }), "value")
    };
    var group = function(behavior) {
        return function(obj, iteratee, context) {
            var result = {};
            return iteratee = cb(iteratee, context), _.each(obj, function(value, index) {
                var key = iteratee(value, index, obj);
                behavior(result, value, key)
            }), result
        }
    };
    _.groupBy = group(function(result, value, key) {
        _.has(result, key) ? result[key].push(value) : result[key] = [value]
    }), _.indexBy = group(function(result, value, key) {
        result[key] = value
    }), _.countBy = group(function(result, value, key) {
        _.has(result, key) ? result[key]++ : result[key] = 1
    }), _.toArray = function(obj) {
        return obj ? _.isArray(obj) ? slice.call(obj) : isArrayLike(obj) ? _.map(obj, _.identity) : _.values(obj) : []
    }, _.size = function(obj) {
        return null == obj ? 0 : isArrayLike(obj) ? obj.length : _.keys(obj).length
    }, _.partition = function(obj, predicate, context) {
        predicate = cb(predicate, context);
        var pass = [],
            fail = [];
        return _.each(obj, function(value, key, obj) {
            (predicate(value, key, obj) ? pass : fail).push(value)
        }), [pass, fail]
    }, _.first = _.head = _.take = function(array, n, guard) {
        return null == array ? void 0 : null == n || guard ? array[0] : _.initial(array, array.length - n)
    }, _.initial = function(array, n, guard) {
        return slice.call(array, 0, Math.max(0, array.length - (null == n || guard ? 1 : n)))
    }, _.last = function(array, n, guard) {
        return null == array ? void 0 : null == n || guard ? array[array.length - 1] : _.rest(array, Math.max(0, array.length - n))
    }, _.rest = _.tail = _.drop = function(array, n, guard) {
        return slice.call(array, null == n || guard ? 1 : n)
    }, _.compact = function(array) {
        return _.filter(array, _.identity)
    };
    var flatten = function(input, shallow, strict, startIndex) {
        for (var output = [], idx = 0, i = startIndex || 0, length = getLength(input); length > i; i++) {
            var value = input[i];
            if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {
                shallow || (value = flatten(value, shallow, strict));
                var j = 0,
                    len = value.length;
                for (output.length += len; len > j;) output[idx++] = value[j++]
            } else strict || (output[idx++] = value)
        }
        return output
    };
    _.flatten = function(array, shallow) {
        return flatten(array, shallow, !1)
    }, _.without = function(array) {
        return _.difference(array, slice.call(arguments, 1))
    }, _.uniq = _.unique = function(array, isSorted, iteratee, context) {
        _.isBoolean(isSorted) || (context = iteratee, iteratee = isSorted, isSorted = !1), null != iteratee && (iteratee = cb(iteratee, context));
        for (var result = [], seen = [], i = 0, length = getLength(array); length > i; i++) {
            var value = array[i],
                computed = iteratee ? iteratee(value, i, array) : value;
            isSorted ? (i && seen === computed || result.push(value), seen = computed) : iteratee ? _.contains(seen, computed) || (seen.push(computed), result.push(value)) : _.contains(result, value) || result.push(value)
        }
        return result
    }, _.union = function() {
        return _.uniq(flatten(arguments, !0, !0))
    }, _.intersection = function(array) {
        for (var result = [], argsLength = arguments.length, i = 0, length = getLength(array); length > i; i++) {
            var item = array[i];
            if (!_.contains(result, item)) {
                for (var j = 1; argsLength > j && _.contains(arguments[j], item); j++);
                j === argsLength && result.push(item)
            }
        }
        return result
    }, _.difference = function(array) {
        var rest = flatten(arguments, !0, !0, 1);
        return _.filter(array, function(value) {
            return !_.contains(rest, value)
        })
    }, _.zip = function() {
        return _.unzip(arguments)
    }, _.unzip = function(array) {
        for (var length = array && _.max(array, getLength).length || 0, result = Array(length), index = 0; length > index; index++) result[index] = _.pluck(array, index);
        return result
    }, _.object = function(list, values) {
        for (var result = {}, i = 0, length = getLength(list); length > i; i++) values ? result[list[i]] = values[i] : result[list[i][0]] = list[i][1];
        return result
    }, _.findIndex = createPredicateIndexFinder(1), _.findLastIndex = createPredicateIndexFinder(-1), _.sortedIndex = function(array, obj, iteratee, context) {
        iteratee = cb(iteratee, context, 1);
        for (var value = iteratee(obj), low = 0, high = getLength(array); high > low;) {
            var mid = Math.floor((low + high) / 2);
            iteratee(array[mid]) < value ? low = mid + 1 : high = mid
        }
        return low
    }, _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex), _.lastIndexOf = createIndexFinder(-1, _.findLastIndex), _.range = function(start, stop, step) {
        null == stop && (stop = start || 0, start = 0), step = step || 1;
        for (var length = Math.max(Math.ceil((stop - start) / step), 0), range = Array(length), idx = 0; length > idx; idx++, start += step) range[idx] = start;
        return range
    };
    var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {
        if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
        var self = baseCreate(sourceFunc.prototype),
            result = sourceFunc.apply(self, args);
        return _.isObject(result) ? result : self
    };
    _.bind = function(func, context) {
        if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
        if (!_.isFunction(func)) throw new TypeError("Bind must be called on a function");
        var args = slice.call(arguments, 2),
            bound = function() {
                return executeBound(func, bound, context, this, args.concat(slice.call(arguments)))
            };
        return bound
    }, _.partial = function(func) {
        var boundArgs = slice.call(arguments, 1),
            bound = function() {
                for (var position = 0, length = boundArgs.length, args = Array(length), i = 0; length > i; i++) args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];
                for (; position < arguments.length;) args.push(arguments[position++]);
                return executeBound(func, bound, this, this, args)
            };
        return bound
    }, _.bindAll = function(obj) {
        var i, key, length = arguments.length;
        if (1 >= length) throw new Error("bindAll must be passed function names");
        for (i = 1; length > i; i++) key = arguments[i], obj[key] = _.bind(obj[key], obj);
        return obj
    }, _.memoize = function(func, hasher) {
        var memoize = function(key) {
            var cache = memoize.cache,
                address = "" + (hasher ? hasher.apply(this, arguments) : key);
            return _.has(cache, address) || (cache[address] = func.apply(this, arguments)), cache[address]
        };
        return memoize.cache = {}, memoize
    }, _.delay = function(func, wait) {
        var args = slice.call(arguments, 2);
        return setTimeout(function() {
            return func.apply(null, args)
        }, wait)
    }, _.defer = _.partial(_.delay, _, 1), _.throttle = function(func, wait, options) {
        var context, args, result, timeout = null,
            previous = 0;
        options || (options = {});
        var later = function() {
            previous = options.leading === !1 ? 0 : _.now(), timeout = null, result = func.apply(context, args), timeout || (context = args = null)
        };
        return function() {
            var now = _.now();
            previous || options.leading !== !1 || (previous = now);
            var remaining = wait - (now - previous);
            return context = this, args = arguments, 0 >= remaining || remaining > wait ? (timeout && (clearTimeout(timeout), timeout = null), previous = now, result = func.apply(context, args), timeout || (context = args = null)) : timeout || options.trailing === !1 || (timeout = setTimeout(later, remaining)), result
        }
    }, _.debounce = function(func, wait, immediate) {
        var timeout, args, context, timestamp, result, later = function() {
                var last = _.now() - timestamp;
                wait > last && last >= 0 ? timeout = setTimeout(later, wait - last) : (timeout = null, immediate || (result = func.apply(context, args), timeout || (context = args = null)))
            };
        return function() {
            context = this, args = arguments, timestamp = _.now();
            var callNow = immediate && !timeout;
            return timeout || (timeout = setTimeout(later, wait)), callNow && (result = func.apply(context, args), context = args = null), result
        }
    }, _.wrap = function(func, wrapper) {
        return _.partial(wrapper, func)
    }, _.negate = function(predicate) {
        return function() {
            return !predicate.apply(this, arguments)
        }
    }, _.compose = function() {
        var args = arguments,
            start = args.length - 1;
        return function() {
            for (var i = start, result = args[start].apply(this, arguments); i--;) result = args[i].call(this, result);
            return result
        }
    }, _.after = function(times, func) {
        return function() {
            return --times < 1 ? func.apply(this, arguments) : void 0
        }
    }, _.before = function(times, func) {
        var memo;
        return function() {
            return --times > 0 && (memo = func.apply(this, arguments)), 1 >= times && (func = null), memo
        }
    }, _.once = _.partial(_.before, 2);
    var hasEnumBug = !{
        toString: null
    }.propertyIsEnumerable("toString"),
        nonEnumerableProps = ["valueOf", "isPrototypeOf", "toString", "propertyIsEnumerable", "hasOwnProperty", "toLocaleString"];
    _.keys = function(obj) {
        if (!_.isObject(obj)) return [];
        if (nativeKeys) return nativeKeys(obj);
        var keys = [];
        for (var key in obj) _.has(obj, key) && keys.push(key);
        return hasEnumBug && collectNonEnumProps(obj, keys), keys
    }, _.allKeys = function(obj) {
        if (!_.isObject(obj)) return [];
        var keys = [];
        for (var key in obj) keys.push(key);
        return hasEnumBug && collectNonEnumProps(obj, keys), keys
    }, _.values = function(obj) {
        for (var keys = _.keys(obj), length = keys.length, values = Array(length), i = 0; length > i; i++) values[i] = obj[keys[i]];
        return values
    }, _.mapObject = function(obj, iteratee, context) {
        iteratee = cb(iteratee, context);
        for (var currentKey, keys = _.keys(obj), length = keys.length, results = {}, index = 0; length > index; index++) currentKey = keys[index], results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
        return results
    }, _.pairs = function(obj) {
        for (var keys = _.keys(obj), length = keys.length, pairs = Array(length), i = 0; length > i; i++) pairs[i] = [keys[i], obj[keys[i]]];
        return pairs
    }, _.invert = function(obj) {
        for (var result = {}, keys = _.keys(obj), i = 0, length = keys.length; length > i; i++) result[obj[keys[i]]] = keys[i];
        return result
    }, _.functions = _.methods = function(obj) {
        var names = [];
        for (var key in obj) _.isFunction(obj[key]) && names.push(key);
        return names.sort()
    }, _.extend = createAssigner(_.allKeys), _.extendOwn = _.assign = createAssigner(_.keys), _.findKey = function(obj, predicate, context) {
        predicate = cb(predicate, context);
        for (var key, keys = _.keys(obj), i = 0, length = keys.length; length > i; i++)
            if (key = keys[i], predicate(obj[key], key, obj)) return key
    }, _.pick = function(object, oiteratee, context) {
        var iteratee, keys, result = {}, obj = object;
        if (null == obj) return result;
        _.isFunction(oiteratee) ? (keys = _.allKeys(obj), iteratee = optimizeCb(oiteratee, context)) : (keys = flatten(arguments, !1, !1, 1), iteratee = function(value, key, obj) {
            return key in obj
        }, obj = Object(obj));
        for (var i = 0, length = keys.length; length > i; i++) {
            var key = keys[i],
                value = obj[key];
            iteratee(value, key, obj) && (result[key] = value)
        }

        return result
    }, _.omit = function(obj, iteratee, context) {
        if (_.isFunction(iteratee)) iteratee = _.negate(iteratee);
        else {
            var keys = _.map(flatten(arguments, !1, !1, 1), String);
            iteratee = function(value, key) {
                return !_.contains(keys, key)
            }
        }
        return _.pick(obj, iteratee, context)
    }, _.defaults = createAssigner(_.allKeys, !0), _.create = function(prototype, props) {
        var result = baseCreate(prototype);
        return props && _.extendOwn(result, props), result
    }, _.clone = function(obj) {
        return _.isObject(obj) ? _.isArray(obj) ? obj.slice() : _.extend({}, obj) : obj
    }, _.tap = function(obj, interceptor) {
        return interceptor(obj), obj
    }, _.isMatch = function(object, attrs) {
        var keys = _.keys(attrs),
            length = keys.length;
        if (null == object) return !length;
        for (var obj = Object(object), i = 0; length > i; i++) {
            var key = keys[i];
            if (attrs[key] !== obj[key] || !(key in obj)) return !1
        }
        return !0
    };
    var eq = function(a, b, aStack, bStack) {
        if (a === b) return 0 !== a || 1 / a === 1 / b;
        if (null == a || null == b) return a === b;
        a instanceof _ && (a = a._wrapped), b instanceof _ && (b = b._wrapped);
        var className = toString.call(a);
        if (className !== toString.call(b)) return !1;
        switch (className) {
            case "[object RegExp]":
            case "[object String]":
                return "" + a == "" + b;
            case "[object Number]":
                return +a !== +a ? +b !== +b : 0 === +a ? 1 / +a === 1 / b : +a === +b;
            case "[object Date]":
            case "[object Boolean]":
                return +a === +b
        }
        var areArrays = "[object Array]" === className;
        if (!areArrays) {
            if ("object" != typeof a || "object" != typeof b) return !1;
            var aCtor = a.constructor,
                bCtor = b.constructor;
            if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor && _.isFunction(bCtor) && bCtor instanceof bCtor) && "constructor" in a && "constructor" in b) return !1
        }
        aStack = aStack || [], bStack = bStack || [];
        for (var length = aStack.length; length--;)
            if (aStack[length] === a) return bStack[length] === b;
        if (aStack.push(a), bStack.push(b), areArrays) {
            if (length = a.length, length !== b.length) return !1;
            for (; length--;)
                if (!eq(a[length], b[length], aStack, bStack)) return !1
        } else {
            var key, keys = _.keys(a);
            if (length = keys.length, _.keys(b).length !== length) return !1;
            for (; length--;)
                if (key = keys[length], !_.has(b, key) || !eq(a[key], b[key], aStack, bStack)) return !1
        }
        return aStack.pop(), bStack.pop(), !0
    };
    _.isEqual = function(a, b) {
        return eq(a, b)
    }, _.isEmpty = function(obj) {
        return null == obj ? !0 : isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj)) ? 0 === obj.length : 0 === _.keys(obj).length
    }, _.isElement = function(obj) {
        return !(!obj || 1 !== obj.nodeType)
    }, _.isArray = nativeIsArray || function(obj) {
        return "[object Array]" === toString.call(obj)
    }, _.isObject = function(obj) {
        var type = typeof obj;
        return "function" === type || "object" === type && !! obj
    }, _.each(["Arguments", "Function", "String", "Number", "Date", "RegExp", "Error"], function(name) {
        _["is" + name] = function(obj) {
            return toString.call(obj) === "[object " + name + "]"
        }
    }), _.isArguments(arguments) || (_.isArguments = function(obj) {
        return _.has(obj, "callee")
    }), "function" != typeof / . / && "object" != typeof Int8Array && (_.isFunction = function(obj) {

        return "function" == typeof obj || !1
    }), _.isFinite = function(obj) {
        return isFinite(obj) && !isNaN(parseFloat(obj))
    }, _.isNaN = function(obj) {
        return _.isNumber(obj) && obj !== +obj
    }, _.isBoolean = function(obj) {
        return obj === !0 || obj === !1 || "[object Boolean]" === toString.call(obj)
    }, _.isNull = function(obj) {
        return null === obj
    }, _.isUndefined = function(obj) {
        return void 0 === obj
    }, _.has = function(obj, key) {
        return null != obj && hasOwnProperty.call(obj, key)
    }, _.noConflict = function() {
        return root._ = previousUnderscore, this
    }, _.identity = function(value) {
        return value
    }, _.constant = function(value) {
        return function() {
            return value
        }
    }, _.noop = function() {}, _.property = property, _.propertyOf = function(obj) {
        return null == obj ? function() {} : function(key) {
            return obj[key]
        }
    }, _.matcher = _.matches = function(attrs) {
        return attrs = _.extendOwn({}, attrs),
        function(obj) {
            return _.isMatch(obj, attrs)
        }
    }, _.times = function(n, iteratee, context) {
        var accum = Array(Math.max(0, n));
        iteratee = optimizeCb(iteratee, context, 1);
        for (var i = 0; n > i; i++) accum[i] = iteratee(i);
        return accum
    }, _.random = function(min, max) {
        return null == max && (max = min, min = 0), min + Math.floor(Math.random() * (max - min + 1))
    }, _.now = Date.now || function() {
        return (new Date).getTime()
    };
    var escapeMap = {
        "&": "&amp;",
        "<": "&lt;",
        ">": "&gt;",
        '"': "&quot;",
        "'": "&#x27;",
        "`": "&#x60;"
    }, unescapeMap = _.invert(escapeMap),
        createEscaper = function(map) {
            var escaper = function(match) {
                return map[match]
            }, source = "(?:" + _.keys(map).join("|") + ")",
                testRegexp = RegExp(source),
                replaceRegexp = RegExp(source, "g");
            return function(string) {
                return string = null == string ? "" : "" + string, testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string
            }
        };
    _.escape = createEscaper(escapeMap), _.unescape = createEscaper(unescapeMap), _.result = function(object, property, fallback) {
        var value = null == object ? void 0 : object[property];
        return void 0 === value && (value = fallback), _.isFunction(value) ? value.call(object) : value
    };
    var idCounter = 0;
    _.uniqueId = function(prefix) {
        var id = ++idCounter + "";
        return prefix ? prefix + id : id
    }, _.templateSettings = {
        evaluate: /<%([\s\S]+?)%>/g,
        interpolate: /<%=([\s\S]+?)%>/g,
        escape: /<%-([\s\S]+?)%>/g
    };
    var noMatch = /(.)^/,
        escapes = {
            "'": "'",
            "\\": "\\",
            "\r": "r",
            "\n": "n",
            "\u2028": "u2028",
            "\u2029": "u2029"
        }, escaper = /\\|'|\r|\n|\u2028|\u2029/g,
        escapeChar = function(match) {
            return "\\" + escapes[match]
        };
    _.template = function(text, settings, oldSettings) {
        !settings && oldSettings && (settings = oldSettings), settings = _.defaults({}, settings, _.templateSettings);
        var matcher = RegExp([(settings.escape || noMatch).source, (settings.interpolate || noMatch).source, (settings.evaluate || noMatch).source].join("|") + "|$", "g"),
            index = 0,
            source = "__p+='";
        text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
            return source += text.slice(index, offset).replace(escaper, escapeChar), index = offset + match.length, escape ? source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'" : interpolate ? source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'" : evaluate && (source += "';\n" + evaluate + "\n__p+='"), match
        }), source += "';\n", settings.variable || (source = "with(obj||{}){\n" + source + "}\n"), source = "var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n" + source + "return __p;\n";
        try {
            var render = new Function(settings.variable || "obj", "_", source)
        } catch (e) {
            throw e.source = source, e
        }
        var template = function(data) {
            return render.call(this, data, _)
        }, argument = settings.variable || "obj";
        return template.source = "function(" + argument + "){\n" + source + "}", template
    }, _.chain = function(obj) {
        var instance = _(obj);
        return instance._chain = !0, instance
    };
    var result = function(instance, obj) {
        return instance._chain ? _(obj).chain() : obj
    };
    _.mixin = function(obj) {
        _.each(_.functions(obj), function(name) {
            var func = _[name] = obj[name];
            _.prototype[name] = function() {
                var args = [this._wrapped];
                return push.apply(args, arguments), result(this, func.apply(_, args))
            }
        })
    }, _.mixin(_), _.each(["pop", "push", "reverse", "shift", "sort", "splice", "unshift"], function(name) {
        var method = ArrayProto[name];
        _.prototype[name] = function() {
            var obj = this._wrapped;
            return method.apply(obj, arguments), "shift" !== name && "splice" !== name || 0 !== obj.length || delete obj[0], result(this, obj)
        }
    }), _.each(["concat", "join", "slice"], function(name) {
        var method = ArrayProto[name];
        _.prototype[name] = function() {
            return result(this, method.apply(this._wrapped, arguments))
        }
    }), _.prototype.value = function() {
        return this._wrapped
    }, _.prototype.valueOf = _.prototype.toJSON = _.prototype.value, _.prototype.toString = function() {
        return "" + this._wrapped
    }, "function" == typeof define && define.amd && define("underscore", [], function() {
        return _
    })
}.call(this), function(factory) {
    "function" == typeof define && define.amd ? define(["jquery"], factory) : factory(jQuery)
}(function($) {
    function focusable(element, isTabIndexNotNaN) {
        var map, mapName, img, nodeName = element.nodeName.toLowerCase();
        return "area" === nodeName ? (map = element.parentNode, mapName = map.name, element.href && mapName && "map" === map.nodeName.toLowerCase() ? (img = $("img[usemap='#" + mapName + "']")[0], !! img && visible(img)) : !1) : (/input|select|textarea|button|object/.test(nodeName) ? !element.disabled : "a" === nodeName ? element.href || isTabIndexNotNaN : isTabIndexNotNaN) && visible(element)
    }

    function visible(element) {
        return $.expr.filters.visible(element) && !$(element).parents().addBack().filter(function() {
            return "hidden" === $.css(this, "visibility")
        }).length
    }

    function datepicker_getZindex(elem) {
        for (var position, value; elem.length && elem[0] !== document;) {
            if (position = elem.css("position"), ("absolute" === position || "relative" === position || "fixed" === position) && (value = parseInt(elem.css("zIndex"), 10), !isNaN(value) && 0 !== value)) return value;
            elem = elem.parent()
        }
        return 0
    }

    function Datepicker() {
        this._curInst = null, this._keyEvent = !1, this._disabledInputs = [], this._datepickerShowing = !1, this._inDialog = !1, this._mainDivId = "ui-datepicker-div", this._inlineClass = "ui-datepicker-inline", this._appendClass = "ui-datepicker-append", this._triggerClass = "ui-datepicker-trigger", this._dialogClass = "ui-datepicker-dialog", this._disableClass = "ui-datepicker-disabled", this._unselectableClass = "ui-datepicker-unselectable", this._currentClass = "ui-datepicker-current-day", this._dayOverClass = "ui-datepicker-days-cell-over", this.regional = [], this.regional[""] = {
            closeText: "Done",
            prevText: "Prev",
            nextText: "Next",
            currentText: "Today",
            monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
            monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
            dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
            dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
            dayNamesMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
            weekHeader: "Wk",
            dateFormat: "mm/dd/yy",
            firstDay: 0,
            isRTL: !1,
            showMonthAfterYear: !1,
            yearSuffix: ""
        }, this._defaults = {
            showOn: "focus",
            showAnim: "fadeIn",
            showOptions: {},
            defaultDate: null,
            appendText: "",
            buttonText: "...",
            buttonImage: "",
            buttonImageOnly: !1,
            hideIfNoPrevNext: !1,
            navigationAsDateFormat: !1,
            gotoCurrent: !1,
            changeMonth: !1,
            changeYear: !1,
            yearRange: "c-10:c+10",
            showOtherMonths: !1,
            selectOtherMonths: !1,
            showWeek: !1,
            calculateWeek: this.iso8601Week,
            shortYearCutoff: "+10",
            minDate: null,
            maxDate: null,
            duration: "fast",
            beforeShowDay: null,
            beforeShow: null,
            onSelect: null,
            onChangeMonthYear: null,
            onClose: null,
            numberOfMonths: 1,
            showCurrentAtPos: 0,
            stepMonths: 1,
            stepBigMonths: 12,
            altField: "",
            altFormat: "",
            constrainInput: !0,
            showButtonPanel: !1,
            autoSize: !1,
            disabled: !1
        }, $.extend(this._defaults, this.regional[""]), this.regional.en = $.extend(!0, {}, this.regional[""]), this.regional["en-US"] = $.extend(!0, {}, this.regional.en), this.dpDiv = datepicker_bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))
    }

    function datepicker_bindHover(dpDiv) {
        var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
        return dpDiv.delegate(selector, "mouseout", function() {
            $(this).removeClass("ui-state-hover"), -1 !== this.className.indexOf("ui-datepicker-prev") && $(this).removeClass("ui-datepicker-prev-hover"), -1 !== this.className.indexOf("ui-datepicker-next") && $(this).removeClass("ui-datepicker-next-hover")
        }).delegate(selector, "mouseover", datepicker_handleMouseover)
    }

    function datepicker_handleMouseover() {
        $.datepicker._isDisabledDatepicker(datepicker_instActive.inline ? datepicker_instActive.dpDiv.parent()[0] : datepicker_instActive.input[0]) || ($(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"), $(this).addClass("ui-state-hover"), -1 !== this.className.indexOf("ui-datepicker-prev") && $(this).addClass("ui-datepicker-prev-hover"), -1 !== this.className.indexOf("ui-datepicker-next") && $(this).addClass("ui-datepicker-next-hover"))
    }

    function datepicker_extendRemove(target, props) {
        $.extend(target, props);
        for (var name in props) null == props[name] && (target[name] = props[name]);
        return target
    }

    function spinner_modifier(fn) {
        return function() {
            var previous = this.element.val();
            fn.apply(this, arguments), this._refresh(), previous !== this.element.val() && this._trigger("change")
        }
    }
    $.ui = $.ui || {}, $.extend($.ui, {
        version: "1.11.1",
        keyCode: {
            BACKSPACE: 8,
            COMMA: 188,
            DELETE: 46,
            DOWN: 40,
            END: 35,
            ENTER: 13,
            ESCAPE: 27,
            HOME: 36,
            LEFT: 37,
            PAGE_DOWN: 34,
            PAGE_UP: 33,
            PERIOD: 190,
            RIGHT: 39,
            SPACE: 32,
            TAB: 9,
            UP: 38
        }
    }), $.fn.extend({
        scrollParent: function(includeHidden) {
            var position = this.css("position"),
                excludeStaticParent = "absolute" === position,
                overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,
                scrollParent = this.parents().filter(function() {
                    var parent = $(this);
                    return excludeStaticParent && "static" === parent.css("position") ? !1 : overflowRegex.test(parent.css("overflow") + parent.css("overflow-y") + parent.css("overflow-x"))
                }).eq(0);
            return "fixed" !== position && scrollParent.length ? scrollParent : $(this[0].ownerDocument || document)
        },
        uniqueId: function() {
            var uuid = 0;
            return function() {
                return this.each(function() {
                    this.id || (this.id = "ui-id-" + ++uuid)
                })
            }
        }(),
        removeUniqueId: function() {
            return this.each(function() {
                /^ui-id-\d+$/.test(this.id) && $(this).removeAttr("id")
            })
        }
    }), $.extend($.expr[":"], {
        data: $.expr.createPseudo ? $.expr.createPseudo(function(dataName) {
            return function(elem) {
                return !!$.data(elem, dataName)
            }
        }) : function(elem, i, match) {
            return !!$.data(elem, match[3])
        },
        focusable: function(element) {
            return focusable(element, !isNaN($.attr(element, "tabindex")))
        },
        tabbable: function(element) {
            var tabIndex = $.attr(element, "tabindex"),
                isTabIndexNaN = isNaN(tabIndex);
            return (isTabIndexNaN || tabIndex >= 0) && focusable(element, !isTabIndexNaN)
        }
    }), $("<a>").outerWidth(1).jquery || $.each(["Width", "Height"], function(i, name) {
        function reduce(elem, size, border, margin) {
            return $.each(side, function() {
                size -= parseFloat($.css(elem, "padding" + this)) || 0, border && (size -= parseFloat($.css(elem, "border" + this + "Width")) || 0), margin && (size -= parseFloat($.css(elem, "margin" + this)) || 0)
            }), size
        }
        var side = "Width" === name ? ["Left", "Right"] : ["Top", "Bottom"],
            type = name.toLowerCase(),
            orig = {
                innerWidth: $.fn.innerWidth,
                innerHeight: $.fn.innerHeight,
                outerWidth: $.fn.outerWidth,
                outerHeight: $.fn.outerHeight
            };
        $.fn["inner" + name] = function(size) {
            return void 0 === size ? orig["inner" + name].call(this) : this.each(function() {
                $(this).css(type, reduce(this, size) + "px")
            })
        }, $.fn["outer" + name] = function(size, margin) {
            return "number" != typeof size ? orig["outer" + name].call(this, size) : this.each(function() {
                $(this).css(type, reduce(this, size, !0, margin) + "px")
            })
        }
    }), $.fn.addBack || ($.fn.addBack = function(selector) {
        return this.add(null == selector ? this.prevObject : this.prevObject.filter(selector))
    }), $("<a>").data("a-b", "a").removeData("a-b").data("a-b") && ($.fn.removeData = function(removeData) {
        return function(key) {
            return arguments.length ? removeData.call(this, $.camelCase(key)) : removeData.call(this)
        }
    }($.fn.removeData)), $.ui.ie = !! /msie [\w.]+/.exec(navigator.userAgent.toLowerCase()), $.fn.extend({
        focus: function(orig) {
            return function(delay, fn) {
                return "number" == typeof delay ? this.each(function() {
                    var elem = this;
                    setTimeout(function() {
                        $(elem).focus(), fn && fn.call(elem)
                    }, delay)
                }) : orig.apply(this, arguments)
            }
        }($.fn.focus),
        disableSelection: function() {
            var eventType = "onselectstart" in document.createElement("div") ? "selectstart" : "mousedown";
            return function() {
                return this.bind(eventType + ".ui-disableSelection", function(event) {
                    event.preventDefault()
                })
            }
        }(),
        enableSelection: function() {
            return this.unbind(".ui-disableSelection")
        },
        zIndex: function(zIndex) {
            if (void 0 !== zIndex) return this.css("zIndex", zIndex);
            if (this.length)
                for (var position, value, elem = $(this[0]); elem.length && elem[0] !== document;) {
                    if (position = elem.css("position"), ("absolute" === position || "relative" === position || "fixed" === position) && (value = parseInt(elem.css("zIndex"), 10), !isNaN(value) && 0 !== value)) return value;
                    elem = elem.parent()
                }
            return 0
        }
    }), $.ui.plugin = {
        add: function(module, option, set) {
            var i, proto = $.ui[module].prototype;
            for (i in set) proto.plugins[i] = proto.plugins[i] || [], proto.plugins[i].push([option, set[i]])
        },
        call: function(instance, name, args, allowDisconnected) {
            var i, set = instance.plugins[name];
            if (set && (allowDisconnected || instance.element[0].parentNode && 11 !== instance.element[0].parentNode.nodeType))
                for (i = 0; i < set.length; i++) instance.options[set[i][0]] && set[i][1].apply(instance.element, args)
        }
    };
    var widget_uuid = 0,
        widget_slice = Array.prototype.slice;
    $.cleanData = function(orig) {
        return function(elems) {
            var events, elem, i;
            for (i = 0; null != (elem = elems[i]); i++) try {
                events = $._data(elem, "events"), events && events.remove && $(elem).triggerHandler("remove")
            } catch (e) {}
            orig(elems)
        }
    }($.cleanData), $.widget = function(name, base, prototype) {
        var fullName, existingConstructor, constructor, basePrototype, proxiedPrototype = {}, namespace = name.split(".")[0];
        return name = name.split(".")[1], fullName = namespace + "-" + name, prototype || (prototype = base, base = $.Widget), $.expr[":"][fullName.toLowerCase()] = function(elem) {
            return !!$.data(elem, fullName)
        }, $[namespace] = $[namespace] || {}, existingConstructor = $[namespace][name], constructor = $[namespace][name] = function(options, element) {
            return this._createWidget ? void(arguments.length && this._createWidget(options, element)) : new constructor(options, element)
        }, $.extend(constructor, existingConstructor, {
            version: prototype.version,
            _proto: $.extend({}, prototype),
            _childConstructors: []
        }), basePrototype = new base, basePrototype.options = $.widget.extend({}, basePrototype.options), $.each(prototype, function(prop, value) {
            return $.isFunction(value) ? void(proxiedPrototype[prop] = function() {
                var _super = function() {
                    return base.prototype[prop].apply(this, arguments)
                }, _superApply = function(args) {
                        return base.prototype[prop].apply(this, args)
                    };
                return function() {
                    var returnValue, __super = this._super,
                        __superApply = this._superApply;
                    return this._super = _super, this._superApply = _superApply, returnValue = value.apply(this, arguments), this._super = __super, this._superApply = __superApply, returnValue
                }
            }()) : void(proxiedPrototype[prop] = value)
        }), constructor.prototype = $.widget.extend(basePrototype, {
            widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix || name : name
        }, proxiedPrototype, {
            constructor: constructor,
            namespace: namespace,
            widgetName: name,
            widgetFullName: fullName
        }), existingConstructor ? ($.each(existingConstructor._childConstructors, function(i, child) {
            var childPrototype = child.prototype;
            $.widget(childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto)
        }), delete existingConstructor._childConstructors) : base._childConstructors.push(constructor), $.widget.bridge(name, constructor), constructor
    }, $.widget.extend = function(target) {
        for (var key, value, input = widget_slice.call(arguments, 1), inputIndex = 0, inputLength = input.length; inputLength > inputIndex; inputIndex++)
            for (key in input[inputIndex]) value = input[inputIndex][key], input[inputIndex].hasOwnProperty(key) && void 0 !== value && (target[key] = $.isPlainObject(value) ? $.isPlainObject(target[key]) ? $.widget.extend({}, target[key], value) : $.widget.extend({}, value) : value);
        return target
    }, $.widget.bridge = function(name, object) {
        var fullName = object.prototype.widgetFullName || name;
        $.fn[name] = function(options) {
            var isMethodCall = "string" == typeof options,
                args = widget_slice.call(arguments, 1),
                returnValue = this;
            return options = !isMethodCall && args.length ? $.widget.extend.apply(null, [options].concat(args)) : options, this.each(isMethodCall ? function() {
                var methodValue, instance = $.data(this, fullName);
                return "instance" === options ? (returnValue = instance, !1) : instance ? $.isFunction(instance[options]) && "_" !== options.charAt(0) ? (methodValue = instance[options].apply(instance, args), methodValue !== instance && void 0 !== methodValue ? (returnValue = methodValue && methodValue.jquery ? returnValue.pushStack(methodValue.get()) : methodValue, !1) : void 0) : $.error("no such method '" + options + "' for " + name + " widget instance") : $.error("cannot call methods on " + name + " prior to initialization; attempted to call method '" + options + "'")
            } : function() {
                var instance = $.data(this, fullName);
                instance ? (instance.option(options || {}), instance._init && instance._init()) : $.data(this, fullName, new object(options, this))
            }), returnValue
        }
    }, $.Widget = function() {}, $.Widget._childConstructors = [], $.Widget.prototype = {
        widgetName: "widget",
        widgetEventPrefix: "",
        defaultElement: "<div>",
        options: {
            disabled: !1,
            create: null
        },
        _createWidget: function(options, element) {
            element = $(element || this.defaultElement || this)[0], this.element = $(element), this.uuid = widget_uuid++, this.eventNamespace = "." + this.widgetName + this.uuid, this.options = $.widget.extend({}, this.options, this._getCreateOptions(), options), this.bindings = $(), this.hoverable = $(), this.focusable = $(), element !== this && ($.data(element, this.widgetFullName, this), this._on(!0, this.element, {
                remove: function(event) {
                    event.target === element && this.destroy()
                }
            }), this.document = $(element.style ? element.ownerDocument : element.document || element), this.window = $(this.document[0].defaultView || this.document[0].parentWindow)), this._create(), this._trigger("create", null, this._getCreateEventData()), this._init()
        },
        _getCreateOptions: $.noop,
        _getCreateEventData: $.noop,
        _create: $.noop,
        _init: $.noop,
        destroy: function() {
            this._destroy(), this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData($.camelCase(this.widgetFullName)), this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName + "-disabled ui-state-disabled"), this.bindings.unbind(this.eventNamespace), this.hoverable.removeClass("ui-state-hover"), this.focusable.removeClass("ui-state-focus")
        },
        _destroy: $.noop,
        widget: function() {
            return this.element
        },
        option: function(key, value) {
            var parts, curOption, i, options = key;
            if (0 === arguments.length) return $.widget.extend({}, this.options);
            if ("string" == typeof key)
                if (options = {}, parts = key.split("."), key = parts.shift(), parts.length) {
                    for (curOption = options[key] = $.widget.extend({}, this.options[key]), i = 0; i < parts.length - 1; i++) curOption[parts[i]] = curOption[parts[i]] || {}, curOption = curOption[parts[i]];
                    if (key = parts.pop(), 1 === arguments.length) return void 0 === curOption[key] ? null : curOption[key];
                    curOption[key] = value
                } else {
                    if (1 === arguments.length) return void 0 === this.options[key] ? null : this.options[key];
                    options[key] = value
                }
            return this._setOptions(options), this
        },
        _setOptions: function(options) {
            var key;
            for (key in options) this._setOption(key, options[key]);
            return this
        },
        _setOption: function(key, value) {
            return this.options[key] = value, "disabled" === key && (this.widget().toggleClass(this.widgetFullName + "-disabled", !! value), value && (this.hoverable.removeClass("ui-state-hover"), this.focusable.removeClass("ui-state-focus"))), this
        },
        enable: function() {
            return this._setOptions({
                disabled: !1
            })
        },
        disable: function() {
            return this._setOptions({
                disabled: !0
            })
        },
        _on: function(suppressDisabledCheck, element, handlers) {
            var delegateElement, instance = this;
            "boolean" != typeof suppressDisabledCheck && (handlers = element, element = suppressDisabledCheck, suppressDisabledCheck = !1), handlers ? (element = delegateElement = $(element), this.bindings = this.bindings.add(element)) : (handlers = element, element = this.element, delegateElement = this.widget()), $.each(handlers, function(event, handler) {
                function handlerProxy() {
                    return suppressDisabledCheck || instance.options.disabled !== !0 && !$(this).hasClass("ui-state-disabled") ? ("string" == typeof handler ? instance[handler] : handler).apply(instance, arguments) : void 0
                }
                "string" != typeof handler && (handlerProxy.guid = handler.guid = handler.guid || handlerProxy.guid || $.guid++);
                var match = event.match(/^([\w:-]*)\s*(.*)$/),
                    eventName = match[1] + instance.eventNamespace,
                    selector = match[2];
                selector ? delegateElement.delegate(selector, eventName, handlerProxy) : element.bind(eventName, handlerProxy)
            })
        },
        _off: function(element, eventName) {
            eventName = (eventName || "").split(" ").join(this.eventNamespace + " ") + this.eventNamespace, element.unbind(eventName).undelegate(eventName)
        },
        _delay: function(handler, delay) {
            function handlerProxy() {
                return ("string" == typeof handler ? instance[handler] : handler).apply(instance, arguments)
            }
            var instance = this;
            return setTimeout(handlerProxy, delay || 0)
        },
        _hoverable: function(element) {
            this.hoverable = this.hoverable.add(element), this._on(element, {
                mouseenter: function(event) {
                    $(event.currentTarget).addClass("ui-state-hover")
                },
                mouseleave: function(event) {
                    $(event.currentTarget).removeClass("ui-state-hover")
                }
            })
        },
        _focusable: function(element) {
            this.focusable = this.focusable.add(element), this._on(element, {
                focusin: function(event) {
                    $(event.currentTarget).addClass("ui-state-focus")
                },
                focusout: function(event) {
                    $(event.currentTarget).removeClass("ui-state-focus")
                }
            })
        },
        _trigger: function(type, event, data) {
            var prop, orig, callback = this.options[type];
            if (data = data || {}, event = $.Event(event), event.type = (type === this.widgetEventPrefix ? type : this.widgetEventPrefix + type).toLowerCase(), event.target = this.element[0], orig = event.originalEvent)
                for (prop in orig) prop in event || (event[prop] = orig[prop]);
            return this.element.trigger(event, data), !($.isFunction(callback) && callback.apply(this.element[0], [event].concat(data)) === !1 || event.isDefaultPrevented())
        }
    }, $.each({
        show: "fadeIn",
        hide: "fadeOut"
    }, function(method, defaultEffect) {
        $.Widget.prototype["_" + method] = function(element, options, callback) {
            "string" == typeof options && (options = {
                effect: options
            });
            var hasOptions, effectName = options ? options === !0 || "number" == typeof options ? defaultEffect : options.effect || defaultEffect : method;
            options = options || {}, "number" == typeof options && (options = {
                duration: options
            }), hasOptions = !$.isEmptyObject(options), options.complete = callback, options.delay && element.delay(options.delay), hasOptions && $.effects && $.effects.effect[effectName] ? element[method](options) : effectName !== method && element[effectName] ? element[effectName](options.duration, options.easing, callback) : element.queue(function(next) {
                $(this)[method](), callback && callback.call(element[0]), next()
            })
        }
    });
    var mouseHandled = ($.widget, !1);
    $(document).mouseup(function() {
        mouseHandled = !1
    });
    $.widget("ui.mouse", {
        version: "1.11.1",
        options: {
            cancel: "input,textarea,button,select,option",
            distance: 1,
            delay: 0
        },
        _mouseInit: function() {
            var that = this;
            this.element.bind("mousedown." + this.widgetName, function(event) {
                return that._mouseDown(event)
            }).bind("click." + this.widgetName, function(event) {
                return !0 === $.data(event.target, that.widgetName + ".preventClickEvent") ? ($.removeData(event.target, that.widgetName + ".preventClickEvent"), event.stopImmediatePropagation(), !1) : void 0
            }), this.started = !1
        },
        _mouseDestroy: function() {
            this.element.unbind("." + this.widgetName), this._mouseMoveDelegate && this.document.unbind("mousemove." + this.widgetName, this._mouseMoveDelegate).unbind("mouseup." + this.widgetName, this._mouseUpDelegate)
        },
        _mouseDown: function(event) {
            if (!mouseHandled) {
                this._mouseStarted && this._mouseUp(event), this._mouseDownEvent = event;
                var that = this,
                    btnIsLeft = 1 === event.which,
                    elIsCancel = "string" == typeof this.options.cancel && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : !1;
                return btnIsLeft && !elIsCancel && this._mouseCapture(event) ? (this.mouseDelayMet = !this.options.delay, this.mouseDelayMet || (this._mouseDelayTimer = setTimeout(function() {
                    that.mouseDelayMet = !0
                }, this.options.delay)), this._mouseDistanceMet(event) && this._mouseDelayMet(event) && (this._mouseStarted = this._mouseStart(event) !== !1, !this._mouseStarted) ? (event.preventDefault(), !0) : (!0 === $.data(event.target, this.widgetName + ".preventClickEvent") && $.removeData(event.target, this.widgetName + ".preventClickEvent"), this._mouseMoveDelegate = function(event) {
                    return that._mouseMove(event)
                }, this._mouseUpDelegate = function(event) {
                    return that._mouseUp(event)
                }, this.document.bind("mousemove." + this.widgetName, this._mouseMoveDelegate).bind("mouseup." + this.widgetName, this._mouseUpDelegate), event.preventDefault(), mouseHandled = !0, !0)) : !0
            }
        },
        _mouseMove: function(event) {
            return $.ui.ie && (!document.documentMode || document.documentMode < 9) && !event.button ? this._mouseUp(event) : event.which ? this._mouseStarted ? (this._mouseDrag(event), event.preventDefault()) : (this._mouseDistanceMet(event) && this._mouseDelayMet(event) && (this._mouseStarted = this._mouseStart(this._mouseDownEvent, event) !== !1, this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)), !this._mouseStarted) : this._mouseUp(event)
        },
        _mouseUp: function(event) {
            return this.document.unbind("mousemove." + this.widgetName, this._mouseMoveDelegate).unbind("mouseup." + this.widgetName, this._mouseUpDelegate), this._mouseStarted && (this._mouseStarted = !1, event.target === this._mouseDownEvent.target && $.data(event.target, this.widgetName + ".preventClickEvent", !0), this._mouseStop(event)), mouseHandled = !1, !1
        },
        _mouseDistanceMet: function(event) {
            return Math.max(Math.abs(this._mouseDownEvent.pageX - event.pageX), Math.abs(this._mouseDownEvent.pageY - event.pageY)) >= this.options.distance
        },
        _mouseDelayMet: function() {
            return this.mouseDelayMet
        },
        _mouseStart: function() {},
        _mouseDrag: function() {},
        _mouseStop: function() {},
        _mouseCapture: function() {
            return !0
        }
    });
    ! function() {
        function getOffsets(offsets, width, height) {
            return [parseFloat(offsets[0]) * (rpercent.test(offsets[0]) ? width / 100 : 1), parseFloat(offsets[1]) * (rpercent.test(offsets[1]) ? height / 100 : 1)]
        }

        function parseCss(element, property) {
            return parseInt($.css(element, property), 10) || 0
        }

        function getDimensions(elem) {
            var raw = elem[0];
            return 9 === raw.nodeType ? {
                width: elem.width(),
                height: elem.height(),
                offset: {
                    top: 0,
                    left: 0
                }
            } : $.isWindow(raw) ? {
                width: elem.width(),
                height: elem.height(),
                offset: {
                    top: elem.scrollTop(),
                    left: elem.scrollLeft()
                }
            } : raw.preventDefault ? {
                width: 0,
                height: 0,
                offset: {
                    top: raw.pageY,
                    left: raw.pageX
                }
            } : {
                width: elem.outerWidth(),
                height: elem.outerHeight(),
                offset: elem.offset()
            }
        }
        $.ui = $.ui || {};
        var cachedScrollbarWidth, supportsOffsetFractions, max = Math.max,
            abs = Math.abs,
            round = Math.round,
            rhorizontal = /left|center|right/,
            rvertical = /top|center|bottom/,
            roffset = /[\+\-]\d+(\.[\d]+)?%?/,
            rposition = /^\w+/,
            rpercent = /%$/,
            _position = $.fn.position;
        $.position = {
            scrollbarWidth: function() {
                if (void 0 !== cachedScrollbarWidth) return cachedScrollbarWidth;
                var w1, w2, div = $("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),
                    innerDiv = div.children()[0];
                return $("body").append(div), w1 = innerDiv.offsetWidth, div.css("overflow", "scroll"), w2 = innerDiv.offsetWidth, w1 === w2 && (w2 = div[0].clientWidth), div.remove(), cachedScrollbarWidth = w1 - w2
            },
            getScrollInfo: function(within) {
                var overflowX = within.isWindow || within.isDocument ? "" : within.element.css("overflow-x"),
                    overflowY = within.isWindow || within.isDocument ? "" : within.element.css("overflow-y"),
                    hasOverflowX = "scroll" === overflowX || "auto" === overflowX && within.width < within.element[0].scrollWidth,
                    hasOverflowY = "scroll" === overflowY || "auto" === overflowY && within.height < within.element[0].scrollHeight;
                return {
                    width: hasOverflowY ? $.position.scrollbarWidth() : 0,
                    height: hasOverflowX ? $.position.scrollbarWidth() : 0
                }
            },
            getWithinInfo: function(element) {
                var withinElement = $(element || window),
                    isWindow = $.isWindow(withinElement[0]),
                    isDocument = !! withinElement[0] && 9 === withinElement[0].nodeType;
                return {
                    element: withinElement,
                    isWindow: isWindow,
                    isDocument: isDocument,
                    offset: withinElement.offset() || {
                        left: 0,
                        top: 0
                    },
                    scrollLeft: withinElement.scrollLeft(),
                    scrollTop: withinElement.scrollTop(),
                    width: isWindow || isDocument ? withinElement.width() : withinElement.outerWidth(),
                    height: isWindow || isDocument ? withinElement.height() : withinElement.outerHeight()
                }
            }
        }, $.fn.position = function(options) {
            if (!options || !options.of) return _position.apply(this, arguments);
            options = $.extend({}, options);
            var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions, target = $(options.of),
                within = $.position.getWithinInfo(options.within),
                scrollInfo = $.position.getScrollInfo(within),
                collision = (options.collision || "flip").split(" "),
                offsets = {};
            return dimensions = getDimensions(target), target[0].preventDefault && (options.at = "left top"), targetWidth = dimensions.width, targetHeight = dimensions.height, targetOffset = dimensions.offset, basePosition = $.extend({}, targetOffset), $.each(["my", "at"], function() {
                var horizontalOffset, verticalOffset, pos = (options[this] || "").split(" ");
                1 === pos.length && (pos = rhorizontal.test(pos[0]) ? pos.concat(["center"]) : rvertical.test(pos[0]) ? ["center"].concat(pos) : ["center", "center"]), pos[0] = rhorizontal.test(pos[0]) ? pos[0] : "center", pos[1] = rvertical.test(pos[1]) ? pos[1] : "center", horizontalOffset = roffset.exec(pos[0]), verticalOffset = roffset.exec(pos[1]), offsets[this] = [horizontalOffset ? horizontalOffset[0] : 0, verticalOffset ? verticalOffset[0] : 0], options[this] = [rposition.exec(pos[0])[0], rposition.exec(pos[1])[0]]
            }), 1 === collision.length && (collision[1] = collision[0]), "right" === options.at[0] ? basePosition.left += targetWidth : "center" === options.at[0] && (basePosition.left += targetWidth / 2), "bottom" === options.at[1] ? basePosition.top += targetHeight : "center" === options.at[1] && (basePosition.top += targetHeight / 2), atOffset = getOffsets(offsets.at, targetWidth, targetHeight), basePosition.left += atOffset[0], basePosition.top += atOffset[1], this.each(function() {
                var collisionPosition, using, elem = $(this),
                    elemWidth = elem.outerWidth(),
                    elemHeight = elem.outerHeight(),
                    marginLeft = parseCss(this, "marginLeft"),
                    marginTop = parseCss(this, "marginTop"),
                    collisionWidth = elemWidth + marginLeft + parseCss(this, "marginRight") + scrollInfo.width,
                    collisionHeight = elemHeight + marginTop + parseCss(this, "marginBottom") + scrollInfo.height,
                    position = $.extend({}, basePosition),
                    myOffset = getOffsets(offsets.my, elem.outerWidth(), elem.outerHeight());
                "right" === options.my[0] ? position.left -= elemWidth : "center" === options.my[0] && (position.left -= elemWidth / 2), "bottom" === options.my[1] ? position.top -= elemHeight : "center" === options.my[1] && (position.top -= elemHeight / 2), position.left += myOffset[0], position.top += myOffset[1], supportsOffsetFractions || (position.left = round(position.left), position.top = round(position.top)), collisionPosition = {
                    marginLeft: marginLeft,
                    marginTop: marginTop
                }, $.each(["left", "top"], function(i, dir) {
                    $.ui.position[collision[i]] && $.ui.position[collision[i]][dir](position, {
                        targetWidth: targetWidth,
                        targetHeight: targetHeight,
                        elemWidth: elemWidth,
                        elemHeight: elemHeight,
                        collisionPosition: collisionPosition,
                        collisionWidth: collisionWidth,
                        collisionHeight: collisionHeight,
                        offset: [atOffset[0] + myOffset[0], atOffset[1] + myOffset[1]],
                        my: options.my,
                        at: options.at,
                        within: within,
                        elem: elem
                    })
                }), options.using && (using = function(props) {
                    var left = targetOffset.left - position.left,
                        right = left + targetWidth - elemWidth,
                        top = targetOffset.top - position.top,
                        bottom = top + targetHeight - elemHeight,
                        feedback = {
                            target: {
                                element: target,
                                left: targetOffset.left,
                                top: targetOffset.top,
                                width: targetWidth,
                                height: targetHeight
                            },
                            element: {
                                element: elem,
                                left: position.left,
                                top: position.top,
                                width: elemWidth,
                                height: elemHeight
                            },
                            horizontal: 0 > right ? "left" : left > 0 ? "right" : "center",
                            vertical: 0 > bottom ? "top" : top > 0 ? "bottom" : "middle"
                        };
                    elemWidth > targetWidth && abs(left + right) < targetWidth && (feedback.horizontal = "center"), elemHeight > targetHeight && abs(top + bottom) < targetHeight && (feedback.vertical = "middle"), feedback.important = max(abs(left), abs(right)) > max(abs(top), abs(bottom)) ? "horizontal" : "vertical", options.using.call(this, props, feedback)
                }), elem.offset($.extend(position, {
                    using: using
                }))
            })
        }, $.ui.position = {
            fit: {
                left: function(position, data) {
                    var newOverRight, within = data.within,
                        withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
                        outerWidth = within.width,
                        collisionPosLeft = position.left - data.collisionPosition.marginLeft,
                        overLeft = withinOffset - collisionPosLeft,
                        overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset;
                    data.collisionWidth > outerWidth ? overLeft > 0 && 0 >= overRight ? (newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset, position.left += overLeft - newOverRight) : position.left = overRight > 0 && 0 >= overLeft ? withinOffset : overLeft > overRight ? withinOffset + outerWidth - data.collisionWidth : withinOffset : overLeft > 0 ? position.left += overLeft : overRight > 0 ? position.left -= overRight : position.left = max(position.left - collisionPosLeft, position.left)
                },
                top: function(position, data) {
                    var newOverBottom, within = data.within,
                        withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
                        outerHeight = data.within.height,
                        collisionPosTop = position.top - data.collisionPosition.marginTop,
                        overTop = withinOffset - collisionPosTop,
                        overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset;
                    data.collisionHeight > outerHeight ? overTop > 0 && 0 >= overBottom ? (newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset, position.top += overTop - newOverBottom) : position.top = overBottom > 0 && 0 >= overTop ? withinOffset : overTop > overBottom ? withinOffset + outerHeight - data.collisionHeight : withinOffset : overTop > 0 ? position.top += overTop : overBottom > 0 ? position.top -= overBottom : position.top = max(position.top - collisionPosTop, position.top)
                }
            },
            flip: {
                left: function(position, data) {
                    var newOverRight, newOverLeft, within = data.within,
                        withinOffset = within.offset.left + within.scrollLeft,
                        outerWidth = within.width,
                        offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
                        collisionPosLeft = position.left - data.collisionPosition.marginLeft,
                        overLeft = collisionPosLeft - offsetLeft,
                        overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
                        myOffset = "left" === data.my[0] ? -data.elemWidth : "right" === data.my[0] ? data.elemWidth : 0,
                        atOffset = "left" === data.at[0] ? data.targetWidth : "right" === data.at[0] ? -data.targetWidth : 0,
                        offset = -2 * data.offset[0];
                    0 > overLeft ? (newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset, (0 > newOverRight || newOverRight < abs(overLeft)) && (position.left += myOffset + atOffset + offset)) : overRight > 0 && (newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft, (newOverLeft > 0 || abs(newOverLeft) < overRight) && (position.left += myOffset + atOffset + offset))
                },
                top: function(position, data) {
                    var newOverTop, newOverBottom, within = data.within,
                        withinOffset = within.offset.top + within.scrollTop,
                        outerHeight = within.height,
                        offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
                        collisionPosTop = position.top - data.collisionPosition.marginTop,
                        overTop = collisionPosTop - offsetTop,
                        overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
                        top = "top" === data.my[1],
                        myOffset = top ? -data.elemHeight : "bottom" === data.my[1] ? data.elemHeight : 0,
                        atOffset = "top" === data.at[1] ? data.targetHeight : "bottom" === data.at[1] ? -data.targetHeight : 0,
                        offset = -2 * data.offset[1];
                    0 > overTop ? (newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset, position.top + myOffset + atOffset + offset > overTop && (0 > newOverBottom || newOverBottom < abs(overTop)) && (position.top += myOffset + atOffset + offset)) : overBottom > 0 && (newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop, position.top + myOffset + atOffset + offset > overBottom && (newOverTop > 0 || abs(newOverTop) < overBottom) && (position.top += myOffset + atOffset + offset))
                }
            },
            flipfit: {
                left: function() {
                    $.ui.position.flip.left.apply(this, arguments), $.ui.position.fit.left.apply(this, arguments)
                },
                top: function() {
                    $.ui.position.flip.top.apply(this, arguments), $.ui.position.fit.top.apply(this, arguments)
                }
            }
        },
        function() {
            var testElement, testElementParent, testElementStyle, offsetLeft, i, body = document.getElementsByTagName("body")[0],
                div = document.createElement("div");
            testElement = document.createElement(body ? "div" : "body"), testElementStyle = {
                visibility: "hidden",
                width: 0,
                height: 0,
                border: 0,
                margin: 0,
                background: "none"
            }, body && $.extend(testElementStyle, {
                position: "absolute",
                left: "-1000px",
                top: "-1000px"
            });
            for (i in testElementStyle) testElement.style[i] = testElementStyle[i];
            testElement.appendChild(div), testElementParent = body || document.documentElement, testElementParent.insertBefore(testElement, testElementParent.firstChild), div.style.cssText = "position: absolute; left: 10.7432222px;", offsetLeft = $(div).offset().left, supportsOffsetFractions = offsetLeft > 10 && 11 > offsetLeft, testElement.innerHTML = "", testElementParent.removeChild(testElement)
        }()
    }();
    $.ui.position, $.widget("ui.accordion", {
        version: "1.11.1",
        options: {
            active: 0,
            animate: {},
            collapsible: !1,
            event: "click",
            header: "> li > :first-child,> :not(li):even",
            heightStyle: "auto",
            icons: {
                activeHeader: "ui-icon-triangle-1-s",
                header: "ui-icon-triangle-1-e"
            },
            activate: null,
            beforeActivate: null
        },
        hideProps: {
            borderTopWidth: "hide",
            borderBottomWidth: "hide",
            paddingTop: "hide",
            paddingBottom: "hide",
            height: "hide"
        },
        showProps: {
            borderTopWidth: "show",
            borderBottomWidth: "show",
            paddingTop: "show",
            paddingBottom: "show",
            height: "show"
        },
        _create: function() {
            var options = this.options;
            this.prevShow = this.prevHide = $(), this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role", "tablist"), options.collapsible || options.active !== !1 && null != options.active || (options.active = 0), this._processPanels(), options.active < 0 && (options.active += this.headers.length), this._refresh()
        },
        _getCreateEventData: function() {
            return {
                header: this.active,
                panel: this.active.length ? this.active.next() : $()
            }
        },
        _createIcons: function() {
            var icons = this.options.icons;
            icons && ($("<span>").addClass("ui-accordion-header-icon ui-icon " + icons.header).prependTo(this.headers), this.active.children(".ui-accordion-header-icon").removeClass(icons.header).addClass(icons.activeHeader), this.headers.addClass("ui-accordion-icons"))
        },
        _destroyIcons: function() {
            this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()
        },
        _destroy: function() {
            var contents;
            this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"), this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").removeUniqueId(), this._destroyIcons(), contents = this.headers.next().removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").css("display", "").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeUniqueId(), "content" !== this.options.heightStyle && contents.css("height", "")
        },
        _setOption: function(key, value) {
            return "active" === key ? void this._activate(value) : ("event" === key && (this.options.event && this._off(this.headers, this.options.event), this._setupEvents(value)), this._super(key, value), "collapsible" !== key || value || this.options.active !== !1 || this._activate(0), "icons" === key && (this._destroyIcons(), value && this._createIcons()), void("disabled" === key && (this.element.toggleClass("ui-state-disabled", !! value).attr("aria-disabled", value), this.headers.add(this.headers.next()).toggleClass("ui-state-disabled", !! value))))
        },
        _keydown: function(event) {
            if (!event.altKey && !event.ctrlKey) {
                var keyCode = $.ui.keyCode,
                    length = this.headers.length,
                    currentIndex = this.headers.index(event.target),
                    toFocus = !1;
                switch (event.keyCode) {
                    case keyCode.RIGHT:
                    case keyCode.DOWN:
                        toFocus = this.headers[(currentIndex + 1) % length];
                        break;
                    case keyCode.LEFT:
                    case keyCode.UP:
                        toFocus = this.headers[(currentIndex - 1 + length) % length];
                        break;
                    case keyCode.SPACE:
                    case keyCode.ENTER:
                        this._eventHandler(event);
                        break;
                    case keyCode.HOME:
                        toFocus = this.headers[0];
                        break;
                    case keyCode.END:
                        toFocus = this.headers[length - 1]
                }
                toFocus && ($(event.target).attr("tabIndex", -1), $(toFocus).attr("tabIndex", 0), toFocus.focus(), event.preventDefault())
            }
        },
        _panelKeyDown: function(event) {
            event.keyCode === $.ui.keyCode.UP && event.ctrlKey && $(event.currentTarget).prev().focus()
        },
        refresh: function() {
            var options = this.options;
            this._processPanels(), options.active === !1 && options.collapsible === !0 || !this.headers.length ? (options.active = !1, this.active = $()) : options.active === !1 ? this._activate(0) : this.active.length && !$.contains(this.element[0], this.active[0]) ? this.headers.length === this.headers.find(".ui-state-disabled").length ? (options.active = !1, this.active = $()) : this._activate(Math.max(0, options.active - 1)) : options.active = this.headers.index(this.active), this._destroyIcons(), this._refresh()
        },
        _processPanels: function() {
            this.headers = this.element.find(this.options.header).addClass("ui-accordion-header ui-state-default ui-corner-all"), this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide()
        },
        _refresh: function() {
            var maxHeight, options = this.options,
                heightStyle = options.heightStyle,
                parent = this.element.parent();
            this.active = this._findActive(options.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"), this.active.next().addClass("ui-accordion-content-active").show(), this.headers.attr("role", "tab").each(function() {
                var header = $(this),
                    headerId = header.uniqueId().attr("id"),
                    panel = header.next(),
                    panelId = panel.uniqueId().attr("id");
                header.attr("aria-controls", panelId), panel.attr("aria-labelledby", headerId)
            }).next().attr("role", "tabpanel"), this.headers.not(this.active).attr({
                "aria-selected": "false",
                "aria-expanded": "false",
                tabIndex: -1
            }).next().attr({
                "aria-hidden": "true"
            }).hide(), this.active.length ? this.active.attr({
                "aria-selected": "true",
                "aria-expanded": "true",
                tabIndex: 0
            }).next().attr({
                "aria-hidden": "false"
            }) : this.headers.eq(0).attr("tabIndex", 0), this._createIcons(), this._setupEvents(options.event), "fill" === heightStyle ? (maxHeight = parent.height(), this.element.siblings(":visible").each(function() {
                var elem = $(this),
                    position = elem.css("position");
                "absolute" !== position && "fixed" !== position && (maxHeight -= elem.outerHeight(!0))
            }), this.headers.each(function() {
                maxHeight -= $(this).outerHeight(!0)
            }), this.headers.next().each(function() {
                $(this).height(Math.max(0, maxHeight - $(this).innerHeight() + $(this).height()))
            }).css("overflow", "auto")) : "auto" === heightStyle && (maxHeight = 0, this.headers.next().each(function() {
                maxHeight = Math.max(maxHeight, $(this).css("height", "").height())
            }).height(maxHeight))
        },
        _activate: function(index) {
            var active = this._findActive(index)[0];
            active !== this.active[0] && (active = active || this.active[0], this._eventHandler({
                target: active,
                currentTarget: active,
                preventDefault: $.noop
            }))
        },
        _findActive: function(selector) {
            return "number" == typeof selector ? this.headers.eq(selector) : $()
        },
        _setupEvents: function(event) {
            var events = {
                keydown: "_keydown"
            };
            event && $.each(event.split(" "), function(index, eventName) {
                events[eventName] = "_eventHandler"
            }), this._off(this.headers.add(this.headers.next())), this._on(this.headers, events), this._on(this.headers.next(), {
                keydown: "_panelKeyDown"
            }), this._hoverable(this.headers), this._focusable(this.headers)
        },
        _eventHandler: function(event) {
            var options = this.options,
                active = this.active,
                clicked = $(event.currentTarget),
                clickedIsActive = clicked[0] === active[0],
                collapsing = clickedIsActive && options.collapsible,
                toShow = collapsing ? $() : clicked.next(),
                toHide = active.next(),
                eventData = {
                    oldHeader: active,
                    oldPanel: toHide,
                    newHeader: collapsing ? $() : clicked,
                    newPanel: toShow
                };
            event.preventDefault(), clickedIsActive && !options.collapsible || this._trigger("beforeActivate", event, eventData) === !1 || (options.active = collapsing ? !1 : this.headers.index(clicked), this.active = clickedIsActive ? $() : clicked, this._toggle(eventData), active.removeClass("ui-accordion-header-active ui-state-active"), options.icons && active.children(".ui-accordion-header-icon").removeClass(options.icons.activeHeader).addClass(options.icons.header), clickedIsActive || (clicked.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"), options.icons && clicked.children(".ui-accordion-header-icon").removeClass(options.icons.header).addClass(options.icons.activeHeader), clicked.next().addClass("ui-accordion-content-active")))
        },
        _toggle: function(data) {
            var toShow = data.newPanel,
                toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
            this.prevShow.add(this.prevHide).stop(!0, !0), this.prevShow = toShow, this.prevHide = toHide, this.options.animate ? this._animate(toShow, toHide, data) : (toHide.hide(), toShow.show(), this._toggleComplete(data)), toHide.attr({
                "aria-hidden": "true"
            }), toHide.prev().attr("aria-selected", "false"), toShow.length && toHide.length ? toHide.prev().attr({
                tabIndex: -1,
                "aria-expanded": "false"
            }) : toShow.length && this.headers.filter(function() {
                return 0 === $(this).attr("tabIndex")
            }).attr("tabIndex", -1), toShow.attr("aria-hidden", "false").prev().attr({
                "aria-selected": "true",
                tabIndex: 0,
                "aria-expanded": "true"
            })
        },
        _animate: function(toShow, toHide, data) {
            var total, easing, duration, that = this,
                adjust = 0,
                down = toShow.length && (!toHide.length || toShow.index() < toHide.index()),
                animate = this.options.animate || {}, options = down && animate.down || animate,
                complete = function() {
                    that._toggleComplete(data)
                };
            return "number" == typeof options && (duration = options), "string" == typeof options && (easing = options), easing = easing || options.easing || animate.easing, duration = duration || options.duration || animate.duration, toHide.length ? toShow.length ? (total = toShow.show().outerHeight(), toHide.animate(this.hideProps, {
                duration: duration,
                easing: easing,
                step: function(now, fx) {
                    fx.now = Math.round(now)
                }
            }), void toShow.hide().animate(this.showProps, {
                duration: duration,
                easing: easing,
                complete: complete,
                step: function(now, fx) {
                    fx.now = Math.round(now), "height" !== fx.prop ? adjust += fx.now : "content" !== that.options.heightStyle && (fx.now = Math.round(total - toHide.outerHeight() - adjust), adjust = 0)
                }
            })) : toHide.animate(this.hideProps, duration, easing, complete) : toShow.animate(this.showProps, duration, easing, complete)
        },
        _toggleComplete: function(data) {
            var toHide = data.oldPanel;
            toHide.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"), toHide.length && (toHide.parent()[0].className = toHide.parent()[0].className), this._trigger("activate", null, data)
        }
    }), $.widget("ui.menu", {
        version: "1.11.1",
        defaultElement: "<ul>",
        delay: 300,
        options: {
            icons: {
                submenu: "ui-icon-carat-1-e"
            },
            items: "> *",
            menus: "ul",
            position: {
                my: "left-1 top",
                at: "right top"
            },
            role: "menu",
            blur: null,
            focus: null,
            select: null
        },
        _create: function() {
            this.activeMenu = this.element, this.mouseHandled = !1, this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content").toggleClass("ui-menu-icons", !! this.element.find(".ui-icon").length).attr({
                role: this.options.role,
                tabIndex: 0
            }), this.options.disabled && this.element.addClass("ui-state-disabled").attr("aria-disabled", "true"), this._on({
                "mousedown .ui-menu-item": function(event) {
                    event.preventDefault()
                },
                "click .ui-menu-item": function(event) {
                    var target = $(event.target);
                    !this.mouseHandled && target.not(".ui-state-disabled").length && (this.select(event), event.isPropagationStopped() || (this.mouseHandled = !0), target.has(".ui-menu").length ? this.expand(event) : !this.element.is(":focus") && $(this.document[0].activeElement).closest(".ui-menu").length && (this.element.trigger("focus", [!0]), this.active && 1 === this.active.parents(".ui-menu").length && clearTimeout(this.timer)))
                },
                "mouseenter .ui-menu-item": function(event) {
                    var target = $(event.currentTarget);
                    target.siblings(".ui-state-active").removeClass("ui-state-active"), this.focus(event, target)
                },
                mouseleave: "collapseAll",
                "mouseleave .ui-menu": "collapseAll",
                focus: function(event, keepActiveItem) {
                    var item = this.active || this.element.find(this.options.items).eq(0);
                    keepActiveItem || this.focus(event, item)
                },
                blur: function(event) {
                    this._delay(function() {
                        $.contains(this.element[0], this.document[0].activeElement) || this.collapseAll(event)
                    })
                },
                keydown: "_keydown"
            }), this.refresh(), this._on(this.document, {
                click: function(event) {
                    this._closeOnDocumentClick(event) && this.collapseAll(event), this.mouseHandled = !1
                }
            })
        },
        _destroy: function() {
            this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(), this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").removeUniqueId().removeClass("ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function() {
                var elem = $(this);
                elem.data("ui-menu-submenu-carat") && elem.remove()
            }), this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")
        },
        _keydown: function(event) {
            function escape(value) {
                return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&")
            }
            var match, prev, character, skip, regex, preventDefault = !0;
            switch (event.keyCode) {
                case $.ui.keyCode.PAGE_UP:
                    this.previousPage(event);
                    break;
                case $.ui.keyCode.PAGE_DOWN:
                    this.nextPage(event);
                    break;
                case $.ui.keyCode.HOME:
                    this._move("first", "first", event);
                    break;
                case $.ui.keyCode.END:
                    this._move("last", "last", event);
                    break;
                case $.ui.keyCode.UP:
                    this.previous(event);
                    break;
                case $.ui.keyCode.DOWN:
                    this.next(event);
                    break;
                case $.ui.keyCode.LEFT:
                    this.collapse(event);
                    break;
                case $.ui.keyCode.RIGHT:
                    this.active && !this.active.is(".ui-state-disabled") && this.expand(event);
                    break;
                case $.ui.keyCode.ENTER:
                case $.ui.keyCode.SPACE:
                    this._activate(event);
                    break;
                case $.ui.keyCode.ESCAPE:
                    this.collapse(event);
                    break;
                default:
                    preventDefault = !1, prev = this.previousFilter || "", character = String.fromCharCode(event.keyCode), skip = !1, clearTimeout(this.filterTimer), character === prev ? skip = !0 : character = prev + character, regex = new RegExp("^" + escape(character), "i"), match = this.activeMenu.find(this.options.items).filter(function() {
                        return regex.test($(this).text())
                    }), match = skip && -1 !== match.index(this.active.next()) ? this.active.nextAll(".ui-menu-item") : match, match.length || (character = String.fromCharCode(event.keyCode), regex = new RegExp("^" + escape(character), "i"), match = this.activeMenu.find(this.options.items).filter(function() {
                        return regex.test($(this).text())
                    })), match.length ? (this.focus(event, match), match.length > 1 ? (this.previousFilter = character, this.filterTimer = this._delay(function() {
                        delete this.previousFilter
                    }, 1e3)) : delete this.previousFilter) : delete this.previousFilter
            }
            preventDefault && event.preventDefault()
        },
        _activate: function(event) {
            this.active.is(".ui-state-disabled") || (this.active.is("[aria-haspopup='true']") ? this.expand(event) : this.select(event))
        },
        refresh: function() {
            var menus, items, that = this,
                icon = this.options.icons.submenu,
                submenus = this.element.find(this.options.menus);
            this.element.toggleClass("ui-menu-icons", !! this.element.find(".ui-icon").length), submenus.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-front").hide().attr({
                role: this.options.role,
                "aria-hidden": "true",
                "aria-expanded": "false"
            }).each(function() {
                var menu = $(this),
                    item = menu.parent(),
                    submenuCarat = $("<span>").addClass("ui-menu-icon ui-icon " + icon).data("ui-menu-submenu-carat", !0);
                item.attr("aria-haspopup", "true").prepend(submenuCarat), menu.attr("aria-labelledby", item.attr("id"))
            }), menus = submenus.add(this.element), items = menus.find(this.options.items), items.not(".ui-menu-item").each(function() {
                var item = $(this);
                that._isDivider(item) && item.addClass("ui-widget-content ui-menu-divider")
            }), items.not(".ui-menu-item, .ui-menu-divider").addClass("ui-menu-item").uniqueId().attr({
                tabIndex: -1,
                role: this._itemRole()
            }), items.filter(".ui-state-disabled").attr("aria-disabled", "true"), this.active && !$.contains(this.element[0], this.active[0]) && this.blur()
        },
        _itemRole: function() {
            return {
                menu: "menuitem",
                listbox: "option"
            }[this.options.role]
        },
        _setOption: function(key, value) {
            "icons" === key && this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(value.submenu), "disabled" === key && this.element.toggleClass("ui-state-disabled", !! value).attr("aria-disabled", value), this._super(key, value)
        },
        focus: function(event, item) {
            var nested, focused;
            this.blur(event, event && "focus" === event.type), this._scrollIntoView(item), this.active = item.first(), focused = this.active.addClass("ui-state-focus").removeClass("ui-state-active"), this.options.role && this.element.attr("aria-activedescendant", focused.attr("id")), this.active.parent().closest(".ui-menu-item").addClass("ui-state-active"), event && "keydown" === event.type ? this._close() : this.timer = this._delay(function() {
                this._close()
            }, this.delay), nested = item.children(".ui-menu"), nested.length && event && /^mouse/.test(event.type) && this._startOpening(nested), this.activeMenu = item.parent(), this._trigger("focus", event, {
                item: item
            })
        },
        _scrollIntoView: function(item) {
            var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
            this._hasScroll() && (borderTop = parseFloat($.css(this.activeMenu[0], "borderTopWidth")) || 0, paddingTop = parseFloat($.css(this.activeMenu[0], "paddingTop")) || 0, offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop, scroll = this.activeMenu.scrollTop(), elementHeight = this.activeMenu.height(), itemHeight = item.outerHeight(), 0 > offset ? this.activeMenu.scrollTop(scroll + offset) : offset + itemHeight > elementHeight && this.activeMenu.scrollTop(scroll + offset - elementHeight + itemHeight))
        },
        blur: function(event, fromFocus) {
            fromFocus || clearTimeout(this.timer), this.active && (this.active.removeClass("ui-state-focus"), this.active = null, this._trigger("blur", event, {
                item: this.active
            }))
        },
        _startOpening: function(submenu) {
            clearTimeout(this.timer), "true" === submenu.attr("aria-hidden") && (this.timer = this._delay(function() {
                this._close(), this._open(submenu)
            }, this.delay))
        },
        _open: function(submenu) {
            var position = $.extend({
                of: this.active
            }, this.options.position);
            clearTimeout(this.timer), this.element.find(".ui-menu").not(submenu.parents(".ui-menu")).hide().attr("aria-hidden", "true"), submenu.show().removeAttr("aria-hidden").attr("aria-expanded", "true").position(position)
        },
        collapseAll: function(event, all) {
            clearTimeout(this.timer), this.timer = this._delay(function() {
                var currentMenu = all ? this.element : $(event && event.target).closest(this.element.find(".ui-menu"));
                currentMenu.length || (currentMenu = this.element), this._close(currentMenu), this.blur(event), this.activeMenu = currentMenu
            }, this.delay)
        },
        _close: function(startMenu) {
            startMenu || (startMenu = this.active ? this.active.parent() : this.element), startMenu.find(".ui-menu").hide().attr("aria-hidden", "true").attr("aria-expanded", "false").end().find(".ui-state-active").not(".ui-state-focus").removeClass("ui-state-active")
        },
        _closeOnDocumentClick: function(event) {
            return !$(event.target).closest(".ui-menu").length
        },
        _isDivider: function(item) {
            return !/[^\-\u2014\u2013\s]/.test(item.text())
        },
        collapse: function(event) {
            var newItem = this.active && this.active.parent().closest(".ui-menu-item", this.element);
            newItem && newItem.length && (this._close(), this.focus(event, newItem))
        },
        expand: function(event) {
            var newItem = this.active && this.active.children(".ui-menu ").find(this.options.items).first();
            newItem && newItem.length && (this._open(newItem.parent()), this._delay(function() {
                this.focus(event, newItem)
            }))
        },
        next: function(event) {
            this._move("next", "first", event)
        },
        previous: function(event) {
            this._move("prev", "last", event)
        },
        isFirstItem: function() {
            return this.active && !this.active.prevAll(".ui-menu-item").length
        },
        isLastItem: function() {
            return this.active && !this.active.nextAll(".ui-menu-item").length
        },
        _move: function(direction, filter, event) {
            var next;
            this.active && (next = "first" === direction || "last" === direction ? this.active["first" === direction ? "prevAll" : "nextAll"](".ui-menu-item").eq(-1) : this.active[direction + "All"](".ui-menu-item").eq(0)), next && next.length && this.active || (next = this.activeMenu.find(this.options.items)[filter]()), this.focus(event, next)
        },
        nextPage: function(event) {
            var item, base, height;
            return this.active ? void(this.isLastItem() || (this._hasScroll() ? (base = this.active.offset().top, height = this.element.height(), this.active.nextAll(".ui-menu-item").each(function() {
                return item = $(this), item.offset().top - base - height < 0
            }), this.focus(event, item)) : this.focus(event, this.activeMenu.find(this.options.items)[this.active ? "last" : "first"]()))) : void this.next(event)
        },
        previousPage: function(event) {
            var item, base, height;
            return this.active ? void(this.isFirstItem() || (this._hasScroll() ? (base = this.active.offset().top, height = this.element.height(), this.active.prevAll(".ui-menu-item").each(function() {
                return item = $(this), item.offset().top - base + height > 0
            }), this.focus(event, item)) : this.focus(event, this.activeMenu.find(this.options.items).first()))) : void this.next(event)
        },
        _hasScroll: function() {
            return this.element.outerHeight() < this.element.prop("scrollHeight")
        },
        select: function(event) {
            this.active = this.active || $(event.target).closest(".ui-menu-item");
            var ui = {
                item: this.active
            };
            this.active.has(".ui-menu").length || this.collapseAll(event, !0), this._trigger("select", event, ui)
        }
    });
    $.widget("ui.autocomplete", {
        version: "1.11.1",
        defaultElement: "<input>",
        options: {
            appendTo: null,
            autoFocus: !1,
            delay: 300,
            minLength: 1,
            position: {
                my: "left top",
                at: "left bottom",
                collision: "none"
            },
            source: null,
            change: null,
            close: null,
            focus: null,
            open: null,
            response: null,
            search: null,
            select: null
        },
        requestIndex: 0,
        pending: 0,
        _create: function() {
            var suppressKeyPress, suppressKeyPressRepeat, suppressInput, nodeName = this.element[0].nodeName.toLowerCase(),
                isTextarea = "textarea" === nodeName,
                isInput = "input" === nodeName;
            this.isMultiLine = isTextarea ? !0 : isInput ? !1 : this.element.prop("isContentEditable"), this.valueMethod = this.element[isTextarea || isInput ? "val" : "text"], this.isNewMenu = !0, this.element.addClass("ui-autocomplete-input").attr("autocomplete", "off"), this._on(this.element, {
                keydown: function(event) {
                    if (this.element.prop("readOnly")) return suppressKeyPress = !0, suppressInput = !0, void(suppressKeyPressRepeat = !0);
                    suppressKeyPress = !1, suppressInput = !1, suppressKeyPressRepeat = !1;
                    var keyCode = $.ui.keyCode;
                    switch (event.keyCode) {
                        case keyCode.PAGE_UP:
                            suppressKeyPress = !0, this._move("previousPage", event);
                            break;
                        case keyCode.PAGE_DOWN:
                            suppressKeyPress = !0, this._move("nextPage", event);
                            break;
                        case keyCode.UP:
                            suppressKeyPress = !0, this._keyEvent("previous", event);
                            break;
                        case keyCode.DOWN:
                            suppressKeyPress = !0, this._keyEvent("next", event);
                            break;
                        case keyCode.ENTER:
                            this.menu.active && (suppressKeyPress = !0, event.preventDefault(), this.menu.select(event));
                            break;
                        case keyCode.TAB:
                            this.menu.active && this.menu.select(event);
                            break;
                        case keyCode.ESCAPE:
                            this.menu.element.is(":visible") && (this.isMultiLine || this._value(this.term), this.close(event), event.preventDefault());
                            break;
                        default:
                            suppressKeyPressRepeat = !0, this._searchTimeout(event)
                    }
                },
                keypress: function(event) {
                    if (suppressKeyPress) return suppressKeyPress = !1, void((!this.isMultiLine || this.menu.element.is(":visible")) && event.preventDefault());
                    if (!suppressKeyPressRepeat) {
                        var keyCode = $.ui.keyCode;
                        switch (event.keyCode) {
                            case keyCode.PAGE_UP:
                                this._move("previousPage", event);
                                break;
                            case keyCode.PAGE_DOWN:
                                this._move("nextPage", event);
                                break;
                            case keyCode.UP:
                                this._keyEvent("previous", event);
                                break;
                            case keyCode.DOWN:
                                this._keyEvent("next", event)
                        }
                    }
                },
                input: function(event) {
                    return suppressInput ? (suppressInput = !1, void event.preventDefault()) : void this._searchTimeout(event)
                },
                focus: function() {
                    this.selectedItem = null, this.previous = this._value()
                },
                blur: function(event) {
                    return this.cancelBlur ? void delete this.cancelBlur : (clearTimeout(this.searching), this.close(event), void this._change(event))
                }
            }), this._initSource(), this.menu = $("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({
                role: null
            }).hide().menu("instance"), this._on(this.menu.element, {
                mousedown: function(event) {
                    event.preventDefault(), this.cancelBlur = !0, this._delay(function() {
                        delete this.cancelBlur
                    });
                    var menuElement = this.menu.element[0];
                    $(event.target).closest(".ui-menu-item").length || this._delay(function() {
                        var that = this;
                        this.document.one("mousedown", function(event) {
                            event.target === that.element[0] || event.target === menuElement || $.contains(menuElement, event.target) || that.close()
                        })
                    })
                },
                menufocus: function(event, ui) {
                    var label, item;
                    return this.isNewMenu && (this.isNewMenu = !1, event.originalEvent && /^mouse/.test(event.originalEvent.type)) ? (this.menu.blur(), void this.document.one("mousemove", function() {
                        $(event.target).trigger(event.originalEvent)
                    })) : (item = ui.item.data("ui-autocomplete-item"), !1 !== this._trigger("focus", event, {
                        item: item
                    }) && event.originalEvent && /^key/.test(event.originalEvent.type) && this._value(item.value), label = ui.item.attr("aria-label") || item.value, void(label && $.trim(label).length && (this.liveRegion.children().hide(), $("<div>").text(label).appendTo(this.liveRegion))))
                },
                menuselect: function(event, ui) {
                    var item = ui.item.data("ui-autocomplete-item"),
                        previous = this.previous;
                    this.element[0] !== this.document[0].activeElement && (this.element.focus(), this.previous = previous, this._delay(function() {
                        this.previous = previous, this.selectedItem = item
                    })), !1 !== this._trigger("select", event, {
                        item: item
                    }) && this._value(item.value), this.term = this._value(), this.close(event), this.selectedItem = item
                }
            }), this.liveRegion = $("<span>", {
                role: "status",
                "aria-live": "assertive",
                "aria-relevant": "additions"
            }).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body), this._on(this.window, {
                beforeunload: function() {
                    this.element.removeAttr("autocomplete")
                }
            })
        },
        _destroy: function() {
            clearTimeout(this.searching), this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"), this.menu.element.remove(), this.liveRegion.remove()
        },
        _setOption: function(key, value) {
            this._super(key, value), "source" === key && this._initSource(), "appendTo" === key && this.menu.element.appendTo(this._appendTo()), "disabled" === key && value && this.xhr && this.xhr.abort()
        },
        _appendTo: function() {
            var element = this.options.appendTo;
            return element && (element = element.jquery || element.nodeType ? $(element) : this.document.find(element).eq(0)), element && element[0] || (element = this.element.closest(".ui-front")), element.length || (element = this.document[0].body), element
        },
        _initSource: function() {
            var array, url, that = this;
            $.isArray(this.options.source) ? (array = this.options.source, this.source = function(request, response) {
                response($.ui.autocomplete.filter(array, request.term))
            }) : "string" == typeof this.options.source ? (url = this.options.source, this.source = function(request, response) {
                that.xhr && that.xhr.abort(), that.xhr = $.ajax({
                    url: url,
                    data: request,
                    dataType: "json",
                    success: function(data) {
                        response(data)
                    },
                    error: function() {
                        response([])
                    }
                })
            }) : this.source = this.options.source
        },
        _searchTimeout: function(event) {
            clearTimeout(this.searching), this.searching = this._delay(function() {
                var equalValues = this.term === this._value(),
                    menuVisible = this.menu.element.is(":visible"),
                    modifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;
                (!equalValues || equalValues && !menuVisible && !modifierKey) && (this.selectedItem = null, this.search(null, event))
            }, this.options.delay)
        },
        search: function(value, event) {
            return value = null != value ? value : this._value(), this.term = this._value(), value.length < this.options.minLength ? this.close(event) : this._trigger("search", event) !== !1 ? this._search(value) : void 0
        },
        _search: function(value) {
            this.pending++, this.element.addClass("ui-autocomplete-loading"), this.cancelSearch = !1, this.source({
                term: value
            }, this._response())
        },
        _response: function() {
            var index = ++this.requestIndex;
            return $.proxy(function(content) {
                index === this.requestIndex && this.__response(content), this.pending--, this.pending || this.element.removeClass("ui-autocomplete-loading")
            }, this)
        },
        __response: function(content) {
            content && (content = this._normalize(content)), this._trigger("response", null, {
                content: content
            }), !this.options.disabled && content && content.length && !this.cancelSearch ? (this._suggest(content), this._trigger("open")) : this._close()
        },
        close: function(event) {
            this.cancelSearch = !0, this._close(event)
        },
        _close: function(event) {
            this.menu.element.is(":visible") && (this.menu.element.hide(), this.menu.blur(), this.isNewMenu = !0, this._trigger("close", event))
        },
        _change: function(event) {
            this.previous !== this._value() && this._trigger("change", event, {
                item: this.selectedItem
            })
        },
        _normalize: function(items) {
            return items.length && items[0].label && items[0].value ? items : $.map(items, function(item) {
                return "string" == typeof item ? {
                    label: item,
                    value: item
                } : $.extend({}, item, {
                    label: item.label || item.value,
                    value: item.value || item.label
                })
            })
        },
        _suggest: function(items) {
            var ul = this.menu.element.empty();
            this._renderMenu(ul, items), this.isNewMenu = !0, this.menu.refresh(), ul.show(), this._resizeMenu(), ul.position($.extend({
                of: this.element
            }, this.options.position)), this.options.autoFocus && this.menu.next()
        },
        _resizeMenu: function() {
            var ul = this.menu.element;
            ul.outerWidth(Math.max(ul.width("").outerWidth() + 1, this.element.outerWidth()))
        },
        _renderMenu: function(ul, items) {
            var that = this;
            $.each(items, function(index, item) {
                that._renderItemData(ul, item)
            })
        },
        _renderItemData: function(ul, item) {
            return this._renderItem(ul, item).data("ui-autocomplete-item", item)
        },
        _renderItem: function(ul, item) {
            return $("<li>").text(item.label).appendTo(ul)
        },
        _move: function(direction, event) {
            return this.menu.element.is(":visible") ? this.menu.isFirstItem() && /^previous/.test(direction) || this.menu.isLastItem() && /^next/.test(direction) ? (this.isMultiLine || this._value(this.term), void this.menu.blur()) : void this.menu[direction](event) : void this.search(null, event)
        },
        widget: function() {
            return this.menu.element
        },
        _value: function() {
            return this.valueMethod.apply(this.element, arguments)
        },
        _keyEvent: function(keyEvent, event) {
            (!this.isMultiLine || this.menu.element.is(":visible")) && (this._move(keyEvent, event), event.preventDefault())
        }
    }), $.extend($.ui.autocomplete, {
        escapeRegex: function(value) {
            return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&")
        },
        filter: function(array, term) {
            var matcher = new RegExp($.ui.autocomplete.escapeRegex(term), "i");
            return $.grep(array, function(value) {
                return matcher.test(value.label || value.value || value)
            })
        }
    }), $.widget("ui.autocomplete", $.ui.autocomplete, {
        options: {
            messages: {
                noResults: "No search results.",
                results: function(amount) {
                    return amount + (amount > 1 ? " results are" : " result is") + " available, use up and down arrow keys to navigate."
                }
            }
        },
        __response: function(content) {
            var message;
            this._superApply(arguments), this.options.disabled || this.cancelSearch || (message = content && content.length ? this.options.messages.results(content.length) : this.options.messages.noResults, this.liveRegion.children().hide(), $("<div>").text(message).appendTo(this.liveRegion))
        }
    });
    var lastActive, baseClasses = ($.ui.autocomplete, "ui-button ui-widget ui-state-default ui-corner-all"),
        typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
        formResetHandler = function() {
            var form = $(this);
            setTimeout(function() {
                form.find(":ui-button").button("refresh")
            }, 1)
        }, radioGroup = function(radio) {
            var name = radio.name,
                form = radio.form,
                radios = $([]);
            return name && (name = name.replace(/'/g, "\\'"), radios = form ? $(form).find("[name='" + name + "'][type=radio]") : $("[name='" + name + "'][type=radio]", radio.ownerDocument).filter(function() {
                return !this.form
            })), radios
        };
    $.widget("ui.button", {
        version: "1.11.1",
        defaultElement: "<button>",
        options: {
            disabled: null,
            text: !0,
            label: null,
            icons: {
                primary: null,
                secondary: null
            }
        },
        _create: function() {
            this.element.closest("form").unbind("reset" + this.eventNamespace).bind("reset" + this.eventNamespace, formResetHandler), "boolean" != typeof this.options.disabled ? this.options.disabled = !! this.element.prop("disabled") : this.element.prop("disabled", this.options.disabled), this._determineButtonType(), this.hasTitle = !! this.buttonElement.attr("title");
            var that = this,
                options = this.options,
                toggleButton = "checkbox" === this.type || "radio" === this.type,
                activeClass = toggleButton ? "" : "ui-state-active";
            null === options.label && (options.label = "input" === this.type ? this.buttonElement.val() : this.buttonElement.html()), this._hoverable(this.buttonElement), this.buttonElement.addClass(baseClasses).attr("role", "button").bind("mouseenter" + this.eventNamespace, function() {
                options.disabled || this === lastActive && $(this).addClass("ui-state-active")
            }).bind("mouseleave" + this.eventNamespace, function() {
                options.disabled || $(this).removeClass(activeClass)
            }).bind("click" + this.eventNamespace, function(event) {
                options.disabled && (event.preventDefault(), event.stopImmediatePropagation())
            }), this._on({
                focus: function() {
                    this.buttonElement.addClass("ui-state-focus")
                },
                blur: function() {
                    this.buttonElement.removeClass("ui-state-focus")
                }
            }), toggleButton && this.element.bind("change" + this.eventNamespace, function() {
                that.refresh()
            }), "checkbox" === this.type ? this.buttonElement.bind("click" + this.eventNamespace, function() {
                return options.disabled ? !1 : void 0
            }) : "radio" === this.type ? this.buttonElement.bind("click" + this.eventNamespace, function() {
                if (options.disabled) return !1;
                $(this).addClass("ui-state-active"), that.buttonElement.attr("aria-pressed", "true");
                var radio = that.element[0];
                radioGroup(radio).not(radio).map(function() {
                    return $(this).button("widget")[0]
                }).removeClass("ui-state-active").attr("aria-pressed", "false")
            }) : (this.buttonElement.bind("mousedown" + this.eventNamespace, function() {
                return options.disabled ? !1 : ($(this).addClass("ui-state-active"), lastActive = this, void that.document.one("mouseup", function() {
                    lastActive = null
                }))
            }).bind("mouseup" + this.eventNamespace, function() {
                return options.disabled ? !1 : void $(this).removeClass("ui-state-active")
            }).bind("keydown" + this.eventNamespace, function(event) {
                return options.disabled ? !1 : void((event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER) && $(this).addClass("ui-state-active"))
            }).bind("keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() {
                $(this).removeClass("ui-state-active")
            }), this.buttonElement.is("a") && this.buttonElement.keyup(function(event) {
                event.keyCode === $.ui.keyCode.SPACE && $(this).click()
            })), this._setOption("disabled", options.disabled), this._resetButton()
        },
        _determineButtonType: function() {
            var ancestor, labelSelector, checked;
            this.type = this.element.is("[type=checkbox]") ? "checkbox" : this.element.is("[type=radio]") ? "radio" : this.element.is("input") ? "input" : "button", "checkbox" === this.type || "radio" === this.type ? (ancestor = this.element.parents().last(), labelSelector = "label[for='" + this.element.attr("id") + "']", this.buttonElement = ancestor.find(labelSelector), this.buttonElement.length || (ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings(), this.buttonElement = ancestor.filter(labelSelector), this.buttonElement.length || (this.buttonElement = ancestor.find(labelSelector))), this.element.addClass("ui-helper-hidden-accessible"), checked = this.element.is(":checked"), checked && this.buttonElement.addClass("ui-state-active"), this.buttonElement.prop("aria-pressed", checked)) : this.buttonElement = this.element
        },
        widget: function() {
            return this.buttonElement
        },
        _destroy: function() {
            this.element.removeClass("ui-helper-hidden-accessible"), this.buttonElement.removeClass(baseClasses + " ui-state-active " + typeClasses).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()), this.hasTitle || this.buttonElement.removeAttr("title")
        },
        _setOption: function(key, value) {
            return this._super(key, value), "disabled" === key ? (this.widget().toggleClass("ui-state-disabled", !! value), this.element.prop("disabled", !! value), void(value && this.buttonElement.removeClass("checkbox" === this.type || "radio" === this.type ? "ui-state-focus" : "ui-state-focus ui-state-active"))) : void this._resetButton()
        },
        refresh: function() {
            var isDisabled = this.element.is("input, button") ? this.element.is(":disabled") : this.element.hasClass("ui-button-disabled");
            isDisabled !== this.options.disabled && this._setOption("disabled", isDisabled), "radio" === this.type ? radioGroup(this.element[0]).each(function() {
                $(this).is(":checked") ? $(this).button("widget").addClass("ui-state-active").attr("aria-pressed", "true") : $(this).button("widget").removeClass("ui-state-active").attr("aria-pressed", "false")
            }) : "checkbox" === this.type && (this.element.is(":checked") ? this.buttonElement.addClass("ui-state-active").attr("aria-pressed", "true") : this.buttonElement.removeClass("ui-state-active").attr("aria-pressed", "false"))
        },
        _resetButton: function() {
            if ("input" === this.type) return void(this.options.label && this.element.val(this.options.label));
            var buttonElement = this.buttonElement.removeClass(typeClasses),
                buttonText = $("<span></span>", this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(buttonElement.empty()).text(),
                icons = this.options.icons,
                multipleIcons = icons.primary && icons.secondary,
                buttonClasses = [];
            icons.primary || icons.secondary ? (this.options.text && buttonClasses.push("ui-button-text-icon" + (multipleIcons ? "s" : icons.primary ? "-primary" : "-secondary")), icons.primary && buttonElement.prepend("<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>"), icons.secondary && buttonElement.append("<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>"), this.options.text || (buttonClasses.push(multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only"), this.hasTitle || buttonElement.attr("title", $.trim(buttonText)))) : buttonClasses.push("ui-button-text-only"), buttonElement.addClass(buttonClasses.join(" "))
        }
    }), $.widget("ui.buttonset", {
        version: "1.11.1",
        options: {
            items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
        },
        _create: function() {
            this.element.addClass("ui-buttonset")
        },
        _init: function() {
            this.refresh()
        },
        _setOption: function(key, value) {
            "disabled" === key && this.buttons.button("option", key, value), this._super(key, value)
        },
        refresh: function() {
            var rtl = "rtl" === this.element.css("direction"),
                allButtons = this.element.find(this.options.items),
                existingButtons = allButtons.filter(":ui-button");
            allButtons.not(":ui-button").button(), existingButtons.button("refresh"), this.buttons = allButtons.map(function() {
                return $(this).button("widget")[0]
            }).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(rtl ? "ui-corner-right" : "ui-corner-left").end().filter(":last").addClass(rtl ? "ui-corner-left" : "ui-corner-right").end().end()
        },
        _destroy: function() {
            this.element.removeClass("ui-buttonset"), this.buttons.map(function() {
                return $(this).button("widget")[0]
            }).removeClass("ui-corner-left ui-corner-right").end().button("destroy")
        }
    });
    $.ui.button;
    $.extend($.ui, {
        datepicker: {
            version: "1.11.1"
        }
    });
    var datepicker_instActive;
    $.extend(Datepicker.prototype, {
        markerClassName: "hasDatepicker",
        maxRows: 4,
        _widgetDatepicker: function() {
            return this.dpDiv
        },
        setDefaults: function(settings) {
            return datepicker_extendRemove(this._defaults, settings || {}), this
        },
        _attachDatepicker: function(target, settings) {
            var nodeName, inline, inst;
            nodeName = target.nodeName.toLowerCase(), inline = "div" === nodeName || "span" === nodeName, target.id || (this.uuid += 1, target.id = "dp" + this.uuid), inst = this._newInst($(target), inline), inst.settings = $.extend({}, settings || {}), "input" === nodeName ? this._connectDatepicker(target, inst) : inline && this._inlineDatepicker(target, inst)
        },
        _newInst: function(target, inline) {
            var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1");
            return {
                id: id,
                input: target,
                selectedDay: 0,
                selectedMonth: 0,
                selectedYear: 0,
                drawMonth: 0,
                drawYear: 0,
                inline: inline,
                dpDiv: inline ? datepicker_bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")) : this.dpDiv
            }
        },
        _connectDatepicker: function(target, inst) {
            var input = $(target);
            inst.append = $([]), inst.trigger = $([]), input.hasClass(this.markerClassName) || (this._attachments(input, inst), input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp), this._autoSize(inst), $.data(target, "datepicker", inst), inst.settings.disabled && this._disableDatepicker(target))
        },
        _attachments: function(input, inst) {
            var showOn, buttonText, buttonImage, appendText = this._get(inst, "appendText"),
                isRTL = this._get(inst, "isRTL");
            inst.append && inst.append.remove(), appendText && (inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>"), input[isRTL ? "before" : "after"](inst.append)), input.unbind("focus", this._showDatepicker), inst.trigger && inst.trigger.remove(), showOn = this._get(inst, "showOn"), ("focus" === showOn || "both" === showOn) && input.focus(this._showDatepicker), ("button" === showOn || "both" === showOn) && (buttonText = this._get(inst, "buttonText"), buttonImage = this._get(inst, "buttonImage"), inst.trigger = $(this._get(inst, "buttonImageOnly") ? $("<img/>").addClass(this._triggerClass).attr({
                src: buttonImage,
                alt: buttonText,
                title: buttonText
            }) : $("<button type='button'></button>").addClass(this._triggerClass).html(buttonImage ? $("<img/>").attr({
                src: buttonImage,
                alt: buttonText,
                title: buttonText
            }) : buttonText)), input[isRTL ? "before" : "after"](inst.trigger), inst.trigger.click(function() {
                return $.datepicker._datepickerShowing && $.datepicker._lastInput === input[0] ? $.datepicker._hideDatepicker() : $.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0] ? ($.datepicker._hideDatepicker(), $.datepicker._showDatepicker(input[0])) : $.datepicker._showDatepicker(input[0]), !1
            }))
        },
        _autoSize: function(inst) {
            if (this._get(inst, "autoSize") && !inst.inline) {
                var findMax, max, maxI, i, date = new Date(2009, 11, 20),
                    dateFormat = this._get(inst, "dateFormat");
                dateFormat.match(/[DM]/) && (findMax = function(names) {
                    for (max = 0, maxI = 0, i = 0; i < names.length; i++) names[i].length > max && (max = names[i].length, maxI = i);
                    return maxI
                }, date.setMonth(findMax(this._get(inst, dateFormat.match(/MM/) ? "monthNames" : "monthNamesShort"))), date.setDate(findMax(this._get(inst, dateFormat.match(/DD/) ? "dayNames" : "dayNamesShort")) + 20 - date.getDay())), inst.input.attr("size", this._formatDate(inst, date).length)
            }
        },
        _inlineDatepicker: function(target, inst) {
            var divSpan = $(target);
            divSpan.hasClass(this.markerClassName) || (divSpan.addClass(this.markerClassName).append(inst.dpDiv), $.data(target, "datepicker", inst), this._setDate(inst, this._getDefaultDate(inst), !0), this._updateDatepicker(inst), this._updateAlternate(inst), inst.settings.disabled && this._disableDatepicker(target), inst.dpDiv.css("display", "block"))
        },
        _dialogDatepicker: function(input, date, onSelect, settings, pos) {
            var id, browserWidth, browserHeight, scrollX, scrollY, inst = this._dialogInst;
            return inst || (this.uuid += 1, id = "dp" + this.uuid, this._dialogInput = $("<input type='text' id='" + id + "' style='position: absolute; top: -100px; width: 0px;'/>"), this._dialogInput.keydown(this._doKeyDown), $("body").append(this._dialogInput), inst = this._dialogInst = this._newInst(this._dialogInput, !1), inst.settings = {}, $.data(this._dialogInput[0], "datepicker", inst)), datepicker_extendRemove(inst.settings, settings || {}), date = date && date.constructor === Date ? this._formatDate(inst, date) : date, this._dialogInput.val(date), this._pos = pos ? pos.length ? pos : [pos.pageX, pos.pageY] : null, this._pos || (browserWidth = document.documentElement.clientWidth, browserHeight = document.documentElement.clientHeight, scrollX = document.documentElement.scrollLeft || document.body.scrollLeft, scrollY = document.documentElement.scrollTop || document.body.scrollTop, this._pos = [browserWidth / 2 - 100 + scrollX, browserHeight / 2 - 150 + scrollY]), this._dialogInput.css("left", this._pos[0] + 20 + "px").css("top", this._pos[1] + "px"), inst.settings.onSelect = onSelect, this._inDialog = !0, this.dpDiv.addClass(this._dialogClass), this._showDatepicker(this._dialogInput[0]), $.blockUI && $.blockUI(this.dpDiv), $.data(this._dialogInput[0], "datepicker", inst), this
        },
        _destroyDatepicker: function(target) {
            var nodeName, $target = $(target),
                inst = $.data(target, "datepicker");
            $target.hasClass(this.markerClassName) && (nodeName = target.nodeName.toLowerCase(), $.removeData(target, "datepicker"), "input" === nodeName ? (inst.append.remove(), inst.trigger.remove(), $target.removeClass(this.markerClassName).unbind("focus", this._showDatepicker).unbind("keydown", this._doKeyDown).unbind("keypress", this._doKeyPress).unbind("keyup", this._doKeyUp)) : ("div" === nodeName || "span" === nodeName) && $target.removeClass(this.markerClassName).empty())
        },
        _enableDatepicker: function(target) {
            var nodeName, inline, $target = $(target),
                inst = $.data(target, "datepicker");
            $target.hasClass(this.markerClassName) && (nodeName = target.nodeName.toLowerCase(), "input" === nodeName ? (target.disabled = !1, inst.trigger.filter("button").each(function() {
                this.disabled = !1
            }).end().filter("img").css({
                opacity: "1.0",
                cursor: ""
            })) : ("div" === nodeName || "span" === nodeName) && (inline = $target.children("." + this._inlineClass), inline.children().removeClass("ui-state-disabled"), inline.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled", !1)), this._disabledInputs = $.map(this._disabledInputs, function(value) {
                return value === target ? null : value
            }))
        },
        _disableDatepicker: function(target) {
            var nodeName, inline, $target = $(target),
                inst = $.data(target, "datepicker");
            $target.hasClass(this.markerClassName) && (nodeName = target.nodeName.toLowerCase(), "input" === nodeName ? (target.disabled = !0, inst.trigger.filter("button").each(function() {
                this.disabled = !0
            }).end().filter("img").css({
                opacity: "0.5",
                cursor: "default"
            })) : ("div" === nodeName || "span" === nodeName) && (inline = $target.children("." + this._inlineClass), inline.children().addClass("ui-state-disabled"), inline.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled", !0)), this._disabledInputs = $.map(this._disabledInputs, function(value) {
                return value === target ? null : value
            }), this._disabledInputs[this._disabledInputs.length] = target)
        },
        _isDisabledDatepicker: function(target) {
            if (!target) return !1;
            for (var i = 0; i < this._disabledInputs.length; i++)
                if (this._disabledInputs[i] === target) return !0;
            return !1
        },
        _getInst: function(target) {
            try {
                return $.data(target, "datepicker")
            } catch (err) {
                throw "Missing instance data for this datepicker"
            }
        },
        _optionDatepicker: function(target, name, value) {
            var settings, date, minDate, maxDate, inst = this._getInst(target);
            return 2 === arguments.length && "string" == typeof name ? "defaults" === name ? $.extend({}, $.datepicker._defaults) : inst ? "all" === name ? $.extend({}, inst.settings) : this._get(inst, name) : null : (settings = name || {}, "string" == typeof name && (settings = {}, settings[name] = value), void(inst && (this._curInst === inst && this._hideDatepicker(), date = this._getDateDatepicker(target, !0), minDate = this._getMinMaxDate(inst, "min"), maxDate = this._getMinMaxDate(inst, "max"), datepicker_extendRemove(inst.settings, settings), null !== minDate && void 0 !== settings.dateFormat && void 0 === settings.minDate && (inst.settings.minDate = this._formatDate(inst, minDate)), null !== maxDate && void 0 !== settings.dateFormat && void 0 === settings.maxDate && (inst.settings.maxDate = this._formatDate(inst, maxDate)), "disabled" in settings && (settings.disabled ? this._disableDatepicker(target) : this._enableDatepicker(target)), this._attachments($(target), inst), this._autoSize(inst), this._setDate(inst, date), this._updateAlternate(inst), this._updateDatepicker(inst))))
        },
        _changeDatepicker: function(target, name, value) {
            this._optionDatepicker(target, name, value)
        },
        _refreshDatepicker: function(target) {
            var inst = this._getInst(target);
            inst && this._updateDatepicker(inst)
        },
        _setDateDatepicker: function(target, date) {
            var inst = this._getInst(target);
            inst && (this._setDate(inst, date), this._updateDatepicker(inst), this._updateAlternate(inst))
        },
        _getDateDatepicker: function(target, noDefault) {
            var inst = this._getInst(target);
            return inst && !inst.inline && this._setDateFromField(inst, noDefault), inst ? this._getDate(inst) : null
        },
        _doKeyDown: function(event) {
            var onSelect, dateStr, sel, inst = $.datepicker._getInst(event.target),
                handled = !0,
                isRTL = inst.dpDiv.is(".ui-datepicker-rtl");
            if (inst._keyEvent = !0, $.datepicker._datepickerShowing) switch (event.keyCode) {
                case 9:
                    $.datepicker._hideDatepicker(), handled = !1;
                    break;
                case 13:
                    return sel = $("td." + $.datepicker._dayOverClass + ":not(." + $.datepicker._currentClass + ")", inst.dpDiv), sel[0] && $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]), onSelect = $.datepicker._get(inst, "onSelect"), onSelect ? (dateStr = $.datepicker._formatDate(inst), onSelect.apply(inst.input ? inst.input[0] : null, [dateStr, inst])) : $.datepicker._hideDatepicker(), !1;
                case 27:
                    $.datepicker._hideDatepicker();
                    break;
                case 33:
                    $.datepicker._adjustDate(event.target, event.ctrlKey ? -$.datepicker._get(inst, "stepBigMonths") : -$.datepicker._get(inst, "stepMonths"), "M");
                    break;
                case 34:
                    $.datepicker._adjustDate(event.target, event.ctrlKey ? +$.datepicker._get(inst, "stepBigMonths") : +$.datepicker._get(inst, "stepMonths"), "M");
                    break;
                case 35:
                    (event.ctrlKey || event.metaKey) && $.datepicker._clearDate(event.target), handled = event.ctrlKey || event.metaKey;
                    break;
                case 36:
                    (event.ctrlKey || event.metaKey) && $.datepicker._gotoToday(event.target), handled = event.ctrlKey || event.metaKey;
                    break;
                case 37:
                    (event.ctrlKey || event.metaKey) && $.datepicker._adjustDate(event.target, isRTL ? 1 : -1, "D"), handled = event.ctrlKey || event.metaKey, event.originalEvent.altKey && $.datepicker._adjustDate(event.target, event.ctrlKey ? -$.datepicker._get(inst, "stepBigMonths") : -$.datepicker._get(inst, "stepMonths"), "M");
                    break;
                case 38:
                    (event.ctrlKey || event.metaKey) && $.datepicker._adjustDate(event.target, -7, "D"), handled = event.ctrlKey || event.metaKey;
                    break;
                case 39:
                    (event.ctrlKey || event.metaKey) && $.datepicker._adjustDate(event.target, isRTL ? -1 : 1, "D"), handled = event.ctrlKey || event.metaKey, event.originalEvent.altKey && $.datepicker._adjustDate(event.target, event.ctrlKey ? +$.datepicker._get(inst, "stepBigMonths") : +$.datepicker._get(inst, "stepMonths"), "M");
                    break;
                case 40:
                    (event.ctrlKey || event.metaKey) && $.datepicker._adjustDate(event.target, 7, "D"), handled = event.ctrlKey || event.metaKey;
                    break;
                default:
                    handled = !1
            } else 36 === event.keyCode && event.ctrlKey ? $.datepicker._showDatepicker(this) : handled = !1;
            handled && (event.preventDefault(), event.stopPropagation())
        },
        _doKeyPress: function(event) {
            var chars, chr, inst = $.datepicker._getInst(event.target);
            return $.datepicker._get(inst, "constrainInput") ? (chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat")), chr = String.fromCharCode(null == event.charCode ? event.keyCode : event.charCode), event.ctrlKey || event.metaKey || " " > chr || !chars || chars.indexOf(chr) > -1) : void 0
        },
        _doKeyUp: function(event) {
            var date, inst = $.datepicker._getInst(event.target);
            if (inst.input.val() !== inst.lastVal) try {
                date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"), inst.input ? inst.input.val() : null, $.datepicker._getFormatConfig(inst)), date && ($.datepicker._setDateFromField(inst), $.datepicker._updateAlternate(inst), $.datepicker._updateDatepicker(inst))
            } catch (err) {}
            return !0
        },
        _showDatepicker: function(input) {
            if (input = input.target || input, "input" !== input.nodeName.toLowerCase() && (input = $("input", input.parentNode)[0]), !$.datepicker._isDisabledDatepicker(input) && $.datepicker._lastInput !== input) {
                var inst, beforeShow, beforeShowSettings, isFixed, offset, showAnim, duration;
                inst = $.datepicker._getInst(input), $.datepicker._curInst && $.datepicker._curInst !== inst && ($.datepicker._curInst.dpDiv.stop(!0, !0), inst && $.datepicker._datepickerShowing && $.datepicker._hideDatepicker($.datepicker._curInst.input[0])), beforeShow = $.datepicker._get(inst, "beforeShow"), beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {}, beforeShowSettings !== !1 && (datepicker_extendRemove(inst.settings, beforeShowSettings), inst.lastVal = null, $.datepicker._lastInput = input, $.datepicker._setDateFromField(inst), $.datepicker._inDialog && (input.value = ""), $.datepicker._pos || ($.datepicker._pos = $.datepicker._findPos(input), $.datepicker._pos[1] += input.offsetHeight), isFixed = !1, $(input).parents().each(function() {
                    return isFixed |= "fixed" === $(this).css("position"), !isFixed
                }), offset = {
                    left: $.datepicker._pos[0],
                    top: $.datepicker._pos[1]
                }, $.datepicker._pos = null, inst.dpDiv.empty(), inst.dpDiv.css({
                    position: "absolute",
                    display: "block",
                    top: "-1000px"
                }), $.datepicker._updateDatepicker(inst), offset = $.datepicker._checkOffset(inst, offset, isFixed), inst.dpDiv.css({
                    position: $.datepicker._inDialog && $.blockUI ? "static" : isFixed ? "fixed" : "absolute",
                    display: "none",
                    left: offset.left + "px",
                    top: offset.top + "px"
                }), inst.inline || (showAnim = $.datepicker._get(inst, "showAnim"), duration = $.datepicker._get(inst, "duration"), inst.dpDiv.css("z-index", datepicker_getZindex($(input)) + 1), $.datepicker._datepickerShowing = !0, $.effects && $.effects.effect[showAnim] ? inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration) : inst.dpDiv[showAnim || "show"](showAnim ? duration : null), $.datepicker._shouldFocusInput(inst) && inst.input.focus(), $.datepicker._curInst = inst))
            }
        },
        _updateDatepicker: function(inst) {
            this.maxRows = 4, datepicker_instActive = inst, inst.dpDiv.empty().append(this._generateHTML(inst)), this._attachHandlers(inst);
            var origyearshtml, numMonths = this._getNumberOfMonths(inst),
                cols = numMonths[1],
                width = 17,
                activeCell = inst.dpDiv.find("." + this._dayOverClass + " a");
            activeCell.length > 0 && datepicker_handleMouseover.apply(activeCell.get(0)), inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""), cols > 1 && inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", width * cols + "em"), inst.dpDiv[(1 !== numMonths[0] || 1 !== numMonths[1] ? "add" : "remove") + "Class"]("ui-datepicker-multi"), inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") + "Class"]("ui-datepicker-rtl"), inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput(inst) && inst.input.focus(), inst.yearshtml && (origyearshtml = inst.yearshtml, setTimeout(function() {
                origyearshtml === inst.yearshtml && inst.yearshtml && inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml), origyearshtml = inst.yearshtml = null
            }, 0))
        },
        _shouldFocusInput: function(inst) {
            return inst.input && inst.input.is(":visible") && !inst.input.is(":disabled") && !inst.input.is(":focus")
        },
        _checkOffset: function(inst, offset, isFixed) {
            var dpWidth = inst.dpDiv.outerWidth(),
                dpHeight = inst.dpDiv.outerHeight(),
                inputWidth = inst.input ? inst.input.outerWidth() : 0,
                inputHeight = inst.input ? inst.input.outerHeight() : 0,
                viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),
                viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
            return offset.left -= this._get(inst, "isRTL") ? dpWidth - inputWidth : 0, offset.left -= isFixed && offset.left === inst.input.offset().left ? $(document).scrollLeft() : 0, offset.top -= isFixed && offset.top === inst.input.offset().top + inputHeight ? $(document).scrollTop() : 0, offset.left -= Math.min(offset.left, offset.left + dpWidth > viewWidth && viewWidth > dpWidth ? Math.abs(offset.left + dpWidth - viewWidth) : 0), offset.top -= Math.min(offset.top, offset.top + dpHeight > viewHeight && viewHeight > dpHeight ? Math.abs(dpHeight + inputHeight) : 0), offset
        },
        _findPos: function(obj) {
            for (var position, inst = this._getInst(obj), isRTL = this._get(inst, "isRTL"); obj && ("hidden" === obj.type || 1 !== obj.nodeType || $.expr.filters.hidden(obj));) obj = obj[isRTL ? "previousSibling" : "nextSibling"];
            return position = $(obj).offset(), [position.left, position.top]
        },
        _hideDatepicker: function(input) {
            var showAnim, duration, postProcess, onClose, inst = this._curInst;
            !inst || input && inst !== $.data(input, "datepicker") || this._datepickerShowing && (showAnim = this._get(inst, "showAnim"), duration = this._get(inst, "duration"), postProcess = function() {
                $.datepicker._tidyDialog(inst)
            }, $.effects && ($.effects.effect[showAnim] || $.effects[showAnim]) ? inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess) : inst.dpDiv["slideDown" === showAnim ? "slideUp" : "fadeIn" === showAnim ? "fadeOut" : "hide"](showAnim ? duration : null, postProcess), showAnim || postProcess(), this._datepickerShowing = !1, onClose = this._get(inst, "onClose"), onClose && onClose.apply(inst.input ? inst.input[0] : null, [inst.input ? inst.input.val() : "", inst]), this._lastInput = null, this._inDialog && (this._dialogInput.css({
                position: "absolute",
                left: "0",
                top: "-100px"
            }), $.blockUI && ($.unblockUI(), $("body").append(this.dpDiv))), this._inDialog = !1)
        },
        _tidyDialog: function(inst) {
            inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")
        },
        _checkExternalClick: function(event) {
            if ($.datepicker._curInst) {
                var $target = $(event.target),
                    inst = $.datepicker._getInst($target[0]);
                ($target[0].id !== $.datepicker._mainDivId && 0 === $target.parents("#" + $.datepicker._mainDivId).length && !$target.hasClass($.datepicker.markerClassName) && !$target.closest("." + $.datepicker._triggerClass).length && $.datepicker._datepickerShowing && (!$.datepicker._inDialog || !$.blockUI) || $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst) && $.datepicker._hideDatepicker()
            }
        },
        _adjustDate: function(id, offset, period) {
            var target = $(id),
                inst = this._getInst(target[0]);
            this._isDisabledDatepicker(target[0]) || (this._adjustInstDate(inst, offset + ("M" === period ? this._get(inst, "showCurrentAtPos") : 0), period), this._updateDatepicker(inst))
        },
        _gotoToday: function(id) {
            var date, target = $(id),
                inst = this._getInst(target[0]);
            this._get(inst, "gotoCurrent") && inst.currentDay ? (inst.selectedDay = inst.currentDay, inst.drawMonth = inst.selectedMonth = inst.currentMonth, inst.drawYear = inst.selectedYear = inst.currentYear) : (date = new Date, inst.selectedDay = date.getDate(), inst.drawMonth = inst.selectedMonth = date.getMonth(), inst.drawYear = inst.selectedYear = date.getFullYear()), this._notifyChange(inst), this._adjustDate(target)
        },
        _selectMonthYear: function(id, select, period) {
            var target = $(id),
                inst = this._getInst(target[0]);
            inst["selected" + ("M" === period ? "Month" : "Year")] = inst["draw" + ("M" === period ? "Month" : "Year")] = parseInt(select.options[select.selectedIndex].value, 10), this._notifyChange(inst), this._adjustDate(target)
        },
        _selectDay: function(id, month, year, td) {
            var inst, target = $(id);
            $(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0]) || (inst = this._getInst(target[0]), inst.selectedDay = inst.currentDay = $("a", td).html(), inst.selectedMonth = inst.currentMonth = month, inst.selectedYear = inst.currentYear = year, this._selectDate(id, this._formatDate(inst, inst.currentDay, inst.currentMonth, inst.currentYear)))
        },
        _clearDate: function(id) {
            var target = $(id);
            this._selectDate(target, "")
        },
        _selectDate: function(id, dateStr) {
            var onSelect, target = $(id),
                inst = this._getInst(target[0]);
            dateStr = null != dateStr ? dateStr : this._formatDate(inst), inst.input && inst.input.val(dateStr), this._updateAlternate(inst), onSelect = this._get(inst, "onSelect"), onSelect ? onSelect.apply(inst.input ? inst.input[0] : null, [dateStr, inst]) : inst.input && inst.input.trigger("change"), inst.inline ? this._updateDatepicker(inst) : (this._hideDatepicker(), this._lastInput = inst.input[0], "object" != typeof inst.input[0] && inst.input.focus(), this._lastInput = null)
        },
        _updateAlternate: function(inst) {
            var altFormat, date, dateStr, altField = this._get(inst, "altField");
            altField && (altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat"), date = this._getDate(inst), dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst)), $(altField).each(function() {
                $(this).val(dateStr)
            }))
        },
        noWeekends: function(date) {
            var day = date.getDay();
            return [day > 0 && 6 > day, ""]
        },
        iso8601Week: function(date) {
            var time, checkDate = new Date(date.getTime());
            return checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)), time = checkDate.getTime(), checkDate.setMonth(0), checkDate.setDate(1), Math.floor(Math.round((time - checkDate) / 864e5) / 7) + 1
        },
        parseDate: function(format, value, settings) {
            if (null == format || null == value) throw "Invalid arguments";
            if (value = "object" == typeof value ? value.toString() : value + "", "" === value) return null;
            var iFormat, dim, extra, date, iValue = 0,
                shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,
                shortYearCutoff = "string" != typeof shortYearCutoffTemp ? shortYearCutoffTemp : (new Date).getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10),
                dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
                dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
                monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
                monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
                year = -1,
                month = -1,
                day = -1,
                doy = -1,
                literal = !1,
                lookAhead = function(match) {
                    var matches = iFormat + 1 < format.length && format.charAt(iFormat + 1) === match;
                    return matches && iFormat++, matches
                }, getNumber = function(match) {
                    var isDoubled = lookAhead(match),
                        size = "@" === match ? 14 : "!" === match ? 20 : "y" === match && isDoubled ? 4 : "o" === match ? 3 : 2,
                        minSize = "y" === match ? size : 1,
                        digits = new RegExp("^\\d{" + minSize + "," + size + "}"),
                        num = value.substring(iValue).match(digits);
                    if (!num) throw "Missing number at position " + iValue;
                    return iValue += num[0].length, parseInt(num[0], 10)
                }, getName = function(match, shortNames, longNames) {
                    var index = -1,
                        names = $.map(lookAhead(match) ? longNames : shortNames, function(v, k) {
                            return [[k, v]]
                        }).sort(function(a, b) {
                            return -(a[1].length - b[1].length)
                        });
                    if ($.each(names, function(i, pair) {
                        var name = pair[1];
                        return value.substr(iValue, name.length).toLowerCase() === name.toLowerCase() ? (index = pair[0], iValue += name.length, !1) : void 0
                    }), -1 !== index) return index + 1;
                    throw "Unknown name at position " + iValue
                }, checkLiteral = function() {
                    if (value.charAt(iValue) !== format.charAt(iFormat)) throw "Unexpected literal at position " + iValue;
                    iValue++
                };
            for (iFormat = 0; iFormat < format.length; iFormat++)
                if (literal) "'" !== format.charAt(iFormat) || lookAhead("'") ? checkLiteral() : literal = !1;
                else switch (format.charAt(iFormat)) {
                    case "d":
                        day = getNumber("d");
                        break;
                    case "D":
                        getName("D", dayNamesShort, dayNames);
                        break;
                    case "o":
                        doy = getNumber("o");
                        break;
                    case "m":
                        month = getNumber("m");
                        break;
                    case "M":
                        month = getName("M", monthNamesShort, monthNames);
                        break;
                    case "y":
                        year = getNumber("y");
                        break;
                    case "@":
                        date = new Date(getNumber("@")), year = date.getFullYear(), month = date.getMonth() + 1, day = date.getDate();
                        break;
                    case "!":
                        date = new Date((getNumber("!") - this._ticksTo1970) / 1e4), year = date.getFullYear(), month = date.getMonth() + 1, day = date.getDate();
                        break;
                    case "'":
                        lookAhead("'") ? checkLiteral() : literal = !0;
                        break;
                    default:
                        checkLiteral()
                }
                if (iValue < value.length && (extra = value.substr(iValue), !/^\s+/.test(extra))) throw "Extra/unparsed characters found in date: " + extra;
            if (-1 === year ? year = (new Date).getFullYear() : 100 > year && (year += (new Date).getFullYear() - (new Date).getFullYear() % 100 + (shortYearCutoff >= year ? 0 : -100)), doy > -1)
                for (month = 1, day = doy;;) {
                    if (dim = this._getDaysInMonth(year, month - 1), dim >= day) break;
                    month++, day -= dim
                }
            if (date = this._daylightSavingAdjust(new Date(year, month - 1, day)), date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) throw "Invalid date";
            return date
        },
        ATOM: "yy-mm-dd",
        COOKIE: "D, dd M yy",
        ISO_8601: "yy-mm-dd",
        RFC_822: "D, d M y",
        RFC_850: "DD, dd-M-y",
        RFC_1036: "D, d M y",
        RFC_1123: "D, d M yy",
        RFC_2822: "D, d M yy",
        RSS: "D, d M y",
        TICKS: "!",
        TIMESTAMP: "@",
        W3C: "yy-mm-dd",
        _ticksTo1970: 24 * (718685 + Math.floor(492.5) - Math.floor(19.7) + Math.floor(4.925)) * 60 * 60 * 1e7,
        formatDate: function(format, date, settings) {
            if (!date) return "";
            var iFormat, dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
                dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
                monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
                monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
                lookAhead = function(match) {
                    var matches = iFormat + 1 < format.length && format.charAt(iFormat + 1) === match;
                    return matches && iFormat++, matches
                }, formatNumber = function(match, value, len) {
                    var num = "" + value;
                    if (lookAhead(match))
                        for (; num.length < len;) num = "0" + num;
                    return num
                }, formatName = function(match, value, shortNames, longNames) {
                    return lookAhead(match) ? longNames[value] : shortNames[value]
                }, output = "",
                literal = !1;
            if (date)
                for (iFormat = 0; iFormat < format.length; iFormat++)
                    if (literal) "'" !== format.charAt(iFormat) || lookAhead("'") ? output += format.charAt(iFormat) : literal = !1;
                    else switch (format.charAt(iFormat)) {
                        case "d":
                            output += formatNumber("d", date.getDate(), 2);
                            break;
                        case "D":
                            output += formatName("D", date.getDay(), dayNamesShort, dayNames);
                            break;
                        case "o":
                            output += formatNumber("o", Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 864e5), 3);
                            break;
                        case "m":
                            output += formatNumber("m", date.getMonth() + 1, 2);
                            break;
                        case "M":
                            output += formatName("M", date.getMonth(), monthNamesShort, monthNames);
                            break;
                        case "y":
                            output += lookAhead("y") ? date.getFullYear() : (date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100;
                            break;
                        case "@":
                            output += date.getTime();
                            break;
                        case "!":
                            output += 1e4 * date.getTime() + this._ticksTo1970;
                            break;
                        case "'":
                            lookAhead("'") ? output += "'" : literal = !0;
                            break;
                        default:
                            output += format.charAt(iFormat)
                    }
                    return output
        },
        _possibleChars: function(format) {
            var iFormat, chars = "",
                literal = !1,
                lookAhead = function(match) {
                    var matches = iFormat + 1 < format.length && format.charAt(iFormat + 1) === match;
                    return matches && iFormat++, matches
                };
            for (iFormat = 0; iFormat < format.length; iFormat++)
                if (literal) "'" !== format.charAt(iFormat) || lookAhead("'") ? chars += format.charAt(iFormat) : literal = !1;
                else switch (format.charAt(iFormat)) {
                    case "d":
                    case "m":
                    case "y":
                    case "@":
                        chars += "0123456789";
                        break;
                    case "D":
                    case "M":
                        return null;
                    case "'":
                        lookAhead("'") ? chars += "'" : literal = !0;
                        break;
                    default:
                        chars += format.charAt(iFormat)
                }
                return chars
        },
        _get: function(inst, name) {
            return void 0 !== inst.settings[name] ? inst.settings[name] : this._defaults[name]
        },
        _setDateFromField: function(inst, noDefault) {
            if (inst.input.val() !== inst.lastVal) {
                var dateFormat = this._get(inst, "dateFormat"),
                    dates = inst.lastVal = inst.input ? inst.input.val() : null,
                    defaultDate = this._getDefaultDate(inst),
                    date = defaultDate,
                    settings = this._getFormatConfig(inst);
                try {
                    date = this.parseDate(dateFormat, dates, settings) || defaultDate
                } catch (event) {
                    dates = noDefault ? "" : dates
                }
                inst.selectedDay = date.getDate(), inst.drawMonth = inst.selectedMonth = date.getMonth(), inst.drawYear = inst.selectedYear = date.getFullYear(), inst.currentDay = dates ? date.getDate() : 0, inst.currentMonth = dates ? date.getMonth() : 0, inst.currentYear = dates ? date.getFullYear() : 0, this._adjustInstDate(inst)
            }
        },
        _getDefaultDate: function(inst) {
            return this._restrictMinMax(inst, this._determineDate(inst, this._get(inst, "defaultDate"), new Date))
        },
        _determineDate: function(inst, date, defaultDate) {
            var offsetNumeric = function(offset) {
                var date = new Date;
                return date.setDate(date.getDate() + offset), date
            }, offsetString = function(offset) {
                    try {
                        return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"), offset, $.datepicker._getFormatConfig(inst))
                    } catch (e) {}
                    for (var date = (offset.toLowerCase().match(/^c/) ? $.datepicker._getDate(inst) : null) || new Date, year = date.getFullYear(), month = date.getMonth(), day = date.getDate(), pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g, matches = pattern.exec(offset); matches;) {
                        switch (matches[2] || "d") {
                            case "d":
                            case "D":
                                day += parseInt(matches[1], 10);
                                break;
                            case "w":
                            case "W":
                                day += 7 * parseInt(matches[1], 10);
                                break;
                            case "m":
                            case "M":
                                month += parseInt(matches[1], 10), day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
                                break;
                            case "y":
                            case "Y":
                                year += parseInt(matches[1], 10), day = Math.min(day, $.datepicker._getDaysInMonth(year, month))
                        }
                        matches = pattern.exec(offset)
                    }
                    return new Date(year, month, day)
                }, newDate = null == date || "" === date ? defaultDate : "string" == typeof date ? offsetString(date) : "number" == typeof date ? isNaN(date) ? defaultDate : offsetNumeric(date) : new Date(date.getTime());
            return newDate = newDate && "Invalid Date" === newDate.toString() ? defaultDate : newDate, newDate && (newDate.setHours(0), newDate.setMinutes(0), newDate.setSeconds(0), newDate.setMilliseconds(0)), this._daylightSavingAdjust(newDate)
        },
        _daylightSavingAdjust: function(date) {
            return date ? (date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0), date) : null
        },
        _setDate: function(inst, date, noChange) {
            var clear = !date,
                origMonth = inst.selectedMonth,
                origYear = inst.selectedYear,
                newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date));
            inst.selectedDay = inst.currentDay = newDate.getDate(), inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth(), inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear(), origMonth === inst.selectedMonth && origYear === inst.selectedYear || noChange || this._notifyChange(inst), this._adjustInstDate(inst), inst.input && inst.input.val(clear ? "" : this._formatDate(inst))
        },
        _getDate: function(inst) {
            var startDate = !inst.currentYear || inst.input && "" === inst.input.val() ? null : this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay));
            return startDate
        },
        _attachHandlers: function(inst) {
            var stepMonths = this._get(inst, "stepMonths"),
                id = "#" + inst.id.replace(/\\\\/g, "\\");
            inst.dpDiv.find("[data-handler]").map(function() {
                var handler = {
                    prev: function() {
                        $.datepicker._adjustDate(id, -stepMonths, "M")
                    },
                    next: function() {
                        $.datepicker._adjustDate(id, +stepMonths, "M")
                    },
                    hide: function() {
                        $.datepicker._hideDatepicker()
                    },
                    today: function() {
                        $.datepicker._gotoToday(id)
                    },
                    selectDay: function() {
                        return $.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this), !1
                    },
                    selectMonth: function() {
                        return $.datepicker._selectMonthYear(id, this, "M"), !1
                    },
                    selectYear: function() {
                        return $.datepicker._selectMonthYear(id, this, "Y"), !1
                    }
                };
                $(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")])
            })
        },
        _generateHTML: function(inst) {
            var maxDraw, prevText, prev, nextText, next, currentText, gotoDate, controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin, monthNames, monthNamesShort, beforeShowDay, showOtherMonths, selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate, cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows, printDate, dRow, tbody, daySettings, otherMonth, unselectable, tempDate = new Date,
                today = this._daylightSavingAdjust(new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())),
                isRTL = this._get(inst, "isRTL"),
                showButtonPanel = this._get(inst, "showButtonPanel"),
                hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"),
                navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"),
                numMonths = this._getNumberOfMonths(inst),
                showCurrentAtPos = this._get(inst, "showCurrentAtPos"),
                stepMonths = this._get(inst, "stepMonths"),
                isMultiMonth = 1 !== numMonths[0] || 1 !== numMonths[1],
                currentDate = this._daylightSavingAdjust(inst.currentDay ? new Date(inst.currentYear, inst.currentMonth, inst.currentDay) : new Date(9999, 9, 9)),
                minDate = this._getMinMaxDate(inst, "min"),
                maxDate = this._getMinMaxDate(inst, "max"),
                drawMonth = inst.drawMonth - showCurrentAtPos,
                drawYear = inst.drawYear;
            if (0 > drawMonth && (drawMonth += 12, drawYear--), maxDate)
                for (maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(), maxDate.getMonth() - numMonths[0] * numMonths[1] + 1, maxDate.getDate())), maxDraw = minDate && minDate > maxDraw ? minDate : maxDraw; this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw;) drawMonth--, 0 > drawMonth && (drawMonth = 11, drawYear--);
            for (inst.drawMonth = drawMonth, inst.drawYear = drawYear, prevText = this._get(inst, "prevText"), prevText = navigationAsDateFormat ? this.formatDate(prevText, this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), this._getFormatConfig(inst)) : prevText, prev = this._canAdjustMonth(inst, -1, drawYear, drawMonth) ? "<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + (isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" : hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + (isRTL ? "e" : "w") + "'>" + prevText + "</span></a>", nextText = this._get(inst, "nextText"), nextText = navigationAsDateFormat ? this.formatDate(nextText, this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), this._getFormatConfig(inst)) : nextText, next = this._canAdjustMonth(inst, 1, drawYear, drawMonth) ? "<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + (isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" : hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + (isRTL ? "w" : "e") + "'>" + nextText + "</span></a>", currentText = this._get(inst, "currentText"), gotoDate = this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today, currentText = navigationAsDateFormat ? this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)) : currentText, controls = inst.inline ? "" : "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" + this._get(inst, "closeText") + "</button>", buttonPanel = showButtonPanel ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") + (this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : "", firstDay = parseInt(this._get(inst, "firstDay"), 10), firstDay = isNaN(firstDay) ? 0 : firstDay, showWeek = this._get(inst, "showWeek"), dayNames = this._get(inst, "dayNames"), dayNamesMin = this._get(inst, "dayNamesMin"), monthNames = this._get(inst, "monthNames"), monthNamesShort = this._get(inst, "monthNamesShort"), beforeShowDay = this._get(inst, "beforeShowDay"), showOtherMonths = this._get(inst, "showOtherMonths"), selectOtherMonths = this._get(inst, "selectOtherMonths"), defaultDate = this._getDefaultDate(inst), html = "", row = 0; row < numMonths[0]; row++) {
                for (group = "", this.maxRows = 4, col = 0; col < numMonths[1]; col++) {
                    if (selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay)), cornerClass = " ui-corner-all", calender = "", isMultiMonth) {
                        if (calender += "<div class='ui-datepicker-group", numMonths[1] > 1) switch (col) {
                            case 0:
                                calender += " ui-datepicker-group-first", cornerClass = " ui-corner-" + (isRTL ? "right" : "left");
                                break;
                            case numMonths[1] - 1:
                                calender += " ui-datepicker-group-last", cornerClass = " ui-corner-" + (isRTL ? "left" : "right");
                                break;
                            default:
                                calender += " ui-datepicker-group-middle", cornerClass = ""
                        }
                        calender += "'>"
                    }
                    for (calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" + (/all|left/.test(cornerClass) && 0 === row ? isRTL ? next : prev : "") + (/all|right/.test(cornerClass) && 0 === row ? isRTL ? prev : next : "") + this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate, row > 0 || col > 0, monthNames, monthNamesShort) + "</div><table class='ui-datepicker-calendar'><thead><tr>", thead = showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "", dow = 0; 7 > dow; dow++) day = (dow + firstDay) % 7, thead += "<th scope='col'" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + "><span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
                    for (calender += thead + "</tr></thead><tbody>", daysInMonth = this._getDaysInMonth(drawYear, drawMonth), drawYear === inst.selectedYear && drawMonth === inst.selectedMonth && (inst.selectedDay = Math.min(inst.selectedDay, daysInMonth)), leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7, curRows = Math.ceil((leadDays + daysInMonth) / 7), numRows = isMultiMonth && this.maxRows > curRows ? this.maxRows : curRows, this.maxRows = numRows, printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays)), dRow = 0; numRows > dRow; dRow++) {
                        for (calender += "<tr>", tbody = showWeek ? "<td class='ui-datepicker-week-col'>" + this._get(inst, "calculateWeek")(printDate) + "</td>" : "", dow = 0; 7 > dow; dow++) daySettings = beforeShowDay ? beforeShowDay.apply(inst.input ? inst.input[0] : null, [printDate]) : [!0, ""], otherMonth = printDate.getMonth() !== drawMonth, unselectable = otherMonth && !selectOtherMonths || !daySettings[0] || minDate && minDate > printDate || maxDate && printDate > maxDate, tbody += "<td class='" + ((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + (otherMonth ? " ui-datepicker-other-month" : "") + (printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent || defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime() ? " " + this._dayOverClass : "") + (unselectable ? " " + this._unselectableClass + " ui-state-disabled" : "") + (otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + (printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + (printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + (otherMonth && !showOtherMonths || !daySettings[2] ? "" : " title='" + daySettings[2].replace(/'/g, "&#39;") + "'") + (unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + (otherMonth && !showOtherMonths ? "&#xa0;" : unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" + (printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") + (printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + (otherMonth ? " ui-priority-secondary" : "") + "' href='#'>" + printDate.getDate() + "</a>") + "</td>", printDate.setDate(printDate.getDate() + 1), printDate = this._daylightSavingAdjust(printDate);
                        calender += tbody + "</tr>"
                    }
                    drawMonth++, drawMonth > 11 && (drawMonth = 0, drawYear++), calender += "</tbody></table>" + (isMultiMonth ? "</div>" + (numMonths[0] > 0 && col === numMonths[1] - 1 ? "<div class='ui-datepicker-row-break'></div>" : "") : ""), group += calender
                }
                html += group
            }
            return html += buttonPanel, inst._keyEvent = !1, html
        },
        _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, secondary, monthNames, monthNamesShort) {
            var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear, changeMonth = this._get(inst, "changeMonth"),
                changeYear = this._get(inst, "changeYear"),
                showMonthAfterYear = this._get(inst, "showMonthAfterYear"),
                html = "<div class='ui-datepicker-title'>",
                monthHtml = "";
            if (secondary || !changeMonth) monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>";
            else {
                for (inMinYear = minDate && minDate.getFullYear() === drawYear, inMaxYear = maxDate && maxDate.getFullYear() === drawYear, monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>", month = 0; 12 > month; month++)(!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth()) && (monthHtml += "<option value='" + month + "'" + (month === drawMonth ? " selected='selected'" : "") + ">" + monthNamesShort[month] + "</option>");
                monthHtml += "</select>"
            } if (showMonthAfterYear || (html += monthHtml + (!secondary && changeMonth && changeYear ? "" : "&#xa0;")), !inst.yearshtml)
                if (inst.yearshtml = "", secondary || !changeYear) html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
                else {
                    for (years = this._get(inst, "yearRange").split(":"), thisYear = (new Date).getFullYear(), determineYear = function(value) {
                        var year = value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) : value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) : parseInt(value, 10);
                        return isNaN(year) ? thisYear : year
                    }, year = determineYear(years[0]), endYear = Math.max(year, determineYear(years[1] || "")), year = minDate ? Math.max(year, minDate.getFullYear()) : year, endYear = maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear, inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>"; endYear >= year; year++) inst.yearshtml += "<option value='" + year + "'" + (year === drawYear ? " selected='selected'" : "") + ">" + year + "</option>";
                    inst.yearshtml += "</select>", html += inst.yearshtml, inst.yearshtml = null
                }
            return html += this._get(inst, "yearSuffix"), showMonthAfterYear && (html += (!secondary && changeMonth && changeYear ? "" : "&#xa0;") + monthHtml), html += "</div>"
        },
        _adjustInstDate: function(inst, offset, period) {
            var year = inst.drawYear + ("Y" === period ? offset : 0),
                month = inst.drawMonth + ("M" === period ? offset : 0),
                day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + ("D" === period ? offset : 0),
                date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));
            inst.selectedDay = date.getDate(), inst.drawMonth = inst.selectedMonth = date.getMonth(), inst.drawYear = inst.selectedYear = date.getFullYear(), ("M" === period || "Y" === period) && this._notifyChange(inst)
        },
        _restrictMinMax: function(inst, date) {
            var minDate = this._getMinMaxDate(inst, "min"),
                maxDate = this._getMinMaxDate(inst, "max"),
                newDate = minDate && minDate > date ? minDate : date;
            return maxDate && newDate > maxDate ? maxDate : newDate
        },
        _notifyChange: function(inst) {
            var onChange = this._get(inst, "onChangeMonthYear");
            onChange && onChange.apply(inst.input ? inst.input[0] : null, [inst.selectedYear, inst.selectedMonth + 1, inst])
        },
        _getNumberOfMonths: function(inst) {
            var numMonths = this._get(inst, "numberOfMonths");
            return null == numMonths ? [1, 1] : "number" == typeof numMonths ? [1, numMonths] : numMonths
        },
        _getMinMaxDate: function(inst, minMax) {
            return this._determineDate(inst, this._get(inst, minMax + "Date"), null)
        },
        _getDaysInMonth: function(year, month) {
            return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate()
        },
        _getFirstDayOfMonth: function(year, month) {
            return new Date(year, month, 1).getDay()
        },
        _canAdjustMonth: function(inst, offset, curYear, curMonth) {
            var numMonths = this._getNumberOfMonths(inst),
                date = this._daylightSavingAdjust(new Date(curYear, curMonth + (0 > offset ? offset : numMonths[0] * numMonths[1]), 1));
            return 0 > offset && date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())), this._isInRange(inst, date)
        },
        _isInRange: function(inst, date) {
            var yearSplit, currentYear, minDate = this._getMinMaxDate(inst, "min"),
                maxDate = this._getMinMaxDate(inst, "max"),
                minYear = null,
                maxYear = null,
                years = this._get(inst, "yearRange");
            return years && (yearSplit = years.split(":"), currentYear = (new Date).getFullYear(), minYear = parseInt(yearSplit[0], 10), maxYear = parseInt(yearSplit[1], 10), yearSplit[0].match(/[+\-].*/) && (minYear += currentYear), yearSplit[1].match(/[+\-].*/) && (maxYear += currentYear)), (!minDate || date.getTime() >= minDate.getTime()) && (!maxDate || date.getTime() <= maxDate.getTime()) && (!minYear || date.getFullYear() >= minYear) && (!maxYear || date.getFullYear() <= maxYear)
        },
        _getFormatConfig: function(inst) {
            var shortYearCutoff = this._get(inst, "shortYearCutoff");
            return shortYearCutoff = "string" != typeof shortYearCutoff ? shortYearCutoff : (new Date).getFullYear() % 100 + parseInt(shortYearCutoff, 10), {
                shortYearCutoff: shortYearCutoff,
                dayNamesShort: this._get(inst, "dayNamesShort"),
                dayNames: this._get(inst, "dayNames"),
                monthNamesShort: this._get(inst, "monthNamesShort"),
                monthNames: this._get(inst, "monthNames")
            }
        },
        _formatDate: function(inst, day, month, year) {
            day || (inst.currentDay = inst.selectedDay, inst.currentMonth = inst.selectedMonth, inst.currentYear = inst.selectedYear);
            var date = day ? "object" == typeof day ? day : this._daylightSavingAdjust(new Date(year, month, day)) : this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay));
            return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst))
        }
    }), $.fn.datepicker = function(options) {
        if (!this.length) return this;
        $.datepicker.initialized || ($(document).mousedown($.datepicker._checkExternalClick), $.datepicker.initialized = !0), 0 === $("#" + $.datepicker._mainDivId).length && $("body").append($.datepicker.dpDiv);
        var otherArgs = Array.prototype.slice.call(arguments, 1);
        return "string" != typeof options || "isDisabled" !== options && "getDate" !== options && "widget" !== options ? "option" === options && 2 === arguments.length && "string" == typeof arguments[1] ? $.datepicker["_" + options + "Datepicker"].apply($.datepicker, [this[0]].concat(otherArgs)) : this.each(function() {
            "string" == typeof options ? $.datepicker["_" + options + "Datepicker"].apply($.datepicker, [this].concat(otherArgs)) : $.datepicker._attachDatepicker(this, options)
        }) : $.datepicker["_" + options + "Datepicker"].apply($.datepicker, [this[0]].concat(otherArgs))
    }, $.datepicker = new Datepicker, $.datepicker.initialized = !1, $.datepicker.uuid = (new Date).getTime(), $.datepicker.version = "1.11.1";
    $.datepicker;
    $.widget("ui.draggable", $.ui.mouse, {
        version: "1.11.1",
        widgetEventPrefix: "drag",
        options: {
            addClasses: !0,
            appendTo: "parent",
            axis: !1,
            connectToSortable: !1,
            containment: !1,
            cursor: "auto",
            cursorAt: !1,
            grid: !1,
            handle: !1,
            helper: "original",
            iframeFix: !1,
            opacity: !1,
            refreshPositions: !1,
            revert: !1,
            revertDuration: 500,
            scope: "default",
            scroll: !0,
            scrollSensitivity: 20,
            scrollSpeed: 20,
            snap: !1,
            snapMode: "both",
            snapTolerance: 20,
            stack: !1,
            zIndex: !1,
            drag: null,
            start: null,
            stop: null
        },
        _create: function() {
            "original" !== this.options.helper || /^(?:r|a|f)/.test(this.element.css("position")) || (this.element[0].style.position = "relative"), this.options.addClasses && this.element.addClass("ui-draggable"), this.options.disabled && this.element.addClass("ui-draggable-disabled"), this._setHandleClassName(), this._mouseInit()
        },
        _setOption: function(key, value) {
            this._super(key, value), "handle" === key && (this._removeHandleClassName(), this._setHandleClassName())
        },
        _destroy: function() {
            return (this.helper || this.element).is(".ui-draggable-dragging") ? void(this.destroyOnClear = !0) : (this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"), this._removeHandleClassName(), void this._mouseDestroy())
        },
        _mouseCapture: function(event) {
            var document = this.document[0],
                o = this.options;
            try {
                document.activeElement && "body" !== document.activeElement.nodeName.toLowerCase() && $(document.activeElement).blur()
            } catch (error) {}
            return this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0 ? !1 : (this.handle = this._getHandle(event), this.handle ? ($(o.iframeFix === !0 ? "iframe" : o.iframeFix).each(function() {
                $("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>").css({
                    width: this.offsetWidth + "px",
                    height: this.offsetHeight + "px",
                    position: "absolute",
                    opacity: "0.001",
                    zIndex: 1e3
                }).css($(this).offset()).appendTo("body")
            }), !0) : !1)
        },
        _mouseStart: function(event) {
            var o = this.options;
            return this.helper = this._createHelper(event), this.helper.addClass("ui-draggable-dragging"), this._cacheHelperProportions(), $.ui.ddmanager && ($.ui.ddmanager.current = this), this._cacheMargins(), this.cssPosition = this.helper.css("position"), this.scrollParent = this.helper.scrollParent(!0), this.offsetParent = this.helper.offsetParent(), this.offsetParentCssPosition = this.offsetParent.css("position"), this.offset = this.positionAbs = this.element.offset(), this.offset = {
                top: this.offset.top - this.margins.top,
                left: this.offset.left - this.margins.left
            }, this.offset.scroll = !1, $.extend(this.offset, {
                click: {
                    left: event.pageX - this.offset.left,
                    top: event.pageY - this.offset.top
                },
                parent: this._getParentOffset(),
                relative: this._getRelativeOffset()
            }), this.originalPosition = this.position = this._generatePosition(event, !1), this.originalPageX = event.pageX, this.originalPageY = event.pageY, o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt), this._setContainment(), this._trigger("start", event) === !1 ? (this._clear(), !1) : (this._cacheHelperProportions(), $.ui.ddmanager && !o.dropBehaviour && $.ui.ddmanager.prepareOffsets(this, event), this._mouseDrag(event, !0), $.ui.ddmanager && $.ui.ddmanager.dragStart(this, event), !0)
        },
        _mouseDrag: function(event, noPropagation) {
            if ("fixed" === this.offsetParentCssPosition && (this.offset.parent = this._getParentOffset()), this.position = this._generatePosition(event, !0), this.positionAbs = this._convertPositionTo("absolute"), !noPropagation) {
                var ui = this._uiHash();
                if (this._trigger("drag", event, ui) === !1) return this._mouseUp({}), !1;
                this.position = ui.position
            }
            return this.helper[0].style.left = this.position.left + "px", this.helper[0].style.top = this.position.top + "px", $.ui.ddmanager && $.ui.ddmanager.drag(this, event), !1
        },
        _mouseStop: function(event) {
            var that = this,
                dropped = !1;
            return $.ui.ddmanager && !this.options.dropBehaviour && (dropped = $.ui.ddmanager.drop(this, event)), this.dropped && (dropped = this.dropped, this.dropped = !1), "invalid" === this.options.revert && !dropped || "valid" === this.options.revert && dropped || this.options.revert === !0 || $.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped) ? $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
                that._trigger("stop", event) !== !1 && that._clear()
            }) : this._trigger("stop", event) !== !1 && this._clear(), !1
        },
        _mouseUp: function(event) {
            return $("div.ui-draggable-iframeFix").each(function() {
                this.parentNode.removeChild(this)
            }), $.ui.ddmanager && $.ui.ddmanager.dragStop(this, event), this.element.focus(), $.ui.mouse.prototype._mouseUp.call(this, event)
        },
        cancel: function() {
            return this.helper.is(".ui-draggable-dragging") ? this._mouseUp({}) : this._clear(), this
        },
        _getHandle: function(event) {
            return this.options.handle ? !! $(event.target).closest(this.element.find(this.options.handle)).length : !0
        },
        _setHandleClassName: function() {
            this.handleElement = this.options.handle ? this.element.find(this.options.handle) : this.element, this.handleElement.addClass("ui-draggable-handle")
        },
        _removeHandleClassName: function() {
            this.handleElement.removeClass("ui-draggable-handle")
        },
        _createHelper: function(event) {
            var o = this.options,
                helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : "clone" === o.helper ? this.element.clone().removeAttr("id") : this.element;
            return helper.parents("body").length || helper.appendTo("parent" === o.appendTo ? this.element[0].parentNode : o.appendTo), helper[0] === this.element[0] || /(fixed|absolute)/.test(helper.css("position")) || helper.css("position", "absolute"), helper
        },
        _adjustOffsetFromHelper: function(obj) {
            "string" == typeof obj && (obj = obj.split(" ")), $.isArray(obj) && (obj = {
                left: +obj[0],
                top: +obj[1] || 0
            }), "left" in obj && (this.offset.click.left = obj.left + this.margins.left), "right" in obj && (this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left), "top" in obj && (this.offset.click.top = obj.top + this.margins.top), "bottom" in obj && (this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top)
        },
        _isRootNode: function(element) {
            return /(html|body)/i.test(element.tagName) || element === this.document[0]
        },
        _getParentOffset: function() {
            var po = this.offsetParent.offset(),
                document = this.document[0];
            return "absolute" === this.cssPosition && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0]) && (po.left += this.scrollParent.scrollLeft(), po.top += this.scrollParent.scrollTop()), this._isRootNode(this.offsetParent[0]) && (po = {
                top: 0,
                left: 0
            }), {
                top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
                left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
            }
        },
        _getRelativeOffset: function() {
            if ("relative" !== this.cssPosition) return {
                top: 0,
                left: 0
            };
            var p = this.element.position(),
                scrollIsRootNode = this._isRootNode(this.scrollParent[0]);
            return {
                top: p.top - (parseInt(this.helper.css("top"), 10) || 0) + (scrollIsRootNode ? 0 : this.scrollParent.scrollTop()),
                left: p.left - (parseInt(this.helper.css("left"), 10) || 0) + (scrollIsRootNode ? 0 : this.scrollParent.scrollLeft())
            }
        },
        _cacheMargins: function() {
            this.margins = {
                left: parseInt(this.element.css("marginLeft"), 10) || 0,
                top: parseInt(this.element.css("marginTop"), 10) || 0,
                right: parseInt(this.element.css("marginRight"), 10) || 0,
                bottom: parseInt(this.element.css("marginBottom"), 10) || 0
            }
        },
        _cacheHelperProportions: function() {
            this.helperProportions = {
                width: this.helper.outerWidth(),
                height: this.helper.outerHeight()
            }
        },
        _setContainment: function() {
            var over, c, ce, o = this.options,
                document = this.document[0];
            return this.relativeContainer = null, o.containment ? "window" === o.containment ? void(this.containment = [$(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left, $(window).scrollTop() - this.offset.relative.top - this.offset.parent.top, $(window).scrollLeft() + $(window).width() - this.helperProportions.width - this.margins.left, $(window).scrollTop() + ($(window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top]) : "document" === o.containment ? void(this.containment = [0, 0, $(document).width() - this.helperProportions.width - this.margins.left, ($(document).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top]) : o.containment.constructor === Array ? void(this.containment = o.containment) : ("parent" === o.containment && (o.containment = this.helper[0].parentNode), c = $(o.containment), ce = c[0], void(ce && (over = "hidden" !== c.css("overflow"), this.containment = [(parseInt(c.css("borderLeftWidth"), 10) || 0) + (parseInt(c.css("paddingLeft"), 10) || 0), (parseInt(c.css("borderTopWidth"), 10) || 0) + (parseInt(c.css("paddingTop"), 10) || 0), (over ? Math.max(ce.scrollWidth, ce.offsetWidth) : ce.offsetWidth) - (parseInt(c.css("borderRightWidth"), 10) || 0) - (parseInt(c.css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right, (over ? Math.max(ce.scrollHeight, ce.offsetHeight) : ce.offsetHeight) - (parseInt(c.css("borderBottomWidth"), 10) || 0) - (parseInt(c.css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top - this.margins.bottom], this.relativeContainer = c))) : void(this.containment = null)
        },
        _convertPositionTo: function(d, pos) {
            pos || (pos = this.position);
            var mod = "absolute" === d ? 1 : -1,
                scrollIsRootNode = this._isRootNode(this.scrollParent[0]);
            return {
                top: pos.top + this.offset.relative.top * mod + this.offset.parent.top * mod - ("fixed" === this.cssPosition ? -this.offset.scroll.top : scrollIsRootNode ? 0 : this.offset.scroll.top) * mod,
                left: pos.left + this.offset.relative.left * mod + this.offset.parent.left * mod - ("fixed" === this.cssPosition ? -this.offset.scroll.left : scrollIsRootNode ? 0 : this.offset.scroll.left) * mod
            }
        },
        _generatePosition: function(event, constrainPosition) {
            var containment, co, top, left, o = this.options,
                scrollIsRootNode = this._isRootNode(this.scrollParent[0]),
                pageX = event.pageX,
                pageY = event.pageY;
            return scrollIsRootNode && this.offset.scroll || (this.offset.scroll = {
                top: this.scrollParent.scrollTop(),
                left: this.scrollParent.scrollLeft()
            }), constrainPosition && (this.containment && (this.relativeContainer ? (co = this.relativeContainer.offset(), containment = [this.containment[0] + co.left, this.containment[1] + co.top, this.containment[2] + co.left, this.containment[3] + co.top]) : containment = this.containment, event.pageX - this.offset.click.left < containment[0] && (pageX = containment[0] + this.offset.click.left), event.pageY - this.offset.click.top < containment[1] && (pageY = containment[1] + this.offset.click.top), event.pageX - this.offset.click.left > containment[2] && (pageX = containment[2] + this.offset.click.left), event.pageY - this.offset.click.top > containment[3] && (pageY = containment[3] + this.offset.click.top)), o.grid && (top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY, pageY = containment ? top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3] ? top : top - this.offset.click.top >= containment[1] ? top - o.grid[1] : top + o.grid[1] : top, left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX, pageX = containment ? left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2] ? left : left - this.offset.click.left >= containment[0] ? left - o.grid[0] : left + o.grid[0] : left), "y" === o.axis && (pageX = this.originalPageX), "x" === o.axis && (pageY = this.originalPageY)), {
                top: pageY - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + ("fixed" === this.cssPosition ? -this.offset.scroll.top : scrollIsRootNode ? 0 : this.offset.scroll.top),
                left: pageX - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + ("fixed" === this.cssPosition ? -this.offset.scroll.left : scrollIsRootNode ? 0 : this.offset.scroll.left)
            }
        },
        _clear: function() {
            this.helper.removeClass("ui-draggable-dragging"), this.helper[0] === this.element[0] || this.cancelHelperRemoval || this.helper.remove(), this.helper = null, this.cancelHelperRemoval = !1, this.destroyOnClear && this.destroy()
        },
        _trigger: function(type, event, ui) {
            return ui = ui || this._uiHash(), $.ui.plugin.call(this, type, [event, ui, this], !0), "drag" === type && (this.positionAbs = this._convertPositionTo("absolute")), $.Widget.prototype._trigger.call(this, type, event, ui)
        },
        plugins: {},
        _uiHash: function() {
            return {
                helper: this.helper,
                position: this.position,
                originalPosition: this.originalPosition,
                offset: this.positionAbs
            }
        }
    }), $.ui.plugin.add("draggable", "connectToSortable", {
        start: function(event, ui, inst) {
            var o = inst.options,
                uiSortable = $.extend({}, ui, {
                    item: inst.element
                });
            inst.sortables = [], $(o.connectToSortable).each(function() {
                var sortable = $(this).sortable("instance");
                sortable && !sortable.options.disabled && (inst.sortables.push({
                    instance: sortable,
                    shouldRevert: sortable.options.revert
                }), sortable.refreshPositions(), sortable._trigger("activate", event, uiSortable))
            })
        },
        stop: function(event, ui, inst) {
            var uiSortable = $.extend({}, ui, {
                item: inst.element
            });
            $.each(inst.sortables, function() {
                this.instance.isOver ? (this.instance.isOver = 0, inst.cancelHelperRemoval = !0, this.instance.cancelHelperRemoval = !1, this.shouldRevert && (this.instance.options.revert = this.shouldRevert), this.instance._mouseStop(event), this.instance.options.helper = this.instance.options._helper, "original" === inst.options.helper && this.instance.currentItem.css({
                    top: "auto",
                    left: "auto"
                })) : (this.instance.cancelHelperRemoval = !1, this.instance._trigger("deactivate", event, uiSortable))
            })
        },
        drag: function(event, ui, inst) {
            var that = this;
            $.each(inst.sortables, function() {
                var innermostIntersecting = !1,
                    thisSortable = this;
                this.instance.positionAbs = inst.positionAbs, this.instance.helperProportions = inst.helperProportions, this.instance.offset.click = inst.offset.click, this.instance._intersectsWith(this.instance.containerCache) && (innermostIntersecting = !0, $.each(inst.sortables, function() {
                    return this.instance.positionAbs = inst.positionAbs, this.instance.helperProportions = inst.helperProportions, this.instance.offset.click = inst.offset.click, this !== thisSortable && this.instance._intersectsWith(this.instance.containerCache) && $.contains(thisSortable.instance.element[0], this.instance.element[0]) && (innermostIntersecting = !1), innermostIntersecting
                })), innermostIntersecting ? (this.instance.isOver || (this.instance.isOver = 1, this.instance.currentItem = $(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", !0), this.instance.options._helper = this.instance.options.helper, this.instance.options.helper = function() {
                    return ui.helper[0]
                }, event.target = this.instance.currentItem[0], this.instance._mouseCapture(event, !0), this.instance._mouseStart(event, !0, !0), this.instance.offset.click.top = inst.offset.click.top, this.instance.offset.click.left = inst.offset.click.left, this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left, this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top, inst._trigger("toSortable", event), inst.dropped = this.instance.element, inst.currentItem = inst.element, this.instance.fromOutside = inst), this.instance.currentItem && this.instance._mouseDrag(event)) : this.instance.isOver && (this.instance.isOver = 0, this.instance.cancelHelperRemoval = !0, this.instance.options.revert = !1, this.instance._trigger("out", event, this.instance._uiHash(this.instance)), this.instance._mouseStop(event, !0), this.instance.options.helper = this.instance.options._helper, this.instance.currentItem.remove(), this.instance.placeholder && this.instance.placeholder.remove(), inst._trigger("fromSortable", event), inst.dropped = !1)
            })
        }
    }), $.ui.plugin.add("draggable", "cursor", {
        start: function(event, ui, instance) {
            var t = $("body"),
                o = instance.options;
            t.css("cursor") && (o._cursor = t.css("cursor")), t.css("cursor", o.cursor)
        },
        stop: function(event, ui, instance) {
            var o = instance.options;
            o._cursor && $("body").css("cursor", o._cursor)
        }
    }), $.ui.plugin.add("draggable", "opacity", {
        start: function(event, ui, instance) {
            var t = $(ui.helper),
                o = instance.options;
            t.css("opacity") && (o._opacity = t.css("opacity")), t.css("opacity", o.opacity)
        },
        stop: function(event, ui, instance) {
            var o = instance.options;
            o._opacity && $(ui.helper).css("opacity", o._opacity)
        }
    }), $.ui.plugin.add("draggable", "scroll", {
        start: function(event, ui, i) {
            i.scrollParentNotHidden || (i.scrollParentNotHidden = i.helper.scrollParent(!1)), i.scrollParentNotHidden[0] !== i.document[0] && "HTML" !== i.scrollParentNotHidden[0].tagName && (i.overflowOffset = i.scrollParentNotHidden.offset())
        },
        drag: function(event, ui, i) {
            var o = i.options,
                scrolled = !1,
                scrollParent = i.scrollParentNotHidden[0],
                document = i.document[0];
            scrollParent !== document && "HTML" !== scrollParent.tagName ? (o.axis && "x" === o.axis || (i.overflowOffset.top + scrollParent.offsetHeight - event.pageY < o.scrollSensitivity ? scrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed : event.pageY - i.overflowOffset.top < o.scrollSensitivity && (scrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed)), o.axis && "y" === o.axis || (i.overflowOffset.left + scrollParent.offsetWidth - event.pageX < o.scrollSensitivity ? scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed : event.pageX - i.overflowOffset.left < o.scrollSensitivity && (scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed))) : (o.axis && "x" === o.axis || (event.pageY - $(document).scrollTop() < o.scrollSensitivity ? scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed) : $(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity && (scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed))), o.axis && "y" === o.axis || (event.pageX - $(document).scrollLeft() < o.scrollSensitivity ? scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed) : $(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity && (scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed)))), scrolled !== !1 && $.ui.ddmanager && !o.dropBehaviour && $.ui.ddmanager.prepareOffsets(i, event)
        }
    }), $.ui.plugin.add("draggable", "snap", {
        start: function(event, ui, i) {
            var o = i.options;
            i.snapElements = [], $(o.snap.constructor !== String ? o.snap.items || ":data(ui-draggable)" : o.snap).each(function() {
                var $t = $(this),
                    $o = $t.offset();
                this !== i.element[0] && i.snapElements.push({
                    item: this,
                    width: $t.outerWidth(),
                    height: $t.outerHeight(),
                    top: $o.top,
                    left: $o.left
                })
            })
        },
        drag: function(event, ui, inst) {
            var ts, bs, ls, rs, l, r, t, b, i, first, o = inst.options,
                d = o.snapTolerance,
                x1 = ui.offset.left,
                x2 = x1 + inst.helperProportions.width,
                y1 = ui.offset.top,
                y2 = y1 + inst.helperProportions.height;
            for (i = inst.snapElements.length - 1; i >= 0; i--) l = inst.snapElements[i].left, r = l + inst.snapElements[i].width, t = inst.snapElements[i].top, b = t + inst.snapElements[i].height, l - d > x2 || x1 > r + d || t - d > y2 || y1 > b + d || !$.contains(inst.snapElements[i].item.ownerDocument, inst.snapElements[i].item) ? (inst.snapElements[i].snapping && inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), {
                snapItem: inst.snapElements[i].item
            })), inst.snapElements[i].snapping = !1) : ("inner" !== o.snapMode && (ts = Math.abs(t - y2) <= d, bs = Math.abs(b - y1) <= d, ls = Math.abs(l - x2) <= d, rs = Math.abs(r - x1) <= d, ts && (ui.position.top = inst._convertPositionTo("relative", {
                top: t - inst.helperProportions.height,
                left: 0
            }).top - inst.margins.top), bs && (ui.position.top = inst._convertPositionTo("relative", {
                top: b,
                left: 0
            }).top - inst.margins.top), ls && (ui.position.left = inst._convertPositionTo("relative", {
                top: 0,
                left: l - inst.helperProportions.width
            }).left - inst.margins.left), rs && (ui.position.left = inst._convertPositionTo("relative", {
                top: 0,
                left: r
            }).left - inst.margins.left)), first = ts || bs || ls || rs, "outer" !== o.snapMode && (ts = Math.abs(t - y1) <= d, bs = Math.abs(b - y2) <= d, ls = Math.abs(l - x1) <= d, rs = Math.abs(r - x2) <= d, ts && (ui.position.top = inst._convertPositionTo("relative", {
                top: t,
                left: 0
            }).top - inst.margins.top), bs && (ui.position.top = inst._convertPositionTo("relative", {
                top: b - inst.helperProportions.height,
                left: 0
            }).top - inst.margins.top), ls && (ui.position.left = inst._convertPositionTo("relative", {
                top: 0,
                left: l
            }).left - inst.margins.left), rs && (ui.position.left = inst._convertPositionTo("relative", {
                top: 0,
                left: r - inst.helperProportions.width
            }).left - inst.margins.left)), !inst.snapElements[i].snapping && (ts || bs || ls || rs || first) && inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), {
                snapItem: inst.snapElements[i].item
            })), inst.snapElements[i].snapping = ts || bs || ls || rs || first)
        }
    }), $.ui.plugin.add("draggable", "stack", {
        start: function(event, ui, instance) {
            var min, o = instance.options,
                group = $.makeArray($(o.stack)).sort(function(a, b) {
                    return (parseInt($(a).css("zIndex"), 10) || 0) - (parseInt($(b).css("zIndex"), 10) || 0)
                });
            group.length && (min = parseInt($(group[0]).css("zIndex"), 10) || 0, $(group).each(function(i) {
                $(this).css("zIndex", min + i)
            }), this.css("zIndex", min + group.length))
        }
    }), $.ui.plugin.add("draggable", "zIndex", {
        start: function(event, ui, instance) {
            var t = $(ui.helper),
                o = instance.options;
            t.css("zIndex") && (o._zIndex = t.css("zIndex")), t.css("zIndex", o.zIndex)
        },
        stop: function(event, ui, instance) {
            var o = instance.options;
            o._zIndex && $(ui.helper).css("zIndex", o._zIndex)
        }
    });
    $.ui.draggable;
    $.widget("ui.resizable", $.ui.mouse, {
        version: "1.11.1",
        widgetEventPrefix: "resize",
        options: {
            alsoResize: !1,
            animate: !1,
            animateDuration: "slow",
            animateEasing: "swing",
            aspectRatio: !1,
            autoHide: !1,
            containment: !1,
            ghost: !1,
            grid: !1,
            handles: "e,s,se",
            helper: !1,
            maxHeight: null,
            maxWidth: null,
            minHeight: 10,
            minWidth: 10,
            zIndex: 90,
            resize: null,
            start: null,
            stop: null
        },
        _num: function(value) {
            return parseInt(value, 10) || 0
        },
        _isNumber: function(value) {
            return !isNaN(parseInt(value, 10))
        },
        _hasScroll: function(el, a) {
            if ("hidden" === $(el).css("overflow")) return !1;
            var scroll = a && "left" === a ? "scrollLeft" : "scrollTop",
                has = !1;
            return el[scroll] > 0 ? !0 : (el[scroll] = 1, has = el[scroll] > 0, el[scroll] = 0, has)
        },
        _create: function() {
            var n, i, handle, axis, hname, that = this,
                o = this.options;
            if (this.element.addClass("ui-resizable"), $.extend(this, {
                _aspectRatio: !! o.aspectRatio,
                aspectRatio: o.aspectRatio,
                originalElement: this.element,
                _proportionallyResizeElements: [],
                _helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
            }), this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i) && (this.element.wrap($("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
                position: this.element.css("position"),
                width: this.element.outerWidth(),
                height: this.element.outerHeight(),
                top: this.element.css("top"),
                left: this.element.css("left")
            })), this.element = this.element.parent().data("ui-resizable", this.element.resizable("instance")), this.elementIsWrapper = !0, this.element.css({
                marginLeft: this.originalElement.css("marginLeft"),
                marginTop: this.originalElement.css("marginTop"),
                marginRight: this.originalElement.css("marginRight"),
                marginBottom: this.originalElement.css("marginBottom")
            }), this.originalElement.css({
                marginLeft: 0,
                marginTop: 0,
                marginRight: 0,
                marginBottom: 0
            }), this.originalResizeStyle = this.originalElement.css("resize"), this.originalElement.css("resize", "none"), this._proportionallyResizeElements.push(this.originalElement.css({
                position: "static",
                zoom: 1,
                display: "block"
            })), this.originalElement.css({
                margin: this.originalElement.css("margin")
            }), this._proportionallyResize()), this.handles = o.handles || ($(".ui-resizable-handle", this.element).length ? {
                n: ".ui-resizable-n",
                e: ".ui-resizable-e",
                s: ".ui-resizable-s",
                w: ".ui-resizable-w",
                se: ".ui-resizable-se",
                sw: ".ui-resizable-sw",
                ne: ".ui-resizable-ne",
                nw: ".ui-resizable-nw"
            } : "e,s,se"), this.handles.constructor === String)
                for ("all" === this.handles && (this.handles = "n,e,s,w,se,sw,ne,nw"), n = this.handles.split(","), this.handles = {}, i = 0; i < n.length; i++) handle = $.trim(n[i]), hname = "ui-resizable-" + handle, axis = $("<div class='ui-resizable-handle " + hname + "'></div>"), axis.css({
                    zIndex: o.zIndex
                }), "se" === handle && axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se"), this.handles[handle] = ".ui-resizable-" + handle, this.element.append(axis);
            this._renderAxis = function(target) {
                var i, axis, padPos, padWrapper;
                target = target || this.element;
                for (i in this.handles) this.handles[i].constructor === String && (this.handles[i] = this.element.children(this.handles[i]).first().show()), this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i) && (axis = $(this.handles[i], this.element), padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth(), padPos = ["padding", /ne|nw|n/.test(i) ? "Top" : /se|sw|s/.test(i) ? "Bottom" : /^e$/.test(i) ? "Right" : "Left"].join(""), target.css(padPos, padWrapper), this._proportionallyResize()), $(this.handles[i]).length
            }, this._renderAxis(this.element), this._handles = $(".ui-resizable-handle", this.element).disableSelection(), this._handles.mouseover(function() {
                that.resizing || (this.className && (axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)), that.axis = axis && axis[1] ? axis[1] : "se")
            }), o.autoHide && (this._handles.hide(), $(this.element).addClass("ui-resizable-autohide").mouseenter(function() {
                o.disabled || ($(this).removeClass("ui-resizable-autohide"), that._handles.show())
            }).mouseleave(function() {
                o.disabled || that.resizing || ($(this).addClass("ui-resizable-autohide"), that._handles.hide())
            })), this._mouseInit()
        },
        _destroy: function() {
            this._mouseDestroy();
            var wrapper, _destroy = function(exp) {
                    $(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()
                };
            return this.elementIsWrapper && (_destroy(this.element), wrapper = this.element, this.originalElement.css({
                position: wrapper.css("position"),
                width: wrapper.outerWidth(),
                height: wrapper.outerHeight(),
                top: wrapper.css("top"),
                left: wrapper.css("left")
            }).insertAfter(wrapper), wrapper.remove()), this.originalElement.css("resize", this.originalResizeStyle), _destroy(this.originalElement), this
        },
        _mouseCapture: function(event) {
            var i, handle, capture = !1;
            for (i in this.handles) handle = $(this.handles[i])[0], (handle === event.target || $.contains(handle, event.target)) && (capture = !0);
            return !this.options.disabled && capture
        },
        _mouseStart: function(event) {
            var curleft, curtop, cursor, o = this.options,
                el = this.element;
            return this.resizing = !0, this._renderProxy(), curleft = this._num(this.helper.css("left")), curtop = this._num(this.helper.css("top")), o.containment && (curleft += $(o.containment).scrollLeft() || 0, curtop += $(o.containment).scrollTop() || 0), this.offset = this.helper.offset(), this.position = {
                left: curleft,
                top: curtop
            }, this.size = this._helper ? {
                width: this.helper.width(),
                height: this.helper.height()
            } : {
                width: el.width(),
                height: el.height()
            }, this.originalSize = this._helper ? {
                width: el.outerWidth(),
                height: el.outerHeight()
            } : {
                width: el.width(),
                height: el.height()
            }, this.sizeDiff = {
                width: el.outerWidth() - el.width(),
                height: el.outerHeight() - el.height()
            }, this.originalPosition = {
                left: curleft,
                top: curtop
            }, this.originalMousePosition = {
                left: event.pageX,
                top: event.pageY
            }, this.aspectRatio = "number" == typeof o.aspectRatio ? o.aspectRatio : this.originalSize.width / this.originalSize.height || 1, cursor = $(".ui-resizable-" + this.axis).css("cursor"), $("body").css("cursor", "auto" === cursor ? this.axis + "-resize" : cursor), el.addClass("ui-resizable-resizing"), this._propagate("start", event), !0
        },
        _mouseDrag: function(event) {
            var data, props, smp = this.originalMousePosition,
                a = this.axis,
                dx = event.pageX - smp.left || 0,
                dy = event.pageY - smp.top || 0,
                trigger = this._change[a];
            return this._updatePrevProperties(), trigger ? (data = trigger.apply(this, [event, dx, dy]), this._updateVirtualBoundaries(event.shiftKey), (this._aspectRatio || event.shiftKey) && (data = this._updateRatio(data, event)), data = this._respectSize(data, event), this._updateCache(data), this._propagate("resize", event), props = this._applyChanges(), !this._helper && this._proportionallyResizeElements.length && this._proportionallyResize(), $.isEmptyObject(props) || (this._updatePrevProperties(), this._trigger("resize", event, this.ui()), this._applyChanges()), !1) : !1
        },
        _mouseStop: function(event) {
            this.resizing = !1;
            var pr, ista, soffseth, soffsetw, s, left, top, o = this.options,
                that = this;
            return this._helper && (pr = this._proportionallyResizeElements, ista = pr.length && /textarea/i.test(pr[0].nodeName), soffseth = ista && this._hasScroll(pr[0], "left") ? 0 : that.sizeDiff.height, soffsetw = ista ? 0 : that.sizeDiff.width, s = {
                width: that.helper.width() - soffsetw,
                height: that.helper.height() - soffseth
            }, left = parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left) || null, top = parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top) || null, o.animate || this.element.css($.extend(s, {
                top: top,
                left: left
            })), that.helper.height(that.size.height), that.helper.width(that.size.width), this._helper && !o.animate && this._proportionallyResize()), $("body").css("cursor", "auto"), this.element.removeClass("ui-resizable-resizing"), this._propagate("stop", event), this._helper && this.helper.remove(), !1
        },
        _updatePrevProperties: function() {
            this.prevPosition = {
                top: this.position.top,
                left: this.position.left
            }, this.prevSize = {
                width: this.size.width,
                height: this.size.height
            }
        },
        _applyChanges: function() {
            var props = {};
            return this.position.top !== this.prevPosition.top && (props.top = this.position.top + "px"), this.position.left !== this.prevPosition.left && (props.left = this.position.left + "px"), this.size.width !== this.prevSize.width && (props.width = this.size.width + "px"), this.size.height !== this.prevSize.height && (props.height = this.size.height + "px"), this.helper.css(props), props
        },
        _updateVirtualBoundaries: function(forceAspectRatio) {
            var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b, o = this.options;
            b = {
                minWidth: this._isNumber(o.minWidth) ? o.minWidth : 0,
                maxWidth: this._isNumber(o.maxWidth) ? o.maxWidth : 1 / 0,
                minHeight: this._isNumber(o.minHeight) ? o.minHeight : 0,
                maxHeight: this._isNumber(o.maxHeight) ? o.maxHeight : 1 / 0
            }, (this._aspectRatio || forceAspectRatio) && (pMinWidth = b.minHeight * this.aspectRatio, pMinHeight = b.minWidth / this.aspectRatio, pMaxWidth = b.maxHeight * this.aspectRatio, pMaxHeight = b.maxWidth / this.aspectRatio, pMinWidth > b.minWidth && (b.minWidth = pMinWidth), pMinHeight > b.minHeight && (b.minHeight = pMinHeight), pMaxWidth < b.maxWidth && (b.maxWidth = pMaxWidth), pMaxHeight < b.maxHeight && (b.maxHeight = pMaxHeight)), this._vBoundaries = b
        },
        _updateCache: function(data) {
            this.offset = this.helper.offset(), this._isNumber(data.left) && (this.position.left = data.left), this._isNumber(data.top) && (this.position.top = data.top), this._isNumber(data.height) && (this.size.height = data.height), this._isNumber(data.width) && (this.size.width = data.width)
        },
        _updateRatio: function(data) {
            var cpos = this.position,
                csize = this.size,
                a = this.axis;
            return this._isNumber(data.height) ? data.width = data.height * this.aspectRatio : this._isNumber(data.width) && (data.height = data.width / this.aspectRatio), "sw" === a && (data.left = cpos.left + (csize.width - data.width), data.top = null), "nw" === a && (data.top = cpos.top + (csize.height - data.height), data.left = cpos.left + (csize.width - data.width)), data
        },
        _respectSize: function(data) {
            var o = this._vBoundaries,
                a = this.axis,
                ismaxw = this._isNumber(data.width) && o.maxWidth && o.maxWidth < data.width,
                ismaxh = this._isNumber(data.height) && o.maxHeight && o.maxHeight < data.height,
                isminw = this._isNumber(data.width) && o.minWidth && o.minWidth > data.width,
                isminh = this._isNumber(data.height) && o.minHeight && o.minHeight > data.height,
                dw = this.originalPosition.left + this.originalSize.width,
                dh = this.position.top + this.size.height,
                cw = /sw|nw|w/.test(a),
                ch = /nw|ne|n/.test(a);
            return isminw && (data.width = o.minWidth), isminh && (data.height = o.minHeight), ismaxw && (data.width = o.maxWidth), ismaxh && (data.height = o.maxHeight), isminw && cw && (data.left = dw - o.minWidth), ismaxw && cw && (data.left = dw - o.maxWidth), isminh && ch && (data.top = dh - o.minHeight), ismaxh && ch && (data.top = dh - o.maxHeight), data.width || data.height || data.left || !data.top ? data.width || data.height || data.top || !data.left || (data.left = null) : data.top = null, data
        },
        _getPaddingPlusBorderDimensions: function(element) {
            for (var i = 0, widths = [], borders = [element.css("borderTopWidth"), element.css("borderRightWidth"), element.css("borderBottomWidth"), element.css("borderLeftWidth")], paddings = [element.css("paddingTop"), element.css("paddingRight"), element.css("paddingBottom"), element.css("paddingLeft")]; 4 > i; i++) widths[i] = parseInt(borders[i], 10) || 0, widths[i] += parseInt(paddings[i], 10) || 0;
            return {
                height: widths[0] + widths[2],
                width: widths[1] + widths[3]
            }
        },
        _proportionallyResize: function() {
            if (this._proportionallyResizeElements.length)
                for (var prel, i = 0, element = this.helper || this.element; i < this._proportionallyResizeElements.length; i++) prel = this._proportionallyResizeElements[i], this.outerDimensions || (this.outerDimensions = this._getPaddingPlusBorderDimensions(prel)), prel.css({
                    height: element.height() - this.outerDimensions.height || 0,
                    width: element.width() - this.outerDimensions.width || 0
                })
        },
        _renderProxy: function() {
            var el = this.element,
                o = this.options;
            this.elementOffset = el.offset(), this._helper ? (this.helper = this.helper || $("<div style='overflow:hidden;'></div>"), this.helper.addClass(this._helper).css({
                width: this.element.outerWidth() - 1,
                height: this.element.outerHeight() - 1,
                position: "absolute",
                left: this.elementOffset.left + "px",
                top: this.elementOffset.top + "px",
                zIndex: ++o.zIndex
            }), this.helper.appendTo("body").disableSelection()) : this.helper = this.element
        },
        _change: {
            e: function(event, dx) {
                return {
                    width: this.originalSize.width + dx
                }
            },
            w: function(event, dx) {
                var cs = this.originalSize,
                    sp = this.originalPosition;
                return {
                    left: sp.left + dx,
                    width: cs.width - dx
                }
            },
            n: function(event, dx, dy) {
                var cs = this.originalSize,
                    sp = this.originalPosition;
                return {
                    top: sp.top + dy,
                    height: cs.height - dy
                }
            },
            s: function(event, dx, dy) {
                return {
                    height: this.originalSize.height + dy
                }
            },
            se: function(event, dx, dy) {
                return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]))
            },
            sw: function(event, dx, dy) {
                return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]))
            },
            ne: function(event, dx, dy) {
                return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]))
            },
            nw: function(event, dx, dy) {
                return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]))
            }
        },
        _propagate: function(n, event) {
            $.ui.plugin.call(this, n, [event, this.ui()]), "resize" !== n && this._trigger(n, event, this.ui())
        },
        plugins: {},
        ui: function() {
            return {
                originalElement: this.originalElement,
                element: this.element,
                helper: this.helper,
                position: this.position,
                size: this.size,
                originalSize: this.originalSize,
                originalPosition: this.originalPosition
            }
        }
    }), $.ui.plugin.add("resizable", "animate", {
        stop: function(event) {
            var that = $(this).resizable("instance"),
                o = that.options,
                pr = that._proportionallyResizeElements,
                ista = pr.length && /textarea/i.test(pr[0].nodeName),
                soffseth = ista && that._hasScroll(pr[0], "left") ? 0 : that.sizeDiff.height,
                soffsetw = ista ? 0 : that.sizeDiff.width,
                style = {
                    width: that.size.width - soffsetw,
                    height: that.size.height - soffseth
                }, left = parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left) || null,
                top = parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top) || null;
            that.element.animate($.extend(style, top && left ? {
                top: top,
                left: left
            } : {}), {
                duration: o.animateDuration,
                easing: o.animateEasing,
                step: function() {
                    var data = {
                        width: parseInt(that.element.css("width"), 10),
                        height: parseInt(that.element.css("height"), 10),
                        top: parseInt(that.element.css("top"), 10),
                        left: parseInt(that.element.css("left"), 10)
                    };
                    pr && pr.length && $(pr[0]).css({
                        width: data.width,
                        height: data.height
                    }), that._updateCache(data), that._propagate("resize", event)
                }
            })
        }
    }), $.ui.plugin.add("resizable", "containment", {
        start: function() {
            var element, p, co, ch, cw, width, height, that = $(this).resizable("instance"),
                o = that.options,
                el = that.element,
                oc = o.containment,
                ce = oc instanceof $ ? oc.get(0) : /parent/.test(oc) ? el.parent().get(0) : oc;
            ce && (that.containerElement = $(ce), /document/.test(oc) || oc === document ? (that.containerOffset = {
                left: 0,
                top: 0
            }, that.containerPosition = {
                left: 0,
                top: 0
            }, that.parentData = {
                element: $(document),
                left: 0,
                top: 0,
                width: $(document).width(),
                height: $(document).height() || document.body.parentNode.scrollHeight
            }) : (element = $(ce), p = [], $(["Top", "Right", "Left", "Bottom"]).each(function(i, name) {
                p[i] = that._num(element.css("padding" + name))
            }), that.containerOffset = element.offset(), that.containerPosition = element.position(), that.containerSize = {
                height: element.innerHeight() - p[3],
                width: element.innerWidth() - p[1]
            }, co = that.containerOffset, ch = that.containerSize.height, cw = that.containerSize.width, width = that._hasScroll(ce, "left") ? ce.scrollWidth : cw, height = that._hasScroll(ce) ? ce.scrollHeight : ch, that.parentData = {
                element: ce,
                left: co.left,
                top: co.top,
                width: width,
                height: height
            }))
        },
        resize: function(event) {
            var woset, hoset, isParent, isOffsetRelative, that = $(this).resizable("instance"),
                o = that.options,
                co = that.containerOffset,
                cp = that.position,
                pRatio = that._aspectRatio || event.shiftKey,
                cop = {
                    top: 0,
                    left: 0
                }, ce = that.containerElement,
                continueResize = !0;
            ce[0] !== document && /static/.test(ce.css("position")) && (cop = co), cp.left < (that._helper ? co.left : 0) && (that.size.width = that.size.width + (that._helper ? that.position.left - co.left : that.position.left - cop.left), pRatio && (that.size.height = that.size.width / that.aspectRatio, continueResize = !1), that.position.left = o.helper ? co.left : 0), cp.top < (that._helper ? co.top : 0) && (that.size.height = that.size.height + (that._helper ? that.position.top - co.top : that.position.top), pRatio && (that.size.width = that.size.height * that.aspectRatio, continueResize = !1), that.position.top = that._helper ? co.top : 0), isParent = that.containerElement.get(0) === that.element.parent().get(0), isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position")), isParent && isOffsetRelative ? (that.offset.left = that.parentData.left + that.position.left, that.offset.top = that.parentData.top + that.position.top) : (that.offset.left = that.element.offset().left, that.offset.top = that.element.offset().top), woset = Math.abs(that.sizeDiff.width + (that._helper ? that.offset.left - cop.left : that.offset.left - co.left)), hoset = Math.abs(that.sizeDiff.height + (that._helper ? that.offset.top - cop.top : that.offset.top - co.top)), woset + that.size.width >= that.parentData.width && (that.size.width = that.parentData.width - woset, pRatio && (that.size.height = that.size.width / that.aspectRatio, continueResize = !1)), hoset + that.size.height >= that.parentData.height && (that.size.height = that.parentData.height - hoset, pRatio && (that.size.width = that.size.height * that.aspectRatio, continueResize = !1)), continueResize || (that.position.left = that.prevPosition.left, that.position.top = that.prevPosition.top, that.size.width = that.prevSize.width, that.size.height = that.prevSize.height)
        },
        stop: function() {
            var that = $(this).resizable("instance"),
                o = that.options,
                co = that.containerOffset,
                cop = that.containerPosition,
                ce = that.containerElement,
                helper = $(that.helper),
                ho = helper.offset(),
                w = helper.outerWidth() - that.sizeDiff.width,
                h = helper.outerHeight() - that.sizeDiff.height;
            that._helper && !o.animate && /relative/.test(ce.css("position")) && $(this).css({
                left: ho.left - cop.left - co.left,
                width: w,
                height: h
            }), that._helper && !o.animate && /static/.test(ce.css("position")) && $(this).css({
                left: ho.left - cop.left - co.left,
                width: w,
                height: h
            })
        }
    }), $.ui.plugin.add("resizable", "alsoResize", {
        start: function() {
            var that = $(this).resizable("instance"),
                o = that.options,
                _store = function(exp) {
                    $(exp).each(function() {
                        var el = $(this);
                        el.data("ui-resizable-alsoresize", {
                            width: parseInt(el.width(), 10),
                            height: parseInt(el.height(), 10),
                            left: parseInt(el.css("left"), 10),
                            top: parseInt(el.css("top"), 10)
                        })
                    })
                };
            "object" != typeof o.alsoResize || o.alsoResize.parentNode ? _store(o.alsoResize) : o.alsoResize.length ? (o.alsoResize = o.alsoResize[0], _store(o.alsoResize)) : $.each(o.alsoResize, function(exp) {
                _store(exp)
            })
        },
        resize: function(event, ui) {
            var that = $(this).resizable("instance"),
                o = that.options,
                os = that.originalSize,
                op = that.originalPosition,
                delta = {
                    height: that.size.height - os.height || 0,
                    width: that.size.width - os.width || 0,
                    top: that.position.top - op.top || 0,
                    left: that.position.left - op.left || 0
                }, _alsoResize = function(exp, c) {
                    $(exp).each(function() {
                        var el = $(this),
                            start = $(this).data("ui-resizable-alsoresize"),
                            style = {}, css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
                        $.each(css, function(i, prop) {
                            var sum = (start[prop] || 0) + (delta[prop] || 0);
                            sum && sum >= 0 && (style[prop] = sum || null)
                        }), el.css(style)
                    })
                };
            "object" != typeof o.alsoResize || o.alsoResize.nodeType ? _alsoResize(o.alsoResize) : $.each(o.alsoResize, function(exp, c) {
                _alsoResize(exp, c)
            })
        },
        stop: function() {
            $(this).removeData("resizable-alsoresize")
        }
    }), $.ui.plugin.add("resizable", "ghost", {
        start: function() {
            var that = $(this).resizable("instance"),
                o = that.options,
                cs = that.size;
            that.ghost = that.originalElement.clone(), that.ghost.css({
                opacity: .25,
                display: "block",
                position: "relative",
                height: cs.height,
                width: cs.width,
                margin: 0,
                left: 0,
                top: 0
            }).addClass("ui-resizable-ghost").addClass("string" == typeof o.ghost ? o.ghost : ""), that.ghost.appendTo(that.helper)
        },
        resize: function() {
            var that = $(this).resizable("instance");
            that.ghost && that.ghost.css({
                position: "relative",
                height: that.size.height,
                width: that.size.width
            })
        },
        stop: function() {
            var that = $(this).resizable("instance");
            that.ghost && that.helper && that.helper.get(0).removeChild(that.ghost.get(0))
        }
    }), $.ui.plugin.add("resizable", "grid", {
        resize: function() {
            var outerDimensions, that = $(this).resizable("instance"),
                o = that.options,
                cs = that.size,
                os = that.originalSize,
                op = that.originalPosition,
                a = that.axis,
                grid = "number" == typeof o.grid ? [o.grid, o.grid] : o.grid,
                gridX = grid[0] || 1,
                gridY = grid[1] || 1,
                ox = Math.round((cs.width - os.width) / gridX) * gridX,
                oy = Math.round((cs.height - os.height) / gridY) * gridY,
                newWidth = os.width + ox,
                newHeight = os.height + oy,
                isMaxWidth = o.maxWidth && o.maxWidth < newWidth,
                isMaxHeight = o.maxHeight && o.maxHeight < newHeight,
                isMinWidth = o.minWidth && o.minWidth > newWidth,
                isMinHeight = o.minHeight && o.minHeight > newHeight;
            o.grid = grid, isMinWidth && (newWidth += gridX), isMinHeight && (newHeight += gridY), isMaxWidth && (newWidth -= gridX), isMaxHeight && (newHeight -= gridY), /^(se|s|e)$/.test(a) ? (that.size.width = newWidth, that.size.height = newHeight) : /^(ne)$/.test(a) ? (that.size.width = newWidth, that.size.height = newHeight, that.position.top = op.top - oy) : /^(sw)$/.test(a) ? (that.size.width = newWidth, that.size.height = newHeight, that.position.left = op.left - ox) : ((0 >= newHeight - gridY || 0 >= newWidth - gridX) && (outerDimensions = that._getPaddingPlusBorderDimensions(this)), newHeight - gridY > 0 ? (that.size.height = newHeight, that.position.top = op.top - oy) : (newHeight = gridY - outerDimensions.height, that.size.height = newHeight, that.position.top = op.top + os.height - newHeight), newWidth - gridX > 0 ? (that.size.width = newWidth, that.position.left = op.left - ox) : (newWidth = gridY - outerDimensions.height, that.size.width = newWidth, that.position.left = op.left + os.width - newWidth))
        }
    });
    $.ui.resizable, $.widget("ui.dialog", {
        version: "1.11.1",
        options: {
            appendTo: "body",
            autoOpen: !0,
            buttons: [],
            closeOnEscape: !0,
            closeText: "Close",
            dialogClass: "",
            draggable: !0,
            hide: null,
            height: "auto",
            maxHeight: null,
            maxWidth: null,
            minHeight: 150,
            minWidth: 150,
            modal: !1,
            position: {
                my: "center",
                at: "center",
                of: window,
                collision: "fit",
                using: function(pos) {
                    var topOffset = $(this).css(pos).offset().top;
                    0 > topOffset && $(this).css("top", pos.top - topOffset)
                }
            },
            resizable: !0,
            show: null,
            title: null,
            width: 300,
            beforeClose: null,
            close: null,
            drag: null,
            dragStart: null,
            dragStop: null,
            focus: null,
            open: null,
            resize: null,
            resizeStart: null,
            resizeStop: null
        },
        sizeRelatedOptions: {
            buttons: !0,
            height: !0,
            maxHeight: !0,
            maxWidth: !0,
            minHeight: !0,
            minWidth: !0,
            width: !0
        },
        resizableRelatedOptions: {
            maxHeight: !0,
            maxWidth: !0,
            minHeight: !0,
            minWidth: !0
        },
        _create: function() {
            this.originalCss = {
                display: this.element[0].style.display,
                width: this.element[0].style.width,
                minHeight: this.element[0].style.minHeight,
                maxHeight: this.element[0].style.maxHeight,
                height: this.element[0].style.height
            }, this.originalPosition = {
                parent: this.element.parent(),
                index: this.element.parent().children().index(this.element)
            }, this.originalTitle = this.element.attr("title"), this.options.title = this.options.title || this.originalTitle, this._createWrapper(), this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog), this._createTitlebar(), this._createButtonPane(), this.options.draggable && $.fn.draggable && this._makeDraggable(), this.options.resizable && $.fn.resizable && this._makeResizable(), this._isOpen = !1, this._trackFocus()
        },
        _init: function() {
            this.options.autoOpen && this.open()
        },
        _appendTo: function() {
            var element = this.options.appendTo;
            return element && (element.jquery || element.nodeType) ? $(element) : this.document.find(element || "body").eq(0)
        },
        _destroy: function() {
            var next, originalPosition = this.originalPosition;
            this._destroyOverlay(), this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(), this.uiDialog.stop(!0, !0).remove(), this.originalTitle && this.element.attr("title", this.originalTitle), next = originalPosition.parent.children().eq(originalPosition.index), next.length && next[0] !== this.element[0] ? next.before(this.element) : originalPosition.parent.append(this.element)
        },
        widget: function() {
            return this.uiDialog
        },
        disable: $.noop,
        enable: $.noop,
        close: function(event) {
            var activeElement, that = this;
            if (this._isOpen && this._trigger("beforeClose", event) !== !1) {
                if (this._isOpen = !1, this._focusedElement = null, this._destroyOverlay(), this._untrackInstance(), !this.opener.filter(":focusable").focus().length) try {
                    activeElement = this.document[0].activeElement, activeElement && "body" !== activeElement.nodeName.toLowerCase() && $(activeElement).blur()
                } catch (error) {}
                this._hide(this.uiDialog, this.options.hide, function() {
                    that._trigger("close", event)
                })
            }
        },
        isOpen: function() {
            return this._isOpen
        },
        moveToTop: function() {
            this._moveToTop()
        },
        _moveToTop: function(event, silent) {
            var moved = !1,
                zIndicies = this.uiDialog.siblings(".ui-front:visible").map(function() {
                    return +$(this).css("z-index")
                }).get(),
                zIndexMax = Math.max.apply(null, zIndicies);
            return zIndexMax >= +this.uiDialog.css("z-index") && (this.uiDialog.css("z-index", zIndexMax + 1), moved = !0), moved && !silent && this._trigger("focus", event), moved
        },
        open: function() {
            var that = this;
            return this._isOpen ? void(this._moveToTop() && this._focusTabbable()) : (this._isOpen = !0, this.opener = $(this.document[0].activeElement), this._size(), this._position(), this._createOverlay(), this._moveToTop(null, !0), this.overlay && this.overlay.css("z-index", this.uiDialog.css("z-index") - 1), this._show(this.uiDialog, this.options.show, function() {
                that._focusTabbable(), that._trigger("focus")
            }), this._makeFocusTarget(), void this._trigger("open"))
        },
        _focusTabbable: function() {
            var hasFocus = this._focusedElement;
            hasFocus || (hasFocus = this.element.find("[autofocus]")), hasFocus.length || (hasFocus = this.element.find(":tabbable")), hasFocus.length || (hasFocus = this.uiDialogButtonPane.find(":tabbable")), hasFocus.length || (hasFocus = this.uiDialogTitlebarClose.filter(":tabbable")), hasFocus.length || (hasFocus = this.uiDialog), hasFocus.eq(0).focus()
        },
        _keepFocus: function(event) {
            function checkFocus() {
                var activeElement = this.document[0].activeElement,
                    isActive = this.uiDialog[0] === activeElement || $.contains(this.uiDialog[0], activeElement);
                isActive || this._focusTabbable()
            }
            event.preventDefault(), checkFocus.call(this), this._delay(checkFocus)
        },
        _createWrapper: function() {
            this.uiDialog = $("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " + this.options.dialogClass).hide().attr({
                tabIndex: -1,
                role: "dialog"
            }).appendTo(this._appendTo()), this._on(this.uiDialog, {
                keydown: function(event) {
                    if (this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && event.keyCode === $.ui.keyCode.ESCAPE) return event.preventDefault(), void this.close(event);
                    if (event.keyCode === $.ui.keyCode.TAB && !event.isDefaultPrevented()) {
                        var tabbables = this.uiDialog.find(":tabbable"),
                            first = tabbables.filter(":first"),
                            last = tabbables.filter(":last");
                        event.target !== last[0] && event.target !== this.uiDialog[0] || event.shiftKey ? event.target !== first[0] && event.target !== this.uiDialog[0] || !event.shiftKey || (this._delay(function() {
                            last.focus()
                        }), event.preventDefault()) : (this._delay(function() {
                            first.focus()
                        }), event.preventDefault())
                    }
                },
                mousedown: function(event) {
                    this._moveToTop(event) && this._focusTabbable()
                }
            }), this.element.find("[aria-describedby]").length || this.uiDialog.attr({
                "aria-describedby": this.element.uniqueId().attr("id")
            })
        },
        _createTitlebar: function() {
            var uiDialogTitle;
            this.uiDialogTitlebar = $("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog), this._on(this.uiDialogTitlebar, {
                mousedown: function(event) {
                    $(event.target).closest(".ui-dialog-titlebar-close") || this.uiDialog.focus()
                }
            }), this.uiDialogTitlebarClose = $("<button type='button'></button>").button({
                label: this.options.closeText,
                icons: {
                    primary: "ui-icon-closethick"
                },
                text: !1
            }).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar), this._on(this.uiDialogTitlebarClose, {
                click: function(event) {
                    event.preventDefault(), this.close(event)
                }
            }), uiDialogTitle = $("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar), this._title(uiDialogTitle), this.uiDialog.attr({
                "aria-labelledby": uiDialogTitle.attr("id")
            })
        },
        _title: function(title) {
            this.options.title || title.html("&#160;"), title.text(this.options.title)
        },
        _createButtonPane: function() {
            this.uiDialogButtonPane = $("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"), this.uiButtonSet = $("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane), this._createButtons()
        },
        _createButtons: function() {
            var that = this,
                buttons = this.options.buttons;
            return this.uiDialogButtonPane.remove(), this.uiButtonSet.empty(), $.isEmptyObject(buttons) || $.isArray(buttons) && !buttons.length ? void this.uiDialog.removeClass("ui-dialog-buttons") : ($.each(buttons, function(name, props) {
                var click, buttonOptions;
                props = $.isFunction(props) ? {
                    click: props,
                    text: name
                } : props, props = $.extend({
                    type: "button"
                }, props), click = props.click, props.click = function() {
                    click.apply(that.element[0], arguments)
                }, buttonOptions = {
                    icons: props.icons,
                    text: props.showText
                }, delete props.icons, delete props.showText, $("<button></button>", props).button(buttonOptions).appendTo(that.uiButtonSet)
            }), this.uiDialog.addClass("ui-dialog-buttons"), void this.uiDialogButtonPane.appendTo(this.uiDialog))
        },
        _makeDraggable: function() {
            function filteredUi(ui) {
                return {
                    position: ui.position,
                    offset: ui.offset
                }
            }
            var that = this,
                options = this.options;
            this.uiDialog.draggable({
                cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
                handle: ".ui-dialog-titlebar",
                containment: "document",
                start: function(event, ui) {
                    $(this).addClass("ui-dialog-dragging"), that._blockFrames(), that._trigger("dragStart", event, filteredUi(ui))
                },
                drag: function(event, ui) {
                    that._trigger("drag", event, filteredUi(ui))
                },
                stop: function(event, ui) {
                    var left = ui.offset.left - that.document.scrollLeft(),
                        top = ui.offset.top - that.document.scrollTop();
                    options.position = {
                        my: "left top",
                        at: "left" + (left >= 0 ? "+" : "") + left + " top" + (top >= 0 ? "+" : "") + top,
                        of: that.window
                    }, $(this).removeClass("ui-dialog-dragging"), that._unblockFrames(), that._trigger("dragStop", event, filteredUi(ui))
                }
            })
        },
        _makeResizable: function() {
            function filteredUi(ui) {
                return {
                    originalPosition: ui.originalPosition,
                    originalSize: ui.originalSize,
                    position: ui.position,
                    size: ui.size
                }
            }
            var that = this,
                options = this.options,
                handles = options.resizable,
                position = this.uiDialog.css("position"),
                resizeHandles = "string" == typeof handles ? handles : "n,e,s,w,se,sw,ne,nw";
            this.uiDialog.resizable({
                cancel: ".ui-dialog-content",
                containment: "document",
                alsoResize: this.element,
                maxWidth: options.maxWidth,
                maxHeight: options.maxHeight,
                minWidth: options.minWidth,
                minHeight: this._minHeight(),
                handles: resizeHandles,
                start: function(event, ui) {
                    $(this).addClass("ui-dialog-resizing"), that._blockFrames(), that._trigger("resizeStart", event, filteredUi(ui))
                },
                resize: function(event, ui) {
                    that._trigger("resize", event, filteredUi(ui))
                },
                stop: function(event, ui) {
                    var offset = that.uiDialog.offset(),
                        left = offset.left - that.document.scrollLeft(),
                        top = offset.top - that.document.scrollTop();
                    options.height = that.uiDialog.height(), options.width = that.uiDialog.width(), options.position = {
                        my: "left top",
                        at: "left" + (left >= 0 ? "+" : "") + left + " top" + (top >= 0 ? "+" : "") + top,
                        of: that.window
                    }, $(this).removeClass("ui-dialog-resizing"), that._unblockFrames(), that._trigger("resizeStop", event, filteredUi(ui))
                }
            }).css("position", position)
        },
        _trackFocus: function() {
            this._on(this.widget(), {
                focusin: function(event) {
                    this._makeFocusTarget(), this._focusedElement = $(event.target)
                }
            })
        },
        _makeFocusTarget: function() {
            this._untrackInstance(), this._trackingInstances().unshift(this)
        },
        _untrackInstance: function() {
            var instances = this._trackingInstances(),
                exists = $.inArray(this, instances); - 1 !== exists && instances.splice(exists, 1)
        },
        _trackingInstances: function() {
            var instances = this.document.data("ui-dialog-instances");
            return instances || (instances = [], this.document.data("ui-dialog-instances", instances)), instances
        },
        _minHeight: function() {
            var options = this.options;
            return "auto" === options.height ? options.minHeight : Math.min(options.minHeight, options.height)
        },
        _position: function() {
            var isVisible = this.uiDialog.is(":visible");
            isVisible || this.uiDialog.show(), this.uiDialog.position(this.options.position), isVisible || this.uiDialog.hide()
        },
        _setOptions: function(options) {
            var that = this,
                resize = !1,
                resizableOptions = {};
            $.each(options, function(key, value) {
                that._setOption(key, value), key in that.sizeRelatedOptions && (resize = !0), key in that.resizableRelatedOptions && (resizableOptions[key] = value)
            }), resize && (this._size(), this._position()), this.uiDialog.is(":data(ui-resizable)") && this.uiDialog.resizable("option", resizableOptions)
        },
        _setOption: function(key, value) {
            var isDraggable, isResizable, uiDialog = this.uiDialog;
            "dialogClass" === key && uiDialog.removeClass(this.options.dialogClass).addClass(value), "disabled" !== key && (this._super(key, value), "appendTo" === key && this.uiDialog.appendTo(this._appendTo()), "buttons" === key && this._createButtons(), "closeText" === key && this.uiDialogTitlebarClose.button({
                label: "" + value
            }), "draggable" === key && (isDraggable = uiDialog.is(":data(ui-draggable)"), isDraggable && !value && uiDialog.draggable("destroy"), !isDraggable && value && this._makeDraggable()), "position" === key && this._position(), "resizable" === key && (isResizable = uiDialog.is(":data(ui-resizable)"), isResizable && !value && uiDialog.resizable("destroy"), isResizable && "string" == typeof value && uiDialog.resizable("option", "handles", value), isResizable || value === !1 || this._makeResizable()), "title" === key && this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))
        },
        _size: function() {
            var nonContentHeight, minContentHeight, maxContentHeight, options = this.options;
            this.element.show().css({
                width: "auto",
                minHeight: 0,
                maxHeight: "none",
                height: 0
            }), options.minWidth > options.width && (options.width = options.minWidth), nonContentHeight = this.uiDialog.css({
                height: "auto",
                width: options.width
            }).outerHeight(), minContentHeight = Math.max(0, options.minHeight - nonContentHeight), maxContentHeight = "number" == typeof options.maxHeight ? Math.max(0, options.maxHeight - nonContentHeight) : "none", "auto" === options.height ? this.element.css({
                minHeight: minContentHeight,
                maxHeight: maxContentHeight,
                height: "auto"
            }) : this.element.height(Math.max(0, options.height - nonContentHeight)), this.uiDialog.is(":data(ui-resizable)") && this.uiDialog.resizable("option", "minHeight", this._minHeight())
        },
        _blockFrames: function() {
            this.iframeBlocks = this.document.find("iframe").map(function() {
                var iframe = $(this);
                return $("<div>").css({
                    position: "absolute",
                    width: iframe.outerWidth(),
                    height: iframe.outerHeight()
                }).appendTo(iframe.parent()).offset(iframe.offset())[0]
            })
        },
        _unblockFrames: function() {
            this.iframeBlocks && (this.iframeBlocks.remove(), delete this.iframeBlocks)
        },
        _allowInteraction: function(event) {
            return $(event.target).closest(".ui-dialog").length ? !0 : !! $(event.target).closest(".ui-datepicker").length
        },
        _createOverlay: function() {
            if (this.options.modal) {
                var isOpening = !0;
                this._delay(function() {
                    isOpening = !1
                }), this.document.data("ui-dialog-overlays") || this._on(this.document, {
                    focusin: function(event) {
                        isOpening || this._allowInteraction(event) || (event.preventDefault(), this._trackingInstances()[0]._focusTabbable())
                    }
                }), this.overlay = $("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()), this._on(this.overlay, {
                    mousedown: "_keepFocus"
                }), this.document.data("ui-dialog-overlays", (this.document.data("ui-dialog-overlays") || 0) + 1)
            }
        },
        _destroyOverlay: function() {
            if (this.options.modal && this.overlay) {
                var overlays = this.document.data("ui-dialog-overlays") - 1;
                overlays ? this.document.data("ui-dialog-overlays", overlays) : this.document.unbind("focusin").removeData("ui-dialog-overlays"), this.overlay.remove(), this.overlay = null
            }
        }
    });
    $.widget("ui.droppable", {
        version: "1.11.1",
        widgetEventPrefix: "drop",
        options: {
            accept: "*",
            activeClass: !1,
            addClasses: !0,
            greedy: !1,
            hoverClass: !1,
            scope: "default",
            tolerance: "intersect",
            activate: null,
            deactivate: null,
            drop: null,
            out: null,
            over: null
        },
        _create: function() {
            var proportions, o = this.options,
                accept = o.accept;
            this.isover = !1, this.isout = !0, this.accept = $.isFunction(accept) ? accept : function(d) {
                return d.is(accept)
            }, this.proportions = function() {
                return arguments.length ? void(proportions = arguments[0]) : proportions ? proportions : proportions = {
                    width: this.element[0].offsetWidth,
                    height: this.element[0].offsetHeight
                }
            }, this._addToManager(o.scope), o.addClasses && this.element.addClass("ui-droppable")
        },
        _addToManager: function(scope) {
            $.ui.ddmanager.droppables[scope] = $.ui.ddmanager.droppables[scope] || [], $.ui.ddmanager.droppables[scope].push(this)
        },
        _splice: function(drop) {
            for (var i = 0; i < drop.length; i++) drop[i] === this && drop.splice(i, 1)
        },
        _destroy: function() {
            var drop = $.ui.ddmanager.droppables[this.options.scope];
            this._splice(drop), this.element.removeClass("ui-droppable ui-droppable-disabled")
        },
        _setOption: function(key, value) {
            if ("accept" === key) this.accept = $.isFunction(value) ? value : function(d) {
                return d.is(value)
            };
            else if ("scope" === key) {
                var drop = $.ui.ddmanager.droppables[this.options.scope];
                this._splice(drop), this._addToManager(value)
            }
            this._super(key, value)
        },
        _activate: function(event) {
            var draggable = $.ui.ddmanager.current;
            this.options.activeClass && this.element.addClass(this.options.activeClass), draggable && this._trigger("activate", event, this.ui(draggable))
        },
        _deactivate: function(event) {
            var draggable = $.ui.ddmanager.current;
            this.options.activeClass && this.element.removeClass(this.options.activeClass), draggable && this._trigger("deactivate", event, this.ui(draggable))
        },
        _over: function(event) {
            var draggable = $.ui.ddmanager.current;
            draggable && (draggable.currentItem || draggable.element)[0] !== this.element[0] && this.accept.call(this.element[0], draggable.currentItem || draggable.element) && (this.options.hoverClass && this.element.addClass(this.options.hoverClass), this._trigger("over", event, this.ui(draggable)))
        },
        _out: function(event) {
            var draggable = $.ui.ddmanager.current;
            draggable && (draggable.currentItem || draggable.element)[0] !== this.element[0] && this.accept.call(this.element[0], draggable.currentItem || draggable.element) && (this.options.hoverClass && this.element.removeClass(this.options.hoverClass), this._trigger("out", event, this.ui(draggable)))
        },
        _drop: function(event, custom) {
            var draggable = custom || $.ui.ddmanager.current,
                childrenIntersection = !1;
            return draggable && (draggable.currentItem || draggable.element)[0] !== this.element[0] ? (this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() {
                var inst = $(this).droppable("instance");
                return inst.options.greedy && !inst.options.disabled && inst.options.scope === draggable.options.scope && inst.accept.call(inst.element[0], draggable.currentItem || draggable.element) && $.ui.intersect(draggable, $.extend(inst, {
                    offset: inst.element.offset()
                }), inst.options.tolerance, event) ? (childrenIntersection = !0, !1) : void 0
            }), childrenIntersection ? !1 : this.accept.call(this.element[0], draggable.currentItem || draggable.element) ? (this.options.activeClass && this.element.removeClass(this.options.activeClass), this.options.hoverClass && this.element.removeClass(this.options.hoverClass), this._trigger("drop", event, this.ui(draggable)), this.element) : !1) : !1
        },
        ui: function(c) {
            return {
                draggable: c.currentItem || c.element,
                helper: c.helper,
                position: c.position,
                offset: c.positionAbs
            }
        }
    }), $.ui.intersect = function() {
        function isOverAxis(x, reference, size) {
            return x >= reference && reference + size > x
        }
        return function(draggable, droppable, toleranceMode, event) {
            if (!droppable.offset) return !1;
            var x1 = (draggable.positionAbs || draggable.position.absolute).left,
                y1 = (draggable.positionAbs || draggable.position.absolute).top,
                x2 = x1 + draggable.helperProportions.width,
                y2 = y1 + draggable.helperProportions.height,
                l = droppable.offset.left,
                t = droppable.offset.top,
                r = l + droppable.proportions().width,
                b = t + droppable.proportions().height;
            switch (toleranceMode) {
                case "fit":
                    return x1 >= l && r >= x2 && y1 >= t && b >= y2;
                case "intersect":
                    return l < x1 + draggable.helperProportions.width / 2 && x2 - draggable.helperProportions.width / 2 < r && t < y1 + draggable.helperProportions.height / 2 && y2 - draggable.helperProportions.height / 2 < b;
                case "pointer":
                    return isOverAxis(event.pageY, t, droppable.proportions().height) && isOverAxis(event.pageX, l, droppable.proportions().width);
                case "touch":
                    return (y1 >= t && b >= y1 || y2 >= t && b >= y2 || t > y1 && y2 > b) && (x1 >= l && r >= x1 || x2 >= l && r >= x2 || l > x1 && x2 > r);
                default:
                    return !1
            }
        }
    }(), $.ui.ddmanager = {
        current: null,
        droppables: {
            "default": []
        },
        prepareOffsets: function(t, event) {
            var i, j, m = $.ui.ddmanager.droppables[t.options.scope] || [],
                type = event ? event.type : null,
                list = (t.currentItem || t.element).find(":data(ui-droppable)").addBack();
            droppablesLoop: for (i = 0; i < m.length; i++)
                if (!(m[i].options.disabled || t && !m[i].accept.call(m[i].element[0], t.currentItem || t.element))) {
                    for (j = 0; j < list.length; j++)
                        if (list[j] === m[i].element[0]) {
                            m[i].proportions().height = 0;
                            continue droppablesLoop
                        }
                    m[i].visible = "none" !== m[i].element.css("display"), m[i].visible && ("mousedown" === type && m[i]._activate.call(m[i], event), m[i].offset = m[i].element.offset(), m[i].proportions({
                        width: m[i].element[0].offsetWidth,
                        height: m[i].element[0].offsetHeight
                    }))
                }
        },
        drop: function(draggable, event) {
            var dropped = !1;
            return $.each(($.ui.ddmanager.droppables[draggable.options.scope] || []).slice(), function() {
                this.options && (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance, event) && (dropped = this._drop.call(this, event) || dropped), !this.options.disabled && this.visible && this.accept.call(this.element[0], draggable.currentItem || draggable.element) && (this.isout = !0, this.isover = !1, this._deactivate.call(this, event)))
            }), dropped
        },
        dragStart: function(draggable, event) {
            draggable.element.parentsUntil("body").bind("scroll.droppable", function() {
                draggable.options.refreshPositions || $.ui.ddmanager.prepareOffsets(draggable, event)
            })
        },
        drag: function(draggable, event) {
            draggable.options.refreshPositions && $.ui.ddmanager.prepareOffsets(draggable, event), $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
                if (!this.options.disabled && !this.greedyChild && this.visible) {
                    var parentInstance, scope, parent, intersects = $.ui.intersect(draggable, this, this.options.tolerance, event),
                        c = !intersects && this.isover ? "isout" : intersects && !this.isover ? "isover" : null;
                    c && (this.options.greedy && (scope = this.options.scope, parent = this.element.parents(":data(ui-droppable)").filter(function() {
                        return $(this).droppable("instance").options.scope === scope
                    }), parent.length && (parentInstance = $(parent[0]).droppable("instance"), parentInstance.greedyChild = "isover" === c)), parentInstance && "isover" === c && (parentInstance.isover = !1, parentInstance.isout = !0, parentInstance._out.call(parentInstance, event)), this[c] = !0, this["isout" === c ? "isover" : "isout"] = !1, this["isover" === c ? "_over" : "_out"].call(this, event), parentInstance && "isout" === c && (parentInstance.isout = !1, parentInstance.isover = !0, parentInstance._over.call(parentInstance, event)))
                }
            })
        },
        dragStop: function(draggable, event) {
            draggable.element.parentsUntil("body").unbind("scroll.droppable"), draggable.options.refreshPositions || $.ui.ddmanager.prepareOffsets(draggable, event)
        }
    };
    var dataSpace = ($.ui.droppable, "ui-effects-"),
        jQuery = $;
    $.effects = {
        effect: {}
    },
    function(jQuery, undefined) {
        function clamp(value, prop, allowEmpty) {
            var type = propTypes[prop.type] || {};
            return null == value ? allowEmpty || !prop.def ? null : prop.def : (value = type.floor ? ~~value : parseFloat(value), isNaN(value) ? prop.def : type.mod ? (value + type.mod) % type.mod : 0 > value ? 0 : type.max < value ? type.max : value)
        }

        function stringParse(string) {
            var inst = color(),
                rgba = inst._rgba = [];
            return string = string.toLowerCase(), each(stringParsers, function(i, parser) {
                var parsed, match = parser.re.exec(string),
                    values = match && parser.parse(match),
                    spaceName = parser.space || "rgba";
                return values ? (parsed = inst[spaceName](values), inst[spaces[spaceName].cache] = parsed[spaces[spaceName].cache], rgba = inst._rgba = parsed._rgba, !1) : void 0
            }), rgba.length ? ("0,0,0,0" === rgba.join() && jQuery.extend(rgba, colors.transparent), inst) : colors[string]
        }

        function hue2rgb(p, q, h) {
            return h = (h + 1) % 1, 1 > 6 * h ? p + (q - p) * h * 6 : 1 > 2 * h ? q : 2 > 3 * h ? p + (q - p) * (2 / 3 - h) * 6 : p
        }
        var colors, stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
            rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
            stringParsers = [{
                re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
                parse: function(execResult) {
                    return [execResult[1], execResult[2], execResult[3], execResult[4]]
                }
            }, {
                re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
                parse: function(execResult) {
                    return [2.55 * execResult[1], 2.55 * execResult[2], 2.55 * execResult[3], execResult[4]]
                }
            }, {
                re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
                parse: function(execResult) {
                    return [parseInt(execResult[1], 16), parseInt(execResult[2], 16), parseInt(execResult[3], 16)]
                }
            }, {
                re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
                parse: function(execResult) {
                    return [parseInt(execResult[1] + execResult[1], 16), parseInt(execResult[2] + execResult[2], 16), parseInt(execResult[3] + execResult[3], 16)]
                }
            }, {
                re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
                space: "hsla",
                parse: function(execResult) {
                    return [execResult[1], execResult[2] / 100, execResult[3] / 100, execResult[4]]
                }
            }],
            color = jQuery.Color = function(color, green, blue, alpha) {
                return new jQuery.Color.fn.parse(color, green, blue, alpha)
            }, spaces = {
                rgba: {
                    props: {
                        red: {
                            idx: 0,
                            type: "byte"
                        },
                        green: {
                            idx: 1,
                            type: "byte"
                        },
                        blue: {
                            idx: 2,
                            type: "byte"
                        }
                    }
                },
                hsla: {
                    props: {
                        hue: {
                            idx: 0,
                            type: "degrees"
                        },
                        saturation: {
                            idx: 1,
                            type: "percent"
                        },
                        lightness: {
                            idx: 2,
                            type: "percent"
                        }
                    }
                }
            }, propTypes = {
                "byte": {
                    floor: !0,
                    max: 255
                },
                percent: {
                    max: 1
                },
                degrees: {
                    mod: 360,
                    floor: !0
                }
            }, support = color.support = {}, supportElem = jQuery("<p>")[0],
            each = jQuery.each;
        supportElem.style.cssText = "background-color:rgba(1,1,1,.5)", support.rgba = supportElem.style.backgroundColor.indexOf("rgba") > -1, each(spaces, function(spaceName, space) {
            space.cache = "_" + spaceName, space.props.alpha = {
                idx: 3,
                type: "percent",
                def: 1
            }
        }), color.fn = jQuery.extend(color.prototype, {
            parse: function(red, green, blue, alpha) {
                if (red === undefined) return this._rgba = [null, null, null, null], this;
                (red.jquery || red.nodeType) && (red = jQuery(red).css(green), green = undefined);
                var inst = this,
                    type = jQuery.type(red),
                    rgba = this._rgba = [];
                return green !== undefined && (red = [red, green, blue, alpha], type = "array"), "string" === type ? this.parse(stringParse(red) || colors._default) : "array" === type ? (each(spaces.rgba.props, function(key, prop) {
                    rgba[prop.idx] = clamp(red[prop.idx], prop)
                }), this) : "object" === type ? (red instanceof color ? each(spaces, function(spaceName, space) {
                    red[space.cache] && (inst[space.cache] = red[space.cache].slice())
                }) : each(spaces, function(spaceName, space) {
                    var cache = space.cache;
                    each(space.props, function(key, prop) {
                        if (!inst[cache] && space.to) {
                            if ("alpha" === key || null == red[key]) return;
                            inst[cache] = space.to(inst._rgba)
                        }
                        inst[cache][prop.idx] = clamp(red[key], prop, !0)
                    }), inst[cache] && jQuery.inArray(null, inst[cache].slice(0, 3)) < 0 && (inst[cache][3] = 1, space.from && (inst._rgba = space.from(inst[cache])))
                }), this) : void 0
            },
            is: function(compare) {
                var is = color(compare),
                    same = !0,
                    inst = this;
                return each(spaces, function(_, space) {
                    var localCache, isCache = is[space.cache];
                    return isCache && (localCache = inst[space.cache] || space.to && space.to(inst._rgba) || [], each(space.props, function(_, prop) {
                        return null != isCache[prop.idx] ? same = isCache[prop.idx] === localCache[prop.idx] : void 0
                    })), same
                }), same
            },
            _space: function() {
                var used = [],
                    inst = this;
                return each(spaces, function(spaceName, space) {
                    inst[space.cache] && used.push(spaceName)
                }), used.pop()
            },
            transition: function(other, distance) {
                var end = color(other),
                    spaceName = end._space(),
                    space = spaces[spaceName],
                    startColor = 0 === this.alpha() ? color("transparent") : this,
                    start = startColor[space.cache] || space.to(startColor._rgba),
                    result = start.slice();
                return end = end[space.cache], each(space.props, function(key, prop) {
                    var index = prop.idx,
                        startValue = start[index],
                        endValue = end[index],
                        type = propTypes[prop.type] || {};
                    null !== endValue && (null === startValue ? result[index] = endValue : (type.mod && (endValue - startValue > type.mod / 2 ? startValue += type.mod : startValue - endValue > type.mod / 2 && (startValue -= type.mod)), result[index] = clamp((endValue - startValue) * distance + startValue, prop)))
                }), this[spaceName](result)
            },
            blend: function(opaque) {
                if (1 === this._rgba[3]) return this;
                var rgb = this._rgba.slice(),
                    a = rgb.pop(),
                    blend = color(opaque)._rgba;
                return color(jQuery.map(rgb, function(v, i) {
                    return (1 - a) * blend[i] + a * v
                }))
            },
            toRgbaString: function() {
                var prefix = "rgba(",
                    rgba = jQuery.map(this._rgba, function(v, i) {
                        return null == v ? i > 2 ? 1 : 0 : v
                    });
                return 1 === rgba[3] && (rgba.pop(), prefix = "rgb("), prefix + rgba.join() + ")"
            },
            toHslaString: function() {
                var prefix = "hsla(",
                    hsla = jQuery.map(this.hsla(), function(v, i) {
                        return null == v && (v = i > 2 ? 1 : 0), i && 3 > i && (v = Math.round(100 * v) + "%"), v
                    });
                return 1 === hsla[3] && (hsla.pop(), prefix = "hsl("), prefix + hsla.join() + ")"
            },
            toHexString: function(includeAlpha) {
                var rgba = this._rgba.slice(),
                    alpha = rgba.pop();
                return includeAlpha && rgba.push(~~(255 * alpha)), "#" + jQuery.map(rgba, function(v) {
                    return v = (v || 0).toString(16), 1 === v.length ? "0" + v : v
                }).join("")
            },
            toString: function() {
                return 0 === this._rgba[3] ? "transparent" : this.toRgbaString()
            }
        }), color.fn.parse.prototype = color.fn, spaces.hsla.to = function(rgba) {
            if (null == rgba[0] || null == rgba[1] || null == rgba[2]) return [null, null, null, rgba[3]];
            var h, s, r = rgba[0] / 255,
                g = rgba[1] / 255,
                b = rgba[2] / 255,
                a = rgba[3],
                max = Math.max(r, g, b),
                min = Math.min(r, g, b),
                diff = max - min,
                add = max + min,
                l = .5 * add;
            return h = min === max ? 0 : r === max ? 60 * (g - b) / diff + 360 : g === max ? 60 * (b - r) / diff + 120 : 60 * (r - g) / diff + 240, s = 0 === diff ? 0 : .5 >= l ? diff / add : diff / (2 - add), [Math.round(h) % 360, s, l, null == a ? 1 : a]
        }, spaces.hsla.from = function(hsla) {
            if (null == hsla[0] || null == hsla[1] || null == hsla[2]) return [null, null, null, hsla[3]];
            var h = hsla[0] / 360,
                s = hsla[1],
                l = hsla[2],
                a = hsla[3],
                q = .5 >= l ? l * (1 + s) : l + s - l * s,
                p = 2 * l - q;
            return [Math.round(255 * hue2rgb(p, q, h + 1 / 3)), Math.round(255 * hue2rgb(p, q, h)), Math.round(255 * hue2rgb(p, q, h - 1 / 3)), a]
        }, each(spaces, function(spaceName, space) {
            var props = space.props,
                cache = space.cache,
                to = space.to,
                from = space.from;
            color.fn[spaceName] = function(value) {
                if (to && !this[cache] && (this[cache] = to(this._rgba)), value === undefined) return this[cache].slice();
                var ret, type = jQuery.type(value),
                    arr = "array" === type || "object" === type ? value : arguments,
                    local = this[cache].slice();
                return each(props, function(key, prop) {
                    var val = arr["object" === type ? key : prop.idx];
                    null == val && (val = local[prop.idx]), local[prop.idx] = clamp(val, prop)
                }), from ? (ret = color(from(local)), ret[cache] = local, ret) : color(local)
            }, each(props, function(key, prop) {
                color.fn[key] || (color.fn[key] = function(value) {
                    var match, vtype = jQuery.type(value),
                        fn = "alpha" === key ? this._hsla ? "hsla" : "rgba" : spaceName,
                        local = this[fn](),
                        cur = local[prop.idx];
                    return "undefined" === vtype ? cur : ("function" === vtype && (value = value.call(this, cur), vtype = jQuery.type(value)), null == value && prop.empty ? this : ("string" === vtype && (match = rplusequals.exec(value), match && (value = cur + parseFloat(match[2]) * ("+" === match[1] ? 1 : -1))), local[prop.idx] = value, this[fn](local)))
                })
            })
        }), color.hook = function(hook) {
            var hooks = hook.split(" ");
            each(hooks, function(i, hook) {
                jQuery.cssHooks[hook] = {
                    set: function(elem, value) {
                        var parsed, curElem, backgroundColor = "";
                        if ("transparent" !== value && ("string" !== jQuery.type(value) || (parsed = stringParse(value)))) {
                            if (value = color(parsed || value), !support.rgba && 1 !== value._rgba[3]) {
                                for (curElem = "backgroundColor" === hook ? elem.parentNode : elem;
                                    ("" === backgroundColor || "transparent" === backgroundColor) && curElem && curElem.style;) try {
                                    backgroundColor = jQuery.css(curElem, "backgroundColor"), curElem = curElem.parentNode
                                } catch (e) {}
                                value = value.blend(backgroundColor && "transparent" !== backgroundColor ? backgroundColor : "_default")
                            }
                            value = value.toRgbaString()
                        }
                        try {
                            elem.style[hook] = value
                        } catch (e) {}
                    }
                }, jQuery.fx.step[hook] = function(fx) {
                    fx.colorInit || (fx.start = color(fx.elem, hook), fx.end = color(fx.end), fx.colorInit = !0), jQuery.cssHooks[hook].set(fx.elem, fx.start.transition(fx.end, fx.pos))
                }
            })
        }, color.hook(stepHooks), jQuery.cssHooks.borderColor = {
            expand: function(value) {
                var expanded = {};
                return each(["Top", "Right", "Bottom", "Left"], function(i, part) {
                    expanded["border" + part + "Color"] = value
                }), expanded
            }
        }, colors = jQuery.Color.names = {
            aqua: "#00ffff",
            black: "#000000",
            blue: "#0000ff",
            fuchsia: "#ff00ff",
            gray: "#808080",
            green: "#008000",
            lime: "#00ff00",
            maroon: "#800000",
            navy: "#000080",
            olive: "#808000",
            purple: "#800080",
            red: "#ff0000",
            silver: "#c0c0c0",
            teal: "#008080",
            white: "#ffffff",
            yellow: "#ffff00",
            transparent: [null, null, null, 0],
            _default: "#ffffff"
        }
    }(jQuery),
    function() {
        function getElementStyles(elem) {
            var key, len, style = elem.ownerDocument.defaultView ? elem.ownerDocument.defaultView.getComputedStyle(elem, null) : elem.currentStyle,
                styles = {};
            if (style && style.length && style[0] && style[style[0]])
                for (len = style.length; len--;) key = style[len], "string" == typeof style[key] && (styles[$.camelCase(key)] = style[key]);
            else
                for (key in style) "string" == typeof style[key] && (styles[key] = style[key]);
            return styles
        }

        function styleDifference(oldStyle, newStyle) {
            var name, value, diff = {};
            for (name in newStyle) value = newStyle[name], oldStyle[name] !== value && (shorthandStyles[name] || ($.fx.step[name] || !isNaN(parseFloat(value))) && (diff[name] = value));
            return diff
        }
        var classAnimationActions = ["add", "remove", "toggle"],
            shorthandStyles = {
                border: 1,
                borderBottom: 1,
                borderColor: 1,
                borderLeft: 1,
                borderRight: 1,
                borderTop: 1,
                borderWidth: 1,
                margin: 1,
                padding: 1
            };
        $.each(["borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle"], function(_, prop) {
            $.fx.step[prop] = function(fx) {
                ("none" !== fx.end && !fx.setAttr || 1 === fx.pos && !fx.setAttr) && (jQuery.style(fx.elem, prop, fx.end), fx.setAttr = !0)
            }
        }), $.fn.addBack || ($.fn.addBack = function(selector) {
            return this.add(null == selector ? this.prevObject : this.prevObject.filter(selector))
        }), $.effects.animateClass = function(value, duration, easing, callback) {
            var o = $.speed(duration, easing, callback);
            return this.queue(function() {
                var applyClassChange, animated = $(this),
                    baseClass = animated.attr("class") || "",
                    allAnimations = o.children ? animated.find("*").addBack() : animated;
                allAnimations = allAnimations.map(function() {
                    var el = $(this);
                    return {
                        el: el,
                        start: getElementStyles(this)
                    }
                }), applyClassChange = function() {
                    $.each(classAnimationActions, function(i, action) {
                        value[action] && animated[action + "Class"](value[action])
                    })
                }, applyClassChange(), allAnimations = allAnimations.map(function() {
                    return this.end = getElementStyles(this.el[0]), this.diff = styleDifference(this.start, this.end), this
                }), animated.attr("class", baseClass), allAnimations = allAnimations.map(function() {
                    var styleInfo = this,
                        dfd = $.Deferred(),
                        opts = $.extend({}, o, {
                            queue: !1,
                            complete: function() {
                                dfd.resolve(styleInfo)
                            }
                        });
                    return this.el.animate(this.diff, opts), dfd.promise()
                }), $.when.apply($, allAnimations.get()).done(function() {
                    applyClassChange(), $.each(arguments, function() {
                        var el = this.el;
                        $.each(this.diff, function(key) {
                            el.css(key, "")
                        })
                    }), o.complete.call(animated[0])
                })
            })
        }, $.fn.extend({
            addClass: function(orig) {
                return function(classNames, speed, easing, callback) {
                    return speed ? $.effects.animateClass.call(this, {
                        add: classNames
                    }, speed, easing, callback) : orig.apply(this, arguments)
                }
            }($.fn.addClass),
            removeClass: function(orig) {
                return function(classNames, speed, easing, callback) {
                    return arguments.length > 1 ? $.effects.animateClass.call(this, {
                        remove: classNames
                    }, speed, easing, callback) : orig.apply(this, arguments)
                }
            }($.fn.removeClass),
            toggleClass: function(orig) {
                return function(classNames, force, speed, easing, callback) {
                    return "boolean" == typeof force || void 0 === force ? speed ? $.effects.animateClass.call(this, force ? {
                        add: classNames
                    } : {
                        remove: classNames
                    }, speed, easing, callback) : orig.apply(this, arguments) : $.effects.animateClass.call(this, {
                        toggle: classNames
                    }, force, speed, easing)
                }
            }($.fn.toggleClass),
            switchClass: function(remove, add, speed, easing, callback) {
                return $.effects.animateClass.call(this, {
                    add: add,
                    remove: remove
                }, speed, easing, callback)
            }
        })
    }(),
    function() {
        function _normalizeArguments(effect, options, speed, callback) {
            return $.isPlainObject(effect) && (options = effect, effect = effect.effect), effect = {
                effect: effect
            }, null == options && (options = {}), $.isFunction(options) && (callback = options, speed = null, options = {}), ("number" == typeof options || $.fx.speeds[options]) && (callback = speed, speed = options, options = {}), $.isFunction(speed) && (callback = speed, speed = null), options && $.extend(effect, options), speed = speed || options.duration, effect.duration = $.fx.off ? 0 : "number" == typeof speed ? speed : speed in $.fx.speeds ? $.fx.speeds[speed] : $.fx.speeds._default, effect.complete = callback || options.complete, effect
        }

        function standardAnimationOption(option) {
            return !option || "number" == typeof option || $.fx.speeds[option] ? !0 : "string" != typeof option || $.effects.effect[option] ? $.isFunction(option) ? !0 : "object" != typeof option || option.effect ? !1 : !0 : !0
        }
        $.extend($.effects, {
            version: "1.11.1",
            save: function(element, set) {
                for (var i = 0; i < set.length; i++) null !== set[i] && element.data(dataSpace + set[i], element[0].style[set[i]])
            },
            restore: function(element, set) {
                var val, i;
                for (i = 0; i < set.length; i++) null !== set[i] && (val = element.data(dataSpace + set[i]), void 0 === val && (val = ""), element.css(set[i], val))
            },
            setMode: function(el, mode) {
                return "toggle" === mode && (mode = el.is(":hidden") ? "show" : "hide"), mode
            },
            getBaseline: function(origin, original) {
                var y, x;
                switch (origin[0]) {
                    case "top":
                        y = 0;
                        break;
                    case "middle":
                        y = .5;
                        break;
                    case "bottom":
                        y = 1;
                        break;
                    default:
                        y = origin[0] / original.height
                }
                switch (origin[1]) {
                    case "left":
                        x = 0;
                        break;
                    case "center":
                        x = .5;
                        break;
                    case "right":
                        x = 1;
                        break;
                    default:
                        x = origin[1] / original.width
                }
                return {
                    x: x,
                    y: y
                }
            },
            createWrapper: function(element) {
                if (element.parent().is(".ui-effects-wrapper")) return element.parent();
                var props = {
                    width: element.outerWidth(!0),
                    height: element.outerHeight(!0),
                    "float": element.css("float")
                }, wrapper = $("<div></div>").addClass("ui-effects-wrapper").css({
                        fontSize: "100%",
                        background: "transparent",
                        border: "none",
                        margin: 0,
                        padding: 0
                    }),
                    size = {
                        width: element.width(),
                        height: element.height()
                    }, active = document.activeElement;
                try {
                    active.id
                } catch (e) {
                    active = document.body
                }
                return element.wrap(wrapper), (element[0] === active || $.contains(element[0], active)) && $(active).focus(), wrapper = element.parent(), "static" === element.css("position") ? (wrapper.css({
                    position: "relative"
                }), element.css({
                    position: "relative"
                })) : ($.extend(props, {
                    position: element.css("position"),
                    zIndex: element.css("z-index")
                }), $.each(["top", "left", "bottom", "right"], function(i, pos) {
                    props[pos] = element.css(pos), isNaN(parseInt(props[pos], 10)) && (props[pos] = "auto")
                }), element.css({
                    position: "relative",
                    top: 0,
                    left: 0,
                    right: "auto",
                    bottom: "auto"
                })), element.css(size), wrapper.css(props).show()
            },
            removeWrapper: function(element) {
                var active = document.activeElement;
                return element.parent().is(".ui-effects-wrapper") && (element.parent().replaceWith(element), (element[0] === active || $.contains(element[0], active)) && $(active).focus()), element
            },
            setTransition: function(element, list, factor, value) {
                return value = value || {}, $.each(list, function(i, x) {
                    var unit = element.cssUnit(x);
                    unit[0] > 0 && (value[x] = unit[0] * factor + unit[1])
                }), value
            }
        }), $.fn.extend({
            effect: function() {
                function run(next) {
                    function done() {
                        $.isFunction(complete) && complete.call(elem[0]), $.isFunction(next) && next()
                    }
                    var elem = $(this),
                        complete = args.complete,
                        mode = args.mode;
                    (elem.is(":hidden") ? "hide" === mode : "show" === mode) ? (elem[mode](), done()) : effectMethod.call(elem[0], args, done)
                }
                var args = _normalizeArguments.apply(this, arguments),
                    mode = args.mode,
                    queue = args.queue,
                    effectMethod = $.effects.effect[args.effect];
                return $.fx.off || !effectMethod ? mode ? this[mode](args.duration, args.complete) : this.each(function() {
                    args.complete && args.complete.call(this)
                }) : queue === !1 ? this.each(run) : this.queue(queue || "fx", run)
            },
            show: function(orig) {
                return function(option) {
                    if (standardAnimationOption(option)) return orig.apply(this, arguments);
                    var args = _normalizeArguments.apply(this, arguments);
                    return args.mode = "show", this.effect.call(this, args)
                }
            }($.fn.show),
            hide: function(orig) {
                return function(option) {
                    if (standardAnimationOption(option)) return orig.apply(this, arguments);
                    var args = _normalizeArguments.apply(this, arguments);
                    return args.mode = "hide", this.effect.call(this, args)
                }
            }($.fn.hide),
            toggle: function(orig) {
                return function(option) {
                    if (standardAnimationOption(option) || "boolean" == typeof option) return orig.apply(this, arguments);
                    var args = _normalizeArguments.apply(this, arguments);
                    return args.mode = "toggle", this.effect.call(this, args)
                }
            }($.fn.toggle),
            cssUnit: function(key) {
                var style = this.css(key),
                    val = [];
                return $.each(["em", "px", "%", "pt"], function(i, unit) {
                    style.indexOf(unit) > 0 && (val = [parseFloat(style), unit])
                }), val
            }
        })
    }(),
    function() {
        var baseEasings = {};
        $.each(["Quad", "Cubic", "Quart", "Quint", "Expo"], function(i, name) {
            baseEasings[name] = function(p) {
                return Math.pow(p, i + 2)
            }
        }), $.extend(baseEasings, {
            Sine: function(p) {
                return 1 - Math.cos(p * Math.PI / 2)
            },
            Circ: function(p) {
                return 1 - Math.sqrt(1 - p * p)
            },
            Elastic: function(p) {
                return 0 === p || 1 === p ? p : -Math.pow(2, 8 * (p - 1)) * Math.sin((80 * (p - 1) - 7.5) * Math.PI / 15)
            },
            Back: function(p) {
                return p * p * (3 * p - 2)
            },
            Bounce: function(p) {
                for (var pow2, bounce = 4; p < ((pow2 = Math.pow(2, --bounce)) - 1) / 11;);
                return 1 / Math.pow(4, 3 - bounce) - 7.5625 * Math.pow((3 * pow2 - 2) / 22 - p, 2)
            }
        }), $.each(baseEasings, function(name, easeIn) {
            $.easing["easeIn" + name] = easeIn, $.easing["easeOut" + name] = function(p) {
                return 1 - easeIn(1 - p)
            }, $.easing["easeInOut" + name] = function(p) {
                return .5 > p ? easeIn(2 * p) / 2 : 1 - easeIn(-2 * p + 2) / 2
            }
        })
    }();
    $.effects, $.effects.effect.blind = function(o, done) {
        var wrapper, distance, margin, el = $(this),
            rvertical = /up|down|vertical/,
            rpositivemotion = /up|left|vertical|horizontal/,
            props = ["position", "top", "bottom", "left", "right", "height", "width"],
            mode = $.effects.setMode(el, o.mode || "hide"),
            direction = o.direction || "up",
            vertical = rvertical.test(direction),
            ref = vertical ? "height" : "width",
            ref2 = vertical ? "top" : "left",
            motion = rpositivemotion.test(direction),
            animation = {}, show = "show" === mode;
        el.parent().is(".ui-effects-wrapper") ? $.effects.save(el.parent(), props) : $.effects.save(el, props), el.show(), wrapper = $.effects.createWrapper(el).css({
            overflow: "hidden"
        }), distance = wrapper[ref](), margin = parseFloat(wrapper.css(ref2)) || 0, animation[ref] = show ? distance : 0, motion || (el.css(vertical ? "bottom" : "right", 0).css(vertical ? "top" : "left", "auto").css({
            position: "absolute"
        }), animation[ref2] = show ? margin : distance + margin), show && (wrapper.css(ref, 0), motion || wrapper.css(ref2, margin + distance)), wrapper.animate(animation, {
            duration: o.duration,
            easing: o.easing,
            queue: !1,
            complete: function() {
                "hide" === mode && el.hide(), $.effects.restore(el, props), $.effects.removeWrapper(el), done()
            }
        })
    }, $.effects.effect.bounce = function(o, done) {
        var i, upAnim, downAnim, el = $(this),
            props = ["position", "top", "bottom", "left", "right", "height", "width"],
            mode = $.effects.setMode(el, o.mode || "effect"),
            hide = "hide" === mode,
            show = "show" === mode,
            direction = o.direction || "up",
            distance = o.distance,
            times = o.times || 5,
            anims = 2 * times + (show || hide ? 1 : 0),
            speed = o.duration / anims,
            easing = o.easing,
            ref = "up" === direction || "down" === direction ? "top" : "left",
            motion = "up" === direction || "left" === direction,
            queue = el.queue(),
            queuelen = queue.length;
        for ((show || hide) && props.push("opacity"), $.effects.save(el, props), el.show(), $.effects.createWrapper(el), distance || (distance = el["top" === ref ? "outerHeight" : "outerWidth"]() / 3), show && (downAnim = {
            opacity: 1
        }, downAnim[ref] = 0, el.css("opacity", 0).css(ref, motion ? 2 * -distance : 2 * distance).animate(downAnim, speed, easing)), hide && (distance /= Math.pow(2, times - 1)), downAnim = {}, downAnim[ref] = 0, i = 0; times > i; i++) upAnim = {}, upAnim[ref] = (motion ? "-=" : "+=") + distance, el.animate(upAnim, speed, easing).animate(downAnim, speed, easing), distance = hide ? 2 * distance : distance / 2;
        hide && (upAnim = {
            opacity: 0
        }, upAnim[ref] = (motion ? "-=" : "+=") + distance, el.animate(upAnim, speed, easing)), el.queue(function() {
            hide && el.hide(), $.effects.restore(el, props), $.effects.removeWrapper(el), done()
        }), queuelen > 1 && queue.splice.apply(queue, [1, 0].concat(queue.splice(queuelen, anims + 1))), el.dequeue()
    }, $.effects.effect.clip = function(o, done) {
        var wrapper, animate, distance, el = $(this),
            props = ["position", "top", "bottom", "left", "right", "height", "width"],
            mode = $.effects.setMode(el, o.mode || "hide"),
            show = "show" === mode,
            direction = o.direction || "vertical",
            vert = "vertical" === direction,
            size = vert ? "height" : "width",
            position = vert ? "top" : "left",
            animation = {};
        $.effects.save(el, props), el.show(), wrapper = $.effects.createWrapper(el).css({
            overflow: "hidden"
        }), animate = "IMG" === el[0].tagName ? wrapper : el, distance = animate[size](), show && (animate.css(size, 0), animate.css(position, distance / 2)), animation[size] = show ? distance : 0, animation[position] = show ? 0 : distance / 2, animate.animate(animation, {
            queue: !1,
            duration: o.duration,
            easing: o.easing,
            complete: function() {
                show || el.hide(), $.effects.restore(el, props), $.effects.removeWrapper(el), done()
            }
        })
    }, $.effects.effect.drop = function(o, done) {
        var distance, el = $(this),
            props = ["position", "top", "bottom", "left", "right", "opacity", "height", "width"],
            mode = $.effects.setMode(el, o.mode || "hide"),
            show = "show" === mode,
            direction = o.direction || "left",
            ref = "up" === direction || "down" === direction ? "top" : "left",
            motion = "up" === direction || "left" === direction ? "pos" : "neg",
            animation = {
                opacity: show ? 1 : 0
            };
        $.effects.save(el, props), el.show(), $.effects.createWrapper(el), distance = o.distance || el["top" === ref ? "outerHeight" : "outerWidth"](!0) / 2, show && el.css("opacity", 0).css(ref, "pos" === motion ? -distance : distance), animation[ref] = (show ? "pos" === motion ? "+=" : "-=" : "pos" === motion ? "-=" : "+=") + distance, el.animate(animation, {
            queue: !1,
            duration: o.duration,
            easing: o.easing,
            complete: function() {
                "hide" === mode && el.hide(), $.effects.restore(el, props), $.effects.removeWrapper(el), done()
            }
        })
    }, $.effects.effect.explode = function(o, done) {
        function childComplete() {
            pieces.push(this), pieces.length === rows * cells && animComplete()
        }

        function animComplete() {
            el.css({
                visibility: "visible"
            }), $(pieces).remove(), show || el.hide(), done()
        }
        var i, j, left, top, mx, my, rows = o.pieces ? Math.round(Math.sqrt(o.pieces)) : 3,
            cells = rows,
            el = $(this),
            mode = $.effects.setMode(el, o.mode || "hide"),
            show = "show" === mode,
            offset = el.show().css("visibility", "hidden").offset(),
            width = Math.ceil(el.outerWidth() / cells),
            height = Math.ceil(el.outerHeight() / rows),
            pieces = [];
        for (i = 0; rows > i; i++)
            for (top = offset.top + i * height, my = i - (rows - 1) / 2, j = 0; cells > j; j++) left = offset.left + j * width, mx = j - (cells - 1) / 2, el.clone().appendTo("body").wrap("<div></div>").css({
                position: "absolute",
                visibility: "visible",
                left: -j * width,
                top: -i * height
            }).parent().addClass("ui-effects-explode").css({
                position: "absolute",
                overflow: "hidden",
                width: width,
                height: height,
                left: left + (show ? mx * width : 0),
                top: top + (show ? my * height : 0),
                opacity: show ? 0 : 1
            }).animate({
                left: left + (show ? 0 : mx * width),
                top: top + (show ? 0 : my * height),
                opacity: show ? 1 : 0
            }, o.duration || 500, o.easing, childComplete)
    }, $.effects.effect.fade = function(o, done) {
        var el = $(this),
            mode = $.effects.setMode(el, o.mode || "toggle");
        el.animate({
            opacity: mode
        }, {
            queue: !1,
            duration: o.duration,
            easing: o.easing,
            complete: done
        })
    }, $.effects.effect.fold = function(o, done) {
        var wrapper, distance, el = $(this),
            props = ["position", "top", "bottom", "left", "right", "height", "width"],
            mode = $.effects.setMode(el, o.mode || "hide"),
            show = "show" === mode,
            hide = "hide" === mode,
            size = o.size || 15,
            percent = /([0-9]+)%/.exec(size),
            horizFirst = !! o.horizFirst,
            widthFirst = show !== horizFirst,
            ref = widthFirst ? ["width", "height"] : ["height", "width"],
            duration = o.duration / 2,
            animation1 = {}, animation2 = {};
        $.effects.save(el, props), el.show(), wrapper = $.effects.createWrapper(el).css({
            overflow: "hidden"
        }), distance = widthFirst ? [wrapper.width(), wrapper.height()] : [wrapper.height(), wrapper.width()], percent && (size = parseInt(percent[1], 10) / 100 * distance[hide ? 0 : 1]), show && wrapper.css(horizFirst ? {
            height: 0,
            width: size
        } : {
            height: size,
            width: 0
        }), animation1[ref[0]] = show ? distance[0] : size, animation2[ref[1]] = show ? distance[1] : 0, wrapper.animate(animation1, duration, o.easing).animate(animation2, duration, o.easing, function() {
            hide && el.hide(), $.effects.restore(el, props), $.effects.removeWrapper(el), done()
        })
    }, $.effects.effect.highlight = function(o, done) {
        var elem = $(this),
            props = ["backgroundImage", "backgroundColor", "opacity"],
            mode = $.effects.setMode(elem, o.mode || "show"),
            animation = {
                backgroundColor: elem.css("backgroundColor")
            };
        "hide" === mode && (animation.opacity = 0), $.effects.save(elem, props), elem.show().css({
            backgroundImage: "none",
            backgroundColor: o.color || "#ffff99"
        }).animate(animation, {
            queue: !1,
            duration: o.duration,
            easing: o.easing,
            complete: function() {
                "hide" === mode && elem.hide(), $.effects.restore(elem, props), done()
            }
        })
    }, $.effects.effect.size = function(o, done) {
        var original, baseline, factor, el = $(this),
            props0 = ["position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity"],
            props1 = ["position", "top", "bottom", "left", "right", "overflow", "opacity"],
            props2 = ["width", "height", "overflow"],
            cProps = ["fontSize"],
            vProps = ["borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom"],
            hProps = ["borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight"],
            mode = $.effects.setMode(el, o.mode || "effect"),
            restore = o.restore || "effect" !== mode,
            scale = o.scale || "both",
            origin = o.origin || ["middle", "center"],
            position = el.css("position"),
            props = restore ? props0 : props1,
            zero = {
                height: 0,
                width: 0,
                outerHeight: 0,
                outerWidth: 0
            };
        "show" === mode && el.show(), original = {
            height: el.height(),
            width: el.width(),
            outerHeight: el.outerHeight(),
            outerWidth: el.outerWidth()
        }, "toggle" === o.mode && "show" === mode ? (el.from = o.to || zero, el.to = o.from || original) : (el.from = o.from || ("show" === mode ? zero : original), el.to = o.to || ("hide" === mode ? zero : original)), factor = {
            from: {
                y: el.from.height / original.height,
                x: el.from.width / original.width
            },
            to: {
                y: el.to.height / original.height,
                x: el.to.width / original.width
            }
        }, ("box" === scale || "both" === scale) && (factor.from.y !== factor.to.y && (props = props.concat(vProps), el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from), el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to)), factor.from.x !== factor.to.x && (props = props.concat(hProps), el.from = $.effects.setTransition(el, hProps, factor.from.x, el.from), el.to = $.effects.setTransition(el, hProps, factor.to.x, el.to))), ("content" === scale || "both" === scale) && factor.from.y !== factor.to.y && (props = props.concat(cProps).concat(props2), el.from = $.effects.setTransition(el, cProps, factor.from.y, el.from), el.to = $.effects.setTransition(el, cProps, factor.to.y, el.to)), $.effects.save(el, props), el.show(), $.effects.createWrapper(el), el.css("overflow", "hidden").css(el.from), origin && (baseline = $.effects.getBaseline(origin, original), el.from.top = (original.outerHeight - el.outerHeight()) * baseline.y, el.from.left = (original.outerWidth - el.outerWidth()) * baseline.x, el.to.top = (original.outerHeight - el.to.outerHeight) * baseline.y, el.to.left = (original.outerWidth - el.to.outerWidth) * baseline.x), el.css(el.from), ("content" === scale || "both" === scale) && (vProps = vProps.concat(["marginTop", "marginBottom"]).concat(cProps), hProps = hProps.concat(["marginLeft", "marginRight"]), props2 = props0.concat(vProps).concat(hProps), el.find("*[width]").each(function() {
            var child = $(this),
                c_original = {
                    height: child.height(),
                    width: child.width(),
                    outerHeight: child.outerHeight(),
                    outerWidth: child.outerWidth()
                };
            restore && $.effects.save(child, props2), child.from = {
                height: c_original.height * factor.from.y,
                width: c_original.width * factor.from.x,
                outerHeight: c_original.outerHeight * factor.from.y,
                outerWidth: c_original.outerWidth * factor.from.x
            }, child.to = {
                height: c_original.height * factor.to.y,
                width: c_original.width * factor.to.x,
                outerHeight: c_original.height * factor.to.y,
                outerWidth: c_original.width * factor.to.x
            }, factor.from.y !== factor.to.y && (child.from = $.effects.setTransition(child, vProps, factor.from.y, child.from), child.to = $.effects.setTransition(child, vProps, factor.to.y, child.to)), factor.from.x !== factor.to.x && (child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from), child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to)), child.css(child.from), child.animate(child.to, o.duration, o.easing, function() {
                restore && $.effects.restore(child, props2)
            })
        })), el.animate(el.to, {
            queue: !1,
            duration: o.duration,
            easing: o.easing,
            complete: function() {
                0 === el.to.opacity && el.css("opacity", el.from.opacity), "hide" === mode && el.hide(), $.effects.restore(el, props), restore || ("static" === position ? el.css({
                    position: "relative",
                    top: el.to.top,
                    left: el.to.left
                }) : $.each(["top", "left"], function(idx, pos) {
                    el.css(pos, function(_, str) {
                        var val = parseInt(str, 10),
                            toRef = idx ? el.to.left : el.to.top;
                        return "auto" === str ? toRef + "px" : val + toRef + "px"
                    })
                })), $.effects.removeWrapper(el), done()
            }
        })
    }, $.effects.effect.scale = function(o, done) {
        var el = $(this),
            options = $.extend(!0, {}, o),
            mode = $.effects.setMode(el, o.mode || "effect"),
            percent = parseInt(o.percent, 10) || (0 === parseInt(o.percent, 10) ? 0 : "hide" === mode ? 0 : 100),
            direction = o.direction || "both",
            origin = o.origin,
            original = {
                height: el.height(),
                width: el.width(),
                outerHeight: el.outerHeight(),
                outerWidth: el.outerWidth()
            }, factor = {
                y: "horizontal" !== direction ? percent / 100 : 1,
                x: "vertical" !== direction ? percent / 100 : 1
            };
        options.effect = "size", options.queue = !1, options.complete = done, "effect" !== mode && (options.origin = origin || ["middle", "center"], options.restore = !0), options.from = o.from || ("show" === mode ? {
            height: 0,
            width: 0,
            outerHeight: 0,
            outerWidth: 0
        } : original), options.to = {
            height: original.height * factor.y,
            width: original.width * factor.x,
            outerHeight: original.outerHeight * factor.y,
            outerWidth: original.outerWidth * factor.x
        }, options.fade && ("show" === mode && (options.from.opacity = 0, options.to.opacity = 1), "hide" === mode && (options.from.opacity = 1, options.to.opacity = 0)), el.effect(options)
    }, $.effects.effect.puff = function(o, done) {
        var elem = $(this),
            mode = $.effects.setMode(elem, o.mode || "hide"),
            hide = "hide" === mode,
            percent = parseInt(o.percent, 10) || 150,
            factor = percent / 100,
            original = {
                height: elem.height(),
                width: elem.width(),
                outerHeight: elem.outerHeight(),
                outerWidth: elem.outerWidth()
            };
        $.extend(o, {
            effect: "scale",
            queue: !1,
            fade: !0,
            mode: mode,
            complete: done,
            percent: hide ? percent : 100,
            from: hide ? original : {
                height: original.height * factor,
                width: original.width * factor,
                outerHeight: original.outerHeight * factor,
                outerWidth: original.outerWidth * factor
            }
        }), elem.effect(o)
    }, $.effects.effect.pulsate = function(o, done) {
        var i, elem = $(this),
            mode = $.effects.setMode(elem, o.mode || "show"),
            show = "show" === mode,
            hide = "hide" === mode,
            showhide = show || "hide" === mode,
            anims = 2 * (o.times || 5) + (showhide ? 1 : 0),
            duration = o.duration / anims,
            animateTo = 0,
            queue = elem.queue(),
            queuelen = queue.length;
        for ((show || !elem.is(":visible")) && (elem.css("opacity", 0).show(), animateTo = 1), i = 1; anims > i; i++) elem.animate({
            opacity: animateTo
        }, duration, o.easing), animateTo = 1 - animateTo;
        elem.animate({
            opacity: animateTo
        }, duration, o.easing), elem.queue(function() {
            hide && elem.hide(), done()
        }), queuelen > 1 && queue.splice.apply(queue, [1, 0].concat(queue.splice(queuelen, anims + 1))), elem.dequeue()
    }, $.effects.effect.shake = function(o, done) {
        var i, el = $(this),
            props = ["position", "top", "bottom", "left", "right", "height", "width"],
            mode = $.effects.setMode(el, o.mode || "effect"),
            direction = o.direction || "left",
            distance = o.distance || 20,
            times = o.times || 3,
            anims = 2 * times + 1,
            speed = Math.round(o.duration / anims),
            ref = "up" === direction || "down" === direction ? "top" : "left",
            positiveMotion = "up" === direction || "left" === direction,
            animation = {}, animation1 = {}, animation2 = {}, queue = el.queue(),
            queuelen = queue.length;
        for ($.effects.save(el, props), el.show(), $.effects.createWrapper(el), animation[ref] = (positiveMotion ? "-=" : "+=") + distance, animation1[ref] = (positiveMotion ? "+=" : "-=") + 2 * distance, animation2[ref] = (positiveMotion ? "-=" : "+=") + 2 * distance, el.animate(animation, speed, o.easing), i = 1; times > i; i++) el.animate(animation1, speed, o.easing).animate(animation2, speed, o.easing);
        el.animate(animation1, speed, o.easing).animate(animation, speed / 2, o.easing).queue(function() {
            "hide" === mode && el.hide(), $.effects.restore(el, props), $.effects.removeWrapper(el), done()
        }), queuelen > 1 && queue.splice.apply(queue, [1, 0].concat(queue.splice(queuelen, anims + 1))), el.dequeue()
    }, $.effects.effect.slide = function(o, done) {
        var distance, el = $(this),
            props = ["position", "top", "bottom", "left", "right", "width", "height"],
            mode = $.effects.setMode(el, o.mode || "show"),
            show = "show" === mode,
            direction = o.direction || "left",
            ref = "up" === direction || "down" === direction ? "top" : "left",
            positiveMotion = "up" === direction || "left" === direction,
            animation = {};
        $.effects.save(el, props), el.show(), distance = o.distance || el["top" === ref ? "outerHeight" : "outerWidth"](!0), $.effects.createWrapper(el).css({
            overflow: "hidden"
        }), show && el.css(ref, positiveMotion ? isNaN(distance) ? "-" + distance : -distance : distance), animation[ref] = (show ? positiveMotion ? "+=" : "-=" : positiveMotion ? "-=" : "+=") + distance, el.animate(animation, {
            queue: !1,
            duration: o.duration,
            easing: o.easing,
            complete: function() {
                "hide" === mode && el.hide(), $.effects.restore(el, props), $.effects.removeWrapper(el), done()
            }
        })
    }, $.effects.effect.transfer = function(o, done) {
        var elem = $(this),
            target = $(o.to),
            targetFixed = "fixed" === target.css("position"),
            body = $("body"),
            fixTop = targetFixed ? body.scrollTop() : 0,
            fixLeft = targetFixed ? body.scrollLeft() : 0,
            endPosition = target.offset(),
            animation = {
                top: endPosition.top - fixTop,
                left: endPosition.left - fixLeft,
                height: target.innerHeight(),
                width: target.innerWidth()
            }, startPosition = elem.offset(),
            transfer = $("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(o.className).css({
                top: startPosition.top - fixTop,
                left: startPosition.left - fixLeft,
                height: elem.innerHeight(),
                width: elem.innerWidth(),
                position: targetFixed ? "fixed" : "absolute"
            }).animate(animation, o.duration, o.easing, function() {
                transfer.remove(), done()
            })
    }, $.widget("ui.progressbar", {
        version: "1.11.1",
        options: {
            max: 100,
            value: 0,
            change: null,
            complete: null
        },
        min: 0,
        _create: function() {
            this.oldValue = this.options.value = this._constrainedValue(), this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({
                role: "progressbar",
                "aria-valuemin": this.min
            }), this.valueDiv = $("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element), this._refreshValue()
        },
        _destroy: function() {
            this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"), this.valueDiv.remove()
        },
        value: function(newValue) {
            return void 0 === newValue ? this.options.value : (this.options.value = this._constrainedValue(newValue), void this._refreshValue())
        },
        _constrainedValue: function(newValue) {
            return void 0 === newValue && (newValue = this.options.value), this.indeterminate = newValue === !1, "number" != typeof newValue && (newValue = 0), this.indeterminate ? !1 : Math.min(this.options.max, Math.max(this.min, newValue))
        },
        _setOptions: function(options) {
            var value = options.value;
            delete options.value, this._super(options), this.options.value = this._constrainedValue(value), this._refreshValue()
        },
        _setOption: function(key, value) {
            "max" === key && (value = Math.max(this.min, value)), "disabled" === key && this.element.toggleClass("ui-state-disabled", !! value).attr("aria-disabled", value), this._super(key, value)
        },
        _percentage: function() {
            return this.indeterminate ? 100 : 100 * (this.options.value - this.min) / (this.options.max - this.min)
        },
        _refreshValue: function() {
            var value = this.options.value,
                percentage = this._percentage();
            this.valueDiv.toggle(this.indeterminate || value > this.min).toggleClass("ui-corner-right", value === this.options.max).width(percentage.toFixed(0) + "%"), this.element.toggleClass("ui-progressbar-indeterminate", this.indeterminate), this.indeterminate ? (this.element.removeAttr("aria-valuenow"), this.overlayDiv || (this.overlayDiv = $("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))) : (this.element.attr({
                "aria-valuemax": this.options.max,
                "aria-valuenow": value
            }), this.overlayDiv && (this.overlayDiv.remove(), this.overlayDiv = null)), this.oldValue !== value && (this.oldValue = value, this._trigger("change")), value === this.options.max && this._trigger("complete")
        }
    }), $.widget("ui.selectable", $.ui.mouse, {
        version: "1.11.1",
        options: {
            appendTo: "body",
            autoRefresh: !0,
            distance: 0,
            filter: "*",
            tolerance: "touch",
            selected: null,
            selecting: null,
            start: null,
            stop: null,
            unselected: null,
            unselecting: null
        },
        _create: function() {
            var selectees, that = this;
            this.element.addClass("ui-selectable"), this.dragged = !1, this.refresh = function() {
                selectees = $(that.options.filter, that.element[0]), selectees.addClass("ui-selectee"), selectees.each(function() {
                    var $this = $(this),
                        pos = $this.offset();
                    $.data(this, "selectable-item", {
                        element: this,
                        $element: $this,
                        left: pos.left,
                        top: pos.top,
                        right: pos.left + $this.outerWidth(),
                        bottom: pos.top + $this.outerHeight(),
                        startselected: !1,
                        selected: $this.hasClass("ui-selected"),
                        selecting: $this.hasClass("ui-selecting"),
                        unselecting: $this.hasClass("ui-unselecting")
                    })
                })
            }, this.refresh(), this.selectees = selectees.addClass("ui-selectee"), this._mouseInit(), this.helper = $("<div class='ui-selectable-helper'></div>")
        },
        _destroy: function() {
            this.selectees.removeClass("ui-selectee").removeData("selectable-item"), this.element.removeClass("ui-selectable ui-selectable-disabled"), this._mouseDestroy()
        },
        _mouseStart: function(event) {
            var that = this,
                options = this.options;
            this.opos = [event.pageX, event.pageY], this.options.disabled || (this.selectees = $(options.filter, this.element[0]), this._trigger("start", event), $(options.appendTo).append(this.helper), this.helper.css({
                left: event.pageX,
                top: event.pageY,
                width: 0,
                height: 0
            }), options.autoRefresh && this.refresh(), this.selectees.filter(".ui-selected").each(function() {
                var selectee = $.data(this, "selectable-item");
                selectee.startselected = !0, event.metaKey || event.ctrlKey || (selectee.$element.removeClass("ui-selected"), selectee.selected = !1, selectee.$element.addClass("ui-unselecting"), selectee.unselecting = !0, that._trigger("unselecting", event, {
                    unselecting: selectee.element
                }))
            }), $(event.target).parents().addBack().each(function() {
                var doSelect, selectee = $.data(this, "selectable-item");
                return selectee ? (doSelect = !event.metaKey && !event.ctrlKey || !selectee.$element.hasClass("ui-selected"), selectee.$element.removeClass(doSelect ? "ui-unselecting" : "ui-selected").addClass(doSelect ? "ui-selecting" : "ui-unselecting"), selectee.unselecting = !doSelect, selectee.selecting = doSelect, selectee.selected = doSelect, doSelect ? that._trigger("selecting", event, {
                    selecting: selectee.element
                }) : that._trigger("unselecting", event, {
                    unselecting: selectee.element
                }), !1) : void 0
            }))
        },
        _mouseDrag: function(event) {
            if (this.dragged = !0, !this.options.disabled) {
                var tmp, that = this,
                    options = this.options,
                    x1 = this.opos[0],
                    y1 = this.opos[1],
                    x2 = event.pageX,
                    y2 = event.pageY;
                return x1 > x2 && (tmp = x2, x2 = x1, x1 = tmp), y1 > y2 && (tmp = y2, y2 = y1, y1 = tmp), this.helper.css({
                    left: x1,
                    top: y1,
                    width: x2 - x1,
                    height: y2 - y1
                }), this.selectees.each(function() {
                    var selectee = $.data(this, "selectable-item"),
                        hit = !1;
                    selectee && selectee.element !== that.element[0] && ("touch" === options.tolerance ? hit = !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) : "fit" === options.tolerance && (hit = selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2), hit ? (selectee.selected && (selectee.$element.removeClass("ui-selected"), selectee.selected = !1), selectee.unselecting && (selectee.$element.removeClass("ui-unselecting"), selectee.unselecting = !1), selectee.selecting || (selectee.$element.addClass("ui-selecting"), selectee.selecting = !0, that._trigger("selecting", event, {
                        selecting: selectee.element
                    }))) : (selectee.selecting && ((event.metaKey || event.ctrlKey) && selectee.startselected ? (selectee.$element.removeClass("ui-selecting"), selectee.selecting = !1, selectee.$element.addClass("ui-selected"), selectee.selected = !0) : (selectee.$element.removeClass("ui-selecting"), selectee.selecting = !1, selectee.startselected && (selectee.$element.addClass("ui-unselecting"), selectee.unselecting = !0), that._trigger("unselecting", event, {
                        unselecting: selectee.element
                    }))), selectee.selected && (event.metaKey || event.ctrlKey || selectee.startselected || (selectee.$element.removeClass("ui-selected"), selectee.selected = !1, selectee.$element.addClass("ui-unselecting"), selectee.unselecting = !0, that._trigger("unselecting", event, {
                        unselecting: selectee.element
                    })))))
                }), !1
            }
        },
        _mouseStop: function(event) {
            var that = this;
            return this.dragged = !1, $(".ui-unselecting", this.element[0]).each(function() {
                var selectee = $.data(this, "selectable-item");
                selectee.$element.removeClass("ui-unselecting"), selectee.unselecting = !1, selectee.startselected = !1, that._trigger("unselected", event, {
                    unselected: selectee.element
                })
            }), $(".ui-selecting", this.element[0]).each(function() {
                var selectee = $.data(this, "selectable-item");
                selectee.$element.removeClass("ui-selecting").addClass("ui-selected"), selectee.selecting = !1, selectee.selected = !0, selectee.startselected = !0, that._trigger("selected", event, {
                    selected: selectee.element
                })
            }), this._trigger("stop", event), this.helper.remove(), !1
        }
    }), $.widget("ui.selectmenu", {
        version: "1.11.1",
        defaultElement: "<select>",
        options: {
            appendTo: null,
            disabled: null,
            icons: {
                button: "ui-icon-triangle-1-s"
            },
            position: {
                my: "left top",
                at: "left bottom",
                collision: "none"
            },
            width: null,
            change: null,
            close: null,
            focus: null,
            open: null,
            select: null
        },
        _create: function() {
            var selectmenuId = this.element.uniqueId().attr("id");
            this.ids = {
                element: selectmenuId,
                button: selectmenuId + "-button",
                menu: selectmenuId + "-menu"
            }, this._drawButton(), this._drawMenu(), this.options.disabled && this.disable()
        },
        _drawButton: function() {
            var that = this,
                tabindex = this.element.attr("tabindex");
            this.label = $("label[for='" + this.ids.element + "']").attr("for", this.ids.button), this._on(this.label, {
                click: function(event) {
                    this.button.focus(), event.preventDefault()
                }
            }), this.element.hide(), this.button = $("<span>", {
                "class": "ui-selectmenu-button ui-widget ui-state-default ui-corner-all",
                tabindex: tabindex || this.options.disabled ? -1 : 0,
                id: this.ids.button,
                role: "combobox",
                "aria-expanded": "false",
                "aria-autocomplete": "list",
                "aria-owns": this.ids.menu,
                "aria-haspopup": "true"
            }).insertAfter(this.element), $("<span>", {
                "class": "ui-icon " + this.options.icons.button
            }).prependTo(this.button), this.buttonText = $("<span>", {
                "class": "ui-selectmenu-text"
            }).appendTo(this.button), this._setText(this.buttonText, this.element.find("option:selected").text()), this._resizeButton(), this._on(this.button, this._buttonEvents), this.button.one("focusin", function() {
                that.menuItems || that._refreshMenu()
            }), this._hoverable(this.button), this._focusable(this.button)
        },
        _drawMenu: function() {
            var that = this;
            this.menu = $("<ul>", {
                "aria-hidden": "true",
                "aria-labelledby": this.ids.button,
                id: this.ids.menu
            }), this.menuWrap = $("<div>", {
                "class": "ui-selectmenu-menu ui-front"
            }).append(this.menu).appendTo(this._appendTo()), this.menuInstance = this.menu.menu({
                role: "listbox",
                select: function(event, ui) {
                    event.preventDefault(), that._select(ui.item.data("ui-selectmenu-item"), event)
                },
                focus: function(event, ui) {
                    var item = ui.item.data("ui-selectmenu-item");
                    null != that.focusIndex && item.index !== that.focusIndex && (that._trigger("focus", event, {
                        item: item
                    }), that.isOpen || that._select(item, event)), that.focusIndex = item.index, that.button.attr("aria-activedescendant", that.menuItems.eq(item.index).attr("id"))
                }
            }).menu("instance"), this.menu.addClass("ui-corner-bottom").removeClass("ui-corner-all"), this.menuInstance._off(this.menu, "mouseleave"), this.menuInstance._closeOnDocumentClick = function() {
                return !1
            }, this.menuInstance._isDivider = function() {
                return !1
            }
        },
        refresh: function() {
            this._refreshMenu(), this._setText(this.buttonText, this._getSelectedItem().text()), this.options.width || this._resizeButton()
        },
        _refreshMenu: function() {
            this.menu.empty();
            var item, options = this.element.find("option");
            options.length && (this._parseOptions(options), this._renderMenu(this.menu, this.items), this.menuInstance.refresh(), this.menuItems = this.menu.find("li").not(".ui-selectmenu-optgroup"), item = this._getSelectedItem(), this.menuInstance.focus(null, item), this._setAria(item.data("ui-selectmenu-item")), this._setOption("disabled", this.element.prop("disabled")))
        },
        open: function(event) {
            this.options.disabled || (this.menuItems ? (this.menu.find(".ui-state-focus").removeClass("ui-state-focus"), this.menuInstance.focus(null, this._getSelectedItem())) : this._refreshMenu(), this.isOpen = !0, this._toggleAttr(), this._resizeMenu(), this._position(), this._on(this.document, this._documentClick), this._trigger("open", event))
        },
        _position: function() {
            this.menuWrap.position($.extend({
                of: this.button
            }, this.options.position))
        },
        close: function(event) {
            this.isOpen && (this.isOpen = !1, this._toggleAttr(), this._off(this.document), this._trigger("close", event))
        },
        widget: function() {
            return this.button
        },
        menuWidget: function() {
            return this.menu
        },
        _renderMenu: function(ul, items) {
            var that = this,
                currentOptgroup = "";
            $.each(items, function(index, item) {
                item.optgroup !== currentOptgroup && ($("<li>", {
                    "class": "ui-selectmenu-optgroup ui-menu-divider" + (item.element.parent("optgroup").prop("disabled") ? " ui-state-disabled" : ""),
                    text: item.optgroup
                }).appendTo(ul), currentOptgroup = item.optgroup), that._renderItemData(ul, item)
            })
        },
        _renderItemData: function(ul, item) {
            return this._renderItem(ul, item).data("ui-selectmenu-item", item)
        },
        _renderItem: function(ul, item) {
            var li = $("<li>");
            return item.disabled && li.addClass("ui-state-disabled"), this._setText(li, item.label), li.appendTo(ul)
        },
        _setText: function(element, value) {
            value ? element.text(value) : element.html("&#160;")
        },
        _move: function(direction, event) {
            var item, next, filter = ".ui-menu-item";
            this.isOpen ? item = this.menuItems.eq(this.focusIndex) : (item = this.menuItems.eq(this.element[0].selectedIndex), filter += ":not(.ui-state-disabled)"), next = "first" === direction || "last" === direction ? item["first" === direction ? "prevAll" : "nextAll"](filter).eq(-1) : item[direction + "All"](filter).eq(0), next.length && this.menuInstance.focus(event, next)
        },
        _getSelectedItem: function() {
            return this.menuItems.eq(this.element[0].selectedIndex)
        },
        _toggle: function(event) {
            this[this.isOpen ? "close" : "open"](event)
        },
        _documentClick: {
            mousedown: function(event) {
                this.isOpen && ($(event.target).closest(".ui-selectmenu-menu, #" + this.ids.button).length || this.close(event))
            }
        },
        _buttonEvents: {
            mousedown: function(event) {
                event.preventDefault()
            },
            click: "_toggle",
            keydown: function(event) {
                var preventDefault = !0;
                switch (event.keyCode) {
                    case $.ui.keyCode.TAB:
                    case $.ui.keyCode.ESCAPE:
                        this.close(event), preventDefault = !1;
                        break;
                    case $.ui.keyCode.ENTER:
                        this.isOpen && this._selectFocusedItem(event);
                        break;
                    case $.ui.keyCode.UP:
                        event.altKey ? this._toggle(event) : this._move("prev", event);
                        break;
                    case $.ui.keyCode.DOWN:
                        event.altKey ? this._toggle(event) : this._move("next", event);
                        break;
                    case $.ui.keyCode.SPACE:
                        this.isOpen ? this._selectFocusedItem(event) : this._toggle(event);
                        break;
                    case $.ui.keyCode.LEFT:
                        this._move("prev", event);
                        break;
                    case $.ui.keyCode.RIGHT:
                        this._move("next", event);
                        break;
                    case $.ui.keyCode.HOME:
                    case $.ui.keyCode.PAGE_UP:
                        this._move("first", event);
                        break;
                    case $.ui.keyCode.END:
                    case $.ui.keyCode.PAGE_DOWN:
                        this._move("last", event);
                        break;
                    default:
                        this.menu.trigger(event), preventDefault = !1
                }
                preventDefault && event.preventDefault()
            }
        },
        _selectFocusedItem: function(event) {
            var item = this.menuItems.eq(this.focusIndex);
            item.hasClass("ui-state-disabled") || this._select(item.data("ui-selectmenu-item"), event)
        },
        _select: function(item, event) {
            var oldIndex = this.element[0].selectedIndex;
            this.element[0].selectedIndex = item.index, this._setText(this.buttonText, item.label), this._setAria(item), this._trigger("select", event, {
                item: item
            }), item.index !== oldIndex && this._trigger("change", event, {
                item: item
            }), this.close(event)
        },
        _setAria: function(item) {
            var id = this.menuItems.eq(item.index).attr("id");
            this.button.attr({
                "aria-labelledby": id,
                "aria-activedescendant": id
            }), this.menu.attr("aria-activedescendant", id)
        },
        _setOption: function(key, value) {
            "icons" === key && this.button.find("span.ui-icon").removeClass(this.options.icons.button).addClass(value.button), this._super(key, value), "appendTo" === key && this.menuWrap.appendTo(this._appendTo()), "disabled" === key && (this.menuInstance.option("disabled", value), this.button.toggleClass("ui-state-disabled", value).attr("aria-disabled", value), this.element.prop("disabled", value), value ? (this.button.attr("tabindex", -1), this.close()) : this.button.attr("tabindex", 0)), "width" === key && this._resizeButton()
        },
        _appendTo: function() {
            var element = this.options.appendTo;
            return element && (element = element.jquery || element.nodeType ? $(element) : this.document.find(element).eq(0)), element && element[0] || (element = this.element.closest(".ui-front")), element.length || (element = this.document[0].body), element
        },
        _toggleAttr: function() {
            this.button.toggleClass("ui-corner-top", this.isOpen).toggleClass("ui-corner-all", !this.isOpen).attr("aria-expanded", this.isOpen), this.menuWrap.toggleClass("ui-selectmenu-open", this.isOpen), this.menu.attr("aria-hidden", !this.isOpen)
        },
        _resizeButton: function() {
            var width = this.options.width;
            width || (width = this.element.show().outerWidth(), this.element.hide()), this.button.outerWidth(width)
        },
        _resizeMenu: function() {
            this.menu.outerWidth(Math.max(this.button.outerWidth(), this.menu.width("").outerWidth() + 1))
        },
        _getCreateOptions: function() {
            return {
                disabled: this.element.prop("disabled")
            }
        },
        _parseOptions: function(options) {
            var data = [];
            options.each(function(index, item) {
                var option = $(item),
                    optgroup = option.parent("optgroup");
                data.push({
                    element: option,
                    index: index,
                    value: option.attr("value"),
                    label: option.text(),
                    optgroup: optgroup.attr("label") || "",
                    disabled: optgroup.prop("disabled") || option.prop("disabled")
                })
            }), this.items = data
        },
        _destroy: function() {
            this.menuWrap.remove(), this.button.remove(), this.element.show(), this.element.removeUniqueId(), this.label.attr("for", this.ids.element)
        }
    }), $.widget("ui.slider", $.ui.mouse, {
        version: "1.11.1",
        widgetEventPrefix: "slide",
        options: {
            animate: !1,
            distance: 0,
            max: 100,
            min: 0,
            orientation: "horizontal",
            range: !1,
            step: 1,
            value: 0,
            values: null,
            change: null,
            slide: null,
            start: null,
            stop: null
        },
        numPages: 5,
        _create: function() {
            this._keySliding = !1, this._mouseSliding = !1, this._animateOff = !0, this._handleIndex = null, this._detectOrientation(), this._mouseInit(), this.element.addClass("ui-slider ui-slider-" + this.orientation + " ui-widget ui-widget-content ui-corner-all"), this._refresh(), this._setOption("disabled", this.options.disabled), this._animateOff = !1
        },
        _refresh: function() {
            this._createRange(), this._createHandles(), this._setupEvents(), this._refreshValue()
        },
        _createHandles: function() {
            var i, handleCount, options = this.options,
                existingHandles = this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),
                handle = "<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",
                handles = [];
            for (handleCount = options.values && options.values.length || 1, existingHandles.length > handleCount && (existingHandles.slice(handleCount).remove(), existingHandles = existingHandles.slice(0, handleCount)), i = existingHandles.length; handleCount > i; i++) handles.push(handle);
            this.handles = existingHandles.add($(handles.join("")).appendTo(this.element)), this.handle = this.handles.eq(0), this.handles.each(function(i) {
                $(this).data("ui-slider-handle-index", i)
            })
        },
        _createRange: function() {
            var options = this.options,
                classes = "";
            options.range ? (options.range === !0 && (options.values ? options.values.length && 2 !== options.values.length ? options.values = [options.values[0], options.values[0]] : $.isArray(options.values) && (options.values = options.values.slice(0)) : options.values = [this._valueMin(), this._valueMin()]), this.range && this.range.length ? this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({
                left: "",
                bottom: ""
            }) : (this.range = $("<div></div>").appendTo(this.element), classes = "ui-slider-range ui-widget-header ui-corner-all"), this.range.addClass(classes + ("min" === options.range || "max" === options.range ? " ui-slider-range-" + options.range : ""))) : (this.range && this.range.remove(), this.range = null)
        },
        _setupEvents: function() {
            this._off(this.handles), this._on(this.handles, this._handleEvents), this._hoverable(this.handles), this._focusable(this.handles)
        },
        _destroy: function() {
            this.handles.remove(), this.range && this.range.remove(), this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"), this._mouseDestroy()
        },
        _mouseCapture: function(event) {
            var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle, that = this,
                o = this.options;
            return o.disabled ? !1 : (this.elementSize = {
                width: this.element.outerWidth(),
                height: this.element.outerHeight()
            }, this.elementOffset = this.element.offset(), position = {
                x: event.pageX,
                y: event.pageY
            }, normValue = this._normValueFromMouse(position), distance = this._valueMax() - this._valueMin() + 1, this.handles.each(function(i) {
                var thisDistance = Math.abs(normValue - that.values(i));
                (distance > thisDistance || distance === thisDistance && (i === that._lastChangedValue || that.values(i) === o.min)) && (distance = thisDistance, closestHandle = $(this), index = i)
            }), allowed = this._start(event, index), allowed === !1 ? !1 : (this._mouseSliding = !0, this._handleIndex = index, closestHandle.addClass("ui-state-active").focus(), offset = closestHandle.offset(), mouseOverHandle = !$(event.target).parents().addBack().is(".ui-slider-handle"), this._clickOffset = mouseOverHandle ? {
                left: 0,
                top: 0
            } : {
                left: event.pageX - offset.left - closestHandle.width() / 2,
                top: event.pageY - offset.top - closestHandle.height() / 2 - (parseInt(closestHandle.css("borderTopWidth"), 10) || 0) - (parseInt(closestHandle.css("borderBottomWidth"), 10) || 0) + (parseInt(closestHandle.css("marginTop"), 10) || 0)
            }, this.handles.hasClass("ui-state-hover") || this._slide(event, index, normValue), this._animateOff = !0, !0))
        },
        _mouseStart: function() {
            return !0
        },
        _mouseDrag: function(event) {
            var position = {
                x: event.pageX,
                y: event.pageY
            }, normValue = this._normValueFromMouse(position);
            return this._slide(event, this._handleIndex, normValue), !1
        },
        _mouseStop: function(event) {
            return this.handles.removeClass("ui-state-active"), this._mouseSliding = !1, this._stop(event, this._handleIndex), this._change(event, this._handleIndex), this._handleIndex = null, this._clickOffset = null, this._animateOff = !1, !1
        },
        _detectOrientation: function() {
            this.orientation = "vertical" === this.options.orientation ? "vertical" : "horizontal"
        },
        _normValueFromMouse: function(position) {
            var pixelTotal, pixelMouse, percentMouse, valueTotal, valueMouse;
            return "horizontal" === this.orientation ? (pixelTotal = this.elementSize.width, pixelMouse = position.x - this.elementOffset.left - (this._clickOffset ? this._clickOffset.left : 0)) : (pixelTotal = this.elementSize.height, pixelMouse = position.y - this.elementOffset.top - (this._clickOffset ? this._clickOffset.top : 0)), percentMouse = pixelMouse / pixelTotal, percentMouse > 1 && (percentMouse = 1), 0 > percentMouse && (percentMouse = 0), "vertical" === this.orientation && (percentMouse = 1 - percentMouse), valueTotal = this._valueMax() - this._valueMin(), valueMouse = this._valueMin() + percentMouse * valueTotal, this._trimAlignValue(valueMouse)
        },
        _start: function(event, index) {
            var uiHash = {
                handle: this.handles[index],
                value: this.value()
            };
            return this.options.values && this.options.values.length && (uiHash.value = this.values(index), uiHash.values = this.values()), this._trigger("start", event, uiHash)
        },
        _slide: function(event, index, newVal) {
            var otherVal, newValues, allowed;
            this.options.values && this.options.values.length ? (otherVal = this.values(index ? 0 : 1), 2 === this.options.values.length && this.options.range === !0 && (0 === index && newVal > otherVal || 1 === index && otherVal > newVal) && (newVal = otherVal), newVal !== this.values(index) && (newValues = this.values(), newValues[index] = newVal, allowed = this._trigger("slide", event, {
                handle: this.handles[index],
                value: newVal,
                values: newValues
            }), otherVal = this.values(index ? 0 : 1), allowed !== !1 && this.values(index, newVal))) : newVal !== this.value() && (allowed = this._trigger("slide", event, {
                handle: this.handles[index],
                value: newVal
            }), allowed !== !1 && this.value(newVal))
        },
        _stop: function(event, index) {
            var uiHash = {
                handle: this.handles[index],
                value: this.value()
            };
            this.options.values && this.options.values.length && (uiHash.value = this.values(index), uiHash.values = this.values()), this._trigger("stop", event, uiHash)
        },
        _change: function(event, index) {
            if (!this._keySliding && !this._mouseSliding) {
                var uiHash = {
                    handle: this.handles[index],
                    value: this.value()
                };
                this.options.values && this.options.values.length && (uiHash.value = this.values(index), uiHash.values = this.values()), this._lastChangedValue = index, this._trigger("change", event, uiHash)
            }
        },
        value: function(newValue) {
            return arguments.length ? (this.options.value = this._trimAlignValue(newValue), this._refreshValue(), void this._change(null, 0)) : this._value()
        },
        values: function(index, newValue) {
            var vals, newValues, i;
            if (arguments.length > 1) return this.options.values[index] = this._trimAlignValue(newValue), this._refreshValue(), void this._change(null, index);
            if (!arguments.length) return this._values();
            if (!$.isArray(arguments[0])) return this.options.values && this.options.values.length ? this._values(index) : this.value();
            for (vals = this.options.values, newValues = arguments[0], i = 0; i < vals.length; i += 1) vals[i] = this._trimAlignValue(newValues[i]), this._change(null, i);
            this._refreshValue()
        },
        _setOption: function(key, value) {
            var i, valsLength = 0;
            switch ("range" === key && this.options.range === !0 && ("min" === value ? (this.options.value = this._values(0), this.options.values = null) : "max" === value && (this.options.value = this._values(this.options.values.length - 1), this.options.values = null)), $.isArray(this.options.values) && (valsLength = this.options.values.length), "disabled" === key && this.element.toggleClass("ui-state-disabled", !! value), this._super(key, value), key) {
                case "orientation":
                    this._detectOrientation(), this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-" + this.orientation), this._refreshValue(), this.handles.css("horizontal" === value ? "bottom" : "left", "");
                    break;
                case "value":
                    this._animateOff = !0, this._refreshValue(), this._change(null, 0), this._animateOff = !1;
                    break;
                case "values":
                    for (this._animateOff = !0, this._refreshValue(), i = 0; valsLength > i; i += 1) this._change(null, i);
                    this._animateOff = !1;
                    break;
                case "min":
                case "max":
                    this._animateOff = !0, this._refreshValue(), this._animateOff = !1;
                    break;
                case "range":
                    this._animateOff = !0, this._refresh(), this._animateOff = !1
            }
        },
        _value: function() {
            var val = this.options.value;
            return val = this._trimAlignValue(val)
        },
        _values: function(index) {
            var val, vals, i;
            if (arguments.length) return val = this.options.values[index], val = this._trimAlignValue(val);
            if (this.options.values && this.options.values.length) {
                for (vals = this.options.values.slice(), i = 0; i < vals.length; i += 1) vals[i] = this._trimAlignValue(vals[i]);
                return vals
            }
            return []
        },
        _trimAlignValue: function(val) {
            if (val <= this._valueMin()) return this._valueMin();
            if (val >= this._valueMax()) return this._valueMax();
            var step = this.options.step > 0 ? this.options.step : 1,
                valModStep = (val - this._valueMin()) % step,
                alignValue = val - valModStep;
            return 2 * Math.abs(valModStep) >= step && (alignValue += valModStep > 0 ? step : -step), parseFloat(alignValue.toFixed(5))
        },
        _valueMin: function() {
            return this.options.min
        },
        _valueMax: function() {
            return this.options.max
        },
        _refreshValue: function() {
            var lastValPercent, valPercent, value, valueMin, valueMax, oRange = this.options.range,
                o = this.options,
                that = this,
                animate = this._animateOff ? !1 : o.animate,
                _set = {};
            this.options.values && this.options.values.length ? this.handles.each(function(i) {
                valPercent = (that.values(i) - that._valueMin()) / (that._valueMax() - that._valueMin()) * 100, _set["horizontal" === that.orientation ? "left" : "bottom"] = valPercent + "%", $(this).stop(1, 1)[animate ? "animate" : "css"](_set, o.animate), that.options.range === !0 && ("horizontal" === that.orientation ? (0 === i && that.range.stop(1, 1)[animate ? "animate" : "css"]({
                    left: valPercent + "%"
                }, o.animate), 1 === i && that.range[animate ? "animate" : "css"]({
                    width: valPercent - lastValPercent + "%"
                }, {
                    queue: !1,
                    duration: o.animate
                })) : (0 === i && that.range.stop(1, 1)[animate ? "animate" : "css"]({
                    bottom: valPercent + "%"
                }, o.animate), 1 === i && that.range[animate ? "animate" : "css"]({
                    height: valPercent - lastValPercent + "%"
                }, {
                    queue: !1,
                    duration: o.animate
                }))), lastValPercent = valPercent
            }) : (value = this.value(), valueMin = this._valueMin(), valueMax = this._valueMax(), valPercent = valueMax !== valueMin ? (value - valueMin) / (valueMax - valueMin) * 100 : 0, _set["horizontal" === this.orientation ? "left" : "bottom"] = valPercent + "%", this.handle.stop(1, 1)[animate ? "animate" : "css"](_set, o.animate), "min" === oRange && "horizontal" === this.orientation && this.range.stop(1, 1)[animate ? "animate" : "css"]({
                width: valPercent + "%"
            }, o.animate), "max" === oRange && "horizontal" === this.orientation && this.range[animate ? "animate" : "css"]({
                width: 100 - valPercent + "%"
            }, {
                queue: !1,
                duration: o.animate
            }), "min" === oRange && "vertical" === this.orientation && this.range.stop(1, 1)[animate ? "animate" : "css"]({
                height: valPercent + "%"
            }, o.animate), "max" === oRange && "vertical" === this.orientation && this.range[animate ? "animate" : "css"]({
                height: 100 - valPercent + "%"
            }, {
                queue: !1,
                duration: o.animate
            }))
        },
        _handleEvents: {
            keydown: function(event) {
                var allowed, curVal, newVal, step, index = $(event.target).data("ui-slider-handle-index");
                switch (event.keyCode) {
                    case $.ui.keyCode.HOME:
                    case $.ui.keyCode.END:
                    case $.ui.keyCode.PAGE_UP:
                    case $.ui.keyCode.PAGE_DOWN:
                    case $.ui.keyCode.UP:
                    case $.ui.keyCode.RIGHT:
                    case $.ui.keyCode.DOWN:
                    case $.ui.keyCode.LEFT:
                        if (event.preventDefault(), !this._keySliding && (this._keySliding = !0, $(event.target).addClass("ui-state-active"), allowed = this._start(event, index), allowed === !1)) return
                }
                switch (step = this.options.step, curVal = newVal = this.options.values && this.options.values.length ? this.values(index) : this.value(), event.keyCode) {
                    case $.ui.keyCode.HOME:
                        newVal = this._valueMin();
                        break;
                    case $.ui.keyCode.END:
                        newVal = this._valueMax();
                        break;
                    case $.ui.keyCode.PAGE_UP:
                        newVal = this._trimAlignValue(curVal + (this._valueMax() - this._valueMin()) / this.numPages);
                        break;
                    case $.ui.keyCode.PAGE_DOWN:
                        newVal = this._trimAlignValue(curVal - (this._valueMax() - this._valueMin()) / this.numPages);
                        break;
                    case $.ui.keyCode.UP:
                    case $.ui.keyCode.RIGHT:
                        if (curVal === this._valueMax()) return;
                        newVal = this._trimAlignValue(curVal + step);
                        break;
                    case $.ui.keyCode.DOWN:
                    case $.ui.keyCode.LEFT:
                        if (curVal === this._valueMin()) return;
                        newVal = this._trimAlignValue(curVal - step)
                }
                this._slide(event, index, newVal)
            },
            keyup: function(event) {
                var index = $(event.target).data("ui-slider-handle-index");
                this._keySliding && (this._keySliding = !1, this._stop(event, index), this._change(event, index), $(event.target).removeClass("ui-state-active"))
            }
        }
    }), $.widget("ui.sortable", $.ui.mouse, {
        version: "1.11.1",
        widgetEventPrefix: "sort",
        ready: !1,
        options: {
            appendTo: "parent",
            axis: !1,
            connectWith: !1,
            containment: !1,
            cursor: "auto",
            cursorAt: !1,
            dropOnEmpty: !0,
            forcePlaceholderSize: !1,
            forceHelperSize: !1,
            grid: !1,
            handle: !1,
            helper: "original",
            items: "> *",
            opacity: !1,
            placeholder: !1,
            revert: !1,
            scroll: !0,
            scrollSensitivity: 20,
            scrollSpeed: 20,
            scope: "default",
            tolerance: "intersect",
            zIndex: 1e3,
            activate: null,
            beforeStop: null,
            change: null,
            deactivate: null,
            out: null,
            over: null,
            receive: null,
            remove: null,
            sort: null,
            start: null,
            stop: null,
            update: null
        },
        _isOverAxis: function(x, reference, size) {
            return x >= reference && reference + size > x
        },
        _isFloating: function(item) {
            return /left|right/.test(item.css("float")) || /inline|table-cell/.test(item.css("display"))
        },
        _create: function() {
            var o = this.options;
            this.containerCache = {}, this.element.addClass("ui-sortable"), this.refresh(), this.floating = this.items.length ? "x" === o.axis || this._isFloating(this.items[0].item) : !1, this.offset = this.element.offset(), this._mouseInit(), this._setHandleClassName(), this.ready = !0
        },
        _setOption: function(key, value) {
            this._super(key, value), "handle" === key && this._setHandleClassName()
        },
        _setHandleClassName: function() {
            this.element.find(".ui-sortable-handle").removeClass("ui-sortable-handle"), $.each(this.items, function() {
                (this.instance.options.handle ? this.item.find(this.instance.options.handle) : this.item).addClass("ui-sortable-handle")
            })
        },
        _destroy: function() {
            this.element.removeClass("ui-sortable ui-sortable-disabled").find(".ui-sortable-handle").removeClass("ui-sortable-handle"), this._mouseDestroy();
            for (var i = this.items.length - 1; i >= 0; i--) this.items[i].item.removeData(this.widgetName + "-item");
            return this
        },
        _mouseCapture: function(event, overrideHandle) {
            var currentItem = null,
                validHandle = !1,
                that = this;
            return this.reverting ? !1 : this.options.disabled || "static" === this.options.type ? !1 : (this._refreshItems(event), $(event.target).parents().each(function() {
                return $.data(this, that.widgetName + "-item") === that ? (currentItem = $(this), !1) : void 0
            }), $.data(event.target, that.widgetName + "-item") === that && (currentItem = $(event.target)), currentItem && (!this.options.handle || overrideHandle || ($(this.options.handle, currentItem).find("*").addBack().each(function() {
                this === event.target && (validHandle = !0)
            }), validHandle)) ? (this.currentItem = currentItem, this._removeCurrentsFromItems(), !0) : !1)
        },
        _mouseStart: function(event, overrideHandle, noActivation) {
            var i, body, o = this.options;
            if (this.currentContainer = this, this.refreshPositions(), this.helper = this._createHelper(event), this._cacheHelperProportions(), this._cacheMargins(), this.scrollParent = this.helper.scrollParent(), this.offset = this.currentItem.offset(), this.offset = {
                top: this.offset.top - this.margins.top,
                left: this.offset.left - this.margins.left
            }, $.extend(this.offset, {
                click: {
                    left: event.pageX - this.offset.left,
                    top: event.pageY - this.offset.top
                },
                parent: this._getParentOffset(),
                relative: this._getRelativeOffset()
            }), this.helper.css("position", "absolute"), this.cssPosition = this.helper.css("position"), this.originalPosition = this._generatePosition(event), this.originalPageX = event.pageX, this.originalPageY = event.pageY, o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt), this.domPosition = {
                prev: this.currentItem.prev()[0],
                parent: this.currentItem.parent()[0]
            }, this.helper[0] !== this.currentItem[0] && this.currentItem.hide(), this._createPlaceholder(), o.containment && this._setContainment(), o.cursor && "auto" !== o.cursor && (body = this.document.find("body"), this.storedCursor = body.css("cursor"), body.css("cursor", o.cursor), this.storedStylesheet = $("<style>*{ cursor: " + o.cursor + " !important; }</style>").appendTo(body)), o.opacity && (this.helper.css("opacity") && (this._storedOpacity = this.helper.css("opacity")), this.helper.css("opacity", o.opacity)), o.zIndex && (this.helper.css("zIndex") && (this._storedZIndex = this.helper.css("zIndex")), this.helper.css("zIndex", o.zIndex)), this.scrollParent[0] !== document && "HTML" !== this.scrollParent[0].tagName && (this.overflowOffset = this.scrollParent.offset()), this._trigger("start", event, this._uiHash()), this._preserveHelperProportions || this._cacheHelperProportions(), !noActivation)
                for (i = this.containers.length - 1; i >= 0; i--) this.containers[i]._trigger("activate", event, this._uiHash(this));
            return $.ui.ddmanager && ($.ui.ddmanager.current = this), $.ui.ddmanager && !o.dropBehaviour && $.ui.ddmanager.prepareOffsets(this, event), this.dragging = !0, this.helper.addClass("ui-sortable-helper"), this._mouseDrag(event), !0
        },
        _mouseDrag: function(event) {
            var i, item, itemElement, intersection, o = this.options,
                scrolled = !1;
            for (this.position = this._generatePosition(event), this.positionAbs = this._convertPositionTo("absolute"), this.lastPositionAbs || (this.lastPositionAbs = this.positionAbs), this.options.scroll && (this.scrollParent[0] !== document && "HTML" !== this.scrollParent[0].tagName ? (this.overflowOffset.top + this.scrollParent[0].offsetHeight - event.pageY < o.scrollSensitivity ? this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed : event.pageY - this.overflowOffset.top < o.scrollSensitivity && (this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed), this.overflowOffset.left + this.scrollParent[0].offsetWidth - event.pageX < o.scrollSensitivity ? this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed : event.pageX - this.overflowOffset.left < o.scrollSensitivity && (this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed)) : (event.pageY - $(document).scrollTop() < o.scrollSensitivity ? scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed) : $(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity && (scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed)), event.pageX - $(document).scrollLeft() < o.scrollSensitivity ? scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed) : $(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity && (scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed))), scrolled !== !1 && $.ui.ddmanager && !o.dropBehaviour && $.ui.ddmanager.prepareOffsets(this, event)), this.positionAbs = this._convertPositionTo("absolute"), this.options.axis && "y" === this.options.axis || (this.helper[0].style.left = this.position.left + "px"), this.options.axis && "x" === this.options.axis || (this.helper[0].style.top = this.position.top + "px"), i = this.items.length - 1; i >= 0; i--)
                if (item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item), intersection && item.instance === this.currentContainer && itemElement !== this.currentItem[0] && this.placeholder[1 === intersection ? "next" : "prev"]()[0] !== itemElement && !$.contains(this.placeholder[0], itemElement) && ("semi-dynamic" === this.options.type ? !$.contains(this.element[0], itemElement) : !0)) {
                    if (this.direction = 1 === intersection ? "down" : "up", "pointer" !== this.options.tolerance && !this._intersectsWithSides(item)) break;
                    this._rearrange(event, item), this._trigger("change", event, this._uiHash());
                    break
                }
            return this._contactContainers(event), $.ui.ddmanager && $.ui.ddmanager.drag(this, event), this._trigger("sort", event, this._uiHash()), this.lastPositionAbs = this.positionAbs, !1
        },
        _mouseStop: function(event, noPropagation) {
            if (event) {
                if ($.ui.ddmanager && !this.options.dropBehaviour && $.ui.ddmanager.drop(this, event), this.options.revert) {
                    var that = this,
                        cur = this.placeholder.offset(),
                        axis = this.options.axis,
                        animation = {};
                    axis && "x" !== axis || (animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft)), axis && "y" !== axis || (animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop)), this.reverting = !0, $(this.helper).animate(animation, parseInt(this.options.revert, 10) || 500, function() {
                        that._clear(event)
                    })
                } else this._clear(event, noPropagation);
                return !1
            }
        },
        cancel: function() {
            if (this.dragging) {
                this._mouseUp({
                    target: null
                }), "original" === this.options.helper ? this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper") : this.currentItem.show();
                for (var i = this.containers.length - 1; i >= 0; i--) this.containers[i]._trigger("deactivate", null, this._uiHash(this)), this.containers[i].containerCache.over && (this.containers[i]._trigger("out", null, this._uiHash(this)), this.containers[i].containerCache.over = 0)
            }
            return this.placeholder && (this.placeholder[0].parentNode && this.placeholder[0].parentNode.removeChild(this.placeholder[0]), "original" !== this.options.helper && this.helper && this.helper[0].parentNode && this.helper.remove(), $.extend(this, {
                helper: null,
                dragging: !1,
                reverting: !1,
                _noFinalSort: null
            }), this.domPosition.prev ? $(this.domPosition.prev).after(this.currentItem) : $(this.domPosition.parent).prepend(this.currentItem)), this
        },
        serialize: function(o) {
            var items = this._getItemsAsjQuery(o && o.connected),
                str = [];
            return o = o || {}, $(items).each(function() {
                var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || /(.+)[\-=_](.+)/);
                res && str.push((o.key || res[1] + "[]") + "=" + (o.key && o.expression ? res[1] : res[2]))
            }), !str.length && o.key && str.push(o.key + "="), str.join("&")
        },
        toArray: function(o) {
            var items = this._getItemsAsjQuery(o && o.connected),
                ret = [];
            return o = o || {}, items.each(function() {
                ret.push($(o.item || this).attr(o.attribute || "id") || "")
            }), ret
        },
        _intersectsWith: function(item) {
            var x1 = this.positionAbs.left,
                x2 = x1 + this.helperProportions.width,
                y1 = this.positionAbs.top,
                y2 = y1 + this.helperProportions.height,
                l = item.left,
                r = l + item.width,
                t = item.top,
                b = t + item.height,
                dyClick = this.offset.click.top,
                dxClick = this.offset.click.left,
                isOverElementHeight = "x" === this.options.axis || y1 + dyClick > t && b > y1 + dyClick,
                isOverElementWidth = "y" === this.options.axis || x1 + dxClick > l && r > x1 + dxClick,
                isOverElement = isOverElementHeight && isOverElementWidth;
            return "pointer" === this.options.tolerance || this.options.forcePointerForContainers || "pointer" !== this.options.tolerance && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"] ? isOverElement : l < x1 + this.helperProportions.width / 2 && x2 - this.helperProportions.width / 2 < r && t < y1 + this.helperProportions.height / 2 && y2 - this.helperProportions.height / 2 < b
        },
        _intersectsWithPointer: function(item) {
            var isOverElementHeight = "x" === this.options.axis || this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
                isOverElementWidth = "y" === this.options.axis || this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
                isOverElement = isOverElementHeight && isOverElementWidth,
                verticalDirection = this._getDragVerticalDirection(),
                horizontalDirection = this._getDragHorizontalDirection();
            return isOverElement ? this.floating ? horizontalDirection && "right" === horizontalDirection || "down" === verticalDirection ? 2 : 1 : verticalDirection && ("down" === verticalDirection ? 2 : 1) : !1
        },
        _intersectsWithSides: function(item) {
            var isOverBottomHalf = this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + item.height / 2, item.height),
                isOverRightHalf = this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + item.width / 2, item.width),
                verticalDirection = this._getDragVerticalDirection(),
                horizontalDirection = this._getDragHorizontalDirection();
            return this.floating && horizontalDirection ? "right" === horizontalDirection && isOverRightHalf || "left" === horizontalDirection && !isOverRightHalf : verticalDirection && ("down" === verticalDirection && isOverBottomHalf || "up" === verticalDirection && !isOverBottomHalf)
        },
        _getDragVerticalDirection: function() {
            var delta = this.positionAbs.top - this.lastPositionAbs.top;
            return 0 !== delta && (delta > 0 ? "down" : "up")
        },
        _getDragHorizontalDirection: function() {
            var delta = this.positionAbs.left - this.lastPositionAbs.left;
            return 0 !== delta && (delta > 0 ? "right" : "left")
        },
        refresh: function(event) {
            return this._refreshItems(event), this._setHandleClassName(), this.refreshPositions(), this
        },
        _connectWith: function() {
            var options = this.options;
            return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith
        },
        _getItemsAsjQuery: function(connected) {
            function addItems() {
                items.push(this)
            }
            var i, j, cur, inst, items = [],
                queries = [],
                connectWith = this._connectWith();
            if (connectWith && connected)
                for (i = connectWith.length - 1; i >= 0; i--)
                    for (cur = $(connectWith[i]), j = cur.length - 1; j >= 0; j--) inst = $.data(cur[j], this.widgetFullName), inst && inst !== this && !inst.options.disabled && queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]);
            for (queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, {
                options: this.options,
                item: this.currentItem
            }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]), i = queries.length - 1; i >= 0; i--) queries[i][0].each(addItems);
            return $(items)
        },
        _removeCurrentsFromItems: function() {
            var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
            this.items = $.grep(this.items, function(item) {
                for (var j = 0; j < list.length; j++)
                    if (list[j] === item.item[0]) return !1;
                return !0
            })
        },
        _refreshItems: function(event) {
            this.items = [], this.containers = [this];
            var i, j, cur, inst, targetData, _queries, item, queriesLength, items = this.items,
                queries = [
                    [$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, {
                        item: this.currentItem
                    }) : $(this.options.items, this.element), this]
                ],
                connectWith = this._connectWith();
            if (connectWith && this.ready)
                for (i = connectWith.length - 1; i >= 0; i--)
                    for (cur = $(connectWith[i]), j = cur.length - 1; j >= 0; j--) inst = $.data(cur[j], this.widgetFullName), inst && inst !== this && !inst.options.disabled && (queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, {
                        item: this.currentItem
                    }) : $(inst.options.items, inst.element), inst]), this.containers.push(inst));
            for (i = queries.length - 1; i >= 0; i--)
                for (targetData = queries[i][1], _queries = queries[i][0], j = 0, queriesLength = _queries.length; queriesLength > j; j++) item = $(_queries[j]), item.data(this.widgetName + "-item", targetData), items.push({
                    item: item,
                    instance: targetData,
                    width: 0,
                    height: 0,
                    left: 0,
                    top: 0
                })
        },
        refreshPositions: function(fast) {
            this.offsetParent && this.helper && (this.offset.parent = this._getParentOffset());
            var i, item, t, p;
            for (i = this.items.length - 1; i >= 0; i--) item = this.items[i], item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0] || (t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item, fast || (item.width = t.outerWidth(), item.height = t.outerHeight()), p = t.offset(), item.left = p.left, item.top = p.top);
            if (this.options.custom && this.options.custom.refreshContainers) this.options.custom.refreshContainers.call(this);
            else
                for (i = this.containers.length - 1; i >= 0; i--) p = this.containers[i].element.offset(), this.containers[i].containerCache.left = p.left, this.containers[i].containerCache.top = p.top, this.containers[i].containerCache.width = this.containers[i].element.outerWidth(), this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
            return this
        },
        _createPlaceholder: function(that) {
            that = that || this;
            var className, o = that.options;
            o.placeholder && o.placeholder.constructor !== String || (className = o.placeholder, o.placeholder = {
                element: function() {
                    var nodeName = that.currentItem[0].nodeName.toLowerCase(),
                        element = $("<" + nodeName + ">", that.document[0]).addClass(className || that.currentItem[0].className + " ui-sortable-placeholder").removeClass("ui-sortable-helper");
                    return "tr" === nodeName ? that.currentItem.children().each(function() {
                        $("<td>&#160;</td>", that.document[0]).attr("colspan", $(this).attr("colspan") || 1).appendTo(element)
                    }) : "img" === nodeName && element.attr("src", that.currentItem.attr("src")), className || element.css("visibility", "hidden"), element
                },
                update: function(container, p) {
                    (!className || o.forcePlaceholderSize) && (p.height() || p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop") || 0, 10) - parseInt(that.currentItem.css("paddingBottom") || 0, 10)), p.width() || p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft") || 0, 10) - parseInt(that.currentItem.css("paddingRight") || 0, 10)))
                }
            }), that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem)), that.currentItem.after(that.placeholder), o.placeholder.update(that, that.placeholder)
        },
        _contactContainers: function(event) {
            var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom, floating, axis, innermostContainer = null,
                innermostIndex = null;
            for (i = this.containers.length - 1; i >= 0; i--)
                if (!$.contains(this.currentItem[0], this.containers[i].element[0]))
                    if (this._intersectsWith(this.containers[i].containerCache)) {
                        if (innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) continue;
                        innermostContainer = this.containers[i], innermostIndex = i
                    } else this.containers[i].containerCache.over && (this.containers[i]._trigger("out", event, this._uiHash(this)), this.containers[i].containerCache.over = 0);
            if (innermostContainer)
                if (1 === this.containers.length) this.containers[innermostIndex].containerCache.over || (this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)), this.containers[innermostIndex].containerCache.over = 1);
                else {
                    for (dist = 1e4, itemWithLeastDistance = null, floating = innermostContainer.floating || this._isFloating(this.currentItem), posProperty = floating ? "left" : "top", sizeProperty = floating ? "width" : "height", axis = floating ? "clientX" : "clientY", j = this.items.length - 1; j >= 0; j--) $.contains(this.containers[innermostIndex].element[0], this.items[j].item[0]) && this.items[j].item[0] !== this.currentItem[0] && (cur = this.items[j].item.offset()[posProperty], nearBottom = !1, event[axis] - cur > this.items[j][sizeProperty] / 2 && (nearBottom = !0), Math.abs(event[axis] - cur) < dist && (dist = Math.abs(event[axis] - cur), itemWithLeastDistance = this.items[j], this.direction = nearBottom ? "up" : "down"));
                    if (!itemWithLeastDistance && !this.options.dropOnEmpty) return;
                    if (this.currentContainer === this.containers[innermostIndex]) return;
                    itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, !0) : this._rearrange(event, null, this.containers[innermostIndex].element, !0), this._trigger("change", event, this._uiHash()), this.containers[innermostIndex]._trigger("change", event, this._uiHash(this)), this.currentContainer = this.containers[innermostIndex], this.options.placeholder.update(this.currentContainer, this.placeholder), this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)), this.containers[innermostIndex].containerCache.over = 1
                }
        },
        _createHelper: function(event) {
            var o = this.options,
                helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : "clone" === o.helper ? this.currentItem.clone() : this.currentItem;
            return helper.parents("body").length || $("parent" !== o.appendTo ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]), helper[0] === this.currentItem[0] && (this._storedCSS = {
                width: this.currentItem[0].style.width,
                height: this.currentItem[0].style.height,
                position: this.currentItem.css("position"),
                top: this.currentItem.css("top"),
                left: this.currentItem.css("left")
            }), (!helper[0].style.width || o.forceHelperSize) && helper.width(this.currentItem.width()), (!helper[0].style.height || o.forceHelperSize) && helper.height(this.currentItem.height()), helper
        },
        _adjustOffsetFromHelper: function(obj) {
            "string" == typeof obj && (obj = obj.split(" ")), $.isArray(obj) && (obj = {
                left: +obj[0],
                top: +obj[1] || 0
            }), "left" in obj && (this.offset.click.left = obj.left + this.margins.left), "right" in obj && (this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left), "top" in obj && (this.offset.click.top = obj.top + this.margins.top), "bottom" in obj && (this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top)
        },
        _getParentOffset: function() {
            this.offsetParent = this.helper.offsetParent();
            var po = this.offsetParent.offset();
            return "absolute" === this.cssPosition && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0]) && (po.left += this.scrollParent.scrollLeft(), po.top += this.scrollParent.scrollTop()), (this.offsetParent[0] === document.body || this.offsetParent[0].tagName && "html" === this.offsetParent[0].tagName.toLowerCase() && $.ui.ie) && (po = {
                top: 0,
                left: 0
            }), {
                top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
                left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
            }
        },
        _getRelativeOffset: function() {
            if ("relative" === this.cssPosition) {
                var p = this.currentItem.position();
                return {
                    top: p.top - (parseInt(this.helper.css("top"), 10) || 0) + this.scrollParent.scrollTop(),
                    left: p.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft()
                }
            }
            return {
                top: 0,
                left: 0
            }
        },
        _cacheMargins: function() {
            this.margins = {
                left: parseInt(this.currentItem.css("marginLeft"), 10) || 0,
                top: parseInt(this.currentItem.css("marginTop"), 10) || 0
            }
        },
        _cacheHelperProportions: function() {
            this.helperProportions = {
                width: this.helper.outerWidth(),
                height: this.helper.outerHeight()
            }
        },
        _setContainment: function() {
            var ce, co, over, o = this.options;
            "parent" === o.containment && (o.containment = this.helper[0].parentNode), ("document" === o.containment || "window" === o.containment) && (this.containment = [0 - this.offset.relative.left - this.offset.parent.left, 0 - this.offset.relative.top - this.offset.parent.top, $("document" === o.containment ? document : window).width() - this.helperProportions.width - this.margins.left, ($("document" === o.containment ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top]), /^(document|window|parent)$/.test(o.containment) || (ce = $(o.containment)[0], co = $(o.containment).offset(), over = "hidden" !== $(ce).css("overflow"), this.containment = [co.left + (parseInt($(ce).css("borderLeftWidth"), 10) || 0) + (parseInt($(ce).css("paddingLeft"), 10) || 0) - this.margins.left, co.top + (parseInt($(ce).css("borderTopWidth"), 10) || 0) + (parseInt($(ce).css("paddingTop"), 10) || 0) - this.margins.top, co.left + (over ? Math.max(ce.scrollWidth, ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"), 10) || 0) - (parseInt($(ce).css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left, co.top + (over ? Math.max(ce.scrollHeight, ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"), 10) || 0) - (parseInt($(ce).css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top])
        },
        _convertPositionTo: function(d, pos) {
            pos || (pos = this.position);
            var mod = "absolute" === d ? 1 : -1,
                scroll = "absolute" !== this.cssPosition || this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent,
                scrollIsRootNode = /(html|body)/i.test(scroll[0].tagName);
            return {
                top: pos.top + this.offset.relative.top * mod + this.offset.parent.top * mod - ("fixed" === this.cssPosition ? -this.scrollParent.scrollTop() : scrollIsRootNode ? 0 : scroll.scrollTop()) * mod,
                left: pos.left + this.offset.relative.left * mod + this.offset.parent.left * mod - ("fixed" === this.cssPosition ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft()) * mod
            }
        },
        _generatePosition: function(event) {
            var top, left, o = this.options,
                pageX = event.pageX,
                pageY = event.pageY,
                scroll = "absolute" !== this.cssPosition || this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent,
                scrollIsRootNode = /(html|body)/i.test(scroll[0].tagName);
            return "relative" !== this.cssPosition || this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0] || (this.offset.relative = this._getRelativeOffset()), this.originalPosition && (this.containment && (event.pageX - this.offset.click.left < this.containment[0] && (pageX = this.containment[0] + this.offset.click.left), event.pageY - this.offset.click.top < this.containment[1] && (pageY = this.containment[1] + this.offset.click.top), event.pageX - this.offset.click.left > this.containment[2] && (pageX = this.containment[2] + this.offset.click.left), event.pageY - this.offset.click.top > this.containment[3] && (pageY = this.containment[3] + this.offset.click.top)), o.grid && (top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1], pageY = this.containment ? top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3] ? top : top - this.offset.click.top >= this.containment[1] ? top - o.grid[1] : top + o.grid[1] : top, left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0], pageX = this.containment ? left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2] ? left : left - this.offset.click.left >= this.containment[0] ? left - o.grid[0] : left + o.grid[0] : left)), {
                top: pageY - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + ("fixed" === this.cssPosition ? -this.scrollParent.scrollTop() : scrollIsRootNode ? 0 : scroll.scrollTop()),
                left: pageX - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + ("fixed" === this.cssPosition ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft())
            }
        },
        _rearrange: function(event, i, a, hardRefresh) {
            a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], "down" === this.direction ? i.item[0] : i.item[0].nextSibling), this.counter = this.counter ? ++this.counter : 1;
            var counter = this.counter;
            this._delay(function() {
                counter === this.counter && this.refreshPositions(!hardRefresh)
            })
        },
        _clear: function(event, noPropagation) {
            function delayEvent(type, instance, container) {
                return function(event) {
                    container._trigger(type, event, instance._uiHash(instance))
                }
            }
            this.reverting = !1;
            var i, delayedTriggers = [];
            if (!this._noFinalSort && this.currentItem.parent().length && this.placeholder.before(this.currentItem), this._noFinalSort = null, this.helper[0] === this.currentItem[0]) {
                for (i in this._storedCSS)("auto" === this._storedCSS[i] || "static" === this._storedCSS[i]) && (this._storedCSS[i] = "");
                this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")
            } else this.currentItem.show();
            for (this.fromOutside && !noPropagation && delayedTriggers.push(function(event) {
                this._trigger("receive", event, this._uiHash(this.fromOutside))
            }), !this.fromOutside && this.domPosition.prev === this.currentItem.prev().not(".ui-sortable-helper")[0] && this.domPosition.parent === this.currentItem.parent()[0] || noPropagation || delayedTriggers.push(function(event) {
                this._trigger("update", event, this._uiHash())
            }), this !== this.currentContainer && (noPropagation || (delayedTriggers.push(function(event) {
                this._trigger("remove", event, this._uiHash())
            }), delayedTriggers.push(function(c) {
                return function(event) {
                    c._trigger("receive", event, this._uiHash(this))
                }
            }.call(this, this.currentContainer)), delayedTriggers.push(function(c) {
                return function(event) {
                    c._trigger("update", event, this._uiHash(this))
                }
            }.call(this, this.currentContainer)))), i = this.containers.length - 1; i >= 0; i--) noPropagation || delayedTriggers.push(delayEvent("deactivate", this, this.containers[i])), this.containers[i].containerCache.over && (delayedTriggers.push(delayEvent("out", this, this.containers[i])), this.containers[i].containerCache.over = 0);
            if (this.storedCursor && (this.document.find("body").css("cursor", this.storedCursor), this.storedStylesheet.remove()), this._storedOpacity && this.helper.css("opacity", this._storedOpacity), this._storedZIndex && this.helper.css("zIndex", "auto" === this._storedZIndex ? "" : this._storedZIndex), this.dragging = !1, this.cancelHelperRemoval) {
                if (!noPropagation) {
                    for (this._trigger("beforeStop", event, this._uiHash()), i = 0; i < delayedTriggers.length; i++) delayedTriggers[i].call(this, event);
                    this._trigger("stop", event, this._uiHash())
                }
                return this.fromOutside = !1, !1
            }
            if (noPropagation || this._trigger("beforeStop", event, this._uiHash()), this.placeholder[0].parentNode.removeChild(this.placeholder[0]), this.helper[0] !== this.currentItem[0] && this.helper.remove(), this.helper = null, !noPropagation) {
                for (i = 0; i < delayedTriggers.length; i++) delayedTriggers[i].call(this, event);
                this._trigger("stop", event, this._uiHash())
            }
            return this.fromOutside = !1, !0
        },
        _trigger: function() {
            $.Widget.prototype._trigger.apply(this, arguments) === !1 && this.cancel()
        },
        _uiHash: function(_inst) {
            var inst = _inst || this;
            return {
                helper: inst.helper,
                placeholder: inst.placeholder || $([]),
                position: inst.position,
                originalPosition: inst.originalPosition,
                offset: inst.positionAbs,
                item: inst.currentItem,
                sender: _inst ? _inst.element : null
            }
        }
    }), $.widget("ui.spinner", {
        version: "1.11.1",
        defaultElement: "<input>",
        widgetEventPrefix: "spin",
        options: {
            culture: null,
            icons: {
                down: "ui-icon-triangle-1-s",
                up: "ui-icon-triangle-1-n"
            },
            incremental: !0,
            max: null,
            min: null,
            numberFormat: null,
            page: 10,
            step: 1,
            change: null,
            spin: null,
            start: null,
            stop: null
        },
        _create: function() {
            this._setOption("max", this.options.max), this._setOption("min", this.options.min), this._setOption("step", this.options.step), "" !== this.value() && this._value(this.element.val(), !0), this._draw(), this._on(this._events), this._refresh(), this._on(this.window, {
                beforeunload: function() {
                    this.element.removeAttr("autocomplete")
                }
            })
        },
        _getCreateOptions: function() {
            var options = {}, element = this.element;
            return $.each(["min", "max", "step"], function(i, option) {
                var value = element.attr(option);
                void 0 !== value && value.length && (options[option] = value)
            }), options
        },
        _events: {
            keydown: function(event) {
                this._start(event) && this._keydown(event) && event.preventDefault()
            },
            keyup: "_stop",
            focus: function() {
                this.previous = this.element.val()
            },
            blur: function(event) {
                return this.cancelBlur ? void delete this.cancelBlur : (this._stop(), this._refresh(), void(this.previous !== this.element.val() && this._trigger("change", event)))
            },
            mousewheel: function(event, delta) {
                if (delta) {
                    if (!this.spinning && !this._start(event)) return !1;
                    this._spin((delta > 0 ? 1 : -1) * this.options.step, event), clearTimeout(this.mousewheelTimer), this.mousewheelTimer = this._delay(function() {
                        this.spinning && this._stop(event)
                    }, 100), event.preventDefault()
                }
            },
            "mousedown .ui-spinner-button": function(event) {
                function checkFocus() {
                    var isActive = this.element[0] === this.document[0].activeElement;
                    isActive || (this.element.focus(), this.previous = previous, this._delay(function() {
                        this.previous = previous
                    }))
                }
                var previous;
                previous = this.element[0] === this.document[0].activeElement ? this.previous : this.element.val(), event.preventDefault(), checkFocus.call(this), this.cancelBlur = !0, this._delay(function() {
                    delete this.cancelBlur, checkFocus.call(this)
                }), this._start(event) !== !1 && this._repeat(null, $(event.currentTarget).hasClass("ui-spinner-up") ? 1 : -1, event)
            },
            "mouseup .ui-spinner-button": "_stop",
            "mouseenter .ui-spinner-button": function(event) {
                return $(event.currentTarget).hasClass("ui-state-active") ? this._start(event) === !1 ? !1 : void this._repeat(null, $(event.currentTarget).hasClass("ui-spinner-up") ? 1 : -1, event) : void 0
            },
            "mouseleave .ui-spinner-button": "_stop"
        },
        _draw: function() {
            var uiSpinner = this.uiSpinner = this.element.addClass("ui-spinner-input").attr("autocomplete", "off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());
            this.element.attr("role", "spinbutton"), this.buttons = uiSpinner.find(".ui-spinner-button").attr("tabIndex", -1).button().removeClass("ui-corner-all"), this.buttons.height() > Math.ceil(.5 * uiSpinner.height()) && uiSpinner.height() > 0 && uiSpinner.height(uiSpinner.height()), this.options.disabled && this.disable()
        },
        _keydown: function(event) {
            var options = this.options,
                keyCode = $.ui.keyCode;
            switch (event.keyCode) {
                case keyCode.UP:
                    return this._repeat(null, 1, event), !0;
                case keyCode.DOWN:
                    return this._repeat(null, -1, event), !0;
                case keyCode.PAGE_UP:
                    return this._repeat(null, options.page, event), !0;
                case keyCode.PAGE_DOWN:
                    return this._repeat(null, -options.page, event), !0
            }
            return !1
        },
        _uiSpinnerHtml: function() {
            return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"
        },
        _buttonHtml: function() {
            return "<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon " + this.options.icons.up + "'>&#9650;</span></a><a class='ui-spinner-button ui-spinner-down ui-corner-br'><span class='ui-icon " + this.options.icons.down + "'>&#9660;</span></a>"
        },
        _start: function(event) {
            return this.spinning || this._trigger("start", event) !== !1 ? (this.counter || (this.counter = 1), this.spinning = !0, !0) : !1
        },
        _repeat: function(i, steps, event) {
            i = i || 500, clearTimeout(this.timer), this.timer = this._delay(function() {
                this._repeat(40, steps, event)
            }, i), this._spin(steps * this.options.step, event)
        },
        _spin: function(step, event) {
            var value = this.value() || 0;
            this.counter || (this.counter = 1), value = this._adjustValue(value + step * this._increment(this.counter)), this.spinning && this._trigger("spin", event, {
                value: value
            }) === !1 || (this._value(value), this.counter++)
        },
        _increment: function(i) {
            var incremental = this.options.incremental;
            return incremental ? $.isFunction(incremental) ? incremental(i) : Math.floor(i * i * i / 5e4 - i * i / 500 + 17 * i / 200 + 1) : 1
        },
        _precision: function() {
            var precision = this._precisionOf(this.options.step);
            return null !== this.options.min && (precision = Math.max(precision, this._precisionOf(this.options.min))), precision
        },
        _precisionOf: function(num) {
            var str = num.toString(),
                decimal = str.indexOf(".");
            return -1 === decimal ? 0 : str.length - decimal - 1
        },
        _adjustValue: function(value) {
            var base, aboveMin, options = this.options;
            return base = null !== options.min ? options.min : 0, aboveMin = value - base, aboveMin = Math.round(aboveMin / options.step) * options.step, value = base + aboveMin, value = parseFloat(value.toFixed(this._precision())), null !== options.max && value > options.max ? options.max : null !== options.min && value < options.min ? options.min : value
        },
        _stop: function(event) {
            this.spinning && (clearTimeout(this.timer), clearTimeout(this.mousewheelTimer), this.counter = 0, this.spinning = !1, this._trigger("stop", event))
        },
        _setOption: function(key, value) {
            if ("culture" === key || "numberFormat" === key) {
                var prevValue = this._parse(this.element.val());
                return this.options[key] = value, void this.element.val(this._format(prevValue))
            }("max" === key || "min" === key || "step" === key) && "string" == typeof value && (value = this._parse(value)), "icons" === key && (this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(value.up), this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(value.down)), this._super(key, value), "disabled" === key && (this.widget().toggleClass("ui-state-disabled", !! value), this.element.prop("disabled", !! value), this.buttons.button(value ? "disable" : "enable"))
        },
        _setOptions: spinner_modifier(function(options) {
            this._super(options)
        }),
        _parse: function(val) {
            return "string" == typeof val && "" !== val && (val = window.Globalize && this.options.numberFormat ? Globalize.parseFloat(val, 10, this.options.culture) : +val), "" === val || isNaN(val) ? null : val
        },
        _format: function(value) {
            return "" === value ? "" : window.Globalize && this.options.numberFormat ? Globalize.format(value, this.options.numberFormat, this.options.culture) : value
        },
        _refresh: function() {
            this.element.attr({
                "aria-valuemin": this.options.min,
                "aria-valuemax": this.options.max,
                "aria-valuenow": this._parse(this.element.val())
            })
        },
        isValid: function() {
            var value = this.value();
            return null === value ? !1 : value === this._adjustValue(value)
        },
        _value: function(value, allowAny) {
            var parsed;
            "" !== value && (parsed = this._parse(value), null !== parsed && (allowAny || (parsed = this._adjustValue(parsed)), value = this._format(parsed))), this.element.val(value), this._refresh()
        },
        _destroy: function() {
            this.element.removeClass("ui-spinner-input").prop("disabled", !1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"), this.uiSpinner.replaceWith(this.element)
        },
        stepUp: spinner_modifier(function(steps) {
            this._stepUp(steps)
        }),
        _stepUp: function(steps) {
            this._start() && (this._spin((steps || 1) * this.options.step), this._stop())
        },
        stepDown: spinner_modifier(function(steps) {
            this._stepDown(steps)
        }),
        _stepDown: function(steps) {
            this._start() && (this._spin((steps || 1) * -this.options.step), this._stop())
        },
        pageUp: spinner_modifier(function(pages) {
            this._stepUp((pages || 1) * this.options.page)
        }),
        pageDown: spinner_modifier(function(pages) {
            this._stepDown((pages || 1) * this.options.page)
        }),
        value: function(newVal) {
            return arguments.length ? void spinner_modifier(this._value).call(this, newVal) : this._parse(this.element.val())
        },
        widget: function() {
            return this.uiSpinner
        }
    }), $.widget("ui.tabs", {
        version: "1.11.1",
        delay: 300,
        options: {
            active: null,
            collapsible: !1,
            event: "click",
            heightStyle: "content",
            hide: null,
            show: null,
            activate: null,
            beforeActivate: null,
            beforeLoad: null,
            load: null
        },
        _isLocal: function() {
            var rhash = /#.*$/;
            return function(anchor) {
                var anchorUrl, locationUrl;
                anchor = anchor.cloneNode(!1), anchorUrl = anchor.href.replace(rhash, ""), locationUrl = location.href.replace(rhash, "");
                try {
                    anchorUrl = decodeURIComponent(anchorUrl)
                } catch (error) {}
                try {
                    locationUrl = decodeURIComponent(locationUrl)
                } catch (error) {}
                return anchor.hash.length > 1 && anchorUrl === locationUrl
            }
        }(),
        _create: function() {
            var that = this,
                options = this.options;
            this.running = !1, this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible", options.collapsible), this._processTabs(), options.active = this._initialActive(), $.isArray(options.disabled) && (options.disabled = $.unique(options.disabled.concat($.map(this.tabs.filter(".ui-state-disabled"), function(li) {
                return that.tabs.index(li)
            }))).sort()), this.active = this.options.active !== !1 && this.anchors.length ? this._findActive(options.active) : $(), this._refresh(), this.active.length && this.load(options.active)
        },
        _initialActive: function() {
            var active = this.options.active,
                collapsible = this.options.collapsible,
                locationHash = location.hash.substring(1);
            return null === active && (locationHash && this.tabs.each(function(i, tab) {
                return $(tab).attr("aria-controls") === locationHash ? (active = i, !1) : void 0
            }), null === active && (active = this.tabs.index(this.tabs.filter(".ui-tabs-active"))), (null === active || -1 === active) && (active = this.tabs.length ? 0 : !1)), active !== !1 && (active = this.tabs.index(this.tabs.eq(active)), -1 === active && (active = collapsible ? !1 : 0)), !collapsible && active === !1 && this.anchors.length && (active = 0), active
        },
        _getCreateEventData: function() {
            return {
                tab: this.active,
                panel: this.active.length ? this._getPanelForTab(this.active) : $()
            }
        },
        _tabKeydown: function(event) {
            var focusedTab = $(this.document[0].activeElement).closest("li"),
                selectedIndex = this.tabs.index(focusedTab),
                goingForward = !0;
            if (!this._handlePageNav(event)) {
                switch (event.keyCode) {
                    case $.ui.keyCode.RIGHT:
                    case $.ui.keyCode.DOWN:
                        selectedIndex++;
                        break;
                    case $.ui.keyCode.UP:
                    case $.ui.keyCode.LEFT:
                        goingForward = !1, selectedIndex--;
                        break;
                    case $.ui.keyCode.END:
                        selectedIndex = this.anchors.length - 1;
                        break;
                    case $.ui.keyCode.HOME:
                        selectedIndex = 0;
                        break;
                    case $.ui.keyCode.SPACE:
                        return event.preventDefault(), clearTimeout(this.activating), void this._activate(selectedIndex);
                    case $.ui.keyCode.ENTER:
                        return event.preventDefault(), clearTimeout(this.activating), void this._activate(selectedIndex === this.options.active ? !1 : selectedIndex);
                    default:
                        return
                }
                event.preventDefault(), clearTimeout(this.activating), selectedIndex = this._focusNextTab(selectedIndex, goingForward), event.ctrlKey || (focusedTab.attr("aria-selected", "false"), this.tabs.eq(selectedIndex).attr("aria-selected", "true"), this.activating = this._delay(function() {
                    this.option("active", selectedIndex)
                }, this.delay))
            }
        },
        _panelKeydown: function(event) {
            this._handlePageNav(event) || event.ctrlKey && event.keyCode === $.ui.keyCode.UP && (event.preventDefault(), this.active.focus())
        },
        _handlePageNav: function(event) {
            return event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ? (this._activate(this._focusNextTab(this.options.active - 1, !1)), !0) : event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ? (this._activate(this._focusNextTab(this.options.active + 1, !0)), !0) : void 0
        },
        _findNextTab: function(index, goingForward) {
            function constrain() {
                return index > lastTabIndex && (index = 0), 0 > index && (index = lastTabIndex), index
            }
            for (var lastTabIndex = this.tabs.length - 1; - 1 !== $.inArray(constrain(), this.options.disabled);) index = goingForward ? index + 1 : index - 1;
            return index
        },
        _focusNextTab: function(index, goingForward) {
            return index = this._findNextTab(index, goingForward), this.tabs.eq(index).focus(), index
        },
        _setOption: function(key, value) {
            return "active" === key ? void this._activate(value) : "disabled" === key ? void this._setupDisabled(value) : (this._super(key, value), "collapsible" === key && (this.element.toggleClass("ui-tabs-collapsible", value), value || this.options.active !== !1 || this._activate(0)), "event" === key && this._setupEvents(value), void("heightStyle" === key && this._setupHeightStyle(value)))
        },
        _sanitizeSelector: function(hash) {
            return hash ? hash.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&") : ""
        },
        refresh: function() {
            var options = this.options,
                lis = this.tablist.children(":has(a[href])");
            options.disabled = $.map(lis.filter(".ui-state-disabled"), function(tab) {
                return lis.index(tab)
            }), this._processTabs(), options.active !== !1 && this.anchors.length ? this.active.length && !$.contains(this.tablist[0], this.active[0]) ? this.tabs.length === options.disabled.length ? (options.active = !1, this.active = $()) : this._activate(this._findNextTab(Math.max(0, options.active - 1), !1)) : options.active = this.tabs.index(this.active) : (options.active = !1, this.active = $()), this._refresh()
        },
        _refresh: function() {
            this._setupDisabled(this.options.disabled), this._setupEvents(this.options.event), this._setupHeightStyle(this.options.heightStyle), this.tabs.not(this.active).attr({
                "aria-selected": "false",
                "aria-expanded": "false",
                tabIndex: -1
            }), this.panels.not(this._getPanelForTab(this.active)).hide().attr({
                "aria-hidden": "true"
            }), this.active.length ? (this.active.addClass("ui-tabs-active ui-state-active").attr({
                "aria-selected": "true",
                "aria-expanded": "true",
                tabIndex: 0
            }), this._getPanelForTab(this.active).show().attr({
                "aria-hidden": "false"
            })) : this.tabs.eq(0).attr("tabIndex", 0)
        },
        _processTabs: function() {
            var that = this;
            this.tablist = this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role", "tablist").delegate("> li", "mousedown" + this.eventNamespace, function(event) {
                $(this).is(".ui-state-disabled") && event.preventDefault()
            }).delegate(".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
                $(this).closest("li").is(".ui-state-disabled") && this.blur()
            }), this.tabs = this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({
                role: "tab",
                tabIndex: -1
            }), this.anchors = this.tabs.map(function() {
                return $("a", this)[0]
            }).addClass("ui-tabs-anchor").attr({
                role: "presentation",
                tabIndex: -1
            }), this.panels = $(), this.anchors.each(function(i, anchor) {
                var selector, panel, panelId, anchorId = $(anchor).uniqueId().attr("id"),
                    tab = $(anchor).closest("li"),
                    originalAriaControls = tab.attr("aria-controls");
                that._isLocal(anchor) ? (selector = anchor.hash, panelId = selector.substring(1), panel = that.element.find(that._sanitizeSelector(selector))) : (panelId = tab.attr("aria-controls") || $({}).uniqueId()[0].id, selector = "#" + panelId, panel = that.element.find(selector), panel.length || (panel = that._createPanel(panelId), panel.insertAfter(that.panels[i - 1] || that.tablist)), panel.attr("aria-live", "polite")), panel.length && (that.panels = that.panels.add(panel)), originalAriaControls && tab.data("ui-tabs-aria-controls", originalAriaControls), tab.attr({
                    "aria-controls": panelId,
                    "aria-labelledby": anchorId
                }), panel.attr("aria-labelledby", anchorId)
            }), this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role", "tabpanel")
        },
        _getList: function() {
            return this.tablist || this.element.find("ol,ul").eq(0)
        },
        _createPanel: function(id) {
            return $("<div>").attr("id", id).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy", !0)
        },
        _setupDisabled: function(disabled) {
            $.isArray(disabled) && (disabled.length ? disabled.length === this.anchors.length && (disabled = !0) : disabled = !1);
            for (var li, i = 0; li = this.tabs[i]; i++) disabled === !0 || -1 !== $.inArray(i, disabled) ? $(li).addClass("ui-state-disabled").attr("aria-disabled", "true") : $(li).removeClass("ui-state-disabled").removeAttr("aria-disabled");
            this.options.disabled = disabled
        },
        _setupEvents: function(event) {
            var events = {};
            event && $.each(event.split(" "), function(index, eventName) {
                events[eventName] = "_eventHandler"
            }), this._off(this.anchors.add(this.tabs).add(this.panels)), this._on(!0, this.anchors, {
                click: function(event) {
                    event.preventDefault()
                }
            }), this._on(this.anchors, events), this._on(this.tabs, {
                keydown: "_tabKeydown"
            }), this._on(this.panels, {
                keydown: "_panelKeydown"
            }), this._focusable(this.tabs), this._hoverable(this.tabs)
        },
        _setupHeightStyle: function(heightStyle) {
            var maxHeight, parent = this.element.parent();
            "fill" === heightStyle ? (maxHeight = parent.height(), maxHeight -= this.element.outerHeight() - this.element.height(), this.element.siblings(":visible").each(function() {
                var elem = $(this),
                    position = elem.css("position");
                "absolute" !== position && "fixed" !== position && (maxHeight -= elem.outerHeight(!0))
            }), this.element.children().not(this.panels).each(function() {
                maxHeight -= $(this).outerHeight(!0)
            }), this.panels.each(function() {
                $(this).height(Math.max(0, maxHeight - $(this).innerHeight() + $(this).height()))
            }).css("overflow", "auto")) : "auto" === heightStyle && (maxHeight = 0, this.panels.each(function() {
                maxHeight = Math.max(maxHeight, $(this).height("").height())
            }).height(maxHeight))
        },
        _eventHandler: function(event) {
            var options = this.options,
                active = this.active,
                anchor = $(event.currentTarget),
                tab = anchor.closest("li"),
                clickedIsActive = tab[0] === active[0],
                collapsing = clickedIsActive && options.collapsible,
                toShow = collapsing ? $() : this._getPanelForTab(tab),
                toHide = active.length ? this._getPanelForTab(active) : $(),
                eventData = {
                    oldTab: active,
                    oldPanel: toHide,
                    newTab: collapsing ? $() : tab,
                    newPanel: toShow
                };
            event.preventDefault(), tab.hasClass("ui-state-disabled") || tab.hasClass("ui-tabs-loading") || this.running || clickedIsActive && !options.collapsible || this._trigger("beforeActivate", event, eventData) === !1 || (options.active = collapsing ? !1 : this.tabs.index(tab), this.active = clickedIsActive ? $() : tab, this.xhr && this.xhr.abort(), toHide.length || toShow.length || $.error("jQuery UI Tabs: Mismatching fragment identifier."), toShow.length && this.load(this.tabs.index(tab), event), this._toggle(event, eventData))
        },
        _toggle: function(event, eventData) {
            function complete() {
                that.running = !1, that._trigger("activate", event, eventData)
            }

            function show() {
                eventData.newTab.closest("li").addClass("ui-tabs-active ui-state-active"), toShow.length && that.options.show ? that._show(toShow, that.options.show, complete) : (toShow.show(), complete())
            }
            var that = this,
                toShow = eventData.newPanel,
                toHide = eventData.oldPanel;
            this.running = !0, toHide.length && this.options.hide ? this._hide(toHide, this.options.hide, function() {
                eventData.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"), show()
            }) : (eventData.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"), toHide.hide(), show()), toHide.attr("aria-hidden", "true"), eventData.oldTab.attr({
                "aria-selected": "false",
                "aria-expanded": "false"
            }), toShow.length && toHide.length ? eventData.oldTab.attr("tabIndex", -1) : toShow.length && this.tabs.filter(function() {
                return 0 === $(this).attr("tabIndex")
            }).attr("tabIndex", -1), toShow.attr("aria-hidden", "false"), eventData.newTab.attr({
                "aria-selected": "true",
                "aria-expanded": "true",
                tabIndex: 0
            })
        },
        _activate: function(index) {
            var anchor, active = this._findActive(index);
            active[0] !== this.active[0] && (active.length || (active = this.active), anchor = active.find(".ui-tabs-anchor")[0], this._eventHandler({
                target: anchor,
                currentTarget: anchor,
                preventDefault: $.noop
            }))
        },
        _findActive: function(index) {
            return index === !1 ? $() : this.tabs.eq(index)
        },
        _getIndex: function(index) {
            return "string" == typeof index && (index = this.anchors.index(this.anchors.filter("[href$='" + index + "']"))), index
        },
        _destroy: function() {
            this.xhr && this.xhr.abort(), this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"), this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"), this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(), this.tablist.unbind(this.eventNamespace), this.tabs.add(this.panels).each(function() {
                $.data(this, "ui-tabs-destroy") ? $(this).remove() : $(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")
            }), this.tabs.each(function() {
                var li = $(this),
                    prev = li.data("ui-tabs-aria-controls");
                prev ? li.attr("aria-controls", prev).removeData("ui-tabs-aria-controls") : li.removeAttr("aria-controls")
            }), this.panels.show(), "content" !== this.options.heightStyle && this.panels.css("height", "")
        },
        enable: function(index) {
            var disabled = this.options.disabled;
            disabled !== !1 && (void 0 === index ? disabled = !1 : (index = this._getIndex(index), disabled = $.isArray(disabled) ? $.map(disabled, function(num) {
                return num !== index ? num : null
            }) : $.map(this.tabs, function(li, num) {
                return num !== index ? num : null
            })), this._setupDisabled(disabled))
        },
        disable: function(index) {
            var disabled = this.options.disabled;
            if (disabled !== !0) {
                if (void 0 === index) disabled = !0;
                else {
                    if (index = this._getIndex(index), -1 !== $.inArray(index, disabled)) return;
                    disabled = $.isArray(disabled) ? $.merge([index], disabled).sort() : [index]
                }
                this._setupDisabled(disabled)
            }
        },
        load: function(index, event) {
            index = this._getIndex(index);
            var that = this,
                tab = this.tabs.eq(index),
                anchor = tab.find(".ui-tabs-anchor"),
                panel = this._getPanelForTab(tab),
                eventData = {
                    tab: tab,
                    panel: panel
                };
            this._isLocal(anchor[0]) || (this.xhr = $.ajax(this._ajaxSettings(anchor, event, eventData)), this.xhr && "canceled" !== this.xhr.statusText && (tab.addClass("ui-tabs-loading"), panel.attr("aria-busy", "true"), this.xhr.success(function(response) {
                setTimeout(function() {
                    panel.html(response), that._trigger("load", event, eventData)
                }, 1)
            }).complete(function(jqXHR, status) {
                setTimeout(function() {
                    "abort" === status && that.panels.stop(!1, !0), tab.removeClass("ui-tabs-loading"), panel.removeAttr("aria-busy"), jqXHR === that.xhr && delete that.xhr
                }, 1)
            })))
        },
        _ajaxSettings: function(anchor, event, eventData) {
            var that = this;
            return {
                url: anchor.attr("href"),
                beforeSend: function(jqXHR, settings) {
                    return that._trigger("beforeLoad", event, $.extend({
                        jqXHR: jqXHR,
                        ajaxSettings: settings
                    }, eventData))
                }
            }
        },
        _getPanelForTab: function(tab) {
            var id = $(tab).attr("aria-controls");
            return this.element.find(this._sanitizeSelector("#" + id))
        }
    }), $.widget("ui.tooltip", {
        version: "1.11.1",
        options: {
            content: function() {
                var title = $(this).attr("title") || "";
                return $("<a>").text(title).html()
            },
            hide: !0,
            items: "[title]:not([disabled])",
            position: {
                my: "left top+15",
                at: "left bottom",
                collision: "flipfit flip"
            },
            show: !0,
            tooltipClass: null,
            track: !1,
            close: null,
            open: null
        },
        _addDescribedBy: function(elem, id) {
            var describedby = (elem.attr("aria-describedby") || "").split(/\s+/);
            describedby.push(id), elem.data("ui-tooltip-id", id).attr("aria-describedby", $.trim(describedby.join(" ")))
        },
        _removeDescribedBy: function(elem) {
            var id = elem.data("ui-tooltip-id"),
                describedby = (elem.attr("aria-describedby") || "").split(/\s+/),
                index = $.inArray(id, describedby); - 1 !== index && describedby.splice(index, 1), elem.removeData("ui-tooltip-id"), describedby = $.trim(describedby.join(" ")), describedby ? elem.attr("aria-describedby", describedby) : elem.removeAttr("aria-describedby")
        },
        _create: function() {
            this._on({
                mouseover: "open",
                focusin: "open"
            }), this.tooltips = {}, this.parents = {}, this.options.disabled && this._disable(), this.liveRegion = $("<div>").attr({
                role: "log",
                "aria-live": "assertive",
                "aria-relevant": "additions"
            }).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body)
        },
        _setOption: function(key, value) {
            var that = this;
            return "disabled" === key ? (this[value ? "_disable" : "_enable"](), void(this.options[key] = value)) : (this._super(key, value), void("content" === key && $.each(this.tooltips, function(id, element) {
                that._updateContent(element)
            })))
        },
        _disable: function() {
            var that = this;
            $.each(this.tooltips, function(id, element) {
                var event = $.Event("blur");
                event.target = event.currentTarget = element[0], that.close(event, !0)
            }), this.element.find(this.options.items).addBack().each(function() {
                var element = $(this);
                element.is("[title]") && element.data("ui-tooltip-title", element.attr("title")).removeAttr("title")
            })
        },
        _enable: function() {
            this.element.find(this.options.items).addBack().each(function() {
                var element = $(this);
                element.data("ui-tooltip-title") && element.attr("title", element.data("ui-tooltip-title"))
            })
        },
        open: function(event) {
            var that = this,
                target = $(event ? event.target : this.element).closest(this.options.items);
            target.length && !target.data("ui-tooltip-id") && (target.attr("title") && target.data("ui-tooltip-title", target.attr("title")), target.data("ui-tooltip-open", !0), event && "mouseover" === event.type && target.parents().each(function() {
                var blurEvent, parent = $(this);
                parent.data("ui-tooltip-open") && (blurEvent = $.Event("blur"), blurEvent.target = blurEvent.currentTarget = this, that.close(blurEvent, !0)), parent.attr("title") && (parent.uniqueId(), that.parents[this.id] = {
                    element: this,
                    title: parent.attr("title")
                }, parent.attr("title", ""))
            }), this._updateContent(target, event))
        },
        _updateContent: function(target, event) {
            var content, contentOption = this.options.content,
                that = this,
                eventType = event ? event.type : null;
            return "string" == typeof contentOption ? this._open(event, target, contentOption) : (content = contentOption.call(target[0], function(response) {
                target.data("ui-tooltip-open") && that._delay(function() {
                    event && (event.type = eventType), this._open(event, target, response)
                })
            }), void(content && this._open(event, target, content)))
        },
        _open: function(event, target, content) {
            function position(event) {
                positionOption.of = event, tooltip.is(":hidden") || tooltip.position(positionOption)
            }
            var tooltip, events, delayedShow, a11yContent, positionOption = $.extend({}, this.options.position);
            if (content) {
                if (tooltip = this._find(target), tooltip.length) return void tooltip.find(".ui-tooltip-content").html(content);
                target.is("[title]") && (event && "mouseover" === event.type ? target.attr("title", "") : target.removeAttr("title")), tooltip = this._tooltip(target), this._addDescribedBy(target, tooltip.attr("id")), tooltip.find(".ui-tooltip-content").html(content), this.liveRegion.children().hide(), content.clone ? (a11yContent = content.clone(), a11yContent.removeAttr("id").find("[id]").removeAttr("id")) : a11yContent = content, $("<div>").html(a11yContent).appendTo(this.liveRegion), this.options.track && event && /^mouse/.test(event.type) ? (this._on(this.document, {
                    mousemove: position
                }), position(event)) : tooltip.position($.extend({
                    of: target
                }, this.options.position)), this.hiding = !1, this.closing = !1, tooltip.hide(), this._show(tooltip, this.options.show), this.options.show && this.options.show.delay && (delayedShow = this.delayedShow = setInterval(function() {
                    tooltip.is(":visible") && (position(positionOption.of), clearInterval(delayedShow))
                }, $.fx.interval)), this._trigger("open", event, {
                    tooltip: tooltip
                }), events = {
                    keyup: function(event) {
                        if (event.keyCode === $.ui.keyCode.ESCAPE) {
                            var fakeEvent = $.Event(event);
                            fakeEvent.currentTarget = target[0], this.close(fakeEvent, !0)
                        }
                    }
                }, target[0] !== this.element[0] && (events.remove = function() {
                    this._removeTooltip(tooltip)
                }), event && "mouseover" !== event.type || (events.mouseleave = "close"), event && "focusin" !== event.type || (events.focusout = "close"), this._on(!0, target, events)
            }
        },
        close: function(event) {
            var that = this,
                target = $(event ? event.currentTarget : this.element),
                tooltip = this._find(target);
            this.closing || (clearInterval(this.delayedShow), target.data("ui-tooltip-title") && !target.attr("title") && target.attr("title", target.data("ui-tooltip-title")), this._removeDescribedBy(target), this.hiding = !0, tooltip.stop(!0), this._hide(tooltip, this.options.hide, function() {
                that._removeTooltip($(this)), this.hiding = !1, this.closing = !1
            }), target.removeData("ui-tooltip-open"), this._off(target, "mouseleave focusout keyup"), target[0] !== this.element[0] && this._off(target, "remove"), this._off(this.document, "mousemove"), event && "mouseleave" === event.type && $.each(this.parents, function(id, parent) {
                $(parent.element).attr("title", parent.title), delete that.parents[id]
            }), this.closing = !0, this._trigger("close", event, {
                tooltip: tooltip
            }), this.hiding || (this.closing = !1))
        },
        _tooltip: function(element) {
            var tooltip = $("<div>").attr("role", "tooltip").addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content " + (this.options.tooltipClass || "")),
                id = tooltip.uniqueId().attr("id");
            return $("<div>").addClass("ui-tooltip-content").appendTo(tooltip), tooltip.appendTo(this.document[0].body), this.tooltips[id] = element, tooltip
        },
        _find: function(target) {
            var id = target.data("ui-tooltip-id");
            return id ? $("#" + id) : $()
        },
        _removeTooltip: function(tooltip) {
            tooltip.remove(), delete this.tooltips[tooltip.attr("id")]
        },
        _destroy: function() {
            var that = this;
            $.each(this.tooltips, function(id, element) {
                var event = $.Event("blur");
                event.target = event.currentTarget = element[0], that.close(event, !0), $("#" + id).remove(), element.data("ui-tooltip-title") && (element.attr("title") || element.attr("title", element.data("ui-tooltip-title")), element.removeData("ui-tooltip-title"))
            }), this.liveRegion.remove()
        }
    })
}), "undefined" == typeof jQuery) throw new Error("Bootstrap's JavaScript requires jQuery"); + function(a) {
    "use strict";

    function b() {
        var a = document.createElement("bootstrap"),
            b = {
                WebkitTransition: "webkitTransitionEnd",
                MozTransition: "transitionend",
                OTransition: "oTransitionEnd otransitionend",
                transition: "transitionend"
            };
        for (var c in b)
            if (void 0 !== a.style[c]) return {
                end: b[c]
            };
        return !1
    }
    a.fn.emulateTransitionEnd = function(b) {
        var c = !1,
            d = this;
        a(this).one("bsTransitionEnd", function() {
            c = !0
        });
        var e = function() {
            c || a(d).trigger(a.support.transition.end)
        };
        return setTimeout(e, b), this
    }, a(function() {
        a.support.transition = b(), a.support.transition && (a.event.special.bsTransitionEnd = {
            bindType: a.support.transition.end,
            delegateType: a.support.transition.end,
            handle: function(b) {
                return a(b.target).is(this) ? b.handleObj.handler.apply(this, arguments) : void 0
            }
        })
    })
}(jQuery), + function(a) {
    "use strict";

    function b(b) {
        return this.each(function() {
            var c = a(this),
                e = c.data("bs.alert");
            e || c.data("bs.alert", e = new d(this)), "string" == typeof b && e[b].call(c)
        })
    }
    var c = '[data-dismiss="alert"]',
        d = function(b) {
            a(b).on("click", c, this.close)
        };
    d.VERSION = "3.2.0", d.prototype.close = function(b) {
        function c() {
            f.detach().trigger("closed.bs.alert").remove()
        }
        var d = a(this),
            e = d.attr("data-target");
        e || (e = d.attr("href"), e = e && e.replace(/.*(?=#[^\s]*$)/, ""));
        var f = a(e);
        b && b.preventDefault(), f.length || (f = d.hasClass("alert") ? d : d.parent()), f.trigger(b = a.Event("close.bs.alert")), b.isDefaultPrevented() || (f.removeClass("in"), a.support.transition && f.hasClass("fade") ? f.one("bsTransitionEnd", c).emulateTransitionEnd(150) : c())
    };
    var e = a.fn.alert;
    a.fn.alert = b, a.fn.alert.Constructor = d, a.fn.alert.noConflict = function() {
        return a.fn.alert = e, this
    }, a(document).on("click.bs.alert.data-api", c, d.prototype.close)
}(jQuery), + function(a) {
    "use strict";

    function b(b) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.button"),
                f = "object" == typeof b && b;
            e || d.data("bs.button", e = new c(this, f)), "toggle" == b ? e.toggle() : b && e.setState(b)
        })
    }
    var c = function(b, d) {
        this.$element = a(b), this.options = a.extend({}, c.DEFAULTS, d), this.isLoading = !1
    };
    c.VERSION = "3.2.0", c.DEFAULTS = {
        loadingText: "loading..."
    }, c.prototype.setState = function(b) {
        var c = "disabled",
            d = this.$element,
            e = d.is("input") ? "val" : "html",
            f = d.data();
        b += "Text", null == f.resetText && d.data("resetText", d[e]()), d[e](null == f[b] ? this.options[b] : f[b]), setTimeout(a.proxy(function() {
            "loadingText" == b ? (this.isLoading = !0, d.addClass(c).attr(c, c)) : this.isLoading && (this.isLoading = !1, d.removeClass(c).removeAttr(c))
        }, this), 0)
    }, c.prototype.toggle = function() {
        var a = !0,
            b = this.$element.closest('[data-toggle="buttons"]');
        if (b.length) {
            var c = this.$element.find("input");
            "radio" == c.prop("type") && (c.prop("checked") && this.$element.hasClass("active") ? a = !1 : b.find(".active").removeClass("active")), a && c.prop("checked", !this.$element.hasClass("active")).trigger("change")
        }
        a && this.$element.toggleClass("active")
    };
    var d = a.fn.button;
    a.fn.button = b, a.fn.button.Constructor = c, a.fn.button.noConflict = function() {
        return a.fn.button = d, this
    }, a(document).on("click.bs.button.data-api", '[data-toggle^="button"]', function(c) {
        var d = a(c.target);
        d.hasClass("btn") || (d = d.closest(".btn")), b.call(d, "toggle"), c.preventDefault()
    })
}(jQuery), + function(a) {
    "use strict";

    function b(b) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.carousel"),
                f = a.extend({}, c.DEFAULTS, d.data(), "object" == typeof b && b),
                g = "string" == typeof b ? b : f.slide;
            e || d.data("bs.carousel", e = new c(this, f)), "number" == typeof b ? e.to(b) : g ? e[g]() : f.interval && e.pause().cycle()
        })
    }
    var c = function(b, c) {
        this.$element = a(b).on("keydown.bs.carousel", a.proxy(this.keydown, this)), this.$indicators = this.$element.find(".carousel-indicators"), this.options = c, this.paused = this.sliding = this.interval = this.$active = this.$items = null, "hover" == this.options.pause && this.$element.on("mouseenter.bs.carousel", a.proxy(this.pause, this)).on("mouseleave.bs.carousel", a.proxy(this.cycle, this))
    };
    c.VERSION = "3.2.0", c.DEFAULTS = {
        interval: 5e3,
        pause: "hover",
        wrap: !0
    }, c.prototype.keydown = function(a) {
        switch (a.which) {
            case 37:
                this.prev();
                break;
            case 39:
                this.next();
                break;
            default:
                return
        }
        a.preventDefault()
    }, c.prototype.cycle = function(b) {
        return b || (this.paused = !1), this.interval && clearInterval(this.interval), this.options.interval && !this.paused && (this.interval = setInterval(a.proxy(this.next, this), this.options.interval)), this
    }, c.prototype.getItemIndex = function(a) {
        return this.$items = a.parent().children(".item"), this.$items.index(a || this.$active)
    }, c.prototype.to = function(b) {
        var c = this,
            d = this.getItemIndex(this.$active = this.$element.find(".item.active"));
        return b > this.$items.length - 1 || 0 > b ? void 0 : this.sliding ? this.$element.one("slid.bs.carousel", function() {
            c.to(b)
        }) : d == b ? this.pause().cycle() : this.slide(b > d ? "next" : "prev", a(this.$items[b]))
    }, c.prototype.pause = function(b) {
        return b || (this.paused = !0), this.$element.find(".next, .prev").length && a.support.transition && (this.$element.trigger(a.support.transition.end), this.cycle(!0)), this.interval = clearInterval(this.interval), this
    }, c.prototype.next = function() {
        return this.sliding ? void 0 : this.slide("next")
    }, c.prototype.prev = function() {
        return this.sliding ? void 0 : this.slide("prev")
    }, c.prototype.slide = function(b, c) {
        var d = this.$element.find(".item.active"),
            e = c || d[b](),
            f = this.interval,
            g = "next" == b ? "left" : "right",
            h = "next" == b ? "first" : "last",
            i = this;
        if (!e.length) {
            if (!this.options.wrap) return;
            e = this.$element.find(".item")[h]()
        }
        if (e.hasClass("active")) return this.sliding = !1;
        var j = e[0],
            k = a.Event("slide.bs.carousel", {
                relatedTarget: j,
                direction: g
            });
        if (this.$element.trigger(k), !k.isDefaultPrevented()) {
            if (this.sliding = !0, f && this.pause(), this.$indicators.length) {
                this.$indicators.find(".active").removeClass("active");
                var l = a(this.$indicators.children()[this.getItemIndex(e)]);
                l && l.addClass("active")
            }
            var m = a.Event("slid.bs.carousel", {
                relatedTarget: j,
                direction: g
            });
            return a.support.transition && this.$element.hasClass("slide") ? (e.addClass(b), e[0].offsetWidth, d.addClass(g), e.addClass(g), d.one("bsTransitionEnd", function() {
                e.removeClass([b, g].join(" ")).addClass("active"), d.removeClass(["active", g].join(" ")), i.sliding = !1, setTimeout(function() {
                    i.$element.trigger(m)
                }, 0)
            }).emulateTransitionEnd(1e3 * d.css("transition-duration").slice(0, -1))) : (d.removeClass("active"), e.addClass("active"), this.sliding = !1, this.$element.trigger(m)), f && this.cycle(), this
        }
    };
    var d = a.fn.carousel;
    a.fn.carousel = b, a.fn.carousel.Constructor = c, a.fn.carousel.noConflict = function() {
        return a.fn.carousel = d, this
    }, a(document).on("click.bs.carousel.data-api", "[data-slide], [data-slide-to]", function(c) {
        var d, e = a(this),
            f = a(e.attr("data-target") || (d = e.attr("href")) && d.replace(/.*(?=#[^\s]+$)/, ""));
        if (f.hasClass("carousel")) {
            var g = a.extend({}, f.data(), e.data()),
                h = e.attr("data-slide-to");
            h && (g.interval = !1), b.call(f, g), h && f.data("bs.carousel").to(h), c.preventDefault()
        }
    }), a(window).on("load", function() {
        a('[data-ride="carousel"]').each(function() {
            var c = a(this);
            b.call(c, c.data())
        })
    })
}(jQuery), + function(a) {
    "use strict";

    function b(b) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.collapse"),
                f = a.extend({}, c.DEFAULTS, d.data(), "object" == typeof b && b);
            !e && f.toggle && "show" == b && (b = !b), e || d.data("bs.collapse", e = new c(this, f)), "string" == typeof b && e[b]()
        })
    }
    var c = function(b, d) {
        this.$element = a(b), this.options = a.extend({}, c.DEFAULTS, d), this.transitioning = null, this.options.parent && (this.$parent = a(this.options.parent)), this.options.toggle && this.toggle()
    };
    c.VERSION = "3.2.0", c.DEFAULTS = {
        toggle: !0
    }, c.prototype.dimension = function() {
        var a = this.$element.hasClass("width");
        return a ? "width" : "height"
    }, c.prototype.show = function() {
        if (!this.transitioning && !this.$element.hasClass("in")) {
            var c = a.Event("show.bs.collapse");
            if (this.$element.trigger(c), !c.isDefaultPrevented()) {
                var d = this.$parent && this.$parent.find("> .panel > .in");
                if (d && d.length) {
                    var e = d.data("bs.collapse");
                    if (e && e.transitioning) return;
                    b.call(d, "hide"), e || d.data("bs.collapse", null)
                }
                var f = this.dimension();
                this.$element.removeClass("collapse").addClass("collapsing")[f](0), this.transitioning = 1;
                var g = function() {
                    this.$element.removeClass("collapsing").addClass("collapse in")[f](""), this.transitioning = 0, this.$element.trigger("shown.bs.collapse")
                };
                if (!a.support.transition) return g.call(this);
                var h = a.camelCase(["scroll", f].join("-"));
                this.$element.one("bsTransitionEnd", a.proxy(g, this)).emulateTransitionEnd(350)[f](this.$element[0][h])
            }
        }
    }, c.prototype.hide = function() {
        if (!this.transitioning && this.$element.hasClass("in")) {
            var b = a.Event("hide.bs.collapse");
            if (this.$element.trigger(b), !b.isDefaultPrevented()) {
                var c = this.dimension();
                this.$element[c](this.$element[c]())[0].offsetHeight, this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"), this.transitioning = 1;
                var d = function() {
                    this.transitioning = 0, this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")
                };
                return a.support.transition ? void this.$element[c](0).one("bsTransitionEnd", a.proxy(d, this)).emulateTransitionEnd(350) : d.call(this)
            }
        }
    }, c.prototype.toggle = function() {
        this[this.$element.hasClass("in") ? "hide" : "show"]()
    };
    var d = a.fn.collapse;
    a.fn.collapse = b, a.fn.collapse.Constructor = c, a.fn.collapse.noConflict = function() {
        return a.fn.collapse = d, this
    }, a(document).on("click.bs.collapse.data-api", '[data-toggle="collapse"]', function(c) {
        var d, e = a(this),
            f = e.attr("data-target") || c.preventDefault() || (d = e.attr("href")) && d.replace(/.*(?=#[^\s]+$)/, ""),
            g = a(f),
            h = g.data("bs.collapse"),
            i = h ? "toggle" : e.data(),
            j = e.attr("data-parent"),
            k = j && a(j);
        h && h.transitioning || (k && k.find('[data-toggle="collapse"][data-parent="' + j + '"]').not(e).addClass("collapsed"), e[g.hasClass("in") ? "addClass" : "removeClass"]("collapsed")), b.call(g, i)
    })
}(jQuery), + function(a) {
    "use strict";

    function b(b) {
        b && 3 === b.which || (a(e).remove(), a(f).each(function() {
            var d = c(a(this)),
                e = {
                    relatedTarget: this
                };
            d.hasClass("open") && (d.trigger(b = a.Event("hide.bs.dropdown", e)), b.isDefaultPrevented() || d.removeClass("open").trigger("hidden.bs.dropdown", e))
        }))
    }

    function c(b) {
        var c = b.attr("data-target");
        c || (c = b.attr("href"), c = c && /#[A-Za-z]/.test(c) && c.replace(/.*(?=#[^\s]*$)/, ""));
        var d = c && a(c);
        return d && d.length ? d : b.parent()
    }

    function d(b) {
        return this.each(function() {
            var c = a(this),
                d = c.data("bs.dropdown");
            d || c.data("bs.dropdown", d = new g(this)), "string" == typeof b && d[b].call(c)
        })
    }
    var e = ".dropdown-backdrop",
        f = '[data-toggle="dropdown"]',
        g = function(b) {
            a(b).on("click.bs.dropdown", this.toggle)
        };
    g.VERSION = "3.2.0", g.prototype.toggle = function(d) {
        var e = a(this);
        if (!e.is(".disabled, :disabled")) {
            var f = c(e),
                g = f.hasClass("open");
            if (b(), !g) {
                "ontouchstart" in document.documentElement && !f.closest(".navbar-nav").length && a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click", b);
                var h = {
                    relatedTarget: this
                };
                if (f.trigger(d = a.Event("show.bs.dropdown", h)), d.isDefaultPrevented()) return;
                e.trigger("focus"), f.toggleClass("open").trigger("shown.bs.dropdown", h)
            }
            return !1
        }
    }, g.prototype.keydown = function(b) {
        if (/(38|40|27)/.test(b.keyCode)) {
            var d = a(this);
            if (b.preventDefault(), b.stopPropagation(), !d.is(".disabled, :disabled")) {
                var e = c(d),
                    g = e.hasClass("open");
                if (!g || g && 27 == b.keyCode) return 27 == b.which && e.find(f).trigger("focus"), d.trigger("click");
                var h = " li:not(.divider):visible a",
                    i = e.find('[role="menu"]' + h + ', [role="listbox"]' + h);
                if (i.length) {
                    var j = i.index(i.filter(":focus"));
                    38 == b.keyCode && j > 0 && j--, 40 == b.keyCode && j < i.length - 1 && j++, ~j || (j = 0), i.eq(j).trigger("focus")
                }
            }
        }
    };
    var h = a.fn.dropdown;
    a.fn.dropdown = d, a.fn.dropdown.Constructor = g, a.fn.dropdown.noConflict = function() {
        return a.fn.dropdown = h, this
    }, a(document).on("click.bs.dropdown.data-api", b).on("click.bs.dropdown.data-api", ".dropdown form", function(a) {
        a.stopPropagation()
    }).on("click.bs.dropdown.data-api", f, g.prototype.toggle).on("keydown.bs.dropdown.data-api", f + ', [role="menu"], [role="listbox"]', g.prototype.keydown)
}(jQuery), + function(a) {
    "use strict";

    function b(b, d) {
        return this.each(function() {
            var e = a(this),
                f = e.data("bs.modal"),
                g = a.extend({}, c.DEFAULTS, e.data(), "object" == typeof b && b);
            f || e.data("bs.modal", f = new c(this, g)), "string" == typeof b ? f[b](d) : g.show && f.show(d)
        })
    }
    var c = function(b, c) {
        this.options = c, this.$body = a(document.body), this.$element = a(b), this.$backdrop = this.isShown = null, this.scrollbarWidth = 0, this.options.remote && this.$element.find(".modal-content").load(this.options.remote, a.proxy(function() {
            this.$element.trigger("loaded.bs.modal")
        }, this))
    };
    c.VERSION = "3.2.0", c.DEFAULTS = {
        backdrop: !0,
        keyboard: !0,
        show: !0
    }, c.prototype.toggle = function(a) {
        return this.isShown ? this.hide() : this.show(a)
    }, c.prototype.show = function(b) {
        var c = this,
            d = a.Event("show.bs.modal", {
                relatedTarget: b
            });
        this.$element.trigger(d), this.isShown || d.isDefaultPrevented() || (this.isShown = !0, this.checkScrollbar(), this.$body.addClass("modal-open"), this.setScrollbar(), this.escape(), this.$element.on("click.dismiss.bs.modal", '[data-dismiss="modal"]', a.proxy(this.hide, this)), this.backdrop(function() {
            var d = a.support.transition && c.$element.hasClass("fade");
            c.$element.parent().length || c.$element.appendTo(c.$body), c.$element.show().scrollTop(0), d && c.$element[0].offsetWidth, c.$element.addClass("in").attr("aria-hidden", !1), c.enforceFocus();
            var e = a.Event("shown.bs.modal", {
                relatedTarget: b
            });
            d ? c.$element.find(".modal-dialog").one("bsTransitionEnd", function() {
                c.$element.trigger("focus").trigger(e)
            }).emulateTransitionEnd(300) : c.$element.trigger("focus").trigger(e)
        }))
    }, c.prototype.hide = function(b) {
        b && b.preventDefault(), b = a.Event("hide.bs.modal"), this.$element.trigger(b), this.isShown && !b.isDefaultPrevented() && (this.isShown = !1, this.$body.removeClass("modal-open"), this.resetScrollbar(), this.escape(), a(document).off("focusin.bs.modal"), this.$element.removeClass("in").attr("aria-hidden", !0).off("click.dismiss.bs.modal"), a.support.transition && this.$element.hasClass("fade") ? this.$element.one("bsTransitionEnd", a.proxy(this.hideModal, this)).emulateTransitionEnd(300) : this.hideModal())
    }, c.prototype.enforceFocus = function() {
        a(document).off("focusin.bs.modal").on("focusin.bs.modal", a.proxy(function(a) {
            this.$element[0] === a.target || this.$element.has(a.target).length || this.$element.trigger("focus")
        }, this))
    }, c.prototype.escape = function() {
        this.isShown && this.options.keyboard ? this.$element.on("keyup.dismiss.bs.modal", a.proxy(function(a) {
            27 == a.which && this.hide()
        }, this)) : this.isShown || this.$element.off("keyup.dismiss.bs.modal")
    }, c.prototype.hideModal = function() {
        var a = this;
        this.$element.hide(), this.backdrop(function() {
            a.$element.trigger("hidden.bs.modal")
        })
    }, c.prototype.removeBackdrop = function() {
        this.$backdrop && this.$backdrop.remove(), this.$backdrop = null
    }, c.prototype.backdrop = function(b) {
        var c = this,
            d = this.$element.hasClass("fade") ? "fade" : "";
        if (this.isShown && this.options.backdrop) {
            var e = a.support.transition && d;
            if (this.$backdrop = a('<div class="modal-backdrop ' + d + '" />').appendTo(this.$body), this.$element.on("click.dismiss.bs.modal", a.proxy(function(a) {
                a.target === a.currentTarget && ("static" == this.options.backdrop ? this.$element[0].focus.call(this.$element[0]) : this.hide.call(this))
            }, this)), e && this.$backdrop[0].offsetWidth, this.$backdrop.addClass("in"), !b) return;
            e ? this.$backdrop.one("bsTransitionEnd", b).emulateTransitionEnd(150) : b()
        } else if (!this.isShown && this.$backdrop) {
            this.$backdrop.removeClass("in");
            var f = function() {
                c.removeBackdrop(), b && b()
            };
            a.support.transition && this.$element.hasClass("fade") ? this.$backdrop.one("bsTransitionEnd", f).emulateTransitionEnd(150) : f()
        } else b && b()
    }, c.prototype.checkScrollbar = function() {
        document.body.clientWidth >= window.innerWidth || (this.scrollbarWidth = this.scrollbarWidth || this.measureScrollbar())
    }, c.prototype.setScrollbar = function() {
        var a = parseInt(this.$body.css("padding-right") || 0, 10);
        this.scrollbarWidth && this.$body.css("padding-right", a + this.scrollbarWidth)
    }, c.prototype.resetScrollbar = function() {
        this.$body.css("padding-right", "")
    }, c.prototype.measureScrollbar = function() {
        var a = document.createElement("div");
        a.className = "modal-scrollbar-measure", this.$body.append(a);
        var b = a.offsetWidth - a.clientWidth;
        return this.$body[0].removeChild(a), b
    };
    var d = a.fn.modal;
    a.fn.modal = b, a.fn.modal.Constructor = c, a.fn.modal.noConflict = function() {
        return a.fn.modal = d, this
    }, a(document).on("click.bs.modal.data-api", '[data-toggle="modal"]', function(c) {
        var d = a(this),
            e = d.attr("href"),
            f = a(d.attr("data-target") || e && e.replace(/.*(?=#[^\s]+$)/, "")),
            g = f.data("bs.modal") ? "toggle" : a.extend({
                remote: !/#/.test(e) && e
            }, f.data(), d.data());
        d.is("a") && c.preventDefault(), f.one("show.bs.modal", function(a) {
            a.isDefaultPrevented() || f.one("hidden.bs.modal", function() {
                d.is(":visible") && d.trigger("focus")
            })
        }), b.call(f, g, this)
    })
}(jQuery), + function(a) {
    "use strict";

    function b(b) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.tooltip"),
                f = "object" == typeof b && b;
            (e || "destroy" != b) && (e || d.data("bs.tooltip", e = new c(this, f)), "string" == typeof b && e[b]())
        })
    }
    var c = function(a, b) {
        this.type = this.options = this.enabled = this.timeout = this.hoverState = this.$element = null, this.init("tooltip", a, b)
    };
    c.VERSION = "3.2.0", c.DEFAULTS = {
        animation: !0,
        placement: "top",
        selector: !1,
        template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
        trigger: "hover focus",
        title: "",
        delay: 0,
        html: !1,
        container: !1,
        viewport: {
            selector: "body",
            padding: 0
        }
    }, c.prototype.init = function(b, c, d) {
        this.enabled = !0, this.type = b, this.$element = a(c), this.options = this.getOptions(d), this.$viewport = this.options.viewport && a(this.options.viewport.selector || this.options.viewport);
        for (var e = this.options.trigger.split(" "), f = e.length; f--;) {
            var g = e[f];
            if ("click" == g) this.$element.on("click." + this.type, this.options.selector, a.proxy(this.toggle, this));
            else if ("manual" != g) {
                var h = "hover" == g ? "mouseenter" : "focusin",
                    i = "hover" == g ? "mouseleave" : "focusout";
                this.$element.on(h + "." + this.type, this.options.selector, a.proxy(this.enter, this)), this.$element.on(i + "." + this.type, this.options.selector, a.proxy(this.leave, this))
            }
        }
        this.options.selector ? this._options = a.extend({}, this.options, {
            trigger: "manual",
            selector: ""
        }) : this.fixTitle()
    }, c.prototype.getDefaults = function() {
        return c.DEFAULTS
    }, c.prototype.getOptions = function(b) {
        return b = a.extend({}, this.getDefaults(), this.$element.data(), b), b.delay && "number" == typeof b.delay && (b.delay = {
            show: b.delay,
            hide: b.delay
        }), b
    }, c.prototype.getDelegateOptions = function() {
        var b = {}, c = this.getDefaults();
        return this._options && a.each(this._options, function(a, d) {
            c[a] != d && (b[a] = d)
        }), b
    }, c.prototype.enter = function(b) {
        var c = b instanceof this.constructor ? b : a(b.currentTarget).data("bs." + this.type);
        return c || (c = new this.constructor(b.currentTarget, this.getDelegateOptions()), a(b.currentTarget).data("bs." + this.type, c)), clearTimeout(c.timeout), c.hoverState = "in", c.options.delay && c.options.delay.show ? void(c.timeout = setTimeout(function() {
            "in" == c.hoverState && c.show()
        }, c.options.delay.show)) : c.show()
    }, c.prototype.leave = function(b) {
        var c = b instanceof this.constructor ? b : a(b.currentTarget).data("bs." + this.type);
        return c || (c = new this.constructor(b.currentTarget, this.getDelegateOptions()), a(b.currentTarget).data("bs." + this.type, c)), clearTimeout(c.timeout), c.hoverState = "out", c.options.delay && c.options.delay.hide ? void(c.timeout = setTimeout(function() {
            "out" == c.hoverState && c.hide()
        }, c.options.delay.hide)) : c.hide()
    }, c.prototype.show = function() {
        var b = a.Event("show.bs." + this.type);
        if (this.hasContent() && this.enabled) {
            this.$element.trigger(b);
            var c = a.contains(document.documentElement, this.$element[0]);
            if (b.isDefaultPrevented() || !c) return;
            var d = this,
                e = this.tip(),
                f = this.getUID(this.type);
            this.setContent(), e.attr("id", f), this.$element.attr("aria-describedby", f), this.options.animation && e.addClass("fade");
            var g = "function" == typeof this.options.placement ? this.options.placement.call(this, e[0], this.$element[0]) : this.options.placement,
                h = /\s?auto?\s?/i,
                i = h.test(g);
            i && (g = g.replace(h, "") || "top"), e.detach().css({
                top: 0,
                left: 0,
                display: "block"
            }).addClass(g).data("bs." + this.type, this), this.options.container ? e.appendTo(this.options.container) : e.insertAfter(this.$element);
            var j = this.getPosition(),
                k = e[0].offsetWidth,
                l = e[0].offsetHeight;
            if (i) {
                var m = g,
                    n = this.$element.parent(),
                    o = this.getPosition(n);
                g = "bottom" == g && j.top + j.height + l - o.scroll > o.height ? "top" : "top" == g && j.top - o.scroll - l < 0 ? "bottom" : "right" == g && j.right + k > o.width ? "left" : "left" == g && j.left - k < o.left ? "right" : g, e.removeClass(m).addClass(g)
            }
            var p = this.getCalculatedOffset(g, j, k, l);
            this.applyPlacement(p, g);
            var q = function() {
                d.$element.trigger("shown.bs." + d.type), d.hoverState = null
            };
            a.support.transition && this.$tip.hasClass("fade") ? e.one("bsTransitionEnd", q).emulateTransitionEnd(150) : q()
        }
    }, c.prototype.applyPlacement = function(b, c) {
        var d = this.tip(),
            e = d[0].offsetWidth,
            f = d[0].offsetHeight,
            g = parseInt(d.css("margin-top"), 10),
            h = parseInt(d.css("margin-left"), 10);
        isNaN(g) && (g = 0), isNaN(h) && (h = 0), b.top = b.top + g, b.left = b.left + h, a.offset.setOffset(d[0], a.extend({
            using: function(a) {
                d.css({
                    top: Math.round(a.top),
                    left: Math.round(a.left)
                })
            }
        }, b), 0), d.addClass("in");
        var i = d[0].offsetWidth,
            j = d[0].offsetHeight;
        "top" == c && j != f && (b.top = b.top + f - j);
        var k = this.getViewportAdjustedDelta(c, b, i, j);
        k.left ? b.left += k.left : b.top += k.top;
        var l = k.left ? 2 * k.left - e + i : 2 * k.top - f + j,
            m = k.left ? "left" : "top",
            n = k.left ? "offsetWidth" : "offsetHeight";
        d.offset(b), this.replaceArrow(l, d[0][n], m)
    }, c.prototype.replaceArrow = function(a, b, c) {
        this.arrow().css(c, a ? 50 * (1 - a / b) + "%" : "")
    }, c.prototype.setContent = function() {
        var a = this.tip(),
            b = this.getTitle();
        a.find(".tooltip-inner")[this.options.html ? "html" : "text"](b), a.removeClass("fade in top bottom left right")
    }, c.prototype.hide = function() {
        function b() {
            "in" != c.hoverState && d.detach(), c.$element.trigger("hidden.bs." + c.type)
        }
        var c = this,
            d = this.tip(),
            e = a.Event("hide.bs." + this.type);
        return this.$element.removeAttr("aria-describedby"), this.$element.trigger(e), e.isDefaultPrevented() ? void 0 : (d.removeClass("in"), a.support.transition && this.$tip.hasClass("fade") ? d.one("bsTransitionEnd", b).emulateTransitionEnd(150) : b(), this.hoverState = null, this)
    }, c.prototype.fixTitle = function() {
        var a = this.$element;
        (a.attr("title") || "string" != typeof a.attr("data-original-title")) && a.attr("data-original-title", a.attr("title") || "").attr("title", "")
    }, c.prototype.hasContent = function() {
        return this.getTitle()
    }, c.prototype.getPosition = function(b) {
        b = b || this.$element;
        var c = b[0],
            d = "BODY" == c.tagName;
        return a.extend({}, "function" == typeof c.getBoundingClientRect ? c.getBoundingClientRect() : null, {
            scroll: d ? document.documentElement.scrollTop || document.body.scrollTop : b.scrollTop(),
            width: d ? a(window).width() : b.outerWidth(),
            height: d ? a(window).height() : b.outerHeight()
        }, d ? {
            top: 0,
            left: 0
        } : b.offset())
    }, c.prototype.getCalculatedOffset = function(a, b, c, d) {
        return "bottom" == a ? {
            top: b.top + b.height,
            left: b.left + b.width / 2 - c / 2
        } : "top" == a ? {
            top: b.top - d,
            left: b.left + b.width / 2 - c / 2
        } : "left" == a ? {
            top: b.top + b.height / 2 - d / 2,
            left: b.left - c
        } : {
            top: b.top + b.height / 2 - d / 2,
            left: b.left + b.width
        }
    }, c.prototype.getViewportAdjustedDelta = function(a, b, c, d) {
        var e = {
            top: 0,
            left: 0
        };
        if (!this.$viewport) return e;
        var f = this.options.viewport && this.options.viewport.padding || 0,
            g = this.getPosition(this.$viewport);
        if (/right|left/.test(a)) {
            var h = b.top - f - g.scroll,
                i = b.top + f - g.scroll + d;
            h < g.top ? e.top = g.top - h : i > g.top + g.height && (e.top = g.top + g.height - i)
        } else {
            var j = b.left - f,
                k = b.left + f + c;
            j < g.left ? e.left = g.left - j : k > g.width && (e.left = g.left + g.width - k)
        }
        return e
    }, c.prototype.getTitle = function() {
        var a, b = this.$element,
            c = this.options;
        return a = b.attr("data-original-title") || ("function" == typeof c.title ? c.title.call(b[0]) : c.title)
    }, c.prototype.getUID = function(a) {
        do a += ~~(1e6 * Math.random()); while (document.getElementById(a));
        return a
    }, c.prototype.tip = function() {
        return this.$tip = this.$tip || a(this.options.template)
    }, c.prototype.arrow = function() {
        return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
    }, c.prototype.validate = function() {
        this.$element[0].parentNode || (this.hide(), this.$element = null, this.options = null)
    }, c.prototype.enable = function() {
        this.enabled = !0
    }, c.prototype.disable = function() {
        this.enabled = !1
    }, c.prototype.toggleEnabled = function() {
        this.enabled = !this.enabled
    }, c.prototype.toggle = function(b) {
        var c = this;
        b && (c = a(b.currentTarget).data("bs." + this.type), c || (c = new this.constructor(b.currentTarget, this.getDelegateOptions()), a(b.currentTarget).data("bs." + this.type, c))), c.tip().hasClass("in") ? c.leave(c) : c.enter(c)
    }, c.prototype.destroy = function() {
        clearTimeout(this.timeout), this.hide().$element.off("." + this.type).removeData("bs." + this.type)
    };
    var d = a.fn.tooltip;
    a.fn.tooltip = b, a.fn.tooltip.Constructor = c, a.fn.tooltip.noConflict = function() {
        return a.fn.tooltip = d, this
    }
}(jQuery), + function(a) {
    "use strict";

    function b(b) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.popover"),
                f = "object" == typeof b && b;
            (e || "destroy" != b) && (e || d.data("bs.popover", e = new c(this, f)), "string" == typeof b && e[b]())
        })
    }
    var c = function(a, b) {
        this.init("popover", a, b)
    };
    if (!a.fn.tooltip) throw new Error("Popover requires tooltip.js");
    c.VERSION = "3.2.0", c.DEFAULTS = a.extend({}, a.fn.tooltip.Constructor.DEFAULTS, {
        placement: "right",
        trigger: "click",
        content: "",
        template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
    }), c.prototype = a.extend({}, a.fn.tooltip.Constructor.prototype), c.prototype.constructor = c, c.prototype.getDefaults = function() {
        return c.DEFAULTS
    }, c.prototype.setContent = function() {
        var a = this.tip(),
            b = this.getTitle(),
            c = this.getContent();
        a.find(".popover-title")[this.options.html ? "html" : "text"](b), a.find(".popover-content").empty()[this.options.html ? "string" == typeof c ? "html" : "append" : "text"](c), a.removeClass("fade top bottom left right in"), a.find(".popover-title").html() || a.find(".popover-title").hide()
    }, c.prototype.hasContent = function() {
        return this.getTitle() || this.getContent()
    }, c.prototype.getContent = function() {
        var a = this.$element,
            b = this.options;
        return a.attr("data-content") || ("function" == typeof b.content ? b.content.call(a[0]) : b.content)
    }, c.prototype.arrow = function() {
        return this.$arrow = this.$arrow || this.tip().find(".arrow")
    }, c.prototype.tip = function() {
        return this.$tip || (this.$tip = a(this.options.template)), this.$tip
    };
    var d = a.fn.popover;
    a.fn.popover = b, a.fn.popover.Constructor = c, a.fn.popover.noConflict = function() {
        return a.fn.popover = d, this
    }
}(jQuery), + function(a) {
    "use strict";

    function b(c, d) {
        var e = a.proxy(this.process, this);
        this.$body = a("body"), this.$scrollElement = a(a(c).is("body") ? window : c), this.options = a.extend({}, b.DEFAULTS, d), this.selector = (this.options.target || "") + " .nav li > a", this.offsets = [], this.targets = [], this.activeTarget = null, this.scrollHeight = 0, this.$scrollElement.on("scroll.bs.scrollspy", e), this.refresh(), this.process()
    }

    function c(c) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.scrollspy"),
                f = "object" == typeof c && c;
            e || d.data("bs.scrollspy", e = new b(this, f)), "string" == typeof c && e[c]()
        })
    }
    b.VERSION = "3.2.0", b.DEFAULTS = {
        offset: 10
    }, b.prototype.getScrollHeight = function() {
        return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
    }, b.prototype.refresh = function() {
        var b = "offset",
            c = 0;
        a.isWindow(this.$scrollElement[0]) || (b = "position", c = this.$scrollElement.scrollTop()), this.offsets = [], this.targets = [], this.scrollHeight = this.getScrollHeight();
        var d = this;
        this.$body.find(this.selector).map(function() {
            var d = a(this),
                e = d.data("target") || d.attr("href"),
                f = /^#./.test(e) && a(e);
            return f && f.length && f.is(":visible") && [
                [f[b]().top + c, e]
            ] || null
        }).sort(function(a, b) {
            return a[0] - b[0]
        }).each(function() {
            d.offsets.push(this[0]), d.targets.push(this[1])
        })
    }, b.prototype.process = function() {
        var a, b = this.$scrollElement.scrollTop() + this.options.offset,
            c = this.getScrollHeight(),
            d = this.options.offset + c - this.$scrollElement.height(),
            e = this.offsets,
            f = this.targets,
            g = this.activeTarget;
        if (this.scrollHeight != c && this.refresh(), b >= d) return g != (a = f[f.length - 1]) && this.activate(a);
        if (g && b <= e[0]) return g != (a = f[0]) && this.activate(a);
        for (a = e.length; a--;) g != f[a] && b >= e[a] && (!e[a + 1] || b <= e[a + 1]) && this.activate(f[a])
    }, b.prototype.activate = function(b) {
        this.activeTarget = b, a(this.selector).parentsUntil(this.options.target, ".active").removeClass("active");
        var c = this.selector + '[data-target="' + b + '"],' + this.selector + '[href="' + b + '"]',
            d = a(c).parents("li").addClass("active");
        d.parent(".dropdown-menu").length && (d = d.closest("li.dropdown").addClass("active")), d.trigger("activate.bs.scrollspy")
    };
    var d = a.fn.scrollspy;
    a.fn.scrollspy = c, a.fn.scrollspy.Constructor = b, a.fn.scrollspy.noConflict = function() {
        return a.fn.scrollspy = d, this
    }, a(window).on("load.bs.scrollspy.data-api", function() {
        a('[data-spy="scroll"]').each(function() {
            var b = a(this);
            c.call(b, b.data())
        })
    })
}(jQuery), + function(a) {
    "use strict";

    function b(b) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.tab");
            e || d.data("bs.tab", e = new c(this)), "string" == typeof b && e[b]()
        })
    }
    var c = function(b) {
        this.element = a(b)
    };
    c.VERSION = "3.2.0", c.prototype.show = function() {
        var b = this.element,
            c = b.closest("ul:not(.dropdown-menu)"),
            d = b.data("target");
        if (d || (d = b.attr("href"), d = d && d.replace(/.*(?=#[^\s]*$)/, "")), !b.parent("li").hasClass("active")) {
            var e = c.find(".active:last a")[0],
                f = a.Event("show.bs.tab", {
                    relatedTarget: e
                });
            if (b.trigger(f), !f.isDefaultPrevented()) {
                var g = a(d);
                this.activate(b.closest("li"), c), this.activate(g, g.parent(), function() {
                    b.trigger({
                        type: "shown.bs.tab",
                        relatedTarget: e
                    })
                })
            }
        }
    }, c.prototype.activate = function(b, c, d) {
        function e() {
            f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"), b.addClass("active"), g ? (b[0].offsetWidth, b.addClass("in")) : b.removeClass("fade"), b.parent(".dropdown-menu") && b.closest("li.dropdown").addClass("active"), d && d()
        }
        var f = c.find("> .active"),
            g = d && a.support.transition && f.hasClass("fade");
        g ? f.one("bsTransitionEnd", e).emulateTransitionEnd(150) : e(), f.removeClass("in")
    };
    var d = a.fn.tab;
    a.fn.tab = b, a.fn.tab.Constructor = c, a.fn.tab.noConflict = function() {
        return a.fn.tab = d, this
    }, a(document).on("click.bs.tab.data-api", '[data-toggle="tab"], [data-toggle="pill"]', function(c) {
        c.preventDefault(), b.call(a(this), "show")
    })
}(jQuery), + function(a) {
    "use strict";

    function b(b) {
        return this.each(function() {
            var d = a(this),
                e = d.data("bs.affix"),
                f = "object" == typeof b && b;
            e || d.data("bs.affix", e = new c(this, f)), "string" == typeof b && e[b]()
        })
    }
    var c = function(b, d) {
        this.options = a.extend({}, c.DEFAULTS, d), this.$target = a(this.options.target).on("scroll.bs.affix.data-api", a.proxy(this.checkPosition, this)).on("click.bs.affix.data-api", a.proxy(this.checkPositionWithEventLoop, this)), this.$element = a(b), this.affixed = this.unpin = this.pinnedOffset = null, this.checkPosition()
    };
    c.VERSION = "3.2.0", c.RESET = "affix affix-top affix-bottom", c.DEFAULTS = {
        offset: 0,
        target: window
    }, c.prototype.getPinnedOffset = function() {
        if (this.pinnedOffset) return this.pinnedOffset;
        this.$element.removeClass(c.RESET).addClass("affix");
        var a = this.$target.scrollTop(),
            b = this.$element.offset();
        return this.pinnedOffset = b.top - a
    }, c.prototype.checkPositionWithEventLoop = function() {
        setTimeout(a.proxy(this.checkPosition, this), 1)
    }, c.prototype.checkPosition = function() {
        if (this.$element.is(":visible")) {
            var b = a(document).height(),
                d = this.$target.scrollTop(),
                e = this.$element.offset(),
                f = this.options.offset,
                g = f.top,
                h = f.bottom;
            "object" != typeof f && (h = g = f), "function" == typeof g && (g = f.top(this.$element)), "function" == typeof h && (h = f.bottom(this.$element));
            var i = null != this.unpin && d + this.unpin <= e.top ? !1 : null != h && e.top + this.$element.height() >= b - h ? "bottom" : null != g && g >= d ? "top" : !1;
            if (this.affixed !== i) {
                null != this.unpin && this.$element.css("top", "");
                var j = "affix" + (i ? "-" + i : ""),
                    k = a.Event(j + ".bs.affix");
                this.$element.trigger(k), k.isDefaultPrevented() || (this.affixed = i, this.unpin = "bottom" == i ? this.getPinnedOffset() : null, this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix", "affixed"))), "bottom" == i && this.$element.offset({
                    top: b - this.$element.height() - h
                }))
            }
        }
    };
    var d = a.fn.affix;
    a.fn.affix = b, a.fn.affix.Constructor = c, a.fn.affix.noConflict = function() {
        return a.fn.affix = d, this
    }, a(window).on("load", function() {
        a('[data-spy="affix"]').each(function() {
            var c = a(this),
                d = c.data();
            d.offset = d.offset || {}, d.offsetBottom && (d.offset.bottom = d.offsetBottom), d.offsetTop && (d.offset.top = d.offsetTop), b.call(c, d)
        })
    })
}(jQuery),
function(root, factory) {
    "object" == typeof exports && "object" == typeof module ? module.exports = factory() : "function" == typeof define && define.amd ? define(factory) : "object" == typeof exports ? exports.Handlebars = factory() : root.Handlebars = factory()
}(this, function() {
    return function(modules) {
        function __webpack_require__(moduleId) {
            if (installedModules[moduleId]) return installedModules[moduleId].exports;
            var module = installedModules[moduleId] = {
                exports: {},
                id: moduleId,
                loaded: !1
            };
            return modules[moduleId].call(module.exports, module, module.exports, __webpack_require__), module.loaded = !0, module.exports
        }
        var installedModules = {};
        return __webpack_require__.m = modules, __webpack_require__.c = installedModules, __webpack_require__.p = "", __webpack_require__(0)
    }([
        function(module, exports, __webpack_require__) {
            "use strict";

            function create() {
                var hb = _create();
                return hb.compile = function(input, options) {
                    return _Compiler$compile$precompile.compile(input, options, hb)
                }, hb.precompile = function(input, options) {
                    return _Compiler$compile$precompile.precompile(input, options, hb)
                }, hb.AST = _AST2["default"], hb.Compiler = _Compiler$compile$precompile.Compiler, hb.JavaScriptCompiler = _JavaScriptCompiler2["default"], hb.Parser = _Parser$parse.parser, hb.parse = _Parser$parse.parse, hb
            }
            var _interopRequireWildcard = __webpack_require__(8)["default"];
            exports.__esModule = !0;
            var _runtime = __webpack_require__(1),
                _runtime2 = _interopRequireWildcard(_runtime),
                _AST = __webpack_require__(2),
                _AST2 = _interopRequireWildcard(_AST),
                _Parser$parse = __webpack_require__(3),
                _Compiler$compile$precompile = __webpack_require__(4),
                _JavaScriptCompiler = __webpack_require__(5),
                _JavaScriptCompiler2 = _interopRequireWildcard(_JavaScriptCompiler),
                _Visitor = __webpack_require__(6),
                _Visitor2 = _interopRequireWildcard(_Visitor),
                _noConflict = __webpack_require__(7),
                _noConflict2 = _interopRequireWildcard(_noConflict),
                _create = _runtime2["default"].create,
                inst = create();
            inst.create = create, _noConflict2["default"](inst), inst.Visitor = _Visitor2["default"], inst["default"] = inst, exports["default"] = inst, module.exports = exports["default"]
        },
        function(module, exports, __webpack_require__) {
            "use strict";

            function create() {
                var hb = new base.HandlebarsEnvironment;
                return Utils.extend(hb, base), hb.SafeString = _SafeString2["default"], hb.Exception = _Exception2["default"], hb.Utils = Utils, hb.escapeExpression = Utils.escapeExpression, hb.VM = runtime, hb.template = function(spec) {
                    return runtime.template(spec, hb)
                }, hb
            }
            var _interopRequireWildcard = __webpack_require__(8)["default"];
            exports.__esModule = !0;
            var _import = __webpack_require__(9),
                base = _interopRequireWildcard(_import),
                _SafeString = __webpack_require__(10),
                _SafeString2 = _interopRequireWildcard(_SafeString),
                _Exception = __webpack_require__(11),
                _Exception2 = _interopRequireWildcard(_Exception),
                _import2 = __webpack_require__(12),
                Utils = _interopRequireWildcard(_import2),
                _import3 = __webpack_require__(13),
                runtime = _interopRequireWildcard(_import3),
                _noConflict = __webpack_require__(7),
                _noConflict2 = _interopRequireWildcard(_noConflict),
                inst = create();
            inst.create = create, _noConflict2["default"](inst), inst["default"] = inst, exports["default"] = inst, module.exports = exports["default"]
        },
        function(module, exports) {
            "use strict";
            exports.__esModule = !0;
            var AST = {
                Program: function(statements, blockParams, strip, locInfo) {
                    this.loc = locInfo, this.type = "Program", this.body = statements, this.blockParams = blockParams, this.strip = strip
                },
                MustacheStatement: function(path, params, hash, escaped, strip, locInfo) {
                    this.loc = locInfo, this.type = "MustacheStatement", this.path = path, this.params = params || [], this.hash = hash, this.escaped = escaped, this.strip = strip
                },
                BlockStatement: function(path, params, hash, program, inverse, openStrip, inverseStrip, closeStrip, locInfo) {
                    this.loc = locInfo, this.type = "BlockStatement", this.path = path, this.params = params || [], this.hash = hash, this.program = program, this.inverse = inverse, this.openStrip = openStrip, this.inverseStrip = inverseStrip, this.closeStrip = closeStrip
                },
                PartialStatement: function(name, params, hash, strip, locInfo) {
                    this.loc = locInfo, this.type = "PartialStatement", this.name = name, this.params = params || [], this.hash = hash, this.indent = "", this.strip = strip
                },
                ContentStatement: function(string, locInfo) {
                    this.loc = locInfo, this.type = "ContentStatement", this.original = this.value = string
                },
                CommentStatement: function(comment, strip, locInfo) {
                    this.loc = locInfo, this.type = "CommentStatement", this.value = comment, this.strip = strip
                },
                SubExpression: function(path, params, hash, locInfo) {
                    this.loc = locInfo, this.type = "SubExpression", this.path = path, this.params = params || [], this.hash = hash
                },
                PathExpression: function(data, depth, parts, original, locInfo) {
                    this.loc = locInfo, this.type = "PathExpression", this.data = data, this.original = original, this.parts = parts, this.depth = depth
                },
                StringLiteral: function(string, locInfo) {
                    this.loc = locInfo, this.type = "StringLiteral", this.original = this.value = string
                },
                NumberLiteral: function(number, locInfo) {
                    this.loc = locInfo, this.type = "NumberLiteral", this.original = this.value = Number(number)
                },
                BooleanLiteral: function(bool, locInfo) {
                    this.loc = locInfo, this.type = "BooleanLiteral", this.original = this.value = "true" === bool
                },
                UndefinedLiteral: function(locInfo) {
                    this.loc = locInfo, this.type = "UndefinedLiteral", this.original = this.value = void 0
                },
                NullLiteral: function(locInfo) {
                    this.loc = locInfo, this.type = "NullLiteral", this.original = this.value = null
                },
                Hash: function(pairs, locInfo) {
                    this.loc = locInfo, this.type = "Hash", this.pairs = pairs
                },
                HashPair: function(key, value, locInfo) {
                    this.loc = locInfo, this.type = "HashPair", this.key = key, this.value = value
                },
                helpers: {
                    helperExpression: function(node) {
                        return !("SubExpression" !== node.type && !node.params.length && !node.hash)
                    },
                    scopedId: function(path) {
                        return /^\.|this\b/.test(path.original)
                    },
                    simpleId: function(path) {
                        return 1 === path.parts.length && !AST.helpers.scopedId(path) && !path.depth
                    }
                }
            };
            exports["default"] = AST, module.exports = exports["default"]
        },
        function(module, exports, __webpack_require__) {
            "use strict";

            function parse(input, options) {
                if ("Program" === input.type) return input;
                _parser2["default"].yy = yy, yy.locInfo = function(locInfo) {
                    return new yy.SourceLocation(options && options.srcName, locInfo)
                };
                var strip = new _WhitespaceControl2["default"];
                return strip.accept(_parser2["default"].parse(input))
            }
            var _interopRequireWildcard = __webpack_require__(8)["default"];
            exports.__esModule = !0, exports.parse = parse;
            var _parser = __webpack_require__(14),
                _parser2 = _interopRequireWildcard(_parser),
                _AST = __webpack_require__(2),
                _AST2 = _interopRequireWildcard(_AST),
                _WhitespaceControl = __webpack_require__(15),
                _WhitespaceControl2 = _interopRequireWildcard(_WhitespaceControl),
                _import = __webpack_require__(16),
                Helpers = _interopRequireWildcard(_import),
                _extend = __webpack_require__(12);
            exports.parser = _parser2["default"];
            var yy = {};
            _extend.extend(yy, Helpers, _AST2["default"])
        },
        function(module, exports, __webpack_require__) {
            "use strict";

            function Compiler() {}

            function precompile(input, options, env) {
                if (null == input || "string" != typeof input && "Program" !== input.type) throw new _Exception2["default"]("You must pass a string or Handlebars AST to Handlebars.precompile. You passed " + input);
                options = options || {}, "data" in options || (options.data = !0), options.compat && (options.useDepths = !0);
                var ast = env.parse(input, options),
                    environment = (new env.Compiler).compile(ast, options);
                return (new env.JavaScriptCompiler).compile(environment, options)
            }

            function compile(input, _x, env) {
                function compileInput() {
                    var ast = env.parse(input, options),
                        environment = (new env.Compiler).compile(ast, options),
                        templateSpec = (new env.JavaScriptCompiler).compile(environment, options, void 0, !0);
                    return env.template(templateSpec)
                }

                function ret(context, execOptions) {
                    return compiled || (compiled = compileInput()), compiled.call(this, context, execOptions)
                }
                var options = void 0 === arguments[1] ? {} : arguments[1];
                if (null == input || "string" != typeof input && "Program" !== input.type) throw new _Exception2["default"]("You must pass a string or Handlebars AST to Handlebars.compile. You passed " + input);
                "data" in options || (options.data = !0), options.compat && (options.useDepths = !0);
                var compiled = void 0;
                return ret._setup = function(setupOptions) {
                    return compiled || (compiled = compileInput()), compiled._setup(setupOptions)
                }, ret._child = function(i, data, blockParams, depths) {
                    return compiled || (compiled = compileInput()), compiled._child(i, data, blockParams, depths)
                }, ret
            }

            function argEquals(a, b) {
                if (a === b) return !0;
                if (_isArray$indexOf.isArray(a) && _isArray$indexOf.isArray(b) && a.length === b.length) {
                    for (var i = 0; i < a.length; i++)
                        if (!argEquals(a[i], b[i])) return !1;
                    return !0
                }
            }

            function transformLiteralToPath(sexpr) {
                if (!sexpr.path.parts) {
                    var literal = sexpr.path;
                    sexpr.path = new _AST2["default"].PathExpression(!1, 0, [literal.original + ""], literal.original + "", literal.loc)
                }
            }
            var _interopRequireWildcard = __webpack_require__(8)["default"];
            exports.__esModule = !0, exports.Compiler = Compiler, exports.precompile = precompile, exports.compile = compile;
            var _Exception = __webpack_require__(11),
                _Exception2 = _interopRequireWildcard(_Exception),
                _isArray$indexOf = __webpack_require__(12),
                _AST = __webpack_require__(2),
                _AST2 = _interopRequireWildcard(_AST),
                slice = [].slice;
            Compiler.prototype = {
                compiler: Compiler,
                equals: function(other) {
                    var len = this.opcodes.length;
                    if (other.opcodes.length !== len) return !1;
                    for (var i = 0; len > i; i++) {
                        var opcode = this.opcodes[i],
                            otherOpcode = other.opcodes[i];
                        if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) return !1
                    }
                    len = this.children.length;
                    for (var i = 0; len > i; i++)
                        if (!this.children[i].equals(other.children[i])) return !1;
                    return !0
                },
                guid: 0,
                compile: function(program, options) {
                    this.sourceNode = [], this.opcodes = [], this.children = [], this.options = options, this.stringParams = options.stringParams, this.trackIds = options.trackIds, options.blockParams = options.blockParams || [];
                    var knownHelpers = options.knownHelpers;
                    if (options.knownHelpers = {
                        helperMissing: !0,
                        blockHelperMissing: !0,
                        each: !0,
                        "if": !0,
                        unless: !0,
                        "with": !0,
                        log: !0,
                        lookup: !0
                    }, knownHelpers)
                        for (var _name in knownHelpers) _name in knownHelpers && (options.knownHelpers[_name] = knownHelpers[_name]);
                    return this.accept(program)
                },
                compileProgram: function(program) {
                    var childCompiler = new this.compiler,
                        result = childCompiler.compile(program, this.options),
                        guid = this.guid++;
                    return this.usePartial = this.usePartial || result.usePartial, this.children[guid] = result, this.useDepths = this.useDepths || result.useDepths, guid
                },
                accept: function(node) {
                    this.sourceNode.unshift(node);
                    var ret = this[node.type](node);
                    return this.sourceNode.shift(), ret
                },
                Program: function(program) {
                    this.options.blockParams.unshift(program.blockParams);
                    for (var body = program.body, bodyLength = body.length, i = 0; bodyLength > i; i++) this.accept(body[i]);
                    return this.options.blockParams.shift(), this.isSimple = 1 === bodyLength, this.blockParams = program.blockParams ? program.blockParams.length : 0, this
                },
                BlockStatement: function(block) {
                    transformLiteralToPath(block);
                    var program = block.program,
                        inverse = block.inverse;
                    program = program && this.compileProgram(program), inverse = inverse && this.compileProgram(inverse);
                    var type = this.classifySexpr(block);
                    "helper" === type ? this.helperSexpr(block, program, inverse) : "simple" === type ? (this.simpleSexpr(block), this.opcode("pushProgram", program), this.opcode("pushProgram", inverse), this.opcode("emptyHash"), this.opcode("blockValue", block.path.original)) : (this.ambiguousSexpr(block, program, inverse), this.opcode("pushProgram", program), this.opcode("pushProgram", inverse), this.opcode("emptyHash"), this.opcode("ambiguousBlockValue")), this.opcode("append")
                },
                PartialStatement: function(partial) {
                    this.usePartial = !0;
                    var params = partial.params;
                    if (params.length > 1) throw new _Exception2["default"]("Unsupported number of partial arguments: " + params.length, partial);
                    params.length || params.push({
                        type: "PathExpression",
                        parts: [],
                        depth: 0
                    });
                    var partialName = partial.name.original,
                        isDynamic = "SubExpression" === partial.name.type;
                    isDynamic && this.accept(partial.name), this.setupFullMustacheParams(partial, void 0, void 0, !0);
                    var indent = partial.indent || "";
                    this.options.preventIndent && indent && (this.opcode("appendContent", indent), indent = ""), this.opcode("invokePartial", isDynamic, partialName, indent), this.opcode("append")
                },
                MustacheStatement: function(mustache) {
                    this.SubExpression(mustache), this.opcode(mustache.escaped && !this.options.noEscape ? "appendEscaped" : "append")
                },
                ContentStatement: function(content) {
                    content.value && this.opcode("appendContent", content.value)
                },
                CommentStatement: function() {},
                SubExpression: function(sexpr) {
                    transformLiteralToPath(sexpr);
                    var type = this.classifySexpr(sexpr);
                    "simple" === type ? this.simpleSexpr(sexpr) : "helper" === type ? this.helperSexpr(sexpr) : this.ambiguousSexpr(sexpr)
                },
                ambiguousSexpr: function(sexpr, program, inverse) {
                    var path = sexpr.path,
                        name = path.parts[0],
                        isBlock = null != program || null != inverse;
                    this.opcode("getContext", path.depth), this.opcode("pushProgram", program), this.opcode("pushProgram", inverse), this.accept(path), this.opcode("invokeAmbiguous", name, isBlock)
                },
                simpleSexpr: function(sexpr) {
                    this.accept(sexpr.path), this.opcode("resolvePossibleLambda")
                },
                helperSexpr: function(sexpr, program, inverse) {
                    var params = this.setupFullMustacheParams(sexpr, program, inverse),
                        path = sexpr.path,
                        name = path.parts[0];
                    if (this.options.knownHelpers[name]) this.opcode("invokeKnownHelper", params.length, name);
                    else {
                        if (this.options.knownHelpersOnly) throw new _Exception2["default"]("You specified knownHelpersOnly, but used the unknown helper " + name, sexpr);
                        path.falsy = !0, this.accept(path), this.opcode("invokeHelper", params.length, path.original, _AST2["default"].helpers.simpleId(path))
                    }
                },
                PathExpression: function(path) {
                    this.addDepth(path.depth), this.opcode("getContext", path.depth);
                    var name = path.parts[0],
                        scoped = _AST2["default"].helpers.scopedId(path),
                        blockParamId = !path.depth && !scoped && this.blockParamIndex(name);
                    blockParamId ? this.opcode("lookupBlockParam", blockParamId, path.parts) : name ? path.data ? (this.options.data = !0, this.opcode("lookupData", path.depth, path.parts)) : this.opcode("lookupOnContext", path.parts, path.falsy, scoped) : this.opcode("pushContext")
                },
                StringLiteral: function(string) {
                    this.opcode("pushString", string.value)
                },
                NumberLiteral: function(number) {
                    this.opcode("pushLiteral", number.value)
                },
                BooleanLiteral: function(bool) {
                    this.opcode("pushLiteral", bool.value)
                },
                UndefinedLiteral: function() {
                    this.opcode("pushLiteral", "undefined")
                },
                NullLiteral: function() {
                    this.opcode("pushLiteral", "null")
                },
                Hash: function(hash) {
                    var pairs = hash.pairs,
                        i = 0,
                        l = pairs.length;
                    for (this.opcode("pushHash"); l > i; i++) this.pushParam(pairs[i].value);
                    for (; i--;) this.opcode("assignToHash", pairs[i].key);
                    this.opcode("popHash")
                },
                opcode: function(name) {
                    this.opcodes.push({
                        opcode: name,
                        args: slice.call(arguments, 1),
                        loc: this.sourceNode[0].loc
                    })
                },
                addDepth: function(depth) {
                    depth && (this.useDepths = !0)
                },
                classifySexpr: function(sexpr) {
                    var isSimple = _AST2["default"].helpers.simpleId(sexpr.path),
                        isBlockParam = isSimple && !! this.blockParamIndex(sexpr.path.parts[0]),
                        isHelper = !isBlockParam && _AST2["default"].helpers.helperExpression(sexpr),
                        isEligible = !isBlockParam && (isHelper || isSimple);
                    if (isEligible && !isHelper) {
                        var _name2 = sexpr.path.parts[0],
                            options = this.options;
                        options.knownHelpers[_name2] ? isHelper = !0 : options.knownHelpersOnly && (isEligible = !1)
                    }
                    return isHelper ? "helper" : isEligible ? "ambiguous" : "simple"
                },
                pushParams: function(params) {
                    for (var i = 0, l = params.length; l > i; i++) this.pushParam(params[i])
                },
                pushParam: function(val) {
                    var value = null != val.value ? val.value : val.original || "";
                    if (this.stringParams) value.replace && (value = value.replace(/^(\.?\.\/)*/g, "").replace(/\//g, ".")), val.depth && this.addDepth(val.depth), this.opcode("getContext", val.depth || 0), this.opcode("pushStringParam", value, val.type), "SubExpression" === val.type && this.accept(val);
                    else {
                        if (this.trackIds) {
                            var blockParamIndex = void 0;
                            if (!val.parts || _AST2["default"].helpers.scopedId(val) || val.depth || (blockParamIndex = this.blockParamIndex(val.parts[0])), blockParamIndex) {
                                var blockParamChild = val.parts.slice(1).join(".");
                                this.opcode("pushId", "BlockParam", blockParamIndex, blockParamChild)
                            } else value = val.original || value, value.replace && (value = value.replace(/^\.\//g, "").replace(/^\.$/g, "")), this.opcode("pushId", val.type, value)
                        }
                        this.accept(val)
                    }
                },
                setupFullMustacheParams: function(sexpr, program, inverse, omitEmpty) {
                    var params = sexpr.params;
                    return this.pushParams(params), this.opcode("pushProgram", program), this.opcode("pushProgram", inverse), sexpr.hash ? this.accept(sexpr.hash) : this.opcode("emptyHash", omitEmpty), params
                },
                blockParamIndex: function(name) {
                    for (var depth = 0, len = this.options.blockParams.length; len > depth; depth++) {
                        var blockParams = this.options.blockParams[depth],
                            param = blockParams && _isArray$indexOf.indexOf(blockParams, name);
                        if (blockParams && param >= 0) return [depth, param]
                    }
                }
            }
        },
        function(module, exports, __webpack_require__) {
            "use strict";

            function Literal(value) {
                this.value = value
            }

            function JavaScriptCompiler() {}

            function strictLookup(requireTerminal, compiler, parts, type) {
                var stack = compiler.popStack(),
                    i = 0,
                    len = parts.length;
                for (requireTerminal && len--; len > i; i++) stack = compiler.nameLookup(stack, parts[i], type);
                return requireTerminal ? [compiler.aliasable("this.strict"), "(", stack, ", ", compiler.quotedString(parts[i]), ")"] : stack
            }
            var _interopRequireWildcard = __webpack_require__(8)["default"];
            exports.__esModule = !0;
            var _COMPILER_REVISION$REVISION_CHANGES = __webpack_require__(9),
                _Exception = __webpack_require__(11),
                _Exception2 = _interopRequireWildcard(_Exception),
                _isArray = __webpack_require__(12),
                _CodeGen = __webpack_require__(17),
                _CodeGen2 = _interopRequireWildcard(_CodeGen);
            JavaScriptCompiler.prototype = {
                nameLookup: function(parent, name) {
                    return JavaScriptCompiler.isValidJavaScriptVariableName(name) ? [parent, ".", name] : [parent, "['", name, "']"]
                },
                depthedLookup: function(name) {
                    return [this.aliasable("this.lookup"), '(depths, "', name, '")']
                },
                compilerInfo: function() {
                    var revision = _COMPILER_REVISION$REVISION_CHANGES.COMPILER_REVISION,
                        versions = _COMPILER_REVISION$REVISION_CHANGES.REVISION_CHANGES[revision];
                    return [revision, versions]
                },
                appendToBuffer: function(source, location, explicit) {
                    return _isArray.isArray(source) || (source = [source]), source = this.source.wrap(source, location), this.environment.isSimple ? ["return ", source, ";"] : explicit ? ["buffer += ", source, ";"] : (source.appendToBuffer = !0, source)
                },
                initializeBuffer: function() {
                    return this.quotedString("")
                },
                compile: function(environment, options, context, asObject) {
                    this.environment = environment, this.options = options, this.stringParams = this.options.stringParams, this.trackIds = this.options.trackIds, this.precompile = !asObject, this.name = this.environment.name, this.isChild = !! context, this.context = context || {
                        programs: [],
                        environments: []
                    }, this.preamble(), this.stackSlot = 0, this.stackVars = [], this.aliases = {}, this.registers = {
                        list: []
                    }, this.hashes = [], this.compileStack = [], this.inlineStack = [], this.blockParams = [], this.compileChildren(environment, options), this.useDepths = this.useDepths || environment.useDepths || this.options.compat, this.useBlockParams = this.useBlockParams || environment.useBlockParams;
                    var opcodes = environment.opcodes,
                        opcode = void 0,
                        firstLoc = void 0,
                        i = void 0,
                        l = void 0;
                    for (i = 0, l = opcodes.length; l > i; i++) opcode = opcodes[i], this.source.currentLocation = opcode.loc, firstLoc = firstLoc || opcode.loc, this[opcode.opcode].apply(this, opcode.args);
                    if (this.source.currentLocation = firstLoc, this.pushSource(""), this.stackSlot || this.inlineStack.length || this.compileStack.length) throw new _Exception2["default"]("Compile completed with content left on stack");
                    var fn = this.createFunctionContext(asObject);
                    if (this.isChild) return fn;
                    var ret = {
                        compiler: this.compilerInfo(),
                        main: fn
                    }, programs = this.context.programs;
                    for (i = 0, l = programs.length; l > i; i++) programs[i] && (ret[i] = programs[i]);
                    return this.environment.usePartial && (ret.usePartial = !0), this.options.data && (ret.useData = !0), this.useDepths && (ret.useDepths = !0), this.useBlockParams && (ret.useBlockParams = !0), this.options.compat && (ret.compat = !0), asObject ? ret.compilerOptions = this.options : (ret.compiler = JSON.stringify(ret.compiler), this.source.currentLocation = {
                        start: {
                            line: 1,
                            column: 0
                        }
                    }, ret = this.objectLiteral(ret), options.srcName ? (ret = ret.toStringWithSourceMap({
                        file: options.destName
                    }), ret.map = ret.map && ret.map.toString()) : ret = ret.toString()), ret
                },
                preamble: function() {
                    this.lastContext = 0, this.source = new _CodeGen2["default"](this.options.srcName)
                },

                createFunctionContext: function(asObject) {
                    var varDeclarations = "",
                        locals = this.stackVars.concat(this.registers.list);
                    locals.length > 0 && (varDeclarations += ", " + locals.join(", "));
                    var aliasCount = 0;
                    for (var alias in this.aliases) {
                        var node = this.aliases[alias];
                        this.aliases.hasOwnProperty(alias) && node.children && node.referenceCount > 1 && (varDeclarations += ", alias" + ++aliasCount + "=" + alias, node.children[0] = "alias" + aliasCount)
                    }
                    var params = ["depth0", "helpers", "partials", "data"];
                    (this.useBlockParams || this.useDepths) && params.push("blockParams"), this.useDepths && params.push("depths");
                    var source = this.mergeSource(varDeclarations);
                    return asObject ? (params.push(source), Function.apply(this, params)) : this.source.wrap(["function(", params.join(","), ") {\n  ", source, "}"])
                },
                mergeSource: function(varDeclarations) {
                    var isSimple = this.environment.isSimple,
                        appendOnly = !this.forceBuffer,
                        appendFirst = void 0,
                        sourceSeen = void 0,
                        bufferStart = void 0,
                        bufferEnd = void 0;
                    return this.source.each(function(line) {
                        line.appendToBuffer ? (bufferStart ? line.prepend("  + ") : bufferStart = line, bufferEnd = line) : (bufferStart && (sourceSeen ? bufferStart.prepend("buffer += ") : appendFirst = !0, bufferEnd.add(";"), bufferStart = bufferEnd = void 0), sourceSeen = !0, isSimple || (appendOnly = !1))
                    }), appendOnly ? bufferStart ? (bufferStart.prepend("return "), bufferEnd.add(";")) : sourceSeen || this.source.push('return "";') : (varDeclarations += ", buffer = " + (appendFirst ? "" : this.initializeBuffer()), bufferStart ? (bufferStart.prepend("return buffer + "), bufferEnd.add(";")) : this.source.push("return buffer;")), varDeclarations && this.source.prepend("var " + varDeclarations.substring(2) + (appendFirst ? "" : ";\n")), this.source.merge()
                },
                blockValue: function(name) {
                    var blockHelperMissing = this.aliasable("helpers.blockHelperMissing"),
                        params = [this.contextName(0)];
                    this.setupHelperArgs(name, 0, params);
                    var blockName = this.popStack();
                    params.splice(1, 0, blockName), this.push(this.source.functionCall(blockHelperMissing, "call", params))
                },
                ambiguousBlockValue: function() {
                    var blockHelperMissing = this.aliasable("helpers.blockHelperMissing"),
                        params = [this.contextName(0)];
                    this.setupHelperArgs("", 0, params, !0), this.flushInline();
                    var current = this.topStack();
                    params.splice(1, 0, current), this.pushSource(["if (!", this.lastHelper, ") { ", current, " = ", this.source.functionCall(blockHelperMissing, "call", params), "}"])
                },
                appendContent: function(content) {
                    this.pendingContent ? content = this.pendingContent + content : this.pendingLocation = this.source.currentLocation, this.pendingContent = content
                },
                append: function() {
                    if (this.isInline()) this.replaceStack(function(current) {
                        return [" != null ? ", current, ' : ""']
                    }), this.pushSource(this.appendToBuffer(this.popStack()));
                    else {
                        var local = this.popStack();
                        this.pushSource(["if (", local, " != null) { ", this.appendToBuffer(local, void 0, !0), " }"]), this.environment.isSimple && this.pushSource(["else { ", this.appendToBuffer("''", void 0, !0), " }"])
                    }
                },
                appendEscaped: function() {
                    this.pushSource(this.appendToBuffer([this.aliasable("this.escapeExpression"), "(", this.popStack(), ")"]))
                },
                getContext: function(depth) {
                    this.lastContext = depth
                },
                pushContext: function() {
                    this.pushStackLiteral(this.contextName(this.lastContext))
                },
                lookupOnContext: function(parts, falsy, scoped) {
                    var i = 0;
                    scoped || !this.options.compat || this.lastContext ? this.pushContext() : this.push(this.depthedLookup(parts[i++])), this.resolvePath("context", parts, i, falsy)
                },
                lookupBlockParam: function(blockParamId, parts) {
                    this.useBlockParams = !0, this.push(["blockParams[", blockParamId[0], "][", blockParamId[1], "]"]), this.resolvePath("context", parts, 1)
                },
                lookupData: function(depth, parts) {
                    this.pushStackLiteral(depth ? "this.data(data, " + depth + ")" : "data"), this.resolvePath("data", parts, 0, !0)
                },
                resolvePath: function(type, parts, i, falsy) {
                    var _this = this;
                    if (this.options.strict || this.options.assumeObjects) return void this.push(strictLookup(this.options.strict, this, parts, type));
                    for (var len = parts.length; len > i; i++) this.replaceStack(function(current) {
                        var lookup = _this.nameLookup(current, parts[i], type);
                        return falsy ? [" && ", lookup] : [" != null ? ", lookup, " : ", current]
                    })
                },
                resolvePossibleLambda: function() {
                    this.push([this.aliasable("this.lambda"), "(", this.popStack(), ", ", this.contextName(0), ")"])
                },
                pushStringParam: function(string, type) {
                    this.pushContext(), this.pushString(type), "SubExpression" !== type && ("string" == typeof string ? this.pushString(string) : this.pushStackLiteral(string))
                },
                emptyHash: function(omitEmpty) {
                    this.trackIds && this.push("{}"), this.stringParams && (this.push("{}"), this.push("{}")), this.pushStackLiteral(omitEmpty ? "undefined" : "{}")
                },
                pushHash: function() {
                    this.hash && this.hashes.push(this.hash), this.hash = {
                        values: [],
                        types: [],
                        contexts: [],
                        ids: []
                    }
                },
                popHash: function() {
                    var hash = this.hash;
                    this.hash = this.hashes.pop(), this.trackIds && this.push(this.objectLiteral(hash.ids)), this.stringParams && (this.push(this.objectLiteral(hash.contexts)), this.push(this.objectLiteral(hash.types))), this.push(this.objectLiteral(hash.values))
                },
                pushString: function(string) {
                    this.pushStackLiteral(this.quotedString(string))
                },
                pushLiteral: function(value) {
                    this.pushStackLiteral(value)
                },
                pushProgram: function(guid) {
                    this.pushStackLiteral(null != guid ? this.programExpression(guid) : null)
                },
                invokeHelper: function(paramSize, name, isSimple) {
                    var nonHelper = this.popStack(),
                        helper = this.setupHelper(paramSize, name),
                        simple = isSimple ? [helper.name, " || "] : "",
                        lookup = ["("].concat(simple, nonHelper);
                    this.options.strict || lookup.push(" || ", this.aliasable("helpers.helperMissing")), lookup.push(")"), this.push(this.source.functionCall(lookup, "call", helper.callParams))
                },
                invokeKnownHelper: function(paramSize, name) {
                    var helper = this.setupHelper(paramSize, name);
                    this.push(this.source.functionCall(helper.name, "call", helper.callParams))
                },
                invokeAmbiguous: function(name, helperCall) {
                    this.useRegister("helper");
                    var nonHelper = this.popStack();
                    this.emptyHash();
                    var helper = this.setupHelper(0, name, helperCall),
                        helperName = this.lastHelper = this.nameLookup("helpers", name, "helper"),
                        lookup = ["(", "(helper = ", helperName, " || ", nonHelper, ")"];
                    this.options.strict || (lookup[0] = "(helper = ", lookup.push(" != null ? helper : ", this.aliasable("helpers.helperMissing"))), this.push(["(", lookup, helper.paramsInit ? ["),(", helper.paramsInit] : [], "),", "(typeof helper === ", this.aliasable('"function"'), " ? ", this.source.functionCall("helper", "call", helper.callParams), " : helper))"])
                },
                invokePartial: function(isDynamic, name, indent) {
                    var params = [],
                        options = this.setupParams(name, 1, params, !1);
                    isDynamic && (name = this.popStack(), delete options.name), indent && (options.indent = JSON.stringify(indent)), options.helpers = "helpers", options.partials = "partials", params.unshift(isDynamic ? name : this.nameLookup("partials", name, "partial")), this.options.compat && (options.depths = "depths"), options = this.objectLiteral(options), params.push(options), this.push(this.source.functionCall("this.invokePartial", "", params))
                },
                assignToHash: function(key) {
                    var value = this.popStack(),
                        context = void 0,
                        type = void 0,
                        id = void 0;
                    this.trackIds && (id = this.popStack()), this.stringParams && (type = this.popStack(), context = this.popStack());
                    var hash = this.hash;
                    context && (hash.contexts[key] = context), type && (hash.types[key] = type), id && (hash.ids[key] = id), hash.values[key] = value
                },
                pushId: function(type, name, child) {
                    "BlockParam" === type ? this.pushStackLiteral("blockParams[" + name[0] + "].path[" + name[1] + "]" + (child ? " + " + JSON.stringify("." + child) : "")) : "PathExpression" === type ? this.pushString(name) : this.pushStackLiteral("SubExpression" === type ? "true" : "null")
                },
                compiler: JavaScriptCompiler,
                compileChildren: function(environment, options) {
                    for (var children = environment.children, child = void 0, compiler = void 0, i = 0, l = children.length; l > i; i++) {
                        child = children[i], compiler = new this.compiler;
                        var index = this.matchExistingProgram(child);
                        null == index ? (this.context.programs.push(""), index = this.context.programs.length, child.index = index, child.name = "program" + index, this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile), this.context.environments[index] = child, this.useDepths = this.useDepths || compiler.useDepths, this.useBlockParams = this.useBlockParams || compiler.useBlockParams) : (child.index = index, child.name = "program" + index, this.useDepths = this.useDepths || child.useDepths, this.useBlockParams = this.useBlockParams || child.useBlockParams)
                    }
                },
                matchExistingProgram: function(child) {
                    for (var i = 0, len = this.context.environments.length; len > i; i++) {
                        var environment = this.context.environments[i];
                        if (environment && environment.equals(child)) return i
                    }
                },
                programExpression: function(guid) {
                    var child = this.environment.children[guid],
                        programParams = [child.index, "data", child.blockParams];
                    return (this.useBlockParams || this.useDepths) && programParams.push("blockParams"), this.useDepths && programParams.push("depths"), "this.program(" + programParams.join(", ") + ")"
                },
                useRegister: function(name) {
                    this.registers[name] || (this.registers[name] = !0, this.registers.list.push(name))
                },
                push: function(expr) {
                    return expr instanceof Literal || (expr = this.source.wrap(expr)), this.inlineStack.push(expr), expr
                },
                pushStackLiteral: function(item) {
                    this.push(new Literal(item))
                },
                pushSource: function(source) {
                    this.pendingContent && (this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent), this.pendingLocation)), this.pendingContent = void 0), source && this.source.push(source)
                },
                replaceStack: function(callback) {
                    var prefix = ["("],
                        stack = void 0,
                        createdStack = void 0,
                        usedLiteral = void 0;
                    if (!this.isInline()) throw new _Exception2["default"]("replaceStack on non-inline");
                    var top = this.popStack(!0);
                    if (top instanceof Literal) stack = [top.value], prefix = ["(", stack], usedLiteral = !0;
                    else {
                        createdStack = !0;
                        var _name = this.incrStack();
                        prefix = ["((", this.push(_name), " = ", top, ")"], stack = this.topStack()
                    }
                    var item = callback.call(this, stack);
                    usedLiteral || this.popStack(), createdStack && this.stackSlot--, this.push(prefix.concat(item, ")"))
                },
                incrStack: function() {
                    return this.stackSlot++, this.stackSlot > this.stackVars.length && this.stackVars.push("stack" + this.stackSlot), this.topStackName()
                },
                topStackName: function() {
                    return "stack" + this.stackSlot
                },
                flushInline: function() {
                    var inlineStack = this.inlineStack;
                    this.inlineStack = [];
                    for (var i = 0, len = inlineStack.length; len > i; i++) {
                        var entry = inlineStack[i];
                        if (entry instanceof Literal) this.compileStack.push(entry);
                        else {
                            var stack = this.incrStack();
                            this.pushSource([stack, " = ", entry, ";"]), this.compileStack.push(stack)
                        }
                    }
                },
                isInline: function() {
                    return this.inlineStack.length
                },
                popStack: function(wrapped) {
                    var inline = this.isInline(),
                        item = (inline ? this.inlineStack : this.compileStack).pop();
                    if (!wrapped && item instanceof Literal) return item.value;
                    if (!inline) {
                        if (!this.stackSlot) throw new _Exception2["default"]("Invalid stack pop");
                        this.stackSlot--
                    }
                    return item
                },
                topStack: function() {
                    var stack = this.isInline() ? this.inlineStack : this.compileStack,
                        item = stack[stack.length - 1];
                    return item instanceof Literal ? item.value : item
                },
                contextName: function(context) {
                    return this.useDepths && context ? "depths[" + context + "]" : "depth" + context
                },
                quotedString: function(str) {
                    return this.source.quotedString(str)
                },
                objectLiteral: function(obj) {
                    return this.source.objectLiteral(obj)
                },
                aliasable: function(name) {
                    var ret = this.aliases[name];
                    return ret ? (ret.referenceCount++, ret) : (ret = this.aliases[name] = this.source.wrap(name), ret.aliasable = !0, ret.referenceCount = 1, ret)
                },
                setupHelper: function(paramSize, name, blockHelper) {
                    var params = [],
                        paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper),
                        foundHelper = this.nameLookup("helpers", name, "helper");
                    return {
                        params: params,
                        paramsInit: paramsInit,
                        name: foundHelper,
                        callParams: [this.contextName(0)].concat(params)
                    }
                },
                setupParams: function(helper, paramSize, params) {
                    var options = {}, contexts = [],
                        types = [],
                        ids = [],
                        param = void 0;
                    options.name = this.quotedString(helper), options.hash = this.popStack(), this.trackIds && (options.hashIds = this.popStack()), this.stringParams && (options.hashTypes = this.popStack(), options.hashContexts = this.popStack());
                    var inverse = this.popStack(),
                        program = this.popStack();
                    (program || inverse) && (options.fn = program || "this.noop", options.inverse = inverse || "this.noop");
                    for (var i = paramSize; i--;) param = this.popStack(), params[i] = param, this.trackIds && (ids[i] = this.popStack()), this.stringParams && (types[i] = this.popStack(), contexts[i] = this.popStack());
                    return this.trackIds && (options.ids = this.source.generateArray(ids)), this.stringParams && (options.types = this.source.generateArray(types), options.contexts = this.source.generateArray(contexts)), this.options.data && (options.data = "data"), this.useBlockParams && (options.blockParams = "blockParams"), options
                },
                setupHelperArgs: function(helper, paramSize, params, useRegister) {
                    var options = this.setupParams(helper, paramSize, params, !0);
                    return options = this.objectLiteral(options), useRegister ? (this.useRegister("options"), params.push("options"), ["options=", options]) : (params.push(options), "")
                }
            },
            function() {
                for (var reservedWords = "break else new var case finally return void catch for switch while continue function this with default if throw delete in try do instanceof typeof abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public let yield await null true false".split(" "), compilerWords = JavaScriptCompiler.RESERVED_WORDS = {}, i = 0, l = reservedWords.length; l > i; i++) compilerWords[reservedWords[i]] = !0
            }(), JavaScriptCompiler.isValidJavaScriptVariableName = function(name) {
                return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name)
            }, exports["default"] = JavaScriptCompiler, module.exports = exports["default"]
        },
        function(module, exports, __webpack_require__) {
            "use strict";

            function Visitor() {
                this.parents = []
            }
            var _interopRequireWildcard = __webpack_require__(8)["default"];
            exports.__esModule = !0;
            var _Exception = __webpack_require__(11),
                _Exception2 = _interopRequireWildcard(_Exception),
                _AST = __webpack_require__(2),
                _AST2 = _interopRequireWildcard(_AST);
            Visitor.prototype = {
                constructor: Visitor,
                mutating: !1,
                acceptKey: function(node, name) {
                    var value = this.accept(node[name]);
                    if (this.mutating) {
                        if (value && (!value.type || !_AST2["default"][value.type])) throw new _Exception2["default"]('Unexpected node type "' + value.type + '" found when accepting ' + name + " on " + node.type);
                        node[name] = value
                    }
                },
                acceptRequired: function(node, name) {
                    if (this.acceptKey(node, name), !node[name]) throw new _Exception2["default"](node.type + " requires " + name)
                },
                acceptArray: function(array) {
                    for (var i = 0, l = array.length; l > i; i++) this.acceptKey(array, i), array[i] || (array.splice(i, 1), i--, l--)
                },
                accept: function(object) {
                    if (object) {
                        this.current && this.parents.unshift(this.current), this.current = object;
                        var ret = this[object.type](object);
                        return this.current = this.parents.shift(), !this.mutating || ret ? ret : ret !== !1 ? object : void 0
                    }
                },
                Program: function(program) {
                    this.acceptArray(program.body)
                },
                MustacheStatement: function(mustache) {
                    this.acceptRequired(mustache, "path"), this.acceptArray(mustache.params), this.acceptKey(mustache, "hash")
                },
                BlockStatement: function(block) {
                    this.acceptRequired(block, "path"), this.acceptArray(block.params), this.acceptKey(block, "hash"), this.acceptKey(block, "program"), this.acceptKey(block, "inverse")
                },
                PartialStatement: function(partial) {
                    this.acceptRequired(partial, "name"), this.acceptArray(partial.params), this.acceptKey(partial, "hash")
                },
                ContentStatement: function() {},
                CommentStatement: function() {},
                SubExpression: function(sexpr) {
                    this.acceptRequired(sexpr, "path"), this.acceptArray(sexpr.params), this.acceptKey(sexpr, "hash")
                },
                PathExpression: function() {},
                StringLiteral: function() {},
                NumberLiteral: function() {},
                BooleanLiteral: function() {},
                UndefinedLiteral: function() {},
                NullLiteral: function() {},
                Hash: function(hash) {
                    this.acceptArray(hash.pairs)
                },
                HashPair: function(pair) {
                    this.acceptRequired(pair, "value")
                }
            }, exports["default"] = Visitor, module.exports = exports["default"]
        },
        function(module, exports) {
            (function(global) {
                "use strict";
                exports.__esModule = !0, exports["default"] = function(Handlebars) {
                    var root = "undefined" != typeof global ? global : window,
                        $Handlebars = root.Handlebars;
                    Handlebars.noConflict = function() {
                        root.Handlebars === Handlebars && (root.Handlebars = $Handlebars)
                    }
                }, module.exports = exports["default"]
            }).call(exports, function() {
                return this
            }())
        },
        function(module, exports) {
            "use strict";
            exports["default"] = function(obj) {
                return obj && obj.__esModule ? obj : {
                    "default": obj
                }
            }, exports.__esModule = !0
        },
        function(module, exports, __webpack_require__) {
            "use strict";

            function HandlebarsEnvironment(helpers, partials) {
                this.helpers = helpers || {}, this.partials = partials || {}, registerDefaultHelpers(this)
            }

            function registerDefaultHelpers(instance) {
                instance.registerHelper("helperMissing", function() {
                    if (1 === arguments.length) return void 0;
                    throw new _Exception2["default"]('Missing helper: "' + arguments[arguments.length - 1].name + '"')
                }), instance.registerHelper("blockHelperMissing", function(context, options) {
                    var inverse = options.inverse,
                        fn = options.fn;
                    if (context === !0) return fn(this);
                    if (context === !1 || null == context) return inverse(this);
                    if (isArray(context)) return context.length > 0 ? (options.ids && (options.ids = [options.name]), instance.helpers.each(context, options)) : inverse(this);
                    if (options.data && options.ids) {
                        var data = createFrame(options.data);
                        data.contextPath = Utils.appendContextPath(options.data.contextPath, options.name), options = {
                            data: data
                        }
                    }
                    return fn(context, options)
                }), instance.registerHelper("each", function(context, options) {
                    function execIteration(field, index, last) {
                        data && (data.key = field, data.index = index, data.first = 0 === index, data.last = !! last, contextPath && (data.contextPath = contextPath + field)), ret += fn(context[field], {
                            data: data,
                            blockParams: Utils.blockParams([context[field], field], [contextPath + field, null])
                        })
                    }
                    if (!options) throw new _Exception2["default"]("Must pass iterator to #each");
                    var fn = options.fn,
                        inverse = options.inverse,
                        i = 0,
                        ret = "",
                        data = void 0,
                        contextPath = void 0;
                    if (options.data && options.ids && (contextPath = Utils.appendContextPath(options.data.contextPath, options.ids[0]) + "."), isFunction(context) && (context = context.call(this)), options.data && (data = createFrame(options.data)), context && "object" == typeof context)
                        if (isArray(context))
                            for (var j = context.length; j > i; i++) execIteration(i, i, i === context.length - 1);
                        else {
                            var priorKey = void 0;
                            for (var key in context) context.hasOwnProperty(key) && (priorKey && execIteration(priorKey, i - 1), priorKey = key, i++);
                            priorKey && execIteration(priorKey, i - 1, !0)
                        }
                    return 0 === i && (ret = inverse(this)), ret
                }), instance.registerHelper("if", function(conditional, options) {
                    return isFunction(conditional) && (conditional = conditional.call(this)), !options.hash.includeZero && !conditional || Utils.isEmpty(conditional) ? options.inverse(this) : options.fn(this)
                }), instance.registerHelper("unless", function(conditional, options) {
                    return instance.helpers["if"].call(this, conditional, {
                        fn: options.inverse,
                        inverse: options.fn,
                        hash: options.hash
                    })
                }), instance.registerHelper("with", function(context, options) {
                    isFunction(context) && (context = context.call(this));
                    var fn = options.fn;
                    if (Utils.isEmpty(context)) return options.inverse(this);
                    if (options.data && options.ids) {
                        var data = createFrame(options.data);
                        data.contextPath = Utils.appendContextPath(options.data.contextPath, options.ids[0]), options = {
                            data: data
                        }
                    }
                    return fn(context, options)
                }), instance.registerHelper("log", function(message, options) {
                    var level = options.data && null != options.data.level ? parseInt(options.data.level, 10) : 1;
                    instance.log(level, message)
                }), instance.registerHelper("lookup", function(obj, field) {
                    return obj && obj[field]
                })
            }

            function createFrame(object) {
                var frame = Utils.extend({}, object);
                return frame._parent = object, frame
            }
            var _interopRequireWildcard = __webpack_require__(8)["default"];
            exports.__esModule = !0, exports.HandlebarsEnvironment = HandlebarsEnvironment, exports.createFrame = createFrame;
            var _import = __webpack_require__(12),
                Utils = _interopRequireWildcard(_import),
                _Exception = __webpack_require__(11),
                _Exception2 = _interopRequireWildcard(_Exception),
                VERSION = "3.0.1";
            exports.VERSION = VERSION;
            var COMPILER_REVISION = 6;
            exports.COMPILER_REVISION = COMPILER_REVISION;
            var REVISION_CHANGES = {
                1: "<= 1.0.rc.2",
                2: "== 1.0.0-rc.3",
                3: "== 1.0.0-rc.4",
                4: "== 1.x.x",
                5: "== 2.0.0-alpha.x",
                6: ">= 2.0.0-beta.1"
            };
            exports.REVISION_CHANGES = REVISION_CHANGES;
            var isArray = Utils.isArray,
                isFunction = Utils.isFunction,
                toString = Utils.toString,
                objectType = "[object Object]";
            HandlebarsEnvironment.prototype = {
                constructor: HandlebarsEnvironment,
                logger: logger,
                log: log,
                registerHelper: function(name, fn) {
                    if (toString.call(name) === objectType) {
                        if (fn) throw new _Exception2["default"]("Arg not supported with multiple helpers");
                        Utils.extend(this.helpers, name)
                    } else this.helpers[name] = fn
                },
                unregisterHelper: function(name) {
                    delete this.helpers[name]
                },
                registerPartial: function(name, partial) {
                    if (toString.call(name) === objectType) Utils.extend(this.partials, name);
                    else {
                        if ("undefined" == typeof partial) throw new _Exception2["default"]("Attempting to register a partial as undefined");
                        this.partials[name] = partial
                    }
                },
                unregisterPartial: function(name) {
                    delete this.partials[name]
                }
            };
            var logger = {
                methodMap: {
                    0: "debug",
                    1: "info",
                    2: "warn",
                    3: "error"
                },
                DEBUG: 0,
                INFO: 1,
                WARN: 2,
                ERROR: 3,
                level: 1,
                log: function(level, message) {
                    if ("undefined" != typeof console && logger.level <= level) {
                        var method = logger.methodMap[level];
                        (console[method] || console.log).call(console, message)
                    }
                }
            };
            exports.logger = logger;
            var log = logger.log;
            exports.log = log
        },
        function(module, exports) {
            "use strict";

            function SafeString(string) {
                this.string = string
            }
            exports.__esModule = !0, SafeString.prototype.toString = SafeString.prototype.toHTML = function() {
                return "" + this.string
            }, exports["default"] = SafeString, module.exports = exports["default"]
        },
        function(module, exports) {
            "use strict";

            function Exception(message, node) {
                var loc = node && node.loc,
                    line = void 0,
                    column = void 0;
                loc && (line = loc.start.line, column = loc.start.column, message += " - " + line + ":" + column);
                for (var tmp = Error.prototype.constructor.call(this, message), idx = 0; idx < errorProps.length; idx++) this[errorProps[idx]] = tmp[errorProps[idx]];
                Error.captureStackTrace && Error.captureStackTrace(this, Exception), loc && (this.lineNumber = line, this.column = column)
            }
            exports.__esModule = !0;
            var errorProps = ["description", "fileName", "lineNumber", "message", "name", "number", "stack"];
            Exception.prototype = new Error, exports["default"] = Exception, module.exports = exports["default"]
        },
        function(module, exports) {
            "use strict";

            function escapeChar(chr) {
                return escape[chr]
            }

            function extend(obj) {
                for (var i = 1; i < arguments.length; i++)
                    for (var key in arguments[i]) Object.prototype.hasOwnProperty.call(arguments[i], key) && (obj[key] = arguments[i][key]);
                return obj
            }

            function indexOf(array, value) {
                for (var i = 0, len = array.length; len > i; i++)
                    if (array[i] === value) return i;
                return -1
            }

            function escapeExpression(string) {
                if ("string" != typeof string) {
                    if (string && string.toHTML) return string.toHTML();
                    if (null == string) return "";
                    if (!string) return string + "";
                    string = "" + string
                }
                return possible.test(string) ? string.replace(badChars, escapeChar) : string
            }

            function isEmpty(value) {
                return value || 0 === value ? isArray(value) && 0 === value.length ? !0 : !1 : !0
            }

            function blockParams(params, ids) {
                return params.path = ids, params
            }

            function appendContextPath(contextPath, id) {
                return (contextPath ? contextPath + "." : "") + id
            }
            exports.__esModule = !0, exports.extend = extend, exports.indexOf = indexOf, exports.escapeExpression = escapeExpression, exports.isEmpty = isEmpty, exports.blockParams = blockParams, exports.appendContextPath = appendContextPath;
            var escape = {
                "&": "&amp;",
                "<": "&lt;",
                ">": "&gt;",
                '"': "&quot;",
                "'": "&#x27;",
                "`": "&#x60;"
            }, badChars = /[&<>"'`]/g,
                possible = /[&<>"'`]/,
                toString = Object.prototype.toString;
            exports.toString = toString;
            var isFunction = function(value) {
                return "function" == typeof value
            };
            isFunction(/x/) && (exports.isFunction = isFunction = function(value) {
                return "function" == typeof value && "[object Function]" === toString.call(value)
            });
            var isFunction;
            exports.isFunction = isFunction;
            var isArray = Array.isArray || function(value) {
                    return value && "object" == typeof value ? "[object Array]" === toString.call(value) : !1
                };
            exports.isArray = isArray
        },
        function(module, exports, __webpack_require__) {
            "use strict";

            function checkRevision(compilerInfo) {
                var compilerRevision = compilerInfo && compilerInfo[0] || 1,
                    currentRevision = _COMPILER_REVISION$REVISION_CHANGES$createFrame.COMPILER_REVISION;
                if (compilerRevision !== currentRevision) {
                    if (currentRevision > compilerRevision) {
                        var runtimeVersions = _COMPILER_REVISION$REVISION_CHANGES$createFrame.REVISION_CHANGES[currentRevision],
                            compilerVersions = _COMPILER_REVISION$REVISION_CHANGES$createFrame.REVISION_CHANGES[compilerRevision];
                        throw new _Exception2["default"]("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version (" + runtimeVersions + ") or downgrade your runtime to an older version (" + compilerVersions + ").")
                    }
                    throw new _Exception2["default"]("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version (" + compilerInfo[1] + ").")
                }
            }

            function template(templateSpec, env) {
                function invokePartialWrapper(partial, context, options) {
                    options.hash && (context = Utils.extend({}, context, options.hash)), partial = env.VM.resolvePartial.call(this, partial, context, options);
                    var result = env.VM.invokePartial.call(this, partial, context, options);
                    if (null == result && env.compile && (options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env), result = options.partials[options.name](context, options)), null != result) {
                        if (options.indent) {
                            for (var lines = result.split("\n"), i = 0, l = lines.length; l > i && (lines[i] || i + 1 !== l); i++) lines[i] = options.indent + lines[i];
                            result = lines.join("\n")
                        }
                        return result
                    }
                    throw new _Exception2["default"]("The partial " + options.name + " could not be compiled when running in runtime-only mode")
                }

                function ret(context) {
                    var options = void 0 === arguments[1] ? {} : arguments[1],
                        data = options.data;
                    ret._setup(options), !options.partial && templateSpec.useData && (data = initData(context, data));
                    var depths = void 0,
                        blockParams = templateSpec.useBlockParams ? [] : void 0;
                    return templateSpec.useDepths && (depths = options.depths ? [context].concat(options.depths) : [context]), templateSpec.main.call(container, context, container.helpers, container.partials, data, blockParams, depths)
                }
                if (!env) throw new _Exception2["default"]("No environment passed to template");
                if (!templateSpec || !templateSpec.main) throw new _Exception2["default"]("Unknown template object: " + typeof templateSpec);
                env.VM.checkRevision(templateSpec.compiler);
                var container = {
                    strict: function(obj, name) {
                        if (!(name in obj)) throw new _Exception2["default"]('"' + name + '" not defined in ' + obj);
                        return obj[name]
                    },
                    lookup: function(depths, name) {
                        for (var len = depths.length, i = 0; len > i; i++)
                            if (depths[i] && null != depths[i][name]) return depths[i][name]
                    },
                    lambda: function(current, context) {
                        return "function" == typeof current ? current.call(context) : current
                    },
                    escapeExpression: Utils.escapeExpression,
                    invokePartial: invokePartialWrapper,
                    fn: function(i) {
                        return templateSpec[i]
                    },
                    programs: [],
                    program: function(i, data, declaredBlockParams, blockParams, depths) {
                        var programWrapper = this.programs[i],
                            fn = this.fn(i);
                        return data || depths || blockParams || declaredBlockParams ? programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths) : programWrapper || (programWrapper = this.programs[i] = wrapProgram(this, i, fn)), programWrapper
                    },
                    data: function(value, depth) {
                        for (; value && depth--;) value = value._parent;
                        return value
                    },
                    merge: function(param, common) {
                        var obj = param || common;
                        return param && common && param !== common && (obj = Utils.extend({}, common, param)), obj
                    },
                    noop: env.VM.noop,
                    compilerInfo: templateSpec.compiler
                };
                return ret.isTop = !0, ret._setup = function(options) {
                    options.partial ? (container.helpers = options.helpers, container.partials = options.partials) : (container.helpers = container.merge(options.helpers, env.helpers), templateSpec.usePartial && (container.partials = container.merge(options.partials, env.partials)))
                }, ret._child = function(i, data, blockParams, depths) {
                    if (templateSpec.useBlockParams && !blockParams) throw new _Exception2["default"]("must pass block params");
                    if (templateSpec.useDepths && !depths) throw new _Exception2["default"]("must pass parent depths");
                    return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths)
                }, ret
            }

            function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {
                function prog(context) {
                    var options = void 0 === arguments[1] ? {} : arguments[1];
                    return fn.call(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), depths && [context].concat(depths))
                }
                return prog.program = i, prog.depth = depths ? depths.length : 0, prog.blockParams = declaredBlockParams || 0, prog
            }

            function resolvePartial(partial, context, options) {
                return partial ? partial.call || options.name || (options.name = partial, partial = options.partials[partial]) : partial = options.partials[options.name], partial
            }

            function invokePartial(partial, context, options) {
                if (options.partial = !0, void 0 === partial) throw new _Exception2["default"]("The partial " + options.name + " could not be found");
                return partial instanceof Function ? partial(context, options) : void 0
            }

            function noop() {
                return ""
            }

            function initData(context, data) {
                return data && "root" in data || (data = data ? _COMPILER_REVISION$REVISION_CHANGES$createFrame.createFrame(data) : {}, data.root = context), data
            }
            var _interopRequireWildcard = __webpack_require__(8)["default"];
            exports.__esModule = !0, exports.checkRevision = checkRevision, exports.template = template, exports.wrapProgram = wrapProgram, exports.resolvePartial = resolvePartial, exports.invokePartial = invokePartial, exports.noop = noop;
            var _import = __webpack_require__(12),
                Utils = _interopRequireWildcard(_import),
                _Exception = __webpack_require__(11),
                _Exception2 = _interopRequireWildcard(_Exception),
                _COMPILER_REVISION$REVISION_CHANGES$createFrame = __webpack_require__(9)
        },
        function(module, exports) {
            "use strict";
            exports.__esModule = !0;
            var handlebars = function() {
                function Parser() {
                    this.yy = {}
                }
                var parser = {
                    trace: function() {},
                    yy: {},
                    symbols_: {
                        error: 2,
                        root: 3,
                        program: 4,
                        EOF: 5,
                        program_repetition0: 6,
                        statement: 7,
                        mustache: 8,
                        block: 9,
                        rawBlock: 10,
                        partial: 11,
                        content: 12,
                        COMMENT: 13,
                        CONTENT: 14,
                        openRawBlock: 15,
                        END_RAW_BLOCK: 16,
                        OPEN_RAW_BLOCK: 17,
                        helperName: 18,
                        openRawBlock_repetition0: 19,
                        openRawBlock_option0: 20,
                        CLOSE_RAW_BLOCK: 21,
                        openBlock: 22,
                        block_option0: 23,
                        closeBlock: 24,
                        openInverse: 25,
                        block_option1: 26,
                        OPEN_BLOCK: 27,
                        openBlock_repetition0: 28,
                        openBlock_option0: 29,
                        openBlock_option1: 30,
                        CLOSE: 31,
                        OPEN_INVERSE: 32,
                        openInverse_repetition0: 33,
                        openInverse_option0: 34,
                        openInverse_option1: 35,
                        openInverseChain: 36,
                        OPEN_INVERSE_CHAIN: 37,
                        openInverseChain_repetition0: 38,
                        openInverseChain_option0: 39,
                        openInverseChain_option1: 40,
                        inverseAndProgram: 41,
                        INVERSE: 42,
                        inverseChain: 43,
                        inverseChain_option0: 44,
                        OPEN_ENDBLOCK: 45,
                        OPEN: 46,
                        mustache_repetition0: 47,
                        mustache_option0: 48,
                        OPEN_UNESCAPED: 49,
                        mustache_repetition1: 50,
                        mustache_option1: 51,
                        CLOSE_UNESCAPED: 52,
                        OPEN_PARTIAL: 53,
                        partialName: 54,
                        partial_repetition0: 55,
                        partial_option0: 56,
                        param: 57,
                        sexpr: 58,
                        OPEN_SEXPR: 59,
                        sexpr_repetition0: 60,
                        sexpr_option0: 61,
                        CLOSE_SEXPR: 62,
                        hash: 63,
                        hash_repetition_plus0: 64,
                        hashSegment: 65,
                        ID: 66,
                        EQUALS: 67,
                        blockParams: 68,
                        OPEN_BLOCK_PARAMS: 69,
                        blockParams_repetition_plus0: 70,
                        CLOSE_BLOCK_PARAMS: 71,
                        path: 72,
                        dataName: 73,
                        STRING: 74,
                        NUMBER: 75,
                        BOOLEAN: 76,
                        UNDEFINED: 77,
                        NULL: 78,
                        DATA: 79,
                        pathSegments: 80,
                        SEP: 81,
                        $accept: 0,
                        $end: 1
                    },
                    terminals_: {
                        2: "error",
                        5: "EOF",
                        13: "COMMENT",
                        14: "CONTENT",
                        16: "END_RAW_BLOCK",
                        17: "OPEN_RAW_BLOCK",
                        21: "CLOSE_RAW_BLOCK",
                        27: "OPEN_BLOCK",
                        31: "CLOSE",
                        32: "OPEN_INVERSE",
                        37: "OPEN_INVERSE_CHAIN",
                        42: "INVERSE",
                        45: "OPEN_ENDBLOCK",
                        46: "OPEN",
                        49: "OPEN_UNESCAPED",
                        52: "CLOSE_UNESCAPED",
                        53: "OPEN_PARTIAL",
                        59: "OPEN_SEXPR",
                        62: "CLOSE_SEXPR",
                        66: "ID",
                        67: "EQUALS",
                        69: "OPEN_BLOCK_PARAMS",
                        71: "CLOSE_BLOCK_PARAMS",
                        74: "STRING",
                        75: "NUMBER",
                        76: "BOOLEAN",
                        77: "UNDEFINED",
                        78: "NULL",
                        79: "DATA",
                        81: "SEP"
                    },
                    productions_: [0, [3, 2],
                        [4, 1],
                        [7, 1],
                        [7, 1],
                        [7, 1],
                        [7, 1],
                        [7, 1],
                        [7, 1],
                        [12, 1],
                        [10, 3],
                        [15, 5],
                        [9, 4],
                        [9, 4],
                        [22, 6],
                        [25, 6],
                        [36, 6],
                        [41, 2],
                        [43, 3],
                        [43, 1],
                        [24, 3],
                        [8, 5],
                        [8, 5],
                        [11, 5],
                        [57, 1],
                        [57, 1],
                        [58, 5],
                        [63, 1],
                        [65, 3],
                        [68, 3],
                        [18, 1],
                        [18, 1],
                        [18, 1],
                        [18, 1],
                        [18, 1],
                        [18, 1],
                        [18, 1],
                        [54, 1],
                        [54, 1],
                        [73, 2],
                        [72, 1],
                        [80, 3],
                        [80, 1],
                        [6, 0],
                        [6, 2],
                        [19, 0],
                        [19, 2],
                        [20, 0],
                        [20, 1],
                        [23, 0],
                        [23, 1],
                        [26, 0],
                        [26, 1],
                        [28, 0],
                        [28, 2],
                        [29, 0],
                        [29, 1],
                        [30, 0],
                        [30, 1],
                        [33, 0],
                        [33, 2],
                        [34, 0],
                        [34, 1],
                        [35, 0],
                        [35, 1],
                        [38, 0],
                        [38, 2],
                        [39, 0],
                        [39, 1],
                        [40, 0],
                        [40, 1],
                        [44, 0],
                        [44, 1],
                        [47, 0],
                        [47, 2],
                        [48, 0],
                        [48, 1],
                        [50, 0],
                        [50, 2],
                        [51, 0],
                        [51, 1],
                        [55, 0],
                        [55, 2],
                        [56, 0],
                        [56, 1],
                        [60, 0],
                        [60, 2],
                        [61, 0],
                        [61, 1],
                        [64, 1],
                        [64, 2],
                        [70, 1],
                        [70, 2]
                    ],
                    performAction: function(yytext, yyleng, yylineno, yy, yystate, $$) {
                        var $0 = $$.length - 1;
                        switch (yystate) {
                            case 1:
                                return $$[$0 - 1];
                            case 2:
                                this.$ = new yy.Program($$[$0], null, {}, yy.locInfo(this._$));
                                break;
                            case 3:
                                this.$ = $$[$0];
                                break;
                            case 4:
                                this.$ = $$[$0];
                                break;
                            case 5:
                                this.$ = $$[$0];
                                break;
                            case 6:
                                this.$ = $$[$0];
                                break;
                            case 7:
                                this.$ = $$[$0];
                                break;
                            case 8:
                                this.$ = new yy.CommentStatement(yy.stripComment($$[$0]), yy.stripFlags($$[$0], $$[$0]), yy.locInfo(this._$));
                                break;
                            case 9:
                                this.$ = new yy.ContentStatement($$[$0], yy.locInfo(this._$));
                                break;
                            case 10:
                                this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);
                                break;
                            case 11:
                                this.$ = {
                                    path: $$[$0 - 3],
                                    params: $$[$0 - 2],
                                    hash: $$[$0 - 1]
                                };
                                break;
                            case 12:
                                this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], !1, this._$);
                                break;
                            case 13:
                                this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], !0, this._$);
                                break;
                            case 14:
                                this.$ = {
                                    path: $$[$0 - 4],
                                    params: $$[$0 - 3],
                                    hash: $$[$0 - 2],
                                    blockParams: $$[$0 - 1],
                                    strip: yy.stripFlags($$[$0 - 5], $$[$0])
                                };
                                break;
                            case 15:
                                this.$ = {
                                    path: $$[$0 - 4],
                                    params: $$[$0 - 3],
                                    hash: $$[$0 - 2],
                                    blockParams: $$[$0 - 1],
                                    strip: yy.stripFlags($$[$0 - 5], $$[$0])
                                };
                                break;
                            case 16:
                                this.$ = {
                                    path: $$[$0 - 4],
                                    params: $$[$0 - 3],
                                    hash: $$[$0 - 2],
                                    blockParams: $$[$0 - 1],
                                    strip: yy.stripFlags($$[$0 - 5], $$[$0])
                                };
                                break;
                            case 17:
                                this.$ = {
                                    strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]),
                                    program: $$[$0]
                                };
                                break;
                            case 18:
                                var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], !1, this._$),
                                    program = new yy.Program([inverse], null, {}, yy.locInfo(this._$));
                                program.chained = !0, this.$ = {
                                    strip: $$[$0 - 2].strip,
                                    program: program,
                                    chain: !0
                                };
                                break;
                            case 19:
                                this.$ = $$[$0];
                                break;
                            case 20:
                                this.$ = {
                                    path: $$[$0 - 1],
                                    strip: yy.stripFlags($$[$0 - 2], $$[$0])
                                };
                                break;
                            case 21:
                                this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);
                                break;
                            case 22:
                                this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);
                                break;
                            case 23:
                                this.$ = new yy.PartialStatement($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], yy.stripFlags($$[$0 - 4], $$[$0]), yy.locInfo(this._$));
                                break;
                            case 24:
                                this.$ = $$[$0];
                                break;
                            case 25:
                                this.$ = $$[$0];
                                break;
                            case 26:
                                this.$ = new yy.SubExpression($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], yy.locInfo(this._$));
                                break;
                            case 27:
                                this.$ = new yy.Hash($$[$0], yy.locInfo(this._$));
                                break;
                            case 28:
                                this.$ = new yy.HashPair(yy.id($$[$0 - 2]), $$[$0], yy.locInfo(this._$));
                                break;
                            case 29:
                                this.$ = yy.id($$[$0 - 1]);
                                break;
                            case 30:
                                this.$ = $$[$0];
                                break;
                            case 31:
                                this.$ = $$[$0];
                                break;
                            case 32:
                                this.$ = new yy.StringLiteral($$[$0], yy.locInfo(this._$));
                                break;
                            case 33:
                                this.$ = new yy.NumberLiteral($$[$0], yy.locInfo(this._$));
                                break;
                            case 34:
                                this.$ = new yy.BooleanLiteral($$[$0], yy.locInfo(this._$));
                                break;
                            case 35:
                                this.$ = new yy.UndefinedLiteral(yy.locInfo(this._$));
                                break;
                            case 36:
                                this.$ = new yy.NullLiteral(yy.locInfo(this._$));
                                break;
                            case 37:
                                this.$ = $$[$0];
                                break;
                            case 38:
                                this.$ = $$[$0];
                                break;
                            case 39:
                                this.$ = yy.preparePath(!0, $$[$0], this._$);
                                break;
                            case 40:
                                this.$ = yy.preparePath(!1, $$[$0], this._$);
                                break;
                            case 41:
                                $$[$0 - 2].push({
                                    part: yy.id($$[$0]),
                                    original: $$[$0],
                                    separator: $$[$0 - 1]
                                }), this.$ = $$[$0 - 2];
                                break;
                            case 42:
                                this.$ = [{
                                    part: yy.id($$[$0]),
                                    original: $$[$0]
                                }];
                                break;
                            case 43:
                                this.$ = [];
                                break;
                            case 44:
                                $$[$0 - 1].push($$[$0]);
                                break;
                            case 45:
                                this.$ = [];
                                break;
                            case 46:
                                $$[$0 - 1].push($$[$0]);
                                break;
                            case 53:
                                this.$ = [];
                                break;
                            case 54:
                                $$[$0 - 1].push($$[$0]);
                                break;
                            case 59:
                                this.$ = [];
                                break;
                            case 60:
                                $$[$0 - 1].push($$[$0]);
                                break;
                            case 65:
                                this.$ = [];
                                break;
                            case 66:
                                $$[$0 - 1].push($$[$0]);
                                break;
                            case 73:
                                this.$ = [];
                                break;
                            case 74:
                                $$[$0 - 1].push($$[$0]);
                                break;
                            case 77:
                                this.$ = [];
                                break;
                            case 78:
                                $$[$0 - 1].push($$[$0]);
                                break;
                            case 81:
                                this.$ = [];
                                break;
                            case 82:
                                $$[$0 - 1].push($$[$0]);
                                break;
                            case 85:
                                this.$ = [];
                                break;
                            case 86:
                                $$[$0 - 1].push($$[$0]);
                                break;
                            case 89:
                                this.$ = [$$[$0]];
                                break;
                            case 90:
                                $$[$0 - 1].push($$[$0]);
                                break;
                            case 91:
                                this.$ = [$$[$0]];
                                break;
                            case 92:
                                $$[$0 - 1].push($$[$0])
                        }
                    },
                    table: [{
                        3: 1,
                        4: 2,
                        5: [2, 43],
                        6: 3,
                        13: [2, 43],
                        14: [2, 43],
                        17: [2, 43],
                        27: [2, 43],
                        32: [2, 43],
                        46: [2, 43],
                        49: [2, 43],
                        53: [2, 43]
                    }, {
                        1: [3]
                    }, {
                        5: [1, 4]
                    }, {
                        5: [2, 2],
                        7: 5,
                        8: 6,
                        9: 7,
                        10: 8,
                        11: 9,
                        12: 10,
                        13: [1, 11],
                        14: [1, 18],
                        15: 16,
                        17: [1, 21],
                        22: 14,
                        25: 15,
                        27: [1, 19],
                        32: [1, 20],
                        37: [2, 2],
                        42: [2, 2],
                        45: [2, 2],
                        46: [1, 12],
                        49: [1, 13],
                        53: [1, 17]
                    }, {
                        1: [2, 1]
                    }, {
                        5: [2, 44],
                        13: [2, 44],
                        14: [2, 44],
                        17: [2, 44],
                        27: [2, 44],
                        32: [2, 44],
                        37: [2, 44],
                        42: [2, 44],
                        45: [2, 44],
                        46: [2, 44],
                        49: [2, 44],
                        53: [2, 44]
                    }, {
                        5: [2, 3],
                        13: [2, 3],
                        14: [2, 3],
                        17: [2, 3],
                        27: [2, 3],
                        32: [2, 3],
                        37: [2, 3],
                        42: [2, 3],
                        45: [2, 3],
                        46: [2, 3],
                        49: [2, 3],
                        53: [2, 3]
                    }, {
                        5: [2, 4],
                        13: [2, 4],
                        14: [2, 4],
                        17: [2, 4],
                        27: [2, 4],
                        32: [2, 4],
                        37: [2, 4],
                        42: [2, 4],
                        45: [2, 4],
                        46: [2, 4],
                        49: [2, 4],
                        53: [2, 4]
                    }, {
                        5: [2, 5],
                        13: [2, 5],
                        14: [2, 5],
                        17: [2, 5],
                        27: [2, 5],
                        32: [2, 5],
                        37: [2, 5],
                        42: [2, 5],
                        45: [2, 5],
                        46: [2, 5],
                        49: [2, 5],
                        53: [2, 5]
                    }, {
                        5: [2, 6],
                        13: [2, 6],
                        14: [2, 6],
                        17: [2, 6],
                        27: [2, 6],
                        32: [2, 6],
                        37: [2, 6],
                        42: [2, 6],
                        45: [2, 6],
                        46: [2, 6],
                        49: [2, 6],
                        53: [2, 6]
                    }, {
                        5: [2, 7],
                        13: [2, 7],
                        14: [2, 7],
                        17: [2, 7],
                        27: [2, 7],
                        32: [2, 7],
                        37: [2, 7],
                        42: [2, 7],
                        45: [2, 7],
                        46: [2, 7],
                        49: [2, 7],
                        53: [2, 7]
                    }, {
                        5: [2, 8],
                        13: [2, 8],
                        14: [2, 8],
                        17: [2, 8],
                        27: [2, 8],
                        32: [2, 8],
                        37: [2, 8],
                        42: [2, 8],
                        45: [2, 8],
                        46: [2, 8],
                        49: [2, 8],
                        53: [2, 8]
                    }, {
                        18: 22,
                        66: [1, 32],
                        72: 23,
                        73: 24,
                        74: [1, 25],
                        75: [1, 26],
                        76: [1, 27],
                        77: [1, 28],
                        78: [1, 29],
                        79: [1, 31],
                        80: 30
                    }, {
                        18: 33,
                        66: [1, 32],
                        72: 23,
                        73: 24,
                        74: [1, 25],
                        75: [1, 26],
                        76: [1, 27],
                        77: [1, 28],
                        78: [1, 29],
                        79: [1, 31],
                        80: 30
                    }, {
                        4: 34,
                        6: 3,
                        13: [2, 43],
                        14: [2, 43],
                        17: [2, 43],
                        27: [2, 43],
                        32: [2, 43],
                        37: [2, 43],
                        42: [2, 43],
                        45: [2, 43],
                        46: [2, 43],
                        49: [2, 43],
                        53: [2, 43]
                    }, {
                        4: 35,
                        6: 3,
                        13: [2, 43],
                        14: [2, 43],
                        17: [2, 43],
                        27: [2, 43],
                        32: [2, 43],
                        42: [2, 43],
                        45: [2, 43],
                        46: [2, 43],
                        49: [2, 43],
                        53: [2, 43]
                    }, {
                        12: 36,
                        14: [1, 18]
                    }, {
                        18: 38,
                        54: 37,
                        58: 39,
                        59: [1, 40],
                        66: [1, 32],
                        72: 23,
                        73: 24,
                        74: [1, 25],
                        75: [1, 26],
                        76: [1, 27],
                        77: [1, 28],
                        78: [1, 29],
                        79: [1, 31],
                        80: 30
                    }, {
                        5: [2, 9],
                        13: [2, 9],
                        14: [2, 9],
                        16: [2, 9],
                        17: [2, 9],
                        27: [2, 9],
                        32: [2, 9],
                        37: [2, 9],
                        42: [2, 9],
                        45: [2, 9],
                        46: [2, 9],
                        49: [2, 9],
                        53: [2, 9]
                    }, {
                        18: 41,
                        66: [1, 32],
                        72: 23,
                        73: 24,
                        74: [1, 25],
                        75: [1, 26],
                        76: [1, 27],
                        77: [1, 28],
                        78: [1, 29],
                        79: [1, 31],
                        80: 30
                    }, {
                        18: 42,
                        66: [1, 32],
                        72: 23,
                        73: 24,
                        74: [1, 25],
                        75: [1, 26],
                        76: [1, 27],
                        77: [1, 28],
                        78: [1, 29],
                        79: [1, 31],
                        80: 30
                    }, {
                        18: 43,
                        66: [1, 32],
                        72: 23,
                        73: 24,
                        74: [1, 25],
                        75: [1, 26],
                        76: [1, 27],
                        77: [1, 28],
                        78: [1, 29],
                        79: [1, 31],
                        80: 30
                    }, {
                        31: [2, 73],
                        47: 44,
                        59: [2, 73],
                        66: [2, 73],
                        74: [2, 73],
                        75: [2, 73],
                        76: [2, 73],
                        77: [2, 73],
                        78: [2, 73],
                        79: [2, 73]
                    }, {
                        21: [2, 30],
                        31: [2, 30],
                        52: [2, 30],
                        59: [2, 30],
                        62: [2, 30],
                        66: [2, 30],
                        69: [2, 30],
                        74: [2, 30],
                        75: [2, 30],
                        76: [2, 30],
                        77: [2, 30],
                        78: [2, 30],
                        79: [2, 30]
                    }, {
                        21: [2, 31],
                        31: [2, 31],
                        52: [2, 31],
                        59: [2, 31],
                        62: [2, 31],
                        66: [2, 31],
                        69: [2, 31],
                        74: [2, 31],
                        75: [2, 31],
                        76: [2, 31],
                        77: [2, 31],
                        78: [2, 31],
                        79: [2, 31]
                    }, {
                        21: [2, 32],
                        31: [2, 32],
                        52: [2, 32],
                        59: [2, 32],
                        62: [2, 32],
                        66: [2, 32],
                        69: [2, 32],
                        74: [2, 32],
                        75: [2, 32],
                        76: [2, 32],
                        77: [2, 32],
                        78: [2, 32],
                        79: [2, 32]
                    }, {
                        21: [2, 33],
                        31: [2, 33],
                        52: [2, 33],
                        59: [2, 33],
                        62: [2, 33],
                        66: [2, 33],
                        69: [2, 33],
                        74: [2, 33],
                        75: [2, 33],
                        76: [2, 33],
                        77: [2, 33],
                        78: [2, 33],
                        79: [2, 33]
                    }, {
                        21: [2, 34],
                        31: [2, 34],
                        52: [2, 34],
                        59: [2, 34],
                        62: [2, 34],
                        66: [2, 34],
                        69: [2, 34],
                        74: [2, 34],
                        75: [2, 34],
                        76: [2, 34],
                        77: [2, 34],
                        78: [2, 34],
                        79: [2, 34]
                    }, {
                        21: [2, 35],
                        31: [2, 35],
                        52: [2, 35],
                        59: [2, 35],
                        62: [2, 35],
                        66: [2, 35],
                        69: [2, 35],
                        74: [2, 35],
                        75: [2, 35],
                        76: [2, 35],
                        77: [2, 35],
                        78: [2, 35],
                        79: [2, 35]
                    }, {
                        21: [2, 36],
                        31: [2, 36],
                        52: [2, 36],
                        59: [2, 36],
                        62: [2, 36],
                        66: [2, 36],
                        69: [2, 36],
                        74: [2, 36],
                        75: [2, 36],
                        76: [2, 36],
                        77: [2, 36],
                        78: [2, 36],
                        79: [2, 36]
                    }, {
                        21: [2, 40],
                        31: [2, 40],
                        52: [2, 40],
                        59: [2, 40],
                        62: [2, 40],
                        66: [2, 40],
                        69: [2, 40],
                        74: [2, 40],
                        75: [2, 40],
                        76: [2, 40],
                        77: [2, 40],
                        78: [2, 40],
                        79: [2, 40],
                        81: [1, 45]
                    }, {
                        66: [1, 32],
                        80: 46
                    }, {
                        21: [2, 42],
                        31: [2, 42],
                        52: [2, 42],
                        59: [2, 42],
                        62: [2, 42],
                        66: [2, 42],
                        69: [2, 42],
                        74: [2, 42],
                        75: [2, 42],
                        76: [2, 42],
                        77: [2, 42],
                        78: [2, 42],
                        79: [2, 42],
                        81: [2, 42]
                    }, {
                        50: 47,
                        52: [2, 77],
                        59: [2, 77],
                        66: [2, 77],
                        74: [2, 77],
                        75: [2, 77],
                        76: [2, 77],
                        77: [2, 77],
                        78: [2, 77],
                        79: [2, 77]
                    }, {
                        23: 48,
                        36: 50,
                        37: [1, 52],
                        41: 51,
                        42: [1, 53],
                        43: 49,
                        45: [2, 49]
                    }, {
                        26: 54,
                        41: 55,
                        42: [1, 53],
                        45: [2, 51]
                    }, {
                        16: [1, 56]
                    }, {
                        31: [2, 81],
                        55: 57,
                        59: [2, 81],
                        66: [2, 81],
                        74: [2, 81],
                        75: [2, 81],
                        76: [2, 81],
                        77: [2, 81],
                        78: [2, 81],
                        79: [2, 81]
                    }, {
                        31: [2, 37],
                        59: [2, 37],
                        66: [2, 37],
                        74: [2, 37],
                        75: [2, 37],
                        76: [2, 37],
                        77: [2, 37],
                        78: [2, 37],
                        79: [2, 37]
                    }, {
                        31: [2, 38],
                        59: [2, 38],
                        66: [2, 38],
                        74: [2, 38],
                        75: [2, 38],
                        76: [2, 38],
                        77: [2, 38],
                        78: [2, 38],
                        79: [2, 38]
                    }, {
                        18: 58,
                        66: [1, 32],
                        72: 23,
                        73: 24,
                        74: [1, 25],
                        75: [1, 26],
                        76: [1, 27],
                        77: [1, 28],
                        78: [1, 29],
                        79: [1, 31],
                        80: 30
                    }, {
                        28: 59,
                        31: [2, 53],
                        59: [2, 53],
                        66: [2, 53],
                        69: [2, 53],
                        74: [2, 53],
                        75: [2, 53],
                        76: [2, 53],
                        77: [2, 53],
                        78: [2, 53],
                        79: [2, 53]
                    }, {
                        31: [2, 59],
                        33: 60,
                        59: [2, 59],
                        66: [2, 59],
                        69: [2, 59],
                        74: [2, 59],
                        75: [2, 59],
                        76: [2, 59],
                        77: [2, 59],
                        78: [2, 59],
                        79: [2, 59]
                    }, {
                        19: 61,
                        21: [2, 45],
                        59: [2, 45],
                        66: [2, 45],
                        74: [2, 45],
                        75: [2, 45],
                        76: [2, 45],
                        77: [2, 45],
                        78: [2, 45],
                        79: [2, 45]
                    }, {
                        18: 65,
                        31: [2, 75],
                        48: 62,
                        57: 63,
                        58: 66,
                        59: [1, 40],
                        63: 64,
                        64: 67,
                        65: 68,
                        66: [1, 69],
                        72: 23,
                        73: 24,
                        74: [1, 25],
                        75: [1, 26],
                        76: [1, 27],
                        77: [1, 28],
                        78: [1, 29],
                        79: [1, 31],
                        80: 30
                    }, {
                        66: [1, 70]
                    }, {
                        21: [2, 39],
                        31: [2, 39],
                        52: [2, 39],
                        59: [2, 39],
                        62: [2, 39],
                        66: [2, 39],
                        69: [2, 39],
                        74: [2, 39],
                        75: [2, 39],
                        76: [2, 39],
                        77: [2, 39],
                        78: [2, 39],
                        79: [2, 39],
                        81: [1, 45]
                    }, {
                        18: 65,
                        51: 71,
                        52: [2, 79],
                        57: 72,
                        58: 66,
                        59: [1, 40],
                        63: 73,
                        64: 67,
                        65: 68,
                        66: [1, 69],
                        72: 23,
                        73: 24,
                        74: [1, 25],
                        75: [1, 26],
                        76: [1, 27],
                        77: [1, 28],
                        78: [1, 29],
                        79: [1, 31],
                        80: 30
                    }, {
                        24: 74,
                        45: [1, 75]
                    }, {
                        45: [2, 50]
                    }, {
                        4: 76,
                        6: 3,
                        13: [2, 43],
                        14: [2, 43],
                        17: [2, 43],
                        27: [2, 43],
                        32: [2, 43],
                        37: [2, 43],
                        42: [2, 43],
                        45: [2, 43],
                        46: [2, 43],
                        49: [2, 43],
                        53: [2, 43]
                    }, {
                        45: [2, 19]
                    }, {
                        18: 77,
                        66: [1, 32],
                        72: 23,
                        73: 24,
                        74: [1, 25],
                        75: [1, 26],
                        76: [1, 27],
                        77: [1, 28],
                        78: [1, 29],
                        79: [1, 31],
                        80: 30
                    }, {
                        4: 78,
                        6: 3,
                        13: [2, 43],
                        14: [2, 43],
                        17: [2, 43],
                        27: [2, 43],
                        32: [2, 43],
                        45: [2, 43],
                        46: [2, 43],
                        49: [2, 43],
                        53: [2, 43]
                    }, {
                        24: 79,
                        45: [1, 75]
                    }, {
                        45: [2, 52]
                    }, {
                        5: [2, 10],
                        13: [2, 10],
                        14: [2, 10],
                        17: [2, 10],
                        27: [2, 10],
                        32: [2, 10],
                        37: [2, 10],
                        42: [2, 10],
                        45: [2, 10],
                        46: [2, 10],
                        49: [2, 10],
                        53: [2, 10]
                    }, {
                        18: 65,
                        31: [2, 83],
                        56: 80,
                        57: 81,
                        58: 66,
                        59: [1, 40],
                        63: 82,
                        64: 67,
                        65: 68,
                        66: [1, 69],
                        72: 23,
                        73: 24,
                        74: [1, 25],
                        75: [1, 26],
                        76: [1, 27],
                        77: [1, 28],
                        78: [1, 29],
                        79: [1, 31],
                        80: 30
                    }, {
                        59: [2, 85],
                        60: 83,
                        62: [2, 85],
                        66: [2, 85],
                        74: [2, 85],
                        75: [2, 85],
                        76: [2, 85],
                        77: [2, 85],
                        78: [2, 85],
                        79: [2, 85]
                    }, {
                        18: 65,
                        29: 84,
                        31: [2, 55],
                        57: 85,
                        58: 66,
                        59: [1, 40],
                        63: 86,
                        64: 67,
                        65: 68,
                        66: [1, 69],
                        69: [2, 55],
                        72: 23,
                        73: 24,
                        74: [1, 25],
                        75: [1, 26],
                        76: [1, 27],
                        77: [1, 28],
                        78: [1, 29],
                        79: [1, 31],
                        80: 30
                    }, {
                        18: 65,
                        31: [2, 61],
                        34: 87,
                        57: 88,
                        58: 66,
                        59: [1, 40],
                        63: 89,
                        64: 67,
                        65: 68,
                        66: [1, 69],
                        69: [2, 61],
                        72: 23,
                        73: 24,
                        74: [1, 25],
                        75: [1, 26],
                        76: [1, 27],
                        77: [1, 28],
                        78: [1, 29],
                        79: [1, 31],
                        80: 30
                    }, {
                        18: 65,
                        20: 90,
                        21: [2, 47],
                        57: 91,
                        58: 66,
                        59: [1, 40],
                        63: 92,
                        64: 67,
                        65: 68,
                        66: [1, 69],
                        72: 23,
                        73: 24,
                        74: [1, 25],
                        75: [1, 26],
                        76: [1, 27],
                        77: [1, 28],
                        78: [1, 29],
                        79: [1, 31],
                        80: 30
                    }, {
                        31: [1, 93]
                    }, {
                        31: [2, 74],
                        59: [2, 74],
                        66: [2, 74],
                        74: [2, 74],
                        75: [2, 74],
                        76: [2, 74],
                        77: [2, 74],
                        78: [2, 74],
                        79: [2, 74]
                    }, {
                        31: [2, 76]
                    }, {
                        21: [2, 24],
                        31: [2, 24],
                        52: [2, 24],
                        59: [2, 24],
                        62: [2, 24],
                        66: [2, 24],
                        69: [2, 24],
                        74: [2, 24],
                        75: [2, 24],
                        76: [2, 24],
                        77: [2, 24],
                        78: [2, 24],
                        79: [2, 24]
                    }, {
                        21: [2, 25],
                        31: [2, 25],
                        52: [2, 25],
                        59: [2, 25],
                        62: [2, 25],
                        66: [2, 25],
                        69: [2, 25],
                        74: [2, 25],
                        75: [2, 25],
                        76: [2, 25],
                        77: [2, 25],
                        78: [2, 25],
                        79: [2, 25]
                    }, {
                        21: [2, 27],
                        31: [2, 27],
                        52: [2, 27],
                        62: [2, 27],
                        65: 94,
                        66: [1, 95],
                        69: [2, 27]
                    }, {
                        21: [2, 89],
                        31: [2, 89],
                        52: [2, 89],
                        62: [2, 89],
                        66: [2, 89],
                        69: [2, 89]
                    }, {
                        21: [2, 42],
                        31: [2, 42],
                        52: [2, 42],
                        59: [2, 42],
                        62: [2, 42],
                        66: [2, 42],
                        67: [1, 96],
                        69: [2, 42],
                        74: [2, 42],
                        75: [2, 42],
                        76: [2, 42],
                        77: [2, 42],
                        78: [2, 42],
                        79: [2, 42],
                        81: [2, 42]
                    }, {
                        21: [2, 41],
                        31: [2, 41],
                        52: [2, 41],
                        59: [2, 41],
                        62: [2, 41],
                        66: [2, 41],
                        69: [2, 41],
                        74: [2, 41],
                        75: [2, 41],
                        76: [2, 41],
                        77: [2, 41],
                        78: [2, 41],
                        79: [2, 41],
                        81: [2, 41]
                    }, {
                        52: [1, 97]
                    }, {
                        52: [2, 78],
                        59: [2, 78],
                        66: [2, 78],
                        74: [2, 78],
                        75: [2, 78],
                        76: [2, 78],
                        77: [2, 78],
                        78: [2, 78],
                        79: [2, 78]
                    }, {
                        52: [2, 80]
                    }, {
                        5: [2, 12],
                        13: [2, 12],
                        14: [2, 12],
                        17: [2, 12],
                        27: [2, 12],
                        32: [2, 12],
                        37: [2, 12],
                        42: [2, 12],
                        45: [2, 12],
                        46: [2, 12],
                        49: [2, 12],
                        53: [2, 12]
                    }, {
                        18: 98,
                        66: [1, 32],
                        72: 23,
                        73: 24,
                        74: [1, 25],
                        75: [1, 26],
                        76: [1, 27],
                        77: [1, 28],
                        78: [1, 29],
                        79: [1, 31],
                        80: 30
                    }, {
                        36: 50,
                        37: [1, 52],
                        41: 51,
                        42: [1, 53],
                        43: 100,
                        44: 99,
                        45: [2, 71]
                    }, {
                        31: [2, 65],
                        38: 101,
                        59: [2, 65],
                        66: [2, 65],
                        69: [2, 65],
                        74: [2, 65],
                        75: [2, 65],
                        76: [2, 65],
                        77: [2, 65],
                        78: [2, 65],
                        79: [2, 65]
                    }, {
                        45: [2, 17]
                    }, {
                        5: [2, 13],
                        13: [2, 13],
                        14: [2, 13],
                        17: [2, 13],
                        27: [2, 13],
                        32: [2, 13],
                        37: [2, 13],
                        42: [2, 13],
                        45: [2, 13],
                        46: [2, 13],
                        49: [2, 13],
                        53: [2, 13]
                    }, {
                        31: [1, 102]
                    }, {
                        31: [2, 82],
                        59: [2, 82],
                        66: [2, 82],
                        74: [2, 82],
                        75: [2, 82],
                        76: [2, 82],
                        77: [2, 82],
                        78: [2, 82],
                        79: [2, 82]
                    }, {
                        31: [2, 84]
                    }, {
                        18: 65,
                        57: 104,
                        58: 66,
                        59: [1, 40],
                        61: 103,
                        62: [2, 87],
                        63: 105,
                        64: 67,
                        65: 68,
                        66: [1, 69],
                        72: 23,
                        73: 24,
                        74: [1, 25],
                        75: [1, 26],
                        76: [1, 27],
                        77: [1, 28],
                        78: [1, 29],
                        79: [1, 31],
                        80: 30
                    }, {
                        30: 106,
                        31: [2, 57],
                        68: 107,
                        69: [1, 108]
                    }, {
                        31: [2, 54],
                        59: [2, 54],
                        66: [2, 54],
                        69: [2, 54],
                        74: [2, 54],
                        75: [2, 54],
                        76: [2, 54],
                        77: [2, 54],
                        78: [2, 54],
                        79: [2, 54]
                    }, {
                        31: [2, 56],
                        69: [2, 56]
                    }, {
                        31: [2, 63],
                        35: 109,
                        68: 110,
                        69: [1, 108]
                    }, {
                        31: [2, 60],
                        59: [2, 60],
                        66: [2, 60],
                        69: [2, 60],
                        74: [2, 60],
                        75: [2, 60],
                        76: [2, 60],
                        77: [2, 60],
                        78: [2, 60],
                        79: [2, 60]
                    }, {
                        31: [2, 62],
                        69: [2, 62]
                    }, {
                        21: [1, 111]
                    }, {
                        21: [2, 46],
                        59: [2, 46],
                        66: [2, 46],
                        74: [2, 46],
                        75: [2, 46],
                        76: [2, 46],
                        77: [2, 46],
                        78: [2, 46],
                        79: [2, 46]
                    }, {
                        21: [2, 48]
                    }, {
                        5: [2, 21],
                        13: [2, 21],
                        14: [2, 21],
                        17: [2, 21],
                        27: [2, 21],
                        32: [2, 21],
                        37: [2, 21],
                        42: [2, 21],
                        45: [2, 21],
                        46: [2, 21],
                        49: [2, 21],
                        53: [2, 21]
                    }, {
                        21: [2, 90],
                        31: [2, 90],
                        52: [2, 90],
                        62: [2, 90],
                        66: [2, 90],
                        69: [2, 90]
                    }, {
                        67: [1, 96]
                    }, {
                        18: 65,
                        57: 112,
                        58: 66,
                        59: [1, 40],
                        66: [1, 32],
                        72: 23,
                        73: 24,
                        74: [1, 25],
                        75: [1, 26],
                        76: [1, 27],
                        77: [1, 28],
                        78: [1, 29],
                        79: [1, 31],
                        80: 30
                    }, {
                        5: [2, 22],
                        13: [2, 22],
                        14: [2, 22],
                        17: [2, 22],
                        27: [2, 22],
                        32: [2, 22],
                        37: [2, 22],
                        42: [2, 22],
                        45: [2, 22],
                        46: [2, 22],
                        49: [2, 22],
                        53: [2, 22]
                    }, {
                        31: [1, 113]
                    }, {
                        45: [2, 18]
                    }, {
                        45: [2, 72]
                    }, {
                        18: 65,
                        31: [2, 67],
                        39: 114,
                        57: 115,
                        58: 66,
                        59: [1, 40],
                        63: 116,
                        64: 67,
                        65: 68,
                        66: [1, 69],
                        69: [2, 67],
                        72: 23,
                        73: 24,
                        74: [1, 25],
                        75: [1, 26],
                        76: [1, 27],
                        77: [1, 28],
                        78: [1, 29],
                        79: [1, 31],
                        80: 30
                    }, {
                        5: [2, 23],
                        13: [2, 23],
                        14: [2, 23],
                        17: [2, 23],
                        27: [2, 23],
                        32: [2, 23],
                        37: [2, 23],
                        42: [2, 23],
                        45: [2, 23],
                        46: [2, 23],
                        49: [2, 23],
                        53: [2, 23]
                    }, {
                        62: [1, 117]
                    }, {
                        59: [2, 86],
                        62: [2, 86],
                        66: [2, 86],
                        74: [2, 86],
                        75: [2, 86],
                        76: [2, 86],
                        77: [2, 86],
                        78: [2, 86],
                        79: [2, 86]
                    }, {
                        62: [2, 88]
                    }, {
                        31: [1, 118]
                    }, {
                        31: [2, 58]
                    }, {
                        66: [1, 120],
                        70: 119
                    }, {
                        31: [1, 121]
                    }, {
                        31: [2, 64]
                    }, {
                        14: [2, 11]
                    }, {
                        21: [2, 28],
                        31: [2, 28],
                        52: [2, 28],
                        62: [2, 28],
                        66: [2, 28],
                        69: [2, 28]
                    }, {
                        5: [2, 20],
                        13: [2, 20],
                        14: [2, 20],
                        17: [2, 20],
                        27: [2, 20],
                        32: [2, 20],
                        37: [2, 20],
                        42: [2, 20],
                        45: [2, 20],
                        46: [2, 20],
                        49: [2, 20],
                        53: [2, 20]
                    }, {
                        31: [2, 69],
                        40: 122,
                        68: 123,
                        69: [1, 108]
                    }, {
                        31: [2, 66],
                        59: [2, 66],
                        66: [2, 66],
                        69: [2, 66],
                        74: [2, 66],
                        75: [2, 66],
                        76: [2, 66],
                        77: [2, 66],
                        78: [2, 66],
                        79: [2, 66]
                    }, {
                        31: [2, 68],
                        69: [2, 68]
                    }, {
                        21: [2, 26],
                        31: [2, 26],
                        52: [2, 26],
                        59: [2, 26],
                        62: [2, 26],
                        66: [2, 26],
                        69: [2, 26],
                        74: [2, 26],
                        75: [2, 26],
                        76: [2, 26],
                        77: [2, 26],
                        78: [2, 26],
                        79: [2, 26]
                    }, {
                        13: [2, 14],
                        14: [2, 14],
                        17: [2, 14],
                        27: [2, 14],
                        32: [2, 14],
                        37: [2, 14],
                        42: [2, 14],
                        45: [2, 14],
                        46: [2, 14],
                        49: [2, 14],
                        53: [2, 14]
                    }, {
                        66: [1, 125],
                        71: [1, 124]
                    }, {
                        66: [2, 91],
                        71: [2, 91]
                    }, {
                        13: [2, 15],
                        14: [2, 15],
                        17: [2, 15],
                        27: [2, 15],
                        32: [2, 15],
                        42: [2, 15],
                        45: [2, 15],
                        46: [2, 15],
                        49: [2, 15],
                        53: [2, 15]
                    }, {
                        31: [1, 126]
                    }, {
                        31: [2, 70]
                    }, {
                        31: [2, 29]
                    }, {
                        66: [2, 92],
                        71: [2, 92]
                    }, {
                        13: [2, 16],
                        14: [2, 16],
                        17: [2, 16],
                        27: [2, 16],
                        32: [2, 16],
                        37: [2, 16],
                        42: [2, 16],
                        45: [2, 16],
                        46: [2, 16],
                        49: [2, 16],
                        53: [2, 16]
                    }],
                    defaultActions: {
                        4: [2, 1],
                        49: [2, 50],
                        51: [2, 19],
                        55: [2, 52],
                        64: [2, 76],
                        73: [2, 80],
                        78: [2, 17],
                        82: [2, 84],
                        92: [2, 48],
                        99: [2, 18],
                        100: [2, 72],
                        105: [2, 88],
                        107: [2, 58],
                        110: [2, 64],
                        111: [2, 11],
                        123: [2, 70],
                        124: [2, 29]
                    },
                    parseError: function(str) {
                        throw new Error(str)
                    },
                    parse: function(input) {
                        function lex() {
                            var token;
                            return token = self.lexer.lex() || 1, "number" != typeof token && (token = self.symbols_[token] || token), token
                        }
                        var self = this,
                            stack = [0],
                            vstack = [null],
                            lstack = [],
                            table = this.table,
                            yytext = "",
                            yylineno = 0,
                            yyleng = 0,
                            recovering = 0;
                        this.lexer.setInput(input), this.lexer.yy = this.yy, this.yy.lexer = this.lexer, this.yy.parser = this, "undefined" == typeof this.lexer.yylloc && (this.lexer.yylloc = {});
                        var yyloc = this.lexer.yylloc;
                        lstack.push(yyloc);
                        var ranges = this.lexer.options && this.lexer.options.ranges;
                        "function" == typeof this.yy.parseError && (this.parseError = this.yy.parseError);
                        for (var symbol, preErrorSymbol, state, action, r, p, len, newState, expected, yyval = {};;) {
                            if (state = stack[stack.length - 1], this.defaultActions[state] ? action = this.defaultActions[state] : ((null === symbol || "undefined" == typeof symbol) && (symbol = lex()), action = table[state] && table[state][symbol]), "undefined" == typeof action || !action.length || !action[0]) {
                                var errStr = "";
                                if (!recovering) {
                                    expected = [];
                                    for (p in table[state]) this.terminals_[p] && p > 2 && expected.push("'" + this.terminals_[p] + "'");
                                    errStr = this.lexer.showPosition ? "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'" : "Parse error on line " + (yylineno + 1) + ": Unexpected " + (1 == symbol ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"), this.parseError(errStr, {
                                        text: this.lexer.match,
                                        token: this.terminals_[symbol] || symbol,
                                        line: this.lexer.yylineno,
                                        loc: yyloc,
                                        expected: expected
                                    })
                                }
                            }
                            if (action[0] instanceof Array && action.length > 1) throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
                            switch (action[0]) {
                                case 1:
                                    stack.push(symbol), vstack.push(this.lexer.yytext), lstack.push(this.lexer.yylloc), stack.push(action[1]), symbol = null, preErrorSymbol ? (symbol = preErrorSymbol, preErrorSymbol = null) : (yyleng = this.lexer.yyleng, yytext = this.lexer.yytext, yylineno = this.lexer.yylineno, yyloc = this.lexer.yylloc, recovering > 0 && recovering--);
                                    break;
                                case 2:
                                    if (len = this.productions_[action[1]][1], yyval.$ = vstack[vstack.length - len], yyval._$ = {
                                        first_line: lstack[lstack.length - (len || 1)].first_line,
                                        last_line: lstack[lstack.length - 1].last_line,
                                        first_column: lstack[lstack.length - (len || 1)].first_column,
                                        last_column: lstack[lstack.length - 1].last_column
                                    }, ranges && (yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]), r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack), "undefined" != typeof r) return r;
                                    len && (stack = stack.slice(0, -1 * len * 2), vstack = vstack.slice(0, -1 * len), lstack = lstack.slice(0, -1 * len)), stack.push(this.productions_[action[1]][0]), vstack.push(yyval.$), lstack.push(yyval._$), newState = table[stack[stack.length - 2]][stack[stack.length - 1]], stack.push(newState);
                                    break;
                                case 3:
                                    return !0
                            }
                        }
                        return !0
                    }
                }, lexer = function() {
                        var lexer = {
                            EOF: 1,
                            parseError: function(str, hash) {
                                if (!this.yy.parser) throw new Error(str);
                                this.yy.parser.parseError(str, hash)
                            },
                            setInput: function(input) {
                                return this._input = input, this._more = this._less = this.done = !1, this.yylineno = this.yyleng = 0, this.yytext = this.matched = this.match = "", this.conditionStack = ["INITIAL"], this.yylloc = {
                                    first_line: 1,
                                    first_column: 0,
                                    last_line: 1,
                                    last_column: 0
                                }, this.options.ranges && (this.yylloc.range = [0, 0]), this.offset = 0, this
                            },
                            input: function() {
                                var ch = this._input[0];
                                this.yytext += ch, this.yyleng++, this.offset++, this.match += ch, this.matched += ch;
                                var lines = ch.match(/(?:\r\n?|\n).*/g);
                                return lines ? (this.yylineno++, this.yylloc.last_line++) : this.yylloc.last_column++, this.options.ranges && this.yylloc.range[1]++, this._input = this._input.slice(1), ch
                            },
                            unput: function(ch) {
                                var len = ch.length,
                                    lines = ch.split(/(?:\r\n?|\n)/g);
                                this._input = ch + this._input, this.yytext = this.yytext.substr(0, this.yytext.length - len - 1), this.offset -= len;
                                var oldLines = this.match.split(/(?:\r\n?|\n)/g);
                                this.match = this.match.substr(0, this.match.length - 1), this.matched = this.matched.substr(0, this.matched.length - 1), lines.length - 1 && (this.yylineno -= lines.length - 1);
                                var r = this.yylloc.range;
                                return this.yylloc = {
                                    first_line: this.yylloc.first_line,
                                    last_line: this.yylineno + 1,
                                    first_column: this.yylloc.first_column,
                                    last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
                                }, this.options.ranges && (this.yylloc.range = [r[0], r[0] + this.yyleng - len]), this
                            },
                            more: function() {
                                return this._more = !0, this
                            },
                            less: function(n) {
                                this.unput(this.match.slice(n))
                            },
                            pastInput: function() {
                                var past = this.matched.substr(0, this.matched.length - this.match.length);
                                return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "")
                            },
                            upcomingInput: function() {
                                var next = this.match;
                                return next.length < 20 && (next += this._input.substr(0, 20 - next.length)), (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, "")
                            },
                            showPosition: function() {
                                var pre = this.pastInput(),
                                    c = new Array(pre.length + 1).join("-");
                                return pre + this.upcomingInput() + "\n" + c + "^"
                            },
                            next: function() {
                                if (this.done) return this.EOF;
                                this._input || (this.done = !0);
                                var token, match, tempMatch, index, lines;
                                this._more || (this.yytext = "", this.match = "");
                                for (var rules = this._currentRules(), i = 0; i < rules.length && (tempMatch = this._input.match(this.rules[rules[i]]), !tempMatch || match && !(tempMatch[0].length > match[0].length) || (match = tempMatch, index = i, this.options.flex)); i++);
                                return match ? (lines = match[0].match(/(?:\r\n?|\n).*/g), lines && (this.yylineno += lines.length), this.yylloc = {
                                    first_line: this.yylloc.last_line,
                                    last_line: this.yylineno + 1,
                                    first_column: this.yylloc.last_column,
                                    last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length
                                }, this.yytext += match[0], this.match += match[0], this.matches = match, this.yyleng = this.yytext.length, this.options.ranges && (this.yylloc.range = [this.offset, this.offset += this.yyleng]), this._more = !1, this._input = this._input.slice(match[0].length), this.matched += match[0], token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]), this.done && this._input && (this.done = !1), token ? token : void 0) : "" === this._input ? this.EOF : this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
                                    text: "",
                                    token: null,
                                    line: this.yylineno
                                })
                            },
                            lex: function() {
                                var r = this.next();
                                return "undefined" != typeof r ? r : this.lex()
                            },
                            begin: function(condition) {
                                this.conditionStack.push(condition)
                            },
                            popState: function() {
                                return this.conditionStack.pop()
                            },
                            _currentRules: function() {
                                return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules
                            },
                            topState: function() {
                                return this.conditionStack[this.conditionStack.length - 2]
                            },
                            pushState: function(condition) {
                                this.begin(condition)
                            }
                        };
                        return lexer.options = {}, lexer.performAction = function(yy, yy_, $avoiding_name_collisions, YY_START) {
                            function strip(start, end) {
                                return yy_.yytext = yy_.yytext.substr(start, yy_.yyleng - end)
                            }
                            switch ($avoiding_name_collisions) {
                                case 0:
                                    if ("\\\\" === yy_.yytext.slice(-2) ? (strip(0, 1), this.begin("mu")) : "\\" === yy_.yytext.slice(-1) ? (strip(0, 1), this.begin("emu")) : this.begin("mu"), yy_.yytext) return 14;
                                    break;
                                case 1:
                                    return 14;
                                case 2:
                                    return this.popState(), 14;
                                case 3:
                                    return yy_.yytext = yy_.yytext.substr(5, yy_.yyleng - 9), this.popState(), 16;
                                case 4:
                                    return 14;
                                case 5:
                                    return this.popState(), 13;
                                case 6:
                                    return 59;
                                case 7:
                                    return 62;
                                case 8:
                                    return 17;
                                case 9:
                                    return this.popState(), this.begin("raw"), 21;
                                case 10:
                                    return 53;
                                case 11:
                                    return 27;
                                case 12:
                                    return 45;
                                case 13:
                                    return this.popState(), 42;
                                case 14:
                                    return this.popState(), 42;
                                case 15:
                                    return 32;
                                case 16:
                                    return 37;
                                case 17:
                                    return 49;
                                case 18:
                                    return 46;
                                case 19:
                                    this.unput(yy_.yytext), this.popState(), this.begin("com");
                                    break;
                                case 20:
                                    return this.popState(), 13;
                                case 21:
                                    return 46;
                                case 22:
                                    return 67;
                                case 23:
                                    return 66;
                                case 24:
                                    return 66;
                                case 25:
                                    return 81;
                                case 26:
                                    break;
                                case 27:
                                    return this.popState(), 52;
                                case 28:
                                    return this.popState(), 31;
                                case 29:
                                    return yy_.yytext = strip(1, 2).replace(/\\"/g, '"'), 74;
                                case 30:
                                    return yy_.yytext = strip(1, 2).replace(/\\'/g, "'"), 74;
                                case 31:
                                    return 79;
                                case 32:
                                    return 76;
                                case 33:
                                    return 76;
                                case 34:
                                    return 77;
                                case 35:
                                    return 78;
                                case 36:
                                    return 75;
                                case 37:
                                    return 69;
                                case 38:
                                    return 71;
                                case 39:
                                    return 66;
                                case 40:
                                    return 66;
                                case 41:
                                    return "INVALID";
                                case 42:
                                    return 5
                            }
                        }, lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/, /^(?:[^\x00]+)/, /^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/, /^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/, /^(?:[^\x00]*?(?=(\{\{\{\{\/)))/, /^(?:[\s\S]*?--(~)?\}\})/, /^(?:\()/, /^(?:\))/, /^(?:\{\{\{\{)/, /^(?:\}\}\}\})/, /^(?:\{\{(~)?>)/, /^(?:\{\{(~)?#)/, /^(?:\{\{(~)?\/)/, /^(?:\{\{(~)?\^\s*(~)?\}\})/, /^(?:\{\{(~)?\s*else\s*(~)?\}\})/, /^(?:\{\{(~)?\^)/, /^(?:\{\{(~)?\s*else\b)/, /^(?:\{\{(~)?\{)/, /^(?:\{\{(~)?&)/, /^(?:\{\{(~)?!--)/, /^(?:\{\{(~)?![\s\S]*?\}\})/, /^(?:\{\{(~)?)/, /^(?:=)/, /^(?:\.\.)/, /^(?:\.(?=([=~}\s\/.)|])))/, /^(?:[\/.])/, /^(?:\s+)/, /^(?:\}(~)?\}\})/, /^(?:(~)?\}\})/, /^(?:"(\\["]|[^"])*")/, /^(?:'(\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\s)])))/, /^(?:false(?=([~}\s)])))/, /^(?:undefined(?=([~}\s)])))/, /^(?:null(?=([~}\s)])))/, /^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/, /^(?:as\s+\|)/, /^(?:\|)/, /^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/, /^(?:\[[^\]]*\])/, /^(?:.)/, /^(?:$)/], lexer.conditions = {
                            mu: {
                                rules: [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42],
                                inclusive: !1
                            },
                            emu: {
                                rules: [2],
                                inclusive: !1
                            },
                            com: {
                                rules: [5],
                                inclusive: !1
                            },
                            raw: {
                                rules: [3, 4],
                                inclusive: !1
                            },
                            INITIAL: {
                                rules: [0, 1, 42],
                                inclusive: !0
                            }
                        }, lexer
                    }();
                return parser.lexer = lexer, Parser.prototype = parser, parser.Parser = Parser, new Parser
            }();
            exports["default"] = handlebars, module.exports = exports["default"]
        },
        function(module, exports, __webpack_require__) {
            "use strict";

            function WhitespaceControl() {}

            function isPrevWhitespace(body, i, isRoot) {
                void 0 === i && (i = body.length);
                var prev = body[i - 1],
                    sibling = body[i - 2];
                return prev ? "ContentStatement" === prev.type ? (sibling || !isRoot ? /\r?\n\s*?$/ : /(^|\r?\n)\s*?$/).test(prev.original) : void 0 : isRoot
            }

            function isNextWhitespace(body, i, isRoot) {
                void 0 === i && (i = -1);
                var next = body[i + 1],
                    sibling = body[i + 2];
                return next ? "ContentStatement" === next.type ? (sibling || !isRoot ? /^\s*?\r?\n/ : /^\s*?(\r?\n|$)/).test(next.original) : void 0 : isRoot
            }

            function omitRight(body, i, multiple) {
                var current = body[null == i ? 0 : i + 1];
                if (current && "ContentStatement" === current.type && (multiple || !current.rightStripped)) {
                    var original = current.value;
                    current.value = current.value.replace(multiple ? /^\s+/ : /^[ \t]*\r?\n?/, ""), current.rightStripped = current.value !== original
                }
            }

            function omitLeft(body, i, multiple) {
                var current = body[null == i ? body.length - 1 : i - 1];
                if (current && "ContentStatement" === current.type && (multiple || !current.leftStripped)) {
                    var original = current.value;
                    return current.value = current.value.replace(multiple ? /\s+$/ : /[ \t]+$/, ""), current.leftStripped = current.value !== original, current.leftStripped
                }
            }
            var _interopRequireWildcard = __webpack_require__(8)["default"];
            exports.__esModule = !0;
            var _Visitor = __webpack_require__(6),
                _Visitor2 = _interopRequireWildcard(_Visitor);
            WhitespaceControl.prototype = new _Visitor2["default"], WhitespaceControl.prototype.Program = function(program) {
                var isRoot = !this.isRootSeen;
                this.isRootSeen = !0;
                for (var body = program.body, i = 0, l = body.length; l > i; i++) {
                    var current = body[i],
                        strip = this.accept(current);
                    if (strip) {
                        var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),
                            _isNextWhitespace = isNextWhitespace(body, i, isRoot),
                            openStandalone = strip.openStandalone && _isPrevWhitespace,
                            closeStandalone = strip.closeStandalone && _isNextWhitespace,
                            inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;
                        strip.close && omitRight(body, i, !0), strip.open && omitLeft(body, i, !0), inlineStandalone && (omitRight(body, i), omitLeft(body, i) && "PartialStatement" === current.type && (current.indent = /([ \t]+$)/.exec(body[i - 1].original)[1])), openStandalone && (omitRight((current.program || current.inverse).body), omitLeft(body, i)), closeStandalone && (omitRight(body, i), omitLeft((current.inverse || current.program).body))
                    }
                }
                return program
            }, WhitespaceControl.prototype.BlockStatement = function(block) {
                this.accept(block.program), this.accept(block.inverse);
                var program = block.program || block.inverse,
                    inverse = block.program && block.inverse,
                    firstInverse = inverse,
                    lastInverse = inverse;
                if (inverse && inverse.chained)
                    for (firstInverse = inverse.body[0].program; lastInverse.chained;) lastInverse = lastInverse.body[lastInverse.body.length - 1].program;
                var strip = {
                    open: block.openStrip.open,
                    close: block.closeStrip.close,
                    openStandalone: isNextWhitespace(program.body),
                    closeStandalone: isPrevWhitespace((firstInverse || program).body)
                };
                if (block.openStrip.close && omitRight(program.body, null, !0), inverse) {
                    var inverseStrip = block.inverseStrip;
                    inverseStrip.open && omitLeft(program.body, null, !0), inverseStrip.close && omitRight(firstInverse.body, null, !0), block.closeStrip.open && omitLeft(lastInverse.body, null, !0), isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body) && (omitLeft(program.body), omitRight(firstInverse.body))
                } else block.closeStrip.open && omitLeft(program.body, null, !0);
                return strip
            }, WhitespaceControl.prototype.MustacheStatement = function(mustache) {
                return mustache.strip
            }, WhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function(node) {
                var strip = node.strip || {};
                return {
                    inlineStandalone: !0,
                    open: strip.open,
                    close: strip.close
                }
            }, exports["default"] = WhitespaceControl, module.exports = exports["default"]
        },
        function(module, exports, __webpack_require__) {
            "use strict";

            function SourceLocation(source, locInfo) {
                this.source = source, this.start = {
                    line: locInfo.first_line,
                    column: locInfo.first_column
                }, this.end = {
                    line: locInfo.last_line,
                    column: locInfo.last_column
                }
            }

            function id(token) {
                return /^\[.*\]$/.test(token) ? token.substr(1, token.length - 2) : token
            }

            function stripFlags(open, close) {
                return {
                    open: "~" === open.charAt(2),
                    close: "~" === close.charAt(close.length - 3)
                }
            }

            function stripComment(comment) {
                return comment.replace(/^\{\{~?\!-?-?/, "").replace(/-?-?~?\}\}$/, "")
            }

            function preparePath(data, parts, locInfo) {
                locInfo = this.locInfo(locInfo);
                for (var original = data ? "@" : "", dig = [], depth = 0, depthString = "", i = 0, l = parts.length; l > i; i++) {
                    var part = parts[i].part,
                        isLiteral = parts[i].original !== part;
                    if (original += (parts[i].separator || "") + part, isLiteral || ".." !== part && "." !== part && "this" !== part) dig.push(part);
                    else {
                        if (dig.length > 0) throw new _Exception2["default"]("Invalid path: " + original, {
                            loc: locInfo
                        });
                        ".." === part && (depth++, depthString += "../")
                    }
                }
                return new this.PathExpression(data, depth, dig, original, locInfo)
            }

            function prepareMustache(path, params, hash, open, strip, locInfo) {
                var escapeFlag = open.charAt(3) || open.charAt(2),
                    escaped = "{" !== escapeFlag && "&" !== escapeFlag;
                return new this.MustacheStatement(path, params, hash, escaped, strip, this.locInfo(locInfo))
            }

            function prepareRawBlock(openRawBlock, content, close, locInfo) {
                if (openRawBlock.path.original !== close) {
                    var errorNode = {
                        loc: openRawBlock.path.loc
                    };
                    throw new _Exception2["default"](openRawBlock.path.original + " doesn't match " + close, errorNode)
                }
                locInfo = this.locInfo(locInfo);
                var program = new this.Program([content], null, {}, locInfo);
                return new this.BlockStatement(openRawBlock.path, openRawBlock.params, openRawBlock.hash, program, void 0, {}, {}, {}, locInfo)
            }

            function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) {
                if (close && close.path && openBlock.path.original !== close.path.original) {
                    var errorNode = {
                        loc: openBlock.path.loc
                    };
                    throw new _Exception2["default"](openBlock.path.original + " doesn't match " + close.path.original, errorNode)
                }
                program.blockParams = openBlock.blockParams;
                var inverse = void 0,
                    inverseStrip = void 0;
                return inverseAndProgram && (inverseAndProgram.chain && (inverseAndProgram.program.body[0].closeStrip = close.strip), inverseStrip = inverseAndProgram.strip, inverse = inverseAndProgram.program), inverted && (inverted = inverse, inverse = program, program = inverted), new this.BlockStatement(openBlock.path, openBlock.params, openBlock.hash, program, inverse, openBlock.strip, inverseStrip, close && close.strip, this.locInfo(locInfo))
            }
            var _interopRequireWildcard = __webpack_require__(8)["default"];
            exports.__esModule = !0, exports.SourceLocation = SourceLocation, exports.id = id, exports.stripFlags = stripFlags, exports.stripComment = stripComment, exports.preparePath = preparePath, exports.prepareMustache = prepareMustache, exports.prepareRawBlock = prepareRawBlock, exports.prepareBlock = prepareBlock;
            var _Exception = __webpack_require__(11),
                _Exception2 = _interopRequireWildcard(_Exception)
        },
        function(module, exports, __webpack_require__) {
            "use strict";

            function castChunk(chunk, codeGen, loc) {
                if (_isArray.isArray(chunk)) {
                    for (var ret = [], i = 0, len = chunk.length; len > i; i++) ret.push(codeGen.wrap(chunk[i], loc));
                    return ret
                }
                return "boolean" == typeof chunk || "number" == typeof chunk ? chunk + "" : chunk
            }

            function CodeGen(srcFile) {
                this.srcFile = srcFile, this.source = []
            }
            exports.__esModule = !0;
            var _isArray = __webpack_require__(12),
                SourceNode = void 0;
            try {} catch (err) {}
            SourceNode || (SourceNode = function(line, column, srcFile, chunks) {
                this.src = "", chunks && this.add(chunks)
            }, SourceNode.prototype = {
                add: function(chunks) {
                    _isArray.isArray(chunks) && (chunks = chunks.join("")), this.src += chunks
                },
                prepend: function(chunks) {
                    _isArray.isArray(chunks) && (chunks = chunks.join("")), this.src = chunks + this.src
                },
                toStringWithSourceMap: function() {
                    return {
                        code: this.toString()
                    }
                },
                toString: function() {
                    return this.src
                }
            }), CodeGen.prototype = {
                prepend: function(source, loc) {
                    this.source.unshift(this.wrap(source, loc))
                },
                push: function(source, loc) {
                    this.source.push(this.wrap(source, loc))
                },
                merge: function() {
                    var source = this.empty();
                    return this.each(function(line) {
                        source.add(["  ", line, "\n"])
                    }), source
                },
                each: function(iter) {
                    for (var i = 0, len = this.source.length; len > i; i++) iter(this.source[i])
                },
                empty: function() {
                    var loc = void 0 === arguments[0] ? this.currentLocation || {
                        start: {}
                    } : arguments[0];
                    return new SourceNode(loc.start.line, loc.start.column, this.srcFile)
                },
                wrap: function(chunk) {
                    var loc = void 0 === arguments[1] ? this.currentLocation || {
                        start: {}
                    } : arguments[1];
                    return chunk instanceof SourceNode ? chunk : (chunk = castChunk(chunk, this, loc), new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk))
                },
                functionCall: function(fn, type, params) {
                    return params = this.generateList(params), this.wrap([fn, type ? "." + type + "(" : "(", params, ")"])
                },
                quotedString: function(str) {
                    return '"' + (str + "").replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029") + '"'
                },
                objectLiteral: function(obj) {
                    var pairs = [];
                    for (var key in obj)
                        if (obj.hasOwnProperty(key)) {
                            var value = castChunk(obj[key], this);
                            "undefined" !== value && pairs.push([this.quotedString(key), ":", value])
                        }
                    var ret = this.generateList(pairs);
                    return ret.prepend("{"), ret.add("}"), ret
                },
                generateList: function(entries, loc) {
                    for (var ret = this.empty(loc), i = 0, len = entries.length; len > i; i++) i && ret.add(","), ret.add(castChunk(entries[i], this, loc));
                    return ret
                },
                generateArray: function(entries, loc) {
                    var ret = this.generateList(entries, loc);
                    return ret.prepend("["), ret.add("]"), ret
                }
            }, exports["default"] = CodeGen, module.exports = exports["default"]
        }
    ])
}),
function(factory) {
    "function" == typeof define && define.amd ? define(["jquery"], factory) : factory("undefined" != typeof jQuery ? jQuery : window.Zepto)
}(function($) {
    "use strict";

    function doAjaxSubmit(e) {
        var options = e.data;
        e.isDefaultPrevented() || (e.preventDefault(), $(e.target).ajaxSubmit(options))
    }

    function captureSubmittingElement(e) {
        var target = e.target,
            $el = $(target);
        if (!$el.is("[type=submit],[type=image]")) {
            var t = $el.closest("[type=submit]");
            if (0 === t.length) return;
            target = t[0]
        }
        var form = this;
        if (form.clk = target, "image" == target.type)
            if (void 0 !== e.offsetX) form.clk_x = e.offsetX, form.clk_y = e.offsetY;
            else if ("function" == typeof $.fn.offset) {
            var offset = $el.offset();
            form.clk_x = e.pageX - offset.left, form.clk_y = e.pageY - offset.top
        } else form.clk_x = e.pageX - target.offsetLeft, form.clk_y = e.pageY - target.offsetTop;
        setTimeout(function() {
            form.clk = form.clk_x = form.clk_y = null
        }, 100)
    }

    function log() {
        if ($.fn.ajaxSubmit.debug) {
            var msg = "[jquery.form] " + Array.prototype.join.call(arguments, "");
            window.console && window.console.log ? window.console.log(msg) : window.opera && window.opera.postError && window.opera.postError(msg)
        }
    }
    var feature = {};
    feature.fileapi = void 0 !== $("<input type='file'/>").get(0).files, feature.formdata = void 0 !== window.FormData;
    var hasProp = !! $.fn.prop;
    $.fn.attr2 = function() {
        if (!hasProp) return this.attr.apply(this, arguments);
        var val = this.prop.apply(this, arguments);
        return val && val.jquery || "string" == typeof val ? val : this.attr.apply(this, arguments)
    }, $.fn.ajaxSubmit = function(options) {
        function deepSerialize(extraData) {
            var i, part, serialized = $.param(extraData, options.traditional).split("&"),
                len = serialized.length,
                result = [];
            for (i = 0; len > i; i++) serialized[i] = serialized[i].replace(/\+/g, " "), part = serialized[i].split("="), result.push([decodeURIComponent(part[0]), decodeURIComponent(part[1])]);
            return result
        }

        function fileUploadXhr(a) {
            for (var formdata = new FormData, i = 0; i < a.length; i++) formdata.append(a[i].name, a[i].value);
            if (options.extraData) {
                var serializedData = deepSerialize(options.extraData);
                for (i = 0; i < serializedData.length; i++) serializedData[i] && formdata.append(serializedData[i][0], serializedData[i][1])
            }
            options.data = null;
            var s = $.extend(!0, {}, $.ajaxSettings, options, {
                contentType: !1,
                processData: !1,
                cache: !1,
                type: method || "POST"
            });
            options.uploadProgress && (s.xhr = function() {
                var xhr = $.ajaxSettings.xhr();
                return xhr.upload && xhr.upload.addEventListener("progress", function(event) {
                    var percent = 0,
                        position = event.loaded || event.position,
                        total = event.total;
                    event.lengthComputable && (percent = Math.ceil(position / total * 100)), options.uploadProgress(event, position, total, percent)
                }, !1), xhr
            }), s.data = null;
            var beforeSend = s.beforeSend;
            return s.beforeSend = function(xhr, o) {
                o.data = options.formData ? options.formData : formdata, beforeSend && beforeSend.call(this, xhr, o)
            }, $.ajax(s)
        }

        function fileUploadIframe(a) {
            function getDoc(frame) {
                var doc = null;
                try {
                    frame.contentWindow && (doc = frame.contentWindow.document)
                } catch (err) {
                    log("cannot get iframe.contentWindow document: " + err)
                }
                if (doc) return doc;
                try {
                    doc = frame.contentDocument ? frame.contentDocument : frame.document
                } catch (err) {
                    log("cannot get iframe.contentDocument: " + err), doc = frame.document
                }
                return doc
            }

            function doSubmit() {
                function checkState() {
                    try {
                        var state = getDoc(io).readyState;
                        log("state = " + state), state && "uninitialized" == state.toLowerCase() && setTimeout(checkState, 50)
                    } catch (e) {
                        log("Server abort: ", e, " (", e.name, ")"), cb(SERVER_ABORT), timeoutHandle && clearTimeout(timeoutHandle), timeoutHandle = void 0
                    }
                }
                var t = $form.attr2("target"),
                    a = $form.attr2("action");
                form.setAttribute("target", id), (!method || /post/i.test(method)) && form.setAttribute("method", "POST"), a != s.url && form.setAttribute("action", s.url), s.skipEncodingOverride || method && !/post/i.test(method) || $form.attr({
                    encoding: "multipart/form-data",
                    enctype: "multipart/form-data"
                }), s.timeout && (timeoutHandle = setTimeout(function() {
                    timedOut = !0, cb(CLIENT_TIMEOUT_ABORT)
                }, s.timeout));
                var extraInputs = [];
                try {
                    if (s.extraData)
                        for (var n in s.extraData) s.extraData.hasOwnProperty(n) && extraInputs.push($.isPlainObject(s.extraData[n]) && s.extraData[n].hasOwnProperty("name") && s.extraData[n].hasOwnProperty("value") ? $('<input type="hidden" name="' + s.extraData[n].name + '">').val(s.extraData[n].value).appendTo(form)[0] : $('<input type="hidden" name="' + n + '">').val(s.extraData[n]).appendTo(form)[0]);
                    s.iframeTarget || $io.appendTo("body"), io.attachEvent ? io.attachEvent("onload", cb) : io.addEventListener("load", cb, !1), setTimeout(checkState, 15);
                    try {
                        form.submit()
                    } catch (err) {
                        var submitFn = document.createElement("form").submit;
                        submitFn.apply(form)
                    }
                } finally {
                    form.setAttribute("action", a), t ? form.setAttribute("target", t) : $form.removeAttr("target"), $(extraInputs).remove()
                }
            }

            function cb(e) {
                if (!xhr.aborted && !callbackProcessed) {
                    if (doc = getDoc(io), doc || (log("cannot access response document"), e = SERVER_ABORT), e === CLIENT_TIMEOUT_ABORT && xhr) return xhr.abort("timeout"), void deferred.reject(xhr, "timeout");
                    if (e == SERVER_ABORT && xhr) return xhr.abort("server abort"), void deferred.reject(xhr, "error", "server abort");
                    if (doc && doc.location.href != s.iframeSrc || timedOut) {
                        io.detachEvent ? io.detachEvent("onload", cb) : io.removeEventListener("load", cb, !1);
                        var errMsg, status = "success";
                        try {
                            if (timedOut) throw "timeout";
                            var isXml = "xml" == s.dataType || doc.XMLDocument || $.isXMLDoc(doc);
                            if (log("isXml=" + isXml), !isXml && window.opera && (null === doc.body || !doc.body.innerHTML) && --domCheckCount) return log("requeing onLoad callback, DOM not available"), void setTimeout(cb, 250);
                            var docRoot = doc.body ? doc.body : doc.documentElement;
                            xhr.responseText = docRoot ? docRoot.innerHTML : null, xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc, isXml && (s.dataType = "xml"), xhr.getResponseHeader = function(header) {
                                var headers = {
                                    "content-type": s.dataType
                                };
                                return headers[header.toLowerCase()]
                            }, docRoot && (xhr.status = Number(docRoot.getAttribute("status")) || xhr.status, xhr.statusText = docRoot.getAttribute("statusText") || xhr.statusText);
                            var dt = (s.dataType || "").toLowerCase(),
                                scr = /(json|script|text)/.test(dt);
                            if (scr || s.textarea) {
                                var ta = doc.getElementsByTagName("textarea")[0];
                                if (ta) xhr.responseText = ta.value, xhr.status = Number(ta.getAttribute("status")) || xhr.status, xhr.statusText = ta.getAttribute("statusText") || xhr.statusText;
                                else if (scr) {
                                    var pre = doc.getElementsByTagName("pre")[0],
                                        b = doc.getElementsByTagName("body")[0];
                                    pre ? xhr.responseText = pre.textContent ? pre.textContent : pre.innerText : b && (xhr.responseText = b.textContent ? b.textContent : b.innerText)
                                }
                            } else "xml" == dt && !xhr.responseXML && xhr.responseText && (xhr.responseXML = toXml(xhr.responseText));
                            try {
                                data = httpData(xhr, dt, s)
                            } catch (err) {
                                status = "parsererror", xhr.error = errMsg = err || status
                            }
                        } catch (err) {
                            log("error caught: ", err), status = "error", xhr.error = errMsg = err || status
                        }
                        xhr.aborted && (log("upload aborted"), status = null), xhr.status && (status = xhr.status >= 200 && xhr.status < 300 || 304 === xhr.status ? "success" : "error"), "success" === status ? (s.success && s.success.call(s.context, data, "success", xhr), deferred.resolve(xhr.responseText, "success", xhr), g && $.event.trigger("ajaxSuccess", [xhr, s])) : status && (void 0 === errMsg && (errMsg = xhr.statusText), s.error && s.error.call(s.context, xhr, status, errMsg), deferred.reject(xhr, "error", errMsg), g && $.event.trigger("ajaxError", [xhr, s, errMsg])), g && $.event.trigger("ajaxComplete", [xhr, s]), g && !--$.active && $.event.trigger("ajaxStop"), s.complete && s.complete.call(s.context, xhr, status), callbackProcessed = !0, s.timeout && clearTimeout(timeoutHandle), setTimeout(function() {
                            s.iframeTarget ? $io.attr("src", s.iframeSrc) : $io.remove(), xhr.responseXML = null
                        }, 100)
                    }
                }
            }
            var el, i, s, g, id, $io, io, xhr, sub, n, timedOut, timeoutHandle, form = $form[0],
                deferred = $.Deferred();
            if (deferred.abort = function(status) {
                xhr.abort(status)
            }, a)
                for (i = 0; i < elements.length; i++) el = $(elements[i]), hasProp ? el.prop("disabled", !1) : el.removeAttr("disabled");
            if (s = $.extend(!0, {}, $.ajaxSettings, options), s.context = s.context || s, id = "jqFormIO" + (new Date).getTime(), s.iframeTarget ? ($io = $(s.iframeTarget), n = $io.attr2("name"), n ? id = n : $io.attr2("name", id)) : ($io = $('<iframe name="' + id + '" src="' + s.iframeSrc + '" />'), $io.css({
                position: "absolute",
                top: "-1000px",
                left: "-1000px"
            })), io = $io[0], xhr = {
                aborted: 0,
                responseText: null,
                responseXML: null,
                status: 0,
                statusText: "n/a",
                getAllResponseHeaders: function() {},
                getResponseHeader: function() {},
                setRequestHeader: function() {},
                abort: function(status) {
                    var e = "timeout" === status ? "timeout" : "aborted";
                    log("aborting upload... " + e), this.aborted = 1;
                    try {
                        io.contentWindow.document.execCommand && io.contentWindow.document.execCommand("Stop")
                    } catch (ignore) {}
                    $io.attr("src", s.iframeSrc), xhr.error = e, s.error && s.error.call(s.context, xhr, e, status), g && $.event.trigger("ajaxError", [xhr, s, e]), s.complete && s.complete.call(s.context, xhr, e)
                }
            }, g = s.global, g && 0 === $.active++ && $.event.trigger("ajaxStart"), g && $.event.trigger("ajaxSend", [xhr, s]), s.beforeSend && s.beforeSend.call(s.context, xhr, s) === !1) return s.global && $.active--, deferred.reject(), deferred;
            if (xhr.aborted) return deferred.reject(), deferred;
            sub = form.clk, sub && (n = sub.name, n && !sub.disabled && (s.extraData = s.extraData || {}, s.extraData[n] = sub.value, "image" == sub.type && (s.extraData[n + ".x"] = form.clk_x, s.extraData[n + ".y"] = form.clk_y)));
            var CLIENT_TIMEOUT_ABORT = 1,
                SERVER_ABORT = 2,
                csrf_token = $("meta[name=csrf-token]").attr("content"),
                csrf_param = $("meta[name=csrf-param]").attr("content");
            csrf_param && csrf_token && (s.extraData = s.extraData || {}, s.extraData[csrf_param] = csrf_token), s.forceSync ? doSubmit() : setTimeout(doSubmit, 10);
            var data, doc, callbackProcessed, domCheckCount = 50,
                toXml = $.parseXML || function(s, doc) {
                    return window.ActiveXObject ? (doc = new ActiveXObject("Microsoft.XMLDOM"), doc.async = "false", doc.loadXML(s)) : doc = (new DOMParser).parseFromString(s, "text/xml"), doc && doc.documentElement && "parsererror" != doc.documentElement.nodeName ? doc : null
                }, parseJSON = $.parseJSON || function(s) {
                    return window.eval("(" + s + ")")
                }, httpData = function(xhr, type, s) {
                    var ct = xhr.getResponseHeader("content-type") || "",
                        xml = "xml" === type || !type && ct.indexOf("xml") >= 0,
                        data = xml ? xhr.responseXML : xhr.responseText;
                    return xml && "parsererror" === data.documentElement.nodeName && $.error && $.error("parsererror"), s && s.dataFilter && (data = s.dataFilter(data, type)), "string" == typeof data && ("json" === type || !type && ct.indexOf("json") >= 0 ? data = parseJSON(data) : ("script" === type || !type && ct.indexOf("javascript") >= 0) && $.globalEval(data)), data
                };
            return deferred
        }
        if (!this.length) return log("ajaxSubmit: skipping submit process - no element selected"), this;
        var method, action, url, $form = this;
        "function" == typeof options ? options = {
            success: options
        } : void 0 === options && (options = {}), method = options.type || this.attr2("method"), action = options.url || this.attr2("action"), url = "string" == typeof action ? $.trim(action) : "", url = url || window.location.href || "", url && (url = (url.match(/^([^#]+)/) || [])[1]), options = $.extend(!0, {
            url: url,
            success: $.ajaxSettings.success,
            type: method || $.ajaxSettings.type,
            iframeSrc: /^https/i.test(window.location.href || "") ? "javascript:false" : "about:blank"
        }, options);
        var veto = {};
        if (this.trigger("form-pre-serialize", [this, options, veto]), veto.veto) return log("ajaxSubmit: submit vetoed via form-pre-serialize trigger"), this;
        if (options.beforeSerialize && options.beforeSerialize(this, options) === !1) return log("ajaxSubmit: submit aborted via beforeSerialize callback"), this;
        var traditional = options.traditional;
        void 0 === traditional && (traditional = $.ajaxSettings.traditional);
        var qx, elements = [],
            a = this.formToArray(options.semantic, elements);
        if (options.data && (options.extraData = options.data, qx = $.param(options.data, traditional)), options.beforeSubmit && options.beforeSubmit(a, this, options) === !1) return log("ajaxSubmit: submit aborted via beforeSubmit callback"), this;
        if (this.trigger("form-submit-validate", [a, this, options, veto]), veto.veto) return log("ajaxSubmit: submit vetoed via form-submit-validate trigger"), this;
        var q = $.param(a, traditional);
        qx && (q = q ? q + "&" + qx : qx), "GET" == options.type.toUpperCase() ? (options.url += (options.url.indexOf("?") >= 0 ? "&" : "?") + q, options.data = null) : options.data = q;
        var callbacks = [];
        if (options.resetForm && callbacks.push(function() {
            $form.resetForm()
        }), options.clearForm && callbacks.push(function() {
            $form.clearForm(options.includeHidden)
        }), !options.dataType && options.target) {
            var oldSuccess = options.success || function() {};
            callbacks.push(function(data) {
                var fn = options.replaceTarget ? "replaceWith" : "html";
                $(options.target)[fn](data).each(oldSuccess, arguments)
            })
        } else options.success && callbacks.push(options.success); if (options.success = function(data, status, xhr) {
            for (var context = options.context || this, i = 0, max = callbacks.length; max > i; i++) callbacks[i].apply(context, [data, status, xhr || $form, $form])
        }, options.error) {
            var oldError = options.error;
            options.error = function(xhr, status, error) {
                var context = options.context || this;
                oldError.apply(context, [xhr, status, error, $form])
            }
        }
        if (options.complete) {
            var oldComplete = options.complete;
            options.complete = function(xhr, status) {
                var context = options.context || this;
                oldComplete.apply(context, [xhr, status, $form])
            }
        }
        var fileInputs = $("input[type=file]:enabled", this).filter(function() {
            return "" !== $(this).val()
        }),
            hasFileInputs = fileInputs.length > 0,
            mp = "multipart/form-data",
            multipart = $form.attr("enctype") == mp || $form.attr("encoding") == mp,
            fileAPI = feature.fileapi && feature.formdata;
        log("fileAPI :" + fileAPI);
        var jqxhr, shouldUseFrame = (hasFileInputs || multipart) && !fileAPI;
        options.iframe !== !1 && (options.iframe || shouldUseFrame) ? options.closeKeepAlive ? $.get(options.closeKeepAlive, function() {
            jqxhr = fileUploadIframe(a)
        }) : jqxhr = fileUploadIframe(a) : jqxhr = (hasFileInputs || multipart) && fileAPI ? fileUploadXhr(a) : $.ajax(options), $form.removeData("jqxhr").data("jqxhr", jqxhr);
        for (var k = 0; k < elements.length; k++) elements[k] = null;
        return this.trigger("form-submit-notify", [this, options]), this
    }, $.fn.ajaxForm = function(options) {
        if (options = options || {}, options.delegation = options.delegation && $.isFunction($.fn.on), !options.delegation && 0 === this.length) {
            var o = {
                s: this.selector,
                c: this.context
            };
            return !$.isReady && o.s ? (log("DOM not ready, queuing ajaxForm"), $(function() {
                $(o.s, o.c).ajaxForm(options)
            }), this) : (log("terminating; zero elements found by selector" + ($.isReady ? "" : " (DOM not ready)")), this)
        }
        return options.delegation ? ($(document).off("submit.form-plugin", this.selector, doAjaxSubmit).off("click.form-plugin", this.selector, captureSubmittingElement).on("submit.form-plugin", this.selector, options, doAjaxSubmit).on("click.form-plugin", this.selector, options, captureSubmittingElement), this) : this.ajaxFormUnbind().bind("submit.form-plugin", options, doAjaxSubmit).bind("click.form-plugin", options, captureSubmittingElement)
    }, $.fn.ajaxFormUnbind = function() {
        return this.unbind("submit.form-plugin click.form-plugin")
    }, $.fn.formToArray = function(semantic, elements) {
        var a = [];
        if (0 === this.length) return a;
        var form = this[0],
            els = semantic ? form.getElementsByTagName("*") : form.elements;
        if (!els) return a;
        var i, j, n, v, el, max, jmax;
        for (i = 0, max = els.length; max > i; i++)
            if (el = els[i], n = el.name, n && !el.disabled)
                if (semantic && form.clk && "image" == el.type) form.clk == el && (a.push({
                    name: n,
                    value: $(el).val(),
                    type: el.type
                }), a.push({
                    name: n + ".x",
                    value: form.clk_x
                }, {
                    name: n + ".y",
                    value: form.clk_y
                }));
                else if (v = $.fieldValue(el, !0), v && v.constructor == Array)
            for (elements && elements.push(el), j = 0, jmax = v.length; jmax > j; j++) a.push({
                name: n,
                value: v[j]
            });
        else if (feature.fileapi && "file" == el.type) {
            elements && elements.push(el);
            var files = el.files;
            if (files.length)
                for (j = 0; j < files.length; j++) a.push({
                    name: n,
                    value: files[j],
                    type: el.type
                });
            else a.push({
                name: n,
                value: "",
                type: el.type
            })
        } else null !== v && "undefined" != typeof v && (elements && elements.push(el), a.push({
            name: n,
            value: v,
            type: el.type,
            required: el.required
        })); if (!semantic && form.clk) {
            var $input = $(form.clk),
                input = $input[0];
            n = input.name, n && !input.disabled && "image" == input.type && (a.push({
                name: n,
                value: $input.val()
            }), a.push({
                name: n + ".x",
                value: form.clk_x
            }, {
                name: n + ".y",
                value: form.clk_y
            }))
        }
        return a
    }, $.fn.formSerialize = function(semantic) {
        return $.param(this.formToArray(semantic))
    }, $.fn.fieldSerialize = function(successful) {
        var a = [];
        return this.each(function() {
            var n = this.name;
            if (n) {
                var v = $.fieldValue(this, successful);
                if (v && v.constructor == Array)
                    for (var i = 0, max = v.length; max > i; i++) a.push({
                        name: n,
                        value: v[i]
                    });
                else null !== v && "undefined" != typeof v && a.push({
                    name: this.name,
                    value: v
                })
            }
        }), $.param(a)
    }, $.fn.fieldValue = function(successful) {
        for (var val = [], i = 0, max = this.length; max > i; i++) {
            var el = this[i],
                v = $.fieldValue(el, successful);
            null === v || "undefined" == typeof v || v.constructor == Array && !v.length || (v.constructor == Array ? $.merge(val, v) : val.push(v))
        }
        return val
    }, $.fieldValue = function(el, successful) {
        var n = el.name,
            t = el.type,
            tag = el.tagName.toLowerCase();
        if (void 0 === successful && (successful = !0), successful && (!n || el.disabled || "reset" == t || "button" == t || ("checkbox" == t || "radio" == t) && !el.checked || ("submit" == t || "image" == t) && el.form && el.form.clk != el || "select" == tag && -1 == el.selectedIndex)) return null;
        if ("select" == tag) {
            var index = el.selectedIndex;
            if (0 > index) return null;
            for (var a = [], ops = el.options, one = "select-one" == t, max = one ? index + 1 : ops.length, i = one ? index : 0; max > i; i++) {
                var op = ops[i];
                if (op.selected) {
                    var v = op.value;
                    if (v || (v = op.attributes && op.attributes.value && !op.attributes.value.specified ? op.text : op.value), one) return v;
                    a.push(v)
                }
            }
            return a
        }
        return $(el).val()
    }, $.fn.clearForm = function(includeHidden) {
        return this.each(function() {
            $("input,select,textarea", this).clearFields(includeHidden)
        })
    }, $.fn.clearFields = $.fn.clearInputs = function(includeHidden) {
        var re = /^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i;
        return this.each(function() {
            var t = this.type,
                tag = this.tagName.toLowerCase();
            re.test(t) || "textarea" == tag ? this.value = "" : "checkbox" == t || "radio" == t ? this.checked = !1 : "select" == tag ? this.selectedIndex = -1 : "file" == t ? /MSIE/.test(navigator.userAgent) ? $(this).replaceWith($(this).clone(!0)) : $(this).val("") : includeHidden && (includeHidden === !0 && /hidden/.test(t) || "string" == typeof includeHidden && $(this).is(includeHidden)) && (this.value = "")
        })
    }, $.fn.resetForm = function() {
        return this.each(function() {
            ("function" == typeof this.reset || "object" == typeof this.reset && !this.reset.nodeType) && this.reset()
        })
    }, $.fn.enable = function(b) {
        return void 0 === b && (b = !0), this.each(function() {
            this.disabled = !b
        })
    }, $.fn.selected = function(select) {
        return void 0 === select && (select = !0), this.each(function() {
            var t = this.type;
            if ("checkbox" == t || "radio" == t) this.checked = select;
            else if ("option" == this.tagName.toLowerCase()) {
                var $sel = $(this).parent("select");
                select && $sel[0] && "select-one" == $sel[0].type && $sel.find("option").selected(!1), this.selected = select
            }
        })
    }, $.fn.ajaxSubmit.debug = !1
}),
function(window, document, $) {
    function args(elem) {
        var newAttrs = {}, rinlinejQuery = /^jQuery\d+$/;
        return $.each(elem.attributes, function(i, attr) {
            attr.specified && !rinlinejQuery.test(attr.name) && (newAttrs[attr.name] = attr.value)
        }), newAttrs
    }

    function clearPlaceholder(event, value) {
        var input = this,
            $input = $(input);
        if (input.value == $input.attr("placeholder") && $input.hasClass("placeholder"))
            if ($input.data("placeholder-password")) {
                if ($input = $input.hide().next().show().attr("id", $input.removeAttr("id").data("placeholder-id")), event === !0) return $input[0].value = value;
                $input.focus()
            } else input.value = "", $input.removeClass("placeholder"), input == safeActiveElement() && input.select()
    }

    function setPlaceholder() {
        var $replacement, input = this,
            $input = $(input),
            id = this.id;
        if ("" == input.value) {
            if ("password" == input.type) {
                if (!$input.data("placeholder-textinput")) {
                    try {
                        $replacement = $input.clone().attr({
                            type: "text"
                        })
                    } catch (e) {
                        $replacement = $("<input>").attr($.extend(args(this), {
                            type: "text"
                        }))
                    }
                    $replacement.removeAttr("name").data({
                        "placeholder-password": $input,
                        "placeholder-id": id
                    }).bind("focus.placeholder", clearPlaceholder), $input.data({
                        "placeholder-textinput": $replacement,
                        "placeholder-id": id
                    }).before($replacement)
                }
                $input = $input.removeAttr("id").hide().prev().attr("id", id).show()
            }
            $input.addClass("placeholder"), $input[0].value = $input.attr("placeholder")
        } else $input.removeClass("placeholder")
    }

    function safeActiveElement() {
        try {
            return document.activeElement
        } catch (exception) {}
    }
    var hooks, placeholder, isOperaMini = "[object OperaMini]" == Object.prototype.toString.call(window.operamini),
        isInputSupported = "placeholder" in document.createElement("input") && !isOperaMini,
        isTextareaSupported = "placeholder" in document.createElement("textarea") && !isOperaMini,
        prototype = $.fn,
        valHooks = $.valHooks,
        propHooks = $.propHooks;
    isInputSupported && isTextareaSupported ? (placeholder = prototype.placeholder = function() {
        return this
    }, placeholder.input = placeholder.textarea = !0) : (placeholder = prototype.placeholder = function() {
        var $this = this;
        return $this.filter((isInputSupported ? "textarea" : ":input") + "[placeholder]").not(".placeholder").bind({
            "focus.placeholder": clearPlaceholder,
            "blur.placeholder": setPlaceholder
        }).data("placeholder-enabled", !0).trigger("blur.placeholder"), $this
    }, placeholder.input = isInputSupported, placeholder.textarea = isTextareaSupported, hooks = {
        get: function(element) {
            var $element = $(element),
                $passwordInput = $element.data("placeholder-password");
            return $passwordInput ? $passwordInput[0].value : $element.data("placeholder-enabled") && $element.hasClass("placeholder") ? "" : element.value
        },
        set: function(element, value) {
            var $element = $(element),
                $passwordInput = $element.data("placeholder-password");
            return $passwordInput ? $passwordInput[0].value = value : $element.data("placeholder-enabled") ? ("" == value ? (element.value = value, element != safeActiveElement() && setPlaceholder.call(element)) : $element.hasClass("placeholder") ? clearPlaceholder.call(element, !0, value) || (element.value = value) : element.value = value, $element) : element.value = value
        }
    }, isInputSupported || (valHooks.input = hooks, propHooks.value = hooks), isTextareaSupported || (valHooks.textarea = hooks, propHooks.value = hooks), $(function() {
        $(document).delegate("form", "submit.placeholder", function() {
            var $inputs = $(".placeholder", this).each(clearPlaceholder);
            setTimeout(function() {
                $inputs.each(setPlaceholder)
            }, 10)
        })
    }), $(window).bind("beforeunload.placeholder", function() {
        $(".placeholder").each(function() {
            this.value = ""
        })
    }))
}(this, document, jQuery),
function($) {
    function Timepicker() {
        this.debug = !0, this._curInst = null, this._disabledInputs = [], this._timepickerShowing = !1, this._inDialog = !1, this._dialogClass = "ui-timepicker-dialog", this._mainDivId = "ui-timepicker-div", this._inlineClass = "ui-timepicker-inline", this._currentClass = "ui-timepicker-current", this._dayOverClass = "ui-timepicker-days-cell-over", this.regional = [], this.regional[""] = {
            hourText: "Hour",
            minuteText: "Minute",
            amPmText: ["AM", "PM"],
            closeButtonText: "Done",
            nowButtonText: "Now",
            deselectButtonText: "Deselect"
        }, this._defaults = {
            showOn: "focus",
            button: null,
            showAnim: "fadeIn",
            showOptions: {},
            appendText: "",
            beforeShow: null,
            onSelect: null,
            onClose: null,
            timeSeparator: ":",
            periodSeparator: " ",
            showPeriod: !1,
            showPeriodLabels: !0,
            showLeadingZero: !0,
            showMinutesLeadingZero: !0,
            altField: "",
            defaultTime: "now",
            myPosition: "left top",
            atPosition: "left bottom",
            onHourShow: null,
            onMinuteShow: null,
            hours: {
                starts: 0,
                ends: 23
            },
            minutes: {
                starts: 0,
                ends: 55,

                interval: 5,
                manual: []
            },
            rows: 4,
            showHours: !0,
            showMinutes: !0,
            optionalMinutes: !1,
            showCloseButton: !1,
            showNowButton: !1,
            showDeselectButton: !1,
            maxTime: {
                hour: null,
                minute: null
            },
            minTime: {
                hour: null,
                minute: null
            }
        }, $.extend(this._defaults, this.regional[""]), this.tpDiv = $('<div id="' + this._mainDivId + '" class="ui-timepicker ui-widget ui-helper-clearfix ui-corner-all " style="display: none"></div>')
    }

    function extendRemove(target, props) {
        $.extend(target, props);
        for (var name in props)(null == props[name] || void 0 == props[name]) && (target[name] = props[name]);
        return target
    }
    $.extend($.ui, {
        timepicker: {
            version: "0.3.3"
        }
    });
    var PROP_NAME = "timepicker",
        tpuuid = (new Date).getTime();
    $.extend(Timepicker.prototype, {
        markerClassName: "hasTimepicker",
        log: function() {
            this.debug && console.log.apply("", arguments)
        },
        _widgetTimepicker: function() {
            return this.tpDiv
        },
        setDefaults: function(settings) {
            return extendRemove(this._defaults, settings || {}), this
        },
        _attachTimepicker: function(target, settings) {
            var inlineSettings = null;
            for (var attrName in this._defaults) {
                var attrValue = target.getAttribute("time:" + attrName);
                if (attrValue) {
                    inlineSettings = inlineSettings || {};
                    try {
                        inlineSettings[attrName] = eval(attrValue)
                    } catch (err) {
                        inlineSettings[attrName] = attrValue
                    }
                }
            }
            var nodeName = target.nodeName.toLowerCase(),
                inline = "div" == nodeName || "span" == nodeName;
            target.id || (this.uuid += 1, target.id = "tp" + this.uuid);
            var inst = this._newInst($(target), inline);
            inst.settings = $.extend({}, settings || {}, inlineSettings || {}), "input" == nodeName ? (this._connectTimepicker(target, inst), this._setTimeFromField(inst)) : inline && this._inlineTimepicker(target, inst)
        },
        _newInst: function(target, inline) {
            var id = target[0].id.replace(/([^A-Za-z0-9_-])/g, "\\\\$1");
            return {
                id: id,
                input: target,
                inline: inline,
                tpDiv: inline ? $('<div class="' + this._inlineClass + ' ui-timepicker ui-widget  ui-helper-clearfix"></div>') : this.tpDiv
            }
        },
        _connectTimepicker: function(target, inst) {
            var input = $(target);
            inst.append = $([]), inst.trigger = $([]), input.hasClass(this.markerClassName) || (this._attachments(input, inst), input.addClass(this.markerClassName).keydown(this._doKeyDown).keyup(this._doKeyUp).bind("setData.timepicker", function(event, key, value) {
                inst.settings[key] = value
            }).bind("getData.timepicker", function(event, key) {
                return this._get(inst, key)
            }), $.data(target, PROP_NAME, inst))
        },
        _doKeyDown: function(event) {
            var inst = $.timepicker._getInst(event.target),
                handled = !0;
            if (inst._keyEvent = !0, $.timepicker._timepickerShowing) switch (event.keyCode) {
                case 9:
                    $.timepicker._hideTimepicker(), handled = !1;
                    break;
                case 13:
                    return $.timepicker._updateSelectedValue(inst), $.timepicker._hideTimepicker(), !1;
                case 27:
                    $.timepicker._hideTimepicker();
                    break;
                default:
                    handled = !1
            } else 36 == event.keyCode && event.ctrlKey ? $.timepicker._showTimepicker(this) : handled = !1;
            handled && (event.preventDefault(), event.stopPropagation())
        },
        _doKeyUp: function(event) {
            var inst = $.timepicker._getInst(event.target);
            $.timepicker._setTimeFromField(inst), $.timepicker._updateTimepicker(inst)
        },
        _attachments: function(input, inst) {
            var appendText = this._get(inst, "appendText"),
                isRTL = this._get(inst, "isRTL");
            inst.append && inst.append.remove(), appendText && (inst.append = $('<span class="' + this._appendClass + '">' + appendText + "</span>"), input[isRTL ? "before" : "after"](inst.append)), input.unbind("focus.timepicker", this._showTimepicker), input.unbind("click.timepicker", this._adjustZIndex), inst.trigger && inst.trigger.remove();
            var showOn = this._get(inst, "showOn");
            if (("focus" == showOn || "both" == showOn) && (input.bind("focus.timepicker", this._showTimepicker), input.bind("click.timepicker", this._adjustZIndex)), "button" == showOn || "both" == showOn) {
                var button = this._get(inst, "button");
                null == button && (button = $('<button class="ui-timepicker-trigger" type="button">...</button>'), input.after(button)), $(button).bind("click.timepicker", function() {
                    return $.timepicker._timepickerShowing && $.timepicker._lastInput == input[0] ? $.timepicker._hideTimepicker() : inst.input.is(":disabled") || $.timepicker._showTimepicker(input[0]), !1
                })
            }
        },
        _inlineTimepicker: function(target, inst) {
            var divSpan = $(target);
            divSpan.hasClass(this.markerClassName) || (divSpan.addClass(this.markerClassName).append(inst.tpDiv).bind("setData.timepicker", function(event, key, value) {
                inst.settings[key] = value
            }).bind("getData.timepicker", function(event, key) {
                return this._get(inst, key)
            }), $.data(target, PROP_NAME, inst), this._setTimeFromField(inst), this._updateTimepicker(inst), inst.tpDiv.show())
        },
        _adjustZIndex: function(input) {
            input = input.target || input;
            var inst = $.timepicker._getInst(input);
            inst.tpDiv.css("zIndex", $.timepicker._getZIndex(input) + 1)
        },
        _showTimepicker: function(input) {
            if (input = input.target || input, "input" != input.nodeName.toLowerCase() && (input = $("input", input.parentNode)[0]), !$.timepicker._isDisabledTimepicker(input) && $.timepicker._lastInput != input) {
                $.timepicker._hideTimepicker();
                var inst = $.timepicker._getInst(input);
                $.timepicker._curInst && $.timepicker._curInst != inst && $.timepicker._curInst.tpDiv.stop(!0, !0);
                var beforeShow = $.timepicker._get(inst, "beforeShow");
                extendRemove(inst.settings, beforeShow ? beforeShow.apply(input, [input, inst]) : {}), inst.lastVal = null, $.timepicker._lastInput = input, $.timepicker._setTimeFromField(inst), $.timepicker._inDialog && (input.value = ""), $.timepicker._pos || ($.timepicker._pos = $.timepicker._findPos(input), $.timepicker._pos[1] += input.offsetHeight);
                var isFixed = !1;
                $(input).parents().each(function() {
                    return isFixed |= "fixed" == $(this).css("position"), !isFixed
                });
                var offset = {
                    left: $.timepicker._pos[0],
                    top: $.timepicker._pos[1]
                };
                if ($.timepicker._pos = null, inst.tpDiv.css({
                    position: "absolute",
                    display: "block",
                    top: "-1000px"
                }), $.timepicker._updateTimepicker(inst), !inst.inline && "object" == typeof $.ui.position) {
                    inst.tpDiv.position({
                        of: inst.input,
                        my: $.timepicker._get(inst, "myPosition"),
                        at: $.timepicker._get(inst, "atPosition"),
                        collision: "flip"
                    });
                    var offset = inst.tpDiv.offset();
                    $.timepicker._pos = [offset.top, offset.left]
                }
                if (inst._hoursClicked = !1, inst._minutesClicked = !1, offset = $.timepicker._checkOffset(inst, offset, isFixed), inst.tpDiv.css({
                    position: $.timepicker._inDialog && $.blockUI ? "static" : isFixed ? "fixed" : "absolute",
                    display: "none",
                    left: offset.left + "px",
                    top: offset.top + "px"
                }), !inst.inline) {
                    var showAnim = $.timepicker._get(inst, "showAnim"),
                        duration = $.timepicker._get(inst, "duration"),
                        postProcess = function() {
                            $.timepicker._timepickerShowing = !0;
                            var borders = $.timepicker._getBorders(inst.tpDiv);
                            inst.tpDiv.find("iframe.ui-timepicker-cover").css({
                                left: -borders[0],
                                top: -borders[1],
                                width: inst.tpDiv.outerWidth(),
                                height: inst.tpDiv.outerHeight()
                            })
                        };
                    $.timepicker._adjustZIndex(input), $.effects && $.effects[showAnim] ? inst.tpDiv.show(showAnim, $.timepicker._get(inst, "showOptions"), duration, postProcess) : inst.tpDiv.show(showAnim ? duration : null, postProcess), showAnim && duration || postProcess(), inst.input.is(":visible") && !inst.input.is(":disabled") && inst.input.focus(), $.timepicker._curInst = inst
                }
            }
        },
        _getZIndex: function(target) {
            for (var position, value, elem = $(target), maxValue = 0; elem.length && elem[0] !== document;) position = elem.css("position"), ("absolute" === position || "relative" === position || "fixed" === position) && (value = parseInt(elem.css("zIndex"), 10), isNaN(value) || 0 === value || value > maxValue && (maxValue = value)), elem = elem.parent();
            return maxValue
        },
        _refreshTimepicker: function(target) {
            var inst = this._getInst(target);
            inst && this._updateTimepicker(inst)
        },
        _updateTimepicker: function(inst) {
            inst.tpDiv.empty().append(this._generateHTML(inst)), this._rebindDialogEvents(inst)
        },
        _rebindDialogEvents: function(inst) {
            var borders = $.timepicker._getBorders(inst.tpDiv),
                self = this;
            inst.tpDiv.find("iframe.ui-timepicker-cover").css({
                left: -borders[0],
                top: -borders[1],
                width: inst.tpDiv.outerWidth(),
                height: inst.tpDiv.outerHeight()
            }).end().find(".ui-timepicker-minute-cell").unbind().bind("click", {
                fromDoubleClick: !1
            }, $.proxy($.timepicker.selectMinutes, this)).bind("dblclick", {
                fromDoubleClick: !0
            }, $.proxy($.timepicker.selectMinutes, this)).end().find(".ui-timepicker-hour-cell").unbind().bind("click", {
                fromDoubleClick: !1
            }, $.proxy($.timepicker.selectHours, this)).bind("dblclick", {
                fromDoubleClick: !0
            }, $.proxy($.timepicker.selectHours, this)).end().find(".ui-timepicker td a").unbind().bind("mouseout", function() {
                $(this).removeClass("ui-state-hover"), -1 != this.className.indexOf("ui-timepicker-prev") && $(this).removeClass("ui-timepicker-prev-hover"), -1 != this.className.indexOf("ui-timepicker-next") && $(this).removeClass("ui-timepicker-next-hover")
            }).bind("mouseover", function() {
                self._isDisabledTimepicker(inst.inline ? inst.tpDiv.parent()[0] : inst.input[0]) || ($(this).parents(".ui-timepicker-calendar").find("a").removeClass("ui-state-hover"), $(this).addClass("ui-state-hover"), -1 != this.className.indexOf("ui-timepicker-prev") && $(this).addClass("ui-timepicker-prev-hover"), -1 != this.className.indexOf("ui-timepicker-next") && $(this).addClass("ui-timepicker-next-hover"))
            }).end().find("." + this._dayOverClass + " a").trigger("mouseover").end().find(".ui-timepicker-now").bind("click", function(e) {
                $.timepicker.selectNow(e)
            }).end().find(".ui-timepicker-deselect").bind("click", function(e) {
                $.timepicker.deselectTime(e)
            }).end().find(".ui-timepicker-close").bind("click", function() {
                $.timepicker._hideTimepicker()
            }).end()
        },
        _generateHTML: function(inst) {
            var h, row, col, html, showPeriod = 1 == this._get(inst, "showPeriod"),
                showPeriodLabels = 1 == this._get(inst, "showPeriodLabels"),
                showLeadingZero = 1 == this._get(inst, "showLeadingZero"),
                showHours = 1 == this._get(inst, "showHours"),
                showMinutes = 1 == this._get(inst, "showMinutes"),
                amPmText = this._get(inst, "amPmText"),
                rows = this._get(inst, "rows"),
                amRows = 0,
                pmRows = 0,
                amItems = 0,
                pmItems = 0,
                amFirstRow = 0,
                pmFirstRow = 0,
                hours = Array(),
                hours_options = this._get(inst, "hours"),
                hoursPerRow = null,
                hourCounter = 0,
                hourLabel = this._get(inst, "hourText"),
                showCloseButton = this._get(inst, "showCloseButton"),
                closeButtonText = this._get(inst, "closeButtonText"),
                showNowButton = this._get(inst, "showNowButton"),
                nowButtonText = this._get(inst, "nowButtonText"),
                showDeselectButton = this._get(inst, "showDeselectButton"),
                deselectButtonText = this._get(inst, "deselectButtonText"),
                showButtonPanel = showCloseButton || showNowButton || showDeselectButton;
            for (h = hours_options.starts; h <= hours_options.ends; h++) hours.push(h);
            if (hoursPerRow = Math.ceil(hours.length / rows), showPeriodLabels) {
                for (hourCounter = 0; hourCounter < hours.length; hourCounter++) hours[hourCounter] < 12 ? amItems++ : pmItems++;
                hourCounter = 0, amRows = Math.floor(amItems / hours.length * rows), pmRows = Math.floor(pmItems / hours.length * rows), rows != amRows + pmRows && (amItems && (!pmItems || !amRows || pmRows && amItems / amRows >= pmItems / pmRows) ? amRows++ : pmRows++), amFirstRow = Math.min(amRows, 1), pmFirstRow = amRows + 1, hoursPerRow = Math.ceil(0 == amRows ? pmItems / pmRows : 0 == pmRows ? amItems / amRows : Math.max(amItems / amRows, pmItems / pmRows))
            }
            if (html = '<table class="ui-timepicker-table ui-widget-content ui-corner-all"><tr>', showHours) {
                for (html += '<td class="ui-timepicker-hours"><div class="ui-timepicker-title ui-widget-header ui-helper-clearfix ui-corner-all">' + hourLabel + '</div><table class="ui-timepicker">', row = 1; rows >= row; row++) {
                    for (html += "<tr>", row == amFirstRow && showPeriodLabels && (html += '<th rowspan="' + amRows.toString() + '" class="periods" scope="row">' + amPmText[0] + "</th>"), row == pmFirstRow && showPeriodLabels && (html += '<th rowspan="' + pmRows.toString() + '" class="periods" scope="row">' + amPmText[1] + "</th>"), col = 1; hoursPerRow >= col; col++) showPeriodLabels && pmFirstRow > row && hours[hourCounter] >= 12 ? html += this._generateHTMLHourCell(inst, void 0, showPeriod, showLeadingZero) : (html += this._generateHTMLHourCell(inst, hours[hourCounter], showPeriod, showLeadingZero), hourCounter++);
                    html += "</tr>"
                }
                html += "</table></td>"
            }
            if (showMinutes && (html += '<td class="ui-timepicker-minutes">', html += this._generateHTMLMinutes(inst), html += "</td>"), html += "</tr>", showButtonPanel) {
                var buttonPanel = '<tr><td colspan="3"><div class="ui-timepicker-buttonpane ui-widget-content">';
                showNowButton && (buttonPanel += '<button type="button" class="ui-timepicker-now ui-state-default ui-corner-all"  data-timepicker-instance-id="#' + inst.id.replace(/\\\\/g, "\\") + '" >' + nowButtonText + "</button>"), showDeselectButton && (buttonPanel += '<button type="button" class="ui-timepicker-deselect ui-state-default ui-corner-all"  data-timepicker-instance-id="#' + inst.id.replace(/\\\\/g, "\\") + '" >' + deselectButtonText + "</button>"), showCloseButton && (buttonPanel += '<button type="button" class="ui-timepicker-close ui-state-default ui-corner-all"  data-timepicker-instance-id="#' + inst.id.replace(/\\\\/g, "\\") + '" >' + closeButtonText + "</button>"), html += buttonPanel + "</div></td></tr>"
            }
            return html += "</table>"
        },
        _updateMinuteDisplay: function(inst) {
            var newHtml = this._generateHTMLMinutes(inst);
            inst.tpDiv.find("td.ui-timepicker-minutes").html(newHtml), this._rebindDialogEvents(inst)
        },
        _generateHTMLMinutes: function(inst) {
            var m, row, html = "",
                rows = this._get(inst, "rows"),
                minutes = Array(),
                minutes_options = this._get(inst, "minutes"),
                minutesPerRow = null,
                minuteCounter = 0,
                showMinutesLeadingZero = 1 == this._get(inst, "showMinutesLeadingZero"),
                onMinuteShow = this._get(inst, "onMinuteShow"),
                minuteLabel = this._get(inst, "minuteText");
            for (minutes_options.starts || (minutes_options.starts = 0), minutes_options.ends || (minutes_options.ends = 59), minutes_options.manual || (minutes_options.manual = []), m = minutes_options.starts; m <= minutes_options.ends; m += minutes_options.interval) minutes.push(m);
            for (i = 0; i < minutes_options.manual.length; i++) {
                var currMin = minutes_options.manual[i];
                "number" != typeof currMin || 0 > currMin || currMin > 59 || $.inArray(currMin, minutes) >= 0 || minutes.push(currMin)
            }
            if (minutes.sort(function(a, b) {
                return a - b
            }), minutesPerRow = Math.round(minutes.length / rows + .49), onMinuteShow && 0 == onMinuteShow.apply(inst.input ? inst.input[0] : null, [inst.hours, inst.minutes]))
                for (minuteCounter = 0; minuteCounter < minutes.length; minuteCounter += 1)
                    if (m = minutes[minuteCounter], onMinuteShow.apply(inst.input ? inst.input[0] : null, [inst.hours, m])) {
                        inst.minutes = m;
                        break
                    }
            for (html += '<div class="ui-timepicker-title ui-widget-header ui-helper-clearfix ui-corner-all">' + minuteLabel + '</div><table class="ui-timepicker">', minuteCounter = 0, row = 1; rows >= row; row++) {
                for (html += "<tr>"; row * minutesPerRow > minuteCounter;) {
                    var m = minutes[minuteCounter],
                        displayText = "";
                    void 0 !== m && (displayText = 10 > m && showMinutesLeadingZero ? "0" + m.toString() : m.toString()), html += this._generateHTMLMinuteCell(inst, m, displayText), minuteCounter++
                }
                html += "</tr>"
            }
            return html += "</table>"
        },
        _generateHTMLHourCell: function(inst, hour, showPeriod, showLeadingZero) {
            var displayHour = hour;
            hour > 12 && showPeriod && (displayHour = hour - 12), 0 == displayHour && showPeriod && (displayHour = 12), 10 > displayHour && showLeadingZero && (displayHour = "0" + displayHour);
            var html = "",
                enabled = !0,
                onHourShow = this._get(inst, "onHourShow"),
                maxTime = this._get(inst, "maxTime"),
                minTime = this._get(inst, "minTime");
            return void 0 == hour ? html = '<td><span class="ui-state-default ui-state-disabled">&nbsp;</span></td>' : (onHourShow && (enabled = onHourShow.apply(inst.input ? inst.input[0] : null, [hour])), enabled && (!isNaN(parseInt(maxTime.hour)) && hour > maxTime.hour && (enabled = !1), !isNaN(parseInt(minTime.hour)) && hour < minTime.hour && (enabled = !1)), html = enabled ? '<td class="ui-timepicker-hour-cell" data-timepicker-instance-id="#' + inst.id.replace(/\\\\/g, "\\") + '" data-hour="' + hour.toString() + '"><a class="ui-state-default ' + (hour == inst.hours ? "ui-state-active" : "") + '">' + displayHour.toString() + "</a></td>" : '<td><span class="ui-state-default ui-state-disabled ' + (hour == inst.hours ? " ui-state-active " : " ") + '">' + displayHour.toString() + "</span></td>")
        },
        _generateHTMLMinuteCell: function(inst, minute, displayText) {
            var html = "",
                enabled = !0,
                hour = inst.hours,
                onMinuteShow = this._get(inst, "onMinuteShow"),
                maxTime = this._get(inst, "maxTime"),
                minTime = this._get(inst, "minTime");
            return onMinuteShow && (enabled = onMinuteShow.apply(inst.input ? inst.input[0] : null, [inst.hours, minute])), void 0 == minute ? html = '<td><span class="ui-state-default ui-state-disabled">&nbsp;</span></td>' : (enabled && null !== hour && (!isNaN(parseInt(maxTime.hour)) && !isNaN(parseInt(maxTime.minute)) && hour >= maxTime.hour && minute > maxTime.minute && (enabled = !1), !isNaN(parseInt(minTime.hour)) && !isNaN(parseInt(minTime.minute)) && hour <= minTime.hour && minute < minTime.minute && (enabled = !1)), html = enabled ? '<td class="ui-timepicker-minute-cell" data-timepicker-instance-id="#' + inst.id.replace(/\\\\/g, "\\") + '" data-minute="' + minute.toString() + '" ><a class="ui-state-default ' + (minute == inst.minutes ? "ui-state-active" : "") + '" >' + displayText + "</a></td>" : '<td><span class="ui-state-default ui-state-disabled" >' + displayText + "</span></td>")
        },
        _destroyTimepicker: function(target) {
            var $target = $(target),
                inst = $.data(target, PROP_NAME);
            if ($target.hasClass(this.markerClassName)) {
                var nodeName = target.nodeName.toLowerCase();
                $.removeData(target, PROP_NAME), "input" == nodeName ? (inst.append.remove(), inst.trigger.remove(), $target.removeClass(this.markerClassName).unbind("focus.timepicker", this._showTimepicker).unbind("click.timepicker", this._adjustZIndex)) : ("div" == nodeName || "span" == nodeName) && $target.removeClass(this.markerClassName).empty()
            }
        },
        _enableTimepicker: function(target) {
            var $target = $(target),
                target_id = $target.attr("id"),
                inst = $.data(target, PROP_NAME);
            if ($target.hasClass(this.markerClassName)) {
                var nodeName = target.nodeName.toLowerCase();
                if ("input" == nodeName) {
                    target.disabled = !1;
                    var button = this._get(inst, "button");
                    $(button).removeClass("ui-state-disabled").disabled = !1, inst.trigger.filter("button").each(function() {
                        this.disabled = !1
                    }).end()
                } else if ("div" == nodeName || "span" == nodeName) {
                    var inline = $target.children("." + this._inlineClass);
                    inline.children().removeClass("ui-state-disabled"), inline.find("button").each(function() {
                        this.disabled = !1
                    })
                }
                this._disabledInputs = $.map(this._disabledInputs, function(value) {
                    return value == target_id ? null : value
                })
            }
        },
        _disableTimepicker: function(target) {
            var $target = $(target),
                inst = $.data(target, PROP_NAME);
            if ($target.hasClass(this.markerClassName)) {
                var nodeName = target.nodeName.toLowerCase();
                if ("input" == nodeName) {
                    var button = this._get(inst, "button");
                    $(button).addClass("ui-state-disabled").disabled = !0, target.disabled = !0, inst.trigger.filter("button").each(function() {
                        this.disabled = !0
                    }).end()
                } else if ("div" == nodeName || "span" == nodeName) {
                    var inline = $target.children("." + this._inlineClass);
                    inline.children().addClass("ui-state-disabled"), inline.find("button").each(function() {
                        this.disabled = !0
                    })
                }
                this._disabledInputs = $.map(this._disabledInputs, function(value) {
                    return value == target ? null : value
                }), this._disabledInputs[this._disabledInputs.length] = $target.attr("id")
            }
        },
        _isDisabledTimepicker: function(target_id) {
            if (!target_id) return !1;
            for (var i = 0; i < this._disabledInputs.length; i++)
                if (this._disabledInputs[i] == target_id) return !0;
            return !1
        },
        _checkOffset: function(inst, offset, isFixed) {
            var tpWidth = inst.tpDiv.outerWidth(),
                tpHeight = inst.tpDiv.outerHeight(),
                inputWidth = inst.input ? inst.input.outerWidth() : 0,
                inputHeight = inst.input ? inst.input.outerHeight() : 0,
                viewWidth = document.documentElement.clientWidth + $(document).scrollLeft(),
                viewHeight = document.documentElement.clientHeight + $(document).scrollTop();
            return offset.left -= this._get(inst, "isRTL") ? tpWidth - inputWidth : 0, offset.left -= isFixed && offset.left == inst.input.offset().left ? $(document).scrollLeft() : 0, offset.top -= isFixed && offset.top == inst.input.offset().top + inputHeight ? $(document).scrollTop() : 0, offset.left -= Math.min(offset.left, offset.left + tpWidth > viewWidth && viewWidth > tpWidth ? Math.abs(offset.left + tpWidth - viewWidth) : 0), offset.top -= Math.min(offset.top, offset.top + tpHeight > viewHeight && viewHeight > tpHeight ? Math.abs(tpHeight + inputHeight) : 0), offset
        },
        _findPos: function(obj) {
            for (var inst = this._getInst(obj), isRTL = this._get(inst, "isRTL"); obj && ("hidden" == obj.type || 1 != obj.nodeType);) obj = obj[isRTL ? "previousSibling" : "nextSibling"];
            var position = $(obj).offset();
            return [position.left, position.top]
        },
        _getBorders: function(elem) {
            var convert = function(value) {
                return {
                    thin: 1,
                    medium: 2,
                    thick: 3
                }[value] || value
            };
            return [parseFloat(convert(elem.css("border-left-width"))), parseFloat(convert(elem.css("border-top-width")))]
        },
        _checkExternalClick: function(event) {
            if ($.timepicker._curInst) {
                var $target = $(event.target);
                $target[0].id == $.timepicker._mainDivId || 0 != $target.parents("#" + $.timepicker._mainDivId).length || $target.hasClass($.timepicker.markerClassName) || $target.hasClass($.timepicker._triggerClass) || !$.timepicker._timepickerShowing || $.timepicker._inDialog && $.blockUI || $.timepicker._hideTimepicker()
            }
        },
        _hideTimepicker: function(input) {
            var inst = this._curInst;
            if (inst && (!input || inst == $.data(input, PROP_NAME)) && this._timepickerShowing) {
                var showAnim = this._get(inst, "showAnim"),
                    duration = this._get(inst, "duration"),
                    postProcess = function() {
                        $.timepicker._tidyDialog(inst), this._curInst = null
                    };
                $.effects && $.effects[showAnim] ? inst.tpDiv.hide(showAnim, $.timepicker._get(inst, "showOptions"), duration, postProcess) : inst.tpDiv["slideDown" == showAnim ? "slideUp" : "fadeIn" == showAnim ? "fadeOut" : "hide"](showAnim ? duration : null, postProcess), showAnim || postProcess(), this._timepickerShowing = !1, this._lastInput = null, this._inDialog && (this._dialogInput.css({
                    position: "absolute",
                    left: "0",
                    top: "-100px"
                }), $.blockUI && ($.unblockUI(), $("body").append(this.tpDiv))), this._inDialog = !1;
                var onClose = this._get(inst, "onClose");
                onClose && onClose.apply(inst.input ? inst.input[0] : null, [inst.input ? inst.input.val() : "", inst])
            }
        },
        _tidyDialog: function(inst) {
            inst.tpDiv.removeClass(this._dialogClass).unbind(".ui-timepicker")
        },
        _getInst: function(target) {
            try {
                return $.data(target, PROP_NAME)
            } catch (err) {
                throw "Missing instance data for this timepicker"
            }
        },
        _get: function(inst, name) {
            return void 0 !== inst.settings[name] ? inst.settings[name] : this._defaults[name]
        },
        _setTimeFromField: function(inst) {
            if (inst.input.val() != inst.lastVal) {
                var defaultTime = this._get(inst, "defaultTime"),
                    timeToParse = "now" == defaultTime ? this._getCurrentTimeRounded(inst) : defaultTime;
                if (0 == inst.inline && "" != inst.input.val() && (timeToParse = inst.input.val()), timeToParse instanceof Date) inst.hours = timeToParse.getHours(), inst.minutes = timeToParse.getMinutes();
                else {
                    var timeVal = inst.lastVal = timeToParse;
                    if ("" == timeToParse) inst.hours = -1, inst.minutes = -1;
                    else {
                        var time = this.parseTime(inst, timeVal);
                        inst.hours = time.hours, inst.minutes = time.minutes
                    }
                }
                $.timepicker._updateTimepicker(inst)
            }
        },
        _optionTimepicker: function(target, name, value) {
            var inst = this._getInst(target);
            if (2 == arguments.length && "string" == typeof name) return "defaults" == name ? $.extend({}, $.timepicker._defaults) : inst ? "all" == name ? $.extend({}, inst.settings) : this._get(inst, name) : null;
            var settings = name || {};
            "string" == typeof name && (settings = {}, settings[name] = value), inst && (extendRemove(inst.settings, settings), this._curInst == inst && (this._hideTimepicker(), this._updateTimepicker(inst)), inst.inline && this._updateTimepicker(inst))
        },
        _setTimeTimepicker: function(target, time) {
            var inst = this._getInst(target);
            inst && (this._setTime(inst, time), this._updateTimepicker(inst), this._updateAlternate(inst, time))
        },
        _setTime: function(inst, time, noChange) {
            var origHours = inst.hours,
                origMinutes = inst.minutes;
            if (time instanceof Date) inst.hours = time.getHours(), inst.minutes = time.getMinutes();
            else {
                var time = this.parseTime(inst, time);
                inst.hours = time.hours, inst.minutes = time.minutes
            }
            origHours == inst.hours && origMinutes == inst.minutes || noChange || inst.input.trigger("change"), this._updateTimepicker(inst), this._updateSelectedValue(inst)
        },
        _getCurrentTimeRounded: function(inst) {
            var currentTime = new Date,
                currentMinutes = currentTime.getMinutes(),
                minutes_options = this._get(inst, "minutes"),
                adjustedMinutes = Math.round(currentMinutes / minutes_options.interval) * minutes_options.interval;
            return currentTime.setMinutes(adjustedMinutes), currentTime
        },
        parseTime: function(inst, timeVal) {
            var retVal = new Object;
            if (retVal.hours = -1, retVal.minutes = -1, !timeVal) return "";
            var timeSeparator = this._get(inst, "timeSeparator"),
                amPmText = this._get(inst, "amPmText"),
                showHours = this._get(inst, "showHours"),
                showMinutes = this._get(inst, "showMinutes"),
                optionalMinutes = this._get(inst, "optionalMinutes"),
                showPeriod = 1 == this._get(inst, "showPeriod"),
                p = timeVal.indexOf(timeSeparator);
            if (-1 != p ? (retVal.hours = parseInt(timeVal.substr(0, p), 10), retVal.minutes = parseInt(timeVal.substr(p + 1), 10)) : !showHours || showMinutes && !optionalMinutes ? !showHours && showMinutes && (retVal.minutes = parseInt(timeVal, 10)) : retVal.hours = parseInt(timeVal, 10), showHours) {
                var timeValUpper = timeVal.toUpperCase();
                retVal.hours < 12 && showPeriod && -1 != timeValUpper.indexOf(amPmText[1].toUpperCase()) && (retVal.hours += 12), 12 == retVal.hours && showPeriod && -1 != timeValUpper.indexOf(amPmText[0].toUpperCase()) && (retVal.hours = 0)
            }
            return retVal
        },
        selectNow: function(event) {
            var id = $(event.target).attr("data-timepicker-instance-id"),
                $target = $(id),
                inst = this._getInst($target[0]),
                currentTime = new Date;
            inst.hours = currentTime.getHours(), inst.minutes = currentTime.getMinutes(), this._updateSelectedValue(inst), this._updateTimepicker(inst), this._hideTimepicker()
        },
        deselectTime: function(event) {
            var id = $(event.target).attr("data-timepicker-instance-id"),
                $target = $(id),
                inst = this._getInst($target[0]);
            inst.hours = -1, inst.minutes = -1, this._updateSelectedValue(inst), this._hideTimepicker()
        },
        selectHours: function(event) {
            var $td = $(event.currentTarget),
                id = $td.attr("data-timepicker-instance-id"),
                newHours = parseInt($td.attr("data-hour")),
                fromDoubleClick = event.data.fromDoubleClick,
                $target = $(id),
                inst = this._getInst($target[0]),
                showMinutes = 1 == this._get(inst, "showMinutes");
            if ($.timepicker._isDisabledTimepicker($target.attr("id"))) return !1;
            $td.parents(".ui-timepicker-hours:first").find("a").removeClass("ui-state-active"), $td.children("a").addClass("ui-state-active"), inst.hours = newHours;
            var onMinuteShow = this._get(inst, "onMinuteShow"),
                maxTime = this._get(inst, "maxTime"),
                minTime = this._get(inst, "minTime");
            return !onMinuteShow && isNaN(parseInt(maxTime.minute)) && isNaN(parseInt(minTime.minute)) || this._updateMinuteDisplay(inst), this._updateSelectedValue(inst), inst._hoursClicked = !0, (inst._minutesClicked || fromDoubleClick || 0 == showMinutes) && $.timepicker._hideTimepicker(), !1
        },
        selectMinutes: function(event) {
            var $td = $(event.currentTarget),
                id = $td.attr("data-timepicker-instance-id"),
                newMinutes = parseInt($td.attr("data-minute")),
                fromDoubleClick = event.data.fromDoubleClick,
                $target = $(id),
                inst = this._getInst($target[0]),
                showHours = 1 == this._get(inst, "showHours");
            return $.timepicker._isDisabledTimepicker($target.attr("id")) ? !1 : ($td.parents(".ui-timepicker-minutes:first").find("a").removeClass("ui-state-active"), $td.children("a").addClass("ui-state-active"), inst.minutes = newMinutes, this._updateSelectedValue(inst), inst._minutesClicked = !0, inst._hoursClicked || fromDoubleClick || 0 == showHours ? ($.timepicker._hideTimepicker(), !1) : !1)
        },
        _updateSelectedValue: function(inst) {
            var newTime = this._getParsedTime(inst);
            inst.input && (inst.input.val(newTime), inst.input.trigger("change"));
            var onSelect = this._get(inst, "onSelect");
            return onSelect && onSelect.apply(inst.input ? inst.input[0] : null, [newTime, inst]), this._updateAlternate(inst, newTime), newTime
        },
        _getParsedTime: function(inst) {
            if (-1 == inst.hours && -1 == inst.minutes) return "";
            (inst.hours < inst.hours.starts || inst.hours > inst.hours.ends) && (inst.hours = 0), (inst.minutes < inst.minutes.starts || inst.minutes > inst.minutes.ends) && (inst.minutes = 0);
            var period = "",
                showPeriod = 1 == this._get(inst, "showPeriod"),
                showLeadingZero = 1 == this._get(inst, "showLeadingZero"),
                showHours = 1 == this._get(inst, "showHours"),
                showMinutes = 1 == this._get(inst, "showMinutes"),
                optionalMinutes = 1 == this._get(inst, "optionalMinutes"),
                amPmText = this._get(inst, "amPmText"),
                selectedHours = inst.hours ? inst.hours : 0,
                selectedMinutes = inst.minutes ? inst.minutes : 0,
                displayHours = selectedHours ? selectedHours : 0,
                parsedTime = ""; - 1 == displayHours && (displayHours = 0), -1 == selectedMinutes && (selectedMinutes = 0), showPeriod && (0 == inst.hours && (displayHours = 12), inst.hours < 12 ? period = amPmText[0] : (period = amPmText[1], displayHours > 12 && (displayHours -= 12)));
            var h = displayHours.toString();
            showLeadingZero && 10 > displayHours && (h = "0" + h);
            var m = selectedMinutes.toString();
            return 10 > selectedMinutes && (m = "0" + m), showHours && (parsedTime += h), !showHours || !showMinutes || optionalMinutes && 0 == m || (parsedTime += this._get(inst, "timeSeparator")), !showMinutes || optionalMinutes && 0 == m || (parsedTime += m), showHours && period.length > 0 && (parsedTime += this._get(inst, "periodSeparator") + period), parsedTime
        },
        _updateAlternate: function(inst, newTime) {
            var altField = this._get(inst, "altField");
            altField && $(altField).each(function(i, e) {
                $(e).val(newTime)
            })
        },
        _getTimeAsDateTimepicker: function(input) {
            var inst = this._getInst(input);
            return -1 == inst.hours && -1 == inst.minutes ? "" : ((inst.hours < inst.hours.starts || inst.hours > inst.hours.ends) && (inst.hours = 0), (inst.minutes < inst.minutes.starts || inst.minutes > inst.minutes.ends) && (inst.minutes = 0), new Date(0, 0, 0, inst.hours, inst.minutes, 0))
        },
        _getTimeTimepicker: function(input) {
            var inst = this._getInst(input);
            return this._getParsedTime(inst)
        },
        _getHourTimepicker: function(input) {
            var inst = this._getInst(input);
            return void 0 == inst ? -1 : inst.hours
        },
        _getMinuteTimepicker: function(input) {
            var inst = this._getInst(input);
            return void 0 == inst ? -1 : inst.minutes
        }
    }), $.fn.timepicker = function(options) {
        $.timepicker.initialized || ($(document).mousedown($.timepicker._checkExternalClick), $.timepicker.initialized = !0), 0 === $("#" + $.timepicker._mainDivId).length && $("body").append($.timepicker.tpDiv);
        var otherArgs = Array.prototype.slice.call(arguments, 1);
        return "string" != typeof options || "getTime" != options && "getTimeAsDate" != options && "getHour" != options && "getMinute" != options ? "option" == options && 2 == arguments.length && "string" == typeof arguments[1] ? $.timepicker["_" + options + "Timepicker"].apply($.timepicker, [this[0]].concat(otherArgs)) : this.each(function() {
            "string" == typeof options ? $.timepicker["_" + options + "Timepicker"].apply($.timepicker, [this].concat(otherArgs)) : $.timepicker._attachTimepicker(this, options)
        }) : $.timepicker["_" + options + "Timepicker"].apply($.timepicker, [this[0]].concat(otherArgs))
    }, $.timepicker = new Timepicker, $.timepicker.initialized = !1, $.timepicker.uuid = (new Date).getTime(), $.timepicker.version = "0.3.3", window["TP_jQuery_" + tpuuid] = $
}(jQuery),
function(factory) {
    "object" == typeof exports && exports && "object" == typeof module && module && module.exports === exports ? factory(require("jquery")) : "function" == typeof define && define.amd ? define(["jquery"], factory) : factory(jQuery)
}(function($) {
    function _isVisible(elem) {
        var el = elem[0];
        return el.offsetWidth > 0 && el.offsetHeight > 0
    }

    function _parseSettings(settings) {
        if (settings.minTime && (settings.minTime = _time2int(settings.minTime)), settings.maxTime && (settings.maxTime = _time2int(settings.maxTime)), settings.durationTime && "function" != typeof settings.durationTime && (settings.durationTime = _time2int(settings.durationTime)), "now" == settings.scrollDefault ? settings.scrollDefault = _time2int(new Date) : settings.scrollDefault ? settings.scrollDefault = _time2int(settings.scrollDefault) : settings.minTime && (settings.scrollDefault = settings.minTime), settings.scrollDefault && (settings.scrollDefault = _roundTime(settings.scrollDefault, settings)), "string" === $.type(settings.timeFormat) && settings.timeFormat.match(/[gh]/) && (settings._twelveHourTime = !0), settings.disableTimeRanges.length > 0) {
            for (var i in settings.disableTimeRanges) settings.disableTimeRanges[i] = [_time2int(settings.disableTimeRanges[i][0]), _time2int(settings.disableTimeRanges[i][1])];
            settings.disableTimeRanges = settings.disableTimeRanges.sort(function(a, b) {
                return a[0] - b[0]
            });
            for (var i = settings.disableTimeRanges.length - 1; i > 0; i--) settings.disableTimeRanges[i][0] <= settings.disableTimeRanges[i - 1][1] && (settings.disableTimeRanges[i - 1] = [Math.min(settings.disableTimeRanges[i][0], settings.disableTimeRanges[i - 1][0]), Math.max(settings.disableTimeRanges[i][1], settings.disableTimeRanges[i - 1][1])], settings.disableTimeRanges.splice(i, 1))
        }
        return settings
    }

    function _render(self) {
        var settings = self.data("timepicker-settings"),
            list = self.data("timepicker-list");
        if (list && list.length && (list.remove(), self.data("timepicker-list", !1)), settings.useSelect) {
            list = $("<select />", {
                "class": "ui-timepicker-select"
            });
            var wrapped_list = list
        } else {
            list = $("<ul />", {
                "class": "ui-timepicker-list"
            });
            var wrapped_list = $("<div />", {
                "class": "ui-timepicker-wrapper",
                tabindex: -1
            });
            wrapped_list.css({
                display: "none",
                position: "absolute"
            }).append(list)
        } if (settings.noneOption)
            if (settings.noneOption === !0 && (settings.noneOption = settings.useSelect ? "Time..." : "None"), $.isArray(settings.noneOption)) {
                for (var i in settings.noneOption)
                    if (parseInt(i, 10) == i) {
                        var noneElement = _generateNoneElement(settings.noneOption[i], settings.useSelect);
                        list.append(noneElement)
                    }
            } else {
                var noneElement = _generateNoneElement(settings.noneOption, settings.useSelect);
                list.append(noneElement)
            }
        settings.className && wrapped_list.addClass(settings.className), null === settings.minTime && null === settings.durationTime || !settings.showDuration || (wrapped_list.addClass("ui-timepicker-with-duration"), wrapped_list.addClass("ui-timepicker-step-" + settings.step));
        var durStart = settings.minTime;
        "function" == typeof settings.durationTime ? durStart = _time2int(settings.durationTime()) : null !== settings.durationTime && (durStart = settings.durationTime);
        var start = null !== settings.minTime ? settings.minTime : 0,
            end = null !== settings.maxTime ? settings.maxTime : start + _ONE_DAY - 1;
        start >= end && (end += _ONE_DAY), end === _ONE_DAY - 1 && "string" === $.type(settings.timeFormat) && -1 !== settings.timeFormat.indexOf("H") && (end = _ONE_DAY);
        for (var dr = settings.disableTimeRanges, drCur = 0, drLen = dr.length, i = start; end >= i; i += 60 * settings.step) {
            var timeInt = i,
                timeString = _int2time(timeInt, settings.timeFormat);
            if (settings.useSelect) {
                var row = $("<option />", {
                    value: timeString
                });
                row.text(timeString)
            } else {
                var row = $("<li />");
                row.data("time", 86400 >= timeInt ? timeInt : timeInt % 86400), row.text(timeString)
            } if ((null !== settings.minTime || null !== settings.durationTime) && settings.showDuration) {
                var durationString = _int2duration(i - durStart, settings.step);
                if (settings.useSelect) row.text(row.text() + " (" + durationString + ")");
                else {
                    var duration = $("<span />", {
                        "class": "ui-timepicker-duration"
                    });
                    duration.text(" (" + durationString + ")"), row.append(duration)
                }
            }
            drLen > drCur && (timeInt >= dr[drCur][1] && (drCur += 1), dr[drCur] && timeInt >= dr[drCur][0] && timeInt < dr[drCur][1] && (settings.useSelect ? row.prop("disabled", !0) : row.addClass("ui-timepicker-disabled"))), list.append(row)
        }
        if (wrapped_list.data("timepicker-input", self), self.data("timepicker-list", wrapped_list), settings.useSelect) self.val() && list.val(_roundAndFormatTime(self.val(), settings)), list.on("focus", function() {
            $(this).data("timepicker-input").trigger("showTimepicker")
        }), list.on("blur", function() {
            $(this).data("timepicker-input").trigger("hideTimepicker")
        }), list.on("change", function() {
            _setTimeValue(self, $(this).val(), "select")
        }), _setTimeValue(self, list.val()), self.hide().after(list);
        else {
            var appendTo = settings.appendTo;
            "string" == typeof appendTo ? appendTo = $(appendTo) : "function" == typeof appendTo && (appendTo = appendTo(self)), appendTo.append(wrapped_list), _setSelected(self, list), list.on("mousedown", "li", function() {
                self.off("focus.timepicker"), self.on("focus.timepicker-ie-hack", function() {
                    self.off("focus.timepicker-ie-hack"), self.on("focus.timepicker", methods.show)
                }), _hideKeyboard(self) || self[0].focus(), list.find("li").removeClass("ui-timepicker-selected"), $(this).addClass("ui-timepicker-selected"), _selectValue(self) && (self.trigger("hideTimepicker"), wrapped_list.hide())
            })
        }
    }

    function _generateNoneElement(optionValue, useSelect) {
        var label, className, value;
        return "object" == typeof optionValue ? (label = optionValue.label, className = optionValue.className, value = optionValue.value) : "string" == typeof optionValue ? label = optionValue : $.error("Invalid noneOption value"), useSelect ? $("<option />", {
            value: value,
            "class": className,
            text: label
        }) : $("<li />", {
            "class": className,
            text: label
        }).data("time", value)
    }

    function _roundTime(seconds, settings) {
        if ($.isNumeric(seconds) || (seconds = _time2int(seconds)), null === seconds) return null;
        var offset = seconds % (60 * settings.step);
        return offset >= 30 * settings.step ? seconds += 60 * settings.step - offset : seconds -= offset, seconds
    }

    function _roundAndFormatTime(seconds, settings) {
        return seconds = _roundTime(seconds, settings), null !== seconds ? _int2time(seconds, settings.timeFormat) : void 0
    }

    function _generateBaseDate() {
        return new Date(1970, 1, 1, 0, 0, 0)
    }

    function _closeHandler(e) {
        var target = $(e.target),
            input = target.closest(".ui-timepicker-input");
        0 === input.length && 0 === target.closest(".ui-timepicker-wrapper").length && (methods.hide(), $(document).unbind(".ui-timepicker"))
    }

    function _hideKeyboard(self) {
        var settings = self.data("timepicker-settings");
        return (window.navigator.msMaxTouchPoints || "ontouchstart" in document) && settings.disableTouchKeyboard
    }

    function _findRow(self, list, value) {
        if (!value && 0 !== value) return !1;
        var settings = self.data("timepicker-settings"),
            out = !1,
            halfStep = 30 * settings.step;
        return list.find("li").each(function(i, obj) {
            var jObj = $(obj);
            if ("number" == typeof jObj.data("time")) {
                var offset = jObj.data("time") - value;
                return Math.abs(offset) < halfStep || offset == halfStep ? (out = jObj, !1) : void 0
            }
        }), out
    }

    function _setSelected(self, list) {
        list.find("li").removeClass("ui-timepicker-selected");
        var timeValue = _time2int(_getTimeValue(self), self.data("timepicker-settings"));
        if (null !== timeValue) {
            var selected = _findRow(self, list, timeValue);
            if (selected) {
                var topDelta = selected.offset().top - list.offset().top;
                (topDelta + selected.outerHeight() > list.outerHeight() || 0 > topDelta) && list.scrollTop(list.scrollTop() + selected.position().top - selected.outerHeight()), selected.addClass("ui-timepicker-selected")
            }
        }
    }

    function _formatValue(e, origin) {
        if ("" !== this.value && "timepicker" != origin) {
            {
                var self = $(this);
                self.data("timepicker-list")
            }
            if (!self.is(":focus") || e && "change" == e.type) {
                var seconds = _time2int(this.value);
                if (null === seconds) return void self.trigger("timeFormatError");
                var settings = self.data("timepicker-settings"),
                    rangeError = !1;
                if (null !== settings.minTime && seconds < settings.minTime ? rangeError = !0 : null !== settings.maxTime && seconds > settings.maxTime && (rangeError = !0), $.each(settings.disableTimeRanges, function() {
                    return seconds >= this[0] && seconds < this[1] ? (rangeError = !0, !1) : void 0
                }), settings.forceRoundTime) {
                    var offset = seconds % (60 * settings.step);
                    offset >= 30 * settings.step ? seconds += 60 * settings.step - offset : seconds -= offset
                }
                var prettyTime = _int2time(seconds, settings.timeFormat);
                rangeError ? _setTimeValue(self, prettyTime, "error") && self.trigger("timeRangeError") : _setTimeValue(self, prettyTime)
            }
        }
    }

    function _getTimeValue(self) {
        return self.is("input") ? self.val() : self.data("ui-timepicker-value")
    }

    function _setTimeValue(self, value, source) {
        if (self.is("input")) {
            self.val(value);
            var settings = self.data("timepicker-settings");
            settings.useSelect && "select" != source && self.data("timepicker-list").val(_roundAndFormatTime(value, settings))
        }
        return self.data("ui-timepicker-value") != value ? (self.data("ui-timepicker-value", value), "select" == source ? self.trigger("selectTime").trigger("changeTime").trigger("change", "timepicker") : "error" != source && self.trigger("changeTime"), !0) : (self.trigger("selectTime"), !1)
    }

    function _keydownhandler(e) {
        var self = $(this),
            list = self.data("timepicker-list");
        if (!list || !_isVisible(list)) {
            if (40 != e.keyCode) return !0;
            methods.show.call(self.get(0)), list = self.data("timepicker-list"), _hideKeyboard(self) || self.focus()
        }
        switch (e.keyCode) {
            case 13:
                return _selectValue(self) && methods.hide.apply(this), e.preventDefault(), !1;
            case 38:
                var selected = list.find(".ui-timepicker-selected");
                return selected.length ? selected.is(":first-child") || (selected.removeClass("ui-timepicker-selected"), selected.prev().addClass("ui-timepicker-selected"), selected.prev().position().top < selected.outerHeight() && list.scrollTop(list.scrollTop() - selected.outerHeight())) : (list.find("li").each(function(i, obj) {
                    return $(obj).position().top > 0 ? (selected = $(obj), !1) : void 0
                }), selected.addClass("ui-timepicker-selected")), !1;
            case 40:
                return selected = list.find(".ui-timepicker-selected"), 0 === selected.length ? (list.find("li").each(function(i, obj) {
                    return $(obj).position().top > 0 ? (selected = $(obj), !1) : void 0
                }), selected.addClass("ui-timepicker-selected")) : selected.is(":last-child") || (selected.removeClass("ui-timepicker-selected"), selected.next().addClass("ui-timepicker-selected"), selected.next().position().top + 2 * selected.outerHeight() > list.outerHeight() && list.scrollTop(list.scrollTop() + selected.outerHeight())), !1;
            case 27:
                list.find("li").removeClass("ui-timepicker-selected"), methods.hide();
                break;
            case 9:
                methods.hide();
                break;
            default:
                return !0
        }
    }

    function _keyuphandler(e) {
        var self = $(this),
            list = self.data("timepicker-list");
        if (!list || !_isVisible(list)) return !0;
        if (!self.data("timepicker-settings").typeaheadHighlight) return list.find("li").removeClass("ui-timepicker-selected"), !0;
        switch (e.keyCode) {
            case 96:
            case 97:
            case 98:
            case 99:
            case 100:
            case 101:
            case 102:
            case 103:
            case 104:
            case 105:
            case 48:
            case 49:
            case 50:
            case 51:
            case 52:
            case 53:
            case 54:
            case 55:
            case 56:
            case 57:
            case 65:
            case 77:
            case 80:
            case 186:
            case 8:
            case 46:
                _setSelected(self, list);
                break;
            default:
                return
        }
    }

    function _selectValue(self) {
        var settings = self.data("timepicker-settings"),
            list = self.data("timepicker-list"),
            timeValue = null,
            cursor = list.find(".ui-timepicker-selected");
        if (cursor.hasClass("ui-timepicker-disabled")) return !1;
        if (cursor.length && (timeValue = cursor.data("time")), null !== timeValue)
            if ("string" == typeof timeValue) self.val(timeValue);
            else {
                var timeString = _int2time(timeValue, settings.timeFormat);
                _setTimeValue(self, timeString, "select")
            }
        return !0
    }

    function _int2duration(seconds, step) {
        seconds = Math.abs(seconds);
        var hours, mins, minutes = Math.round(seconds / 60),
            duration = [];
        return 60 > minutes ? duration = [minutes, _lang.mins] : (hours = Math.floor(minutes / 60), mins = minutes % 60, 30 == step && 30 == mins && (hours += _lang.decimal + 5), duration.push(hours), duration.push(1 == hours ? _lang.hr : _lang.hrs), 30 != step && mins && (duration.push(mins), duration.push(_lang.mins))), duration.join(" ")
    }

    function _int2time(seconds, format) {
        if (null !== seconds) {
            var time = new Date(_baseDate.valueOf() + 1e3 * seconds);
            if (!isNaN(time.getTime())) {
                if ("function" === $.type(format)) return format(time);
                for (var hour, code, output = "", i = 0; i < format.length; i++) switch (code = format.charAt(i)) {
                    case "a":
                        output += time.getHours() > 11 ? _lang.pm : _lang.am;
                        break;
                    case "A":
                        output += time.getHours() > 11 ? _lang.pm.toUpperCase() : _lang.am.toUpperCase();
                        break;
                    case "g":
                        hour = time.getHours() % 12, output += 0 === hour ? "12" : hour;
                        break;
                    case "G":
                        output += time.getHours();
                        break;
                    case "h":
                        hour = time.getHours() % 12, 0 !== hour && 10 > hour && (hour = "0" + hour), output += 0 === hour ? "12" : hour;
                        break;
                    case "H":
                        hour = time.getHours(), seconds === _ONE_DAY && (hour = 24), output += hour > 9 ? hour : "0" + hour;
                        break;
                    case "i":
                        var minutes = time.getMinutes();
                        output += minutes > 9 ? minutes : "0" + minutes;
                        break;
                    case "s":
                        seconds = time.getSeconds(), output += seconds > 9 ? seconds : "0" + seconds;
                        break;
                    case "\\":
                        i++, output += format.charAt(i);
                        break;
                    default:
                        output += code
                }
                return output
            }
        }
    }

    function _time2int(timeString, settings) {
        if ("" === timeString) return null;
        if (!timeString || timeString + 0 == timeString) return timeString;
        if ("object" == typeof timeString) return 3600 * timeString.getHours() + 60 * timeString.getMinutes() + timeString.getSeconds();
        timeString = timeString.toLowerCase(), ("a" == timeString.slice(-1) || "p" == timeString.slice(-1)) && (timeString += "m");
        var pattern = new RegExp("^([0-2]?[0-9])\\W?([0-5][0-9])?\\W?([0-5][0-9])?\\s*(" + _lang.am + "|" + _lang.pm + ")?$"),
            time = timeString.match(pattern);
        if (!time) return null;
        var hour = parseInt(1 * time[1], 10),
            ampm = time[4],
            hours = hour;
        12 >= hour && ampm && (hours = 12 == hour ? time[4] == _lang.pm ? 12 : 0 : hour + (time[4] == _lang.pm ? 12 : 0));
        var minutes = 1 * time[2] || 0,
            seconds = 1 * time[3] || 0,
            timeInt = 3600 * hours + 60 * minutes + seconds;
        if (!ampm && settings && settings._twelveHourTime && settings.scrollDefault) {
            var delta = timeInt - settings.scrollDefault;
            0 > delta && delta >= _ONE_DAY / -2 && (timeInt = (timeInt + _ONE_DAY / 2) % _ONE_DAY)
        }
        return timeInt
    }
    var _baseDate = _generateBaseDate(),
        _ONE_DAY = 86400,
        _lang = {
            am: "am",
            pm: "pm",
            AM: "AM",
            PM: "PM",
            decimal: ".",
            mins: "mins",
            hr: "hr",
            hrs: "hrs"
        }, methods = {
            init: function(options) {
                return this.each(function() {
                    var self = $(this),
                        attributeOptions = [];
                    for (var key in $.fn.timepicker.defaults) self.data(key) && (attributeOptions[key] = self.data(key));
                    var settings = $.extend({}, $.fn.timepicker.defaults, attributeOptions, options);
                    settings.lang && (_lang = $.extend(_lang, settings.lang)), settings = _parseSettings(settings), self.data("timepicker-settings", settings), self.addClass("ui-timepicker-input"), settings.useSelect ? _render(self) : (self.prop("autocomplete", "off"), self.on("click.timepicker focus.timepicker", methods.show), self.on("change.timepicker", _formatValue), self.on("keydown.timepicker", _keydownhandler), self.on("keyup.timepicker", _keyuphandler), _formatValue.call(self.get(0)))
                })
            },
            show: function(e) {
                var self = $(this),
                    settings = self.data("timepicker-settings");
                if (e) {
                    if (!settings.showOnFocus) return !0;
                    e.preventDefault()
                }
                if (settings.useSelect) return void self.data("timepicker-list").focus();
                _hideKeyboard(self) && self.blur();
                var list = self.data("timepicker-list");
                if (!self.prop("readonly") && (list && 0 !== list.length && "function" != typeof settings.durationTime || (_render(self), list = self.data("timepicker-list")), !_isVisible(list))) {
                    methods.hide(), list.show();
                    var listOffset = {};
                    listOffset.left = "rtl" == settings.orientation ? self.offset().left + self.outerWidth() - list.outerWidth() + parseInt(list.css("marginLeft").replace("px", ""), 10) : self.offset().left + parseInt(list.css("marginLeft").replace("px", ""), 10), listOffset.top = self.offset().top + self.outerHeight(!0) + list.outerHeight() > $(window).height() + $(window).scrollTop() ? self.offset().top - list.outerHeight() + parseInt(list.css("marginTop").replace("px", ""), 10) : self.offset().top + self.outerHeight() + parseInt(list.css("marginTop").replace("px", ""), 10), list.offset(listOffset);
                    var selected = list.find(".ui-timepicker-selected");
                    if (selected.length || (_getTimeValue(self) ? selected = _findRow(self, list, _time2int(_getTimeValue(self))) : settings.scrollDefault && (selected = _findRow(self, list, settings.scrollDefault))), selected && selected.length) {
                        var topOffset = list.scrollTop() + selected.position().top - selected.outerHeight();
                        list.scrollTop(topOffset)
                    } else list.scrollTop(0);
                    return $(document).on("touchstart.ui-timepicker mousedown.ui-timepicker", _closeHandler), settings.closeOnWindowScroll && $(document).on("scroll.ui-timepicker", _closeHandler), self.trigger("showTimepicker"), this
                }
            },
            hide: function() {
                var self = $(this),
                    settings = self.data("timepicker-settings");
                return settings && settings.useSelect && self.blur(), $(".ui-timepicker-wrapper").each(function() {
                    var list = $(this);
                    if (_isVisible(list)) {
                        var self = list.data("timepicker-input"),
                            settings = self.data("timepicker-settings");
                        settings && settings.selectOnBlur && _selectValue(self), list.hide(), self.trigger("hideTimepicker")
                    }
                }), this
            },
            option: function(key, value) {
                return this.each(function() {
                    var self = $(this),
                        settings = self.data("timepicker-settings"),
                        list = self.data("timepicker-list");
                    if ("object" == typeof key) settings = $.extend(settings, key);
                    else if ("string" == typeof key && "undefined" != typeof value) settings[key] = value;
                    else if ("string" == typeof key) return settings[key];
                    settings = _parseSettings(settings), self.data("timepicker-settings", settings), list && (list.remove(), self.data("timepicker-list", !1)), settings.useSelect && _render(self)
                })
            },
            getSecondsFromMidnight: function() {
                return _time2int(_getTimeValue(this))
            },
            getTime: function(relative_date) {
                var self = this,
                    time_string = _getTimeValue(self);
                if (!time_string) return null;
                relative_date || (relative_date = new Date);
                var offset = _time2int(time_string),
                    time = new Date(relative_date);
                return time.setHours(offset / 3600), time.setMinutes(offset % 3600 / 60), time.setSeconds(offset % 60), time.setMilliseconds(0), time
            },
            setTime: function(value) {
                var self = this,
                    settings = self.data("timepicker-settings");
                if (settings.forceRoundTime) var prettyTime = _roundAndFormatTime(value, settings);
                else var prettyTime = _int2time(_time2int(value), settings.timeFormat);
                return _setTimeValue(self, prettyTime), self.data("timepicker-list") && _setSelected(self, self.data("timepicker-list")), this
            },
            remove: function() {
                var self = this;
                if (self.hasClass("ui-timepicker-input")) {
                    var settings = self.data("timepicker-settings");
                    return self.removeAttr("autocomplete", "off"), self.removeClass("ui-timepicker-input"), self.removeData("timepicker-settings"), self.off(".timepicker"), self.data("timepicker-list") && self.data("timepicker-list").remove(), settings.useSelect && self.show(), self.removeData("timepicker-list"), this
                }
            }
        };
    $.fn.timepicker = function(method) {
        return this.length ? methods[method] ? this.hasClass("ui-timepicker-input") ? methods[method].apply(this, Array.prototype.slice.call(arguments, 1)) : this : "object" != typeof method && method ? void $.error("Method " + method + " does not exist on jQuery.timepicker") : methods.init.apply(this, arguments) : this
    }, $.fn.timepicker.defaults = {
        className: null,
        minTime: null,
        maxTime: null,
        durationTime: null,
        step: 30,
        showDuration: !1,
        showOnFocus: !0,
        timeFormat: "g:ia",
        scrollDefault: null,
        selectOnBlur: !1,
        disableTouchKeyboard: !1,
        forceRoundTime: !1,
        appendTo: "body",
        orientation: "ltr",
        disableTimeRanges: [],
        closeOnWindowScroll: !1,
        typeaheadHighlight: !0,
        noneOption: !1
    }
}),
function($) {
    $.fn.tipTip = function(options) {
        var defaults = {
            activation: "hover",
            keepAlive: !1,
            maxWidth: "200px",
            edgeOffset: 3,
            defaultPosition: "bottom",
            delay: 400,
            fadeIn: 200,
            fadeOut: 200,
            attribute: "title",
            content: !1,
            enter: function() {},
            exit: function() {}
        }, opts = $.extend(defaults, options);
        if ($("#tiptip_holder").length <= 0) {
            var tiptip_holder = $('<div id="tiptip_holder" style="max-width:' + opts.maxWidth + ';"></div>'),
                tiptip_content = $('<div id="tiptip_content"></div>'),
                tiptip_arrow = $('<div id="tiptip_arrow"></div>');
            $("body").append(tiptip_holder.html(tiptip_content).prepend(tiptip_arrow.html('<div id="tiptip_arrow_inner"></div>')))
        } else var tiptip_holder = $("#tiptip_holder"),
        tiptip_content = $("#tiptip_content"), tiptip_arrow = $("#tiptip_arrow");
        return this.each(function() {
            function active_tiptip() {
                opts.enter.call(this), tiptip_content.html(org_title), tiptip_holder.hide().removeAttr("class").css("margin", "0"), tiptip_arrow.removeAttr("style");
                var top = parseInt(org_elem.offset().top),
                    left = parseInt(org_elem.offset().left),
                    org_width = parseInt(org_elem.outerWidth()),
                    org_height = parseInt(org_elem.outerHeight()),
                    tip_w = tiptip_holder.outerWidth(),
                    tip_h = tiptip_holder.outerHeight(),
                    w_compare = Math.round((org_width - tip_w) / 2),
                    h_compare = Math.round((org_height - tip_h) / 2),
                    marg_left = Math.round(left + w_compare),
                    marg_top = Math.round(top + org_height + opts.edgeOffset),
                    t_class = "",
                    arrow_top = "",
                    arrow_left = Math.round(tip_w - 12) / 2;
                "bottom" == opts.defaultPosition ? t_class = "_bottom" : "top" == opts.defaultPosition ? t_class = "_top" : "left" == opts.defaultPosition ? t_class = "_left" : "right" == opts.defaultPosition && (t_class = "_right");
                var right_compare = w_compare + left < parseInt($(window).scrollLeft()),
                    left_compare = tip_w + left > parseInt($(window).width());
                right_compare && 0 > w_compare || "_right" == t_class && !left_compare || "_left" == t_class && left < tip_w + opts.edgeOffset + 5 ? (t_class = "_right", arrow_top = Math.round(tip_h - 13) / 2, arrow_left = -12, marg_left = Math.round(left + org_width + opts.edgeOffset), marg_top = Math.round(top + h_compare)) : (left_compare && 0 > w_compare || "_left" == t_class && !right_compare) && (t_class = "_left", arrow_top = Math.round(tip_h - 13) / 2, arrow_left = Math.round(tip_w), marg_left = Math.round(left - (tip_w + opts.edgeOffset + 5)), marg_top = Math.round(top + h_compare));
                var top_compare = top + org_height + opts.edgeOffset + tip_h + 8 > parseInt($(window).height() + $(window).scrollTop()),
                    bottom_compare = top + org_height - (opts.edgeOffset + tip_h + 8) < 0;
                top_compare || "_bottom" == t_class && top_compare || "_top" == t_class && !bottom_compare ? ("_top" == t_class || "_bottom" == t_class ? t_class = "_top" : t_class += "_top", arrow_top = tip_h, marg_top = Math.round(top - (tip_h + 5 + opts.edgeOffset))) : (bottom_compare | ("_top" == t_class && bottom_compare) || "_bottom" == t_class && !top_compare) && ("_top" == t_class || "_bottom" == t_class ? t_class = "_bottom" : t_class += "_bottom", arrow_top = -12, marg_top = Math.round(top + org_height + opts.edgeOffset)), "_right_top" == t_class || "_left_top" == t_class ? marg_top += 5 : ("_right_bottom" == t_class || "_left_bottom" == t_class) && (marg_top -= 5), ("_left_top" == t_class || "_left_bottom" == t_class) && (marg_left += 5), tiptip_arrow.css({
                    "margin-left": arrow_left + "px",
                    "margin-top": arrow_top + "px"
                }), tiptip_holder.css({
                    "margin-left": marg_left + "px",
                    "margin-top": marg_top + "px"
                }).attr("class", "tip" + t_class), timeout && clearTimeout(timeout), timeout = setTimeout(function() {
                    tiptip_holder.stop(!0, !0).fadeIn(opts.fadeIn)
                }, opts.delay)
            }

            function deactive_tiptip() {
                opts.exit.call(this), timeout && clearTimeout(timeout), tiptip_holder.fadeOut(opts.fadeOut)
            }
            var org_elem = $(this);
            if (opts.content) var org_title = opts.content;
            else var org_title = org_elem.attr(opts.attribute); if ("" != org_title) {
                opts.content || org_elem.removeAttr(opts.attribute);
                var timeout = !1;
                "hover" == opts.activation ? (org_elem.hover(function() {
                    active_tiptip()
                }, function() {
                    opts.keepAlive || deactive_tiptip()
                }), opts.keepAlive && tiptip_holder.hover(function() {}, function() {
                    deactive_tiptip()
                })) : "focus" == opts.activation ? org_elem.focus(function() {
                    active_tiptip()
                }).blur(function() {
                    deactive_tiptip()
                }) : "click" == opts.activation && (org_elem.click(function() {
                    return active_tiptip(), !1
                }).hover(function() {}, function() {
                    opts.keepAlive || deactive_tiptip()
                }), opts.keepAlive && tiptip_holder.hover(function() {}, function() {
                    deactive_tiptip()
                }))
            }
        })
    }
}(jQuery),
function(factory) {
    "function" == typeof define && define.amd ? define(["jquery"], factory) : factory("object" == typeof exports ? require("jquery") : jQuery)
}(function($) {
    function encode(s) {
        return config.raw ? s : encodeURIComponent(s)
    }

    function decode(s) {
        return config.raw ? s : decodeURIComponent(s)
    }

    function stringifyCookieValue(value) {
        return encode(config.json ? JSON.stringify(value) : String(value))
    }

    function parseCookieValue(s) {
        0 === s.indexOf('"') && (s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, "\\"));
        try {
            return s = decodeURIComponent(s.replace(pluses, " ")), config.json ? JSON.parse(s) : s
        } catch (e) {}
    }

    function read(s, converter) {
        var value = config.raw ? s : parseCookieValue(s);
        return $.isFunction(converter) ? converter(value) : value
    }
    var pluses = /\+/g,
        config = $.cookie = function(key, value, options) {
            if (void 0 !== value && !$.isFunction(value)) {
                if (options = $.extend({}, config.defaults, options), "number" == typeof options.expires) {
                    var days = options.expires,
                        t = options.expires = new Date;
                    t.setTime(+t + 864e5 * days)
                }
                return document.cookie = [encode(key), "=", stringifyCookieValue(value), options.expires ? "; expires=" + options.expires.toUTCString() : "", options.path ? "; path=" + options.path : "", options.domain ? "; domain=" + options.domain : "", options.secure ? "; secure" : ""].join("")
            }
            for (var result = key ? void 0 : {}, cookies = document.cookie ? document.cookie.split("; ") : [], i = 0, l = cookies.length; l > i; i++) {
                var parts = cookies[i].split("="),
                    name = decode(parts.shift()),
                    cookie = parts.join("=");
                if (key && key === name) {
                    result = read(cookie, value);
                    break
                }
                key || void 0 === (cookie = read(cookie)) || (result[name] = cookie)
            }
            return result
        };
    config.defaults = {}, $.removeCookie = function(key, options) {
        return void 0 === $.cookie(key) ? !1 : ($.cookie(key, "", $.extend({}, options, {
            expires: -1
        })), !$.cookie(key))
    }
}),
function(factory) {
    "function" == typeof define && define.amd ? define(["jquery", "jquery-ui/widget", "jquery-ui/tabs"], factory) : factory(jQuery)
}(function($) {
    return $.widget("ui.tabs", $.ui.tabs, {
        options: {
            orientation: "horizontal"
        },
        _create: function() {
            this._super(), this._handleOrientation()
        },
        _handleOrientation: function() {
            this.element.toggleClass("ui-tabs-vertical", "vertical" === this.options.orientation)
        },
        _setOption: function(key) {
            this._superApply(arguments), "orientation" === key && this._handleOrientation()
        },
        _destroy: function() {
            this._super(), this.element.removeClass("ui-tabs-vertical")
        }
    })
}),
function() {
    var $, __indexOf = [].indexOf || function(item) {
            for (var i = 0, l = this.length; l > i; i++)
                if (i in this && this[i] === item) return i;
            return -1
        };
    $ = jQuery, $.fn.validateCreditCard = function(callback, options) {
        var bind, card, card_type, card_types, get_card_type, is_valid_length, is_valid_luhn, normalize, validate, validate_number, _i, _len, _ref;
        for (card_types = [{
            name: "amex",
            pattern: /^3[47]/,
            valid_length: [15]
        }, {
            name: "diners_club_carte_blanche",
            pattern: /^30[0-5]/,
            valid_length: [14]
        }, {
            name: "diners_club_international",
            pattern: /^36/,
            valid_length: [14]
        }, {
            name: "jcb",
            pattern: /^35(2[89]|[3-8][0-9])/,
            valid_length: [16]
        }, {
            name: "laser",
            pattern: /^(6304|670[69]|6771)/,
            valid_length: [16, 17, 18, 19]
        }, {
            name: "visa_electron",
            pattern: /^(4026|417500|4508|4844|491(3|7))/,
            valid_length: [16]
        }, {
            name: "visa",
            pattern: /^4/,
            valid_length: [16]
        }, {
            name: "mastercard",
            pattern: /^5[1-5]/,
            valid_length: [16]
        }, {
            name: "maestro",
            pattern: /^(5018|5020|5038|6304|6759|676[1-3])/,
            valid_length: [12, 13, 14, 15, 16, 17, 18, 19]
        }, {
            name: "discover",
            pattern: /^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)/,
            valid_length: [16]
        }], bind = !1, callback && ("object" == typeof callback ? (options = callback, bind = !1, callback = null) : "function" == typeof callback && (bind = !0)), null == options && (options = {}), null == options.accept && (options.accept = function() {
            var _i, _len, _results;
            for (_results = [], _i = 0, _len = card_types.length; _len > _i; _i++) card = card_types[_i], _results.push(card.name);
            return _results
        }()), _ref = options.accept, _i = 0, _len = _ref.length; _len > _i; _i++)
            if (card_type = _ref[_i], __indexOf.call(function() {
                var _j, _len1, _results;
                for (_results = [], _j = 0, _len1 = card_types.length; _len1 > _j; _j++) card = card_types[_j], _results.push(card.name);
                return _results
            }(), card_type) < 0) throw "Credit card type '" + card_type + "' is not supported";
        return get_card_type = function(number) {
            var _j, _len1, _ref1;
            for (_ref1 = function() {
                var _k, _len1, _ref1, _results;
                for (_results = [], _k = 0, _len1 = card_types.length; _len1 > _k; _k++) card = card_types[_k], _ref1 = card.name, __indexOf.call(options.accept, _ref1) >= 0 && _results.push(card);
                return _results
            }(), _j = 0, _len1 = _ref1.length; _len1 > _j; _j++)
                if (card_type = _ref1[_j], number.match(card_type.pattern)) return card_type;
            return null
        }, is_valid_luhn = function(number) {
            var digit, n, sum, _j, _len1, _ref1;
            for (sum = 0, _ref1 = number.split("").reverse(), n = _j = 0, _len1 = _ref1.length; _len1 > _j; n = ++_j) digit = _ref1[n], digit = +digit, n % 2 ? (digit *= 2, sum += 10 > digit ? digit : digit - 9) : sum += digit;
            return sum % 10 === 0
        }, is_valid_length = function(number, card_type) {
            var _ref1;
            return _ref1 = number.length, __indexOf.call(card_type.valid_length, _ref1) >= 0
        }, validate_number = function() {
            return function(number) {
                var length_valid, luhn_valid;
                return card_type = get_card_type(number), luhn_valid = !1, length_valid = !1, null != card_type && (luhn_valid = is_valid_luhn(number), length_valid = is_valid_length(number, card_type)), {
                    card_type: card_type,
                    valid: luhn_valid && length_valid,
                    luhn_valid: luhn_valid,
                    length_valid: length_valid
                }
            }
        }(this), validate = function(_this) {
            return function() {
                var number;
                return number = normalize($(_this).val()), validate_number(number)
            }
        }(this), normalize = function(number) {
            return number.replace(/[ -]/g, "")
        }, bind ? (this.on("input.jccv", function(_this) {
            return function() {
                return $(_this).off("keyup.jccv"), callback.call(_this, validate())
            }
        }(this)), this.on("keyup.jccv", function(_this) {
            return function() {
                return callback.call(_this, validate())
            }
        }(this)), callback.call(this, validate()), this) : validate()
    }
}.call(this),
function(global, factory) {
    "object" == typeof exports && "undefined" != typeof module ? module.exports = factory() : "function" == typeof define && define.amd ? define(factory) : global.moment = factory()
}(this, function() {
    "use strict";

    function utils_hooks__hooks() {
        return hookCallback.apply(null, arguments)
    }

    function setHookCallback(callback) {
        hookCallback = callback
    }

    function isArray(input) {
        return "[object Array]" === Object.prototype.toString.call(input)
    }

    function isDate(input) {
        return input instanceof Date || "[object Date]" === Object.prototype.toString.call(input)
    }

    function map(arr, fn) {
        var i, res = [];
        for (i = 0; i < arr.length; ++i) res.push(fn(arr[i], i));
        return res
    }

    function hasOwnProp(a, b) {
        return Object.prototype.hasOwnProperty.call(a, b)
    }

    function extend(a, b) {
        for (var i in b) hasOwnProp(b, i) && (a[i] = b[i]);
        return hasOwnProp(b, "toString") && (a.toString = b.toString), hasOwnProp(b, "valueOf") && (a.valueOf = b.valueOf), a
    }

    function create_utc__createUTC(input, format, locale, strict) {
        return createLocalOrUTC(input, format, locale, strict, !0).utc()
    }

    function defaultParsingFlags() {
        return {
            empty: !1,
            unusedTokens: [],
            unusedInput: [],
            overflow: -2,
            charsLeftOver: 0,
            nullInput: !1,
            invalidMonth: null,
            invalidFormat: !1,
            userInvalidated: !1,
            iso: !1
        }
    }

    function getParsingFlags(m) {
        return null == m._pf && (m._pf = defaultParsingFlags()), m._pf
    }

    function valid__isValid(m) {
        if (null == m._isValid) {
            var flags = getParsingFlags(m);
            m._isValid = !isNaN(m._d.getTime()) && flags.overflow < 0 && !flags.empty && !flags.invalidMonth && !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated, m._strict && (m._isValid = m._isValid && 0 === flags.charsLeftOver && 0 === flags.unusedTokens.length && void 0 === flags.bigHour)
        }
        return m._isValid
    }

    function valid__createInvalid(flags) {
        var m = create_utc__createUTC(0 / 0);
        return null != flags ? extend(getParsingFlags(m), flags) : getParsingFlags(m).userInvalidated = !0, m
    }

    function copyConfig(to, from) {
        var i, prop, val;
        if ("undefined" != typeof from._isAMomentObject && (to._isAMomentObject = from._isAMomentObject), "undefined" != typeof from._i && (to._i = from._i), "undefined" != typeof from._f && (to._f = from._f), "undefined" != typeof from._l && (to._l = from._l), "undefined" != typeof from._strict && (to._strict = from._strict), "undefined" != typeof from._tzm && (to._tzm = from._tzm), "undefined" != typeof from._isUTC && (to._isUTC = from._isUTC), "undefined" != typeof from._offset && (to._offset = from._offset), "undefined" != typeof from._pf && (to._pf = getParsingFlags(from)), "undefined" != typeof from._locale && (to._locale = from._locale), momentProperties.length > 0)
            for (i in momentProperties) prop = momentProperties[i], val = from[prop], "undefined" != typeof val && (to[prop] = val);
        return to
    }

    function Moment(config) {
        copyConfig(this, config), this._d = new Date(+config._d), updateInProgress === !1 && (updateInProgress = !0, utils_hooks__hooks.updateOffset(this), updateInProgress = !1)
    }

    function isMoment(obj) {
        return obj instanceof Moment || null != obj && null != obj._isAMomentObject
    }

    function toInt(argumentForCoercion) {
        var coercedNumber = +argumentForCoercion,
            value = 0;
        return 0 !== coercedNumber && isFinite(coercedNumber) && (value = coercedNumber >= 0 ? Math.floor(coercedNumber) : Math.ceil(coercedNumber)), value
    }

    function compareArrays(array1, array2, dontConvert) {
        var i, len = Math.min(array1.length, array2.length),
            lengthDiff = Math.abs(array1.length - array2.length),
            diffs = 0;
        for (i = 0; len > i; i++)(dontConvert && array1[i] !== array2[i] || !dontConvert && toInt(array1[i]) !== toInt(array2[i])) && diffs++;
        return diffs + lengthDiff
    }

    function Locale() {}

    function normalizeLocale(key) {
        return key ? key.toLowerCase().replace("_", "-") : key
    }

    function chooseLocale(names) {
        for (var j, next, locale, split, i = 0; i < names.length;) {
            for (split = normalizeLocale(names[i]).split("-"), j = split.length, next = normalizeLocale(names[i + 1]), next = next ? next.split("-") : null; j > 0;) {
                if (locale = loadLocale(split.slice(0, j).join("-"))) return locale;
                if (next && next.length >= j && compareArrays(split, next, !0) >= j - 1) break;
                j--
            }
            i++
        }
        return null
    }

    function loadLocale(name) {
        var oldLocale = null;
        if (!locales[name] && "undefined" != typeof module && module && module.exports) try {
            oldLocale = globalLocale._abbr, require("./locale/" + name), locale_locales__getSetGlobalLocale(oldLocale)
        } catch (e) {}
        return locales[name]
    }

    function locale_locales__getSetGlobalLocale(key, values) {
        var data;
        return key && (data = "undefined" == typeof values ? locale_locales__getLocale(key) : defineLocale(key, values), data && (globalLocale = data)), globalLocale._abbr
    }

    function defineLocale(name, values) {
        return null !== values ? (values.abbr = name, locales[name] || (locales[name] = new Locale), locales[name].set(values), locale_locales__getSetGlobalLocale(name), locales[name]) : (delete locales[name], null)
    }

    function locale_locales__getLocale(key) {
        var locale;
        if (key && key._locale && key._locale._abbr && (key = key._locale._abbr), !key) return globalLocale;
        if (!isArray(key)) {
            if (locale = loadLocale(key)) return locale;
            key = [key]
        }
        return chooseLocale(key)
    }

    function addUnitAlias(unit, shorthand) {
        var lowerCase = unit.toLowerCase();
        aliases[lowerCase] = aliases[lowerCase + "s"] = aliases[shorthand] = unit
    }

    function normalizeUnits(units) {
        return "string" == typeof units ? aliases[units] || aliases[units.toLowerCase()] : void 0
    }

    function normalizeObjectUnits(inputObject) {
        var normalizedProp, prop, normalizedInput = {};
        for (prop in inputObject) hasOwnProp(inputObject, prop) && (normalizedProp = normalizeUnits(prop), normalizedProp && (normalizedInput[normalizedProp] = inputObject[prop]));
        return normalizedInput
    }

    function makeGetSet(unit, keepTime) {
        return function(value) {
            return null != value ? (get_set__set(this, unit, value), utils_hooks__hooks.updateOffset(this, keepTime), this) : get_set__get(this, unit)
        }
    }

    function get_set__get(mom, unit) {
        return mom._d["get" + (mom._isUTC ? "UTC" : "") + unit]()
    }

    function get_set__set(mom, unit, value) {
        return mom._d["set" + (mom._isUTC ? "UTC" : "") + unit](value)
    }

    function getSet(units, value) {
        var unit;
        if ("object" == typeof units)
            for (unit in units) this.set(unit, units[unit]);
        else if (units = normalizeUnits(units), "function" == typeof this[units]) return this[units](value);
        return this
    }

    function zeroFill(number, targetLength, forceSign) {
        for (var output = "" + Math.abs(number), sign = number >= 0; output.length < targetLength;) output = "0" + output;
        return (sign ? forceSign ? "+" : "" : "-") + output
    }

    function addFormatToken(token, padded, ordinal, callback) {
        var func = callback;
        "string" == typeof callback && (func = function() {
            return this[callback]()
        }), token && (formatTokenFunctions[token] = func), padded && (formatTokenFunctions[padded[0]] = function() {
            return zeroFill(func.apply(this, arguments), padded[1], padded[2])
        }), ordinal && (formatTokenFunctions[ordinal] = function() {
            return this.localeData().ordinal(func.apply(this, arguments), token)
        })
    }

    function removeFormattingTokens(input) {
        return input.match(/\[[\s\S]/) ? input.replace(/^\[|\]$/g, "") : input.replace(/\\/g, "")
    }

    function makeFormatFunction(format) {
        var i, length, array = format.match(formattingTokens);
        for (i = 0, length = array.length; length > i; i++) array[i] = formatTokenFunctions[array[i]] ? formatTokenFunctions[array[i]] : removeFormattingTokens(array[i]);
        return function(mom) {
            var output = "";
            for (i = 0; length > i; i++) output += array[i] instanceof Function ? array[i].call(mom, format) : array[i];
            return output
        }
    }

    function formatMoment(m, format) {
        return m.isValid() ? (format = expandFormat(format, m.localeData()), formatFunctions[format] || (formatFunctions[format] = makeFormatFunction(format)), formatFunctions[format](m)) : m.localeData().invalidDate()
    }

    function expandFormat(format, locale) {
        function replaceLongDateFormatTokens(input) {
            return locale.longDateFormat(input) || input
        }
        var i = 5;
        for (localFormattingTokens.lastIndex = 0; i >= 0 && localFormattingTokens.test(format);) format = format.replace(localFormattingTokens, replaceLongDateFormatTokens), localFormattingTokens.lastIndex = 0, i -= 1;
        return format
    }

    function addRegexToken(token, regex, strictRegex) {
        regexes[token] = "function" == typeof regex ? regex : function(isStrict) {
            return isStrict && strictRegex ? strictRegex : regex
        }
    }

    function getParseRegexForToken(token, config) {
        return hasOwnProp(regexes, token) ? regexes[token](config._strict, config._locale) : new RegExp(unescapeFormat(token))
    }

    function unescapeFormat(s) {
        return s.replace("\\", "").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function(matched, p1, p2, p3, p4) {
            return p1 || p2 || p3 || p4
        }).replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&")
    }

    function addParseToken(token, callback) {
        var i, func = callback;
        for ("string" == typeof token && (token = [token]), "number" == typeof callback && (func = function(input, array) {
            array[callback] = toInt(input)
        }), i = 0; i < token.length; i++) tokens[token[i]] = func
    }

    function addWeekParseToken(token, callback) {
        addParseToken(token, function(input, array, config, token) {
            config._w = config._w || {}, callback(input, config._w, config, token)
        })
    }

    function addTimeToArrayFromToken(token, input, config) {
        null != input && hasOwnProp(tokens, token) && tokens[token](input, config._a, config, token)
    }

    function daysInMonth(year, month) {
        return new Date(Date.UTC(year, month + 1, 0)).getUTCDate()
    }

    function localeMonths(m) {
        return this._months[m.month()]
    }

    function localeMonthsShort(m) {
        return this._monthsShort[m.month()]
    }

    function localeMonthsParse(monthName, format, strict) {
        var i, mom, regex;
        for (this._monthsParse || (this._monthsParse = [], this._longMonthsParse = [], this._shortMonthsParse = []), i = 0; 12 > i; i++) {
            if (mom = create_utc__createUTC([2e3, i]), strict && !this._longMonthsParse[i] && (this._longMonthsParse[i] = new RegExp("^" + this.months(mom, "").replace(".", "") + "$", "i"), this._shortMonthsParse[i] = new RegExp("^" + this.monthsShort(mom, "").replace(".", "") + "$", "i")), strict || this._monthsParse[i] || (regex = "^" + this.months(mom, "") + "|^" + this.monthsShort(mom, ""), this._monthsParse[i] = new RegExp(regex.replace(".", ""), "i")), strict && "MMMM" === format && this._longMonthsParse[i].test(monthName)) return i;
            if (strict && "MMM" === format && this._shortMonthsParse[i].test(monthName)) return i;
            if (!strict && this._monthsParse[i].test(monthName)) return i
        }
    }

    function setMonth(mom, value) {
        var dayOfMonth;
        return "string" == typeof value && (value = mom.localeData().monthsParse(value), "number" != typeof value) ? mom : (dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)), mom._d["set" + (mom._isUTC ? "UTC" : "") + "Month"](value, dayOfMonth), mom)
    }

    function getSetMonth(value) {
        return null != value ? (setMonth(this, value), utils_hooks__hooks.updateOffset(this, !0), this) : get_set__get(this, "Month")
    }

    function getDaysInMonth() {
        return daysInMonth(this.year(), this.month())
    }

    function checkOverflow(m) {
        var overflow, a = m._a;
        return a && -2 === getParsingFlags(m).overflow && (overflow = a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : a[HOUR] < 0 || a[HOUR] > 24 || 24 === a[HOUR] && (0 !== a[MINUTE] || 0 !== a[SECOND] || 0 !== a[MILLISECOND]) ? HOUR : a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : -1, getParsingFlags(m)._overflowDayOfYear && (YEAR > overflow || overflow > DATE) && (overflow = DATE), getParsingFlags(m).overflow = overflow), m
    }

    function warn(msg) {
        utils_hooks__hooks.suppressDeprecationWarnings === !1 && "undefined" != typeof console && console.warn && console.warn("Deprecation warning: " + msg)
    }

    function deprecate(msg, fn) {
        var firstTime = !0,
            msgWithStack = msg + "\n" + (new Error).stack;
        return extend(function() {
            return firstTime && (warn(msgWithStack), firstTime = !1), fn.apply(this, arguments)
        }, fn)
    }

    function deprecateSimple(name, msg) {
        deprecations[name] || (warn(msg), deprecations[name] = !0)
    }

    function configFromISO(config) {
        var i, l, string = config._i,
            match = from_string__isoRegex.exec(string);
        if (match) {
            for (getParsingFlags(config).iso = !0, i = 0, l = isoDates.length; l > i; i++)
                if (isoDates[i][1].exec(string)) {
                    config._f = isoDates[i][0] + (match[6] || " ");
                    break
                }
            for (i = 0, l = isoTimes.length; l > i; i++)
                if (isoTimes[i][1].exec(string)) {
                    config._f += isoTimes[i][0];
                    break
                }
            string.match(matchOffset) && (config._f += "Z"), configFromStringAndFormat(config)
        } else config._isValid = !1
    }

    function configFromString(config) {
        var matched = aspNetJsonRegex.exec(config._i);
        return null !== matched ? void(config._d = new Date(+matched[1])) : (configFromISO(config), void(config._isValid === !1 && (delete config._isValid, utils_hooks__hooks.createFromInputFallback(config))))
    }

    function createDate(y, m, d, h, M, s, ms) {
        var date = new Date(y, m, d, h, M, s, ms);
        return 1970 > y && date.setFullYear(y), date
    }

    function createUTCDate(y) {
        var date = new Date(Date.UTC.apply(null, arguments));
        return 1970 > y && date.setUTCFullYear(y), date
    }

    function daysInYear(year) {
        return isLeapYear(year) ? 366 : 365
    }

    function isLeapYear(year) {
        return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0
    }

    function getIsLeapYear() {
        return isLeapYear(this.year())
    }

    function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) {
        var adjustedMoment, end = firstDayOfWeekOfYear - firstDayOfWeek,
            daysToDayOfWeek = firstDayOfWeekOfYear - mom.day();
        return daysToDayOfWeek > end && (daysToDayOfWeek -= 7), end - 7 > daysToDayOfWeek && (daysToDayOfWeek += 7), adjustedMoment = local__createLocal(mom).add(daysToDayOfWeek, "d"), {
            week: Math.ceil(adjustedMoment.dayOfYear() / 7),
            year: adjustedMoment.year()
        }
    }

    function localeWeek(mom) {
        return weekOfYear(mom, this._week.dow, this._week.doy).week
    }

    function localeFirstDayOfWeek() {
        return this._week.dow
    }

    function localeFirstDayOfYear() {
        return this._week.doy
    }

    function getSetWeek(input) {
        var week = this.localeData().week(this);
        return null == input ? week : this.add(7 * (input - week), "d")
    }

    function getSetISOWeek(input) {
        var week = weekOfYear(this, 1, 4).week;
        return null == input ? week : this.add(7 * (input - week), "d")
    }

    function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) {
        var daysToAdd, dayOfYear, d = createUTCDate(year, 0, 1).getUTCDay();
        return d = 0 === d ? 7 : d, weekday = null != weekday ? weekday : firstDayOfWeek, daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (firstDayOfWeek > d ? 7 : 0), dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1, {
            year: dayOfYear > 0 ? year : year - 1,
            dayOfYear: dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear
        }
    }

    function getSetDayOfYear(input) {
        var dayOfYear = Math.round((this.clone().startOf("day") - this.clone().startOf("year")) / 864e5) + 1;
        return null == input ? dayOfYear : this.add(input - dayOfYear, "d")
    }

    function defaults(a, b, c) {
        return null != a ? a : null != b ? b : c
    }

    function currentDateArray(config) {
        var now = new Date;
        return config._useUTC ? [now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()] : [now.getFullYear(), now.getMonth(), now.getDate()]
    }

    function configFromArray(config) {
        var i, date, currentDate, yearToUse, input = [];
        if (!config._d) {
            for (currentDate = currentDateArray(config), config._w && null == config._a[DATE] && null == config._a[MONTH] && dayOfYearFromWeekInfo(config), config._dayOfYear && (yearToUse = defaults(config._a[YEAR], currentDate[YEAR]), config._dayOfYear > daysInYear(yearToUse) && (getParsingFlags(config)._overflowDayOfYear = !0), date = createUTCDate(yearToUse, 0, config._dayOfYear), config._a[MONTH] = date.getUTCMonth(), config._a[DATE] = date.getUTCDate()), i = 0; 3 > i && null == config._a[i]; ++i) config._a[i] = input[i] = currentDate[i];
            for (; 7 > i; i++) config._a[i] = input[i] = null == config._a[i] ? 2 === i ? 1 : 0 : config._a[i];
            24 === config._a[HOUR] && 0 === config._a[MINUTE] && 0 === config._a[SECOND] && 0 === config._a[MILLISECOND] && (config._nextDay = !0, config._a[HOUR] = 0), config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input), null != config._tzm && config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm), config._nextDay && (config._a[HOUR] = 24)
        }
    }

    function dayOfYearFromWeekInfo(config) {
        var w, weekYear, week, weekday, dow, doy, temp;
        w = config._w, null != w.GG || null != w.W || null != w.E ? (dow = 1, doy = 4, weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(local__createLocal(), 1, 4).year), week = defaults(w.W, 1), weekday = defaults(w.E, 1)) : (dow = config._locale._week.dow, doy = config._locale._week.doy, weekYear = defaults(w.gg, config._a[YEAR], weekOfYear(local__createLocal(), dow, doy).year), week = defaults(w.w, 1), null != w.d ? (weekday = w.d, dow > weekday && ++week) : weekday = null != w.e ? w.e + dow : dow), temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow), config._a[YEAR] = temp.year, config._dayOfYear = temp.dayOfYear
    }

    function configFromStringAndFormat(config) {
        if (config._f === utils_hooks__hooks.ISO_8601) return void configFromISO(config);
        config._a = [], getParsingFlags(config).empty = !0;
        var i, parsedInput, tokens, token, skipped, string = "" + config._i,
            stringLength = string.length,
            totalParsedInputLength = 0;
        for (tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [], i = 0; i < tokens.length; i++) token = tokens[i], parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0], parsedInput && (skipped = string.substr(0, string.indexOf(parsedInput)), skipped.length > 0 && getParsingFlags(config).unusedInput.push(skipped), string = string.slice(string.indexOf(parsedInput) + parsedInput.length), totalParsedInputLength += parsedInput.length), formatTokenFunctions[token] ? (parsedInput ? getParsingFlags(config).empty = !1 : getParsingFlags(config).unusedTokens.push(token), addTimeToArrayFromToken(token, parsedInput, config)) : config._strict && !parsedInput && getParsingFlags(config).unusedTokens.push(token);
        getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength, string.length > 0 && getParsingFlags(config).unusedInput.push(string), getParsingFlags(config).bigHour === !0 && config._a[HOUR] <= 12 && config._a[HOUR] > 0 && (getParsingFlags(config).bigHour = void 0), config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem), configFromArray(config), checkOverflow(config)
    }

    function meridiemFixWrap(locale, hour, meridiem) {
        var isPm;
        return null == meridiem ? hour : null != locale.meridiemHour ? locale.meridiemHour(hour, meridiem) : null != locale.isPM ? (isPm = locale.isPM(meridiem), isPm && 12 > hour && (hour += 12), isPm || 12 !== hour || (hour = 0), hour) : hour
    }

    function configFromStringAndArray(config) {
        var tempConfig, bestMoment, scoreToBeat, i, currentScore;
        if (0 === config._f.length) return getParsingFlags(config).invalidFormat = !0, void(config._d = new Date(0 / 0));
        for (i = 0; i < config._f.length; i++) currentScore = 0, tempConfig = copyConfig({}, config), null != config._useUTC && (tempConfig._useUTC = config._useUTC), tempConfig._f = config._f[i], configFromStringAndFormat(tempConfig), valid__isValid(tempConfig) && (currentScore += getParsingFlags(tempConfig).charsLeftOver, currentScore += 10 * getParsingFlags(tempConfig).unusedTokens.length, getParsingFlags(tempConfig).score = currentScore, (null == scoreToBeat || scoreToBeat > currentScore) && (scoreToBeat = currentScore, bestMoment = tempConfig));
        extend(config, bestMoment || tempConfig)
    }

    function configFromObject(config) {
        if (!config._d) {
            var i = normalizeObjectUnits(config._i);
            config._a = [i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], configFromArray(config)
        }
    }

    function createFromConfig(config) {
        var res, input = config._i,
            format = config._f;
        return config._locale = config._locale || locale_locales__getLocale(config._l), null === input || void 0 === format && "" === input ? valid__createInvalid({
            nullInput: !0
        }) : ("string" == typeof input && (config._i = input = config._locale.preparse(input)), isMoment(input) ? new Moment(checkOverflow(input)) : (isArray(format) ? configFromStringAndArray(config) : format ? configFromStringAndFormat(config) : isDate(input) ? config._d = input : configFromInput(config), res = new Moment(checkOverflow(config)), res._nextDay && (res.add(1, "d"), res._nextDay = void 0), res))
    }

    function configFromInput(config) {
        var input = config._i;
        void 0 === input ? config._d = new Date : isDate(input) ? config._d = new Date(+input) : "string" == typeof input ? configFromString(config) : isArray(input) ? (config._a = map(input.slice(0), function(obj) {
            return parseInt(obj, 10)
        }), configFromArray(config)) : "object" == typeof input ? configFromObject(config) : "number" == typeof input ? config._d = new Date(input) : utils_hooks__hooks.createFromInputFallback(config)
    }

    function createLocalOrUTC(input, format, locale, strict, isUTC) {
        var c = {};
        return "boolean" == typeof locale && (strict = locale, locale = void 0), c._isAMomentObject = !0, c._useUTC = c._isUTC = isUTC, c._l = locale, c._i = input, c._f = format, c._strict = strict, createFromConfig(c)
    }

    function local__createLocal(input, format, locale, strict) {
        return createLocalOrUTC(input, format, locale, strict, !1)
    }

    function pickBy(fn, moments) {
        var res, i;
        if (1 === moments.length && isArray(moments[0]) && (moments = moments[0]), !moments.length) return local__createLocal();
        for (res = moments[0], i = 1; i < moments.length; ++i) moments[i][fn](res) && (res = moments[i]);
        return res
    }

    function min() {
        var args = [].slice.call(arguments, 0);
        return pickBy("isBefore", args)
    }

    function max() {
        var args = [].slice.call(arguments, 0);
        return pickBy("isAfter", args)
    }

    function Duration(duration) {
        var normalizedInput = normalizeObjectUnits(duration),
            years = normalizedInput.year || 0,
            quarters = normalizedInput.quarter || 0,
            months = normalizedInput.month || 0,
            weeks = normalizedInput.week || 0,
            days = normalizedInput.day || 0,
            hours = normalizedInput.hour || 0,
            minutes = normalizedInput.minute || 0,
            seconds = normalizedInput.second || 0,
            milliseconds = normalizedInput.millisecond || 0;
        this._milliseconds = +milliseconds + 1e3 * seconds + 6e4 * minutes + 36e5 * hours, this._days = +days + 7 * weeks, this._months = +months + 3 * quarters + 12 * years, this._data = {}, this._locale = locale_locales__getLocale(), this._bubble()
    }

    function isDuration(obj) {
        return obj instanceof Duration
    }

    function offset(token, separator) {
        addFormatToken(token, 0, 0, function() {
            var offset = this.utcOffset(),
                sign = "+";
            return 0 > offset && (offset = -offset, sign = "-"), sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~offset % 60, 2)
        })
    }

    function offsetFromString(string) {
        var matches = (string || "").match(matchOffset) || [],
            chunk = matches[matches.length - 1] || [],
            parts = (chunk + "").match(chunkOffset) || ["-", 0, 0],
            minutes = +(60 * parts[1]) + toInt(parts[2]);
        return "+" === parts[0] ? minutes : -minutes
    }

    function cloneWithOffset(input, model) {
        var res, diff;
        return model._isUTC ? (res = model.clone(), diff = (isMoment(input) || isDate(input) ? +input : +local__createLocal(input)) - +res, res._d.setTime(+res._d + diff), utils_hooks__hooks.updateOffset(res, !1), res) : local__createLocal(input).local()
    }

    function getDateOffset(m) {
        return 15 * -Math.round(m._d.getTimezoneOffset() / 15)
    }

    function getSetOffset(input, keepLocalTime) {
        var localAdjust, offset = this._offset || 0;
        return null != input ? ("string" == typeof input && (input = offsetFromString(input)), Math.abs(input) < 16 && (input = 60 * input), !this._isUTC && keepLocalTime && (localAdjust = getDateOffset(this)), this._offset = input, this._isUTC = !0, null != localAdjust && this.add(localAdjust, "m"), offset !== input && (!keepLocalTime || this._changeInProgress ? add_subtract__addSubtract(this, create__createDuration(input - offset, "m"), 1, !1) : this._changeInProgress || (this._changeInProgress = !0, utils_hooks__hooks.updateOffset(this, !0), this._changeInProgress = null)), this) : this._isUTC ? offset : getDateOffset(this)
    }

    function getSetZone(input, keepLocalTime) {
        return null != input ? ("string" != typeof input && (input = -input), this.utcOffset(input, keepLocalTime), this) : -this.utcOffset()
    }

    function setOffsetToUTC(keepLocalTime) {
        return this.utcOffset(0, keepLocalTime)
    }

    function setOffsetToLocal(keepLocalTime) {
        return this._isUTC && (this.utcOffset(0, keepLocalTime), this._isUTC = !1, keepLocalTime && this.subtract(getDateOffset(this), "m")), this
    }

    function setOffsetToParsedOffset() {
        return this._tzm ? this.utcOffset(this._tzm) : "string" == typeof this._i && this.utcOffset(offsetFromString(this._i)), this
    }

    function hasAlignedHourOffset(input) {
        return input = input ? local__createLocal(input).utcOffset() : 0, (this.utcOffset() - input) % 60 === 0
    }

    function isDaylightSavingTime() {
        return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset()
    }

    function isDaylightSavingTimeShifted() {
        if (this._a) {
            var other = this._isUTC ? create_utc__createUTC(this._a) : local__createLocal(this._a);
            return this.isValid() && compareArrays(this._a, other.toArray()) > 0
        }
        return !1
    }

    function isLocal() {
        return !this._isUTC
    }

    function isUtcOffset() {
        return this._isUTC
    }

    function isUtc() {
        return this._isUTC && 0 === this._offset
    }

    function create__createDuration(input, key) {
        var sign, ret, diffRes, duration = input,
            match = null;
        return isDuration(input) ? duration = {
            ms: input._milliseconds,
            d: input._days,
            M: input._months
        } : "number" == typeof input ? (duration = {}, key ? duration[key] = input : duration.milliseconds = input) : (match = aspNetRegex.exec(input)) ? (sign = "-" === match[1] ? -1 : 1, duration = {
            y: 0,
            d: toInt(match[DATE]) * sign,
            h: toInt(match[HOUR]) * sign,
            m: toInt(match[MINUTE]) * sign,
            s: toInt(match[SECOND]) * sign,
            ms: toInt(match[MILLISECOND]) * sign
        }) : (match = create__isoRegex.exec(input)) ? (sign = "-" === match[1] ? -1 : 1, duration = {
            y: parseIso(match[2], sign),
            M: parseIso(match[3], sign),
            d: parseIso(match[4], sign),
            h: parseIso(match[5], sign),
            m: parseIso(match[6], sign),
            s: parseIso(match[7], sign),
            w: parseIso(match[8], sign)
        }) : null == duration ? duration = {} : "object" == typeof duration && ("from" in duration || "to" in duration) && (diffRes = momentsDifference(local__createLocal(duration.from), local__createLocal(duration.to)), duration = {}, duration.ms = diffRes.milliseconds, duration.M = diffRes.months), ret = new Duration(duration), isDuration(input) && hasOwnProp(input, "_locale") && (ret._locale = input._locale), ret
    }

    function parseIso(inp, sign) {
        var res = inp && parseFloat(inp.replace(",", "."));
        return (isNaN(res) ? 0 : res) * sign
    }

    function positiveMomentsDifference(base, other) {
        var res = {
            milliseconds: 0,
            months: 0
        };
        return res.months = other.month() - base.month() + 12 * (other.year() - base.year()), base.clone().add(res.months, "M").isAfter(other) && --res.months, res.milliseconds = +other - +base.clone().add(res.months, "M"), res
    }

    function momentsDifference(base, other) {
        var res;
        return other = cloneWithOffset(other, base), base.isBefore(other) ? res = positiveMomentsDifference(base, other) : (res = positiveMomentsDifference(other, base), res.milliseconds = -res.milliseconds, res.months = -res.months), res
    }

    function createAdder(direction, name) {
        return function(val, period) {
            var dur, tmp;
            return null === period || isNaN(+period) || (deprecateSimple(name, "moment()." + name + "(period, number) is deprecated. Please use moment()." + name + "(number, period)."), tmp = val, val = period, period = tmp), val = "string" == typeof val ? +val : val, dur = create__createDuration(val, period), add_subtract__addSubtract(this, dur, direction), this
        }
    }

    function add_subtract__addSubtract(mom, duration, isAdding, updateOffset) {
        var milliseconds = duration._milliseconds,
            days = duration._days,
            months = duration._months;
        updateOffset = null == updateOffset ? !0 : updateOffset, milliseconds && mom._d.setTime(+mom._d + milliseconds * isAdding), days && get_set__set(mom, "Date", get_set__get(mom, "Date") + days * isAdding), months && setMonth(mom, get_set__get(mom, "Month") + months * isAdding), updateOffset && utils_hooks__hooks.updateOffset(mom, days || months)
    }

    function moment_calendar__calendar(time) {
        var now = time || local__createLocal(),
            sod = cloneWithOffset(now, this).startOf("day"),
            diff = this.diff(sod, "days", !0),
            format = -6 > diff ? "sameElse" : -1 > diff ? "lastWeek" : 0 > diff ? "lastDay" : 1 > diff ? "sameDay" : 2 > diff ? "nextDay" : 7 > diff ? "nextWeek" : "sameElse";
        return this.format(this.localeData().calendar(format, this, local__createLocal(now)))
    }

    function clone() {
        return new Moment(this)
    }

    function isAfter(input, units) {
        var inputMs;
        return units = normalizeUnits("undefined" != typeof units ? units : "millisecond"), "millisecond" === units ? (input = isMoment(input) ? input : local__createLocal(input), +this > +input) : (inputMs = isMoment(input) ? +input : +local__createLocal(input), inputMs < +this.clone().startOf(units))
    }

    function isBefore(input, units) {
        var inputMs;
        return units = normalizeUnits("undefined" != typeof units ? units : "millisecond"), "millisecond" === units ? (input = isMoment(input) ? input : local__createLocal(input), +input > +this) : (inputMs = isMoment(input) ? +input : +local__createLocal(input), +this.clone().endOf(units) < inputMs)
    }

    function isBetween(from, to, units) {
        return this.isAfter(from, units) && this.isBefore(to, units)
    }

    function isSame(input, units) {
        var inputMs;
        return units = normalizeUnits(units || "millisecond"), "millisecond" === units ? (input = isMoment(input) ? input : local__createLocal(input), +this === +input) : (inputMs = +local__createLocal(input), +this.clone().startOf(units) <= inputMs && inputMs <= +this.clone().endOf(units))
    }

    function absFloor(number) {
        return 0 > number ? Math.ceil(number) : Math.floor(number)
    }

    function diff(input, units, asFloat) {
        var delta, output, that = cloneWithOffset(input, this),
            zoneDelta = 6e4 * (that.utcOffset() - this.utcOffset());
        return units = normalizeUnits(units), "year" === units || "month" === units || "quarter" === units ? (output = monthDiff(this, that), "quarter" === units ? output /= 3 : "year" === units && (output /= 12)) : (delta = this - that, output = "second" === units ? delta / 1e3 : "minute" === units ? delta / 6e4 : "hour" === units ? delta / 36e5 : "day" === units ? (delta - zoneDelta) / 864e5 : "week" === units ? (delta - zoneDelta) / 6048e5 : delta), asFloat ? output : absFloor(output)
    }

    function monthDiff(a, b) {
        var anchor2, adjust, wholeMonthDiff = 12 * (b.year() - a.year()) + (b.month() - a.month()),
            anchor = a.clone().add(wholeMonthDiff, "months");
        return 0 > b - anchor ? (anchor2 = a.clone().add(wholeMonthDiff - 1, "months"), adjust = (b - anchor) / (anchor - anchor2)) : (anchor2 = a.clone().add(wholeMonthDiff + 1, "months"), adjust = (b - anchor) / (anchor2 - anchor)), -(wholeMonthDiff + adjust)
    }

    function toString() {
        return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")
    }

    function moment_format__toISOString() {
        var m = this.clone().utc();
        return 0 < m.year() && m.year() <= 9999 ? "function" == typeof Date.prototype.toISOString ? this.toDate().toISOString() : formatMoment(m, "YYYY-MM-DD[T]HH:mm:ss.SSS[Z]") : formatMoment(m, "YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]")
    }

    function format(inputString) {
        var output = formatMoment(this, inputString || utils_hooks__hooks.defaultFormat);
        return this.localeData().postformat(output)
    }

    function from(time, withoutSuffix) {
        return this.isValid() ? create__createDuration({
            to: this,
            from: time
        }).locale(this.locale()).humanize(!withoutSuffix) : this.localeData().invalidDate()
    }

    function fromNow(withoutSuffix) {
        return this.from(local__createLocal(), withoutSuffix)
    }

    function to(time, withoutSuffix) {
        return this.isValid() ? create__createDuration({
            from: this,
            to: time
        }).locale(this.locale()).humanize(!withoutSuffix) : this.localeData().invalidDate()
    }

    function toNow(withoutSuffix) {
        return this.to(local__createLocal(), withoutSuffix)
    }

    function locale(key) {
        var newLocaleData;
        return void 0 === key ? this._locale._abbr : (newLocaleData = locale_locales__getLocale(key), null != newLocaleData && (this._locale = newLocaleData), this)
    }

    function localeData() {
        return this._locale
    }

    function startOf(units) {
        switch (units = normalizeUnits(units)) {
            case "year":
                this.month(0);
            case "quarter":
            case "month":
                this.date(1);
            case "week":
            case "isoWeek":
            case "day":
                this.hours(0);
            case "hour":
                this.minutes(0);
            case "minute":
                this.seconds(0);
            case "second":
                this.milliseconds(0)
        }
        return "week" === units && this.weekday(0), "isoWeek" === units && this.isoWeekday(1), "quarter" === units && this.month(3 * Math.floor(this.month() / 3)), this
    }

    function endOf(units) {
        return units = normalizeUnits(units), void 0 === units || "millisecond" === units ? this : this.startOf(units).add(1, "isoWeek" === units ? "week" : units).subtract(1, "ms")
    }

    function to_type__valueOf() {
        return +this._d - 6e4 * (this._offset || 0)
    }

    function unix() {
        return Math.floor(+this / 1e3)
    }

    function toDate() {
        return this._offset ? new Date(+this) : this._d
    }

    function toArray() {
        var m = this;
        return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()]
    }

    function moment_valid__isValid() {
        return valid__isValid(this)
    }

    function parsingFlags() {
        return extend({}, getParsingFlags(this))
    }

    function invalidAt() {
        return getParsingFlags(this).overflow
    }

    function addWeekYearFormatToken(token, getter) {
        addFormatToken(0, [token, token.length], 0, getter)
    }

    function weeksInYear(year, dow, doy) {
        return weekOfYear(local__createLocal([year, 11, 31 + dow - doy]), dow, doy).week
    }

    function getSetWeekYear(input) {
        var year = weekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year;
        return null == input ? year : this.add(input - year, "y")
    }

    function getSetISOWeekYear(input) {
        var year = weekOfYear(this, 1, 4).year;
        return null == input ? year : this.add(input - year, "y")
    }

    function getISOWeeksInYear() {
        return weeksInYear(this.year(), 1, 4)
    }

    function getWeeksInYear() {
        var weekInfo = this.localeData()._week;
        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy)
    }

    function getSetQuarter(input) {
        return null == input ? Math.ceil((this.month() + 1) / 3) : this.month(3 * (input - 1) + this.month() % 3)
    }

    function parseWeekday(input, locale) {
        if ("string" == typeof input)
            if (isNaN(input)) {
                if (input = locale.weekdaysParse(input), "number" != typeof input) return null
            } else input = parseInt(input, 10);
        return input
    }

    function localeWeekdays(m) {
        return this._weekdays[m.day()]
    }

    function localeWeekdaysShort(m) {
        return this._weekdaysShort[m.day()]
    }

    function localeWeekdaysMin(m) {
        return this._weekdaysMin[m.day()]
    }

    function localeWeekdaysParse(weekdayName) {
        var i, mom, regex;
        for (this._weekdaysParse || (this._weekdaysParse = []), i = 0; 7 > i; i++)
            if (this._weekdaysParse[i] || (mom = local__createLocal([2e3, 1]).day(i), regex = "^" + this.weekdays(mom, "") + "|^" + this.weekdaysShort(mom, "") + "|^" + this.weekdaysMin(mom, ""), this._weekdaysParse[i] = new RegExp(regex.replace(".", ""), "i")), this._weekdaysParse[i].test(weekdayName)) return i
    }

    function getSetDayOfWeek(input) {
        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
        return null != input ? (input = parseWeekday(input, this.localeData()), this.add(input - day, "d")) : day
    }

    function getSetLocaleDayOfWeek(input) {
        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
        return null == input ? weekday : this.add(input - weekday, "d")
    }

    function getSetISODayOfWeek(input) {
        return null == input ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7)
    }

    function meridiem(token, lowercase) {
        addFormatToken(token, 0, 0, function() {
            return this.localeData().meridiem(this.hours(), this.minutes(), lowercase)
        })
    }

    function matchMeridiem(isStrict, locale) {
        return locale._meridiemParse
    }

    function localeIsPM(input) {
        return "p" === (input + "").toLowerCase().charAt(0)
    }

    function localeMeridiem(hours, minutes, isLower) {
        return hours > 11 ? isLower ? "pm" : "PM" : isLower ? "am" : "AM"
    }

    function millisecond__milliseconds(token) {
        addFormatToken(0, [token, 3], 0, "millisecond")
    }

    function getZoneAbbr() {
        return this._isUTC ? "UTC" : ""
    }

    function getZoneName() {
        return this._isUTC ? "Coordinated Universal Time" : ""
    }

    function moment__createUnix(input) {
        return local__createLocal(1e3 * input)
    }

    function moment__createInZone() {
        return local__createLocal.apply(null, arguments).parseZone()
    }

    function locale_calendar__calendar(key, mom, now) {
        var output = this._calendar[key];
        return "function" == typeof output ? output.call(mom, now) : output
    }

    function longDateFormat(key) {
        var output = this._longDateFormat[key];
        return !output && this._longDateFormat[key.toUpperCase()] && (output = this._longDateFormat[key.toUpperCase()].replace(/MMMM|MM|DD|dddd/g, function(val) {
            return val.slice(1)
        }), this._longDateFormat[key] = output), output
    }

    function invalidDate() {
        return this._invalidDate
    }

    function ordinal(number) {
        return this._ordinal.replace("%d", number)
    }

    function preParsePostFormat(string) {
        return string
    }

    function relative__relativeTime(number, withoutSuffix, string, isFuture) {
        var output = this._relativeTime[string];
        return "function" == typeof output ? output(number, withoutSuffix, string, isFuture) : output.replace(/%d/i, number)
    }

    function pastFuture(diff, output) {
        var format = this._relativeTime[diff > 0 ? "future" : "past"];
        return "function" == typeof format ? format(output) : format.replace(/%s/i, output)
    }

    function locale_set__set(config) {
        var prop, i;
        for (i in config) prop = config[i], "function" == typeof prop ? this[i] = prop : this["_" + i] = prop;
        this._ordinalParseLenient = new RegExp(this._ordinalParse.source + "|" + /\d{1,2}/.source)
    }

    function lists__get(format, index, field, setter) {
        var locale = locale_locales__getLocale(),
            utc = create_utc__createUTC().set(setter, index);
        return locale[field](utc, format)
    }

    function list(format, index, field, count, setter) {
        if ("number" == typeof format && (index = format, format = void 0), format = format || "", null != index) return lists__get(format, index, field, setter);
        var i, out = [];
        for (i = 0; count > i; i++) out[i] = lists__get(format, i, field, setter);
        return out
    }

    function lists__listMonths(format, index) {
        return list(format, index, "months", 12, "month")
    }

    function lists__listMonthsShort(format, index) {
        return list(format, index, "monthsShort", 12, "month")
    }

    function lists__listWeekdays(format, index) {
        return list(format, index, "weekdays", 7, "day")
    }

    function lists__listWeekdaysShort(format, index) {
        return list(format, index, "weekdaysShort", 7, "day")
    }

    function lists__listWeekdaysMin(format, index) {
        return list(format, index, "weekdaysMin", 7, "day")
    }

    function duration_abs__abs() {
        var data = this._data;
        return this._milliseconds = mathAbs(this._milliseconds), this._days = mathAbs(this._days), this._months = mathAbs(this._months), data.milliseconds = mathAbs(data.milliseconds), data.seconds = mathAbs(data.seconds), data.minutes = mathAbs(data.minutes), data.hours = mathAbs(data.hours), data.months = mathAbs(data.months), data.years = mathAbs(data.years), this
    }

    function duration_add_subtract__addSubtract(duration, input, value, direction) {
        var other = create__createDuration(input, value);
        return duration._milliseconds += direction * other._milliseconds, duration._days += direction * other._days, duration._months += direction * other._months, duration._bubble()
    }

    function duration_add_subtract__add(input, value) {
        return duration_add_subtract__addSubtract(this, input, value, 1)
    }

    function duration_add_subtract__subtract(input, value) {
        return duration_add_subtract__addSubtract(this, input, value, -1)
    }

    function bubble() {
        var seconds, minutes, hours, milliseconds = this._milliseconds,
            days = this._days,
            months = this._months,
            data = this._data,
            years = 0;
        return data.milliseconds = milliseconds % 1e3, seconds = absFloor(milliseconds / 1e3), data.seconds = seconds % 60, minutes = absFloor(seconds / 60), data.minutes = minutes % 60, hours = absFloor(minutes / 60), data.hours = hours % 24, days += absFloor(hours / 24), years = absFloor(daysToYears(days)), days -= absFloor(yearsToDays(years)), months += absFloor(days / 30), days %= 30, years += absFloor(months / 12), months %= 12, data.days = days, data.months = months, data.years = years, this
    }

    function daysToYears(days) {
        return 400 * days / 146097
    }

    function yearsToDays(years) {
        return 146097 * years / 400
    }

    function as(units) {
        var days, months, milliseconds = this._milliseconds;
        if (units = normalizeUnits(units), "month" === units || "year" === units) return days = this._days + milliseconds / 864e5, months = this._months + 12 * daysToYears(days), "month" === units ? months : months / 12;
        switch (days = this._days + Math.round(yearsToDays(this._months / 12)), units) {
            case "week":
                return days / 7 + milliseconds / 6048e5;
            case "day":
                return days + milliseconds / 864e5;
            case "hour":
                return 24 * days + milliseconds / 36e5;
            case "minute":
                return 1440 * days + milliseconds / 6e4;
            case "second":
                return 86400 * days + milliseconds / 1e3;
            case "millisecond":
                return Math.floor(864e5 * days) + milliseconds;
            default:
                throw new Error("Unknown unit " + units)
        }
    }

    function duration_as__valueOf() {
        return this._milliseconds + 864e5 * this._days + this._months % 12 * 2592e6 + 31536e6 * toInt(this._months / 12)
    }

    function makeAs(alias) {
        return function() {
            return this.as(alias)
        }
    }

    function duration_get__get(units) {
        return units = normalizeUnits(units), this[units + "s"]()
    }

    function makeGetter(name) {
        return function() {
            return this._data[name]
        }
    }

    function weeks() {
        return absFloor(this.days() / 7)
    }

    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
        return locale.relativeTime(number || 1, !! withoutSuffix, string, isFuture)
    }

    function duration_humanize__relativeTime(posNegDuration, withoutSuffix, locale) {
        var duration = create__createDuration(posNegDuration).abs(),
            seconds = round(duration.as("s")),
            minutes = round(duration.as("m")),
            hours = round(duration.as("h")),
            days = round(duration.as("d")),
            months = round(duration.as("M")),
            years = round(duration.as("y")),
            a = seconds < thresholds.s && ["s", seconds] || 1 === minutes && ["m"] || minutes < thresholds.m && ["mm", minutes] || 1 === hours && ["h"] || hours < thresholds.h && ["hh", hours] || 1 === days && ["d"] || days < thresholds.d && ["dd", days] || 1 === months && ["M"] || months < thresholds.M && ["MM", months] || 1 === years && ["y"] || ["yy", years];
        return a[2] = withoutSuffix, a[3] = +posNegDuration > 0, a[4] = locale, substituteTimeAgo.apply(null, a)
    }

    function duration_humanize__getSetRelativeTimeThreshold(threshold, limit) {
        return void 0 === thresholds[threshold] ? !1 : void 0 === limit ? thresholds[threshold] : (thresholds[threshold] = limit, !0)
    }

    function humanize(withSuffix) {
        var locale = this.localeData(),
            output = duration_humanize__relativeTime(this, !withSuffix, locale);
        return withSuffix && (output = locale.pastFuture(+this, output)), locale.postformat(output)
    }

    function iso_string__toISOString() {
        var Y = iso_string__abs(this.years()),
            M = iso_string__abs(this.months()),
            D = iso_string__abs(this.days()),
            h = iso_string__abs(this.hours()),
            m = iso_string__abs(this.minutes()),
            s = iso_string__abs(this.seconds() + this.milliseconds() / 1e3),
            total = this.asSeconds();
        return total ? (0 > total ? "-" : "") + "P" + (Y ? Y + "Y" : "") + (M ? M + "M" : "") + (D ? D + "D" : "") + (h || m || s ? "T" : "") + (h ? h + "H" : "") + (m ? m + "M" : "") + (s ? s + "S" : "") : "P0D"
    }
    var hookCallback, globalLocale, momentProperties = utils_hooks__hooks.momentProperties = [],
        updateInProgress = !1,
        locales = {}, aliases = {}, formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|x|X|zz?|ZZ?|.)/g,
        localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
        formatFunctions = {}, formatTokenFunctions = {}, match1 = /\d/,
        match2 = /\d\d/,
        match3 = /\d{3}/,
        match4 = /\d{4}/,
        match6 = /[+-]?\d{6}/,
        match1to2 = /\d\d?/,
        match1to3 = /\d{1,3}/,
        match1to4 = /\d{1,4}/,
        match1to6 = /[+-]?\d{1,6}/,
        matchUnsigned = /\d+/,
        matchSigned = /[+-]?\d+/,
        matchOffset = /Z|[+-]\d\d:?\d\d/gi,
        matchTimestamp = /[+-]?\d+(\.\d{1,3})?/,
        matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,
        regexes = {}, tokens = {}, YEAR = 0,
        MONTH = 1,
        DATE = 2,
        HOUR = 3,
        MINUTE = 4,
        SECOND = 5,
        MILLISECOND = 6;
    addFormatToken("M", ["MM", 2], "Mo", function() {
        return this.month() + 1
    }), addFormatToken("MMM", 0, 0, function(format) {
        return this.localeData().monthsShort(this, format)
    }), addFormatToken("MMMM", 0, 0, function(format) {
        return this.localeData().months(this, format)
    }), addUnitAlias("month", "M"), addRegexToken("M", match1to2), addRegexToken("MM", match1to2, match2), addRegexToken("MMM", matchWord), addRegexToken("MMMM", matchWord), addParseToken(["M", "MM"], function(input, array) {
        array[MONTH] = toInt(input) - 1
    }), addParseToken(["MMM", "MMMM"], function(input, array, config, token) {
        var month = config._locale.monthsParse(input, token, config._strict);
        null != month ? array[MONTH] = month : getParsingFlags(config).invalidMonth = input
    });
    var defaultLocaleMonths = "January_February_March_April_May_June_July_August_September_October_November_December".split("_"),
        defaultLocaleMonthsShort = "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),
        deprecations = {};
    utils_hooks__hooks.suppressDeprecationWarnings = !1;
    var from_string__isoRegex = /^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
        isoDates = [
            ["YYYYYY-MM-DD", /[+-]\d{6}-\d{2}-\d{2}/],
            ["YYYY-MM-DD", /\d{4}-\d{2}-\d{2}/],
            ["GGGG-[W]WW-E", /\d{4}-W\d{2}-\d/],
            ["GGGG-[W]WW", /\d{4}-W\d{2}/],
            ["YYYY-DDD", /\d{4}-\d{3}/]
        ],
        isoTimes = [
            ["HH:mm:ss.SSSS", /(T| )\d\d:\d\d:\d\d\.\d+/],
            ["HH:mm:ss", /(T| )\d\d:\d\d:\d\d/],
            ["HH:mm", /(T| )\d\d:\d\d/],
            ["HH", /(T| )\d\d/]
        ],
        aspNetJsonRegex = /^\/?Date\((\-?\d+)/i;
    utils_hooks__hooks.createFromInputFallback = deprecate("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.", function(config) {
        config._d = new Date(config._i + (config._useUTC ? " UTC" : ""))
    }), addFormatToken(0, ["YY", 2], 0, function() {
        return this.year() % 100
    }), addFormatToken(0, ["YYYY", 4], 0, "year"), addFormatToken(0, ["YYYYY", 5], 0, "year"), addFormatToken(0, ["YYYYYY", 6, !0], 0, "year"), addUnitAlias("year", "y"), addRegexToken("Y", matchSigned), addRegexToken("YY", match1to2, match2), addRegexToken("YYYY", match1to4, match4), addRegexToken("YYYYY", match1to6, match6), addRegexToken("YYYYYY", match1to6, match6), addParseToken(["YYYY", "YYYYY", "YYYYYY"], YEAR), addParseToken("YY", function(input, array) {
        array[YEAR] = utils_hooks__hooks.parseTwoDigitYear(input)
    }), utils_hooks__hooks.parseTwoDigitYear = function(input) {
        return toInt(input) + (toInt(input) > 68 ? 1900 : 2e3)
    };
    var getSetYear = makeGetSet("FullYear", !1);
    addFormatToken("w", ["ww", 2], "wo", "week"), addFormatToken("W", ["WW", 2], "Wo", "isoWeek"), addUnitAlias("week", "w"), addUnitAlias("isoWeek", "W"), addRegexToken("w", match1to2), addRegexToken("ww", match1to2, match2), addRegexToken("W", match1to2), addRegexToken("WW", match1to2, match2), addWeekParseToken(["w", "ww", "W", "WW"], function(input, week, config, token) {
        week[token.substr(0, 1)] = toInt(input)
    });
    var defaultLocaleWeek = {
        dow: 0,
        doy: 6
    };
    addFormatToken("DDD", ["DDDD", 3], "DDDo", "dayOfYear"), addUnitAlias("dayOfYear", "DDD"), addRegexToken("DDD", match1to3), addRegexToken("DDDD", match3), addParseToken(["DDD", "DDDD"], function(input, array, config) {
        config._dayOfYear = toInt(input)
    }), utils_hooks__hooks.ISO_8601 = function() {};
    var prototypeMin = deprecate("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548", function() {
        var other = local__createLocal.apply(null, arguments);
        return this > other ? this : other
    }),
        prototypeMax = deprecate("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548", function() {
            var other = local__createLocal.apply(null, arguments);
            return other > this ? this : other
        });
    offset("Z", ":"), offset("ZZ", ""), addRegexToken("Z", matchOffset), addRegexToken("ZZ", matchOffset), addParseToken(["Z", "ZZ"], function(input, array, config) {
        config._useUTC = !0, config._tzm = offsetFromString(input)
    });
    var chunkOffset = /([\+\-]|\d\d)/gi;
    utils_hooks__hooks.updateOffset = function() {};
    var aspNetRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,
        create__isoRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;
    create__createDuration.fn = Duration.prototype;
    var add_subtract__add = createAdder(1, "add"),
        add_subtract__subtract = createAdder(-1, "subtract");
    utils_hooks__hooks.defaultFormat = "YYYY-MM-DDTHH:mm:ssZ";
    var lang = deprecate("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.", function(key) {
        return void 0 === key ? this.localeData() : this.locale(key)
    });
    addFormatToken(0, ["gg", 2], 0, function() {
        return this.weekYear() % 100
    }), addFormatToken(0, ["GG", 2], 0, function() {
        return this.isoWeekYear() % 100
    }), addWeekYearFormatToken("gggg", "weekYear"), addWeekYearFormatToken("ggggg", "weekYear"), addWeekYearFormatToken("GGGG", "isoWeekYear"), addWeekYearFormatToken("GGGGG", "isoWeekYear"), addUnitAlias("weekYear", "gg"), addUnitAlias("isoWeekYear", "GG"), addRegexToken("G", matchSigned), addRegexToken("g", matchSigned), addRegexToken("GG", match1to2, match2), addRegexToken("gg", match1to2, match2), addRegexToken("GGGG", match1to4, match4), addRegexToken("gggg", match1to4, match4), addRegexToken("GGGGG", match1to6, match6), addRegexToken("ggggg", match1to6, match6), addWeekParseToken(["gggg", "ggggg", "GGGG", "GGGGG"], function(input, week, config, token) {
        week[token.substr(0, 2)] = toInt(input)
    }), addWeekParseToken(["gg", "GG"], function(input, week, config, token) {
        week[token] = utils_hooks__hooks.parseTwoDigitYear(input)
    }), addFormatToken("Q", 0, 0, "quarter"), addUnitAlias("quarter", "Q"), addRegexToken("Q", match1), addParseToken("Q", function(input, array) {
        array[MONTH] = 3 * (toInt(input) - 1)
    }), addFormatToken("D", ["DD", 2], "Do", "date"), addUnitAlias("date", "D"), addRegexToken("D", match1to2), addRegexToken("DD", match1to2, match2), addRegexToken("Do", function(isStrict, locale) {
        return isStrict ? locale._ordinalParse : locale._ordinalParseLenient
    }), addParseToken(["D", "DD"], DATE), addParseToken("Do", function(input, array) {
        array[DATE] = toInt(input.match(match1to2)[0], 10)
    });
    var getSetDayOfMonth = makeGetSet("Date", !0);
    addFormatToken("d", 0, "do", "day"), addFormatToken("dd", 0, 0, function(format) {
        return this.localeData().weekdaysMin(this, format)
    }), addFormatToken("ddd", 0, 0, function(format) {
        return this.localeData().weekdaysShort(this, format)
    }), addFormatToken("dddd", 0, 0, function(format) {
        return this.localeData().weekdays(this, format)
    }), addFormatToken("e", 0, 0, "weekday"), addFormatToken("E", 0, 0, "isoWeekday"), addUnitAlias("day", "d"), addUnitAlias("weekday", "e"), addUnitAlias("isoWeekday", "E"), addRegexToken("d", match1to2), addRegexToken("e", match1to2), addRegexToken("E", match1to2), addRegexToken("dd", matchWord), addRegexToken("ddd", matchWord), addRegexToken("dddd", matchWord), addWeekParseToken(["dd", "ddd", "dddd"], function(input, week, config) {
        var weekday = config._locale.weekdaysParse(input);
        null != weekday ? week.d = weekday : getParsingFlags(config).invalidWeekday = input
    }), addWeekParseToken(["d", "e", "E"], function(input, week, config, token) {
        week[token] = toInt(input)
    });
    var defaultLocaleWeekdays = "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
        defaultLocaleWeekdaysShort = "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),
        defaultLocaleWeekdaysMin = "Su_Mo_Tu_We_Th_Fr_Sa".split("_");
    addFormatToken("H", ["HH", 2], 0, "hour"), addFormatToken("h", ["hh", 2], 0, function() {
        return this.hours() % 12 || 12
    }), meridiem("a", !0), meridiem("A", !1), addUnitAlias("hour", "h"), addRegexToken("a", matchMeridiem), addRegexToken("A", matchMeridiem), addRegexToken("H", match1to2), addRegexToken("h", match1to2), addRegexToken("HH", match1to2, match2), addRegexToken("hh", match1to2, match2), addParseToken(["H", "HH"], HOUR), addParseToken(["a", "A"], function(input, array, config) {
        config._isPm = config._locale.isPM(input), config._meridiem = input
    }), addParseToken(["h", "hh"], function(input, array, config) {
        array[HOUR] = toInt(input), getParsingFlags(config).bigHour = !0
    });
    var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i,
        getSetHour = makeGetSet("Hours", !0);
    addFormatToken("m", ["mm", 2], 0, "minute"), addUnitAlias("minute", "m"), addRegexToken("m", match1to2), addRegexToken("mm", match1to2, match2), addParseToken(["m", "mm"], MINUTE);
    var getSetMinute = makeGetSet("Minutes", !1);
    addFormatToken("s", ["ss", 2], 0, "second"), addUnitAlias("second", "s"), addRegexToken("s", match1to2), addRegexToken("ss", match1to2, match2), addParseToken(["s", "ss"], SECOND);
    var getSetSecond = makeGetSet("Seconds", !1);
    addFormatToken("S", 0, 0, function() {
        return~~ (this.millisecond() / 100)
    }), addFormatToken(0, ["SS", 2], 0, function() {
        return~~ (this.millisecond() / 10)
    }), millisecond__milliseconds("SSS"), millisecond__milliseconds("SSSS"), addUnitAlias("millisecond", "ms"), addRegexToken("S", match1to3, match1), addRegexToken("SS", match1to3, match2), addRegexToken("SSS", match1to3, match3), addRegexToken("SSSS", matchUnsigned), addParseToken(["S", "SS", "SSS", "SSSS"], function(input, array) {
        array[MILLISECOND] = toInt(1e3 * ("0." + input))
    });
    var getSetMillisecond = makeGetSet("Milliseconds", !1);
    addFormatToken("z", 0, 0, "zoneAbbr"), addFormatToken("zz", 0, 0, "zoneName");
    var momentPrototype__proto = Moment.prototype;
    momentPrototype__proto.add = add_subtract__add, momentPrototype__proto.calendar = moment_calendar__calendar, momentPrototype__proto.clone = clone, momentPrototype__proto.diff = diff, momentPrototype__proto.endOf = endOf, momentPrototype__proto.format = format, momentPrototype__proto.from = from, momentPrototype__proto.fromNow = fromNow, momentPrototype__proto.to = to, momentPrototype__proto.toNow = toNow, momentPrototype__proto.get = getSet, momentPrototype__proto.invalidAt = invalidAt, momentPrototype__proto.isAfter = isAfter, momentPrototype__proto.isBefore = isBefore, momentPrototype__proto.isBetween = isBetween, momentPrototype__proto.isSame = isSame, momentPrototype__proto.isValid = moment_valid__isValid, momentPrototype__proto.lang = lang, momentPrototype__proto.locale = locale, momentPrototype__proto.localeData = localeData, momentPrototype__proto.max = prototypeMax, momentPrototype__proto.min = prototypeMin, momentPrototype__proto.parsingFlags = parsingFlags, momentPrototype__proto.set = getSet, momentPrototype__proto.startOf = startOf, momentPrototype__proto.subtract = add_subtract__subtract, momentPrototype__proto.toArray = toArray, momentPrototype__proto.toDate = toDate, momentPrototype__proto.toISOString = moment_format__toISOString, momentPrototype__proto.toJSON = moment_format__toISOString, momentPrototype__proto.toString = toString, momentPrototype__proto.unix = unix, momentPrototype__proto.valueOf = to_type__valueOf, momentPrototype__proto.year = getSetYear, momentPrototype__proto.isLeapYear = getIsLeapYear, momentPrototype__proto.weekYear = getSetWeekYear, momentPrototype__proto.isoWeekYear = getSetISOWeekYear, momentPrototype__proto.quarter = momentPrototype__proto.quarters = getSetQuarter, momentPrototype__proto.month = getSetMonth, momentPrototype__proto.daysInMonth = getDaysInMonth, momentPrototype__proto.week = momentPrototype__proto.weeks = getSetWeek, momentPrototype__proto.isoWeek = momentPrototype__proto.isoWeeks = getSetISOWeek, momentPrototype__proto.weeksInYear = getWeeksInYear, momentPrototype__proto.isoWeeksInYear = getISOWeeksInYear, momentPrototype__proto.date = getSetDayOfMonth, momentPrototype__proto.day = momentPrototype__proto.days = getSetDayOfWeek, momentPrototype__proto.weekday = getSetLocaleDayOfWeek, momentPrototype__proto.isoWeekday = getSetISODayOfWeek, momentPrototype__proto.dayOfYear = getSetDayOfYear, momentPrototype__proto.hour = momentPrototype__proto.hours = getSetHour, momentPrototype__proto.minute = momentPrototype__proto.minutes = getSetMinute, momentPrototype__proto.second = momentPrototype__proto.seconds = getSetSecond, momentPrototype__proto.millisecond = momentPrototype__proto.milliseconds = getSetMillisecond, momentPrototype__proto.utcOffset = getSetOffset, momentPrototype__proto.utc = setOffsetToUTC, momentPrototype__proto.local = setOffsetToLocal, momentPrototype__proto.parseZone = setOffsetToParsedOffset, momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset, momentPrototype__proto.isDST = isDaylightSavingTime, momentPrototype__proto.isDSTShifted = isDaylightSavingTimeShifted, momentPrototype__proto.isLocal = isLocal, momentPrototype__proto.isUtcOffset = isUtcOffset, momentPrototype__proto.isUtc = isUtc, momentPrototype__proto.isUTC = isUtc, momentPrototype__proto.zoneAbbr = getZoneAbbr, momentPrototype__proto.zoneName = getZoneName, momentPrototype__proto.dates = deprecate("dates accessor is deprecated. Use date instead.", getSetDayOfMonth), momentPrototype__proto.months = deprecate("months accessor is deprecated. Use month instead", getSetMonth), momentPrototype__proto.years = deprecate("years accessor is deprecated. Use year instead", getSetYear), momentPrototype__proto.zone = deprecate("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779", getSetZone);
    var momentPrototype = momentPrototype__proto,
        defaultCalendar = {
            sameDay: "[Today at] LT",
            nextDay: "[Tomorrow at] LT",
            nextWeek: "dddd [at] LT",
            lastDay: "[Yesterday at] LT",
            lastWeek: "[Last] dddd [at] LT",
            sameElse: "L"
        }, defaultLongDateFormat = {
            LTS: "h:mm:ss A",
            LT: "h:mm A",
            L: "MM/DD/YYYY",
            LL: "MMMM D, YYYY",
            LLL: "MMMM D, YYYY LT",
            LLLL: "dddd, MMMM D, YYYY LT"
        }, defaultInvalidDate = "Invalid date",
        defaultOrdinal = "%d",
        defaultOrdinalParse = /\d{1,2}/,
        defaultRelativeTime = {
            future: "in %s",
            past: "%s ago",
            s: "a few seconds",
            m: "a minute",
            mm: "%d minutes",
            h: "an hour",
            hh: "%d hours",
            d: "a day",
            dd: "%d days",
            M: "a month",

            MM: "%d months",
            y: "a year",
            yy: "%d years"
        }, prototype__proto = Locale.prototype;
    prototype__proto._calendar = defaultCalendar, prototype__proto.calendar = locale_calendar__calendar, prototype__proto._longDateFormat = defaultLongDateFormat, prototype__proto.longDateFormat = longDateFormat, prototype__proto._invalidDate = defaultInvalidDate, prototype__proto.invalidDate = invalidDate, prototype__proto._ordinal = defaultOrdinal, prototype__proto.ordinal = ordinal, prototype__proto._ordinalParse = defaultOrdinalParse, prototype__proto.preparse = preParsePostFormat, prototype__proto.postformat = preParsePostFormat, prototype__proto._relativeTime = defaultRelativeTime, prototype__proto.relativeTime = relative__relativeTime, prototype__proto.pastFuture = pastFuture, prototype__proto.set = locale_set__set, prototype__proto.months = localeMonths, prototype__proto._months = defaultLocaleMonths, prototype__proto.monthsShort = localeMonthsShort, prototype__proto._monthsShort = defaultLocaleMonthsShort, prototype__proto.monthsParse = localeMonthsParse, prototype__proto.week = localeWeek, prototype__proto._week = defaultLocaleWeek, prototype__proto.firstDayOfYear = localeFirstDayOfYear, prototype__proto.firstDayOfWeek = localeFirstDayOfWeek, prototype__proto.weekdays = localeWeekdays, prototype__proto._weekdays = defaultLocaleWeekdays, prototype__proto.weekdaysMin = localeWeekdaysMin, prototype__proto._weekdaysMin = defaultLocaleWeekdaysMin, prototype__proto.weekdaysShort = localeWeekdaysShort, prototype__proto._weekdaysShort = defaultLocaleWeekdaysShort, prototype__proto.weekdaysParse = localeWeekdaysParse, prototype__proto.isPM = localeIsPM, prototype__proto._meridiemParse = defaultLocaleMeridiemParse, prototype__proto.meridiem = localeMeridiem, locale_locales__getSetGlobalLocale("en", {
        ordinalParse: /\d{1,2}(th|st|nd|rd)/,
        ordinal: function(number) {
            var b = number % 10,
                output = 1 === toInt(number % 100 / 10) ? "th" : 1 === b ? "st" : 2 === b ? "nd" : 3 === b ? "rd" : "th";
            return number + output
        }
    }), utils_hooks__hooks.lang = deprecate("moment.lang is deprecated. Use moment.locale instead.", locale_locales__getSetGlobalLocale), utils_hooks__hooks.langData = deprecate("moment.langData is deprecated. Use moment.localeData instead.", locale_locales__getLocale);
    var mathAbs = Math.abs,
        asMilliseconds = makeAs("ms"),
        asSeconds = makeAs("s"),
        asMinutes = makeAs("m"),
        asHours = makeAs("h"),
        asDays = makeAs("d"),
        asWeeks = makeAs("w"),
        asMonths = makeAs("M"),
        asYears = makeAs("y"),
        duration_get__milliseconds = makeGetter("milliseconds"),
        seconds = makeGetter("seconds"),
        minutes = makeGetter("minutes"),
        hours = makeGetter("hours"),
        days = makeGetter("days"),
        months = makeGetter("months"),
        years = makeGetter("years"),
        round = Math.round,
        thresholds = {
            s: 45,
            m: 45,
            h: 22,
            d: 26,
            M: 11
        }, iso_string__abs = Math.abs,
        duration_prototype__proto = Duration.prototype;
    duration_prototype__proto.abs = duration_abs__abs, duration_prototype__proto.add = duration_add_subtract__add, duration_prototype__proto.subtract = duration_add_subtract__subtract, duration_prototype__proto.as = as, duration_prototype__proto.asMilliseconds = asMilliseconds, duration_prototype__proto.asSeconds = asSeconds, duration_prototype__proto.asMinutes = asMinutes, duration_prototype__proto.asHours = asHours, duration_prototype__proto.asDays = asDays, duration_prototype__proto.asWeeks = asWeeks, duration_prototype__proto.asMonths = asMonths, duration_prototype__proto.asYears = asYears, duration_prototype__proto.valueOf = duration_as__valueOf, duration_prototype__proto._bubble = bubble, duration_prototype__proto.get = duration_get__get, duration_prototype__proto.milliseconds = duration_get__milliseconds, duration_prototype__proto.seconds = seconds, duration_prototype__proto.minutes = minutes, duration_prototype__proto.hours = hours, duration_prototype__proto.days = days, duration_prototype__proto.weeks = weeks, duration_prototype__proto.months = months, duration_prototype__proto.years = years, duration_prototype__proto.humanize = humanize, duration_prototype__proto.toISOString = iso_string__toISOString, duration_prototype__proto.toString = iso_string__toISOString, duration_prototype__proto.toJSON = iso_string__toISOString, duration_prototype__proto.locale = locale, duration_prototype__proto.localeData = localeData, duration_prototype__proto.toIsoString = deprecate("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)", iso_string__toISOString), duration_prototype__proto.lang = lang, addFormatToken("X", 0, 0, "unix"), addFormatToken("x", 0, 0, "valueOf"), addRegexToken("x", matchSigned), addRegexToken("X", matchTimestamp), addParseToken("X", function(input, array, config) {
        config._d = new Date(1e3 * parseFloat(input, 10))
    }), addParseToken("x", function(input, array, config) {
        config._d = new Date(toInt(input))
    }), utils_hooks__hooks.version = "2.10.3", setHookCallback(local__createLocal), utils_hooks__hooks.fn = momentPrototype, utils_hooks__hooks.min = min, utils_hooks__hooks.max = max, utils_hooks__hooks.utc = create_utc__createUTC, utils_hooks__hooks.unix = moment__createUnix, utils_hooks__hooks.months = lists__listMonths, utils_hooks__hooks.isDate = isDate, utils_hooks__hooks.locale = locale_locales__getSetGlobalLocale, utils_hooks__hooks.invalid = valid__createInvalid, utils_hooks__hooks.duration = create__createDuration, utils_hooks__hooks.isMoment = isMoment, utils_hooks__hooks.weekdays = lists__listWeekdays, utils_hooks__hooks.parseZone = moment__createInZone, utils_hooks__hooks.localeData = locale_locales__getLocale, utils_hooks__hooks.isDuration = isDuration, utils_hooks__hooks.monthsShort = lists__listMonthsShort, utils_hooks__hooks.weekdaysMin = lists__listWeekdaysMin, utils_hooks__hooks.defineLocale = defineLocale, utils_hooks__hooks.weekdaysShort = lists__listWeekdaysShort, utils_hooks__hooks.normalizeUnits = normalizeUnits, utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold;
    var _moment = utils_hooks__hooks;
    return _moment
});
var JSCookies = {
    getItem: function(sKey) {
        return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null
    },
    setItem: function(sKey, sValue, vEnd, sPath, sDomain, bSecure) {
        if (!sKey || /^(?:expires|max\-age|path|domain|secure)$/i.test(sKey)) return !1;
        var sExpires = "";
        if (vEnd) switch (vEnd.constructor) {
            case Number:
                sExpires = 1 / 0 === vEnd ? "; expires=Fri, 31 Dec 9999 23:59:59 GMT" : "; max-age=" + vEnd;
                break;
            case String:
                sExpires = "; expires=" + vEnd;
                break;
            case Date:
                sExpires = "; expires=" + vEnd.toUTCString()
        }
        return document.cookie = encodeURIComponent(sKey) + "=" + encodeURIComponent(sValue) + sExpires + (sDomain ? "; domain=" + sDomain : "") + (sPath ? "; path=" + sPath : "") + (bSecure ? "; secure" : ""), !0
    },
    removeItem: function(sKey, sPath, sDomain) {
        return sKey && this.hasItem(sKey) ? (document.cookie = encodeURIComponent(sKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT" + (sDomain ? "; domain=" + sDomain : "") + (sPath ? "; path=" + sPath : ""), !0) : !1
    },
    hasItem: function(sKey) {
        return new RegExp("(?:^|;\\s*)" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=").test(document.cookie)
    },
    keys: function() {
        for (var aKeys = document.cookie.replace(/((?:^|\s*;)[^\=]+)(?=;|$)|^\s*|\s*(?:\=[^;]*)?(?:\1|$)/g, "").split(/\s*(?:\=[^;]*)?;\s*/), nIdx = 0; nIdx < aKeys.length; nIdx++) aKeys[nIdx] = decodeURIComponent(aKeys[nIdx]);
        return aKeys
    }
}, splash = splash || {};
splash.sneakyEmailBox = function($) {
    var addEmailToBox = function(email_addresses) {
        var $holder = $("#email-holder"),
            $adder = $("#sneaky-email-adder");
        first_split = email_addresses.replace(/[\n,;]/g, ",").split(/,/);
        var email, name, new_block;
        for (i = 0; i < first_split.length; i++)
            if (email_unformatted = $.trim(first_split[i].replace(/[\n,\",<>]/g, "")), email_arr = email_unformatted.split(/ /), email = "", name = "", email_arr.length > 1 ? (email = email_arr.pop(), name = email_arr.join(" ")) : email = email_arr[0], "" != email) {
                var cl = isValidEmail(email) ? "legit" : "invalid";
                new_block = "" != name ? '<li class="email-item ' + cl + '"><span>' + email + '</span><input type="hidden" class="name-set" value="' + name + '" /><a class="delete" href="#">x</a></li>' : '<li class="email-item ' + cl + '"><span>' + email + '</span><a class="delete" href="#">x</a></li>', $adder.val("").parent("li").before(new_block).end().adjustWidth()
            }
        $holder.append($adder.parent("li")), $adder.adjustWidth(), $holder.find("li.email-item").length < 1 || $adder.focus()
    };
    return $(document).ready(function() {
        $(document).on("click", "li.email-item", function() {
            var $adder = $("#sneaky-email-adder").parent("li"),
                $this = $(this);
            $this.index() > 0 ? $this.prev().after($adder) : $("#email-holder").prepend($adder), $("#sneaky-email-adder").val($this.find("span").text()).focus().select().adjustWidth(), setTimeout(function() {
                $this.remove()
            }, 0)
        }), $(document).on("click", ".email-item .delete", function() {
            var $this = $(this);
            return setTimeout(function() {
                $this.parent("li").remove()
            }, 0), $("#sneaky-email-address").focus(), !1
        }), $(document).on("click", "#email-holder", function() {
            $(this).find("textarea").focus()
        }), $(document).on({
            keyup: function() {
                var $this = $(this);
                if ($("#email-holder").hasClass("contacts-section")) {
                    if ($this.val().match(/[,;\n\r]/)) return addEmailToBox($this.val()), !1
                } else if ($this.val().match(/[, ;\n\r]/)) return addEmailToBox($this.val()), !1;
                $this.adjustWidth()
            },
            keydown: function(e) {
                var $this = $(this);
                if (13 == e.keyCode || 9 == e.keyCode || 188 == e.keyCode && 0 == e.shiftKey) return 13 == e.keyCode && "" == $.trim($this.val()) && $this.parents("div.subcontent").find("a.addToList").click(), addEmailToBox($this.val()), !1;
                if (32 != e.keyCode || $("#email-holder").hasClass("contacts-section")) {
                    if (8 == e.keyCode && "" == $.trim($this.val())) {
                        var $previous_block = $this.parent("li").prev();
                        $previous_block.hasClass("email-item") && $previous_block.remove()
                    }
                } else if (isValidEmail($.trim($this.val()))) return addEmailToBox($this.val()), !1;
                $this.adjustWidth()
            },
            focusout: function() {
                var $obj = $(this),
                    val = $.trim($obj.val()),
                    $holder = $("#email-holder");
                return "" != val ? (addEmailToBox(val), !1) : void($obj.index() + 1 != $obj.parents("ul").find("li").length && $holder.append($("#sneaky-email-adder").parent("li")))
            },
            focus: function() {
                $(this).adjustWidth()
            }
        }, "#sneaky-email-adder")
    }), {
        getEmails: function(obj) {
            if ("undefined" == typeof obj && (obj = !1), obj) {
                var contacts = [];
                return $.each($("#email-holder li.legit"), function() {
                    var contact = {};
                    if (contact.primary_email = $(this).find("span").html(), contact.primary_identifier = contact.primary_email, $(this).find("input").length > 0) {
                        var name = $(this).find("input").val(),
                            name_array = name.split(/ /);
                        contact.first_name = name_array[0], contact.last_name = name_array[1], contact.first_name_avatar = contact.first_name[0]
                    } else contact.first_name_avatar = contact.primary_email[0];
                    contacts.push(contact)
                }), contacts
            }
            var emails = "";
            return $.each($("#email-holder li.legit span"), function() {
                emails += $(this).html() + ","
            }), emails.replace(/(^,)|(,$)/g, "")
        }
    }
}(jQuery),
function($) {
    $.fn.currency = function(options) {
        var settings = $.extend({
            url: "/api_currency"
        }, options),
            elems = [];
        return this.each(function(idx) {
            var elem = {}, $elem = $(this);
            return $elem.hasClass("progress") ? !0 : (elem.code = $elem.data("currency") || "USD", elem.amount = $elem.html().replace(/[^0-9]/g, ""), elem.id = idx, elems.push(elem), void $elem.html("").attr("data-currency-id", elem.id).addClass("splash-progress small"))
        }), elems.length < 1 ? !1 : void $.ajax({
            global: !1,
            complete: function() {
                $("[data-currency]").removeClass("splash-progress small")
            },
            url: settings.url,
            method: "POST",
            data: {
                elems: elems
            },
            dataType: "JSON",
            success: function(data) {
                for (var i in data.elems) {
                    var elem = data.elems[i];
                    $("[data-currency-id='" + elem.id + "']").html(elem.amount)
                }
                "undefined" != typeof settings.callback && settings.callback()
            }
        })
    }
}(jQuery, _);
var splash = splash || {};
splash.global = function($) {
    $(document).ready(function() {
        $("input, text").placeholder()
    })
}(jQuery), + function($) {
    var version = $.fn.jquery.split(" ")[0].split(".");
    (version[0] < 2 && version[1] < 9 || 1 == version[0] && 9 == version[1] && version[2] < 1) && console.log("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")
}(jQuery), + function($) {
    "use strict";

    function Plugin(option, _relatedTarget) {
        return this.each(function() {
            var $this = $(this),
                data = $this.data("bs.modal"),
                options = $.extend({}, Modal.DEFAULTS, $this.data(), "object" == typeof option && option);
            data || $this.data("bs.modal", data = new Modal(this, options)), "string" == typeof option ? data[option](_relatedTarget) : options.show && data.show(_relatedTarget)
        })
    }
    var Modal = function(element, options) {
        this.options = options, this.$body = $(document.body), this.$element = $(element), this.$backdrop = this.isShown = null, this.scrollbarWidth = 0, this.options.remote && this.$element.find(".modal-content").load(this.options.remote, $.proxy(function() {
            this.$element.trigger("loaded.bs.modal")
        }, this))
    };
    Modal.VERSION = "3.3.1", Modal.TRANSITION_DURATION = 300, Modal.BACKDROP_TRANSITION_DURATION = 150, Modal.DEFAULTS = {
        backdrop: !0,
        keyboard: !0,
        show: !0
    }, Modal.prototype.toggle = function(_relatedTarget) {
        return this.isShown ? this.hide() : this.show(_relatedTarget)
    }, Modal.prototype.show = function(_relatedTarget) {
        var that = this,
            e = $.Event("show.bs.modal", {
                relatedTarget: _relatedTarget
            });
        this.$element.trigger(e), this.isShown || e.isDefaultPrevented() || (this.isShown = !0, this.checkScrollbar(), this.setScrollbar(), this.$body.addClass("modal-open"), this.escape(), this.resize(), this.$element.on("click.dismiss.bs.modal", '[data-dismiss="modal"]', $.proxy(this.hide, this)), this.backdrop(function() {
            var transition = $.support.transition && that.$element.hasClass("fade");
            that.$element.parent().length || that.$element.appendTo(that.$body), that.$element.show().scrollTop(0), that.options.backdrop && that.adjustBackdrop(), that.adjustDialog(), transition && that.$element[0].offsetWidth, that.$element.addClass("in").attr("aria-hidden", !1), that.enforceFocus();
            var e = $.Event("shown.bs.modal", {
                relatedTarget: _relatedTarget
            });
            transition ? that.$element.find(".modal-dialog").one("bsTransitionEnd", function() {
                that.$element.trigger("focus").trigger(e)
            }).emulateTransitionEnd(Modal.TRANSITION_DURATION) : that.$element.trigger("focus").trigger(e)
        }))
    }, Modal.prototype.hide = function(e) {
        e && e.preventDefault(), e = $.Event("hide.bs.modal"), this.$element.trigger(e), this.isShown && !e.isDefaultPrevented() && (this.isShown = !1, this.escape(), this.resize(), $(document).off("focusin.bs.modal"), this.$element.removeClass("in").attr("aria-hidden", !0).off("click.dismiss.bs.modal"), $.support.transition && this.$element.hasClass("fade") ? this.$element.one("bsTransitionEnd", $.proxy(this.hideModal, this)).emulateTransitionEnd(Modal.TRANSITION_DURATION) : this.hideModal())
    }, Modal.prototype.enforceFocus = function() {
        $(document).off("focusin.bs.modal").on("focusin.bs.modal", $.proxy(function(e) {
            this.$element[0] === e.target || this.$element.has(e.target).length || this.$element.trigger("focus")
        }, this))
    }, Modal.prototype.escape = function() {
        this.isShown && this.options.keyboard ? this.$element.on("keydown.dismiss.bs.modal", $.proxy(function(e) {
            27 == e.which && this.hide()
        }, this)) : this.isShown || this.$element.off("keydown.dismiss.bs.modal")
    }, Modal.prototype.resize = function() {
        this.isShown ? $(window).on("resize.bs.modal", $.proxy(this.handleUpdate, this)) : $(window).off("resize.bs.modal")
    }, Modal.prototype.hideModal = function() {
        var that = this;
        this.$element.hide(), this.backdrop(function() {
            that.$body.removeClass("modal-open"), that.resetAdjustments(), that.resetScrollbar(), that.$element.trigger("hidden.bs.modal")
        })
    }, Modal.prototype.removeBackdrop = function() {
        this.$backdrop && this.$backdrop.remove(), this.$backdrop = null
    }, Modal.prototype.backdrop = function(callback) {
        var that = this,
            animate = this.$element.hasClass("fade") ? "fade" : "";
        if (this.isShown && this.options.backdrop) {
            var doAnimate = $.support.transition && animate;
            if (this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />').prependTo(this.$element).on("click.dismiss.bs.modal", $.proxy(function(e) {
                e.target === e.currentTarget && ("static" == this.options.backdrop ? this.$element[0].focus.call(this.$element[0]) : this.hide.call(this))
            }, this)), doAnimate && this.$backdrop[0].offsetWidth, this.$backdrop.addClass("in"), !callback) return;
            doAnimate ? this.$backdrop.one("bsTransitionEnd", callback).emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : callback()
        } else if (!this.isShown && this.$backdrop) {
            this.$backdrop.removeClass("in");
            var callbackRemove = function() {
                that.removeBackdrop(), callback && callback()
            };
            $.support.transition && this.$element.hasClass("fade") ? this.$backdrop.one("bsTransitionEnd", callbackRemove).emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : callbackRemove()
        } else callback && callback()
    }, Modal.prototype.handleUpdate = function() {
        this.options.backdrop && this.adjustBackdrop(), this.adjustDialog()
    }, Modal.prototype.adjustBackdrop = function() {
        this.$backdrop.css("height", 0).css("height", this.$element[0].scrollHeight)
    }, Modal.prototype.adjustDialog = function() {
        var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight;
        this.$element.css({
            paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : "",
            paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ""
        })
    }, Modal.prototype.resetAdjustments = function() {
        this.$element.css({
            paddingLeft: "",
            paddingRight: ""
        })
    }, Modal.prototype.checkScrollbar = function() {
        this.bodyIsOverflowing = document.body.scrollHeight > document.documentElement.clientHeight, this.scrollbarWidth = this.measureScrollbar()
    }, Modal.prototype.setScrollbar = function() {
        var bodyPad = parseInt(this.$body.css("padding-right") || 0, 10);
        this.bodyIsOverflowing && this.$body.css("padding-right", bodyPad + this.scrollbarWidth)
    }, Modal.prototype.resetScrollbar = function() {
        this.$body.css("padding-right", "")
    }, Modal.prototype.measureScrollbar = function() {
        var scrollDiv = document.createElement("div");
        scrollDiv.className = "modal-scrollbar-measure", this.$body.append(scrollDiv);
        var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
        return this.$body[0].removeChild(scrollDiv), scrollbarWidth
    };
    var old = $.fn.modal;
    $.fn.modal = Plugin, $.fn.modal.Constructor = Modal, $.fn.modal.noConflict = function() {
        return $.fn.modal = old, this
    }, $(document).on("click.bs.modal.data-api", '[data-toggle="modal"]', function(e) {
        var $this = $(this),
            href = $this.attr("href"),
            $target = $($this.attr("data-target") || href && href.replace(/.*(?=#[^\s]+$)/, "")),
            option = $target.data("bs.modal") ? "toggle" : $.extend({
                remote: !/#/.test(href) && href
            }, $target.data(), $this.data());
        $this.is("a") && e.preventDefault(), $target.one("show.bs.modal", function(showEvent) {
            showEvent.isDefaultPrevented() || $target.one("hidden.bs.modal", function() {
                $this.is(":visible") && $this.trigger("focus")
            })
        }), Plugin.call($target, option, this)
    })
}(jQuery), + function($) {
    "use strict";

    function transitionEnd() {
        var el = document.createElement("bootstrap"),
            transEndEventNames = {
                WebkitTransition: "webkitTransitionEnd",
                MozTransition: "transitionend",
                OTransition: "oTransitionEnd otransitionend",
                transition: "transitionend"
            };
        for (var name in transEndEventNames)
            if (void 0 !== el.style[name]) return {
                end: transEndEventNames[name]
            };
        return !1
    }
    $.fn.emulateTransitionEnd = function(duration) {
        var called = !1,
            $el = this;
        $(this).one("bsTransitionEnd", function() {
            called = !0
        });
        var callback = function() {
            called || $($el).trigger($.support.transition.end)
        };
        return setTimeout(callback, duration), this
    }, $(function() {
        $.support.transition = transitionEnd(), $.support.transition && ($.event.special.bsTransitionEnd = {
            bindType: $.support.transition.end,
            delegateType: $.support.transition.end,
            handle: function(e) {
                return $(e.target).is(this) ? e.handleObj.handler.apply(this, arguments) : void 0
            }
        })
    })
}(jQuery);
var splash = splash || {};
splash.splashModal = function($, _) {
    var _initModals = function() {
        console.log("There are " + $(".modal-trigger").length + " modals on this page."), _.each($(".modal-trigger"), function(elem) {
            _initModal(elem)
        })
    }, _initModal = function(elem) {
            var modalId = $(elem).attr("id") + "_modal";
            0 === $("#" + modalId).length && $(elem).attr("data-target", "#" + modalId).on("click", {
                elem: elem,
                modalId: modalId
            }, splash.splashModal.showModal)
        };
    return {
        initModals: function() {
            _initModals()
        },
        showModal: function(e) {
            var modalId = e.data.modalId,
                elem = e.data.elem;
            return e.preventDefault(), e.stopPropagation(), $.when($.ajax({
                url: $(elem).data("template"),
                error: function(xhr, status) {
                    alert("error!: " + JSON.stringify(xhr) + " : " + status)
                }
            })).done(function(html) {
                var _template = html;
                $("<div/>").appendTo("body").html(_template).addClass("modal").addClass("fade").attr("id", modalId).attr("role", "dialog").attr("aria-labelledby", "myModalLabel").attr("aria-hidden", "true").find(".modal-header h3").html($(elem).attr("data-title")).end().on("show.bs.modal", function() {
                    $(elem).find(".datepicker").datepicker(), setTimeout(function() {
                        $(".datepicker").datepicker()
                    }, 1500)
                }).on("shown.bs.modal", function() {
                    var callbackName = $(elem).attr("data-on-shown");
                    "undefined" != typeof callbackName && executeFunctionByName(callbackName, window, modalId)
                }).on("hide", function() {
                    $(elem).remove()
                });
                var data = {};
                if ($(elem).data("params-callback")) {
                    var callbackName = $(elem).attr("data-params-callback");
                    data = executeFunctionByName(callbackName, window, modalId)
                }
                $.ajax({
                    url: $(elem).attr("href"),
                    data: data,
                    success: function(response) {
                        $("#" + modalId).find(".modal-body").html(response).end().find(".modal-submit").click(function() {
                            var callbackName = $(elem).attr("data-submit-callback");
                            executeFunctionByName(callbackName, window, modalId)
                        }).end().modal(), $(".vertical-tabs").tabs({
                            orientation: "vertical"
                        }), $(".tabs").tabs()
                    }
                })
            }), !1
        }
    }
}(jQuery, _), splash = window.splash || {},
function($) {
    function customFileUpload(input, opts) {
        var $input = $(input),
            $container = opts.$container,
            file = $input[0].files[0],
            uploadImgId = opts.uploadImgId,
            $placeholder = opts.$placeholder,
            $hiddenInput = opts.$hiddenInput,
            $clone = $("<input />", {
                type: "file",
                "class": $input.attr("class"),
                id: $input.attr("id"),
                name: $input.attr("name")
            }).attr("data-customfield-img", $input.data("customfield-img")).attr("num", $input.attr("num")).attr("data-content", "Click to upload a file."),
            isImage = "image/jpg" === file.type || "image/jpeg" === file.type || "image/png" === file.type || "image/gif" === file.type,
            afterUpload = opts.afterUpload;
        if (!$placeholder || !isImage) return void $placeholder.removeClass("has-img").find("img").remove();
        submittable(!1), $placeholder.removeClass("has-img").find("img").remove();
        var maxImgWidth = 600,
            maxImgHeight = 600;
        "undefined" != typeof _event.metadata.growth_machine && "1" == _event.metadata.growth_machine && (maxImgWidth = 1200, maxImgHeight = 1200);
        var is_required = !1;
        $clone.hasClass("required") && (is_required = !0), canvasResize(file, {
            width: maxImgWidth,
            height: maxImgHeight,
            crop: !1,
            quality: 80,
            rotate: 0,
            callback: function(dataUrl) {
                var blob = dataURItoBlob(dataUrl);
                if (dataUrl && blob) {
                    $input.replaceWith($clone), is_required && $clone.removeClass("required"), $container.find(".rsvp-form-uploaded-pic").remove();
                    var $imgHtml = $("<img>").addClass("rsvp-form-uploaded-pic").attr("src", dataUrl);
                    $container.addClass("has-img loading").remove("img").append($imgHtml), $container.find(".nu-loader").addClass("loading").show();
                    var ajaxBlob = new FormData;
                    ajaxBlob.append("custom_field_" + uploadImgId, blob), ajaxBlob.append("action", "upload-custom-rsvp-file"), $.ajax({
                        url: window.location.pathname,
                        type: "POST",
                        data: ajaxBlob,
                        dataType: "json",
                        processData: !1,
                        contentType: !1
                    }).done(function(response) {
                        $hiddenInput.val(response[uploadImgId].path), $hiddenInput.attr("name").match(/custom_field/) && $hiddenInput.attr("name", "custom_field_imgdata[" + uploadImgId + "]"), $container.removeClass("loading").find(".nu-loader").fadeOut(), "function" == typeof afterUpload && afterUpload(response[uploadImgId].path)
                    }).fail(function() {
                        $placeholder.fadeOut(), is_required && $clone.addClass("required")
                    }).always(function() {
                        submittable(!0)
                    })
                } else submittable(!0), is_required && $clone.addClass("required")
            }
        })
    }
    var submittable = function(canSubmit) {
        $form = $("#rsvp-real-form.realForm"), $submitButton = $("#rsvp-submit", $form), canSubmit ? ($submitButton.removeAttr("disabled").css("opacity", 1), $submitButton.siblings(".processing-img").hide()) : ($submitButton.attr("disabled", !0).css("opacity", .1), $submitButton.siblings(".processing-img").show())
    }, dataURItoBlob = function(dataURI, type) {
            for (var byteString = atob(dataURI.split(",")[1]), ab = new ArrayBuffer(byteString.length), ia = new Uint8Array(ab), i = 0; i < byteString.length; i++) ia[i] = byteString.charCodeAt(i);
            return new Blob([ab], {
                type: type
            })
        };
    splash.customFileUpload = customFileUpload
}(jQuery);
var checkForUpdates = !0,
    _gaq = _gaq || [];
_gaq.push(["_setAccount", "UA-19623827-1"]), _gaq.push(["_trackPageview"]);
var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
    months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
    current_text, typingTimer, doneTypingInterval = 600,
    openAccountDropdown = !1;
$(document).ready(function() {
    $("#plannersDropdown").click(function() {
        return $("#event-contact-count").click(), !1
    }), $("#accountDropdown").click(function() {
        var $this = $(this);
        $this.hasClass("open") || ($this.addClass("open"), openAccountDropdown = !0)
    }), $("#closeAccountDropdown").click(function() {
        return $("#accountDropdown").removeClass("open"), openAccountDropdown = !1, !1
    }), $("#dropdownAvatar").click(function() {
        return $("#accountDropdown").hasClass("open") ? ($("#accountDropdown").removeClass("open"), openAccountDropdown = !1, !1) : void 0
    }), $("html").click(function(e) {
        openAccountDropdown && "accountDropdown" != e.target.id && $(e.target).parents("#accountDropdown").length < 1 && ($("#accountDropdown").removeClass("open"), openAccountDropdown = !1)
    }), $.fn.truncate = function(limit) {
        return $(this).val().length < limit ? $(this).val() : $(this).val().substr(0, limit) + ".."
    }, $.fn.adjustWidth = function() {
        $(this).width($(this).val().length < 5 ? 50 : 10 * $(this).val().length)
    }
});
var modal_visible = !1,
    modal_offset;
splash = splash ? splash : {}, splash.analytics = function($) {
    var active = !1,
        log = !0;
    if ("undefined" != typeof splash && "undefined" != typeof splash.server && "undefined" != typeof splash.server._event && "undefined" != typeof splash.server._event.home_page) var pageName = "Loaded Home Page";
    else var pageName = "Splash Page Load";
    var pathnames = {
        "^/events/create/[0-9]+": {
            load: function() {
                return !0
            },
            page: "Started Create Flow",
            identify: !0
        },
        "^/events": {
            load: function() {
                return !0
            },
            page: "Loaded Event Dashboard",
            identify: !0,
            condition: function() {
                return !1
            }
        },
        "^/email_builder": {
            load: function() {
                return !0
            },
            page: "Loaded Event Dashboard",
            identify: !0,
            condition: function() {
                return !1
            }
        },
        "^/photos": {
            load: function() {
                return !0
            },
            page: "Loaded Photo Dashboard",
            identify: !0,
            condition: function() {
                return !1
            }
        },
        "^/contacts": {
            load: function() {
                return !0
            },
            page: "Loaded Contacts Dashboard",
            identify: !0,
            condition: function() {
                return !1
            }
        },
        "^/address_book/groups": {
            load: function() {
                return !0
            },
            page: "Loaded Reporting Dashboard",
            identify: !0,
            condition: function() {
                return !1
            }
        },
        "^/account": {
            load: function() {
                return !0
            },
            page: "Loaded Account Page",
            identify: !0,
            condition: function() {
                return !1
            }
        },
        "^/signup$": {
            load: function() {
                return !0
            },
            page: "Loaded Signup Page",
            identify: !0
        },
        "^/login$": {
            load: function() {
                return !0
            },
            page: "Loaded Login Page",
            identify: !0
        },
        "^/profile": {
            load: function() {
                return !0
            },
            page: "Loaded Profile Page",
            identify: !0,
            condition: function() {
                return !1
            }
        },
        "^/packages": {
            load: function() {
                return !0
            },
            page: "Loaded packages Page",
            identify: !0,
            condition: function() {
                return !1
            }
        },
        "^/purchase": {
            load: function() {
                return !0
            },
            page: "Loaded purchase Page",
            identify: !0,
            condition: function() {
                return !1
            }
        },
        "^/$": {
            load: function() {
                return !0
            },
            page: pageName,
            identify: !0,
            reset: function() {
                return !0
            }
        },
        "^/sites/view/": {
            load: function() {
                return !0
            },
            page: pageName,
            identify: !0,
            reset: function() {
                return !0
            }
        },
        "/experiential$": {
            load: function() {
                return !0
            },
            page: "Loaded " + window.location.pathname.replace("/", "").toUpperCase() + " Page",
            identify: !0,
            reset: function() {
                return !0
            }
        },
        "/(press|terms|careers|privacy|about|ab|enterprise|experiential|halloffame|upgrade|packages|pricing|ebook.best.event.email.marketing.plan|resources|features?)$": {
            load: function() {
                return !0
            },
            page: "Loaded " + window.location.pathname.replace("/", "").toUpperCase() + " Page",
            identify: !0,
            reset: function() {
                return !0
            }
        }
    }, _initPage = function(pathname) {
            var page_name = pathnames[pathname].page;
            _page(null, page_name)
        }, _init = function() {
            if ("undefined" != typeof splash.server && "undefined" != typeof splash.server.constants && "undefined" != typeof splash.server.constants.segment_write_key && "" != splash.server.constants.segment_write_key) {
                ("undefined" == typeof splash.server.constants.ocbDomain || "splashthat.com" == splash.server.constants.ocbDomain) && (log = !1);
                var currentPathname = window.location.pathname;
                for (var pathname in pathnames) {
                    var re = new RegExp(pathname);
                    if (currentPathname.match(re) && ("undefined" == typeof pathnames[pathname].load || pathnames[pathname].load())) {
                        var analyticsSettings = pathnames[pathname];
                        _load(function() {
                            _reset(analyticsSettings, function() {
                                "undefined" != typeof pathnames[pathname].identify ? ("undefined" != typeof splash.server.constants.analyticsAlias && splash.server.constants.analyticsAlias && _alias(), _identify(function() {
                                    _initPage(pathname)
                                })) : "undefined" != typeof pathnames[pathname].page && _initPage(pathname)
                            })
                        });
                        break
                    }
                }
            }
        }, _load = function(callback) {


            if (active) {
                var name = name ? name : $(document).find("title").text();
                properties = properties ? properties : {}, options = options ? options : {}, "undefined" != typeof window.location.hash && (properties.hash = window.location.hash), "undefined" != typeof splash.server._event && ("undefined" != typeof splash.server._event.id && (properties.event_id = splash.server._event.id), "undefined" != typeof splash.server._event.domain && "undefined" != typeof splash.server._event.domain.effective && (properties.event_domain = splash.server._event.domain.effective)), "undefined" != typeof splash.server._user && ("undefined" != typeof splash.server._user.id && (properties.user_id = splash.server._user.id, options.userId = splash.server._user.id), "undefined" != typeof splash.server._user.admin && (properties.admin = splash.server._user.admin, options.admin = splash.server._user.admin)), "undefined" != typeof $.browser && ("undefined" != typeof $.browser.name && (properties.browser = $.browser.name), "undefined" != typeof $.browser.fullVersion && (properties.browser_version = $.browser.fullVersion), "undefined" != typeof $.browser.device && (properties.device = 0 != typeof $.browser.device ? $.browser.device : "non-mobile")), "undefined" != typeof navigator && "undefined" != typeof navigator.userAgent && (properties.user_agent = navigator.userAgent), analytics.page(category, name, properties, options, callback), log && _log("page. " + name)
            }
        }, _identify = function(callback) {
            if (active && "undefined" != typeof splash.server._user && "undefined" != typeof splash.server._user.anonymousId) {
                var user_id = "undefined" != typeof splash.server._user.id ? splash.server._user.id : null;
                analytics.identify(user_id, {}, {}, callback), _log("identify.")
            }
        }, _track = function(event_name, properties, options, callback) {
            if (active) {
                properties = properties ? properties : {}, options = options ? options : {}, "undefined" != typeof window.location.href && (properties.path = window.location.href), "undefined" != typeof splash.server._user && ("undefined" != typeof splash.server._user.id && (properties.user_id = splash.server._user.id, options.userId = splash.server._user.id), "undefined" != typeof splash.server._user.organization_id && (properties.user_organization_id = splash.server._user.organization_id, options.userOrganizationId = splash.server._user.organization_id), "undefined" != typeof splash.server._user.created && (properties.user_signup_date = splash.server._user.created, options.userSignupDate = splash.server._user.created), "undefined" != typeof splash.server._user.admin && (properties.admin = splash.server._user.admin, options.admin = splash.server._user.admin)), "undefined" != typeof splash.server._event && ("undefined" != typeof splash.server._event.id && (properties.event_id = splash.server._event.id), "undefined" != typeof splash.server._event.domain && "undefined" != typeof splash.server._event.domain.effective && (properties.event_domain = splash.server._event.domain.effective)), "undefined" != typeof $.browser && ("undefined" != typeof $.browser.name && (properties.browser = $.browser.name), "undefined" != typeof $.browser.fullVersion && (properties.browser_version = $.browser.fullVersion), "undefined" != typeof $.browser.device && (properties.device = 0 != typeof $.browser.device ? $.browser.device : "non-mobile")), "undefined" != typeof navigator && "undefined" != typeof navigator.userAgent && (properties.user_agent = navigator.userAgent), $.ajax({
                    url: "/tracking/add",
                    type: "POST",
                    global: !1,
                    data: {
                        items: [{
                            event_name: event_name,
                            properties: properties,
                            options: options
                        }]
                    },
                    success: function() {},
                    error: function() {}
                }), analytics.track(event_name, properties, options, callback);
                var logMessage = event_name;
                properties.message && (logMessage += ". " + properties.message), _log("event. " + logMessage)
            }
        }, _alias = function() {
            "undefined" != typeof splash.server._user && "undefined" != typeof splash.server._user.id ? (analytics.alias(splash.server._user.id), _log("alias.")) : _log("alias error: undefined ids.")
        }, _reset = function(analyticsSettings, callback) {
            "undefined" != typeof analyticsSettings.reset && analyticsSettings.reset() && ("undefined" != typeof mixpanel && mixpanel.cookie && mixpanel.cookie.clear(), _log("Mixpanel reset."), analytics.reset(), _log("Reset.")), "function" == typeof callback && callback()
        }, _trackError = function(errorCode, message, otherData) {
            if (trackingParams = {
                errorCode: errorCode,
                message: message
            }, otherData)
                for (var i in otherData) trackingParams[i] = otherData[i];
            _track("Error", trackingParams)
        }, _isActive = function() {
            return active
        }, _setLog = function(bool) {
            return "undefined" == typeof bool || null == bool ? log : void(log = bool)
        }, _log = function(message) {
            log && console.log("Segment " + message)
        };
    return {
        init: _init,
        load: _load,
        page: _page,
        identify: _identify,
        reset: _reset,
        track: _track,
        trackError: _trackError,
        isActive: _isActive,
        setLog: _setLog
    }
}(jQuery), splash.analytics.init(), $(document).on("mousedown", ".nu-dropdown", function() {
    var $this = $(this);
    bindSplashDropdown($this, !0)
}), $(document).on("click", ".nu-accord", function() {
    bindSplashAccordion($(this), !0)
}), $(document).on("mouseover", ".nu-tiptip", function() {
    var $this = $(this);
    $this.data("splash-tip") !== !0 && ($this.data("splash-tip", !0), bindSplashTip($this))
}), $(document).on("click", ".nu-checkbox", function(e) {
    "undefined" != typeof e && e.preventDefault && e.preventDefault();
    var $this = $(this);
    $this.data("splash-check") !== !0 && ($this.data("splash-check", !0), bindSplashCheck($this))
}), $(document).on("click", ".nu-radio", function(ev) {
    var $this = $(this);
    $this.data("splash-radio") !== !0 && ($this.data("splash-radio", !0), bindSplashRadio($this, ev))
}), $(document).on("click", "a", function(event) {
    "#" == $(this).attr("href") && event.preventDefault()
}), $(document).ready(function() {
    new Object;
    $("#firstViewCloseWrap").on("click", ".viewCloseBtn", function() {
        $("body").removeClass("firstViewOpen")
    }), $("#flashMessage").length > 0 && setTimeout(function() {
        $("#flashMessage").fadeOut()
    }, 7e3), $("i.close-flash-message").click(function() {
        $("#flashMessage").fadeOut(500)
    }), $("#signin-link").click(function(event) {
        event.preventDefault();
        var $this = $(this),
            $form = $("#quick-signin");
        return $this.hasClass("in-progress") ? !1 : ($this.addClass("in-progress"), void($this.hasClass("open") ? ($this.removeClass("open"), $form.slideUp(100, function() {
            $form.css("height", "0px"), $this.removeClass("in-progress")
        })) : ($this.addClass("open"), $form.show().animate({
            height: "110px"
        }, 500, "easeOutBounce", function() {
            $form.find("input:first").focus(), $this.removeClass("in-progress")
        }))))
    });
    var bC = [];
    for (var i in $.browser) "version" != i && bC.push(i);
    $("body").addClass(bC.join(" "));
    var $input_address_autocomplete = $("input.address-autocomplete");
    $input_address_autocomplete.length && setAddressAutocomplete($input_address_autocomplete);
    var $input_short_date = $("input.input-type-short-date");
    $input_short_date.datepicker({
        dateFormat: "mm/dd/yy"
    });
    var $input_short_date = $("input.input-type-time");
    $input_short_date.length && ($input_short_date.closest("#rsvp-form-inner").length > 0 ? $input_short_date.timepicker({
        appendTo: "#rsvp-form-inner"
    }) : $input_short_date.closest("#cc-form").length > 0 ? $input_short_date.timepicker({
        appendTo: "#cc-form"
    }) : $input_short_date.timepicker()), $(".simple-modal-closing-layer").on("click", function(event) {
        "simple-modal-ajax" == splash.modal.stack.getCurrent() && $("#custom-style-editor-header").length || (event.preventDefault(), closeSimpleModal())
    }), $("html").keyup(function(e) {
        27 == e.which && !splash.finetune && splash.modal.stack.getCurrent() && closeSimpleModal()
    })
});
var wasOpen = !1,
    typingTimer, domain_focus = !1,
    doneTypingInterval = 750,
    previousVal = "";
$(document).on("click", ".simple-reveal", function() {
    var $link = $(this);
    fireAjaxModal($link)
}), $(document).on("click", ".closeSimpleModal, a.close-modal-link, .close-modal, .simple-modal .close-simple-modal", function(event) {
    event.preventDefault(), $(this).hasClass("close-persistent") ? closeSimpleModal({
        persistent: !0
    }) : closeSimpleModal()
}), $(document).on("click", ".sleeker .sections-nav .section", function() {
    var $self = $(this),
        $modal = $self.parents(".simple-modal:first"),
        section = $self.attr("data-opt");
    return section && ($modal.find(".content-container").removeClass("active").addClass("hide").end().find('.content-container[data-opt="' + section + '"]').addClass("active").removeClass("hide"), splash.analytics.track("Viewed Section Category", {
        type: "add-new-element" === splash.modal.getCurrent().attr("id") ? "element" : "block",
        category: section
    })), $modal.find(".sections-nav .section").removeClass("active"), $self.addClass("active"), !1
}), splash.modal = function($) {
    return {
        getCurrent: function() {
            var current = splash.modal.stack.getCurrent();
            if (current && current.id) {
                var id = current.id;
                return $("#" + id)
            }
            return $()
        }
    }
}(jQuery), splash.modal.stack = function() {
    return stack = [], currentModal = null, {
        pop: function() {
            return currentModal = stack.pop()
        },
        put: function(modal, persistent) {
            "string" == typeof modal && (modal = {
                id: modal
            }), persistent && 1 == persistent && (modal.persistent = 1), stack.push(currentModal), currentModal = modal
        },
        getCurrent: function() {
            return currentModal
        },
        editCurrent: function(modalId, params) {
            currentModal = {
                id: modalId,
                params: params
            }
        },
        getStack: function() {
            return stack
        },
        clear: function() {
            stack = []
        },
        isOpen: function(modalId) {
            if (currentModal && currentModal.id == modalId) return !0;
            for (var i in stack)
                if (stack[i] && stack[i].id == modalId) return !0;
            return !1
        }
    }
}(jQuery);
var togglePageLoading = function(isLoading) {
    isLoading ? $("body").addClass("loading-page") : $("body").removeClass("loading-page")
}, SplashUI = function() {
        {
            var $alertHolder = null,
                isModalOpen = !1,
                _confirm = function(callback, message, button, thisClass, dontClose, params) {
                    isModalOpen && _hideGrowl(), params || (params = {}), this.hideGrowl();
                    var btnText = "Confirm",
                        label = params && params.label ? params.label : "Heads Up:";
                    "undefined" != typeof button && 0 != button && "" != button && (btnText = button);
                    var nuClass = "";
                    "undefined" != typeof thisClass && 0 != thisClass && (nuClass = thisClass);
                    var html = '<div class="splashui-inner ' + nuClass + '"><p class="splashui-title">' + label + "</p><p>" + message + '</p><button data-confirm-response="1" class="nu-btn nu-btn-sleek splashui-confirm-btn">' + btnText + '</button><button data-confirm-response="0" class="nu-btn nu-btn-sleek plain">Cancel</button></div>',
                        $modal = $("<div />", {
                            html: html,
                            "class": "splashui-confirm"
                        }).appendTo("body"),
                        handleResponse = function(response) {
                            response ? callback.call(null, !0) : callback.call(null, !1), dontClose && 0 != response || ($modal.fadeOut(300, function() {
                                $(this).remove()
                            }), $(document).off("keyup.closeConfirm")), isModalOpen = !1
                        };
                    $modal.find("input[type=text]:first").length ? $modal.find("input[type=text]:first").focus() : $modal.find('button[data-confirm-response="1"]').focus(), $modal.find("[data-confirm-response]").on("click", function() {
                        handleResponse("1" == $(this).data("confirm-response"))
                    }), $modal.on("click", function(e) {
                        e.stopPropagation()
                    }), $(document).on("keyup.closeConfirm", function(e) {
                        27 === e.keyCode && handleResponse(!1)
                    }), isModalOpen = !0
                }, _hideGrowl = function() {
                    $("#growl-holder").empty(), $(".splashui-confirm,splashui-inner").fadeOut(300, function() {
                        $(".splashui-confirm,splashui-inner").remove()
                    }), isModalOpen = !1
                }, _isModalOpen = function() {
                    return isModalOpen
                }, _notify = function(message, modal_class, stick_duration) {
                    this.hideGrowl();
                    var modal_class = modal_class ? modal_class + " splashui-growl" : "splashui-growl plain",
                        html = '<div class="splashui-inner"><p>' + message + '</p><button data-dismiss="1" class="nu-btn nu-btn-sleek splashui-confirm-btn">OK</button></div>',
                        $modal = $("<div />", {
                            html: html,
                            "class": modal_class
                        }).appendTo($alertHolder),
                        timer = null,
                        closeModal = function() {
                            $modal.fadeOut(function() {
                                $(this).remove()
                            }), clearTimeout(timer)
                        }, default_stick_duration = 4e3;
                    stick_duration !== !1 && (timer = setTimeout(function() {
                        closeModal()
                    }, stick_duration || default_stick_duration)), $modal.on("click", function(e) {
                        e.stopPropagation()
                    }), $modal.find("[data-dismiss]").on("click", function() {
                        closeModal()
                    }), isModalOpen = !0
                }, _ask = function(callback, message, confirm_btn_text, stick_duration) {
                    var confirm_btn_text = confirm_btn_text || "Confirm",
                        html = '<div class="splashui-inner"><p class="splashui-title">Heads Up:</p><p>' + message + '</p><button data-confirm-response="1" class="nu-btn nu-btn-sleek splashui-confirm-btn">' + confirm_btn_text + '</button><button data-confirm-response="0" class="nu-btn nu-btn-sleek link x-close"></button></div>',
                        $modal = $("<div />", {
                            html: html,
                            "class": "splashui-growl ask"
                        }),
                        handleResponse = function(response) {
                            response ? callback.call(null, !0) : callback.call(null, !1), $modal.fadeOut(300, function() {
                                $(this).remove()
                            }), $(document).off("keyup.closeGrowl")
                        }, timer = null,
                        closeModal = function() {
                            $modal.fadeOut(function() {
                                $(this).remove()
                            }), clearTimeout(timer)
                        }, default_stick_duration = 5e3;
                    stick_duration !== !1 && (timer = setTimeout(function() {
                        closeModal()
                    }, stick_duration || default_stick_duration)), $alertHolder.html($modal), $modal.on("click", function(e) {
                        e.stopPropagation()
                    }), $modal.find('button[data-confirm-response="1"]').focus(), $modal.find("[data-confirm-response]").on("click", function() {
                        handleResponse("1" == $(this).data("confirm-response"))
                    }), $modal.on("click", function(e) {
                        e.stopPropagation()
                    }), isModalOpen = !0
                };
            ! function() {
                $(function() {
                    $alertHolder = $("<div />", {
                        id: "growl-holder"
                    }).appendTo("body")
                })
            }()
        }
        return {
            confirm: _confirm,
            notify: _notify,
            ask: _ask,
            hideGrowl: _hideGrowl,
            isModalOpen: _isModalOpen
        }
    }();
if (splash.eventIndex = function($) {
    var _getEventCardTemplate = function() {
        return $("#template-dashboard-hub-card .event-card").clone()
    };
    return {
        eventCard: function(eventData, event_cards_view) {
            if ("undefined" == typeof eventData) return !1;
            var title = eventData.Event.title,
                event_id = eventData.Event.id,
                extra_classes = {
                    card: "",
                    chkbox: ""
                }, venue_name = "",
                venue_city = "",
                imgUrl = eventData.image;
            "" != eventData.Event.venue_name && null != eventData.Event.venue_name ? venue_name = eventData.Event.venue_name : "" != eventData.Event.address && null != eventData.Event.address && (venue_name = eventData.Event.address), "" != eventData.Event.city && null != eventData.Event.city && (venue_city = eventData.Event.city, "" != eventData.Event.state && null != eventData.Event.state && (venue_city += ", " + eventData.Event.state)), "undefined" != typeof eventData.date_tbd && (eventData.start_day = "Date", eventData.start_month = "TBD"), 1 == eventData.EventSetting.venue_tbd ? (venue_name = "Venue TBD", venue_city = "", extra_classes.card += " venue-tbd ") : "" == venue_name && "" == venue_city && (extra_classes.card += " no-venue "), "undefined" != typeof massSelect && massSelect && (extra_classes.card += "selected", extra_classes.chkbox += "checked"), "undefined" != typeof eventData.EventContact && "0" == eventData.EventContact.confirmed && (extra_classes.card += "joinEvent");
            var $eventCard = _getEventCardTemplate();
            if ("undefined" != typeof eventData.Event.hub_listing && eventData.Event.hub_listing > 0 && (extra_classes.card += " in-hub ", $eventCard.find(".event-card-hub-icon").removeClass("hide").addClass("inHubIcon").find(".iconText").text("In Hub")), "1" == eventData.Event.hub && (extra_classes.card += " hub ", $eventCard.find(".event-card-hub-icon").removeClass("hide").addClass("hubIcon").find(".iconText").text("Event Hub")), "1" == eventData.Event.external && (extra_classes.card += " external hide ", $eventCard.find(".event-card-external-icon").removeClass("hide").addClass("externalIcon"), imgUrl = "/images/event-profile-image-index.jpg"), "undefined" != typeof eventData.stats.counts) {
                var rsvpCount = eventData.stats.counts ? addCommas(eventData.stats.counts) : 0;
                if ($eventCard.find(".rsvp-count").removeClass("hide").find(".value").text(rsvpCount), eventData.stats.is_converted_to_tickets_from_rsvp && "tickets" == eventData.EventSetting.rsvp_method) var numeral = "Attendees";
                else if ("collect" == eventData.EventSetting.rsvp_method) var numeral = "Attendees";
                else var numeral = "Tickets Sold";
                1 == rsvpCount && (numeral = numeral.replace("Attendees", "Attendee").replace("Tickets", "Ticket")), $eventCard.find(".rsvp-count .text").text(numeral)
            }
            if ("undefined" != typeof eventData.Statistic && "undefined" != typeof eventData.Statistic.hits && null != eventData.Statistic.hits) {
                var viewCount = eventData.Statistic.hits ? addCommas(eventData.Statistic.hits) : 0;
                $eventCard.find(".page-views .value").text(viewCount), $eventCard.find(".page-views .text").text(1 == viewCount ? "View" : "Views")
            }
            return "undefined" != typeof eventData.domain && "" != eventData.domain ? $eventCard.data("domain", eventData.domain) : $eventCard.removeClass("pointer"), $eventCard.attr("event-id", event_id).addClass(extra_classes.card).find(".event-card-bg").attr("event-id", event_id).find(".the-image").css("background", "url('" + imgUrl + "')").end().end().find("label.nu-checkbox").addClass(extra_classes.chkbox).find("input").attr("id", "event-checkbox-" + event_id).end().end().find(".short-date span").text(eventData.start_month.substring(4)).end().find(".short-date small").text(eventData.start_month.substr(0, eventData.start_month.length - 3)).end().find(".view-contact-nu").attr("id", "event-" + event_id).find(".name").text(title).end().find(".venueName").text(venue_name).end().find(".venueCityState").text(venue_city).end().find(".dow").text(eventData.start_day).end().find(".monthDay").text(eventData.start_month).end(), "undefined" != typeof event_cards_view && "hub_modal" == event_cards_view && $eventCard.find(".quick-utils, .viewPageSettings, .viewPageLink, .nu-checkbox").remove(), $eventCard
        },
        eventRow: function(eventData) {
            if ("undefined" == typeof eventData) return !1;
            var event_id = (eventData.Event.title, eventData.Event.id),
                extra_classes = {
                    card: "",
                    chkbox: ""
                }, venue_name = "",
                venue_city = "";
            "" != eventData.Event.venue_name && null != eventData.Event.venue_name ? venue_name = eventData.Event.venue_name : "" != eventData.Event.address && null != eventData.Event.address && (venue_name = eventData.Event.address), "" != eventData.Event.city && null != eventData.Event.city && (venue_city = eventData.Event.city, "" != eventData.Event.state && null != eventData.Event.state && (venue_city += ", " + eventData.Event.state)), "undefined" != typeof eventData.date_tbd && (eventData.start_day = "Date", eventData.start_month = "TBD"), 1 == eventData.EventSetting.venue_tbd ? (venue_name = "Venue TBD", venue_city = "", extra_classes.card += " venue-tbd ") : "" == venue_name && "" == venue_city && (extra_classes.card += " no-venue "), "1" == eventData.Event.hub && (extra_classes.card += " hub "), "undefined" != typeof eventData.Event.hub_listing && eventData.Event.hub_listing > 0 && (extra_classes.card += " in-hub "), "present" == eventData.status && (eventData.status = "in progress"), extra_classes.card += " " + eventData.status + " ", "undefined" != typeof eventData.EventContact && "0" == eventData.EventContact.confirmed && (extra_classes.card += "joinEvent");
            var uniqueRecipientCount = "undefined" != typeof eventData.stats.unique_recipient_count ? eventData.stats.unique_recipient_count : "-",
                $eventRow = '<tr event-id="' + event_id + '" class="event-card ' + extra_classes.card + '"><td class="event-input"><label class="nu-checkbox selector"><input type="hidden"></label></td><td class="event-title">' + eventData.Event.title + '</td><td class="event-date">' + eventData.shorter_date + '</td><td class="event-status">' + eventData.status + '</td><td class="event-uniques">' + eventData.stats.uniques + '</td><td class="event-hits">' + eventData.stats.pageviews + '</td><td class="event-invites">' + uniqueRecipientCount + '</td><td class="rsvps-number">' + eventData.stats.rsvps + '</td><td class="rsvps-percent">' + eventData.stats.rsvp_percentage + '</td><td class="checkin-number">' + eventData.stats.checkins + '</td><td class="checkin-percent">' + eventData.stats.checked_in_percentage + "</td></tr>";
            return $eventRow
        }
    }
}(jQuery), timezoneDetector = function($) {
    var _getTimezone = function(lat, lng, callback) {
        $.ajax({
            url: "https://maps.googleapis.com/maps/api/timezone/json?location=" + lat + "," + lng + "&timestamp=" + Math.round((new Date).getTime() / 1e3).toString() + "&sensor=false"
        }).done(function(response) {
            "function" == typeof callback && callback(response)
        }).fail(function(xhr, options, error) {
            console.log("timezoneDetector error, Response: " + xhr.status + " - " + error), "function" == typeof callback && callback()
        })
    };
    return {
        getTimezone: _getTimezone
    }
}(jQuery), $.fn.fireSimpleModal = function(args) {
    var $modal = $(this);
    $("body").addClass("lockItUp showSimple");
    var $wrap = $("#simple-modal-wrap");
    args = args ? args : {}, "edit-settings" == $modal.attr("id") && splash.modal.settings.prepare($modal, args), "undefined" != typeof args.mode ? $modal.attr("mode", args.mode) : $modal.removeAttr("mode");
    var currentModal = splash.modal.stack.getCurrent();
    if (currentModal && "edit-settings" == currentModal.id) {
        var currentTab = splash.modal.settings.getActiveSettingsTab();
        splash.modal.stack.editCurrent("edit-settings", {
            tab: currentTab
        })
    }
    var persistent = args.persistent ? args.persistent : 0;
    return "undefined" != typeof args.fromStack && args.fromStack || splash.modal.stack.put($modal.attr("id"), persistent), $wrap.show().find(".simple-modal-flow-control > .simple-modal, #simple-modal-ajax").hide(), $modal.show().css("display", "inline-block"), "undefined" != typeof openModal && (openModal = !0), $modal
}, splash.module = {}, splash.module.tags = function($) {
    var _removedTags = [],
        _flagRemovedTag = function(tagName) {
            _removedTags.push(tagName)
        };
    return {
        compile: function($tagsInput, params) {
            var tagsArray = $tagsInput.tagit("assignedTags"),
                tags = [];
            params || (params = {});
            for (var i in tagsArray) {
                var thisTag = {
                    name: tagsArray[i]
                };
                params.forced_event_id ? thisTag.event_id = params.forced_event_id : splash.server && splash.server._event && (thisTag.event_id = splash.server._event.id), tags.push(thisTag)
            }
            for (var i in _removedTags) {
                var thisTag = {
                    name: _removedTags[i],
                    deleted: 1
                };
                splash.server && splash.server._event && (thisTag.event_id = splash.server._event.id), tags.push(thisTag)
            }
            return _removedTags = [], tags
        },
        clearAll: function($tagsInput) {
            $tagsInput.tagit("removeAll")
        },
        addTag: function($tagsInput, tagName) {
            $tagsInput.tagit("createTag", tagName)
        },
        init: function($tagsInput) {
            return "undefined" == typeof $.fn.tagit ? void console.log("Error: couldn't initialize tagit, library not found") : (_removedTags = [], void $tagsInput.tagit({
                allowSpaces: !0,
                afterTagRemoved: function(event, ui) {
                    _flagRemovedTag(ui.tagLabel)
                }
            }).on("change", function() {
                $tagsInput.addClass("changes-made")
            }))
        }
    }
}(jQuery), !jQuery.browser) {
    jQuery.browser = {}, jQuery.browser.mozilla = !1, jQuery.browser.webkit = !1, jQuery.browser.opera = !1, jQuery.browser.safari = !1, jQuery.browser.chrome = !1, jQuery.browser.msie = !1, jQuery.browser.android = !1, jQuery.browser.blackberry = !1, jQuery.browser.ios = !1, jQuery.browser.operaMobile = !1, jQuery.browser.windowsMobile = !1, jQuery.browser.mobile = !1, jQuery.browser.device = !1;
    var mobileDevices = ["android", "ios", "blackberry", "operaMobile", "windowsMobile"],
        nAgt = navigator.userAgent;
    jQuery.browser.ua = nAgt, jQuery.browser.name = navigator.appName, jQuery.browser.fullVersion = "" + parseFloat(navigator.appVersion), jQuery.browser.majorVersion = parseInt(navigator.appVersion, 10);
    var nameOffset, verOffset, ix;
    if (-1 != (verOffset = nAgt.indexOf("Opera"))) jQuery.browser.opera = !0, jQuery.browser.name = "Opera", jQuery.browser.fullVersion = nAgt.substring(verOffset + 6), -1 != (verOffset = nAgt.indexOf("Version")) && (jQuery.browser.fullVersion = nAgt.substring(verOffset + 8));
    else if (-1 != (verOffset = nAgt.indexOf("MSIE"))) jQuery.browser.msie = !0, jQuery.browser.name = "Microsoft Internet Explorer", jQuery.browser.fullVersion = nAgt.substring(verOffset + 5);
    else if (-1 != nAgt.indexOf("Trident")) {
        jQuery.browser.msie = !0, jQuery.browser.name = "Microsoft Internet Explorer";
        var start = nAgt.indexOf("rv:") + 3,
            end = start + 4;
        jQuery.browser.fullVersion = nAgt.substring(start, end)
    } else -1 != (verOffset = nAgt.indexOf("Chrome")) ? (jQuery.browser.webkit = !0, jQuery.browser.chrome = !0, jQuery.browser.name = "Chrome", jQuery.browser.fullVersion = nAgt.substring(verOffset + 7)) : -1 != (verOffset = nAgt.indexOf("Safari")) ? (jQuery.browser.webkit = !0, jQuery.browser.safari = !0, jQuery.browser.name = "Safari", jQuery.browser.fullVersion = nAgt.substring(verOffset + 7), -1 != (verOffset = nAgt.indexOf("Version")) && (jQuery.browser.fullVersion = nAgt.substring(verOffset + 8))) : -1 != (verOffset = nAgt.indexOf("AppleWebkit")) ? (jQuery.browser.webkit = !0, jQuery.browser.name = "Safari", jQuery.browser.fullVersion = nAgt.substring(verOffset + 7), -1 != (verOffset = nAgt.indexOf("Version")) && (jQuery.browser.fullVersion = nAgt.substring(verOffset + 8))) : -1 != (verOffset = nAgt.indexOf("Firefox")) ? (jQuery.browser.mozilla = !0, jQuery.browser.name = "Firefox", jQuery.browser.fullVersion = nAgt.substring(verOffset + 8)) : (nameOffset = nAgt.lastIndexOf(" ") + 1) < (verOffset = nAgt.lastIndexOf("/")) && (jQuery.browser.name = nAgt.substring(nameOffset, verOffset), jQuery.browser.fullVersion = nAgt.substring(verOffset + 1), jQuery.browser.name.toLowerCase() == jQuery.browser.name.toUpperCase() && (jQuery.browser.name = navigator.appName));
    if (jQuery.browser.android = /Android/i.test(nAgt), jQuery.browser.blackberry = /BlackBerry/i.test(nAgt), jQuery.browser.ios = /iPhone|iPad|iPod/i.test(nAgt), jQuery.browser.operaMobile = /Opera Mini/i.test(nAgt), jQuery.browser.windowsMobile = /IEMobile/i.test(nAgt), jQuery.browser.mobile = jQuery.browser.android || jQuery.browser.blackberry || jQuery.browser.ios || jQuery.browser.windowsMobile || jQuery.browser.operaMobile, mobileDevices.forEach(function(el) {
        jQuery.browser[el] && (jQuery.browser.device = el)
    }), -1 != (ix = jQuery.browser.fullVersion.indexOf(";")) && (jQuery.browser.fullVersion = jQuery.browser.fullVersion.substring(0, ix)), -1 != (ix = jQuery.browser.fullVersion.indexOf(" ")) && (jQuery.browser.fullVersion = jQuery.browser.fullVersion.substring(0, ix)), jQuery.browser.majorVersion = parseInt("" + jQuery.browser.fullVersion, 10), isNaN(jQuery.browser.majorVersion) && (jQuery.browser.fullVersion = "" + parseFloat(navigator.appVersion), jQuery.browser.majorVersion = parseInt(navigator.appVersion, 10)), jQuery.browser.version = jQuery.browser.majorVersion, null != navigator.plugins && navigator.plugins.length > 0) jQuery.browser.flash = navigator.plugins["Shockwave Flash"] && !0;
    else if (~navigator.userAgent.toLowerCase().indexOf("webtv")) jQuery.browser.flash = !0;
    else if (~navigator.appVersion.indexOf("MSIE") && !~navigator.userAgent.indexOf("Opera")) try {
        jQuery.browser.flash = new ActiveXObject("ShockwaveFlash.ShockwaveFlash") && !0
    } catch (e) {}
    "undefined" != typeof jQuery.browser.flash && jQuery.browser.flash || (jQuery.browser.flash = !1)
}
var ImageLoader = function(url) {
    this.url = url, this.image = null, this.loadEvent = null
};
ImageLoader.prototype = {
    load: function() {
        this.image = document.createElement("img");
        var url = this.url;
        if ("" != url) {
            var image = this.image,
                loadEvent = this.loadEvent;
            addListener(this.image, "load", function() {
                null != loadEvent && loadEvent(url, image)
            }, !1), this.image.src = this.url
        }
    },
    getImage: function() {
        return this.image
    }
};
//# sourceMappingURL=base-libs.js.map

coded by Privdayz.com - Visit https://privdayz.com/ for more php shells.
A key player at the mall | Lemmon Lines

Subscribe
  • KIWI ROTATING AD
  • VB OUTLETS AD
  • CHIAZENZA ad
  • Banner Ad 2 – Mr. Oil
  • Banner ad – GHO Homes
  • Banner Ad – Porch Factory

Subscribe
Lemmon Lines - Vero Beach Blog & Newsletter
Lemmon Lines - Vero Beach Blog & Newsletter