{
  "version": 3,
  "sources": ["../../../../../shared/node_modules/@rails/actioncable/src/adapters.js", "../../../../../shared/node_modules/@rails/actioncable/src/logger.js", "../../../../../shared/node_modules/@rails/actioncable/src/connection_monitor.js", "../../../../../shared/node_modules/@rails/actioncable/src/internal.js", "../../../../../shared/node_modules/@rails/actioncable/src/connection.js", "../../../../../shared/node_modules/@rails/actioncable/src/subscription.js", "../../../../../shared/node_modules/@rails/actioncable/src/subscription_guarantor.js", "../../../../../shared/node_modules/@rails/actioncable/src/subscriptions.js", "../../../../../shared/node_modules/@rails/actioncable/src/consumer.js", "../../../../../shared/node_modules/@rails/actioncable/src/index.js", "../../../../../shared/node_modules/@stripe/stripe-js/dist/pure.js", "../../../../../shared/node_modules/@stripe/stripe-js/pure/index.js", "../../../../../shared/node_modules/jquery/dist/jquery.js", "../../../../../shared/node_modules/bootbox/dist/bootbox.js", "../../../../../shared/node_modules/@rails/ujs/app/assets/javascripts/rails-ujs.js", "../../../../../shared/node_modules/bootstrap/js/transition.js", "../../../../../shared/node_modules/bootstrap/js/alert.js", "../../../../../shared/node_modules/bootstrap/js/button.js", "../../../../../shared/node_modules/bootstrap/js/carousel.js", "../../../../../shared/node_modules/bootstrap/js/collapse.js", "../../../../../shared/node_modules/bootstrap/js/dropdown.js", "../../../../../shared/node_modules/bootstrap/js/modal.js", "../../../../../shared/node_modules/bootstrap/js/tooltip.js", "../../../../../shared/node_modules/bootstrap/js/popover.js", "../../../../../shared/node_modules/bootstrap/js/scrollspy.js", "../../../../../shared/node_modules/bootstrap/js/tab.js", "../../../../../shared/node_modules/bootstrap/js/affix.js", "../../../../../shared/node_modules/bootstrap/dist/js/npm.js", "../../../../../shared/node_modules/bootstrap/dist/css/bootstrap.css", "../../javascript/components/bootstrap/bootstrap_print.css", "../../javascript/components/bootstrap/auto-dropup.js", "../../../../../shared/node_modules/select2/select2.js", "../../javascript/components/select2/select2_sortable.js", "../../../../../shared/node_modules/select2/select2_locale_de.js", "../../../../../shared/node_modules/select2/select2.css", "../../javascript/components/select2/select2-bootstrap.css", "../../javascript/components/select2/select2-kurso.scss", "../../javascript/components/select2/select2-sortable.css", "../../../../../shared/node_modules/bootbox/dist/bootbox.locales.js", "../../../../../shared/node_modules/@hotwired/stimulus/dist/stimulus.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/lib/utils.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/lib/date.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/lib/date-format.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/lib/dom.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/lib/event.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/i18n/base-locales.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/options/defaultOptions.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/options/processOptions.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/options/shortcutKeys.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/picker/templates/pickerTemplate.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/picker/templates/daysTemplate.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/picker/templates/weekNumbersTemplate.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/picker/views/View.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/picker/views/DaysView.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/picker/views/MonthsView.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/picker/views/YearsView.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/events/functions.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/events/pickerListeners.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/picker/Picker.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/events/elementListeners.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/events/otherListeners.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/Datepicker.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/i18n/locales/de.js", "../../../../../shared/node_modules/vanillajs-datepicker/js/i18n/locales/en-CA.js", "../../javascript/components/datepicker/locales.js", "../../javascript/controllers/datepicker.controller.js", "../../../../../shared/node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../../../../shared/node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js", "../../../../../shared/node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js", "../../../../../shared/node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js", "../../../../../shared/node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js", "../../../../../shared/node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js", "../../javascript/controllers/invoice-item-selector.controller.js", "../../javascript/controllers/radio-toggle.controller.js", "../../javascript/controllers/stripe-payment.controller.js", "../../../../../shared/node_modules/@stimulus-components/reveal/dist/stimulus-reveal-controller.mjs", "../../javascript/controllers/timer.controller.js", "../../javascript/controllers/address-autocomplete.controller.js", "../../javascript/components/prevent_number_input_scroll.js", "../../javascript/vendor/jquery.js", "../../javascript/vendor/jquery-ui.js", "../../javascript/student_portal.js", "../../javascript/components/bootstrap/index.js", "../../javascript/components/select2/index.js", "../../javascript/components/bootbox.js"],
  "sourcesContent": ["export default {\n  logger: typeof console !== \"undefined\" ? console : undefined,\n  WebSocket: typeof WebSocket !== \"undefined\" ? WebSocket : undefined,\n}\n", "import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n//   ActionCable.logger.enabled = true\n//\n//   Example:\n//\n//   import * as ActionCable from '@rails/actioncable'\n//\n//   ActionCable.logger.enabled = true\n//   ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n  log(...messages) {\n    if (this.enabled) {\n      messages.push(Date.now())\n      adapters.logger.log(\"[ActionCable]\", ...messages)\n    }\n  },\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n  constructor(connection) {\n    this.visibilityDidChange = this.visibilityDidChange.bind(this)\n    this.connection = connection\n    this.reconnectAttempts = 0\n  }\n\n  start() {\n    if (!this.isRunning()) {\n      this.startedAt = now()\n      delete this.stoppedAt\n      this.startPolling()\n      addEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`)\n    }\n  }\n\n  stop() {\n    if (this.isRunning()) {\n      this.stoppedAt = now()\n      this.stopPolling()\n      removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(\"ConnectionMonitor stopped\")\n    }\n  }\n\n  isRunning() {\n    return this.startedAt && !this.stoppedAt\n  }\n\n  recordMessage() {\n    this.pingedAt = now()\n  }\n\n  recordConnect() {\n    this.reconnectAttempts = 0\n    delete this.disconnectedAt\n    logger.log(\"ConnectionMonitor recorded connect\")\n  }\n\n  recordDisconnect() {\n    this.disconnectedAt = now()\n    logger.log(\"ConnectionMonitor recorded disconnect\")\n  }\n\n  // Private\n\n  startPolling() {\n    this.stopPolling()\n    this.poll()\n  }\n\n  stopPolling() {\n    clearTimeout(this.pollTimeout)\n  }\n\n  poll() {\n    this.pollTimeout = setTimeout(() => {\n      this.reconnectIfStale()\n      this.poll()\n    }\n    , this.getPollInterval())\n  }\n\n  getPollInterval() {\n    const { staleThreshold, reconnectionBackoffRate } = this.constructor\n    const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n    const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n    const jitter = jitterMax * Math.random()\n    return staleThreshold * 1000 * backoff * (1 + jitter)\n  }\n\n  reconnectIfStale() {\n    if (this.connectionIsStale()) {\n      logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n      this.reconnectAttempts++\n      if (this.disconnectedRecently()) {\n        logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`)\n      } else {\n        logger.log(\"ConnectionMonitor reopening\")\n        this.connection.reopen()\n      }\n    }\n  }\n\n  get refreshedAt() {\n    return this.pingedAt ? this.pingedAt : this.startedAt\n  }\n\n  connectionIsStale() {\n    return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n  }\n\n  disconnectedRecently() {\n    return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n  }\n\n  visibilityDidChange() {\n    if (document.visibilityState === \"visible\") {\n      setTimeout(() => {\n        if (this.connectionIsStale() || !this.connection.isOpen()) {\n          logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n          this.connection.reopen()\n        }\n      }\n      , 200)\n    }\n  }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n", "export default {\n  \"message_types\": {\n    \"welcome\": \"welcome\",\n    \"disconnect\": \"disconnect\",\n    \"ping\": \"ping\",\n    \"confirmation\": \"confirm_subscription\",\n    \"rejection\": \"reject_subscription\"\n  },\n  \"disconnect_reasons\": {\n    \"unauthorized\": \"unauthorized\",\n    \"invalid_request\": \"invalid_request\",\n    \"server_restart\": \"server_restart\",\n    \"remote\": \"remote\"\n  },\n  \"default_mount_path\": \"/cable\",\n  \"protocols\": [\n    \"actioncable-v1-json\",\n    \"actioncable-unsupported\"\n  ]\n}\n", "import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n  constructor(consumer) {\n    this.open = this.open.bind(this)\n    this.consumer = consumer\n    this.subscriptions = this.consumer.subscriptions\n    this.monitor = new ConnectionMonitor(this)\n    this.disconnected = true\n  }\n\n  send(data) {\n    if (this.isOpen()) {\n      this.webSocket.send(JSON.stringify(data))\n      return true\n    } else {\n      return false\n    }\n  }\n\n  open() {\n    if (this.isActive()) {\n      logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n      return false\n    } else {\n      const socketProtocols = [...protocols, ...this.consumer.subprotocols || []]\n      logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`)\n      if (this.webSocket) { this.uninstallEventHandlers() }\n      this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols)\n      this.installEventHandlers()\n      this.monitor.start()\n      return true\n    }\n  }\n\n  close({allowReconnect} = {allowReconnect: true}) {\n    if (!allowReconnect) { this.monitor.stop() }\n    // Avoid closing websockets in a \"connecting\" state due to Safari 15.1+ bug. See: https://github.com/rails/rails/issues/43835#issuecomment-1002288478\n    if (this.isOpen()) {\n      return this.webSocket.close()\n    }\n  }\n\n  reopen() {\n    logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n    if (this.isActive()) {\n      try {\n        return this.close()\n      } catch (error) {\n        logger.log(\"Failed to reopen WebSocket\", error)\n      }\n      finally {\n        logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n        setTimeout(this.open, this.constructor.reopenDelay)\n      }\n    } else {\n      return this.open()\n    }\n  }\n\n  getProtocol() {\n    if (this.webSocket) {\n      return this.webSocket.protocol\n    }\n  }\n\n  isOpen() {\n    return this.isState(\"open\")\n  }\n\n  isActive() {\n    return this.isState(\"open\", \"connecting\")\n  }\n\n  triedToReconnect() {\n    return this.monitor.reconnectAttempts > 0\n  }\n\n  // Private\n\n  isProtocolSupported() {\n    return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n  }\n\n  isState(...states) {\n    return indexOf.call(states, this.getState()) >= 0\n  }\n\n  getState() {\n    if (this.webSocket) {\n      for (let state in adapters.WebSocket) {\n        if (adapters.WebSocket[state] === this.webSocket.readyState) {\n          return state.toLowerCase()\n        }\n      }\n    }\n    return null\n  }\n\n  installEventHandlers() {\n    for (let eventName in this.events) {\n      const handler = this.events[eventName].bind(this)\n      this.webSocket[`on${eventName}`] = handler\n    }\n  }\n\n  uninstallEventHandlers() {\n    for (let eventName in this.events) {\n      this.webSocket[`on${eventName}`] = function() {}\n    }\n  }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n  message(event) {\n    if (!this.isProtocolSupported()) { return }\n    const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n    this.monitor.recordMessage()\n    switch (type) {\n      case message_types.welcome:\n        if (this.triedToReconnect()) {\n          this.reconnectAttempted = true\n        }\n        this.monitor.recordConnect()\n        return this.subscriptions.reload()\n      case message_types.disconnect:\n        logger.log(`Disconnecting. Reason: ${reason}`)\n        return this.close({allowReconnect: reconnect})\n      case message_types.ping:\n        return null\n      case message_types.confirmation:\n        this.subscriptions.confirmSubscription(identifier)\n        if (this.reconnectAttempted) {\n          this.reconnectAttempted = false\n          return this.subscriptions.notify(identifier, \"connected\", {reconnected: true})\n        } else {\n          return this.subscriptions.notify(identifier, \"connected\", {reconnected: false})\n        }\n      case message_types.rejection:\n        return this.subscriptions.reject(identifier)\n      default:\n        return this.subscriptions.notify(identifier, \"received\", message)\n    }\n  },\n\n  open() {\n    logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n    this.disconnected = false\n    if (!this.isProtocolSupported()) {\n      logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n      return this.close({allowReconnect: false})\n    }\n  },\n\n  close(event) {\n    logger.log(\"WebSocket onclose event\")\n    if (this.disconnected) { return }\n    this.disconnected = true\n    this.monitor.recordDisconnect()\n    return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n  },\n\n  error() {\n    logger.log(\"WebSocket onerror event\")\n  }\n}\n\nexport default Connection\n", "// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n//     connected() {\n//       // Called once the subscription has been successfully completed\n//     },\n//\n//     disconnected({ willAttemptReconnect: boolean }) {\n//       // Called when the client has disconnected with the server.\n//       // The object will have an `willAttemptReconnect` property which\n//       // says whether the client has the intention of attempting\n//       // to reconnect.\n//     },\n//\n//     appear() {\n//       this.perform('appear', {appearing_on: this.appearingOn()})\n//     },\n//\n//     away() {\n//       this.perform('away')\n//     },\n//\n//     appearingOn() {\n//       $('main').data('appearing-on')\n//     }\n//   })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n//   class AppearanceChannel < ApplicationActionCable::Channel\n//     def subscribed\n//       current_user.appear\n//     end\n//\n//     def unsubscribed\n//       current_user.disappear\n//     end\n//\n//     def appear(data)\n//       current_user.appear on: data['appearing_on']\n//     end\n//\n//     def away\n//       current_user.away\n//     end\n//   end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n  if (properties != null) {\n    for (let key in properties) {\n      const value = properties[key]\n      object[key] = value\n    }\n  }\n  return object\n}\n\nexport default class Subscription {\n  constructor(consumer, params = {}, mixin) {\n    this.consumer = consumer\n    this.identifier = JSON.stringify(params)\n    extend(this, mixin)\n  }\n\n  // Perform a channel action with the optional data passed as an attribute\n  perform(action, data = {}) {\n    data.action = action\n    return this.send(data)\n  }\n\n  send(data) {\n    return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n  }\n\n  unsubscribe() {\n    return this.consumer.subscriptions.remove(this)\n  }\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n  constructor(subscriptions) {\n    this.subscriptions = subscriptions\n    this.pendingSubscriptions = []\n  }\n\n  guarantee(subscription) {\n    if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n      logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n      this.pendingSubscriptions.push(subscription) \n    }\n    else {\n      logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n    }\n    this.startGuaranteeing()\n  }\n\n  forget(subscription) {\n    logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n    this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n  }\n\n  startGuaranteeing() {\n    this.stopGuaranteeing()\n    this.retrySubscribing()\n  }\n  \n  stopGuaranteeing() {\n    clearTimeout(this.retryTimeout)\n  }\n\n  retrySubscribing() {\n    this.retryTimeout = setTimeout(() => {\n      if (this.subscriptions && typeof(this.subscriptions.subscribe) === \"function\") {\n        this.pendingSubscriptions.map((subscription) => {\n          logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)\n          this.subscriptions.subscribe(subscription)\n        })\n      }\n    }\n    , 500)\n  }\n}\n\nexport default SubscriptionGuarantor", "import Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport logger from \"./logger\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n  constructor(consumer) {\n    this.consumer = consumer\n    this.guarantor = new SubscriptionGuarantor(this)\n    this.subscriptions = []\n  }\n\n  create(channelName, mixin) {\n    const channel = channelName\n    const params = typeof channel === \"object\" ? channel : {channel}\n    const subscription = new Subscription(this.consumer, params, mixin)\n    return this.add(subscription)\n  }\n\n  // Private\n\n  add(subscription) {\n    this.subscriptions.push(subscription)\n    this.consumer.ensureActiveConnection()\n    this.notify(subscription, \"initialized\")\n    this.subscribe(subscription)\n    return subscription\n  }\n\n  remove(subscription) {\n    this.forget(subscription)\n    if (!this.findAll(subscription.identifier).length) {\n      this.sendCommand(subscription, \"unsubscribe\")\n    }\n    return subscription\n  }\n\n  reject(identifier) {\n    return this.findAll(identifier).map((subscription) => {\n      this.forget(subscription)\n      this.notify(subscription, \"rejected\")\n      return subscription\n    })\n  }\n\n  forget(subscription) {\n    this.guarantor.forget(subscription)\n    this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n    return subscription\n  }\n\n  findAll(identifier) {\n    return this.subscriptions.filter((s) => s.identifier === identifier)\n  }\n\n  reload() {\n    return this.subscriptions.map((subscription) =>\n      this.subscribe(subscription))\n  }\n\n  notifyAll(callbackName, ...args) {\n    return this.subscriptions.map((subscription) =>\n      this.notify(subscription, callbackName, ...args))\n  }\n\n  notify(subscription, callbackName, ...args) {\n    let subscriptions\n    if (typeof subscription === \"string\") {\n      subscriptions = this.findAll(subscription)\n    } else {\n      subscriptions = [subscription]\n    }\n\n    return subscriptions.map((subscription) =>\n      (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n  }\n\n  subscribe(subscription) {\n    if (this.sendCommand(subscription, \"subscribe\")) {\n      this.guarantor.guarantee(subscription)\n    }\n  }\n\n  confirmSubscription(identifier) {\n    logger.log(`Subscription confirmed ${identifier}`)\n    this.findAll(identifier).map((subscription) =>\n      this.guarantor.forget(subscription))\n  }\n\n  sendCommand(subscription, command) {\n    const {identifier} = subscription\n    return this.consumer.send({command, identifier})\n  }\n}\n", "import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n//   App.cable.disconnect()\n//\n// and to restart the connection:\n//\n//   App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n  constructor(url) {\n    this._url = url\n    this.subscriptions = new Subscriptions(this)\n    this.connection = new Connection(this)\n    this.subprotocols = []\n  }\n\n  get url() {\n    return createWebSocketURL(this._url)\n  }\n\n  send(data) {\n    return this.connection.send(data)\n  }\n\n  connect() {\n    return this.connection.open()\n  }\n\n  disconnect() {\n    return this.connection.close({allowReconnect: false})\n  }\n\n  ensureActiveConnection() {\n    if (!this.connection.isActive()) {\n      return this.connection.open()\n    }\n  }\n\n  addSubProtocol(subprotocol) {\n    this.subprotocols = [...this.subprotocols, subprotocol]\n  }\n}\n\nexport function createWebSocketURL(url) {\n  if (typeof url === \"function\") {\n    url = url()\n  }\n\n  if (url && !/^wss?:/i.test(url)) {\n    const a = document.createElement(\"a\")\n    a.href = url\n    // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n    a.href = a.href // eslint-disable-line\n    a.protocol = a.protocol.replace(\"http\", \"ws\")\n    return a.href\n  } else {\n    return url\n  }\n}\n", "import Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport Subscription from \"./subscription\"\nimport Subscriptions from \"./subscriptions\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n  Connection,\n  ConnectionMonitor,\n  Consumer,\n  INTERNAL,\n  Subscription,\n  Subscriptions,\n  SubscriptionGuarantor,\n  adapters,\n  createWebSocketURL,\n  logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n  return new Consumer(url)\n}\n\nexport function getConfig(name) {\n  const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n  if (element) {\n    return element.getAttribute(\"content\")\n  }\n}\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\nvar V3_URL = 'https://js.stripe.com/v3';\nvar V3_URL_REGEX = /^https:\\/\\/js\\.stripe\\.com\\/v3\\/?(\\?.*)?$/;\nvar EXISTING_SCRIPT_MESSAGE = 'loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used';\nvar findScript = function findScript() {\n  var scripts = document.querySelectorAll(\"script[src^=\\\"\".concat(V3_URL, \"\\\"]\"));\n\n  for (var i = 0; i < scripts.length; i++) {\n    var script = scripts[i];\n\n    if (!V3_URL_REGEX.test(script.src)) {\n      continue;\n    }\n\n    return script;\n  }\n\n  return null;\n};\n\nvar injectScript = function injectScript(params) {\n  var queryString = params && !params.advancedFraudSignals ? '?advancedFraudSignals=false' : '';\n  var script = document.createElement('script');\n  script.src = \"\".concat(V3_URL).concat(queryString);\n  var headOrBody = document.head || document.body;\n\n  if (!headOrBody) {\n    throw new Error('Expected document.body not to be null. Stripe.js requires a <body> element.');\n  }\n\n  headOrBody.appendChild(script);\n  return script;\n};\n\nvar registerWrapper = function registerWrapper(stripe, startTime) {\n  if (!stripe || !stripe._registerWrapper) {\n    return;\n  }\n\n  stripe._registerWrapper({\n    name: 'stripe-js',\n    version: \"4.1.0\",\n    startTime: startTime\n  });\n};\n\nvar stripePromise = null;\nvar onErrorListener = null;\nvar onLoadListener = null;\n\nvar onError = function onError(reject) {\n  return function () {\n    reject(new Error('Failed to load Stripe.js'));\n  };\n};\n\nvar onLoad = function onLoad(resolve, reject) {\n  return function () {\n    if (window.Stripe) {\n      resolve(window.Stripe);\n    } else {\n      reject(new Error('Stripe.js not available'));\n    }\n  };\n};\n\nvar loadScript = function loadScript(params) {\n  // Ensure that we only attempt to load Stripe.js at most once\n  if (stripePromise !== null) {\n    return stripePromise;\n  }\n\n  stripePromise = new Promise(function (resolve, reject) {\n    if (typeof window === 'undefined' || typeof document === 'undefined') {\n      // Resolve to null when imported server side. This makes the module\n      // safe to import in an isomorphic code base.\n      resolve(null);\n      return;\n    }\n\n    if (window.Stripe && params) {\n      console.warn(EXISTING_SCRIPT_MESSAGE);\n    }\n\n    if (window.Stripe) {\n      resolve(window.Stripe);\n      return;\n    }\n\n    try {\n      var script = findScript();\n\n      if (script && params) {\n        console.warn(EXISTING_SCRIPT_MESSAGE);\n      } else if (!script) {\n        script = injectScript(params);\n      } else if (script && onLoadListener !== null && onErrorListener !== null) {\n        var _script$parentNode;\n\n        // remove event listeners\n        script.removeEventListener('load', onLoadListener);\n        script.removeEventListener('error', onErrorListener); // if script exists, but we are reloading due to an error,\n        // reload script to trigger 'load' event\n\n        (_script$parentNode = script.parentNode) === null || _script$parentNode === void 0 ? void 0 : _script$parentNode.removeChild(script);\n        script = injectScript(params);\n      }\n\n      onLoadListener = onLoad(resolve, reject);\n      onErrorListener = onError(reject);\n      script.addEventListener('load', onLoadListener);\n      script.addEventListener('error', onErrorListener);\n    } catch (error) {\n      reject(error);\n      return;\n    }\n  }); // Resets stripePromise on error\n\n  return stripePromise[\"catch\"](function (error) {\n    stripePromise = null;\n    return Promise.reject(error);\n  });\n};\nvar initStripe = function initStripe(maybeStripe, args, startTime) {\n  if (maybeStripe === null) {\n    return null;\n  }\n\n  var stripe = maybeStripe.apply(undefined, args);\n  registerWrapper(stripe, startTime);\n  return stripe;\n}; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\nvar validateLoadParams = function validateLoadParams(params) {\n  var errorMessage = \"invalid load parameters; expected object of shape\\n\\n    {advancedFraudSignals: boolean}\\n\\nbut received\\n\\n    \".concat(JSON.stringify(params), \"\\n\");\n\n  if (params === null || _typeof(params) !== 'object') {\n    throw new Error(errorMessage);\n  }\n\n  if (Object.keys(params).length === 1 && typeof params.advancedFraudSignals === 'boolean') {\n    return params;\n  }\n\n  throw new Error(errorMessage);\n};\n\nvar loadParams;\nvar loadStripeCalled = false;\nvar loadStripe = function loadStripe() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  loadStripeCalled = true;\n  var startTime = Date.now();\n  return loadScript(loadParams).then(function (maybeStripe) {\n    return initStripe(maybeStripe, args, startTime);\n  });\n};\n\nloadStripe.setLoadParameters = function (params) {\n  // we won't throw an error if setLoadParameters is called with the same values as before\n  if (loadStripeCalled && loadParams) {\n    var validatedParams = validateLoadParams(params);\n    var parameterKeys = Object.keys(validatedParams);\n    var sameParameters = parameterKeys.reduce(function (previousValue, currentValue) {\n      var _loadParams;\n\n      return previousValue && params[currentValue] === ((_loadParams = loadParams) === null || _loadParams === void 0 ? void 0 : _loadParams[currentValue]);\n    }, true);\n\n    if (sameParameters) {\n      return;\n    }\n  }\n\n  if (loadStripeCalled) {\n    throw new Error('You cannot change load parameters after calling loadStripe');\n  }\n\n  loadParams = validateLoadParams(params);\n};\n\nexports.loadStripe = loadStripe;\n", "module.exports = require('../dist/pure');\n", "/*!\n * jQuery JavaScript Library v2.2.4\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-05-20T17:23Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\"use strict\";\nvar arr = [];\n\nvar document = window.document;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\tversion = \"2.2.4\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\tvar realStringObj = obj && obj.toString();\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Not own constructor property must be Object\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype || {}, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android<4.0, iOS<6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf( \"use strict\" ) === 1 ) {\n\t\t\t\tscript = document.createElement( \"script\" );\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\n\t\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t\t// and removal by using an indirect global eval\n\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE9-11+\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\n// JSHint would error on this code due to the Symbol not being defined in ES5.\n// Defining this global in .jshintrc would create a danger of using the global\n// unguarded in another place, it seems safer to just disable JSHint for these\n// three lines.\n/* jshint ignore: start */\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n/* jshint ignore: end */\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.1\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-10-17\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t// Support: IE 11\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\treturn m ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\t// Support: Blackberry 4.6\n\t\t\t\t\t// gEBID returns nodes no longer in the document (#6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n\t\t\t\t\tpos.index( cur ) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnotwhite = ( /\\S+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add( function() {\n\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 ||\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred.\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// Add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n} );\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n} );\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called\n\t\t// after the browser event has already occurred.\n\t\t// Support: IE9-10 only\n\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\tif ( document.readyState === \"complete\" ||\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tregister: function( owner, initial ) {\n\t\tvar value = initial || {};\n\n\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t// use plain assignment\n\t\tif ( owner.nodeType ) {\n\t\t\towner[ this.expando ] = value;\n\n\t\t// Otherwise secure it in a non-enumerable, non-writable property\n\t\t// configurability must be true to allow the property to be\n\t\t// deleted with the delete operator\n\t\t} else {\n\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\tvalue: value,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t} );\n\t\t}\n\t\treturn owner[ this.expando ];\n\t},\n\tcache: function( owner ) {\n\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return an empty object.\n\t\tif ( !acceptData( owner ) ) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\t\t\towner[ this.expando ] && owner[ this.expando ][ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase( key ) );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.register( owner );\n\n\t\t} else {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <= 35-45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data, camelKey;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = dataUser.get( elem, key ) ||\n\n\t\t\t\t\t// Try to find dashed key if it exists (gh-2779)\n\t\t\t\t\t// This is for 2.2.x only\n\t\t\t\t\tdataUser.get( elem, key.replace( rmultiDash, \"-$&\" ).toLowerCase() );\n\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = dataUser.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tcamelKey = jQuery.camelCase( key );\n\t\t\tthis.each( function() {\n\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = dataUser.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdataUser.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf( \"-\" ) > -1 && data !== undefined ) {\n\t\t\t\t\tdataUser.set( this, key, value );\n\t\t\t\t}\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() { return tween.cur(); } :\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([\\w:-]+)/ );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE9\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE9-11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0-4.3, Safari<=5.1\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari<=5.1, Android<4.2\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<=11+\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE9\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Support (at least): Chrome, IE9\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t//\n\t\t// Support: Firefox<=42+\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: ( \"button buttons clientX clientY offsetX offsetY pageX pageY \" +\n\t\t\t\"screenX screenY toElement\" ).split( \" \" ),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX +\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) -\n\t\t\t\t\t( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome<28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android<4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://code.google.com/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t// Support: IE 10-11, Edge 10240+\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\n\t// Keep domManip exposed until 3.0 (gh-2225)\n\tdomManip: domManip,\n\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\n\nvar iframe,\n\telemdisplay = {\n\n\t\t// Support: Firefox\n\t\t// We have to pre-define these values for FF (#10227)\n\t\tHTML: \"block\",\n\t\tBODY: \"block\"\n\t};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" ) )\n\t\t\t\t.appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = iframe[ 0 ].contentDocument;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE<=11+, Firefox<=30+ (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar documentElement = document.documentElement;\n\n\n\n( function() {\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE9-11+\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tcontainer.appendChild( div );\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\t\tdiv.style.cssText =\n\n\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\t}\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\n\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t// No need to check if the test was already performed, though.\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\n\t\t\t// Support: Android 4.0-4.3\n\t\t\t// We're checking for boxSizingReliableVal here instead of pixelMarginRightVal\n\t\t\t// since that compresses better and they're computed together anyway.\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\n\t\t\t// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\treliableMarginRight: function() {\n\n\t\t\t// Support: Android 2.3\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\tvar ret,\n\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;box-sizing:content-box;\" +\n\t\t\t\t\"display:block;margin:0;border:0;padding:0\";\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\t\t\tdocumentElement.appendChild( container );\n\n\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight );\n\n\t\t\tdocumentElement.removeChild( container );\n\t\t\tdiv.removeChild( marginDiv );\n\n\t\t\treturn ret;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;\n\n\t// Support: Opera 12.1x only\n\t// Fall back to style even without computed\n\t// computed is undefined for elems on document fragments\n\tif ( ( ret === \"\" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\tret = jQuery.style( elem, name );\n\t}\n\n\t// Support: IE9\n\t// getPropertyValue is only needed for .css('filter') (#12537)\n\tif ( computed ) {\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE9-11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test( val ) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// Check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = dataPriv.get( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = dataPriv.access(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\tdefaultDisplay( elem.nodeName )\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display !== \"none\" || !hidden ) {\n\t\t\t\tdataPriv.set(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\thidden ? display : jQuery.css( elem, \"display\" )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\t\t\t\t\telem.offsetWidth === 0 ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// Support: Android 2.3\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE9\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE9-10 do not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tdataPriv.get( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\t\t\tstyle.display = \"inline-block\";\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show\n\t\t\t\t// and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// Store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done( function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t} );\n\t\t}\n\t\tanim.done( function() {\n\t\t\tvar prop;\n\n\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t} );\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( ( display === \"none\" ? defaultDisplay( elem.nodeName ) : display ) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnotwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ?\n\t\topt.duration : opt.duration in jQuery.fx.speeds ?\n\t\t\tjQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\twindow.clearInterval( timerId );\n\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: iOS<=5.1, Android<=4.2+\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE<=11+\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: Android<=2.3\n\t// Options inside disabled selects are incorrectly marked as disabled\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<=11+\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle;\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ name ];\n\t\t\tattrHandle[ name ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tname.toLowerCase() :\n\t\t\t\tnull;\n\t\t\tattrHandle[ name ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t\t0 :\n\t\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + getClass( elem ) + \" \" ).replace( rclass, \" \" )\n\t\t\t\t\t.indexOf( className ) > -1\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g,\n\trspaces = /[\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tret.replace( rreturn, \"\" ) :\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) ).replace( rspaces, \" \" );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ?\n\t\t\t\t\t\t\t\t!option.disabled : option.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome, Safari\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Support: Android 2.3\n// Workaround failure to string-cast null input\njQuery.parseJSON = function( data ) {\n\treturn JSON.parse( data + \"\" );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE9\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" ).replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE8-11+\n\t\t\t// IE throws exception if url is malformed, e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE8-11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each( function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t} ).end();\n\t}\n} );\n\n\njQuery.expr.filters.hidden = function( elem ) {\n\treturn !jQuery.expr.filters.visible( elem );\n};\njQuery.expr.filters.visible = function( elem ) {\n\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\t// Use OR instead of AND as the element is not visible if either is true\n\t// See tickets #10406 and #13132\n\treturn elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0;\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t} ) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE9\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = callback( \"error\" );\n\n\t\t\t\t// Support: IE9\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = jQuery.trim( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\telem = this[ 0 ],\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\tbox = elem.getBoundingClientRect();\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: box.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari<7-8+, Chrome<37-44+\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\tsize: function() {\n\t\treturn this.length;\n\t}\n} );\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\nreturn jQuery;\n}));\n", "/*! @preserve\r\n * bootbox.js\r\n * version: 6.0.4\r\n * author: Nick Payne <nick@kurai.co.uk>\r\n * license: MIT\r\n * http://bootboxjs.com/\r\n */\r\n(function (root, factory) {\r\n  'use strict';\r\n  if (typeof define === 'function' && define.amd) {\r\n    // AMD\r\n    define(['jquery'], factory);\r\n  } else if (typeof exports === 'object') {\r\n    // Node, CommonJS-like\r\n    module.exports = factory(require('jquery'));\r\n  } else {\r\n    // Browser globals (root is window)\r\n    root.bootbox = factory(root.jQuery);\r\n  }\r\n}(this, function init($, undefined) {\r\n  'use strict';\r\n\r\n  let exports = {};\r\n\r\n  let VERSION = '6.0.4';\r\n  exports.VERSION = VERSION;\r\n\r\n  let locales = {\r\n    'en' : {\r\n      OK      : 'OK',\r\n      CANCEL  : 'Cancel',\r\n      CONFIRM : 'OK'\r\n    }\r\n  };\r\n\r\n  let templates = {\r\n    dialog:         '<div class=\"bootbox modal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\"><div class=\"modal-dialog\"><div class=\"modal-content\"><div class=\"modal-body\"><div class=\"bootbox-body\"></div></div></div></div></div>',\r\n    header:         '<div class=\"modal-header\"><h5 class=\"modal-title\"></h5></div>',\r\n    footer:         '<div class=\"modal-footer\"></div>',\r\n    closeButton:    '<button type=\"button\" class=\"bootbox-close-button close btn-close\" aria-hidden=\"true\" aria-label=\"Close\"></button>',\r\n    form:           '<form class=\"bootbox-form\"></form>',\r\n    button:         '<button type=\"button\" class=\"btn\"></button>',\r\n    option:         '<option value=\"\"></option>',\r\n    promptMessage:  '<div class=\"bootbox-prompt-message\"></div>',\r\n    inputs: {\r\n      text:         '<input class=\"bootbox-input bootbox-input-text form-control\" autocomplete=\"off\" type=\"text\" />',\r\n      textarea:     '<textarea class=\"bootbox-input bootbox-input-textarea form-control\"></textarea>',\r\n      email:        '<input class=\"bootbox-input bootbox-input-email form-control\" autocomplete=\"off\" type=\"email\" />',\r\n      select:       '<select class=\"bootbox-input bootbox-input-select form-select\"></select>',\r\n      checkbox:     '<div class=\"form-check checkbox\"><label class=\"form-check-label\"><input class=\"form-check-input bootbox-input bootbox-input-checkbox\" type=\"checkbox\" /></label></div>',\r\n      radio:        '<div class=\"form-check radio\"><label class=\"form-check-label\"><input class=\"form-check-input bootbox-input bootbox-input-radio\" type=\"radio\" name=\"bootbox-radio\" /></label></div>',\r\n      date:         '<input class=\"bootbox-input bootbox-input-date form-control\" autocomplete=\"off\" type=\"date\" />',\r\n      time:         '<input class=\"bootbox-input bootbox-input-time form-control\" autocomplete=\"off\" type=\"time\" />',\r\n      number:       '<input class=\"bootbox-input bootbox-input-number form-control\" autocomplete=\"off\" type=\"number\" />',\r\n      password:     '<input class=\"bootbox-input bootbox-input-password form-control\" autocomplete=\"off\" type=\"password\" />',\r\n      range:        '<input class=\"bootbox-input bootbox-input-range form-control-range\" autocomplete=\"off\" type=\"range\" />'\r\n    }\r\n  };\r\n\r\n\r\n  let defaults = {\r\n    // Default language used when generating buttons for alert, confirm, and prompt dialogs\r\n    locale: 'en',\r\n    // Show backdrop or not. Default to static so user has to interact with dialog\r\n    backdrop: 'static',\r\n    // Animate the modal in/out\r\n    animate: true,\r\n    // Additional class string applied to the top level dialog\r\n    className: null,\r\n    // Whether or not to include a close button\r\n    closeButton: true,\r\n    // Show the dialog immediately by default\r\n    show: true,\r\n    // Dialog container\r\n    container: 'body',\r\n    // Default value (used by the prompt helper)\r\n    value: '',\r\n    // Default input type (used by the prompt helper)\r\n    inputType: 'text',\r\n    // Custom error message to report if prompt fails validation\r\n    errorMessage: null,\r\n    // Switch button order from cancel/confirm (default) to confirm/cancel\r\n    swapButtonOrder: false,\r\n    // Center modal vertically in page\r\n    centerVertical: false,\r\n    // Append \"multiple\" property to the select when using the \"prompt\" helper\r\n    multiple: false,\r\n    // Automatically scroll modal content when height exceeds viewport height\r\n    scrollable: false,\r\n    // Whether or not to destroy the modal on hide\r\n    reusable: false,\r\n    // The element which triggered the dialog\r\n    relatedTarget: null,\r\n    // The size of the modal to generate\r\n    size: null,\r\n    // A unique identifier for this modal\r\n    id: null\r\n  };\r\n\r\n\r\n  // PUBLIC FUNCTIONS\r\n  // *************************************************************************************************************\r\n\r\n  /**\r\n   * Return all currently registered locales, or a specific locale if \"name\" is defined\r\n   * @param {string} [name]\r\n   * @returns {(Object|Object[])} An array of the available locale objects, or a single locale object if {name} is not null\r\n   */\r\n  exports.locales = function (name) {\r\n    return name ? locales[name] : locales;\r\n  };\r\n\r\n\r\n  /**\r\n   * Register localized strings for the OK, CONFIRM, and CANCEL buttons\r\n   * @param {string} name - The key used to identify the new locale in the locales array\r\n   * @param {Object} values - An object containing the localized string for each of the OK, CANCEL, and CONFIRM properties of a locale\r\n   * @returns The updated bootbox object\r\n   */\r\n  exports.addLocale = function (name, values) {\r\n    $.each(['OK', 'CANCEL', 'CONFIRM'], function (_, v) {\r\n      if (!values[v]) {\r\n        throw new Error('Please supply a translation for \"' + v + '\"');\r\n      }\r\n    });\r\n\r\n    locales[name] = {\r\n      OK: values.OK,\r\n      CANCEL: values.CANCEL,\r\n      CONFIRM: values.CONFIRM\r\n    };\r\n\r\n    return exports;\r\n  };\r\n\r\n \r\n  /**\r\n   * Remove a previously-registered locale\r\n   * @param {string} name - The key identifying the locale to remove\r\n   * @returns The updated bootbox object\r\n   */\r\n  exports.removeLocale = function (name) {\r\n    if (name !== 'en') {\r\n      delete locales[name];\r\n    }\r\n    else {\r\n      throw new Error('\"en\" is used as the default and fallback locale and cannot be removed.');\r\n    }\r\n\r\n    return exports;\r\n  };\r\n\r\n\r\n  /**\r\n   * Set the default locale\r\n   * @param {string} name - The key identifying the locale to set as the default locale for all future bootbox calls \r\n   * @returns The updated bootbox object\r\n   */\r\n  exports.setLocale = function (name) {\r\n    return exports.setDefaults('locale', name);\r\n  };\r\n\r\n\r\n  /**\r\n   * Override default value(s) of Bootbox.\r\n   * @returns The updated bootbox object\r\n   */\r\n  exports.setDefaults = function () {\r\n    let values = {};\r\n\r\n    if (arguments.length === 2) {\r\n      // Allow passing of single key/value...\r\n      values[arguments[0]] = arguments[1];\r\n    } else {\r\n      // ... and as an object too\r\n      values = arguments[0];\r\n    }\r\n\r\n    $.extend(defaults, values);\r\n\r\n    return exports;\r\n  };\r\n\r\n\r\n  /**\r\n   * Hides all currently active Bootbox modals\r\n   * @returns The current bootbox object\r\n   */\r\n  exports.hideAll = function () {\r\n    $('.bootbox').modal('hide');\r\n\r\n    return exports;\r\n  };\r\n\r\n \r\n  /**\r\n   * Allows the base init() function to be overridden\r\n   * @param {function} _$ - A function to be called when the bootbox instance is created\r\n   * @returns The current bootbox object\r\n   */\r\n  exports.init = function (_$) {\r\n    return init(_$ || $);\r\n  };\r\n\r\n\r\n  // CORE HELPER FUNCTIONS\r\n  // *************************************************************************************************************\r\n\r\n  /**\r\n   * The core dialog helper function, which can be used to create any custom Bootstrap modal. \r\n   * @param {Object} options - An object used to configure the various properties which define a Bootbox dialog\r\n   * @returns A jQuery object upon which Bootstrap's modal function has been called\r\n   */\r\n  exports.dialog = function (options) {\r\n    if ($.fn.modal === undefined) {\r\n      throw new Error(\r\n        '\"$.fn.modal\" is not defined; please double check you have included the Bootstrap JavaScript library. See https://getbootstrap.com/docs/5.3/getting-started/introduction/ for more details.'\r\n      );\r\n    }\r\n\r\n    options = sanitize(options);\r\n\r\n    if ($.fn.modal.Constructor.VERSION) {\r\n      options.fullBootstrapVersion = $.fn.modal.Constructor.VERSION;\r\n      let i = options.fullBootstrapVersion.indexOf('.');\r\n      options.bootstrap = options.fullBootstrapVersion.substring(0, i);\r\n    }\r\n    else {\r\n      // Assuming version 2.3.2, as that was the last \"supported\" 2.x version\r\n      options.bootstrap = '2';\r\n      options.fullBootstrapVersion = '2.3.2';\r\n      console.warn('Bootbox will *mostly* work with Bootstrap 2, but we do not officially support it. Please upgrade, if possible.');\r\n    }\r\n\r\n    let dialog = $(templates.dialog);\r\n    let innerDialog = dialog.find('.modal-dialog');\r\n    let body = dialog.find('.modal-body');\r\n    let header = $(templates.header);\r\n    let footer = $(templates.footer);\r\n    let buttons = options.buttons;\r\n\r\n    let callbacks = {\r\n      onEscape: options.onEscape\r\n    };\r\n\r\n    body.find('.bootbox-body').html(options.message);\r\n\r\n    // Only attempt to create buttons if at least one has been defined in the options object\r\n    if (getKeyLength(options.buttons) > 0) {\r\n      each(buttons, function (key, b) {\r\n        let button = $(templates.button);\r\n        button.data('bb-handler', key);\r\n        button.addClass(b.className);\r\n\r\n        switch (key) {\r\n          case 'ok':\r\n          case 'confirm':\r\n            button.addClass('bootbox-accept');\r\n            break;\r\n\r\n          case 'cancel':\r\n            button.addClass('bootbox-cancel');\r\n            break;\r\n        }\r\n\r\n        button.html(b.label);\r\n\r\n        if (b.id) {\r\n          button.attr({ 'id': b.id });\r\n        }\r\n\r\n        if (b.disabled === true) {\r\n          button.prop({ disabled: true });\r\n        }\r\n\r\n        footer.append(button);\r\n\r\n        callbacks[key] = b.callback;\r\n      });\r\n\r\n      body.after(footer);\r\n    }\r\n\r\n    if (options.animate === true) {\r\n      dialog.addClass('fade');\r\n    }\r\n\r\n    if (options.className) {\r\n      dialog.addClass(options.className);\r\n    }\r\n\r\n    if (options.id) {\r\n      dialog.attr({ 'id': options.id });\r\n    }\r\n\r\n    if (options.size) {\r\n      // Requires Bootstrap 3.1.0 or higher\r\n      if (options.fullBootstrapVersion.substring(0, 3) < '3.1') {\r\n        console.warn('\"size\" requires Bootstrap 3.1.0 or higher. You appear to be using ' + options.fullBootstrapVersion + '. Please upgrade to use this option.');\r\n      }\r\n\r\n      switch (options.size) {\r\n        case 'small':\r\n        case 'sm':\r\n          innerDialog.addClass('modal-sm');\r\n          break;\r\n\r\n        case 'large':\r\n        case 'lg':\r\n          innerDialog.addClass('modal-lg');\r\n          break;\r\n\r\n        case 'extra-large':\r\n        case 'xl':\r\n          innerDialog.addClass('modal-xl');\r\n\r\n          // Requires Bootstrap 4.2.0 or higher\r\n          if (options.fullBootstrapVersion.substring(0, 3) < '4.2') {\r\n            console.warn('Using size \"xl\"/\"extra-large\" requires Bootstrap 4.2.0 or higher. You appear to be using ' + options.fullBootstrapVersion + '. Please upgrade to use this option.');\r\n          }\r\n          break;\r\n      }\r\n    }\r\n\r\n    if (options.scrollable) {\r\n      innerDialog.addClass('modal-dialog-scrollable');\r\n\r\n      // Requires Bootstrap 4.3.0 or higher\r\n      if (options.fullBootstrapVersion.substring(0, 3) < '4.3') {\r\n        console.warn('Using \"scrollable\" requires Bootstrap 4.3.0 or higher. You appear to be using ' + options.fullBootstrapVersion + '. Please upgrade to use this option.');\r\n      }\r\n    }\r\n\r\n    if(options.title || options.closeButton) {\r\n      if (options.title) {\r\n        header.find('.modal-title').html(options.title);\r\n      }\r\n      else {\r\n        header.addClass('border-0');\r\n      }\r\n\r\n      if (options.closeButton) {\r\n        let closeButton = $(templates.closeButton);      \r\n        if (options.bootstrap < 5) {\r\n          closeButton.html('&times;');\r\n        }\r\n\r\n        /* Note: the close button for Bootstrap 5+ does not contain content */\r\n        if(options.bootstrap < 4) {\r\n          /* Bootstrap 3 and under */\r\n          header.prepend(closeButton);\r\n        }\r\n        else {\r\n          header.append(closeButton);\r\n        }\r\n      }\r\n\r\n      body.before(header);\r\n    }\r\n\r\n    if (options.centerVertical) {\r\n      innerDialog.addClass('modal-dialog-centered');\r\n\r\n      // Requires Bootstrap 4.0.0-beta.3 or higher\r\n      if (options.fullBootstrapVersion < '4.0.0') {\r\n        console.warn('\"centerVertical\" requires Bootstrap 4.0.0-beta.3 or higher. You appear to be using ' + options.fullBootstrapVersion + '. Please upgrade to use this option.');\r\n      }\r\n    }\r\n\r\n    // Bootstrap event listeners; these handle extra setup & teardown required after the underlying modal has performed certain actions.\r\n\r\n    if(!options.reusable) {\r\n      // make sure we unbind any listeners once the dialog has definitively been dismissed\r\n      dialog.one('hide.bs.modal', { dialog: dialog }, unbindModal);\r\n      dialog.one('hidden.bs.modal', { dialog: dialog }, destroyModal);\r\n    }\r\n\r\n    if (options.onHide) {\r\n      if (typeof options.onHide === 'function') {\r\n        dialog.on('hide.bs.modal', options.onHide);\r\n      }\r\n      else {\r\n        throw new Error('Argument supplied to \"onHide\" must be a function');\r\n      }\r\n    }\r\n\r\n    if (options.onHidden) {\r\n      if (typeof options.onHidden === 'function') {\r\n        dialog.on('hidden.bs.modal', options.onHidden);\r\n      }\r\n      else {\r\n        throw new Error('Argument supplied to \"onHidden\" must be a function');\r\n      }\r\n    }\r\n\r\n    if (options.onShow) {\r\n      if (typeof options.onShow === 'function') {\r\n        dialog.on('show.bs.modal', options.onShow);\r\n      }\r\n      else {\r\n        throw new Error('Argument supplied to \"onShow\" must be a function');\r\n      }\r\n    }\r\n\r\n    dialog.one('shown.bs.modal', { dialog: dialog }, focusPrimaryButton);\r\n\r\n    if (options.onShown) {\r\n      if (typeof options.onShown === 'function') {\r\n        dialog.on('shown.bs.modal', options.onShown);\r\n      }\r\n      else {\r\n        throw new Error('Argument supplied to \"onShown\" must be a function');\r\n      }\r\n    }\r\n\r\n    // Bootbox event listeners; used to decouple some behaviours from their respective triggers\r\n\r\n    if (options.backdrop === true) {\r\n      let startedOnBody = false;\r\n\r\n      // Prevents the event from propagating to the backdrop, when something inside the dialog is clicked\r\n      dialog.on('mousedown', '.modal-content', function(e) {\r\n        e.stopPropagation();\r\n\r\n        startedOnBody = true;\r\n      });\r\n\r\n      // A boolean true/false according to the Bootstrap docs should show a dialog the user can dismiss by clicking on the background.\r\n      // We always only ever pass static/false to the actual $.modal function because with \"true\" we can't trap this event (the .modal-backdrop swallows it).\r\n      // However, we still want to sort-of respect true and invoke the escape mechanism instead\r\n      dialog.on('click.dismiss.bs.modal', function (e) {\r\n        if (startedOnBody || e.target !== e.currentTarget) {\r\n          return;\r\n        }\r\n\r\n        dialog.trigger('escape.close.bb');\r\n      });\r\n    }\r\n\r\n    dialog.on('escape.close.bb', function (e) {\r\n      // The if() statement looks redundant but it isn't; without it, if we *didn't* have an onEscape handler then processCallback would automatically dismiss the dialog\r\n      if (callbacks.onEscape) {\r\n        processCallback(e, dialog, callbacks.onEscape);\r\n      }\r\n    });\r\n\r\n    dialog.on('click', '.modal-footer button:not(.disabled)', function (e) {\r\n      let callbackKey = $(this).data('bb-handler');\r\n\r\n      if (callbackKey !== undefined) {\r\n        // Only process callbacks for buttons we recognize:\r\n        processCallback(e, dialog, callbacks[callbackKey]);\r\n      }\r\n    });\r\n\r\n    dialog.on('click', '.bootbox-close-button', function (e) {\r\n      // onEscape might be falsy, but that's fine; the fact is if the user has managed to click the close button we have to close the dialog, callback or not\r\n      processCallback(e, dialog, callbacks.onEscape);\r\n    });\r\n\r\n    dialog.on('keyup', function (e) {\r\n      if (e.which === 27) {\r\n        dialog.trigger('escape.close.bb');\r\n      }\r\n    });\r\n\r\n    /*\r\n    The remainder of this method simply deals with adding our dialog element to the DOM, augmenting it with \r\n    Bootstrap's modal functionality and then giving the resulting object back to our caller\r\n    */\r\n\r\n    $(options.container).append(dialog);\r\n\r\n    dialog.modal({\r\n      backdrop: options.backdrop,\r\n      keyboard: false,\r\n      show: false\r\n    });\r\n\r\n    if (options.show) {\r\n      dialog.modal('show', options.relatedTarget);\r\n    }\r\n\r\n    return dialog;\r\n  };\r\n\r\n\r\n  /**\r\n   * Helper function to simulate the native alert() behavior. **NOTE**: This is non-blocking, so any code that must happen after the alert is dismissed should be placed within the callback function for this alert.\r\n   * @returns  A jQuery object upon which Bootstrap's modal function has been called\r\n   */\r\n  exports.alert = function () {\r\n    let options;\r\n\r\n    options = mergeDialogOptions('alert', ['ok'], ['message', 'callback'], arguments);\r\n\r\n    // @TODO: can this move inside exports.dialog when we're iterating over each button and checking its button.callback value instead?\r\n    if (options.callback && typeof options.callback !== 'function') {\r\n      throw new Error('alert requires the \"callback\" property to be a function when provided');\r\n    }\r\n\r\n    // Override the ok and escape callback to make sure they just invoke the single user-supplied one (if provided)\r\n    options.buttons.ok.callback = options.onEscape = function () {\r\n      if (typeof options.callback  === 'function') {\r\n        return options.callback.call(this);\r\n      }\r\n\r\n      return true;\r\n    };\r\n\r\n    return exports.dialog(options);\r\n  };\r\n\r\n\r\n  /**\r\n   * Helper function to simulate the native confirm() behavior. **NOTE**: This is non-blocking, so any code that must happen after the confirm is dismissed should be placed within the callback function for this confirm.\r\n   * @returns A jQuery object upon which Bootstrap's modal function has been called\r\n   */\r\n  exports.confirm = function () {\r\n    let options;\r\n\r\n    options = mergeDialogOptions('confirm', ['cancel', 'confirm'], ['message', 'callback'], arguments);\r\n\r\n    // confirm specific validation; they don't make sense without a callback so make sure it's present\r\n    if (typeof options.callback !== 'function') {\r\n      throw new Error('confirm requires a callback');\r\n    }\r\n\r\n    // Overrides; undo anything the user tried to set they shouldn't have\r\n    options.buttons.cancel.callback = options.onEscape = function () {\r\n      return options.callback.call(this, false);\r\n    };\r\n\r\n    options.buttons.confirm.callback = function () {\r\n      return options.callback.call(this, true);\r\n    };\r\n\r\n    return exports.dialog(options);\r\n  };\r\n\r\n\r\n  /**\r\n   * Helper function to simulate the native prompt() behavior. **NOTE**: This is non-blocking, so any code that must happen after the prompt is dismissed should be placed within the callback function for this prompt.\r\n   * @returns A jQuery object upon which Bootstrap's modal function has been called\r\n   */\r\n  exports.prompt = function () {\r\n    let options;\r\n    let promptDialog;\r\n    let form;\r\n    let input;\r\n    let shouldShow;\r\n    let inputOptions;\r\n\r\n    // We have to create our form first, otherwise its value is undefined when gearing up our options.\r\n    // @TODO this could be solved by allowing message to be a function instead...\r\n    form = $(templates.form);\r\n\r\n    // prompt defaults are more complex than others in that users can override more defaults\r\n    options = mergeDialogOptions('prompt', ['cancel', 'confirm'], ['title', 'callback'], arguments);\r\n\r\n    if (!options.value) {\r\n      options.value = defaults.value;\r\n    }\r\n\r\n    if (!options.inputType) {\r\n      options.inputType = defaults.inputType;\r\n    }\r\n\r\n    // Capture the user's 'show' value; we always set this to false before spawning the dialog to give us a chance to attach some handlers to it, but we need to make sure we respect a preference not to show it\r\n    shouldShow = (options.show === undefined) ? defaults.show : options.show;\r\n\r\n    // This is required prior to calling the dialog builder below - we need to add an event handler just before the prompt is shown\r\n    options.show = false;\r\n\r\n    // Handles the 'cancel' action\r\n    options.buttons.cancel.callback = options.onEscape = function () {\r\n      return options.callback.call(this, null);\r\n    };\r\n\r\n    // Prompt submitted - extract the prompt value. This requires a bit of work, given the different input types available.\r\n    options.buttons.confirm.callback = function () {\r\n      let value;\r\n\r\n      if (options.inputType === 'checkbox') {\r\n        value = input.find('input:checked').map(function () {\r\n          return $(this).val();\r\n        }).get();\r\n        if(value.length === 0 && options.required === true) {\r\n            // prevents button callback from being called if no checkboxes have been checked\r\n            return false;\r\n        }\r\n      } else if (options.inputType === 'radio') {\r\n        value = input.find('input:checked').val();\r\n      }\r\n      else {\r\n        let el = input[0];\r\n        \r\n        if (el.checkValidity && !el.checkValidity()) {\r\n          // If a custom error message was provided, add it now\r\n          if(options.errorMessage){\r\n            el.setCustomValidity(options.errorMessage);\r\n          }\r\n          \r\n          if(el.reportValidity) { \r\n            el.reportValidity();\r\n          }\r\n\r\n          // prevents button callback from being called\r\n          return false;\r\n        } else {\r\n          if (options.inputType === 'select' && options.multiple === true) {\r\n            value = input.find('option:selected').map(function () {\r\n              return $(this).val();\r\n            }).get();\r\n          }\r\n          else {\r\n            value = input.val();\r\n          }\r\n        }\r\n      }\r\n\r\n      return options.callback.call(this, value);\r\n    };\r\n\r\n    // prompt-specific validation\r\n    if (!options.title) {\r\n      throw new Error('prompt requires a title');\r\n    }\r\n\r\n    if (typeof options.callback !== 'function') {\r\n      throw new Error('prompt requires a callback');\r\n    }\r\n\r\n    if (!templates.inputs[options.inputType]) {\r\n      throw new Error('Invalid prompt type');\r\n    }\r\n\r\n    // Create the input based on the supplied type\r\n    input = $(templates.inputs[options.inputType]);\r\n\r\n    switch (options.inputType) {\r\n      case 'text':\r\n      case 'textarea':\r\n      case 'email':\r\n      case 'password':\r\n        input.val(options.value);\r\n\r\n        if (options.placeholder) {\r\n          input.attr('placeholder', options.placeholder);\r\n        }\r\n\r\n        if (options.pattern) {\r\n          input.attr('pattern', options.pattern);\r\n        }\r\n\r\n        if (options.maxlength) {\r\n          input.attr('maxlength', options.maxlength);\r\n        }\r\n\r\n        if (options.required) {\r\n          input.prop({ 'required': true });\r\n        }\r\n\r\n        if (options.rows && !isNaN(parseInt(options.rows))) {\r\n          if (options.inputType === 'textarea') {\r\n            input.attr({ 'rows': options.rows });\r\n          }\r\n        }\r\n        break;\r\n\r\n      case 'date':\r\n      case 'time':\r\n      case 'number':\r\n      case 'range':\r\n        input.val(options.value);\r\n\r\n        if (options.placeholder) {\r\n          input.attr('placeholder', options.placeholder);\r\n        }\r\n\r\n        if (options.pattern) {\r\n          input.attr('pattern', options.pattern);\r\n        }\r\n        else {\r\n          if(options.inputType === 'date') {\r\n            // Add the ISO-8601 short date format as a fallback for browsers without native type=\"date\" support\r\n            input.attr('pattern', '\\d{4}-\\d{2}-\\d{2}');\r\n          }\r\n          else if(options.inputType === 'time') {\r\n            // Add an HH:MM pattern as a fallback for browsers without native type=\"time\" support\r\n            input.attr('pattern', '\\d{2}:\\d{2}');\r\n          }\r\n        }\r\n\r\n        if (options.required) {\r\n          input.prop({ 'required': true });\r\n        }\r\n\r\n        if (options.step) {\r\n          if (options.step === 'any' || (!isNaN(options.step) && parseFloat(options.step) > 0)) {\r\n            input.attr('step', options.step);\r\n          }\r\n          else {\r\n            throw new Error('\"step\" must be a valid positive number or the value \"any\". See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-step for more information.');\r\n          }\r\n        }\r\n\r\n        if (minAndMaxAreValid(options.inputType, options.min, options.max)) {\r\n          if (options.min !== undefined) {\r\n            input.attr('min', options.min);\r\n          }\r\n          if (options.max !== undefined) {\r\n            input.attr('max', options.max);\r\n          }\r\n        }\r\n        break;\r\n\r\n      case 'select':\r\n        let groups = {};\r\n        inputOptions = options.inputOptions || [];\r\n\r\n        if (!Array.isArray(inputOptions)) {\r\n          throw new Error('Please pass an array of input options');\r\n        }\r\n\r\n        if (!inputOptions.length) {\r\n          throw new Error('prompt with \"inputType\" set to \"select\" requires at least one option');\r\n        }\r\n\r\n        if (options.required) {\r\n          input.prop({ 'required': true });\r\n        }\r\n\r\n        if (options.multiple) {\r\n          input.prop({ 'multiple': true });\r\n        }\r\n\r\n        each(inputOptions, function (_, option) {\r\n          // Assume the element to attach to is the input...\r\n          let elem = input;\r\n\r\n          if (option.value === undefined || option.text === undefined) {\r\n            throw new Error('each option needs a \"value\" property and a \"text\" property');\r\n          }\r\n\r\n          // ... but override that element if this option sits in a group\r\n\r\n          if (option.group) {\r\n            // Initialise group if necessary\r\n            if (!groups[option.group]) {\r\n              groups[option.group] = $('<optgroup />').attr('label', option.group);\r\n            }\r\n\r\n            elem = groups[option.group];\r\n          }\r\n\r\n          let o = $(templates.option);\r\n          o.attr('value', option.value).text(option.text);\r\n          elem.append(o);\r\n        });\r\n\r\n        each(groups, function (_, group) {\r\n          input.append(group);\r\n        });\r\n\r\n        // Safe to set a select's value as per a normal input\r\n        input.val(options.value);\r\n        if (options.bootstrap < 5) {\r\n          input.removeClass('form-select').addClass('form-control');\r\n        }\r\n        break;\r\n\r\n      case 'checkbox':\r\n        let checkboxValues = Array.isArray(options.value) ? options.value : [options.value];\r\n        inputOptions = options.inputOptions || [];\r\n\r\n        if (!inputOptions.length) {\r\n          throw new Error('prompt with \"inputType\" set to \"checkbox\" requires at least one option');\r\n        }\r\n\r\n        // Checkboxes have to nest within a containing element, so they break the rules a bit and we end up re-assigning our 'input' element to this container instead\r\n        input = $('<div class=\"bootbox-checkbox-list\"></div>');\r\n\r\n        each(inputOptions, function (_, option) {\r\n          if (option.value === undefined || option.text === undefined) {\r\n            throw new Error('each option needs a \"value\" property and a \"text\" property');\r\n          }\r\n\r\n          let checkbox = $(templates.inputs[options.inputType]);\r\n\r\n          checkbox.find('input').attr('value', option.value);\r\n          checkbox.find('label').append('\\n' + option.text);\r\n\r\n          // We've ensured values is an array, so we can always iterate over it\r\n          each(checkboxValues, function (_, value) {\r\n            if (value === option.value) {\r\n              checkbox.find('input').prop('checked', true);\r\n            }\r\n          });\r\n\r\n          input.append(checkbox);\r\n        });\r\n        break;\r\n\r\n      case 'radio':\r\n        // Make sure that value is not an array (only a single radio can ever be checked)\r\n        if (options.value !== undefined && Array.isArray(options.value)) {\r\n          throw new Error('prompt with \"inputType\" set to \"radio\" requires a single, non-array value for \"value\"');\r\n        }\r\n\r\n        inputOptions = options.inputOptions || [];\r\n\r\n        if (!inputOptions.length) {\r\n          throw new Error('prompt with \"inputType\" set to \"radio\" requires at least one option');\r\n        }\r\n\r\n        // Radiobuttons have to nest within a containing element, so they break the rules a bit and we end up re-assigning our 'input' element to this container instead\r\n        input = $('<div class=\"bootbox-radiobutton-list\"></div>');\r\n\r\n        // Radiobuttons should always have an initial checked input checked in a \"group\".\r\n        // If value is undefined or doesn't match an input option, select the first radiobutton\r\n        let checkFirstRadio = true;\r\n\r\n        each(inputOptions, function (_, option) {\r\n          if (option.value === undefined || option.text === undefined) {\r\n            throw new Error('each option needs a \"value\" property and a \"text\" property');\r\n          }\r\n\r\n          let radio = $(templates.inputs[options.inputType]);\r\n\r\n          radio.find('input').attr('value', option.value);\r\n          radio.find('label').append('\\n' + option.text);\r\n\r\n          if (options.value !== undefined) {\r\n            if (option.value === options.value) {\r\n              radio.find('input').prop('checked', true);\r\n              checkFirstRadio = false;\r\n            }\r\n          }\r\n\r\n          input.append(radio);\r\n        });\r\n\r\n        if (checkFirstRadio) {\r\n          input.find('input[type=\"radio\"]').first().prop('checked', true);\r\n        }\r\n        break;\r\n    }\r\n\r\n    // Now place it in our form\r\n    form.append(input);\r\n\r\n    form.on('submit', function (e) {\r\n      e.preventDefault();\r\n      // Fix for SammyJS (or similar JS routing library) hijacking the form post.\r\n      e.stopPropagation();\r\n\r\n      // @TODO can we actually click *the* button object instead?\r\n      // e.g. buttons.confirm.click() or similar\r\n      promptDialog.find('.bootbox-accept').trigger('click');\r\n    });\r\n\r\n    if (options.message && options.message.trim() !== '') {\r\n      // Add the form to whatever content the user may have added.\r\n      let message = $(templates.promptMessage).html(options.message);\r\n      form.prepend(message);\r\n      options.message = form;\r\n    }\r\n    else {\r\n      options.message = form;\r\n    }\r\n\r\n    // Generate the dialog\r\n    promptDialog = exports.dialog(options);\r\n\r\n    // Clear the existing handler focusing the submit button...\r\n    promptDialog.off('shown.bs.modal', focusPrimaryButton);\r\n\r\n    // ...and replace it with one focusing our input, if possible\r\n    promptDialog.on('shown.bs.modal', function () {\r\n      // Need the closure here since input isn't an object otherwise\r\n      input.focus();\r\n    });\r\n\r\n    if (shouldShow === true) {\r\n      promptDialog.modal('show');\r\n    }\r\n\r\n    return promptDialog;\r\n  };\r\n\r\n\r\n  // INTERNAL FUNCTIONS\r\n  // *************************************************************************************************************\r\n\r\n  // Map a flexible set of arguments into a single returned object.\r\n  // If args.length is already one just return it, otherwise use the properties argument to map the unnamed args to object properties.\r\n  // So in the latter case:\r\n  //\r\n  //    mapArguments([\"foo\", $.noop], [\"message\", \"callback\"])\r\n  //  \r\n  //  results in\r\n  //\r\n  //    { message: \"foo\", callback: $.noop }\r\n  //\r\n  function mapArguments(args, properties) {\r\n    let argsLength = args.length;\r\n    let options = {};\r\n\r\n    if (argsLength < 1 || argsLength > 2) {\r\n      throw new Error('Invalid argument length');\r\n    }\r\n\r\n    if (argsLength === 2 || typeof args[0] === 'string') {\r\n      options[properties[0]] = args[0];\r\n      options[properties[1]] = args[1];\r\n    } else {\r\n      options = args[0];\r\n    }\r\n\r\n    return options;\r\n  }\r\n\r\n\r\n  // Merge a set of default dialog options with user supplied arguments\r\n  function mergeArguments(defaults, args, properties) {\r\n    return $.extend(\r\n      // Deep merge\r\n      true,\r\n      // Ensure the target is an empty, unreferenced object\r\n      {},\r\n      // The base options object for this type of dialog (often just buttons)\r\n      defaults,\r\n      // 'args' could be an object or array; if it's an array properties will map it to a proper options object\r\n      mapArguments(args, properties)\r\n    );\r\n  }\r\n\r\n\r\n  // This entry-level method makes heavy use of composition to take a simple range of inputs and return valid options suitable for passing to bootbox.dialog\r\n  function mergeDialogOptions(className, labels, properties, args) {\r\n    let locale;\r\n    if (args && args[0]) {\r\n      locale = args[0].locale || defaults.locale;\r\n      let swapButtons = args[0].swapButtonOrder || defaults.swapButtonOrder;\r\n\r\n      if (swapButtons) {\r\n        labels = labels.reverse();\r\n      }\r\n    }\r\n\r\n    // Build up a base set of dialog properties\r\n    let baseOptions = {\r\n      className: 'bootbox-' + className,\r\n      buttons: createLabels(labels, locale)\r\n    };\r\n\r\n    // Ensure the buttons properties generated, *after* merging with user args are still valid against the supplied labels\r\n    return validateButtons(\r\n      // Merge the generated base properties with user supplied arguments\r\n      mergeArguments(\r\n        baseOptions,\r\n        args,\r\n        // If args.length > 1, properties specify how each arg maps to an object key\r\n        properties\r\n      ),\r\n      labels\r\n    );\r\n  }\r\n\r\n\r\n  // Checks each button object to see if key is valid. \r\n  // This function will only be called by the alert, confirm, and prompt helpers. \r\n  function validateButtons(options, buttons) {\r\n    let allowedButtons = {};\r\n    each(buttons, function (key, value) {\r\n      allowedButtons[value] = true;\r\n    });\r\n\r\n    each(options.buttons, function (key) {\r\n      if (allowedButtons[key] === undefined) {\r\n        throw new Error('button key \"' + key + '\" is not allowed (options are ' + buttons.join(' ') + ')');\r\n      }\r\n    });\r\n\r\n    return options;\r\n  }\r\n\r\n\r\n  // From a given list of arguments, return a suitable object of button labels.\r\n  // All this does is normalise the given labels and translate them where possible.\r\n  // e.g. \"ok\", \"confirm\" -> { ok: \"OK\", cancel: \"Annuleren\" }\r\n  function createLabels(labels, locale) {\r\n    let buttons = {};\r\n\r\n    for (let i = 0, j = labels.length; i < j; i++) {\r\n      let argument = labels[i];\r\n      let key = argument.toLowerCase();\r\n      let value = argument.toUpperCase();\r\n\r\n      buttons[key] = {\r\n        label: getText(value, locale)\r\n      };\r\n    }\r\n\r\n    return buttons;\r\n  }\r\n\r\n\r\n  // Get localized text from a locale. Defaults to 'en' locale if no locale provided or a non-registered locale is requested\r\n  function getText(key, locale) {\r\n    let labels = locales[locale];\r\n\r\n    return labels ? labels[key] : locales.en[key];\r\n  }\r\n\r\n\r\n  // Filter and tidy up any user supplied parameters to this dialog.\r\n  // Also looks for any shorthands used and ensures that the options which are returned are all normalized properly\r\n  function sanitize(options) {\r\n    let buttons;\r\n    let total;\r\n\r\n    if (typeof options !== 'object') {\r\n      throw new Error('Please supply an object of options');\r\n    }\r\n\r\n    if (!options.message) {\r\n      throw new Error('\"message\" option must not be null or an empty string.');\r\n    }\r\n\r\n    // Make sure any supplied options take precedence over defaults\r\n    options = $.extend({}, defaults, options);\r\n\r\n    // Make sure backdrop is either true, false, or 'static'\r\n    if (!options.backdrop) {\r\n      options.backdrop = (options.backdrop === false || options.backdrop === 0) ? false : 'static';\r\n    } else {\r\n      options.backdrop = typeof options.backdrop === 'string' && options.backdrop.toLowerCase() === 'static' ? 'static' : true;\r\n    } \r\n\r\n    // No buttons is still a valid dialog but it's cleaner to always have a buttons object to iterate over, even if it's empty\r\n    if (!options.buttons) {\r\n      options.buttons = {};\r\n    }\r\n    \r\n    buttons = options.buttons;\r\n\r\n    total = getKeyLength(buttons);\r\n\r\n    each(buttons, function (key, button, index) {\r\n      if (typeof button === 'function') {\r\n        // Short form, assume value is our callback. Since button isn't an object it isn't a reference either so re-assign it\r\n        button = buttons[key] = {\r\n          callback: button\r\n        };\r\n      }\r\n\r\n      // Before any further checks, make sure button is the correct type\r\n      if (typeof button !== 'object') {\r\n        throw new Error('button with key \"' + key + '\" must be an object');\r\n      }\r\n\r\n      if (!button.label) {\r\n        // The lack of an explicit label means we'll assume the key is good enough\r\n        button.label = key;\r\n      }\r\n\r\n      if (!button.className) {\r\n        let isPrimary = false;\r\n        if (options.swapButtonOrder) {\r\n          isPrimary = index === 0;\r\n        }\r\n        else {\r\n          isPrimary = index === total - 1;\r\n        }\r\n\r\n        if (total <= 2 && isPrimary) {\r\n          // always add a primary to the main option in a one or two-button dialog\r\n          button.className = 'btn-primary';\r\n        } \r\n        else {\r\n          // adding both classes allows us to target both BS3 and BS4+ without needing to check the version\r\n          button.className = 'btn-secondary btn-default';\r\n        }\r\n      }\r\n    });\r\n\r\n    return options;\r\n  }\r\n\r\n\r\n  // Returns a count of the properties defined on the object\r\n  function getKeyLength(obj) {\r\n    return Object.keys(obj).length;\r\n  }\r\n\r\n\r\n  // Tiny wrapper function around jQuery.each; just adds index as the third parameter\r\n  function each(collection, iterator) {\r\n    let index = 0;\r\n    $.each(collection, function (key, value) {\r\n      iterator(key, value, index++);\r\n    });\r\n  }\r\n\r\n\r\n  function focusPrimaryButton(e) {\r\n    e.data.dialog.find('.bootbox-accept').first().trigger('focus');\r\n  }\r\n\r\n\r\n  function destroyModal(e) {\r\n    // Ensure we don't accidentally intercept hidden events triggered by children of the current dialog. \r\n    // We shouldn't need to handle this anymore, now that Bootstrap namespaces its events, but still worth doing.\r\n    if (e.target === e.data.dialog[0]) {\r\n      e.data.dialog.remove();\r\n    }\r\n  }\r\n\r\n\r\n  function unbindModal(e) {\r\n    if (e.target === e.data.dialog[0]) {\r\n      e.data.dialog.off('escape.close.bb');\r\n      e.data.dialog.off('click');\r\n    }\r\n  }\r\n\r\n\r\n  //  Handle the invoked dialog callback\r\n  function processCallback(e, dialog, callback) {\r\n    e.stopPropagation();\r\n    e.preventDefault();\r\n\r\n    // By default we assume a callback will get rid of the dialog, although it is given the opportunity to override this\r\n\r\n    // If the callback can be invoked and it *explicitly returns false*, then we'll set a flag to keep the dialog active...\r\n    let preserveDialog = typeof callback === 'function' && callback.call(dialog, e) === false;\r\n\r\n    // ... otherwise we'll bin it\r\n    if (!preserveDialog) {\r\n      dialog.modal('hide');\r\n    }\r\n  }\r\n\r\n  // Validate `min` and `max` values based on the current `inputType` value\r\n  function minAndMaxAreValid(type, min, max) {\r\n    let result = false;\r\n    let minValid = true;\r\n    let maxValid = true;\r\n\r\n    if (type === 'date') {\r\n      if (min !== undefined && !(minValid = dateIsValid(min))) {\r\n        console.warn('Browsers which natively support the \"date\" input type expect date values to be of the form \"YYYY-MM-DD\" (see ISO-8601 https://www.iso.org/iso-8601-date-and-time-format.html). Bootbox does not enforce this rule, but your min value may not be enforced by this browser.');\r\n      }\r\n      else if (max !== undefined && !(maxValid = dateIsValid(max))) {\r\n        console.warn('Browsers which natively support the \"date\" input type expect date values to be of the form \"YYYY-MM-DD\" (see ISO-8601 https://www.iso.org/iso-8601-date-and-time-format.html). Bootbox does not enforce this rule, but your max value may not be enforced by this browser.');\r\n      }\r\n    }\r\n    else if (type === 'time') {\r\n      if (min !== undefined && !(minValid = timeIsValid(min))) {\r\n        throw new Error('\"min\" is not a valid time. See https://www.w3.org/TR/2012/WD-html-markup-20120315/datatypes.html#form.data.time for more information.');\r\n      }\r\n      else if (max !== undefined && !(maxValid = timeIsValid(max))) {\r\n        throw new Error('\"max\" is not a valid time. See https://www.w3.org/TR/2012/WD-html-markup-20120315/datatypes.html#form.data.time for more information.');\r\n      }\r\n    }\r\n    else {\r\n      if (min !== undefined && isNaN(min)) {\r\n        minValid = false;\r\n        throw new Error('\"min\" must be a valid number. See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-min for more information.');\r\n      }\r\n\r\n      if (max !== undefined && isNaN(max)) {\r\n        maxValid = false;\r\n        throw new Error('\"max\" must be a valid number. See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-max for more information.');\r\n      }\r\n    }\r\n\r\n    if (minValid && maxValid) {\r\n      if (max < min) {\r\n        throw new Error('\"max\" must be greater than or equal to \"min\". See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-max for more information.');\r\n      }\r\n      else {\r\n        result = true;\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  function timeIsValid(value) {\r\n    return /([01][0-9]|2[0-3]):[0-5][0-9]?:[0-5][0-9]/.test(value);\r\n  }\r\n\r\n  function dateIsValid(value) {\r\n    return /(\\d{4})-(\\d{2})-(\\d{2})/.test(value);\r\n  }\r\n\r\n  //  The Bootbox object\r\n  return exports;\r\n}));\r\n", "/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/main/actionview/app/javascript\nReleased under the MIT license\n */\n(function(global, factory) {\n  typeof exports === \"object\" && typeof module !== \"undefined\" ? module.exports = factory() : typeof define === \"function\" && define.amd ? define(factory) : (global = typeof globalThis !== \"undefined\" ? globalThis : global || self, \n  global.Rails = factory());\n})(this, (function() {\n  \"use strict\";\n  const linkClickSelector = \"a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]\";\n  const buttonClickSelector = {\n    selector: \"button[data-remote]:not([form]), button[data-confirm]:not([form])\",\n    exclude: \"form button\"\n  };\n  const inputChangeSelector = \"select[data-remote], input[data-remote], textarea[data-remote]\";\n  const formSubmitSelector = \"form:not([data-turbo=true])\";\n  const formInputClickSelector = \"form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])\";\n  const formDisableSelector = \"input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled\";\n  const formEnableSelector = \"input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled\";\n  const fileInputSelector = \"input[name][type=file]:not([disabled])\";\n  const linkDisableSelector = \"a[data-disable-with], a[data-disable]\";\n  const buttonDisableSelector = \"button[data-remote][data-disable-with], button[data-remote][data-disable]\";\n  let nonce = null;\n  const loadCSPNonce = () => {\n    const metaTag = document.querySelector(\"meta[name=csp-nonce]\");\n    return nonce = metaTag && metaTag.content;\n  };\n  const cspNonce = () => nonce || loadCSPNonce();\n  const m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n  const matches = function(element, selector) {\n    if (selector.exclude) {\n      return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n    } else {\n      return m.call(element, selector);\n    }\n  };\n  const EXPANDO = \"_ujsData\";\n  const getData = (element, key) => element[EXPANDO] ? element[EXPANDO][key] : undefined;\n  const setData = function(element, key, value) {\n    if (!element[EXPANDO]) {\n      element[EXPANDO] = {};\n    }\n    return element[EXPANDO][key] = value;\n  };\n  const $ = selector => Array.prototype.slice.call(document.querySelectorAll(selector));\n  const isContentEditable = function(element) {\n    var isEditable = false;\n    do {\n      if (element.isContentEditable) {\n        isEditable = true;\n        break;\n      }\n      element = element.parentElement;\n    } while (element);\n    return isEditable;\n  };\n  const csrfToken = () => {\n    const meta = document.querySelector(\"meta[name=csrf-token]\");\n    return meta && meta.content;\n  };\n  const csrfParam = () => {\n    const meta = document.querySelector(\"meta[name=csrf-param]\");\n    return meta && meta.content;\n  };\n  const CSRFProtection = xhr => {\n    const token = csrfToken();\n    if (token) {\n      return xhr.setRequestHeader(\"X-CSRF-Token\", token);\n    }\n  };\n  const refreshCSRFTokens = () => {\n    const token = csrfToken();\n    const param = csrfParam();\n    if (token && param) {\n      return $('form input[name=\"' + param + '\"]').forEach((input => input.value = token));\n    }\n  };\n  const AcceptHeaders = {\n    \"*\": \"*/*\",\n    text: \"text/plain\",\n    html: \"text/html\",\n    xml: \"application/xml, text/xml\",\n    json: \"application/json, text/javascript\",\n    script: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n  };\n  const ajax = options => {\n    options = prepareOptions(options);\n    var xhr = createXHR(options, (function() {\n      const response = processResponse(xhr.response != null ? xhr.response : xhr.responseText, xhr.getResponseHeader(\"Content-Type\"));\n      if (Math.floor(xhr.status / 100) === 2) {\n        if (typeof options.success === \"function\") {\n          options.success(response, xhr.statusText, xhr);\n        }\n      } else {\n        if (typeof options.error === \"function\") {\n          options.error(response, xhr.statusText, xhr);\n        }\n      }\n      return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : undefined;\n    }));\n    if (options.beforeSend && !options.beforeSend(xhr, options)) {\n      return false;\n    }\n    if (xhr.readyState === XMLHttpRequest.OPENED) {\n      return xhr.send(options.data);\n    }\n  };\n  var prepareOptions = function(options) {\n    options.url = options.url || location.href;\n    options.type = options.type.toUpperCase();\n    if (options.type === \"GET\" && options.data) {\n      if (options.url.indexOf(\"?\") < 0) {\n        options.url += \"?\" + options.data;\n      } else {\n        options.url += \"&\" + options.data;\n      }\n    }\n    if (!(options.dataType in AcceptHeaders)) {\n      options.dataType = \"*\";\n    }\n    options.accept = AcceptHeaders[options.dataType];\n    if (options.dataType !== \"*\") {\n      options.accept += \", */*; q=0.01\";\n    }\n    return options;\n  };\n  var createXHR = function(options, done) {\n    const xhr = new XMLHttpRequest;\n    xhr.open(options.type, options.url, true);\n    xhr.setRequestHeader(\"Accept\", options.accept);\n    if (typeof options.data === \"string\") {\n      xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded; charset=UTF-8\");\n    }\n    if (!options.crossDomain) {\n      xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n      CSRFProtection(xhr);\n    }\n    xhr.withCredentials = !!options.withCredentials;\n    xhr.onreadystatechange = function() {\n      if (xhr.readyState === XMLHttpRequest.DONE) {\n        return done(xhr);\n      }\n    };\n    return xhr;\n  };\n  var processResponse = function(response, type) {\n    if (typeof response === \"string\" && typeof type === \"string\") {\n      if (type.match(/\\bjson\\b/)) {\n        try {\n          response = JSON.parse(response);\n        } catch (error) {}\n      } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n        const script = document.createElement(\"script\");\n        script.setAttribute(\"nonce\", cspNonce());\n        script.text = response;\n        document.head.appendChild(script).parentNode.removeChild(script);\n      } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n        const parser = new DOMParser;\n        type = type.replace(/;.+/, \"\");\n        try {\n          response = parser.parseFromString(response, type);\n        } catch (error1) {}\n      }\n    }\n    return response;\n  };\n  const href = element => element.href;\n  const isCrossDomain = function(url) {\n    const originAnchor = document.createElement(\"a\");\n    originAnchor.href = location.href;\n    const urlAnchor = document.createElement(\"a\");\n    try {\n      urlAnchor.href = url;\n      return !((!urlAnchor.protocol || urlAnchor.protocol === \":\") && !urlAnchor.host || originAnchor.protocol + \"//\" + originAnchor.host === urlAnchor.protocol + \"//\" + urlAnchor.host);\n    } catch (e) {\n      return true;\n    }\n  };\n  let preventDefault;\n  let {CustomEvent: CustomEvent} = window;\n  if (typeof CustomEvent !== \"function\") {\n    CustomEvent = function(event, params) {\n      const evt = document.createEvent(\"CustomEvent\");\n      evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n      return evt;\n    };\n    CustomEvent.prototype = window.Event.prototype;\n    ({preventDefault: preventDefault} = CustomEvent.prototype);\n    CustomEvent.prototype.preventDefault = function() {\n      const result = preventDefault.call(this);\n      if (this.cancelable && !this.defaultPrevented) {\n        Object.defineProperty(this, \"defaultPrevented\", {\n          get() {\n            return true;\n          }\n        });\n      }\n      return result;\n    };\n  }\n  const fire = (obj, name, data) => {\n    const event = new CustomEvent(name, {\n      bubbles: true,\n      cancelable: true,\n      detail: data\n    });\n    obj.dispatchEvent(event);\n    return !event.defaultPrevented;\n  };\n  const stopEverything = e => {\n    fire(e.target, \"ujs:everythingStopped\");\n    e.preventDefault();\n    e.stopPropagation();\n    e.stopImmediatePropagation();\n  };\n  const delegate = (element, selector, eventType, handler) => element.addEventListener(eventType, (function(e) {\n    let {target: target} = e;\n    while (!!(target instanceof Element) && !matches(target, selector)) {\n      target = target.parentNode;\n    }\n    if (target instanceof Element && handler.call(target, e) === false) {\n      e.preventDefault();\n      e.stopPropagation();\n    }\n  }));\n  const toArray = e => Array.prototype.slice.call(e);\n  const serializeElement = (element, additionalParam) => {\n    let inputs = [ element ];\n    if (matches(element, \"form\")) {\n      inputs = toArray(element.elements);\n    }\n    const params = [];\n    inputs.forEach((function(input) {\n      if (!input.name || input.disabled) {\n        return;\n      }\n      if (matches(input, \"fieldset[disabled] *\")) {\n        return;\n      }\n      if (matches(input, \"select\")) {\n        toArray(input.options).forEach((function(option) {\n          if (option.selected) {\n            params.push({\n              name: input.name,\n              value: option.value\n            });\n          }\n        }));\n      } else if (input.checked || [ \"radio\", \"checkbox\", \"submit\" ].indexOf(input.type) === -1) {\n        params.push({\n          name: input.name,\n          value: input.value\n        });\n      }\n    }));\n    if (additionalParam) {\n      params.push(additionalParam);\n    }\n    return params.map((function(param) {\n      if (param.name) {\n        return `${encodeURIComponent(param.name)}=${encodeURIComponent(param.value)}`;\n      } else {\n        return param;\n      }\n    })).join(\"&\");\n  };\n  const formElements = (form, selector) => {\n    if (matches(form, \"form\")) {\n      return toArray(form.elements).filter((el => matches(el, selector)));\n    } else {\n      return toArray(form.querySelectorAll(selector));\n    }\n  };\n  const handleConfirmWithRails = rails => function(e) {\n    if (!allowAction(this, rails)) {\n      stopEverything(e);\n    }\n  };\n  const confirm = (message, element) => window.confirm(message);\n  var allowAction = function(element, rails) {\n    let callback;\n    const message = element.getAttribute(\"data-confirm\");\n    if (!message) {\n      return true;\n    }\n    let answer = false;\n    if (fire(element, \"confirm\")) {\n      try {\n        answer = rails.confirm(message, element);\n      } catch (error) {}\n      callback = fire(element, \"confirm:complete\", [ answer ]);\n    }\n    return answer && callback;\n  };\n  const handleDisabledElement = function(e) {\n    const element = this;\n    if (element.disabled) {\n      stopEverything(e);\n    }\n  };\n  const enableElement = e => {\n    let element;\n    if (e instanceof Event) {\n      if (isXhrRedirect(e)) {\n        return;\n      }\n      element = e.target;\n    } else {\n      element = e;\n    }\n    if (isContentEditable(element)) {\n      return;\n    }\n    if (matches(element, linkDisableSelector)) {\n      return enableLinkElement(element);\n    } else if (matches(element, buttonDisableSelector) || matches(element, formEnableSelector)) {\n      return enableFormElement(element);\n    } else if (matches(element, formSubmitSelector)) {\n      return enableFormElements(element);\n    }\n  };\n  const disableElement = e => {\n    const element = e instanceof Event ? e.target : e;\n    if (isContentEditable(element)) {\n      return;\n    }\n    if (matches(element, linkDisableSelector)) {\n      return disableLinkElement(element);\n    } else if (matches(element, buttonDisableSelector) || matches(element, formDisableSelector)) {\n      return disableFormElement(element);\n    } else if (matches(element, formSubmitSelector)) {\n      return disableFormElements(element);\n    }\n  };\n  var disableLinkElement = function(element) {\n    if (getData(element, \"ujs:disabled\")) {\n      return;\n    }\n    const replacement = element.getAttribute(\"data-disable-with\");\n    if (replacement != null) {\n      setData(element, \"ujs:enable-with\", element.innerHTML);\n      element.innerHTML = replacement;\n    }\n    element.addEventListener(\"click\", stopEverything);\n    return setData(element, \"ujs:disabled\", true);\n  };\n  var enableLinkElement = function(element) {\n    const originalText = getData(element, \"ujs:enable-with\");\n    if (originalText != null) {\n      element.innerHTML = originalText;\n      setData(element, \"ujs:enable-with\", null);\n    }\n    element.removeEventListener(\"click\", stopEverything);\n    return setData(element, \"ujs:disabled\", null);\n  };\n  var disableFormElements = form => formElements(form, formDisableSelector).forEach(disableFormElement);\n  var disableFormElement = function(element) {\n    if (getData(element, \"ujs:disabled\")) {\n      return;\n    }\n    const replacement = element.getAttribute(\"data-disable-with\");\n    if (replacement != null) {\n      if (matches(element, \"button\")) {\n        setData(element, \"ujs:enable-with\", element.innerHTML);\n        element.innerHTML = replacement;\n      } else {\n        setData(element, \"ujs:enable-with\", element.value);\n        element.value = replacement;\n      }\n    }\n    element.disabled = true;\n    return setData(element, \"ujs:disabled\", true);\n  };\n  var enableFormElements = form => formElements(form, formEnableSelector).forEach((element => enableFormElement(element)));\n  var enableFormElement = function(element) {\n    const originalText = getData(element, \"ujs:enable-with\");\n    if (originalText != null) {\n      if (matches(element, \"button\")) {\n        element.innerHTML = originalText;\n      } else {\n        element.value = originalText;\n      }\n      setData(element, \"ujs:enable-with\", null);\n    }\n    element.disabled = false;\n    return setData(element, \"ujs:disabled\", null);\n  };\n  var isXhrRedirect = function(event) {\n    const xhr = event.detail ? event.detail[0] : undefined;\n    return xhr && xhr.getResponseHeader(\"X-Xhr-Redirect\");\n  };\n  const handleMethodWithRails = rails => function(e) {\n    const link = this;\n    const method = link.getAttribute(\"data-method\");\n    if (!method) {\n      return;\n    }\n    if (isContentEditable(this)) {\n      return;\n    }\n    const href = rails.href(link);\n    const csrfToken$1 = csrfToken();\n    const csrfParam$1 = csrfParam();\n    const form = document.createElement(\"form\");\n    let formContent = `<input name='_method' value='${method}' type='hidden' />`;\n    if (csrfParam$1 && csrfToken$1 && !isCrossDomain(href)) {\n      formContent += `<input name='${csrfParam$1}' value='${csrfToken$1}' type='hidden' />`;\n    }\n    formContent += '<input type=\"submit\" />';\n    form.method = \"post\";\n    form.action = href;\n    form.target = link.target;\n    form.innerHTML = formContent;\n    form.style.display = \"none\";\n    document.body.appendChild(form);\n    form.querySelector('[type=\"submit\"]').click();\n    stopEverything(e);\n  };\n  const isRemote = function(element) {\n    const value = element.getAttribute(\"data-remote\");\n    return value != null && value !== \"false\";\n  };\n  const handleRemoteWithRails = rails => function(e) {\n    let data, method, url;\n    const element = this;\n    if (!isRemote(element)) {\n      return true;\n    }\n    if (!fire(element, \"ajax:before\")) {\n      fire(element, \"ajax:stopped\");\n      return false;\n    }\n    if (isContentEditable(element)) {\n      fire(element, \"ajax:stopped\");\n      return false;\n    }\n    const withCredentials = element.getAttribute(\"data-with-credentials\");\n    const dataType = element.getAttribute(\"data-type\") || \"script\";\n    if (matches(element, formSubmitSelector)) {\n      const button = getData(element, \"ujs:submit-button\");\n      method = getData(element, \"ujs:submit-button-formmethod\") || element.getAttribute(\"method\") || \"get\";\n      url = getData(element, \"ujs:submit-button-formaction\") || element.getAttribute(\"action\") || location.href;\n      if (method.toUpperCase() === \"GET\") {\n        url = url.replace(/\\?.*$/, \"\");\n      }\n      if (element.enctype === \"multipart/form-data\") {\n        data = new FormData(element);\n        if (button != null) {\n          data.append(button.name, button.value);\n        }\n      } else {\n        data = serializeElement(element, button);\n      }\n      setData(element, \"ujs:submit-button\", null);\n      setData(element, \"ujs:submit-button-formmethod\", null);\n      setData(element, \"ujs:submit-button-formaction\", null);\n    } else if (matches(element, buttonClickSelector) || matches(element, inputChangeSelector)) {\n      method = element.getAttribute(\"data-method\");\n      url = element.getAttribute(\"data-url\");\n      data = serializeElement(element, element.getAttribute(\"data-params\"));\n    } else {\n      method = element.getAttribute(\"data-method\");\n      url = rails.href(element);\n      data = element.getAttribute(\"data-params\");\n    }\n    ajax({\n      type: method || \"GET\",\n      url: url,\n      data: data,\n      dataType: dataType,\n      beforeSend(xhr, options) {\n        if (fire(element, \"ajax:beforeSend\", [ xhr, options ])) {\n          return fire(element, \"ajax:send\", [ xhr ]);\n        } else {\n          fire(element, \"ajax:stopped\");\n          return false;\n        }\n      },\n      success(...args) {\n        return fire(element, \"ajax:success\", args);\n      },\n      error(...args) {\n        return fire(element, \"ajax:error\", args);\n      },\n      complete(...args) {\n        return fire(element, \"ajax:complete\", args);\n      },\n      crossDomain: isCrossDomain(url),\n      withCredentials: withCredentials != null && withCredentials !== \"false\"\n    });\n    stopEverything(e);\n  };\n  const formSubmitButtonClick = function(e) {\n    const button = this;\n    const {form: form} = button;\n    if (!form) {\n      return;\n    }\n    if (button.name) {\n      setData(form, \"ujs:submit-button\", {\n        name: button.name,\n        value: button.value\n      });\n    }\n    setData(form, \"ujs:formnovalidate-button\", button.formNoValidate);\n    setData(form, \"ujs:submit-button-formaction\", button.getAttribute(\"formaction\"));\n    return setData(form, \"ujs:submit-button-formmethod\", button.getAttribute(\"formmethod\"));\n  };\n  const preventInsignificantClick = function(e) {\n    const link = this;\n    const method = (link.getAttribute(\"data-method\") || \"GET\").toUpperCase();\n    const data = link.getAttribute(\"data-params\");\n    const metaClick = e.metaKey || e.ctrlKey;\n    const insignificantMetaClick = metaClick && method === \"GET\" && !data;\n    const nonPrimaryMouseClick = e.button != null && e.button !== 0;\n    if (nonPrimaryMouseClick || insignificantMetaClick) {\n      e.stopImmediatePropagation();\n    }\n  };\n  const Rails = {\n    $: $,\n    ajax: ajax,\n    buttonClickSelector: buttonClickSelector,\n    buttonDisableSelector: buttonDisableSelector,\n    confirm: confirm,\n    cspNonce: cspNonce,\n    csrfToken: csrfToken,\n    csrfParam: csrfParam,\n    CSRFProtection: CSRFProtection,\n    delegate: delegate,\n    disableElement: disableElement,\n    enableElement: enableElement,\n    fileInputSelector: fileInputSelector,\n    fire: fire,\n    formElements: formElements,\n    formEnableSelector: formEnableSelector,\n    formDisableSelector: formDisableSelector,\n    formInputClickSelector: formInputClickSelector,\n    formSubmitButtonClick: formSubmitButtonClick,\n    formSubmitSelector: formSubmitSelector,\n    getData: getData,\n    handleDisabledElement: handleDisabledElement,\n    href: href,\n    inputChangeSelector: inputChangeSelector,\n    isCrossDomain: isCrossDomain,\n    linkClickSelector: linkClickSelector,\n    linkDisableSelector: linkDisableSelector,\n    loadCSPNonce: loadCSPNonce,\n    matches: matches,\n    preventInsignificantClick: preventInsignificantClick,\n    refreshCSRFTokens: refreshCSRFTokens,\n    serializeElement: serializeElement,\n    setData: setData,\n    stopEverything: stopEverything\n  };\n  const handleConfirm = handleConfirmWithRails(Rails);\n  Rails.handleConfirm = handleConfirm;\n  const handleMethod = handleMethodWithRails(Rails);\n  Rails.handleMethod = handleMethod;\n  const handleRemote = handleRemoteWithRails(Rails);\n  Rails.handleRemote = handleRemote;\n  const start = function() {\n    if (window._rails_loaded) {\n      throw new Error(\"rails-ujs has already been loaded!\");\n    }\n    window.addEventListener(\"pageshow\", (function() {\n      $(formEnableSelector).forEach((function(el) {\n        if (getData(el, \"ujs:disabled\")) {\n          enableElement(el);\n        }\n      }));\n      $(linkDisableSelector).forEach((function(el) {\n        if (getData(el, \"ujs:disabled\")) {\n          enableElement(el);\n        }\n      }));\n    }));\n    delegate(document, linkDisableSelector, \"ajax:complete\", enableElement);\n    delegate(document, linkDisableSelector, \"ajax:stopped\", enableElement);\n    delegate(document, buttonDisableSelector, \"ajax:complete\", enableElement);\n    delegate(document, buttonDisableSelector, \"ajax:stopped\", enableElement);\n    delegate(document, linkClickSelector, \"click\", preventInsignificantClick);\n    delegate(document, linkClickSelector, \"click\", handleDisabledElement);\n    delegate(document, linkClickSelector, \"click\", handleConfirm);\n    delegate(document, linkClickSelector, \"click\", disableElement);\n    delegate(document, linkClickSelector, \"click\", handleRemote);\n    delegate(document, linkClickSelector, \"click\", handleMethod);\n    delegate(document, buttonClickSelector, \"click\", preventInsignificantClick);\n    delegate(document, buttonClickSelector, \"click\", handleDisabledElement);\n    delegate(document, buttonClickSelector, \"click\", handleConfirm);\n    delegate(document, buttonClickSelector, \"click\", disableElement);\n    delegate(document, buttonClickSelector, \"click\", handleRemote);\n    delegate(document, inputChangeSelector, \"change\", handleDisabledElement);\n    delegate(document, inputChangeSelector, \"change\", handleConfirm);\n    delegate(document, inputChangeSelector, \"change\", handleRemote);\n    delegate(document, formSubmitSelector, \"submit\", handleDisabledElement);\n    delegate(document, formSubmitSelector, \"submit\", handleConfirm);\n    delegate(document, formSubmitSelector, \"submit\", handleRemote);\n    delegate(document, formSubmitSelector, \"submit\", (e => setTimeout((() => disableElement(e)), 13)));\n    delegate(document, formSubmitSelector, \"ajax:send\", disableElement);\n    delegate(document, formSubmitSelector, \"ajax:complete\", enableElement);\n    delegate(document, formInputClickSelector, \"click\", preventInsignificantClick);\n    delegate(document, formInputClickSelector, \"click\", handleDisabledElement);\n    delegate(document, formInputClickSelector, \"click\", handleConfirm);\n    delegate(document, formInputClickSelector, \"click\", formSubmitButtonClick);\n    document.addEventListener(\"DOMContentLoaded\", refreshCSRFTokens);\n    document.addEventListener(\"DOMContentLoaded\", loadCSPNonce);\n    return window._rails_loaded = true;\n  };\n  Rails.start = start;\n  if (typeof jQuery !== \"undefined\" && jQuery && jQuery.ajax) {\n    if (jQuery.rails) {\n      throw new Error(\"If you load both jquery_ujs and rails-ujs, use rails-ujs only.\");\n    }\n    jQuery.rails = Rails;\n    jQuery.ajaxPrefilter((function(options, originalOptions, xhr) {\n      if (!options.crossDomain) {\n        return CSRFProtection(xhr);\n      }\n    }));\n  }\n  if (typeof exports !== \"object\" && typeof module === \"undefined\") {\n    window.Rails = Rails;\n    if (fire(document, \"rails:attachBindings\")) {\n      start();\n    }\n  }\n  return Rails;\n}));\n", "/* ========================================================================\n * Bootstrap: transition.js v3.3.6\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // http://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: alert.js v3.3.6\n * http://getbootstrap.com/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.3.6'\n\n  Alert.TRANSITION_DURATION = 150\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = $(selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert')\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: button.js v3.3.6\n * http://getbootstrap.com/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element  = $(element)\n    this.options   = $.extend({}, Button.DEFAULTS, options)\n    this.isLoading = false\n  }\n\n  Button.VERSION  = '3.3.6'\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state += 'Text'\n\n    if (data.resetText == null) $el.data('resetText', $el[val]())\n\n    // push to event loop to allow forms to submit\n    setTimeout($.proxy(function () {\n      $el[val](data[state] == null ? this.options[state] : data[state])\n\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked')) changed = false\n        $parent.find('.active').removeClass('active')\n        this.$element.addClass('active')\n      } else if ($input.prop('type') == 'checkbox') {\n        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false\n        this.$element.toggleClass('active')\n      }\n      $input.prop('checked', this.$element.hasClass('active'))\n      if (changed) $input.trigger('change')\n    } else {\n      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n      this.$element.toggleClass('active')\n    }\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  var old = $.fn.button\n\n  $.fn.button             = Plugin\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document)\n    .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      var $btn = $(e.target)\n      if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')\n      Plugin.call($btn, 'toggle')\n      if (!($(e.target).is('input[type=\"radio\"]') || $(e.target).is('input[type=\"checkbox\"]'))) e.preventDefault()\n    })\n    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n    })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: carousel.js v3.3.6\n * http://getbootstrap.com/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      = null\n    this.sliding     = null\n    this.interval    = null\n    this.$active     = null\n    this.$items      = null\n\n    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n  }\n\n  Carousel.VERSION  = '3.3.6'\n\n  Carousel.TRANSITION_DURATION = 600\n\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true,\n    keyboard: true\n  }\n\n  Carousel.prototype.keydown = function (e) {\n    if (/input|textarea/i.test(e.target.tagName)) return\n    switch (e.which) {\n      case 37: this.prev(); break\n      case 39: this.next(); break\n      default: return\n    }\n\n    e.preventDefault()\n  }\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item')\n    return this.$items.index(item || this.$active)\n  }\n\n  Carousel.prototype.getItemForDirection = function (direction, active) {\n    var activeIndex = this.getItemIndex(active)\n    var willWrap = (direction == 'prev' && activeIndex === 0)\n                || (direction == 'next' && activeIndex == (this.$items.length - 1))\n    if (willWrap && !this.options.wrap) return active\n    var delta = direction == 'prev' ? -1 : 1\n    var itemIndex = (activeIndex + delta) % this.$items.length\n    return this.$items.eq(itemIndex)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || this.getItemForDirection(type, $active)\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var that      = this\n\n    if ($next.hasClass('active')) return (this.sliding = false)\n\n    var relatedTarget = $next[0]\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    })\n    this.$element.trigger(slideEvent)\n    if (slideEvent.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n      $nextIndicator && $nextIndicator.addClass('active')\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type)\n      $next[0].offsetWidth // force reflow\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one('bsTransitionEnd', function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () {\n            that.$element.trigger(slidEvent)\n          }, 0)\n        })\n        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger(slidEvent)\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  var old = $.fn.carousel\n\n  $.fn.carousel             = Plugin\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  var clickHandler = function (e) {\n    var href\n    var $this   = $(this)\n    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n    if (!$target.hasClass('carousel')) return\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    Plugin.call($target, options)\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  }\n\n  $(document)\n    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      Plugin.call($carousel, $carousel.data())\n    })\n  })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: collapse.js v3.3.6\n * http://getbootstrap.com/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.$trigger      = $('[data-toggle=\"collapse\"][href=\"#' + element.id + '\"],' +\n                           '[data-toggle=\"collapse\"][data-target=\"#' + element.id + '\"]')\n    this.transitioning = null\n\n    if (this.options.parent) {\n      this.$parent = this.getParent()\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n    }\n\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.3.6'\n\n  Collapse.TRANSITION_DURATION = 350\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var activesData\n    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse')\n      if (activesData && activesData.transitioning) return\n    }\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide')\n      activesData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n      .attr('aria-expanded', true)\n\n    this.$trigger\n      .removeClass('collapsed')\n      .attr('aria-expanded', true)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse in')\n      .attr('aria-expanded', false)\n\n    this.$trigger\n      .addClass('collapsed')\n      .attr('aria-expanded', false)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse')\n        .trigger('hidden.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n  Collapse.prototype.getParent = function () {\n    return $(this.options.parent)\n      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n      .each($.proxy(function (i, element) {\n        var $element = $(element)\n        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n      }, this))\n      .end()\n  }\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in')\n\n    $element.attr('aria-expanded', isOpen)\n    $trigger\n      .toggleClass('collapsed', !isOpen)\n      .attr('aria-expanded', isOpen)\n  }\n\n  function getTargetFromTrigger($trigger) {\n    var href\n    var target = $trigger.attr('data-target')\n      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n    return $(target)\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this   = $(this)\n\n    if (!$this.attr('data-target')) e.preventDefault()\n\n    var $target = getTargetFromTrigger($this)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: dropdown.js v3.3.6\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.3.6'\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector && $(selector)\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $this         = $(this)\n      var $parent       = getParent($this)\n      var relatedTarget = { relatedTarget: this }\n\n      if (!$parent.hasClass('open')) return\n\n      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.attr('aria-expanded', 'false')\n      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n    })\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $(document.createElement('div'))\n          .addClass('dropdown-backdrop')\n          .insertAfter($(this))\n          .on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this\n        .trigger('focus')\n        .attr('aria-expanded', 'true')\n\n      $parent\n        .toggleClass('open')\n        .trigger($.Event('shown.bs.dropdown', relatedTarget))\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive && e.which != 27 || isActive && e.which == 27) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.disabled):visible a'\n    var $items = $parent.find('.dropdown-menu' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index(e.target)\n\n    if (e.which == 38 && index > 0)                 index--         // up\n    if (e.which == 40 && index < $items.length - 1) index++         // down\n    if (!~index)                                    index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: modal.js v3.3.6\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options             = options\n    this.$body               = $(document.body)\n    this.$element            = $(element)\n    this.$dialog             = this.$element.find('.modal-dialog')\n    this.$backdrop           = null\n    this.isShown             = null\n    this.originalBodyPad     = null\n    this.scrollbarWidth      = 0\n    this.ignoreBackdropClick = false\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION  = '3.3.6'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n      that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n      })\n    })\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element.addClass('in')\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$dialog // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .off('click.dismiss.bs.modal')\n      .off('mouseup.dismiss.bs.modal')\n\n    this.$dialog.off('mousedown.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $(document.createElement('div'))\n        .addClass('modal-backdrop ' + animate)\n        .appendTo(this.$body)\n\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (this.ignoreBackdropClick) {\n          this.ignoreBackdropClick = false\n          return\n        }\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus()\n          : this.hide()\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    var fullWindowWidth = window.innerWidth\n    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n      var documentElementRect = document.documentElement.getBoundingClientRect()\n      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n    }\n    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    this.originalBodyPad = document.body.style.paddingRight || ''\n    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', this.originalBodyPad)\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal             = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) // strip for ie7\n    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: tooltip.js v3.3.6\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       = null\n    this.options    = null\n    this.enabled    = null\n    this.timeout    = null\n    this.hoverState = null\n    this.$element   = null\n    this.inState    = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.3.6'\n\n  Tooltip.TRANSITION_DURATION = 150\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    }\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n    this.inState   = { click: false, hover: false, focus: false }\n\n    if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n    }\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n    }\n\n    if (self.tip().hasClass('in') || self.hoverState == 'in') {\n      self.hoverState = 'in'\n      return\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.isInStateTrue = function () {\n    for (var key in this.inState) {\n      if (this.inState[key]) return true\n    }\n\n    return false\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n    }\n\n    if (self.isInStateTrue()) return\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n      this.$element.trigger('inserted.bs.' + this.type)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var viewportDim = this.getPosition(this.$viewport)\n\n        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :\n                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :\n                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :\n                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        var prevHoverState = that.hoverState\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n\n        if (prevHoverState == 'out') that.leave(that)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  += marginTop\n    offset.left += marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var isVertical          = /top|bottom/.test(placement)\n    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n    this.arrow()\n      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n      .css(isVertical ? 'top' : 'left', '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this\n    var $tip = $(this.$tip)\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      that.$element\n        .removeAttr('aria-describedby')\n        .trigger('hidden.bs.' + that.type)\n      callback && callback()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && $tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n\n    var elRect    = el.getBoundingClientRect()\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n    }\n    var elOffset  = isBody ? { top: 0, left: 0 } : $element.offset()\n    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n    return $.extend({}, elRect, scroll, outerDims, elOffset)\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    if (!this.$tip) {\n      this.$tip = $(this.options.template)\n      if (this.$tip.length != 1) {\n        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n      }\n    }\n    return this.$tip\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    if (e) {\n      self.inState.click = !self.inState.click\n      if (self.isInStateTrue()) self.enter(self)\n      else self.leave(self)\n    } else {\n      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n    }\n  }\n\n  Tooltip.prototype.destroy = function () {\n    var that = this\n    clearTimeout(this.timeout)\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type)\n      if (that.$tip) {\n        that.$tip.detach()\n      }\n      that.$tip = null\n      that.$arrow = null\n      that.$viewport = null\n    })\n  }\n\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: popover.js v3.3.6\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.3.6'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\n      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n    ](content)\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n            o.content.call($e[0]) :\n            o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: scrollspy.js v3.3.6\n * http://getbootstrap.com/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    this.$body          = $(document.body)\n    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target || '') + ' .nav li > a'\n    this.offsets        = []\n    this.targets        = []\n    this.activeTarget   = null\n    this.scrollHeight   = 0\n\n    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.VERSION  = '3.3.6'\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var that          = this\n    var offsetMethod  = 'offset'\n    var offsetBase    = 0\n\n    this.offsets      = []\n    this.targets      = []\n    this.scrollHeight = this.getScrollHeight()\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position'\n      offsetBase   = this.$scrollElement.scrollTop()\n    }\n\n    this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\n          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        that.offsets.push(this[0])\n        that.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.getScrollHeight()\n    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n    }\n\n    if (activeTarget && scrollTop < offsets[0]) {\n      this.activeTarget = null\n      return this.clear()\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])\n        && this.activate(targets[i])\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    this.clear()\n\n    var selector = this.selector +\n      '[data-target=\"' + target + '\"],' +\n      this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate.bs.scrollspy')\n  }\n\n  ScrollSpy.prototype.clear = function () {\n    $(this.selector)\n      .parentsUntil(this.options.target, '.active')\n      .removeClass('active')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy             = Plugin\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      Plugin.call($spy, $spy.data())\n    })\n  })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: tab.js v3.3.6\n * http://getbootstrap.com/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    // jscs:disable requireDollarBeforejQueryAssignment\n    this.element = $(element)\n    // jscs:enable requireDollarBeforejQueryAssignment\n  }\n\n  Tab.VERSION = '3.3.6'\n\n  Tab.TRANSITION_DURATION = 150\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var $previous = $ul.find('.active:last a')\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    })\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    })\n\n    $previous.trigger(hideEvent)\n    $this.trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n    var $target = $(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      })\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n          .removeClass('active')\n        .end()\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', false)\n\n      element\n        .addClass('active')\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu').length) {\n        element\n          .closest('li.dropdown')\n            .addClass('active')\n          .end()\n          .find('[data-toggle=\"tab\"]')\n            .attr('aria-expanded', true)\n      }\n\n      callback && callback()\n    }\n\n    $active.length && transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  var clickHandler = function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  }\n\n  $(document)\n    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: affix.js v3.3.6\n * http://getbootstrap.com/javascript/#affix\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    this.$target = $(this.options.target)\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      = null\n    this.unpin        = null\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.3.6'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var targetHeight = this.$target.height()\n\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n    }\n\n    var initializing   = this.affixed == null\n    var colliderTop    = initializing ? scrollTop : position.top\n    var colliderHeight = initializing ? targetHeight : height\n\n    if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n    return false\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var height       = this.$element.height()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n    var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '')\n\n      var affixType = 'affix' + (affix ? '-' + affix : '')\n      var e         = $.Event(affixType + '.bs.affix')\n\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      this.affixed = affix\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n      this.$element\n        .removeClass(Affix.RESET)\n        .addClass(affixType)\n        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n", "// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\nrequire('../../js/transition.js')\nrequire('../../js/alert.js')\nrequire('../../js/button.js')\nrequire('../../js/carousel.js')\nrequire('../../js/collapse.js')\nrequire('../../js/dropdown.js')\nrequire('../../js/modal.js')\nrequire('../../js/tooltip.js')\nrequire('../../js/popover.js')\nrequire('../../js/scrollspy.js')\nrequire('../../js/tab.js')\nrequire('../../js/affix.js')", "/*!\n * Bootstrap v3.3.6 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background-color: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  margin: .67em 0;\n  font-size: 2em;\n}\nmark {\n  color: #000;\n  background: #ff0;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\nsup {\n  top: -.5em;\n}\nsub {\n  bottom: -.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  height: 0;\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0;\n  font: inherit;\n  color: inherit;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n  -webkit-appearance: textfield;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  padding: .35em .625em .75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\nlegend {\n  padding: 0;\n  border: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-spacing: 0;\n  border-collapse: collapse;\n}\ntd,\nth {\n  padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  .navbar {\n    display: none;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n@font-face {\n  font-family: 'Glyphicons Halflings';\n\n  src: url('../fonts/glyphicons-halflings-regular.eot');\n  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\002a\";\n}\n.glyphicon-plus:before {\n  content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n.glyphicon-cd:before {\n  content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n  content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n  content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n  content: \"\\e204\";\n}\n.glyphicon-copy:before {\n  content: \"\\e205\";\n}\n.glyphicon-paste:before {\n  content: \"\\e206\";\n}\n.glyphicon-alert:before {\n  content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n  content: \"\\e210\";\n}\n.glyphicon-king:before {\n  content: \"\\e211\";\n}\n.glyphicon-queen:before {\n  content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n  content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n  content: \"\\e214\";\n}\n.glyphicon-knight:before {\n  content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n  content: \"\\e216\";\n}\n.glyphicon-tent:before {\n  content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n  content: \"\\e218\";\n}\n.glyphicon-bed:before {\n  content: \"\\e219\";\n}\n.glyphicon-apple:before {\n  content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n  content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n  content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n  content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n  content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n  content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n  content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n  content: \"\\e227\";\n}\n.glyphicon-btc:before {\n  content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n  content: \"\\e227\";\n}\n.glyphicon-yen:before {\n  content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n  content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n  content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n  content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n  content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n  content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n  content: \"\\e232\";\n}\n.glyphicon-education:before {\n  content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n  content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n  content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n  content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n  content: \"\\e237\";\n}\n.glyphicon-oil:before {\n  content: \"\\e238\";\n}\n.glyphicon-grain:before {\n  content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n  content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n  content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n  content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n  content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n  content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n  content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n  content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n  content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n  content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n  content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n  content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n  content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n  content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n  content: \"\\e253\";\n}\n.glyphicon-console:before {\n  content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n  content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n  content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n  content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n  content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n  content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n  content: \"\\e260\";\n}\n* {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #337ab7;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #23527c;\n  text-decoration: underline;\n}\na:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all .2s ease-in-out;\n       -o-transition: all .2s ease-in-out;\n          transition: all .2s ease-in-out;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n[role=\"button\"] {\n  cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: normal;\n  line-height: 1;\n  color: #777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\nmark,\n.mark {\n  padding: .2em;\n  background-color: #fcf8e3;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #777;\n}\n.text-primary {\n  color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n  color: #286090;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n  background-color: #286090;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  margin-left: -5px;\n  list-style: none;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    overflow: hidden;\n    clear: left;\n    text-align: right;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #777;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #eee;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: bold;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n}\ntable {\n  background-color: transparent;\n}\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #777;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n.table-responsive {\n  min-height: .01%;\n  overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n       -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control::-ms-expand {\n  background-color: transparent;\n  border: 0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  background-color: #eee;\n  opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"].form-control,\n  input[type=\"time\"].form-control,\n  input[type=\"datetime-local\"].form-control,\n  input[type=\"month\"].form-control {\n    line-height: 34px;\n  }\n  input[type=\"date\"].input-sm,\n  input[type=\"time\"].input-sm,\n  input[type=\"datetime-local\"].input-sm,\n  input[type=\"month\"].input-sm,\n  .input-group-sm input[type=\"date\"],\n  .input-group-sm input[type=\"time\"],\n  .input-group-sm input[type=\"datetime-local\"],\n  .input-group-sm input[type=\"month\"] {\n    line-height: 30px;\n  }\n  input[type=\"date\"].input-lg,\n  input[type=\"time\"].input-lg,\n  input[type=\"datetime-local\"].input-lg,\n  input[type=\"month\"].input-lg,\n  .input-group-lg input[type=\"date\"],\n  .input-group-lg input[type=\"time\"],\n  .input-group-lg input[type=\"datetime-local\"],\n  .input-group-lg input[type=\"month\"] {\n    line-height: 46px;\n  }\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n  min-height: 20px;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-top: 4px \\9;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.form-control-static {\n  min-height: 34px;\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.form-group-sm select.form-control {\n  height: 30px;\n  line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n  height: auto;\n}\n.form-group-sm .form-control-static {\n  height: 30px;\n  min-height: 32px;\n  padding: 6px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.input-lg {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-lg {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.form-group-lg select.form-control {\n  height: 46px;\n  line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n  height: auto;\n}\n.form-group-lg .form-control-static {\n  height: 46px;\n  min-height: 38px;\n  padding: 11px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n  top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-static {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    padding-top: 7px;\n    margin-bottom: 0;\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 11px;\n    font-size: 18px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n    font-size: 12px;\n  }\n}\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  -ms-touch-action: manipulation;\n      touch-action: manipulation;\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n  color: #333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  opacity: .65;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n  pointer-events: none;\n}\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #8c8c8c;\n}\n.btn-default:hover {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n  color: #333;\n  background-color: #d4d4d4;\n  border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  background-image: none;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n  color: #fff;\n  background-color: #286090;\n  border-color: #122b40;\n}\n.btn-primary:hover {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n  color: #fff;\n  background-color: #204d74;\n  border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  background-image: none;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #255625;\n}\n.btn-success:hover {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n  color: #fff;\n  background-color: #398439;\n  border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  background-image: none;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success .badge {\n  color: #5cb85c;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #1b6d85;\n}\n.btn-info:hover {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n  color: #fff;\n  background-color: #269abc;\n  border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  background-image: none;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info .badge {\n  color: #5bc0de;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #985f0d;\n}\n.btn-warning:hover {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n  color: #fff;\n  background-color: #d58512;\n  border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #761c19;\n}\n.btn-danger:hover {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n  color: #fff;\n  background-color: #ac2925;\n  border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger .badge {\n  color: #d9534f;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: normal;\n  color: #337ab7;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #23527c;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #777;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity .15s linear;\n       -o-transition: opacity .15s linear;\n          transition: opacity .15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition-timing-function: ease;\n       -o-transition-timing-function: ease;\n          transition-timing-function: ease;\n  -webkit-transition-duration: .35s;\n       -o-transition-duration: .35s;\n          transition-duration: .35s;\n  -webkit-transition-property: height, visibility;\n       -o-transition-property: height, visibility;\n          transition-property: height, visibility;\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px dashed;\n  border-top: 4px solid \\9;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.42857143;\n  color: #333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #262626;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #337ab7;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #777;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px dashed;\n  border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group .form-control:focus {\n  z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555;\n  text-align: center;\n  background-color: #eee;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  z-index: 2;\n  margin-left: -1px;\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.nav > li.disabled > a {\n  color: #777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #777;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eee;\n  border-color: #337ab7;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eee #eee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #337ab7;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  -webkit-overflow-scrolling: touch;\n  border-top: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.navbar-brand {\n  float: left;\n  height: 50px;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n.navbar-brand > img {\n  display: block;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-right: 15px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n.navbar-form {\n  padding: 10px 15px;\n  margin-top: 8px;\n  margin-right: -15px;\n  margin-bottom: 8px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control-static {\n    display: inline-block;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n  .navbar-form .form-group:last-child {\n    margin-bottom: 0;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px;\n  }\n  .navbar-right ~ .navbar-right {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #ccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-link {\n  color: #777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333;\n}\n.navbar-default .btn-link {\n  color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #ccc;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #9d9d9d;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.navbar-inverse .btn-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #777;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.42857143;\n  color: #337ab7;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  z-index: 2;\n  color: #23527c;\n  background-color: #eee;\n  border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 3;\n  color: #fff;\n  cursor: default;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-top-left-radius: 6px;\n  border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n}\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #5e5e5e;\n}\n.label-primary {\n  background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #286090;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  background-color: #777;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding-top: 30px;\n  padding-bottom: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.jumbotron > hr {\n  border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n  padding-right: 15px;\n  padding-left: 15px;\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron,\n  .container-fluid .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: border .2s ease-in-out;\n       -o-transition: border .2s ease-in-out;\n          transition: border .2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-right: auto;\n  margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #337ab7;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n}\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #337ab7;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n  -webkit-transition: width .6s ease;\n       -o-transition: width .6s ease;\n          transition: width .6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  -webkit-background-size: 40px 40px;\n          background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n       -o-animation: progress-bar-stripes 2s linear infinite;\n          animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media-body {\n  width: 10000px;\n}\n.media-object {\n  display: block;\n}\n.media-object.img-thumbnail {\n  max-width: none;\n}\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n.media-middle {\n  vertical-align: middle;\n}\n.media-bottom {\n  vertical-align: bottom;\n}\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n  color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n  color: #555;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\nbutton.list-group-item {\n  width: 100%;\n  text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #eee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n  color: #777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #c7ddef;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n  margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n  border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ddd;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #333;\n  background-color: #f5f5f5;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n  color: #f5f5f5;\n  background-color: #333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #337ab7;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n  color: #dff0d8;\n  background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n  color: #d9edf7;\n  background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n  color: #fcf8e3;\n  background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n  color: #f2dede;\n  background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, .15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: .2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\nbutton.close {\n  -webkit-appearance: none;\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  overflow: hidden;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transition: -webkit-transform .3s ease-out;\n       -o-transition:      -o-transform .3s ease-out;\n          transition:         transform .3s ease-out;\n  -webkit-transform: translate(0, -25%);\n      -ms-transform: translate(0, -25%);\n       -o-transform: translate(0, -25%);\n          transform: translate(0, -25%);\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n       -o-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  outline: 0;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 12px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  filter: alpha(opacity=0);\n  opacity: 0;\n\n  line-break: auto;\n}\n.tooltip.in {\n  filter: alpha(opacity=90);\n  opacity: .9;\n}\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n\n  line-break: auto;\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow:after {\n  content: \"\";\n  border-width: 10px;\n}\n.popover.top > .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999;\n  border-top-color: rgba(0, 0, 0, .25);\n  border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-color: #fff;\n  border-bottom-width: 0;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999;\n  border-right-color: rgba(0, 0, 0, .25);\n  border-left-width: 0;\n}\n.popover.right > .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  content: \" \";\n  border-right-color: #fff;\n  border-left-width: 0;\n}\n.popover.bottom > .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999;\n  border-bottom-color: rgba(0, 0, 0, .25);\n}\n.popover.bottom > .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999;\n  border-left-color: rgba(0, 0, 0, .25);\n}\n.popover.left > .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  content: \" \";\n  border-right-width: 0;\n  border-left-color: #fff;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: .6s ease-in-out left;\n       -o-transition: .6s ease-in-out left;\n          transition: .6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n  .carousel-inner > .item {\n    -webkit-transition: -webkit-transform .6s ease-in-out;\n         -o-transition:      -o-transform .6s ease-in-out;\n            transition:         transform .6s ease-in-out;\n\n    -webkit-backface-visibility: hidden;\n            backface-visibility: hidden;\n    -webkit-perspective: 1000px;\n            perspective: 1000px;\n  }\n  .carousel-inner > .item.next,\n  .carousel-inner > .item.active.right {\n    left: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n            transform: translate3d(100%, 0, 0);\n  }\n  .carousel-inner > .item.prev,\n  .carousel-inner > .item.active.left {\n    left: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n  }\n  .carousel-inner > .item.next.left,\n  .carousel-inner > .item.prev.right,\n  .carousel-inner > .item.active {\n    left: 0;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n  background-color: rgba(0, 0, 0, 0);\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #fff;\n  text-decoration: none;\n  filter: alpha(opacity=90);\n  outline: 0;\n  opacity: .9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n  margin-top: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n  margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n  margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  font-family: serif;\n  line-height: 1;\n}\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid #fff;\n  border-radius: 10px;\n}\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #fff;\n}\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -10px;\n    font-size: 30px;\n  }\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .icon-prev {\n    margin-left: -10px;\n  }\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-next {\n    margin-right: -10px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table !important;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table !important;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table !important;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table !important;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table !important;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */\n", "/** Bootstrap fix **/\n@media print {\n    .col-md-1,.col-md-2,.col-md-3,.col-md-4,\n    .col-md-5,.col-md-6,.col-md-7,.col-md-8,\n    .col-md-9,.col-md-10,.col-md-11,.col-md-12 {\n        float: left;\n    }\n\n    .col-md-1 {\n        width: 8%;\n    }\n    .col-md-2 {\n        width: 16%;\n    }\n    .col-md-3 {\n        width: 25%;\n    }\n    .col-md-4 {\n        width: 33%;\n    }\n    .col-md-5 {\n        width: 42%;\n    }\n    .col-md-6 {\n        width: 50%;\n    }\n    .col-md-7 {\n        width: 58%;\n    }\n    .col-md-8 {\n        width: 66%;\n    }\n    .col-md-9 {\n        width: 75%;\n    }\n    .col-md-10 {\n        width: 83%;\n    }\n    .col-md-11 {\n        width: 92%;\n    }\n    .col-md-12 {\n        width: 100%;\n    }\n}\n", "// drop up dropdowns at page bottom\n$(function() {\n\n\t$(document).on(\"shown.bs.dropdown\", \".dropdown\", function () {\n\t    // calculate the required sizes, spaces\n\t    var $ul = $(this).children(\".dropdown-menu\");\n\t    var $button = $(this).children(\".dropdown-toggle\");\n\t    var ulOffset = $ul.offset();\n\t    // how much space would be left on the top if the dropdown opened that direction\n\t    var spaceUp = (ulOffset.top - $button.height() - $ul.height()) - $(window).scrollTop();\n\t    // how much space is left at the bottom\n\t    var spaceDown = $(window).scrollTop() + $(window).height() - (ulOffset.top + $ul.height());\n\t    // switch to dropup only if there is no space at the bottom AND there is space at the top, or there isn't either but it would be still better fit\n\t    if (spaceDown < 0 && (spaceUp >= 0 || spaceUp > spaceDown))\n\t      $(this).addClass(\"dropup\");\n\t}).on(\"hidden.bs.dropdown\", \".dropdown\", function() {\n\t    // always reset after close\n\t    $(this).removeClass(\"dropup\");\n\t});\n\t\n});\n", "/*\nCopyright 2012 Igor Vaynberg\n\nVersion: @@ver@@ Timestamp: @@timestamp@@\n\nThis software is licensed under the Apache License, Version 2.0 (the \"Apache License\") or the GNU\nGeneral Public License version 2 (the \"GPL License\"). You may choose either license to govern your\nuse of this software only upon the condition that you accept all of the terms of either the Apache\nLicense or the GPL License.\n\nYou may obtain a copy of the Apache License and the GPL License at:\n\n    http://www.apache.org/licenses/LICENSE-2.0\n    http://www.gnu.org/licenses/gpl-2.0.html\n\nUnless required by applicable law or agreed to in writing, software distributed under the\nApache License or the GPL License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\nCONDITIONS OF ANY KIND, either express or implied. See the Apache License and the GPL License for\nthe specific language governing permissions and limitations under the Apache License and the GPL License.\n*/\n(function ($) {\n    if(typeof $.fn.each2 == \"undefined\") {\n        $.extend($.fn, {\n            /*\n            * 4-10 times faster .each replacement\n            * use it carefully, as it overrides jQuery context of element on each iteration\n            */\n            each2 : function (c) {\n                var j = $([0]), i = -1, l = this.length;\n                while (\n                    ++i < l\n                    && (j.context = j[0] = this[i])\n                    && c.call(j[0], i, j) !== false //\"this\"=DOM, i=index, j=jQuery object\n                );\n                return this;\n            }\n        });\n    }\n})(jQuery);\n\n(function ($, undefined) {\n    \"use strict\";\n    /*global document, window, jQuery, console */\n\n    if (window.Select2 !== undefined) {\n        return;\n    }\n\n    var KEY, AbstractSelect2, SingleSelect2, MultiSelect2, nextUid, sizer,\n        lastMousePosition={x:0,y:0}, $document, scrollBarDimensions,\n\n    KEY = {\n        TAB: 9,\n        ENTER: 13,\n        ESC: 27,\n        SPACE: 32,\n        LEFT: 37,\n        UP: 38,\n        RIGHT: 39,\n        DOWN: 40,\n        SHIFT: 16,\n        CTRL: 17,\n        ALT: 18,\n        PAGE_UP: 33,\n        PAGE_DOWN: 34,\n        HOME: 36,\n        END: 35,\n        BACKSPACE: 8,\n        DELETE: 46,\n        isArrow: function (k) {\n            k = k.which ? k.which : k;\n            switch (k) {\n            case KEY.LEFT:\n            case KEY.RIGHT:\n            case KEY.UP:\n            case KEY.DOWN:\n                return true;\n            }\n            return false;\n        },\n        isControl: function (e) {\n            var k = e.which;\n            switch (k) {\n            case KEY.SHIFT:\n            case KEY.CTRL:\n            case KEY.ALT:\n                return true;\n            }\n\n            if (e.metaKey) return true;\n\n            return false;\n        },\n        isFunctionKey: function (k) {\n            k = k.which ? k.which : k;\n            return k >= 112 && k <= 123;\n        }\n    },\n    MEASURE_SCROLLBAR_TEMPLATE = \"<div class='select2-measure-scrollbar'></div>\",\n\n    DIACRITICS = {\"\\u24B6\":\"A\",\"\\uFF21\":\"A\",\"\\u00C0\":\"A\",\"\\u00C1\":\"A\",\"\\u00C2\":\"A\",\"\\u1EA6\":\"A\",\"\\u1EA4\":\"A\",\"\\u1EAA\":\"A\",\"\\u1EA8\":\"A\",\"\\u00C3\":\"A\",\"\\u0100\":\"A\",\"\\u0102\":\"A\",\"\\u1EB0\":\"A\",\"\\u1EAE\":\"A\",\"\\u1EB4\":\"A\",\"\\u1EB2\":\"A\",\"\\u0226\":\"A\",\"\\u01E0\":\"A\",\"\\u00C4\":\"A\",\"\\u01DE\":\"A\",\"\\u1EA2\":\"A\",\"\\u00C5\":\"A\",\"\\u01FA\":\"A\",\"\\u01CD\":\"A\",\"\\u0200\":\"A\",\"\\u0202\":\"A\",\"\\u1EA0\":\"A\",\"\\u1EAC\":\"A\",\"\\u1EB6\":\"A\",\"\\u1E00\":\"A\",\"\\u0104\":\"A\",\"\\u023A\":\"A\",\"\\u2C6F\":\"A\",\"\\uA732\":\"AA\",\"\\u00C6\":\"AE\",\"\\u01FC\":\"AE\",\"\\u01E2\":\"AE\",\"\\uA734\":\"AO\",\"\\uA736\":\"AU\",\"\\uA738\":\"AV\",\"\\uA73A\":\"AV\",\"\\uA73C\":\"AY\",\"\\u24B7\":\"B\",\"\\uFF22\":\"B\",\"\\u1E02\":\"B\",\"\\u1E04\":\"B\",\"\\u1E06\":\"B\",\"\\u0243\":\"B\",\"\\u0182\":\"B\",\"\\u0181\":\"B\",\"\\u24B8\":\"C\",\"\\uFF23\":\"C\",\"\\u0106\":\"C\",\"\\u0108\":\"C\",\"\\u010A\":\"C\",\"\\u010C\":\"C\",\"\\u00C7\":\"C\",\"\\u1E08\":\"C\",\"\\u0187\":\"C\",\"\\u023B\":\"C\",\"\\uA73E\":\"C\",\"\\u24B9\":\"D\",\"\\uFF24\":\"D\",\"\\u1E0A\":\"D\",\"\\u010E\":\"D\",\"\\u1E0C\":\"D\",\"\\u1E10\":\"D\",\"\\u1E12\":\"D\",\"\\u1E0E\":\"D\",\"\\u0110\":\"D\",\"\\u018B\":\"D\",\"\\u018A\":\"D\",\"\\u0189\":\"D\",\"\\uA779\":\"D\",\"\\u01F1\":\"DZ\",\"\\u01C4\":\"DZ\",\"\\u01F2\":\"Dz\",\"\\u01C5\":\"Dz\",\"\\u24BA\":\"E\",\"\\uFF25\":\"E\",\"\\u00C8\":\"E\",\"\\u00C9\":\"E\",\"\\u00CA\":\"E\",\"\\u1EC0\":\"E\",\"\\u1EBE\":\"E\",\"\\u1EC4\":\"E\",\"\\u1EC2\":\"E\",\"\\u1EBC\":\"E\",\"\\u0112\":\"E\",\"\\u1E14\":\"E\",\"\\u1E16\":\"E\",\"\\u0114\":\"E\",\"\\u0116\":\"E\",\"\\u00CB\":\"E\",\"\\u1EBA\":\"E\",\"\\u011A\":\"E\",\"\\u0204\":\"E\",\"\\u0206\":\"E\",\"\\u1EB8\":\"E\",\"\\u1EC6\":\"E\",\"\\u0228\":\"E\",\"\\u1E1C\":\"E\",\"\\u0118\":\"E\",\"\\u1E18\":\"E\",\"\\u1E1A\":\"E\",\"\\u0190\":\"E\",\"\\u018E\":\"E\",\"\\u24BB\":\"F\",\"\\uFF26\":\"F\",\"\\u1E1E\":\"F\",\"\\u0191\":\"F\",\"\\uA77B\":\"F\",\"\\u24BC\":\"G\",\"\\uFF27\":\"G\",\"\\u01F4\":\"G\",\"\\u011C\":\"G\",\"\\u1E20\":\"G\",\"\\u011E\":\"G\",\"\\u0120\":\"G\",\"\\u01E6\":\"G\",\"\\u0122\":\"G\",\"\\u01E4\":\"G\",\"\\u0193\":\"G\",\"\\uA7A0\":\"G\",\"\\uA77D\":\"G\",\"\\uA77E\":\"G\",\"\\u24BD\":\"H\",\"\\uFF28\":\"H\",\"\\u0124\":\"H\",\"\\u1E22\":\"H\",\"\\u1E26\":\"H\",\"\\u021E\":\"H\",\"\\u1E24\":\"H\",\"\\u1E28\":\"H\",\"\\u1E2A\":\"H\",\"\\u0126\":\"H\",\"\\u2C67\":\"H\",\"\\u2C75\":\"H\",\"\\uA78D\":\"H\",\"\\u24BE\":\"I\",\"\\uFF29\":\"I\",\"\\u00CC\":\"I\",\"\\u00CD\":\"I\",\"\\u00CE\":\"I\",\"\\u0128\":\"I\",\"\\u012A\":\"I\",\"\\u012C\":\"I\",\"\\u0130\":\"I\",\"\\u00CF\":\"I\",\"\\u1E2E\":\"I\",\"\\u1EC8\":\"I\",\"\\u01CF\":\"I\",\"\\u0208\":\"I\",\"\\u020A\":\"I\",\"\\u1ECA\":\"I\",\"\\u012E\":\"I\",\"\\u1E2C\":\"I\",\"\\u0197\":\"I\",\"\\u24BF\":\"J\",\"\\uFF2A\":\"J\",\"\\u0134\":\"J\",\"\\u0248\":\"J\",\"\\u24C0\":\"K\",\"\\uFF2B\":\"K\",\"\\u1E30\":\"K\",\"\\u01E8\":\"K\",\"\\u1E32\":\"K\",\"\\u0136\":\"K\",\"\\u1E34\":\"K\",\"\\u0198\":\"K\",\"\\u2C69\":\"K\",\"\\uA740\":\"K\",\"\\uA742\":\"K\",\"\\uA744\":\"K\",\"\\uA7A2\":\"K\",\"\\u24C1\":\"L\",\"\\uFF2C\":\"L\",\"\\u013F\":\"L\",\"\\u0139\":\"L\",\"\\u013D\":\"L\",\"\\u1E36\":\"L\",\"\\u1E38\":\"L\",\"\\u013B\":\"L\",\"\\u1E3C\":\"L\",\"\\u1E3A\":\"L\",\"\\u0141\":\"L\",\"\\u023D\":\"L\",\"\\u2C62\":\"L\",\"\\u2C60\":\"L\",\"\\uA748\":\"L\",\"\\uA746\":\"L\",\"\\uA780\":\"L\",\"\\u01C7\":\"LJ\",\"\\u01C8\":\"Lj\",\"\\u24C2\":\"M\",\"\\uFF2D\":\"M\",\"\\u1E3E\":\"M\",\"\\u1E40\":\"M\",\"\\u1E42\":\"M\",\"\\u2C6E\":\"M\",\"\\u019C\":\"M\",\"\\u24C3\":\"N\",\"\\uFF2E\":\"N\",\"\\u01F8\":\"N\",\"\\u0143\":\"N\",\"\\u00D1\":\"N\",\"\\u1E44\":\"N\",\"\\u0147\":\"N\",\"\\u1E46\":\"N\",\"\\u0145\":\"N\",\"\\u1E4A\":\"N\",\"\\u1E48\":\"N\",\"\\u0220\":\"N\",\"\\u019D\":\"N\",\"\\uA790\":\"N\",\"\\uA7A4\":\"N\",\"\\u01CA\":\"NJ\",\"\\u01CB\":\"Nj\",\"\\u24C4\":\"O\",\"\\uFF2F\":\"O\",\"\\u00D2\":\"O\",\"\\u00D3\":\"O\",\"\\u00D4\":\"O\",\"\\u1ED2\":\"O\",\"\\u1ED0\":\"O\",\"\\u1ED6\":\"O\",\"\\u1ED4\":\"O\",\"\\u00D5\":\"O\",\"\\u1E4C\":\"O\",\"\\u022C\":\"O\",\"\\u1E4E\":\"O\",\"\\u014C\":\"O\",\"\\u1E50\":\"O\",\"\\u1E52\":\"O\",\"\\u014E\":\"O\",\"\\u022E\":\"O\",\"\\u0230\":\"O\",\"\\u00D6\":\"O\",\"\\u022A\":\"O\",\"\\u1ECE\":\"O\",\"\\u0150\":\"O\",\"\\u01D1\":\"O\",\"\\u020C\":\"O\",\"\\u020E\":\"O\",\"\\u01A0\":\"O\",\"\\u1EDC\":\"O\",\"\\u1EDA\":\"O\",\"\\u1EE0\":\"O\",\"\\u1EDE\":\"O\",\"\\u1EE2\":\"O\",\"\\u1ECC\":\"O\",\"\\u1ED8\":\"O\",\"\\u01EA\":\"O\",\"\\u01EC\":\"O\",\"\\u00D8\":\"O\",\"\\u01FE\":\"O\",\"\\u0186\":\"O\",\"\\u019F\":\"O\",\"\\uA74A\":\"O\",\"\\uA74C\":\"O\",\"\\u01A2\":\"OI\",\"\\uA74E\":\"OO\",\"\\u0222\":\"OU\",\"\\u24C5\":\"P\",\"\\uFF30\":\"P\",\"\\u1E54\":\"P\",\"\\u1E56\":\"P\",\"\\u01A4\":\"P\",\"\\u2C63\":\"P\",\"\\uA750\":\"P\",\"\\uA752\":\"P\",\"\\uA754\":\"P\",\"\\u24C6\":\"Q\",\"\\uFF31\":\"Q\",\"\\uA756\":\"Q\",\"\\uA758\":\"Q\",\"\\u024A\":\"Q\",\"\\u24C7\":\"R\",\"\\uFF32\":\"R\",\"\\u0154\":\"R\",\"\\u1E58\":\"R\",\"\\u0158\":\"R\",\"\\u0210\":\"R\",\"\\u0212\":\"R\",\"\\u1E5A\":\"R\",\"\\u1E5C\":\"R\",\"\\u0156\":\"R\",\"\\u1E5E\":\"R\",\"\\u024C\":\"R\",\"\\u2C64\":\"R\",\"\\uA75A\":\"R\",\"\\uA7A6\":\"R\",\"\\uA782\":\"R\",\"\\u24C8\":\"S\",\"\\uFF33\":\"S\",\"\\u1E9E\":\"S\",\"\\u015A\":\"S\",\"\\u1E64\":\"S\",\"\\u015C\":\"S\",\"\\u1E60\":\"S\",\"\\u0160\":\"S\",\"\\u1E66\":\"S\",\"\\u1E62\":\"S\",\"\\u1E68\":\"S\",\"\\u0218\":\"S\",\"\\u015E\":\"S\",\"\\u2C7E\":\"S\",\"\\uA7A8\":\"S\",\"\\uA784\":\"S\",\"\\u24C9\":\"T\",\"\\uFF34\":\"T\",\"\\u1E6A\":\"T\",\"\\u0164\":\"T\",\"\\u1E6C\":\"T\",\"\\u021A\":\"T\",\"\\u0162\":\"T\",\"\\u1E70\":\"T\",\"\\u1E6E\":\"T\",\"\\u0166\":\"T\",\"\\u01AC\":\"T\",\"\\u01AE\":\"T\",\"\\u023E\":\"T\",\"\\uA786\":\"T\",\"\\uA728\":\"TZ\",\"\\u24CA\":\"U\",\"\\uFF35\":\"U\",\"\\u00D9\":\"U\",\"\\u00DA\":\"U\",\"\\u00DB\":\"U\",\"\\u0168\":\"U\",\"\\u1E78\":\"U\",\"\\u016A\":\"U\",\"\\u1E7A\":\"U\",\"\\u016C\":\"U\",\"\\u00DC\":\"U\",\"\\u01DB\":\"U\",\"\\u01D7\":\"U\",\"\\u01D5\":\"U\",\"\\u01D9\":\"U\",\"\\u1EE6\":\"U\",\"\\u016E\":\"U\",\"\\u0170\":\"U\",\"\\u01D3\":\"U\",\"\\u0214\":\"U\",\"\\u0216\":\"U\",\"\\u01AF\":\"U\",\"\\u1EEA\":\"U\",\"\\u1EE8\":\"U\",\"\\u1EEE\":\"U\",\"\\u1EEC\":\"U\",\"\\u1EF0\":\"U\",\"\\u1EE4\":\"U\",\"\\u1E72\":\"U\",\"\\u0172\":\"U\",\"\\u1E76\":\"U\",\"\\u1E74\":\"U\",\"\\u0244\":\"U\",\"\\u24CB\":\"V\",\"\\uFF36\":\"V\",\"\\u1E7C\":\"V\",\"\\u1E7E\":\"V\",\"\\u01B2\":\"V\",\"\\uA75E\":\"V\",\"\\u0245\":\"V\",\"\\uA760\":\"VY\",\"\\u24CC\":\"W\",\"\\uFF37\":\"W\",\"\\u1E80\":\"W\",\"\\u1E82\":\"W\",\"\\u0174\":\"W\",\"\\u1E86\":\"W\",\"\\u1E84\":\"W\",\"\\u1E88\":\"W\",\"\\u2C72\":\"W\",\"\\u24CD\":\"X\",\"\\uFF38\":\"X\",\"\\u1E8A\":\"X\",\"\\u1E8C\":\"X\",\"\\u24CE\":\"Y\",\"\\uFF39\":\"Y\",\"\\u1EF2\":\"Y\",\"\\u00DD\":\"Y\",\"\\u0176\":\"Y\",\"\\u1EF8\":\"Y\",\"\\u0232\":\"Y\",\"\\u1E8E\":\"Y\",\"\\u0178\":\"Y\",\"\\u1EF6\":\"Y\",\"\\u1EF4\":\"Y\",\"\\u01B3\":\"Y\",\"\\u024E\":\"Y\",\"\\u1EFE\":\"Y\",\"\\u24CF\":\"Z\",\"\\uFF3A\":\"Z\",\"\\u0179\":\"Z\",\"\\u1E90\":\"Z\",\"\\u017B\":\"Z\",\"\\u017D\":\"Z\",\"\\u1E92\":\"Z\",\"\\u1E94\":\"Z\",\"\\u01B5\":\"Z\",\"\\u0224\":\"Z\",\"\\u2C7F\":\"Z\",\"\\u2C6B\":\"Z\",\"\\uA762\":\"Z\",\"\\u24D0\":\"a\",\"\\uFF41\":\"a\",\"\\u1E9A\":\"a\",\"\\u00E0\":\"a\",\"\\u00E1\":\"a\",\"\\u00E2\":\"a\",\"\\u1EA7\":\"a\",\"\\u1EA5\":\"a\",\"\\u1EAB\":\"a\",\"\\u1EA9\":\"a\",\"\\u00E3\":\"a\",\"\\u0101\":\"a\",\"\\u0103\":\"a\",\"\\u1EB1\":\"a\",\"\\u1EAF\":\"a\",\"\\u1EB5\":\"a\",\"\\u1EB3\":\"a\",\"\\u0227\":\"a\",\"\\u01E1\":\"a\",\"\\u00E4\":\"a\",\"\\u01DF\":\"a\",\"\\u1EA3\":\"a\",\"\\u00E5\":\"a\",\"\\u01FB\":\"a\",\"\\u01CE\":\"a\",\"\\u0201\":\"a\",\"\\u0203\":\"a\",\"\\u1EA1\":\"a\",\"\\u1EAD\":\"a\",\"\\u1EB7\":\"a\",\"\\u1E01\":\"a\",\"\\u0105\":\"a\",\"\\u2C65\":\"a\",\"\\u0250\":\"a\",\"\\uA733\":\"aa\",\"\\u00E6\":\"ae\",\"\\u01FD\":\"ae\",\"\\u01E3\":\"ae\",\"\\uA735\":\"ao\",\"\\uA737\":\"au\",\"\\uA739\":\"av\",\"\\uA73B\":\"av\",\"\\uA73D\":\"ay\",\"\\u24D1\":\"b\",\"\\uFF42\":\"b\",\"\\u1E03\":\"b\",\"\\u1E05\":\"b\",\"\\u1E07\":\"b\",\"\\u0180\":\"b\",\"\\u0183\":\"b\",\"\\u0253\":\"b\",\"\\u24D2\":\"c\",\"\\uFF43\":\"c\",\"\\u0107\":\"c\",\"\\u0109\":\"c\",\"\\u010B\":\"c\",\"\\u010D\":\"c\",\"\\u00E7\":\"c\",\"\\u1E09\":\"c\",\"\\u0188\":\"c\",\"\\u023C\":\"c\",\"\\uA73F\":\"c\",\"\\u2184\":\"c\",\"\\u24D3\":\"d\",\"\\uFF44\":\"d\",\"\\u1E0B\":\"d\",\"\\u010F\":\"d\",\"\\u1E0D\":\"d\",\"\\u1E11\":\"d\",\"\\u1E13\":\"d\",\"\\u1E0F\":\"d\",\"\\u0111\":\"d\",\"\\u018C\":\"d\",\"\\u0256\":\"d\",\"\\u0257\":\"d\",\"\\uA77A\":\"d\",\"\\u01F3\":\"dz\",\"\\u01C6\":\"dz\",\"\\u24D4\":\"e\",\"\\uFF45\":\"e\",\"\\u00E8\":\"e\",\"\\u00E9\":\"e\",\"\\u00EA\":\"e\",\"\\u1EC1\":\"e\",\"\\u1EBF\":\"e\",\"\\u1EC5\":\"e\",\"\\u1EC3\":\"e\",\"\\u1EBD\":\"e\",\"\\u0113\":\"e\",\"\\u1E15\":\"e\",\"\\u1E17\":\"e\",\"\\u0115\":\"e\",\"\\u0117\":\"e\",\"\\u00EB\":\"e\",\"\\u1EBB\":\"e\",\"\\u011B\":\"e\",\"\\u0205\":\"e\",\"\\u0207\":\"e\",\"\\u1EB9\":\"e\",\"\\u1EC7\":\"e\",\"\\u0229\":\"e\",\"\\u1E1D\":\"e\",\"\\u0119\":\"e\",\"\\u1E19\":\"e\",\"\\u1E1B\":\"e\",\"\\u0247\":\"e\",\"\\u025B\":\"e\",\"\\u01DD\":\"e\",\"\\u24D5\":\"f\",\"\\uFF46\":\"f\",\"\\u1E1F\":\"f\",\"\\u0192\":\"f\",\"\\uA77C\":\"f\",\"\\u24D6\":\"g\",\"\\uFF47\":\"g\",\"\\u01F5\":\"g\",\"\\u011D\":\"g\",\"\\u1E21\":\"g\",\"\\u011F\":\"g\",\"\\u0121\":\"g\",\"\\u01E7\":\"g\",\"\\u0123\":\"g\",\"\\u01E5\":\"g\",\"\\u0260\":\"g\",\"\\uA7A1\":\"g\",\"\\u1D79\":\"g\",\"\\uA77F\":\"g\",\"\\u24D7\":\"h\",\"\\uFF48\":\"h\",\"\\u0125\":\"h\",\"\\u1E23\":\"h\",\"\\u1E27\":\"h\",\"\\u021F\":\"h\",\"\\u1E25\":\"h\",\"\\u1E29\":\"h\",\"\\u1E2B\":\"h\",\"\\u1E96\":\"h\",\"\\u0127\":\"h\",\"\\u2C68\":\"h\",\"\\u2C76\":\"h\",\"\\u0265\":\"h\",\"\\u0195\":\"hv\",\"\\u24D8\":\"i\",\"\\uFF49\":\"i\",\"\\u00EC\":\"i\",\"\\u00ED\":\"i\",\"\\u00EE\":\"i\",\"\\u0129\":\"i\",\"\\u012B\":\"i\",\"\\u012D\":\"i\",\"\\u00EF\":\"i\",\"\\u1E2F\":\"i\",\"\\u1EC9\":\"i\",\"\\u01D0\":\"i\",\"\\u0209\":\"i\",\"\\u020B\":\"i\",\"\\u1ECB\":\"i\",\"\\u012F\":\"i\",\"\\u1E2D\":\"i\",\"\\u0268\":\"i\",\"\\u0131\":\"i\",\"\\u24D9\":\"j\",\"\\uFF4A\":\"j\",\"\\u0135\":\"j\",\"\\u01F0\":\"j\",\"\\u0249\":\"j\",\"\\u24DA\":\"k\",\"\\uFF4B\":\"k\",\"\\u1E31\":\"k\",\"\\u01E9\":\"k\",\"\\u1E33\":\"k\",\"\\u0137\":\"k\",\"\\u1E35\":\"k\",\"\\u0199\":\"k\",\"\\u2C6A\":\"k\",\"\\uA741\":\"k\",\"\\uA743\":\"k\",\"\\uA745\":\"k\",\"\\uA7A3\":\"k\",\"\\u24DB\":\"l\",\"\\uFF4C\":\"l\",\"\\u0140\":\"l\",\"\\u013A\":\"l\",\"\\u013E\":\"l\",\"\\u1E37\":\"l\",\"\\u1E39\":\"l\",\"\\u013C\":\"l\",\"\\u1E3D\":\"l\",\"\\u1E3B\":\"l\",\"\\u017F\":\"l\",\"\\u0142\":\"l\",\"\\u019A\":\"l\",\"\\u026B\":\"l\",\"\\u2C61\":\"l\",\"\\uA749\":\"l\",\"\\uA781\":\"l\",\"\\uA747\":\"l\",\"\\u01C9\":\"lj\",\"\\u24DC\":\"m\",\"\\uFF4D\":\"m\",\"\\u1E3F\":\"m\",\"\\u1E41\":\"m\",\"\\u1E43\":\"m\",\"\\u0271\":\"m\",\"\\u026F\":\"m\",\"\\u24DD\":\"n\",\"\\uFF4E\":\"n\",\"\\u01F9\":\"n\",\"\\u0144\":\"n\",\"\\u00F1\":\"n\",\"\\u1E45\":\"n\",\"\\u0148\":\"n\",\"\\u1E47\":\"n\",\"\\u0146\":\"n\",\"\\u1E4B\":\"n\",\"\\u1E49\":\"n\",\"\\u019E\":\"n\",\"\\u0272\":\"n\",\"\\u0149\":\"n\",\"\\uA791\":\"n\",\"\\uA7A5\":\"n\",\"\\u01CC\":\"nj\",\"\\u24DE\":\"o\",\"\\uFF4F\":\"o\",\"\\u00F2\":\"o\",\"\\u00F3\":\"o\",\"\\u00F4\":\"o\",\"\\u1ED3\":\"o\",\"\\u1ED1\":\"o\",\"\\u1ED7\":\"o\",\"\\u1ED5\":\"o\",\"\\u00F5\":\"o\",\"\\u1E4D\":\"o\",\"\\u022D\":\"o\",\"\\u1E4F\":\"o\",\"\\u014D\":\"o\",\"\\u1E51\":\"o\",\"\\u1E53\":\"o\",\"\\u014F\":\"o\",\"\\u022F\":\"o\",\"\\u0231\":\"o\",\"\\u00F6\":\"o\",\"\\u022B\":\"o\",\"\\u1ECF\":\"o\",\"\\u0151\":\"o\",\"\\u01D2\":\"o\",\"\\u020D\":\"o\",\"\\u020F\":\"o\",\"\\u01A1\":\"o\",\"\\u1EDD\":\"o\",\"\\u1EDB\":\"o\",\"\\u1EE1\":\"o\",\"\\u1EDF\":\"o\",\"\\u1EE3\":\"o\",\"\\u1ECD\":\"o\",\"\\u1ED9\":\"o\",\"\\u01EB\":\"o\",\"\\u01ED\":\"o\",\"\\u00F8\":\"o\",\"\\u01FF\":\"o\",\"\\u0254\":\"o\",\"\\uA74B\":\"o\",\"\\uA74D\":\"o\",\"\\u0275\":\"o\",\"\\u01A3\":\"oi\",\"\\u0223\":\"ou\",\"\\uA74F\":\"oo\",\"\\u24DF\":\"p\",\"\\uFF50\":\"p\",\"\\u1E55\":\"p\",\"\\u1E57\":\"p\",\"\\u01A5\":\"p\",\"\\u1D7D\":\"p\",\"\\uA751\":\"p\",\"\\uA753\":\"p\",\"\\uA755\":\"p\",\"\\u24E0\":\"q\",\"\\uFF51\":\"q\",\"\\u024B\":\"q\",\"\\uA757\":\"q\",\"\\uA759\":\"q\",\"\\u24E1\":\"r\",\"\\uFF52\":\"r\",\"\\u0155\":\"r\",\"\\u1E59\":\"r\",\"\\u0159\":\"r\",\"\\u0211\":\"r\",\"\\u0213\":\"r\",\"\\u1E5B\":\"r\",\"\\u1E5D\":\"r\",\"\\u0157\":\"r\",\"\\u1E5F\":\"r\",\"\\u024D\":\"r\",\"\\u027D\":\"r\",\"\\uA75B\":\"r\",\"\\uA7A7\":\"r\",\"\\uA783\":\"r\",\"\\u24E2\":\"s\",\"\\uFF53\":\"s\",\"\\u00DF\":\"s\",\"\\u015B\":\"s\",\"\\u1E65\":\"s\",\"\\u015D\":\"s\",\"\\u1E61\":\"s\",\"\\u0161\":\"s\",\"\\u1E67\":\"s\",\"\\u1E63\":\"s\",\"\\u1E69\":\"s\",\"\\u0219\":\"s\",\"\\u015F\":\"s\",\"\\u023F\":\"s\",\"\\uA7A9\":\"s\",\"\\uA785\":\"s\",\"\\u1E9B\":\"s\",\"\\u24E3\":\"t\",\"\\uFF54\":\"t\",\"\\u1E6B\":\"t\",\"\\u1E97\":\"t\",\"\\u0165\":\"t\",\"\\u1E6D\":\"t\",\"\\u021B\":\"t\",\"\\u0163\":\"t\",\"\\u1E71\":\"t\",\"\\u1E6F\":\"t\",\"\\u0167\":\"t\",\"\\u01AD\":\"t\",\"\\u0288\":\"t\",\"\\u2C66\":\"t\",\"\\uA787\":\"t\",\"\\uA729\":\"tz\",\"\\u24E4\":\"u\",\"\\uFF55\":\"u\",\"\\u00F9\":\"u\",\"\\u00FA\":\"u\",\"\\u00FB\":\"u\",\"\\u0169\":\"u\",\"\\u1E79\":\"u\",\"\\u016B\":\"u\",\"\\u1E7B\":\"u\",\"\\u016D\":\"u\",\"\\u00FC\":\"u\",\"\\u01DC\":\"u\",\"\\u01D8\":\"u\",\"\\u01D6\":\"u\",\"\\u01DA\":\"u\",\"\\u1EE7\":\"u\",\"\\u016F\":\"u\",\"\\u0171\":\"u\",\"\\u01D4\":\"u\",\"\\u0215\":\"u\",\"\\u0217\":\"u\",\"\\u01B0\":\"u\",\"\\u1EEB\":\"u\",\"\\u1EE9\":\"u\",\"\\u1EEF\":\"u\",\"\\u1EED\":\"u\",\"\\u1EF1\":\"u\",\"\\u1EE5\":\"u\",\"\\u1E73\":\"u\",\"\\u0173\":\"u\",\"\\u1E77\":\"u\",\"\\u1E75\":\"u\",\"\\u0289\":\"u\",\"\\u24E5\":\"v\",\"\\uFF56\":\"v\",\"\\u1E7D\":\"v\",\"\\u1E7F\":\"v\",\"\\u028B\":\"v\",\"\\uA75F\":\"v\",\"\\u028C\":\"v\",\"\\uA761\":\"vy\",\"\\u24E6\":\"w\",\"\\uFF57\":\"w\",\"\\u1E81\":\"w\",\"\\u1E83\":\"w\",\"\\u0175\":\"w\",\"\\u1E87\":\"w\",\"\\u1E85\":\"w\",\"\\u1E98\":\"w\",\"\\u1E89\":\"w\",\"\\u2C73\":\"w\",\"\\u24E7\":\"x\",\"\\uFF58\":\"x\",\"\\u1E8B\":\"x\",\"\\u1E8D\":\"x\",\"\\u24E8\":\"y\",\"\\uFF59\":\"y\",\"\\u1EF3\":\"y\",\"\\u00FD\":\"y\",\"\\u0177\":\"y\",\"\\u1EF9\":\"y\",\"\\u0233\":\"y\",\"\\u1E8F\":\"y\",\"\\u00FF\":\"y\",\"\\u1EF7\":\"y\",\"\\u1E99\":\"y\",\"\\u1EF5\":\"y\",\"\\u01B4\":\"y\",\"\\u024F\":\"y\",\"\\u1EFF\":\"y\",\"\\u24E9\":\"z\",\"\\uFF5A\":\"z\",\"\\u017A\":\"z\",\"\\u1E91\":\"z\",\"\\u017C\":\"z\",\"\\u017E\":\"z\",\"\\u1E93\":\"z\",\"\\u1E95\":\"z\",\"\\u01B6\":\"z\",\"\\u0225\":\"z\",\"\\u0240\":\"z\",\"\\u2C6C\":\"z\",\"\\uA763\":\"z\",\"\\u0386\":\"\\u0391\",\"\\u0388\":\"\\u0395\",\"\\u0389\":\"\\u0397\",\"\\u038A\":\"\\u0399\",\"\\u03AA\":\"\\u0399\",\"\\u038C\":\"\\u039F\",\"\\u038E\":\"\\u03A5\",\"\\u03AB\":\"\\u03A5\",\"\\u038F\":\"\\u03A9\",\"\\u03AC\":\"\\u03B1\",\"\\u03AD\":\"\\u03B5\",\"\\u03AE\":\"\\u03B7\",\"\\u03AF\":\"\\u03B9\",\"\\u03CA\":\"\\u03B9\",\"\\u0390\":\"\\u03B9\",\"\\u03CC\":\"\\u03BF\",\"\\u03CD\":\"\\u03C5\",\"\\u03CB\":\"\\u03C5\",\"\\u03B0\":\"\\u03C5\",\"\\u03C9\":\"\\u03C9\",\"\\u03C2\":\"\\u03C3\"};\n\n    $document = $(document);\n\n    nextUid=(function() { var counter=1; return function() { return counter++; }; }());\n\n\n    function reinsertElement(element) {\n        var placeholder = $(document.createTextNode(''));\n\n        element.before(placeholder);\n        placeholder.before(element);\n        placeholder.remove();\n    }\n\n    function stripDiacritics(str) {\n        // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n        function match(a) {\n            return DIACRITICS[a] || a;\n        }\n\n        return str.replace(/[^\\u0000-\\u007E]/g, match);\n    }\n\n    function indexOf(value, array) {\n        var i = 0, l = array.length;\n        for (; i < l; i = i + 1) {\n            if (equal(value, array[i])) return i;\n        }\n        return -1;\n    }\n\n    function measureScrollbar () {\n        var $template = $( MEASURE_SCROLLBAR_TEMPLATE );\n        $template.appendTo('body');\n\n        var dim = {\n            width: $template.width() - $template[0].clientWidth,\n            height: $template.height() - $template[0].clientHeight\n        };\n        $template.remove();\n\n        return dim;\n    }\n\n    /**\n     * Compares equality of a and b\n     * @param a\n     * @param b\n     */\n    function equal(a, b) {\n        if (a === b) return true;\n        if (a === undefined || b === undefined) return false;\n        if (a === null || b === null) return false;\n        // Check whether 'a' or 'b' is a string (primitive or object).\n        // The concatenation of an empty string (+'') converts its argument to a string's primitive.\n        if (a.constructor === String) return a+'' === b+''; // a+'' - in case 'a' is a String object\n        if (b.constructor === String) return b+'' === a+''; // b+'' - in case 'b' is a String object\n        return false;\n    }\n\n    /**\n     * Splits the string into an array of values, trimming each value. An empty array is returned for nulls or empty\n     * strings\n     * @param string\n     * @param separator\n     */\n    function splitVal(string, separator) {\n        var val, i, l;\n        if (string === null || string.length < 1) return [];\n        val = string.split(separator);\n        for (i = 0, l = val.length; i < l; i = i + 1) val[i] = $.trim(val[i]);\n        return val;\n    }\n\n    function getSideBorderPadding(element) {\n        return element.outerWidth(false) - element.width();\n    }\n\n    function installKeyUpChangeEvent(element) {\n        var key=\"keyup-change-value\";\n        element.on(\"keydown\", function () {\n            if ($.data(element, key) === undefined) {\n                $.data(element, key, element.val());\n            }\n        });\n        element.on(\"keyup\", function () {\n            var val= $.data(element, key);\n            if (val !== undefined && element.val() !== val) {\n                $.removeData(element, key);\n                element.trigger(\"keyup-change\");\n            }\n        });\n    }\n\n\n    /**\n     * filters mouse events so an event is fired only if the mouse moved.\n     *\n     * filters out mouse events that occur when mouse is stationary but\n     * the elements under the pointer are scrolled.\n     */\n    function installFilteredMouseMove(element) {\n        element.on(\"mousemove\", function (e) {\n            var lastpos = lastMousePosition;\n            if (lastpos === undefined || lastpos.x !== e.pageX || lastpos.y !== e.pageY) {\n                $(e.target).trigger(\"mousemove-filtered\", e);\n            }\n        });\n    }\n\n    /**\n     * Debounces a function. Returns a function that calls the original fn function only if no invocations have been made\n     * within the last quietMillis milliseconds.\n     *\n     * @param quietMillis number of milliseconds to wait before invoking fn\n     * @param fn function to be debounced\n     * @param ctx object to be used as this reference within fn\n     * @return debounced version of fn\n     */\n    function debounce(quietMillis, fn, ctx) {\n        ctx = ctx || undefined;\n        var timeout;\n        return function () {\n            var args = arguments;\n            window.clearTimeout(timeout);\n            timeout = window.setTimeout(function() {\n                fn.apply(ctx, args);\n            }, quietMillis);\n        };\n    }\n\n    function installDebouncedScroll(threshold, element) {\n        var notify = debounce(threshold, function (e) { element.trigger(\"scroll-debounced\", e);});\n        element.on(\"scroll\", function (e) {\n            if (indexOf(e.target, element.get()) >= 0) notify(e);\n        });\n    }\n\n    function focus($el) {\n        if ($el[0] === document.activeElement) return;\n\n        /* set the focus in a 0 timeout - that way the focus is set after the processing\n            of the current event has finished - which seems like the only reliable way\n            to set focus */\n        window.setTimeout(function() {\n            var el=$el[0], pos=$el.val().length, range;\n\n            $el.focus();\n\n            /* make sure el received focus so we do not error out when trying to manipulate the caret.\n                sometimes modals or others listeners may steal it after its set */\n            var isVisible = (el.offsetWidth > 0 || el.offsetHeight > 0);\n            if (isVisible && el === document.activeElement) {\n\n                /* after the focus is set move the caret to the end, necessary when we val()\n                    just before setting focus */\n                if(el.setSelectionRange)\n                {\n                    el.setSelectionRange(pos, pos);\n                }\n                else if (el.createTextRange) {\n                    range = el.createTextRange();\n                    range.collapse(false);\n                    range.select();\n                }\n            }\n        }, 0);\n    }\n\n    function getCursorInfo(el) {\n        el = $(el)[0];\n        var offset = 0;\n        var length = 0;\n        if ('selectionStart' in el) {\n            offset = el.selectionStart;\n            length = el.selectionEnd - offset;\n        } else if ('selection' in document) {\n            el.focus();\n            var sel = document.selection.createRange();\n            length = document.selection.createRange().text.length;\n            sel.moveStart('character', -el.value.length);\n            offset = sel.text.length - length;\n        }\n        return { offset: offset, length: length };\n    }\n\n    function killEvent(event) {\n        event.preventDefault();\n        event.stopPropagation();\n    }\n    function killEventImmediately(event) {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n    }\n\n    function measureTextWidth(e) {\n        if (!sizer){\n            var style = e[0].currentStyle || window.getComputedStyle(e[0], null);\n            sizer = $(document.createElement(\"div\")).css({\n                position: \"absolute\",\n                left: \"-10000px\",\n                top: \"-10000px\",\n                display: \"none\",\n                fontSize: style.fontSize,\n                fontFamily: style.fontFamily,\n                fontStyle: style.fontStyle,\n                fontWeight: style.fontWeight,\n                letterSpacing: style.letterSpacing,\n                textTransform: style.textTransform,\n                whiteSpace: \"nowrap\"\n            });\n            sizer.attr(\"class\",\"select2-sizer\");\n            $(\"body\").append(sizer);\n        }\n        sizer.text(e.val());\n        return sizer.width();\n    }\n\n    function syncCssClasses(dest, src, adapter) {\n        var classes, replacements = [], adapted;\n\n        classes = $.trim(dest.attr(\"class\"));\n\n        if (classes) {\n            classes = '' + classes; // for IE which returns object\n\n            $(classes.split(/\\s+/)).each2(function() {\n                if (this.indexOf(\"select2-\") === 0) {\n                    replacements.push(this);\n                }\n            });\n        }\n\n        classes = $.trim(src.attr(\"class\"));\n\n        if (classes) {\n            classes = '' + classes; // for IE which returns object\n\n            $(classes.split(/\\s+/)).each2(function() {\n                if (this.indexOf(\"select2-\") !== 0) {\n                    adapted = adapter(this);\n\n                    if (adapted) {\n                        replacements.push(adapted);\n                    }\n                }\n            });\n        }\n\n        dest.attr(\"class\", replacements.join(\" \"));\n    }\n\n\n    function markMatch(text, term, markup, escapeMarkup) {\n        var match=stripDiacritics(text.toUpperCase()).indexOf(stripDiacritics(term.toUpperCase())),\n            tl=term.length;\n\n        if (match<0) {\n            markup.push(escapeMarkup(text));\n            return;\n        }\n\n        markup.push(escapeMarkup(text.substring(0, match)));\n        markup.push(\"<span class='select2-match'>\");\n        markup.push(escapeMarkup(text.substring(match, match + tl)));\n        markup.push(\"</span>\");\n        markup.push(escapeMarkup(text.substring(match + tl, text.length)));\n    }\n\n    function defaultEscapeMarkup(markup) {\n        var replace_map = {\n            '\\\\': '&#92;',\n            '&': '&amp;',\n            '<': '&lt;',\n            '>': '&gt;',\n            '\"': '&quot;',\n            \"'\": '&#39;',\n            \"/\": '&#47;'\n        };\n\n        return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n            return replace_map[match];\n        });\n    }\n\n    /**\n     * Produces an ajax-based query function\n     *\n     * @param options object containing configuration parameters\n     * @param options.params parameter map for the transport ajax call, can contain such options as cache, jsonpCallback, etc. see $.ajax\n     * @param options.transport function that will be used to execute the ajax request. must be compatible with parameters supported by $.ajax\n     * @param options.url url for the data\n     * @param options.data a function(searchTerm, pageNumber, context) that should return an object containing query string parameters for the above url.\n     * @param options.dataType request data type: ajax, jsonp, other datatypes supported by jQuery's $.ajax function or the transport function if specified\n     * @param options.quietMillis (optional) milliseconds to wait before making the ajaxRequest, helps debounce the ajax function if invoked too often\n     * @param options.results a function(remoteData, pageNumber, query) that converts data returned form the remote request to the format expected by Select2.\n     *      The expected format is an object containing the following keys:\n     *      results array of objects that will be used as choices\n     *      more (optional) boolean indicating whether there are more results available\n     *      Example: {results:[{id:1, text:'Red'},{id:2, text:'Blue'}], more:true}\n     */\n    function ajax(options) {\n        var timeout, // current scheduled but not yet executed request\n            handler = null,\n            quietMillis = options.quietMillis || 100,\n            ajaxUrl = options.url,\n            self = this;\n\n        return function (query) {\n            window.clearTimeout(timeout);\n            timeout = window.setTimeout(function () {\n                var data = options.data, // ajax data function\n                    url = ajaxUrl, // ajax url string or function\n                    transport = options.transport || $.fn.select2.ajaxDefaults.transport,\n                    // deprecated - to be removed in 4.0  - use params instead\n                    deprecated = {\n                        type: options.type || 'GET', // set type of request (GET or POST)\n                        cache: options.cache || false,\n                        jsonpCallback: options.jsonpCallback||undefined,\n                        dataType: options.dataType||\"json\"\n                    },\n                    params = $.extend({}, $.fn.select2.ajaxDefaults.params, deprecated);\n\n                data = data ? data.call(self, query.term, query.page, query.context) : null;\n                url = (typeof url === 'function') ? url.call(self, query.term, query.page, query.context) : url;\n\n                if (handler && typeof handler.abort === \"function\") { handler.abort(); }\n\n                if (options.params) {\n                    if ($.isFunction(options.params)) {\n                        $.extend(params, options.params.call(self));\n                    } else {\n                        $.extend(params, options.params);\n                    }\n                }\n\n                $.extend(params, {\n                    url: url,\n                    dataType: options.dataType,\n                    data: data,\n                    success: function (data) {\n                        // TODO - replace query.page with query so users have access to term, page, etc.\n                        // added query as third paramter to keep backwards compatibility\n                        var results = options.results(data, query.page, query);\n                        query.callback(results);\n                    },\n                    error: function(jqXHR, textStatus, errorThrown){\n                        var results = {\n                            hasError: true,\n                            jqXHR: jqXHR,\n                            textStatus: textStatus,\n                            errorThrown: errorThrown,\n                        };\n\n                        query.callback(results);\n                    }\n                });\n                handler = transport.call(self, params);\n            }, quietMillis);\n        };\n    }\n\n    /**\n     * Produces a query function that works with a local array\n     *\n     * @param options object containing configuration parameters. The options parameter can either be an array or an\n     * object.\n     *\n     * If the array form is used it is assumed that it contains objects with 'id' and 'text' keys.\n     *\n     * If the object form is used it is assumed that it contains 'data' and 'text' keys. The 'data' key should contain\n     * an array of objects that will be used as choices. These objects must contain at least an 'id' key. The 'text'\n     * key can either be a String in which case it is expected that each element in the 'data' array has a key with the\n     * value of 'text' which will be used to match choices. Alternatively, text can be a function(item) that can extract\n     * the text.\n     */\n    function local(options) {\n        var data = options, // data elements\n            dataText,\n            tmp,\n            text = function (item) { return \"\"+item.text; }; // function used to retrieve the text portion of a data item that is matched against the search\n\n         if ($.isArray(data)) {\n            tmp = data;\n            data = { results: tmp };\n        }\n\n         if ($.isFunction(data) === false) {\n            tmp = data;\n            data = function() { return tmp; };\n        }\n\n        var dataItem = data();\n        if (dataItem.text) {\n            text = dataItem.text;\n            // if text is not a function we assume it to be a key name\n            if (!$.isFunction(text)) {\n                dataText = dataItem.text; // we need to store this in a separate variable because in the next step data gets reset and data.text is no longer available\n                text = function (item) { return item[dataText]; };\n            }\n        }\n\n        return function (query) {\n            var t = query.term, filtered = { results: [] }, process;\n            if (t === \"\") {\n                query.callback(data());\n                return;\n            }\n\n            process = function(datum, collection) {\n                var group, attr;\n                datum = datum[0];\n                if (datum.children) {\n                    group = {};\n                    for (attr in datum) {\n                        if (datum.hasOwnProperty(attr)) group[attr]=datum[attr];\n                    }\n                    group.children=[];\n                    $(datum.children).each2(function(i, childDatum) { process(childDatum, group.children); });\n                    if (group.children.length || query.matcher(t, text(group), datum)) {\n                        collection.push(group);\n                    }\n                } else {\n                    if (query.matcher(t, text(datum), datum)) {\n                        collection.push(datum);\n                    }\n                }\n            };\n\n            $(data().results).each2(function(i, datum) { process(datum, filtered.results); });\n            query.callback(filtered);\n        };\n    }\n\n    // TODO javadoc\n    function tags(data) {\n        var isFunc = $.isFunction(data);\n        return function (query) {\n            var t = query.term, filtered = {results: []};\n            var result = isFunc ? data(query) : data;\n            if ($.isArray(result)) {\n                $(result).each(function () {\n                    var isObject = this.text !== undefined,\n                        text = isObject ? this.text : this;\n                    if (t === \"\" || query.matcher(t, text)) {\n                        filtered.results.push(isObject ? this : {id: this, text: this});\n                    }\n                });\n                query.callback(filtered);\n            }\n        };\n    }\n\n    /**\n     * Checks if the formatter function should be used.\n     *\n     * Throws an error if it is not a function. Returns true if it should be used,\n     * false if no formatting should be performed.\n     *\n     * @param formatter\n     */\n    function checkFormatter(formatter, formatterName) {\n        if ($.isFunction(formatter)) return true;\n        if (!formatter) return false;\n        if (typeof(formatter) === 'string') return true;\n        throw new Error(formatterName +\" must be a string, function, or falsy value\");\n    }\n\n  /**\n   * Returns a given value\n   * If given a function, returns its output\n   *\n   * @param val string|function\n   * @param context value of \"this\" to be passed to function\n   * @returns {*}\n   */\n    function evaluate(val, context) {\n        if ($.isFunction(val)) {\n            var args = Array.prototype.slice.call(arguments, 2);\n            return val.apply(context, args);\n        }\n        return val;\n    }\n\n    function countResults(results) {\n        var count = 0;\n        $.each(results, function(i, item) {\n            if (item.children) {\n                count += countResults(item.children);\n            } else {\n                count++;\n            }\n        });\n        return count;\n    }\n\n    /**\n     * Default tokenizer. This function uses breaks the input on substring match of any string from the\n     * opts.tokenSeparators array and uses opts.createSearchChoice to create the choice object. Both of those\n     * two options have to be defined in order for the tokenizer to work.\n     *\n     * @param input text user has typed so far or pasted into the search field\n     * @param selection currently selected choices\n     * @param selectCallback function(choice) callback tho add the choice to selection\n     * @param opts select2's opts\n     * @return undefined/null to leave the current input unchanged, or a string to change the input to the returned value\n     */\n    function defaultTokenizer(input, selection, selectCallback, opts) {\n        var original = input, // store the original so we can compare and know if we need to tell the search to update its text\n            dupe = false, // check for whether a token we extracted represents a duplicate selected choice\n            token, // token\n            index, // position at which the separator was found\n            i, l, // looping variables\n            separator; // the matched separator\n\n        if (!opts.createSearchChoice || !opts.tokenSeparators || opts.tokenSeparators.length < 1) return undefined;\n\n        while (true) {\n            index = -1;\n\n            for (i = 0, l = opts.tokenSeparators.length; i < l; i++) {\n                separator = opts.tokenSeparators[i];\n                index = input.indexOf(separator);\n                if (index >= 0) break;\n            }\n\n            if (index < 0) break; // did not find any token separator in the input string, bail\n\n            token = input.substring(0, index);\n            input = input.substring(index + separator.length);\n\n            if (token.length > 0) {\n                token = opts.createSearchChoice.call(this, token, selection);\n                if (token !== undefined && token !== null && opts.id(token) !== undefined && opts.id(token) !== null) {\n                    dupe = false;\n                    for (i = 0, l = selection.length; i < l; i++) {\n                        if (equal(opts.id(token), opts.id(selection[i]))) {\n                            dupe = true; break;\n                        }\n                    }\n\n                    if (!dupe) selectCallback(token);\n                }\n            }\n        }\n\n        if (original!==input) return input;\n    }\n\n    function cleanupJQueryElements() {\n        var self = this;\n\n        $.each(arguments, function (i, element) {\n            self[element].remove();\n            self[element] = null;\n        });\n    }\n\n    /**\n     * Creates a new class\n     *\n     * @param superClass\n     * @param methods\n     */\n    function clazz(SuperClass, methods) {\n        var constructor = function () {};\n        constructor.prototype = new SuperClass;\n        constructor.prototype.constructor = constructor;\n        constructor.prototype.parent = SuperClass.prototype;\n        constructor.prototype = $.extend(constructor.prototype, methods);\n        return constructor;\n    }\n\n    AbstractSelect2 = clazz(Object, {\n\n        // abstract\n        bind: function (func) {\n            var self = this;\n            return function () {\n                func.apply(self, arguments);\n            };\n        },\n\n        // abstract\n        init: function (opts) {\n            var results, search, resultsSelector = \".select2-results\";\n\n            // prepare options\n            this.opts = opts = this.prepareOpts(opts);\n\n            this.id=opts.id;\n\n            // destroy if called on an existing component\n            if (opts.element.data(\"select2\") !== undefined &&\n                opts.element.data(\"select2\") !== null) {\n                opts.element.data(\"select2\").destroy();\n            }\n\n            this.container = this.createContainer();\n\n            this.liveRegion = $(\"<span>\", {\n                    role: \"status\",\n                    \"aria-live\": \"polite\"\n                })\n                .addClass(\"select2-hidden-accessible\")\n                .appendTo(document.body);\n\n            this.containerId=\"s2id_\"+(opts.element.attr(\"id\") || \"autogen\"+nextUid());\n            this.containerEventName= this.containerId\n                .replace(/([.])/g, '_')\n                .replace(/([;&,\\-\\.\\+\\*\\~':\"\\!\\^#$%@\\[\\]\\(\\)=>\\|])/g, '\\\\$1');\n            this.container.attr(\"id\", this.containerId);\n\n            this.container.attr(\"title\", opts.element.attr(\"title\"));\n\n            this.body = $(\"body\");\n\n            syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass);\n\n            this.container.attr(\"style\", opts.element.attr(\"style\"));\n            this.container.css(evaluate(opts.containerCss, this.opts.element));\n            this.container.addClass(evaluate(opts.containerCssClass, this.opts.element));\n\n            this.elementTabIndex = this.opts.element.attr(\"tabindex\");\n\n            // swap container for the element\n            this.opts.element\n                .data(\"select2\", this)\n                .attr(\"tabindex\", \"-1\")\n                .before(this.container)\n                .on(\"click.select2\", killEvent); // do not leak click events\n\n            this.container.data(\"select2\", this);\n\n            this.dropdown = this.container.find(\".select2-drop\");\n\n            syncCssClasses(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass);\n\n            this.dropdown.addClass(evaluate(opts.dropdownCssClass, this.opts.element));\n            this.dropdown.data(\"select2\", this);\n            this.dropdown.on(\"click\", killEvent);\n\n            this.results = results = this.container.find(resultsSelector);\n            this.search = search = this.container.find(\"input.select2-input\");\n\n            this.queryCount = 0;\n            this.resultsPage = 0;\n            this.context = null;\n\n            // initialize the container\n            this.initContainer();\n\n            this.container.on(\"click\", killEvent);\n\n            installFilteredMouseMove(this.results);\n\n            this.dropdown.on(\"mousemove-filtered\", resultsSelector, this.bind(this.highlightUnderEvent));\n            this.dropdown.on(\"touchstart touchmove touchend\", resultsSelector, this.bind(function (event) {\n                this._touchEvent = true;\n                this.highlightUnderEvent(event);\n            }));\n            this.dropdown.on(\"touchmove\", resultsSelector, this.bind(this.touchMoved));\n            this.dropdown.on(\"touchstart touchend\", resultsSelector, this.bind(this.clearTouchMoved));\n\n            // Waiting for a click event on touch devices to select option and hide dropdown\n            // otherwise click will be triggered on an underlying element\n            this.dropdown.on('click', this.bind(function (event) {\n                if (this._touchEvent) {\n                    this._touchEvent = false;\n                    this.selectHighlighted();\n                }\n            }));\n\n            installDebouncedScroll(80, this.results);\n            this.dropdown.on(\"scroll-debounced\", resultsSelector, this.bind(this.loadMoreIfNeeded));\n\n            // do not propagate change event from the search field out of the component\n            $(this.container).on(\"change\", \".select2-input\", function(e) {e.stopPropagation();});\n            $(this.dropdown).on(\"change\", \".select2-input\", function(e) {e.stopPropagation();});\n\n            // if jquery.mousewheel plugin is installed we can prevent out-of-bounds scrolling of results via mousewheel\n            if ($.fn.mousewheel) {\n                results.mousewheel(function (e, delta, deltaX, deltaY) {\n                    var top = results.scrollTop();\n                    if (deltaY > 0 && top - deltaY <= 0) {\n                        results.scrollTop(0);\n                        killEvent(e);\n                    } else if (deltaY < 0 && results.get(0).scrollHeight - results.scrollTop() + deltaY <= results.height()) {\n                        results.scrollTop(results.get(0).scrollHeight - results.height());\n                        killEvent(e);\n                    }\n                });\n            }\n\n            installKeyUpChangeEvent(search);\n            search.on(\"keyup-change input paste\", this.bind(this.updateResults));\n            search.on(\"focus\", function () { search.addClass(\"select2-focused\"); });\n            search.on(\"blur\", function () { search.removeClass(\"select2-focused\");});\n\n            this.dropdown.on(\"mouseup\", resultsSelector, this.bind(function (e) {\n                if ($(e.target).closest(\".select2-result-selectable\").length > 0) {\n                    this.highlightUnderEvent(e);\n                    this.selectHighlighted(e);\n                }\n            }));\n\n            // trap all mouse events from leaving the dropdown. sometimes there may be a modal that is listening\n            // for mouse events outside of itself so it can close itself. since the dropdown is now outside the select2's\n            // dom it will trigger the popup close, which is not what we want\n            // focusin can cause focus wars between modals and select2 since the dropdown is outside the modal.\n            this.dropdown.on(\"click mouseup mousedown touchstart touchend focusin\", function (e) { e.stopPropagation(); });\n\n            this.nextSearchTerm = undefined;\n\n            if ($.isFunction(this.opts.initSelection)) {\n                // initialize selection based on the current value of the source element\n                this.initSelection();\n\n                // if the user has provided a function that can set selection based on the value of the source element\n                // we monitor the change event on the element and trigger it, allowing for two way synchronization\n                this.monitorSource();\n            }\n\n            if (opts.maximumInputLength !== null) {\n                this.search.attr(\"maxlength\", opts.maximumInputLength);\n            }\n\n            var disabled = opts.element.prop(\"disabled\");\n            if (disabled === undefined) disabled = false;\n            this.enable(!disabled);\n\n            var readonly = opts.element.prop(\"readonly\");\n            if (readonly === undefined) readonly = false;\n            this.readonly(readonly);\n\n            // Calculate size of scrollbar\n            scrollBarDimensions = scrollBarDimensions || measureScrollbar();\n\n            this.autofocus = opts.element.prop(\"autofocus\");\n            opts.element.prop(\"autofocus\", false);\n            if (this.autofocus) this.focus();\n\n            this.search.attr(\"placeholder\", opts.searchInputPlaceholder);\n        },\n\n        // abstract\n        destroy: function () {\n            var element=this.opts.element, select2 = element.data(\"select2\"), self = this;\n\n            this.close();\n\n            if (element.length && element[0].detachEvent) {\n                element.each(function () {\n                    this.detachEvent(\"onpropertychange\", self._sync);\n                });\n            }\n            if (this.propertyObserver) {\n                this.propertyObserver.disconnect();\n                this.propertyObserver = null;\n            }\n            this._sync = null;\n\n            if (select2 !== undefined) {\n                select2.container.remove();\n                select2.liveRegion.remove();\n                select2.dropdown.remove();\n                element\n                    .removeClass(\"select2-offscreen\")\n                    .removeData(\"select2\")\n                    .off(\".select2\")\n                    .prop(\"autofocus\", this.autofocus || false);\n                if (this.elementTabIndex) {\n                    element.attr({tabindex: this.elementTabIndex});\n                } else {\n                    element.removeAttr(\"tabindex\");\n                }\n                element.show();\n            }\n\n            cleanupJQueryElements.call(this,\n                \"container\",\n                \"liveRegion\",\n                \"dropdown\",\n                \"results\",\n                \"search\"\n            );\n        },\n\n        // abstract\n        optionToData: function(element) {\n            if (element.is(\"option\")) {\n                return {\n                    id:element.prop(\"value\"),\n                    text:element.text(),\n                    element: element.get(),\n                    css: element.attr(\"class\"),\n                    disabled: element.prop(\"disabled\"),\n                    locked: equal(element.attr(\"locked\"), \"locked\") || equal(element.data(\"locked\"), true)\n                };\n            } else if (element.is(\"optgroup\")) {\n                return {\n                    text:element.attr(\"label\"),\n                    children:[],\n                    element: element.get(),\n                    css: element.attr(\"class\")\n                };\n            }\n        },\n\n        // abstract\n        prepareOpts: function (opts) {\n            var element, select, idKey, ajaxUrl, self = this;\n\n            element = opts.element;\n\n            if (element.get(0).tagName.toLowerCase() === \"select\") {\n                this.select = select = opts.element;\n            }\n\n            if (select) {\n                // these options are not allowed when attached to a select because they are picked up off the element itself\n                $.each([\"id\", \"multiple\", \"ajax\", \"query\", \"createSearchChoice\", \"initSelection\", \"data\", \"tags\"], function () {\n                    if (this in opts) {\n                        throw new Error(\"Option '\" + this + \"' is not allowed for Select2 when attached to a <select> element.\");\n                    }\n                });\n            }\n\n            opts = $.extend({}, {\n                populateResults: function(container, results, query) {\n                    var populate, id=this.opts.id, liveRegion=this.liveRegion;\n\n                    populate=function(results, container, depth) {\n\n                        var i, l, result, selectable, disabled, compound, node, label, innerContainer, formatted;\n\n                        results = opts.sortResults(results, container, query);\n\n                        // collect the created nodes for bulk append\n                        var nodes = [];\n                        for (i = 0, l = results.length; i < l; i = i + 1) {\n\n                            result=results[i];\n\n                            disabled = (result.disabled === true);\n                            selectable = (!disabled) && (id(result) !== undefined);\n\n                            compound=result.children && result.children.length > 0;\n\n                            node=$(\"<li></li>\");\n                            node.addClass(\"select2-results-dept-\"+depth);\n                            node.addClass(\"select2-result\");\n                            node.addClass(selectable ? \"select2-result-selectable\" : \"select2-result-unselectable\");\n                            if (disabled) { node.addClass(\"select2-disabled\"); }\n                            if (compound) { node.addClass(\"select2-result-with-children\"); }\n                            node.addClass(self.opts.formatResultCssClass(result));\n                            node.attr(\"role\", \"presentation\");\n\n                            label=$(document.createElement(\"div\"));\n                            label.addClass(\"select2-result-label\");\n                            label.attr(\"id\", \"select2-result-label-\" + nextUid());\n                            label.attr(\"role\", \"option\");\n\n                            formatted=opts.formatResult(result, label, query, self.opts.escapeMarkup);\n                            if (formatted!==undefined) {\n                                label.html(formatted);\n                                node.append(label);\n                            }\n\n\n                            if (compound) {\n\n                                innerContainer=$(\"<ul></ul>\");\n                                innerContainer.addClass(\"select2-result-sub\");\n                                populate(result.children, innerContainer, depth+1);\n                                node.append(innerContainer);\n                            }\n\n                            node.data(\"select2-data\", result);\n                            nodes.push(node[0]);\n                        }\n\n                        // bulk append the created nodes\n                        container.append(nodes);\n                        liveRegion.text(opts.formatMatches(results.length));\n                    };\n\n                    populate(results, container, 0);\n                }\n            }, $.fn.select2.defaults, opts);\n\n            if (typeof(opts.id) !== \"function\") {\n                idKey = opts.id;\n                opts.id = function (e) { return e[idKey]; };\n            }\n\n            if ($.isArray(opts.element.data(\"select2Tags\"))) {\n                if (\"tags\" in opts) {\n                    throw \"tags specified as both an attribute 'data-select2-tags' and in options of Select2 \" + opts.element.attr(\"id\");\n                }\n                opts.tags=opts.element.data(\"select2Tags\");\n            }\n\n            if (select) {\n                opts.query = this.bind(function (query) {\n                    var data = { results: [], more: false },\n                        term = query.term,\n                        children, placeholderOption, process;\n\n                    process=function(element, collection) {\n                        var group;\n                        if (element.is(\"option\")) {\n                            if (query.matcher(term, element.text(), element)) {\n                                collection.push(self.optionToData(element));\n                            }\n                        } else if (element.is(\"optgroup\")) {\n                            group=self.optionToData(element);\n                            element.children().each2(function(i, elm) { process(elm, group.children); });\n                            if (group.children.length>0) {\n                                collection.push(group);\n                            }\n                        }\n                    };\n\n                    children=element.children();\n\n                    // ignore the placeholder option if there is one\n                    if (this.getPlaceholder() !== undefined && children.length > 0) {\n                        placeholderOption = this.getPlaceholderOption();\n                        if (placeholderOption) {\n                            children=children.not(placeholderOption);\n                        }\n                    }\n\n                    children.each2(function(i, elm) { process(elm, data.results); });\n\n                    query.callback(data);\n                });\n                // this is needed because inside val() we construct choices from options and their id is hardcoded\n                opts.id=function(e) { return e.id; };\n            } else {\n                if (!(\"query\" in opts)) {\n\n                    if (\"ajax\" in opts) {\n                        ajaxUrl = opts.element.data(\"ajax-url\");\n                        if (ajaxUrl && ajaxUrl.length > 0) {\n                            opts.ajax.url = ajaxUrl;\n                        }\n                        opts.query = ajax.call(opts.element, opts.ajax);\n                    } else if (\"data\" in opts) {\n                        opts.query = local(opts.data);\n                    } else if (\"tags\" in opts) {\n                        opts.query = tags(opts.tags);\n                        if (opts.createSearchChoice === undefined) {\n                            opts.createSearchChoice = function (term) { return {id: $.trim(term), text: $.trim(term)}; };\n                        }\n                        if (opts.initSelection === undefined) {\n                            opts.initSelection = function (element, callback) {\n                                var data = [];\n                                $(splitVal(element.val(), opts.separator)).each(function () {\n                                    var obj = { id: this, text: this },\n                                        tags = opts.tags;\n                                    if ($.isFunction(tags)) tags=tags();\n                                    $(tags).each(function() { if (equal(this.id, obj.id)) { obj = this; return false; } });\n                                    data.push(obj);\n                                });\n\n                                callback(data);\n                            };\n                        }\n                    }\n                }\n            }\n            if (typeof(opts.query) !== \"function\") {\n                throw \"query function not defined for Select2 \" + opts.element.attr(\"id\");\n            }\n\n            if (opts.createSearchChoicePosition === 'top') {\n                opts.createSearchChoicePosition = function(list, item) { list.unshift(item); };\n            }\n            else if (opts.createSearchChoicePosition === 'bottom') {\n                opts.createSearchChoicePosition = function(list, item) { list.push(item); };\n            }\n            else if (typeof(opts.createSearchChoicePosition) !== \"function\")  {\n                throw \"invalid createSearchChoicePosition option must be 'top', 'bottom' or a custom function\";\n            }\n\n            return opts;\n        },\n\n        /**\n         * Monitor the original element for changes and update select2 accordingly\n         */\n        // abstract\n        monitorSource: function () {\n            var el = this.opts.element, observer, self = this;\n\n            el.on(\"change.select2\", this.bind(function (e) {\n                if (this.opts.element.data(\"select2-change-triggered\") !== true) {\n                    this.initSelection();\n                }\n            }));\n\n            this._sync = this.bind(function () {\n\n                // sync enabled state\n                var disabled = el.prop(\"disabled\");\n                if (disabled === undefined) disabled = false;\n                this.enable(!disabled);\n\n                var readonly = el.prop(\"readonly\");\n                if (readonly === undefined) readonly = false;\n                this.readonly(readonly);\n\n                syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass);\n                this.container.addClass(evaluate(this.opts.containerCssClass, this.opts.element));\n\n                syncCssClasses(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass);\n                this.dropdown.addClass(evaluate(this.opts.dropdownCssClass, this.opts.element));\n\n            });\n\n            // IE8-10 (IE9/10 won't fire propertyChange via attachEventListener)\n            if (el.length && el[0].attachEvent) {\n                el.each(function() {\n                    this.attachEvent(\"onpropertychange\", self._sync);\n                });\n            }\n\n            // safari, chrome, firefox, IE11\n            observer = window.MutationObserver || window.WebKitMutationObserver|| window.MozMutationObserver;\n            if (observer !== undefined) {\n                if (this.propertyObserver) { delete this.propertyObserver; this.propertyObserver = null; }\n                this.propertyObserver = new observer(function (mutations) {\n                    $.each(mutations, self._sync);\n                });\n                this.propertyObserver.observe(el.get(0), { attributes:true, subtree:false });\n            }\n        },\n\n        // abstract\n        triggerSelect: function(data) {\n            var evt = $.Event(\"select2-selecting\", { val: this.id(data), object: data, choice: data });\n            this.opts.element.trigger(evt);\n            return !evt.isDefaultPrevented();\n        },\n\n        /**\n         * Triggers the change event on the source element\n         */\n        // abstract\n        triggerChange: function (details) {\n\n            details = details || {};\n            details= $.extend({}, details, { type: \"change\", val: this.val() });\n            // prevents recursive triggering\n            this.opts.element.data(\"select2-change-triggered\", true);\n            this.opts.element.trigger(details);\n            this.opts.element.data(\"select2-change-triggered\", false);\n\n            // some validation frameworks ignore the change event and listen instead to keyup, click for selects\n            // so here we trigger the click event manually\n            this.opts.element.click();\n\n            // ValidationEngine ignores the change event and listens instead to blur\n            // so here we trigger the blur event manually if so desired\n            if (this.opts.blurOnChange)\n                this.opts.element.blur();\n        },\n\n        //abstract\n        isInterfaceEnabled: function()\n        {\n            return this.enabledInterface === true;\n        },\n\n        // abstract\n        enableInterface: function() {\n            var enabled = this._enabled && !this._readonly,\n                disabled = !enabled;\n\n            if (enabled === this.enabledInterface) return false;\n\n            this.container.toggleClass(\"select2-container-disabled\", disabled);\n            this.close();\n            this.enabledInterface = enabled;\n\n            return true;\n        },\n\n        // abstract\n        enable: function(enabled) {\n            if (enabled === undefined) enabled = true;\n            if (this._enabled === enabled) return;\n            this._enabled = enabled;\n\n            this.opts.element.prop(\"disabled\", !enabled);\n            this.enableInterface();\n        },\n\n        // abstract\n        disable: function() {\n            this.enable(false);\n        },\n\n        // abstract\n        readonly: function(enabled) {\n            if (enabled === undefined) enabled = false;\n            if (this._readonly === enabled) return;\n            this._readonly = enabled;\n\n            this.opts.element.prop(\"readonly\", enabled);\n            this.enableInterface();\n        },\n\n        // abstract\n        opened: function () {\n            return (this.container) ? this.container.hasClass(\"select2-dropdown-open\") : false;\n        },\n\n        // abstract\n        positionDropdown: function() {\n            var $dropdown = this.dropdown,\n                offset = this.container.offset(),\n                height = this.container.outerHeight(false),\n                width = this.container.outerWidth(false),\n                dropHeight = $dropdown.outerHeight(false),\n                $window = $(window),\n                windowWidth = $window.width(),\n                windowHeight = $window.height(),\n                viewPortRight = $window.scrollLeft() + windowWidth,\n                viewportBottom = $window.scrollTop() + windowHeight,\n                dropTop = offset.top + height,\n                dropLeft = offset.left,\n                enoughRoomBelow = dropTop + dropHeight <= viewportBottom,\n                enoughRoomAbove = (offset.top - dropHeight) >= $window.scrollTop(),\n                dropWidth = $dropdown.outerWidth(false),\n                enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight,\n                aboveNow = $dropdown.hasClass(\"select2-drop-above\"),\n                bodyOffset,\n                above,\n                changeDirection,\n                css,\n                resultsListNode;\n\n            // always prefer the current above/below alignment, unless there is not enough room\n            if (aboveNow) {\n                above = true;\n                if (!enoughRoomAbove && enoughRoomBelow) {\n                    changeDirection = true;\n                    above = false;\n                }\n            } else {\n                above = false;\n                if (!enoughRoomBelow && enoughRoomAbove) {\n                    changeDirection = true;\n                    above = true;\n                }\n            }\n\n            //if we are changing direction we need to get positions when dropdown is hidden;\n            if (changeDirection) {\n                $dropdown.hide();\n                offset = this.container.offset();\n                height = this.container.outerHeight(false);\n                width = this.container.outerWidth(false);\n                dropHeight = $dropdown.outerHeight(false);\n                viewPortRight = $window.scrollLeft() + windowWidth;\n                viewportBottom = $window.scrollTop() + windowHeight;\n                dropTop = offset.top + height;\n                dropLeft = offset.left;\n                dropWidth = $dropdown.outerWidth(false);\n                enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight;\n                $dropdown.show();\n\n                // fix so the cursor does not move to the left within the search-textbox in IE\n                this.focusSearch();\n            }\n\n            if (this.opts.dropdownAutoWidth) {\n                resultsListNode = $('.select2-results', $dropdown)[0];\n                $dropdown.addClass('select2-drop-auto-width');\n                $dropdown.css('width', '');\n                // Add scrollbar width to dropdown if vertical scrollbar is present\n                dropWidth = $dropdown.outerWidth(false) + (resultsListNode.scrollHeight === resultsListNode.clientHeight ? 0 : scrollBarDimensions.width);\n                dropWidth > width ? width = dropWidth : dropWidth = width;\n                dropHeight = $dropdown.outerHeight(false);\n                enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight;\n            }\n            else {\n                this.container.removeClass('select2-drop-auto-width');\n            }\n\n            //console.log(\"below/ droptop:\", dropTop, \"dropHeight\", dropHeight, \"sum\", (dropTop+dropHeight)+\" viewport bottom\", viewportBottom, \"enough?\", enoughRoomBelow);\n            //console.log(\"above/ offset.top\", offset.top, \"dropHeight\", dropHeight, \"top\", (offset.top-dropHeight), \"scrollTop\", this.body.scrollTop(), \"enough?\", enoughRoomAbove);\n\n            // fix positioning when body has an offset and is not position: static\n            if (this.body.css('position') !== 'static') {\n                bodyOffset = this.body.offset();\n                dropTop -= bodyOffset.top;\n                dropLeft -= bodyOffset.left;\n            }\n\n            if (!enoughRoomOnRight) {\n                dropLeft = offset.left + this.container.outerWidth(false) - dropWidth;\n            }\n\n            css =  {\n                left: dropLeft,\n                width: width\n            };\n\n            if (above) {\n                css.top = offset.top - dropHeight;\n                css.bottom = 'auto';\n                this.container.addClass(\"select2-drop-above\");\n                $dropdown.addClass(\"select2-drop-above\");\n            }\n            else {\n                css.top = dropTop;\n                css.bottom = 'auto';\n                this.container.removeClass(\"select2-drop-above\");\n                $dropdown.removeClass(\"select2-drop-above\");\n            }\n            css = $.extend(css, evaluate(this.opts.dropdownCss, this.opts.element));\n\n            $dropdown.css(css);\n        },\n\n        // abstract\n        shouldOpen: function() {\n            var event;\n\n            if (this.opened()) return false;\n\n            if (this._enabled === false || this._readonly === true) return false;\n\n            event = $.Event(\"select2-opening\");\n            this.opts.element.trigger(event);\n            return !event.isDefaultPrevented();\n        },\n\n        // abstract\n        clearDropdownAlignmentPreference: function() {\n            // clear the classes used to figure out the preference of where the dropdown should be opened\n            this.container.removeClass(\"select2-drop-above\");\n            this.dropdown.removeClass(\"select2-drop-above\");\n        },\n\n        /**\n         * Opens the dropdown\n         *\n         * @return {Boolean} whether or not dropdown was opened. This method will return false if, for example,\n         * the dropdown is already open, or if the 'open' event listener on the element called preventDefault().\n         */\n        // abstract\n        open: function () {\n\n            if (!this.shouldOpen()) return false;\n\n            this.opening();\n\n            // Only bind the document mousemove when the dropdown is visible\n            $document.on(\"mousemove.select2Event\", function (e) {\n                lastMousePosition.x = e.pageX;\n                lastMousePosition.y = e.pageY;\n            });\n\n            return true;\n        },\n\n        /**\n         * Performs the opening of the dropdown\n         */\n        // abstract\n        opening: function() {\n            var cid = this.containerEventName,\n                scroll = \"scroll.\" + cid,\n                resize = \"resize.\"+cid,\n                orient = \"orientationchange.\"+cid,\n                mask;\n\n            this.container.addClass(\"select2-dropdown-open\").addClass(\"select2-container-active\");\n\n            this.clearDropdownAlignmentPreference();\n\n            if(this.dropdown[0] !== this.body.children().last()[0]) {\n                this.dropdown.detach().appendTo(this.body);\n            }\n\n            // create the dropdown mask if doesn't already exist\n            mask = $(\"#select2-drop-mask\");\n            if (mask.length == 0) {\n                mask = $(document.createElement(\"div\"));\n                mask.attr(\"id\",\"select2-drop-mask\").attr(\"class\",\"select2-drop-mask\");\n                mask.hide();\n                mask.appendTo(this.body);\n                mask.on(\"mousedown touchstart click\", function (e) {\n                    // Prevent IE from generating a click event on the body\n                    reinsertElement(mask);\n\n                    var dropdown = $(\"#select2-drop\"), self;\n                    if (dropdown.length > 0) {\n                        self=dropdown.data(\"select2\");\n                        if (self.opts.selectOnBlur) {\n                            self.selectHighlighted({noFocus: true});\n                        }\n                        self.close();\n                        e.preventDefault();\n                        e.stopPropagation();\n                    }\n                });\n            }\n\n            // ensure the mask is always right before the dropdown\n            if (this.dropdown.prev()[0] !== mask[0]) {\n                this.dropdown.before(mask);\n            }\n\n            // move the global id to the correct dropdown\n            $(\"#select2-drop\").removeAttr(\"id\");\n            this.dropdown.attr(\"id\", \"select2-drop\");\n\n            // show the elements\n            mask.show();\n\n            this.positionDropdown();\n            this.dropdown.show();\n            this.positionDropdown();\n\n            this.dropdown.addClass(\"select2-drop-active\");\n\n            // attach listeners to events that can change the position of the container and thus require\n            // the position of the dropdown to be updated as well so it does not come unglued from the container\n            var that = this;\n            this.container.parents().add(window).each(function () {\n                $(this).on(resize+\" \"+scroll+\" \"+orient, function (e) {\n                    if (that.opened()) that.positionDropdown();\n                });\n            });\n\n\n        },\n\n        // abstract\n        close: function () {\n            if (!this.opened()) return;\n\n            var cid = this.containerEventName,\n                scroll = \"scroll.\" + cid,\n                resize = \"resize.\"+cid,\n                orient = \"orientationchange.\"+cid;\n\n            // unbind event listeners\n            this.container.parents().add(window).each(function () { $(this).off(scroll).off(resize).off(orient); });\n\n            this.clearDropdownAlignmentPreference();\n\n            $(\"#select2-drop-mask\").hide();\n            this.dropdown.removeAttr(\"id\"); // only the active dropdown has the select2-drop id\n            this.dropdown.hide();\n            this.container.removeClass(\"select2-dropdown-open\").removeClass(\"select2-container-active\");\n            this.results.empty();\n\n            // Now that the dropdown is closed, unbind the global document mousemove event\n            $document.off(\"mousemove.select2Event\");\n\n            this.clearSearch();\n            this.search.removeClass(\"select2-active\");\n            this.opts.element.trigger($.Event(\"select2-close\"));\n        },\n\n        /**\n         * Opens control, sets input value, and updates results.\n         */\n        // abstract\n        externalSearch: function (term) {\n            this.open();\n            this.search.val(term);\n            this.updateResults(false);\n        },\n\n        // abstract\n        clearSearch: function () {\n\n        },\n\n        //abstract\n        getMaximumSelectionSize: function() {\n            return evaluate(this.opts.maximumSelectionSize, this.opts.element);\n        },\n\n        // abstract\n        ensureHighlightVisible: function () {\n            var results = this.results, children, index, child, hb, rb, y, more, topOffset;\n\n            index = this.highlight();\n\n            if (index < 0) return;\n\n            if (index == 0) {\n\n                // if the first element is highlighted scroll all the way to the top,\n                // that way any unselectable headers above it will also be scrolled\n                // into view\n\n                results.scrollTop(0);\n                return;\n            }\n\n            children = this.findHighlightableChoices().find('.select2-result-label');\n\n            child = $(children[index]);\n\n            topOffset = (child.offset() || {}).top || 0;\n\n            hb = topOffset + child.outerHeight(true);\n\n            // if this is the last child lets also make sure select2-more-results is visible\n            if (index === children.length - 1) {\n                more = results.find(\"li.select2-more-results\");\n                if (more.length > 0) {\n                    hb = more.offset().top + more.outerHeight(true);\n                }\n            }\n\n            rb = results.offset().top + results.outerHeight(true);\n            if (hb > rb) {\n                results.scrollTop(results.scrollTop() + (hb - rb));\n            }\n            y = topOffset - results.offset().top;\n\n            // make sure the top of the element is visible\n            if (y < 0 && child.css('display') != 'none' ) {\n                results.scrollTop(results.scrollTop() + y); // y is negative\n            }\n        },\n\n        // abstract\n        findHighlightableChoices: function() {\n            return this.results.find(\".select2-result-selectable:not(.select2-disabled):not(.select2-selected)\");\n        },\n\n        // abstract\n        moveHighlight: function (delta) {\n            var choices = this.findHighlightableChoices(),\n                index = this.highlight();\n\n            while (index > -1 && index < choices.length) {\n                index += delta;\n                var choice = $(choices[index]);\n                if (choice.hasClass(\"select2-result-selectable\") && !choice.hasClass(\"select2-disabled\") && !choice.hasClass(\"select2-selected\")) {\n                    this.highlight(index);\n                    break;\n                }\n            }\n        },\n\n        // abstract\n        highlight: function (index) {\n            var choices = this.findHighlightableChoices(),\n                choice,\n                data;\n\n            if (arguments.length === 0) {\n                return indexOf(choices.filter(\".select2-highlighted\")[0], choices.get());\n            }\n\n            if (index >= choices.length) index = choices.length - 1;\n            if (index < 0) index = 0;\n\n            this.removeHighlight();\n\n            choice = $(choices[index]);\n            choice.addClass(\"select2-highlighted\");\n\n            // ensure assistive technology can determine the active choice\n            this.search.attr(\"aria-activedescendant\", choice.find(\".select2-result-label\").attr(\"id\"));\n\n            this.ensureHighlightVisible();\n\n            this.liveRegion.text(choice.text());\n\n            data = choice.data(\"select2-data\");\n            if (data) {\n                this.opts.element.trigger({ type: \"select2-highlight\", val: this.id(data), choice: data });\n            }\n        },\n\n        removeHighlight: function() {\n            this.results.find(\".select2-highlighted\").removeClass(\"select2-highlighted\");\n        },\n\n        touchMoved: function() {\n            this._touchMoved = true;\n        },\n\n        clearTouchMoved: function() {\n          this._touchMoved = false;\n        },\n\n        // abstract\n        countSelectableResults: function() {\n            return this.findHighlightableChoices().length;\n        },\n\n        // abstract\n        highlightUnderEvent: function (event) {\n            var el = $(event.target).closest(\".select2-result-selectable\");\n            if (el.length > 0 && !el.is(\".select2-highlighted\")) {\n                var choices = this.findHighlightableChoices();\n                this.highlight(choices.index(el));\n            } else if (el.length == 0) {\n                // if we are over an unselectable item remove all highlights\n                this.removeHighlight();\n            }\n        },\n\n        // abstract\n        loadMoreIfNeeded: function () {\n            var results = this.results,\n                more = results.find(\"li.select2-more-results\"),\n                below, // pixels the element is below the scroll fold, below==0 is when the element is starting to be visible\n                page = this.resultsPage + 1,\n                self=this,\n                term=this.search.val(),\n                context=this.context;\n\n            if (more.length === 0) return;\n            below = more.offset().top - results.offset().top - results.height();\n\n            if (below <= this.opts.loadMorePadding) {\n                more.addClass(\"select2-active\");\n                this.opts.query({\n                        element: this.opts.element,\n                        term: term,\n                        page: page,\n                        context: context,\n                        matcher: this.opts.matcher,\n                        callback: this.bind(function (data) {\n\n                    // ignore a response if the select2 has been closed before it was received\n                    if (!self.opened()) return;\n\n\n                    self.opts.populateResults.call(this, results, data.results, {term: term, page: page, context:context});\n                    self.postprocessResults(data, false, false);\n\n                    if (data.more===true) {\n                        more.detach().appendTo(results).text(evaluate(self.opts.formatLoadMore, self.opts.element, page+1));\n                        window.setTimeout(function() { self.loadMoreIfNeeded(); }, 10);\n                    } else {\n                        more.remove();\n                    }\n                    self.positionDropdown();\n                    self.resultsPage = page;\n                    self.context = data.context;\n                    this.opts.element.trigger({ type: \"select2-loaded\", items: data });\n                })});\n            }\n        },\n\n        /**\n         * Default tokenizer function which does nothing\n         */\n        tokenize: function() {\n\n        },\n\n        /**\n         * @param initial whether or not this is the call to this method right after the dropdown has been opened\n         */\n        // abstract\n        updateResults: function (initial) {\n            var search = this.search,\n                results = this.results,\n                opts = this.opts,\n                data,\n                self = this,\n                input,\n                term = search.val(),\n                lastTerm = $.data(this.container, \"select2-last-term\"),\n                // sequence number used to drop out-of-order responses\n                queryNumber;\n\n            // prevent duplicate queries against the same term\n            if (initial !== true && lastTerm && equal(term, lastTerm)) return;\n\n            $.data(this.container, \"select2-last-term\", term);\n\n            // if the search is currently hidden we do not alter the results\n            if (initial !== true && (this.showSearchInput === false || !this.opened())) {\n                return;\n            }\n\n            function postRender() {\n                search.removeClass(\"select2-active\");\n                self.positionDropdown();\n                if (results.find('.select2-no-results,.select2-selection-limit,.select2-searching').length) {\n                    self.liveRegion.text(results.text());\n                }\n                else {\n                    self.liveRegion.text(self.opts.formatMatches(results.find('.select2-result-selectable').length));\n                }\n            }\n\n            function render(html) {\n                results.html(html);\n                postRender();\n            }\n\n            queryNumber = ++this.queryCount;\n\n            var maxSelSize = this.getMaximumSelectionSize();\n            if (maxSelSize >=1) {\n                data = this.data();\n                if ($.isArray(data) && data.length >= maxSelSize && checkFormatter(opts.formatSelectionTooBig, \"formatSelectionTooBig\")) {\n                    render(\"<li class='select2-selection-limit'>\" + evaluate(opts.formatSelectionTooBig, opts.element, maxSelSize) + \"</li>\");\n                    return;\n                }\n            }\n\n            if (search.val().length < opts.minimumInputLength) {\n                if (checkFormatter(opts.formatInputTooShort, \"formatInputTooShort\")) {\n                    render(\"<li class='select2-no-results'>\" + evaluate(opts.formatInputTooShort, opts.element, search.val(), opts.minimumInputLength) + \"</li>\");\n                } else {\n                    render(\"\");\n                }\n                if (initial && this.showSearch) this.showSearch(true);\n                return;\n            }\n\n            if (opts.maximumInputLength && search.val().length > opts.maximumInputLength) {\n                if (checkFormatter(opts.formatInputTooLong, \"formatInputTooLong\")) {\n                    render(\"<li class='select2-no-results'>\" + evaluate(opts.formatInputTooLong, opts.element, search.val(), opts.maximumInputLength) + \"</li>\");\n                } else {\n                    render(\"\");\n                }\n                return;\n            }\n\n            if (opts.formatSearching && this.findHighlightableChoices().length === 0) {\n                render(\"<li class='select2-searching'>\" + evaluate(opts.formatSearching, opts.element) + \"</li>\");\n            }\n\n            search.addClass(\"select2-active\");\n\n            this.removeHighlight();\n\n            // give the tokenizer a chance to pre-process the input\n            input = this.tokenize();\n            if (input != undefined && input != null) {\n                search.val(input);\n            }\n\n            this.resultsPage = 1;\n\n            opts.query({\n                element: opts.element,\n                    term: search.val(),\n                    page: this.resultsPage,\n                    context: null,\n                    matcher: opts.matcher,\n                    callback: this.bind(function (data) {\n                var def; // default choice\n\n                // ignore old responses\n                if (queryNumber != this.queryCount) {\n                  return;\n                }\n\n                // ignore a response if the select2 has been closed before it was received\n                if (!this.opened()) {\n                    this.search.removeClass(\"select2-active\");\n                    return;\n                }\n\n                // handle ajax error\n                if(data.hasError !== undefined && checkFormatter(opts.formatAjaxError, \"formatAjaxError\")) {\n                    render(\"<li class='select2-ajax-error'>\" + evaluate(opts.formatAjaxError, opts.element, data.jqXHR, data.textStatus, data.errorThrown) + \"</li>\");\n                    return;\n                }\n\n                // save context, if any\n                this.context = (data.context===undefined) ? null : data.context;\n                // create a default choice and prepend it to the list\n                if (this.opts.createSearchChoice && search.val() !== \"\") {\n                    def = this.opts.createSearchChoice.call(self, search.val(), data.results);\n                    if (def !== undefined && def !== null && self.id(def) !== undefined && self.id(def) !== null) {\n                        if ($(data.results).filter(\n                            function () {\n                                return equal(self.id(this), self.id(def));\n                            }).length === 0) {\n                            this.opts.createSearchChoicePosition(data.results, def);\n                        }\n                    }\n                }\n\n                if (data.results.length === 0 && checkFormatter(opts.formatNoMatches, \"formatNoMatches\")) {\n                    render(\"<li class='select2-no-results'>\" + evaluate(opts.formatNoMatches, opts.element, search.val()) + \"</li>\");\n                    return;\n                }\n\n                results.empty();\n                self.opts.populateResults.call(this, results, data.results, {term: search.val(), page: this.resultsPage, context:null});\n\n                if (data.more === true && checkFormatter(opts.formatLoadMore, \"formatLoadMore\")) {\n                    results.append(\"<li class='select2-more-results'>\" + opts.escapeMarkup(evaluate(opts.formatLoadMore, opts.element, this.resultsPage)) + \"</li>\");\n                    window.setTimeout(function() { self.loadMoreIfNeeded(); }, 10);\n                }\n\n                this.postprocessResults(data, initial);\n\n                postRender();\n\n                this.opts.element.trigger({ type: \"select2-loaded\", items: data });\n            })});\n        },\n\n        // abstract\n        cancel: function () {\n            this.close();\n        },\n\n        // abstract\n        blur: function () {\n            // if selectOnBlur == true, select the currently highlighted option\n            if (this.opts.selectOnBlur)\n                this.selectHighlighted({noFocus: true});\n\n            this.close();\n            this.container.removeClass(\"select2-container-active\");\n            // synonymous to .is(':focus'), which is available in jquery >= 1.6\n            if (this.search[0] === document.activeElement) { this.search.blur(); }\n            this.clearSearch();\n            this.selection.find(\".select2-search-choice-focus\").removeClass(\"select2-search-choice-focus\");\n        },\n\n        // abstract\n        focusSearch: function () {\n            focus(this.search);\n        },\n\n        // abstract\n        selectHighlighted: function (options) {\n            if (this._touchMoved) {\n              this.clearTouchMoved();\n              return;\n            }\n            var index=this.highlight(),\n                highlighted=this.results.find(\".select2-highlighted\"),\n                data = highlighted.closest('.select2-result').data(\"select2-data\");\n\n            if (data) {\n                this.highlight(index);\n                this.onSelect(data, options);\n            } else if (options && options.noFocus) {\n                this.close();\n            }\n        },\n\n        // abstract\n        getPlaceholder: function () {\n            var placeholderOption;\n            return this.opts.element.attr(\"placeholder\") ||\n                this.opts.element.attr(\"data-placeholder\") || // jquery 1.4 compat\n                this.opts.element.data(\"placeholder\") ||\n                this.opts.placeholder ||\n                ((placeholderOption = this.getPlaceholderOption()) !== undefined ? placeholderOption.text() : undefined);\n        },\n\n        // abstract\n        getPlaceholderOption: function() {\n            if (this.select) {\n                var firstOption = this.select.children('option').first();\n                if (this.opts.placeholderOption !== undefined ) {\n                    //Determine the placeholder option based on the specified placeholderOption setting\n                    return (this.opts.placeholderOption === \"first\" && firstOption) ||\n                           (typeof this.opts.placeholderOption === \"function\" && this.opts.placeholderOption(this.select));\n                } else if ($.trim(firstOption.text()) === \"\" && firstOption.val() === \"\") {\n                    //No explicit placeholder option specified, use the first if it's blank\n                    return firstOption;\n                }\n            }\n        },\n\n        /**\n         * Get the desired width for the container element.  This is\n         * derived first from option `width` passed to select2, then\n         * the inline 'style' on the original element, and finally\n         * falls back to the jQuery calculated element width.\n         */\n        // abstract\n        initContainerWidth: function () {\n            function resolveContainerWidth() {\n                var style, attrs, matches, i, l, attr;\n\n                if (this.opts.width === \"off\") {\n                    return null;\n                } else if (this.opts.width === \"element\"){\n                    return this.opts.element.outerWidth(false) === 0 ? 'auto' : this.opts.element.outerWidth(false) + 'px';\n                } else if (this.opts.width === \"copy\" || this.opts.width === \"resolve\") {\n                    // check if there is inline style on the element that contains width\n                    style = this.opts.element.attr('style');\n                    if (style !== undefined) {\n                        attrs = style.split(';');\n                        for (i = 0, l = attrs.length; i < l; i = i + 1) {\n                            attr = attrs[i].replace(/\\s/g, '');\n                            matches = attr.match(/^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i);\n                            if (matches !== null && matches.length >= 1)\n                                return matches[1];\n                        }\n                    }\n\n                    if (this.opts.width === \"resolve\") {\n                        // next check if css('width') can resolve a width that is percent based, this is sometimes possible\n                        // when attached to input type=hidden or elements hidden via css\n                        style = this.opts.element.css('width');\n                        if (style.indexOf(\"%\") > 0) return style;\n\n                        // finally, fallback on the calculated width of the element\n                        return (this.opts.element.outerWidth(false) === 0 ? 'auto' : this.opts.element.outerWidth(false) + 'px');\n                    }\n\n                    return null;\n                } else if ($.isFunction(this.opts.width)) {\n                    return this.opts.width();\n                } else {\n                    return this.opts.width;\n               }\n            };\n\n            var width = resolveContainerWidth.call(this);\n            if (width !== null) {\n                this.container.css(\"width\", width);\n            }\n        }\n    });\n\n    SingleSelect2 = clazz(AbstractSelect2, {\n\n        // single\n\n        createContainer: function () {\n            var container = $(document.createElement(\"div\")).attr({\n                \"class\": \"select2-container\"\n            }).html([\n                \"<a href='javascript:void(0)' class='select2-choice' tabindex='-1'>\",\n                \"   <span class='select2-chosen'>&#160;</span><abbr class='select2-search-choice-close'></abbr>\",\n                \"   <span class='select2-arrow' role='presentation'><b role='presentation'></b></span>\",\n                \"</a>\",\n                \"<label for='' class='select2-offscreen'></label>\",\n                \"<input class='select2-focusser select2-offscreen' type='text' aria-haspopup='true' role='button' />\",\n                \"<div class='select2-drop select2-display-none'>\",\n                \"   <div class='select2-search'>\",\n                \"       <label for='' class='select2-offscreen'></label>\",\n                \"       <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input' role='combobox' aria-expanded='true'\",\n                \"       aria-autocomplete='list' />\",\n                \"   </div>\",\n                \"   <ul class='select2-results' role='listbox'>\",\n                \"   </ul>\",\n                \"</div>\"].join(\"\"));\n            return container;\n        },\n\n        // single\n        enableInterface: function() {\n            if (this.parent.enableInterface.apply(this, arguments)) {\n                this.focusser.prop(\"disabled\", !this.isInterfaceEnabled());\n            }\n        },\n\n        // single\n        opening: function () {\n            var el, range, len;\n\n            if (this.opts.minimumResultsForSearch >= 0) {\n                this.showSearch(true);\n            }\n\n            this.parent.opening.apply(this, arguments);\n\n            if (this.showSearchInput !== false) {\n                // IE appends focusser.val() at the end of field :/ so we manually insert it at the beginning using a range\n                // all other browsers handle this just fine\n\n                this.search.val(this.focusser.val());\n            }\n            if (this.opts.shouldFocusInput(this)) {\n                this.search.focus();\n                // move the cursor to the end after focussing, otherwise it will be at the beginning and\n                // new text will appear *before* focusser.val()\n                el = this.search.get(0);\n                if (el.createTextRange) {\n                    range = el.createTextRange();\n                    range.collapse(false);\n                    range.select();\n                } else if (el.setSelectionRange) {\n                    len = this.search.val().length;\n                    el.setSelectionRange(len, len);\n                }\n            }\n\n            // initializes search's value with nextSearchTerm (if defined by user)\n            // ignore nextSearchTerm if the dropdown is opened by the user pressing a letter\n            if(this.search.val() === \"\") {\n                if(this.nextSearchTerm != undefined){\n                    this.search.val(this.nextSearchTerm);\n                    this.search.select();\n                }\n            }\n\n            this.focusser.prop(\"disabled\", true).val(\"\");\n            this.updateResults(true);\n            this.opts.element.trigger($.Event(\"select2-open\"));\n        },\n\n        // single\n        close: function () {\n            if (!this.opened()) return;\n            this.parent.close.apply(this, arguments);\n\n            this.focusser.prop(\"disabled\", false);\n\n            if (this.opts.shouldFocusInput(this)) {\n                this.focusser.focus();\n            }\n        },\n\n        // single\n        focus: function () {\n            if (this.opened()) {\n                this.close();\n            } else {\n                this.focusser.prop(\"disabled\", false);\n                if (this.opts.shouldFocusInput(this)) {\n                    this.focusser.focus();\n                }\n            }\n        },\n\n        // single\n        isFocused: function () {\n            return this.container.hasClass(\"select2-container-active\");\n        },\n\n        // single\n        cancel: function () {\n            this.parent.cancel.apply(this, arguments);\n            this.focusser.prop(\"disabled\", false);\n\n            if (this.opts.shouldFocusInput(this)) {\n                this.focusser.focus();\n            }\n        },\n\n        // single\n        destroy: function() {\n            $(\"label[for='\" + this.focusser.attr('id') + \"']\")\n                .attr('for', this.opts.element.attr(\"id\"));\n            this.parent.destroy.apply(this, arguments);\n\n            cleanupJQueryElements.call(this,\n                \"selection\",\n                \"focusser\"\n            );\n        },\n\n        // single\n        initContainer: function () {\n\n            var selection,\n                container = this.container,\n                dropdown = this.dropdown,\n                idSuffix = nextUid(),\n                elementLabel;\n\n            if (this.opts.minimumResultsForSearch < 0) {\n                this.showSearch(false);\n            } else {\n                this.showSearch(true);\n            }\n\n            this.selection = selection = container.find(\".select2-choice\");\n\n            this.focusser = container.find(\".select2-focusser\");\n\n            // add aria associations\n            selection.find(\".select2-chosen\").attr(\"id\", \"select2-chosen-\"+idSuffix);\n            this.focusser.attr(\"aria-labelledby\", \"select2-chosen-\"+idSuffix);\n            this.results.attr(\"id\", \"select2-results-\"+idSuffix);\n            this.search.attr(\"aria-owns\", \"select2-results-\"+idSuffix);\n\n            // rewrite labels from original element to focusser\n            this.focusser.attr(\"id\", \"s2id_autogen\"+idSuffix);\n\n            elementLabel = $(\"label[for='\" + this.opts.element.attr(\"id\") + \"']\");\n\n            this.focusser.prev()\n                .text(elementLabel.text())\n                .attr('for', this.focusser.attr('id'));\n\n            // Ensure the original element retains an accessible name\n            var originalTitle = this.opts.element.attr(\"title\");\n            this.opts.element.attr(\"title\", (originalTitle || elementLabel.text()));\n\n            this.focusser.attr(\"tabindex\", this.elementTabIndex);\n\n            // write label for search field using the label from the focusser element\n            this.search.attr(\"id\", this.focusser.attr('id') + '_search');\n\n            this.search.prev()\n                .text($(\"label[for='\" + this.focusser.attr('id') + \"']\").text())\n                .attr('for', this.search.attr('id'));\n\n            this.search.on(\"keydown\", this.bind(function (e) {\n                if (!this.isInterfaceEnabled()) return;\n\n                // filter 229 keyCodes (input method editor is processing key input)\n                if (229 == e.keyCode) return;\n\n                if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) {\n                    // prevent the page from scrolling\n                    killEvent(e);\n                    return;\n                }\n\n                switch (e.which) {\n                    case KEY.UP:\n                    case KEY.DOWN:\n                        this.moveHighlight((e.which === KEY.UP) ? -1 : 1);\n                        killEvent(e);\n                        return;\n                    case KEY.ENTER:\n                        this.selectHighlighted();\n                        killEvent(e);\n                        return;\n                    case KEY.TAB:\n                        this.selectHighlighted({noFocus: true});\n                        return;\n                    case KEY.ESC:\n                        this.cancel(e);\n                        killEvent(e);\n                        return;\n                }\n            }));\n\n            this.search.on(\"blur\", this.bind(function(e) {\n                // a workaround for chrome to keep the search field focussed when the scroll bar is used to scroll the dropdown.\n                // without this the search field loses focus which is annoying\n                if (document.activeElement === this.body.get(0)) {\n                    window.setTimeout(this.bind(function() {\n                        if (this.opened()) {\n                            this.search.focus();\n                        }\n                    }), 0);\n                }\n            }));\n\n            this.focusser.on(\"keydown\", this.bind(function (e) {\n                if (!this.isInterfaceEnabled()) return;\n\n                if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) || e.which === KEY.ESC) {\n                    return;\n                }\n\n                if (this.opts.openOnEnter === false && e.which === KEY.ENTER) {\n                    killEvent(e);\n                    return;\n                }\n\n                if (e.which == KEY.DOWN || e.which == KEY.UP\n                    || (e.which == KEY.ENTER && this.opts.openOnEnter)) {\n\n                    if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) return;\n\n                    this.open();\n                    killEvent(e);\n                    return;\n                }\n\n                if (e.which == KEY.DELETE || e.which == KEY.BACKSPACE) {\n                    if (this.opts.allowClear) {\n                        this.clear();\n                    }\n                    killEvent(e);\n                    return;\n                }\n            }));\n\n\n            installKeyUpChangeEvent(this.focusser);\n            this.focusser.on(\"keyup-change input\", this.bind(function(e) {\n                if (this.opts.minimumResultsForSearch >= 0) {\n                    e.stopPropagation();\n                    if (this.opened()) return;\n                    this.open();\n                }\n            }));\n\n            selection.on(\"mousedown touchstart\", \"abbr\", this.bind(function (e) {\n                if (!this.isInterfaceEnabled()) return;\n                this.clear();\n                killEventImmediately(e);\n                this.close();\n                this.selection.focus();\n            }));\n\n            selection.on(\"mousedown touchstart\", this.bind(function (e) {\n                // Prevent IE from generating a click event on the body\n                reinsertElement(selection);\n\n                if (!this.container.hasClass(\"select2-container-active\")) {\n                    this.opts.element.trigger($.Event(\"select2-focus\"));\n                }\n\n                if (this.opened()) {\n                    this.close();\n                } else if (this.isInterfaceEnabled()) {\n                    this.open();\n                }\n\n                killEvent(e);\n            }));\n\n            dropdown.on(\"mousedown touchstart\", this.bind(function() {\n                if (this.opts.shouldFocusInput(this)) {\n                    this.search.focus();\n                }\n            }));\n\n            selection.on(\"focus\", this.bind(function(e) {\n                killEvent(e);\n            }));\n\n            this.focusser.on(\"focus\", this.bind(function(){\n                if (!this.container.hasClass(\"select2-container-active\")) {\n                    this.opts.element.trigger($.Event(\"select2-focus\"));\n                }\n                this.container.addClass(\"select2-container-active\");\n            })).on(\"blur\", this.bind(function() {\n                if (!this.opened()) {\n                    this.container.removeClass(\"select2-container-active\");\n                    this.opts.element.trigger($.Event(\"select2-blur\"));\n                }\n            }));\n            this.search.on(\"focus\", this.bind(function(){\n                if (!this.container.hasClass(\"select2-container-active\")) {\n                    this.opts.element.trigger($.Event(\"select2-focus\"));\n                }\n                this.container.addClass(\"select2-container-active\");\n            }));\n\n            this.initContainerWidth();\n            this.opts.element.addClass(\"select2-offscreen\");\n            this.setPlaceholder();\n\n        },\n\n        // single\n        clear: function(triggerChange) {\n            var data=this.selection.data(\"select2-data\");\n            if (data) { // guard against queued quick consecutive clicks\n                var evt = $.Event(\"select2-clearing\");\n                this.opts.element.trigger(evt);\n                if (evt.isDefaultPrevented()) {\n                    return;\n                }\n                var placeholderOption = this.getPlaceholderOption();\n                this.opts.element.val(placeholderOption ? placeholderOption.val() : \"\");\n                this.selection.find(\".select2-chosen\").empty();\n                this.selection.removeData(\"select2-data\");\n                this.setPlaceholder();\n\n                if (triggerChange !== false){\n                    this.opts.element.trigger({ type: \"select2-removed\", val: this.id(data), choice: data });\n                    this.triggerChange({removed:data});\n                }\n            }\n        },\n\n        /**\n         * Sets selection based on source element's value\n         */\n        // single\n        initSelection: function () {\n            var selected;\n            if (this.isPlaceholderOptionSelected()) {\n                this.updateSelection(null);\n                this.close();\n                this.setPlaceholder();\n            } else {\n                var self = this;\n                this.opts.initSelection.call(null, this.opts.element, function(selected){\n                    if (selected !== undefined && selected !== null) {\n                        self.updateSelection(selected);\n                        self.close();\n                        self.setPlaceholder();\n                        self.nextSearchTerm = self.opts.nextSearchTerm(selected, self.search.val());\n                    }\n                });\n            }\n        },\n\n        isPlaceholderOptionSelected: function() {\n            var placeholderOption;\n            if (this.getPlaceholder() === undefined) return false; // no placeholder specified so no option should be considered\n            return ((placeholderOption = this.getPlaceholderOption()) !== undefined && placeholderOption.prop(\"selected\"))\n                || (this.opts.element.val() === \"\")\n                || (this.opts.element.val() === undefined)\n                || (this.opts.element.val() === null);\n        },\n\n        // single\n        prepareOpts: function () {\n            var opts = this.parent.prepareOpts.apply(this, arguments),\n                self=this;\n\n            if (opts.element.get(0).tagName.toLowerCase() === \"select\") {\n                // install the selection initializer\n                opts.initSelection = function (element, callback) {\n                    var selected = element.find(\"option\").filter(function() { return this.selected && !this.disabled });\n                    // a single select box always has a value, no need to null check 'selected'\n                    callback(self.optionToData(selected));\n                };\n            } else if (\"data\" in opts) {\n                // install default initSelection when applied to hidden input and data is local\n                opts.initSelection = opts.initSelection || function (element, callback) {\n                    var id = element.val();\n                    //search in data by id, storing the actual matching item\n                    var match = null;\n                    opts.query({\n                        matcher: function(term, text, el){\n                            var is_match = equal(id, opts.id(el));\n                            if (is_match) {\n                                match = el;\n                            }\n                            return is_match;\n                        },\n                        callback: !$.isFunction(callback) ? $.noop : function() {\n                            callback(match);\n                        }\n                    });\n                };\n            }\n\n            return opts;\n        },\n\n        // single\n        getPlaceholder: function() {\n            // if a placeholder is specified on a single select without a valid placeholder option ignore it\n            if (this.select) {\n                if (this.getPlaceholderOption() === undefined) {\n                    return undefined;\n                }\n            }\n\n            return this.parent.getPlaceholder.apply(this, arguments);\n        },\n\n        // single\n        setPlaceholder: function () {\n            var placeholder = this.getPlaceholder();\n\n            if (this.isPlaceholderOptionSelected() && placeholder !== undefined) {\n\n                // check for a placeholder option if attached to a select\n                if (this.select && this.getPlaceholderOption() === undefined) return;\n\n                this.selection.find(\".select2-chosen\").html(this.opts.escapeMarkup(placeholder));\n\n                this.selection.addClass(\"select2-default\");\n\n                this.container.removeClass(\"select2-allowclear\");\n            }\n        },\n\n        // single\n        postprocessResults: function (data, initial, noHighlightUpdate) {\n            var selected = 0, self = this, showSearchInput = true;\n\n            // find the selected element in the result list\n\n            this.findHighlightableChoices().each2(function (i, elm) {\n                if (equal(self.id(elm.data(\"select2-data\")), self.opts.element.val())) {\n                    selected = i;\n                    return false;\n                }\n            });\n\n            // and highlight it\n            if (noHighlightUpdate !== false) {\n                if (initial === true && selected >= 0) {\n                    this.highlight(selected);\n                } else {\n                    this.highlight(0);\n                }\n            }\n\n            // hide the search box if this is the first we got the results and there are enough of them for search\n\n            if (initial === true) {\n                var min = this.opts.minimumResultsForSearch;\n                if (min >= 0) {\n                    this.showSearch(countResults(data.results) >= min);\n                }\n            }\n        },\n\n        // single\n        showSearch: function(showSearchInput) {\n            if (this.showSearchInput === showSearchInput) return;\n\n            this.showSearchInput = showSearchInput;\n\n            this.dropdown.find(\".select2-search\").toggleClass(\"select2-search-hidden\", !showSearchInput);\n            this.dropdown.find(\".select2-search\").toggleClass(\"select2-offscreen\", !showSearchInput);\n            //add \"select2-with-searchbox\" to the container if search box is shown\n            $(this.dropdown, this.container).toggleClass(\"select2-with-searchbox\", showSearchInput);\n        },\n\n        // single\n        onSelect: function (data, options) {\n\n            if (!this.triggerSelect(data)) { return; }\n\n            var old = this.opts.element.val(),\n                oldData = this.data();\n\n            this.opts.element.val(this.id(data));\n            this.updateSelection(data);\n\n            this.opts.element.trigger({ type: \"select2-selected\", val: this.id(data), choice: data });\n\n            this.nextSearchTerm = this.opts.nextSearchTerm(data, this.search.val());\n            this.close();\n\n            if ((!options || !options.noFocus) && this.opts.shouldFocusInput(this)) {\n                this.focusser.focus();\n            }\n\n            if (!equal(old, this.id(data))) {\n                this.triggerChange({ added: data, removed: oldData });\n            }\n        },\n\n        // single\n        updateSelection: function (data) {\n\n            var container=this.selection.find(\".select2-chosen\"), formatted, cssClass;\n\n            this.selection.data(\"select2-data\", data);\n\n            container.empty();\n            if (data !== null) {\n                formatted=this.opts.formatSelection(data, container, this.opts.escapeMarkup);\n            }\n            if (formatted !== undefined) {\n                container.append(formatted);\n            }\n            cssClass=this.opts.formatSelectionCssClass(data, container);\n            if (cssClass !== undefined) {\n                container.addClass(cssClass);\n            }\n\n            this.selection.removeClass(\"select2-default\");\n\n            if (this.opts.allowClear && this.getPlaceholder() !== undefined) {\n                this.container.addClass(\"select2-allowclear\");\n            }\n        },\n\n        // single\n        val: function () {\n            var val,\n                triggerChange = false,\n                data = null,\n                self = this,\n                oldData = this.data();\n\n            if (arguments.length === 0) {\n                return this.opts.element.val();\n            }\n\n            val = arguments[0];\n\n            if (arguments.length > 1) {\n                triggerChange = arguments[1];\n            }\n\n            if (this.select) {\n                this.select\n                    .val(val)\n                    .find(\"option\").filter(function() { return this.selected }).each2(function (i, elm) {\n                        data = self.optionToData(elm);\n                        return false;\n                    });\n                this.updateSelection(data);\n                this.setPlaceholder();\n                if (triggerChange) {\n                    this.triggerChange({added: data, removed:oldData});\n                }\n            } else {\n                // val is an id. !val is true for [undefined,null,'',0] - 0 is legal\n                if (!val && val !== 0) {\n                    this.clear(triggerChange);\n                    return;\n                }\n                if (this.opts.initSelection === undefined) {\n                    throw new Error(\"cannot call val() if initSelection() is not defined\");\n                }\n                this.opts.element.val(val);\n                this.opts.initSelection(this.opts.element, function(data){\n                    self.opts.element.val(!data ? \"\" : self.id(data));\n                    self.updateSelection(data);\n                    self.setPlaceholder();\n                    if (triggerChange) {\n                        self.triggerChange({added: data, removed:oldData});\n                    }\n                });\n            }\n        },\n\n        // single\n        clearSearch: function () {\n            this.search.val(\"\");\n            this.focusser.val(\"\");\n        },\n\n        // single\n        data: function(value) {\n            var data,\n                triggerChange = false;\n\n            if (arguments.length === 0) {\n                data = this.selection.data(\"select2-data\");\n                if (data == undefined) data = null;\n                return data;\n            } else {\n                if (arguments.length > 1) {\n                    triggerChange = arguments[1];\n                }\n                if (!value) {\n                    this.clear(triggerChange);\n                } else {\n                    data = this.data();\n                    this.opts.element.val(!value ? \"\" : this.id(value));\n                    this.updateSelection(value);\n                    if (triggerChange) {\n                        this.triggerChange({added: value, removed:data});\n                    }\n                }\n            }\n        }\n    });\n\n    MultiSelect2 = clazz(AbstractSelect2, {\n\n        // multi\n        createContainer: function () {\n            var container = $(document.createElement(\"div\")).attr({\n                \"class\": \"select2-container select2-container-multi\"\n            }).html([\n                \"<ul class='select2-choices'>\",\n                \"  <li class='select2-search-field'>\",\n                \"    <label for='' class='select2-offscreen'></label>\",\n                \"    <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input'>\",\n                \"  </li>\",\n                \"</ul>\",\n                \"<div class='select2-drop select2-drop-multi select2-display-none'>\",\n                \"   <ul class='select2-results'>\",\n                \"   </ul>\",\n                \"</div>\"].join(\"\"));\n            return container;\n        },\n\n        // multi\n        prepareOpts: function () {\n            var opts = this.parent.prepareOpts.apply(this, arguments),\n                self=this;\n\n            // TODO validate placeholder is a string if specified\n\n            if (opts.element.get(0).tagName.toLowerCase() === \"select\") {\n                // install the selection initializer\n                opts.initSelection = function (element, callback) {\n\n                    var data = [];\n\n                    element.find(\"option\").filter(function() { return this.selected && !this.disabled }).each2(function (i, elm) {\n                        data.push(self.optionToData(elm));\n                    });\n                    callback(data);\n                };\n            } else if (\"data\" in opts) {\n                // install default initSelection when applied to hidden input and data is local\n                opts.initSelection = opts.initSelection || function (element, callback) {\n                    var ids = splitVal(element.val(), opts.separator);\n                    //search in data by array of ids, storing matching items in a list\n                    var matches = [];\n                    opts.query({\n                        matcher: function(term, text, el){\n                            var is_match = $.grep(ids, function(id) {\n                                return equal(id, opts.id(el));\n                            }).length;\n                            if (is_match) {\n                                matches.push(el);\n                            }\n                            return is_match;\n                        },\n                        callback: !$.isFunction(callback) ? $.noop : function() {\n                            // reorder matches based on the order they appear in the ids array because right now\n                            // they are in the order in which they appear in data array\n                            var ordered = [];\n                            for (var i = 0; i < ids.length; i++) {\n                                var id = ids[i];\n                                for (var j = 0; j < matches.length; j++) {\n                                    var match = matches[j];\n                                    if (equal(id, opts.id(match))) {\n                                        ordered.push(match);\n                                        matches.splice(j, 1);\n                                        break;\n                                    }\n                                }\n                            }\n                            callback(ordered);\n                        }\n                    });\n                };\n            }\n\n            return opts;\n        },\n\n        // multi\n        selectChoice: function (choice) {\n\n            var selected = this.container.find(\".select2-search-choice-focus\");\n            if (selected.length && choice && choice[0] == selected[0]) {\n\n            } else {\n                if (selected.length) {\n                    this.opts.element.trigger(\"choice-deselected\", selected);\n                }\n                selected.removeClass(\"select2-search-choice-focus\");\n                if (choice && choice.length) {\n                    this.close();\n                    choice.addClass(\"select2-search-choice-focus\");\n                    this.opts.element.trigger(\"choice-selected\", choice);\n                }\n            }\n        },\n\n        // multi\n        destroy: function() {\n            $(\"label[for='\" + this.search.attr('id') + \"']\")\n                .attr('for', this.opts.element.attr(\"id\"));\n            this.parent.destroy.apply(this, arguments);\n\n            cleanupJQueryElements.call(this,\n                \"searchContainer\",\n                \"selection\"\n            );\n        },\n\n        // multi\n        initContainer: function () {\n\n            var selector = \".select2-choices\", selection;\n\n            this.searchContainer = this.container.find(\".select2-search-field\");\n            this.selection = selection = this.container.find(selector);\n\n            var _this = this;\n            this.selection.on(\"click\", \".select2-search-choice:not(.select2-locked)\", function (e) {\n                //killEvent(e);\n                _this.search[0].focus();\n                _this.selectChoice($(this));\n            });\n\n            // rewrite labels from original element to focusser\n            this.search.attr(\"id\", \"s2id_autogen\"+nextUid());\n\n            this.search.prev()\n                .text($(\"label[for='\" + this.opts.element.attr(\"id\") + \"']\").text())\n                .attr('for', this.search.attr('id'));\n\n            this.search.on(\"input paste\", this.bind(function() {\n                if (this.search.attr('placeholder') && this.search.val().length == 0) return;\n                if (!this.isInterfaceEnabled()) return;\n                if (!this.opened()) {\n                    this.open();\n                }\n            }));\n\n            this.search.attr(\"tabindex\", this.elementTabIndex);\n\n            this.keydowns = 0;\n            this.search.on(\"keydown\", this.bind(function (e) {\n                if (!this.isInterfaceEnabled()) return;\n\n                ++this.keydowns;\n                var selected = selection.find(\".select2-search-choice-focus\");\n                var prev = selected.prev(\".select2-search-choice:not(.select2-locked)\");\n                var next = selected.next(\".select2-search-choice:not(.select2-locked)\");\n                var pos = getCursorInfo(this.search);\n\n                if (selected.length &&\n                    (e.which == KEY.LEFT || e.which == KEY.RIGHT || e.which == KEY.BACKSPACE || e.which == KEY.DELETE || e.which == KEY.ENTER)) {\n                    var selectedChoice = selected;\n                    if (e.which == KEY.LEFT && prev.length) {\n                        selectedChoice = prev;\n                    }\n                    else if (e.which == KEY.RIGHT) {\n                        selectedChoice = next.length ? next : null;\n                    }\n                    else if (e.which === KEY.BACKSPACE) {\n                        if (this.unselect(selected.first())) {\n                            this.search.width(10);\n                            selectedChoice = prev.length ? prev : next;\n                        }\n                    } else if (e.which == KEY.DELETE) {\n                        if (this.unselect(selected.first())) {\n                            this.search.width(10);\n                            selectedChoice = next.length ? next : null;\n                        }\n                    } else if (e.which == KEY.ENTER) {\n                        selectedChoice = null;\n                    }\n\n                    this.selectChoice(selectedChoice);\n                    killEvent(e);\n                    if (!selectedChoice || !selectedChoice.length) {\n                        this.open();\n                    }\n                    return;\n                } else if (((e.which === KEY.BACKSPACE && this.keydowns == 1)\n                    || e.which == KEY.LEFT) && (pos.offset == 0 && !pos.length)) {\n\n                    this.selectChoice(selection.find(\".select2-search-choice:not(.select2-locked)\").last());\n                    killEvent(e);\n                    return;\n                } else {\n                    this.selectChoice(null);\n                }\n\n                if (this.opened()) {\n                    switch (e.which) {\n                    case KEY.UP:\n                    case KEY.DOWN:\n                        this.moveHighlight((e.which === KEY.UP) ? -1 : 1);\n                        killEvent(e);\n                        return;\n                    case KEY.ENTER:\n                        this.selectHighlighted();\n                        killEvent(e);\n                        return;\n                    case KEY.TAB:\n                        this.selectHighlighted({noFocus:true});\n                        this.close();\n                        return;\n                    case KEY.ESC:\n                        this.cancel(e);\n                        killEvent(e);\n                        return;\n                    }\n                }\n\n                if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e)\n                 || e.which === KEY.BACKSPACE || e.which === KEY.ESC) {\n                    return;\n                }\n\n                if (e.which === KEY.ENTER) {\n                    if (this.opts.openOnEnter === false) {\n                        return;\n                    } else if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) {\n                        return;\n                    }\n                }\n\n                this.open();\n\n                if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) {\n                    // prevent the page from scrolling\n                    killEvent(e);\n                }\n\n                if (e.which === KEY.ENTER) {\n                    // prevent form from being submitted\n                    killEvent(e);\n                }\n\n            }));\n\n            this.search.on(\"keyup\", this.bind(function (e) {\n                this.keydowns = 0;\n                this.resizeSearch();\n            })\n            );\n\n            this.search.on(\"blur\", this.bind(function(e) {\n                this.container.removeClass(\"select2-container-active\");\n                this.search.removeClass(\"select2-focused\");\n                this.selectChoice(null);\n                if (!this.opened()) this.clearSearch();\n                e.stopImmediatePropagation();\n                this.opts.element.trigger($.Event(\"select2-blur\"));\n            }));\n\n            this.container.on(\"click\", selector, this.bind(function (e) {\n                if (!this.isInterfaceEnabled()) return;\n                if ($(e.target).closest(\".select2-search-choice\").length > 0) {\n                    // clicked inside a select2 search choice, do not open\n                    return;\n                }\n                this.selectChoice(null);\n                this.clearPlaceholder();\n                if (!this.container.hasClass(\"select2-container-active\")) {\n                    this.opts.element.trigger($.Event(\"select2-focus\"));\n                }\n                this.open();\n                this.focusSearch();\n                e.preventDefault();\n            }));\n\n            this.container.on(\"focus\", selector, this.bind(function () {\n                if (!this.isInterfaceEnabled()) return;\n                if (!this.container.hasClass(\"select2-container-active\")) {\n                    this.opts.element.trigger($.Event(\"select2-focus\"));\n                }\n                this.container.addClass(\"select2-container-active\");\n                this.dropdown.addClass(\"select2-drop-active\");\n                this.clearPlaceholder();\n            }));\n\n            this.initContainerWidth();\n            this.opts.element.addClass(\"select2-offscreen\");\n\n            // set the placeholder if necessary\n            this.clearSearch();\n        },\n\n        // multi\n        enableInterface: function() {\n            if (this.parent.enableInterface.apply(this, arguments)) {\n                this.search.prop(\"disabled\", !this.isInterfaceEnabled());\n            }\n        },\n\n        // multi\n        initSelection: function () {\n            var data;\n            if (this.opts.element.val() === \"\" && this.opts.element.text() === \"\") {\n                this.updateSelection([]);\n                this.close();\n                // set the placeholder if necessary\n                this.clearSearch();\n            }\n            if (this.select || this.opts.element.val() !== \"\") {\n                var self = this;\n                this.opts.initSelection.call(null, this.opts.element, function(data){\n                    if (data !== undefined && data !== null) {\n                        self.updateSelection(data);\n                        self.close();\n                        // set the placeholder if necessary\n                        self.clearSearch();\n                    }\n                });\n            }\n        },\n\n        // multi\n        clearSearch: function () {\n            var placeholder = this.getPlaceholder(),\n                maxWidth = this.getMaxSearchWidth();\n\n            if (placeholder !== undefined  && this.getVal().length === 0 && this.search.hasClass(\"select2-focused\") === false) {\n                this.search.val(placeholder).addClass(\"select2-default\");\n                // stretch the search box to full width of the container so as much of the placeholder is visible as possible\n                // we could call this.resizeSearch(), but we do not because that requires a sizer and we do not want to create one so early because of a firefox bug, see #944\n                this.search.width(maxWidth > 0 ? maxWidth : this.container.css(\"width\"));\n            } else {\n                this.search.val(\"\").width(10);\n            }\n        },\n\n        // multi\n        clearPlaceholder: function () {\n            if (this.search.hasClass(\"select2-default\")) {\n                this.search.val(\"\").removeClass(\"select2-default\");\n            }\n        },\n\n        // multi\n        opening: function () {\n            this.clearPlaceholder(); // should be done before super so placeholder is not used to search\n            this.resizeSearch();\n\n            this.parent.opening.apply(this, arguments);\n\n            this.focusSearch();\n\n            // initializes search's value with nextSearchTerm (if defined by user)\n            // ignore nextSearchTerm if the dropdown is opened by the user pressing a letter\n            if(this.search.val() === \"\") {\n                if(this.nextSearchTerm != undefined){\n                    this.search.val(this.nextSearchTerm);\n                    this.search.select();\n                }\n            }\n\n            this.updateResults(true);\n            if (this.opts.shouldFocusInput(this)) {\n                this.search.focus();\n            }\n            this.opts.element.trigger($.Event(\"select2-open\"));\n        },\n\n        // multi\n        close: function () {\n            if (!this.opened()) return;\n            this.parent.close.apply(this, arguments);\n        },\n\n        // multi\n        focus: function () {\n            this.close();\n            this.search.focus();\n        },\n\n        // multi\n        isFocused: function () {\n            return this.search.hasClass(\"select2-focused\");\n        },\n\n        // multi\n        updateSelection: function (data) {\n            var ids = [], filtered = [], self = this;\n\n            // filter out duplicates\n            $(data).each(function () {\n                if (indexOf(self.id(this), ids) < 0) {\n                    ids.push(self.id(this));\n                    filtered.push(this);\n                }\n            });\n            data = filtered;\n\n            this.selection.find(\".select2-search-choice\").remove();\n            $(data).each(function () {\n                self.addSelectedChoice(this);\n            });\n            self.postprocessResults();\n        },\n\n        // multi\n        tokenize: function() {\n            var input = this.search.val();\n            input = this.opts.tokenizer.call(this, input, this.data(), this.bind(this.onSelect), this.opts);\n            if (input != null && input != undefined) {\n                this.search.val(input);\n                if (input.length > 0) {\n                    this.open();\n                }\n            }\n\n        },\n\n        // multi\n        onSelect: function (data, options) {\n\n            if (!this.triggerSelect(data) || data.text === \"\") { return; }\n\n            this.addSelectedChoice(data);\n\n            this.opts.element.trigger({ type: \"selected\", val: this.id(data), choice: data });\n\n            // keep track of the search's value before it gets cleared\n            this.nextSearchTerm = this.opts.nextSearchTerm(data, this.search.val());\n\n            this.clearSearch();\n            this.updateResults();\n\n            if (this.select || !this.opts.closeOnSelect) this.postprocessResults(data, false, this.opts.closeOnSelect===true);\n\n            if (this.opts.closeOnSelect) {\n                this.close();\n                this.search.width(10);\n            } else {\n                if (this.countSelectableResults()>0) {\n                    this.search.width(10);\n                    this.resizeSearch();\n                    if (this.getMaximumSelectionSize() > 0 && this.val().length >= this.getMaximumSelectionSize()) {\n                        // if we reached max selection size repaint the results so choices\n                        // are replaced with the max selection reached message\n                        this.updateResults(true);\n                    } else {\n                        // initializes search's value with nextSearchTerm and update search result\n                        if(this.nextSearchTerm != undefined){\n                            this.search.val(this.nextSearchTerm);\n                            this.updateResults();\n                            this.search.select();\n                        }\n                    }\n                    this.positionDropdown();\n                } else {\n                    // if nothing left to select close\n                    this.close();\n                    this.search.width(10);\n                }\n            }\n\n            // since its not possible to select an element that has already been\n            // added we do not need to check if this is a new element before firing change\n            this.triggerChange({ added: data });\n\n            if (!options || !options.noFocus)\n                this.focusSearch();\n        },\n\n        // multi\n        cancel: function () {\n            this.close();\n            this.focusSearch();\n        },\n\n        addSelectedChoice: function (data) {\n            var enableChoice = !data.locked,\n                enabledItem = $(\n                    \"<li class='select2-search-choice'>\" +\n                    \"    <div></div>\" +\n                    \"    <a href='#' class='select2-search-choice-close' tabindex='-1'></a>\" +\n                    \"</li>\"),\n                disabledItem = $(\n                    \"<li class='select2-search-choice select2-locked'>\" +\n                    \"<div></div>\" +\n                    \"</li>\");\n            var choice = enableChoice ? enabledItem : disabledItem,\n                id = this.id(data),\n                val = this.getVal(),\n                formatted,\n                cssClass;\n\n            formatted=this.opts.formatSelection(data, choice.find(\"div\"), this.opts.escapeMarkup);\n            if (formatted != undefined) {\n                choice.find(\"div\").replaceWith(\"<div>\"+formatted+\"</div>\");\n            }\n            cssClass=this.opts.formatSelectionCssClass(data, choice.find(\"div\"));\n            if (cssClass != undefined) {\n                choice.addClass(cssClass);\n            }\n\n            if(enableChoice){\n              choice.find(\".select2-search-choice-close\")\n                  .on(\"mousedown\", killEvent)\n                  .on(\"click dblclick\", this.bind(function (e) {\n                  if (!this.isInterfaceEnabled()) return;\n\n                  this.unselect($(e.target));\n                  this.selection.find(\".select2-search-choice-focus\").removeClass(\"select2-search-choice-focus\");\n                  killEvent(e);\n                  this.close();\n                  this.focusSearch();\n              })).on(\"focus\", this.bind(function () {\n                  if (!this.isInterfaceEnabled()) return;\n                  this.container.addClass(\"select2-container-active\");\n                  this.dropdown.addClass(\"select2-drop-active\");\n              }));\n            }\n\n            choice.data(\"select2-data\", data);\n            choice.insertBefore(this.searchContainer);\n\n            val.push(id);\n            this.setVal(val);\n        },\n\n        // multi\n        unselect: function (selected) {\n            var val = this.getVal(),\n                data,\n                index;\n            selected = selected.closest(\".select2-search-choice\");\n\n            if (selected.length === 0) {\n                throw \"Invalid argument: \" + selected + \". Must be .select2-search-choice\";\n            }\n\n            data = selected.data(\"select2-data\");\n\n            if (!data) {\n                // prevent a race condition when the 'x' is clicked really fast repeatedly the event can be queued\n                // and invoked on an element already removed\n                return;\n            }\n\n            var evt = $.Event(\"select2-removing\");\n            evt.val = this.id(data);\n            evt.choice = data;\n            this.opts.element.trigger(evt);\n\n            if (evt.isDefaultPrevented()) {\n                return false;\n            }\n\n            while((index = indexOf(this.id(data), val)) >= 0) {\n                val.splice(index, 1);\n                this.setVal(val);\n                if (this.select) this.postprocessResults();\n            }\n\n            selected.remove();\n\n            this.opts.element.trigger({ type: \"select2-removed\", val: this.id(data), choice: data });\n            this.triggerChange({ removed: data });\n\n            return true;\n        },\n\n        // multi\n        postprocessResults: function (data, initial, noHighlightUpdate) {\n            var val = this.getVal(),\n                choices = this.results.find(\".select2-result\"),\n                compound = this.results.find(\".select2-result-with-children\"),\n                self = this;\n\n            choices.each2(function (i, choice) {\n                var id = self.id(choice.data(\"select2-data\"));\n                if (indexOf(id, val) >= 0) {\n                    choice.addClass(\"select2-selected\");\n                    // mark all children of the selected parent as selected\n                    choice.find(\".select2-result-selectable\").addClass(\"select2-selected\");\n                }\n            });\n\n            compound.each2(function(i, choice) {\n                // hide an optgroup if it doesn't have any selectable children\n                if (!choice.is('.select2-result-selectable')\n                    && choice.find(\".select2-result-selectable:not(.select2-selected)\").length === 0) {\n                    choice.addClass(\"select2-selected\");\n                }\n            });\n\n            if (this.highlight() == -1 && noHighlightUpdate !== false){\n                self.highlight(0);\n            }\n\n            //If all results are chosen render formatNoMatches\n            if(!this.opts.createSearchChoice && !choices.filter('.select2-result:not(.select2-selected)').length > 0){\n                if(!data || data && !data.more && this.results.find(\".select2-no-results\").length === 0) {\n                    if (checkFormatter(self.opts.formatNoMatches, \"formatNoMatches\")) {\n                        this.results.append(\"<li class='select2-no-results'>\" + evaluate(self.opts.formatNoMatches, self.opts.element, self.search.val()) + \"</li>\");\n                    }\n                }\n            }\n\n        },\n\n        // multi\n        getMaxSearchWidth: function() {\n            return this.selection.width() - getSideBorderPadding(this.search);\n        },\n\n        // multi\n        resizeSearch: function () {\n            var minimumWidth, left, maxWidth, containerLeft, searchWidth,\n                sideBorderPadding = getSideBorderPadding(this.search);\n\n            minimumWidth = measureTextWidth(this.search) + 10;\n\n            left = this.search.offset().left;\n\n            maxWidth = this.selection.width();\n            containerLeft = this.selection.offset().left;\n\n            searchWidth = maxWidth - (left - containerLeft) - sideBorderPadding;\n\n            if (searchWidth < minimumWidth) {\n                searchWidth = maxWidth - sideBorderPadding;\n            }\n\n            if (searchWidth < 40) {\n                searchWidth = maxWidth - sideBorderPadding;\n            }\n\n            if (searchWidth <= 0) {\n              searchWidth = minimumWidth;\n            }\n\n            this.search.width(Math.floor(searchWidth));\n        },\n\n        // multi\n        getVal: function () {\n            var val;\n            if (this.select) {\n                val = this.select.val();\n                return val === null ? [] : val;\n            } else {\n                val = this.opts.element.val();\n                return splitVal(val, this.opts.separator);\n            }\n        },\n\n        // multi\n        setVal: function (val) {\n            var unique;\n            if (this.select) {\n                this.select.val(val);\n            } else {\n                unique = [];\n                // filter out duplicates\n                $(val).each(function () {\n                    if (indexOf(this, unique) < 0) unique.push(this);\n                });\n                this.opts.element.val(unique.length === 0 ? \"\" : unique.join(this.opts.separator));\n            }\n        },\n\n        // multi\n        buildChangeDetails: function (old, current) {\n            var current = current.slice(0),\n                old = old.slice(0);\n\n            // remove intersection from each array\n            for (var i = 0; i < current.length; i++) {\n                for (var j = 0; j < old.length; j++) {\n                    if (equal(this.opts.id(current[i]), this.opts.id(old[j]))) {\n                        current.splice(i, 1);\n                        if(i>0){\n                        \ti--;\n                        }\n                        old.splice(j, 1);\n                        j--;\n                    }\n                }\n            }\n\n            return {added: current, removed: old};\n        },\n\n\n        // multi\n        val: function (val, triggerChange) {\n            var oldData, self=this;\n\n            if (arguments.length === 0) {\n                return this.getVal();\n            }\n\n            oldData=this.data();\n            if (!oldData.length) oldData=[];\n\n            // val is an id. !val is true for [undefined,null,'',0] - 0 is legal\n            if (!val && val !== 0) {\n                this.opts.element.val(\"\");\n                this.updateSelection([]);\n                this.clearSearch();\n                if (triggerChange) {\n                    this.triggerChange({added: this.data(), removed: oldData});\n                }\n                return;\n            }\n\n            // val is a list of ids\n            this.setVal(val);\n\n            if (this.select) {\n                this.opts.initSelection(this.select, this.bind(this.updateSelection));\n                if (triggerChange) {\n                    this.triggerChange(this.buildChangeDetails(oldData, this.data()));\n                }\n            } else {\n                if (this.opts.initSelection === undefined) {\n                    throw new Error(\"val() cannot be called if initSelection() is not defined\");\n                }\n\n                this.opts.initSelection(this.opts.element, function(data){\n                    var ids=$.map(data, self.id);\n                    self.setVal(ids);\n                    self.updateSelection(data);\n                    self.clearSearch();\n                    if (triggerChange) {\n                        self.triggerChange(self.buildChangeDetails(oldData, self.data()));\n                    }\n                });\n            }\n            this.clearSearch();\n        },\n\n        // multi\n        onSortStart: function() {\n            if (this.select) {\n                throw new Error(\"Sorting of elements is not supported when attached to <select>. Attach to <input type='hidden'/> instead.\");\n            }\n\n            // collapse search field into 0 width so its container can be collapsed as well\n            this.search.width(0);\n            // hide the container\n            this.searchContainer.hide();\n        },\n\n        // multi\n        onSortEnd:function() {\n\n            var val=[], self=this;\n\n            // show search and move it to the end of the list\n            this.searchContainer.show();\n            // make sure the search container is the last item in the list\n            this.searchContainer.appendTo(this.searchContainer.parent());\n            // since we collapsed the width in dragStarted, we resize it here\n            this.resizeSearch();\n\n            // update selection\n            this.selection.find(\".select2-search-choice\").each(function() {\n                val.push(self.opts.id($(this).data(\"select2-data\")));\n            });\n            this.setVal(val);\n            this.triggerChange();\n        },\n\n        // multi\n        data: function(values, triggerChange) {\n            var self=this, ids, old;\n            if (arguments.length === 0) {\n                 return this.selection\n                     .children(\".select2-search-choice\")\n                     .map(function() { return $(this).data(\"select2-data\"); })\n                     .get();\n            } else {\n                old = this.data();\n                if (!values) { values = []; }\n                ids = $.map(values, function(e) { return self.opts.id(e); });\n                this.setVal(ids);\n                this.updateSelection(values);\n                this.clearSearch();\n                if (triggerChange) {\n                    this.triggerChange(this.buildChangeDetails(old, this.data()));\n                }\n            }\n        }\n    });\n\n    $.fn.select2 = function () {\n\n        var args = Array.prototype.slice.call(arguments, 0),\n            opts,\n            select2,\n            method, value, multiple,\n            allowedMethods = [\"val\", \"destroy\", \"opened\", \"open\", \"close\", \"focus\", \"isFocused\", \"container\", \"dropdown\", \"onSortStart\", \"onSortEnd\", \"enable\", \"disable\", \"readonly\", \"positionDropdown\", \"data\", \"search\"],\n            valueMethods = [\"opened\", \"isFocused\", \"container\", \"dropdown\"],\n            propertyMethods = [\"val\", \"data\"],\n            methodsMap = { search: \"externalSearch\" };\n\n        this.each(function () {\n            if (args.length === 0 || typeof(args[0]) === \"object\") {\n                opts = args.length === 0 ? {} : $.extend({}, args[0]);\n                opts.element = $(this);\n\n                if (opts.element.get(0).tagName.toLowerCase() === \"select\") {\n                    multiple = opts.element.prop(\"multiple\");\n                } else {\n                    multiple = opts.multiple || false;\n                    if (\"tags\" in opts) {opts.multiple = multiple = true;}\n                }\n\n                select2 = multiple ? new window.Select2[\"class\"].multi() : new window.Select2[\"class\"].single();\n                select2.init(opts);\n            } else if (typeof(args[0]) === \"string\") {\n\n                if (indexOf(args[0], allowedMethods) < 0) {\n                    throw \"Unknown method: \" + args[0];\n                }\n\n                value = undefined;\n                select2 = $(this).data(\"select2\");\n                if (select2 === undefined) return;\n\n                method=args[0];\n\n                if (method === \"container\") {\n                    value = select2.container;\n                } else if (method === \"dropdown\") {\n                    value = select2.dropdown;\n                } else {\n                    if (methodsMap[method]) method = methodsMap[method];\n\n                    value = select2[method].apply(select2, args.slice(1));\n                }\n                if (indexOf(args[0], valueMethods) >= 0\n                    || (indexOf(args[0], propertyMethods) >= 0 && args.length == 1)) {\n                    return false; // abort the iteration, ready to return first matched value\n                }\n            } else {\n                throw \"Invalid arguments to select2 plugin: \" + args;\n            }\n        });\n        return (value === undefined) ? this : value;\n    };\n\n    // plugin defaults, accessible to users\n    $.fn.select2.defaults = {\n        width: \"copy\",\n        loadMorePadding: 0,\n        closeOnSelect: true,\n        openOnEnter: true,\n        containerCss: {},\n        dropdownCss: {},\n        containerCssClass: \"\",\n        dropdownCssClass: \"\",\n        formatResult: function(result, container, query, escapeMarkup) {\n            var markup=[];\n            markMatch(result.text, query.term, markup, escapeMarkup);\n            return markup.join(\"\");\n        },\n        formatSelection: function (data, container, escapeMarkup) {\n            return data ? escapeMarkup(data.text) : undefined;\n        },\n        sortResults: function (results, container, query) {\n            return results;\n        },\n        formatResultCssClass: function(data) {return data.css;},\n        formatSelectionCssClass: function(data, container) {return undefined;},\n        minimumResultsForSearch: 0,\n        minimumInputLength: 0,\n        maximumInputLength: null,\n        maximumSelectionSize: 0,\n        id: function (e) { return e == undefined ? null : e.id; },\n        matcher: function(term, text) {\n            return stripDiacritics(''+text).toUpperCase().indexOf(stripDiacritics(''+term).toUpperCase()) >= 0;\n        },\n        separator: \",\",\n        tokenSeparators: [],\n        tokenizer: defaultTokenizer,\n        escapeMarkup: defaultEscapeMarkup,\n        blurOnChange: false,\n        selectOnBlur: false,\n        adaptContainerCssClass: function(c) { return c; },\n        adaptDropdownCssClass: function(c) { return null; },\n        nextSearchTerm: function(selectedObject, currentSearchTerm) { return undefined; },\n        searchInputPlaceholder: '',\n        createSearchChoicePosition: 'top',\n        shouldFocusInput: function (instance) {\n            // Attempt to detect touch devices\n            var supportsTouchEvents = (('ontouchstart' in window) ||\n                                       (navigator.msMaxTouchPoints > 0));\n\n            // Only devices which support touch events should be special cased\n            if (!supportsTouchEvents) {\n                return true;\n            }\n\n            // Never focus the input if search is disabled\n            if (instance.opts.minimumResultsForSearch < 0) {\n                return false;\n            }\n\n            return true;\n        }\n    };\n\n    $.fn.select2.locales = [];\n\n    $.fn.select2.locales['en'] = {\n         formatMatches: function (matches) { if (matches === 1) { return \"One result is available, press enter to select it.\"; } return matches + \" results are available, use up and down arrow keys to navigate.\"; },\n         formatNoMatches: function () { return \"No matches found\"; },\n         formatAjaxError: function (jqXHR, textStatus, errorThrown) { return \"Loading failed\"; },\n         formatInputTooShort: function (input, min) { var n = min - input.length; return \"Please enter \" + n + \" or more character\" + (n == 1 ? \"\" : \"s\"); },\n         formatInputTooLong: function (input, max) { var n = input.length - max; return \"Please delete \" + n + \" character\" + (n == 1 ? \"\" : \"s\"); },\n         formatSelectionTooBig: function (limit) { return \"You can only select \" + limit + \" item\" + (limit == 1 ? \"\" : \"s\"); },\n         formatLoadMore: function (pageNumber) { return \"Loading more results\u2026\"; },\n         formatSearching: function () { return \"Searching\u2026\"; },\n    };\n\n    $.extend($.fn.select2.defaults, $.fn.select2.locales['en']);\n\n    $.fn.select2.ajaxDefaults = {\n        transport: $.ajax,\n        params: {\n            type: \"GET\",\n            cache: false,\n            dataType: \"json\"\n        }\n    };\n\n    // exports\n    window.Select2 = {\n        query: {\n            ajax: ajax,\n            local: local,\n            tags: tags\n        }, util: {\n            debounce: debounce,\n            markMatch: markMatch,\n            escapeMarkup: defaultEscapeMarkup,\n            stripDiacritics: stripDiacritics\n        }, \"class\": {\n            \"abstract\": AbstractSelect2,\n            \"single\": SingleSelect2,\n            \"multi\": MultiSelect2\n        }\n    };\n\n}(jQuery));\n", "(function($) {\n\n    function getSortableUl($select) {\n        return $select.prev('.select2-container').find('ul.select2-choices');\n    };\n\n    function initSortableUl($ul, options) {\n\n        $ul.sortable({\n            forcePlaceholderSize: true,\n            items: 'li.select2-search-choice',\n            placeholder : '<li>&nbsp;</li>'\n        });\n\n        // Only bind event at initialization\n        if (options && options.bindSortEvent && options.$select) {\n            $ul.bind('sortupdate', function(e, ui) {\n                $($ul.find('li.select2-search-choice').get().reverse()).each(function() {\n                    var id = $(this).data('select2Data').id,\n                        $option = options.$select.find('option[value=\"' + id + '\"]')[0];\n\n                    options.$select.prepend($option);\n                });\n            });\n        }\n    };\n\n    function initSelect2Sortable($select) {\n\n        var observer,\n            $ul;\n\n        $select.select2({ closeOnSelect: false });\n        $ul = getSortableUl($select);\n\n        observer = new MutationObserver(function(mutations) {\n            initSortableUl($ul);\n            observer.disconnect();\n        });\n\n        $select.on('select2-selecting', function() {\n            observer.observe($ul.get(0), { subtree: false, childList: true, attributes: false });\n        });\n\n        initSortableUl($ul, { bindSortEvent: true, $select: $select });\n\n        $select.data('hasSelect2Sortable', true);\n    };\n\n\n    function sortSelect2Sortable($select, val) {\n        var $ul = getSortableUl($select),\n                $lis = $ul.find('.select2-search-choice');\n        if (val) {\n            $.each(val, function(i, id) {\n                $lis.each(function() {\n                    if (id == $(this).data('select2Data').id) {\n                        $(this).insertBefore($ul.find('.select2-search-field'));\n                    }\n                });\n            });\n            $ul.trigger('sortupdate');\n        }\n    }\n\n    $.fn.extend({\n\n        select2Sortable: function(val) {\n\n            this.each(function() {\n\n                var $select = $(this);\n\n                if (!$select.prop('multiple')) {\n                    return;\n                }\n\n                if (!$select.data('hasSelect2Sortable')) {\n                    initSelect2Sortable($select);\n\n                    var values = $select.attr('data-order');\n\n                    if (values) {\n                        sortSelect2Sortable($select, values.split(','));\n                    }\n                }\n\n                if (val && Array.isArray(val)) {\n                    sortSelect2Sortable($select, val);\n                }\n            });\n\n            return this;\n        }\n    });\n}(window.jQuery));\n", "/**\n * Select2 German translation\n */\n(function ($) {\n    \"use strict\";\n\n    $.fn.select2.locales['de'] = {\n        formatNoMatches: function () { return \"Keine \u00DCbereinstimmungen gefunden\"; },\n        formatInputTooShort: function (input, min) { var n = min - input.length; return \"Bitte \" + n + \" Zeichen mehr eingeben\"; },\n        formatInputTooLong: function (input, max) { var n = input.length - max; return \"Bitte \" + n + \" Zeichen weniger eingeben\"; },\n        formatSelectionTooBig: function (limit) { return \"Sie k\u00F6nnen nur \" + limit + \" Eintr\" + (limit === 1 ? \"ag\" : \"\u00E4ge\") + \" ausw\u00E4hlen\"; },\n        formatLoadMore: function (pageNumber) { return \"Lade mehr Ergebnisse\u2026\"; },\n        formatSearching: function () { return \"Suche\u2026\"; },\n        formatMatches: function (matches) { return matches + \" Ergebnis \" + (matches > 1 ? \"se\" : \"\") + \" verf\u00FCgbar, zum Navigieren die Hoch-/Runter-Pfeiltasten verwenden.\"; }\n    };\n\n    $.extend($.fn.select2.defaults, $.fn.select2.locales['de']);\n})(jQuery);", "/*\nVersion: @@ver@@ Timestamp: @@timestamp@@\n*/\n.select2-container {\n    margin: 0;\n    position: relative;\n    display: inline-block;\n    /* inline-block for ie7 */\n    zoom: 1;\n    *display: inline;\n    vertical-align: middle;\n}\n\n.select2-container,\n.select2-drop,\n.select2-search,\n.select2-search input {\n  /*\n    Force border-box so that % widths fit the parent\n    container without overlap because of margin/padding.\n    More Info : http://www.quirksmode.org/css/box.html\n  */\n  -webkit-box-sizing: border-box; /* webkit */\n     -moz-box-sizing: border-box; /* firefox */\n          box-sizing: border-box; /* css3 */\n}\n\n.select2-container .select2-choice {\n    display: block;\n    height: 26px;\n    padding: 0 0 0 8px;\n    overflow: hidden;\n    position: relative;\n\n    border: 1px solid #aaa;\n    white-space: nowrap;\n    line-height: 26px;\n    color: #444;\n    text-decoration: none;\n\n    border-radius: 4px;\n\n    background-clip: padding-box;\n\n    -webkit-touch-callout: none;\n      -webkit-user-select: none;\n         -moz-user-select: none;\n          -ms-user-select: none;\n              user-select: none;\n\n    background-color: #fff;\n    background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.5, #fff));\n    background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 50%);\n    background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 50%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0);\n    background-image: linear-gradient(to top, #eee 0%, #fff 50%);\n}\n\nhtml[dir=\"rtl\"] .select2-container .select2-choice {\n    padding: 0 8px 0 0;\n}\n\n.select2-container.select2-drop-above .select2-choice {\n    border-bottom-color: #aaa;\n\n    border-radius: 0 0 4px 4px;\n\n    background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.9, #fff));\n    background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 90%);\n    background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 90%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);\n    background-image: linear-gradient(to bottom, #eee 0%, #fff 90%);\n}\n\n.select2-container.select2-allowclear .select2-choice .select2-chosen {\n    margin-right: 42px;\n}\n\n.select2-container .select2-choice > .select2-chosen {\n    margin-right: 26px;\n    display: block;\n    overflow: hidden;\n\n    white-space: nowrap;\n\n    text-overflow: ellipsis;\n    float: none;\n    width: auto;\n}\n\nhtml[dir=\"rtl\"] .select2-container .select2-choice > .select2-chosen {\n    margin-left: 26px;\n    margin-right: 0;\n}\n\n.select2-container .select2-choice abbr {\n    display: none;\n    width: 12px;\n    height: 12px;\n    position: absolute;\n    right: 24px;\n    top: 8px;\n\n    font-size: 1px;\n    text-decoration: none;\n\n    border: 0;\n    background: url('select2.png') right top no-repeat;\n    cursor: pointer;\n    outline: 0;\n}\n\n.select2-container.select2-allowclear .select2-choice abbr {\n    display: inline-block;\n}\n\n.select2-container .select2-choice abbr:hover {\n    background-position: right -11px;\n    cursor: pointer;\n}\n\n.select2-drop-mask {\n    border: 0;\n    margin: 0;\n    padding: 0;\n    position: fixed;\n    left: 0;\n    top: 0;\n    min-height: 100%;\n    min-width: 100%;\n    height: auto;\n    width: auto;\n    opacity: 0;\n    z-index: 9998;\n    /* styles required for IE to work */\n    background-color: #fff;\n    filter: alpha(opacity=0);\n}\n\n.select2-drop {\n    width: 100%;\n    margin-top: -1px;\n    position: absolute;\n    z-index: 9999;\n    top: 100%;\n\n    background: #fff;\n    color: #000;\n    border: 1px solid #aaa;\n    border-top: 0;\n\n    border-radius: 0 0 4px 4px;\n\n    -webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);\n            box-shadow: 0 4px 5px rgba(0, 0, 0, .15);\n}\n\n.select2-drop.select2-drop-above {\n    margin-top: 1px;\n    border-top: 1px solid #aaa;\n    border-bottom: 0;\n\n    border-radius: 4px 4px 0 0;\n\n    -webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);\n            box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);\n}\n\n.select2-drop-active {\n    border: 1px solid #5897fb;\n    border-top: none;\n}\n\n.select2-drop.select2-drop-above.select2-drop-active {\n    border-top: 1px solid #5897fb;\n}\n\n.select2-drop-auto-width {\n    border-top: 1px solid #aaa;\n    width: auto;\n}\n\n.select2-drop-auto-width .select2-search {\n    padding-top: 4px;\n}\n\n.select2-container .select2-choice .select2-arrow {\n    display: inline-block;\n    width: 18px;\n    height: 100%;\n    position: absolute;\n    right: 0;\n    top: 0;\n\n    border-left: 1px solid #aaa;\n    border-radius: 0 4px 4px 0;\n\n    background-clip: padding-box;\n\n    background: #ccc;\n    background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee));\n    background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%);\n    background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#cccccc', GradientType = 0);\n    background-image: linear-gradient(to top, #ccc 0%, #eee 60%);\n}\n\nhtml[dir=\"rtl\"] .select2-container .select2-choice .select2-arrow {\n    left: 0;\n    right: auto;\n\n    border-left: none;\n    border-right: 1px solid #aaa;\n    border-radius: 4px 0 0 4px;\n}\n\n.select2-container .select2-choice .select2-arrow b {\n    display: block;\n    width: 100%;\n    height: 100%;\n    background: url('select2.png') no-repeat 0 1px;\n}\n\nhtml[dir=\"rtl\"] .select2-container .select2-choice .select2-arrow b {\n    background-position: 2px 1px;\n}\n\n.select2-search {\n    display: inline-block;\n    width: 100%;\n    min-height: 26px;\n    margin: 0;\n    padding-left: 4px;\n    padding-right: 4px;\n\n    position: relative;\n    z-index: 10000;\n\n    white-space: nowrap;\n}\n\n.select2-search input {\n    width: 100%;\n    height: auto !important;\n    min-height: 26px;\n    padding: 4px 20px 4px 5px;\n    margin: 0;\n\n    outline: 0;\n    font-family: sans-serif;\n    font-size: 1em;\n\n    border: 1px solid #aaa;\n    border-radius: 0;\n\n    -webkit-box-shadow: none;\n            box-shadow: none;\n\n    background: #fff url('select2.png') no-repeat 100% -22px;\n    background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));\n    background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);\n    background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);\n    background: url('select2.png') no-repeat 100% -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;\n}\n\nhtml[dir=\"rtl\"] .select2-search input {\n    padding: 4px 5px 4px 20px;\n\n    background: #fff url('select2.png') no-repeat -37px -22px;\n    background: url('select2.png') no-repeat -37px -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));\n    background: url('select2.png') no-repeat -37px -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);\n    background: url('select2.png') no-repeat -37px -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);\n    background: url('select2.png') no-repeat -37px -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;\n}\n\n.select2-drop.select2-drop-above .select2-search input {\n    margin-top: 4px;\n}\n\n.select2-search input.select2-active {\n    background: #fff url('select2-spinner.gif') no-repeat 100%;\n    background: url('select2-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));\n    background: url('select2-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);\n    background: url('select2-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);\n    background: url('select2-spinner.gif') no-repeat 100%, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;\n}\n\n.select2-container-active .select2-choice,\n.select2-container-active .select2-choices {\n    border: 1px solid #5897fb;\n    outline: none;\n\n    -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);\n            box-shadow: 0 0 5px rgba(0, 0, 0, .3);\n}\n\n.select2-dropdown-open .select2-choice {\n    border-bottom-color: transparent;\n    -webkit-box-shadow: 0 1px 0 #fff inset;\n            box-shadow: 0 1px 0 #fff inset;\n\n    border-bottom-left-radius: 0;\n    border-bottom-right-radius: 0;\n\n    background-color: #eee;\n    background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(0.5, #eee));\n    background-image: -webkit-linear-gradient(center bottom, #fff 0%, #eee 50%);\n    background-image: -moz-linear-gradient(center bottom, #fff 0%, #eee 50%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);\n    background-image: linear-gradient(to top, #fff 0%, #eee 50%);\n}\n\n.select2-dropdown-open.select2-drop-above .select2-choice,\n.select2-dropdown-open.select2-drop-above .select2-choices {\n    border: 1px solid #5897fb;\n    border-top-color: transparent;\n\n    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(0.5, #eee));\n    background-image: -webkit-linear-gradient(center top, #fff 0%, #eee 50%);\n    background-image: -moz-linear-gradient(center top, #fff 0%, #eee 50%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);\n    background-image: linear-gradient(to bottom, #fff 0%, #eee 50%);\n}\n\n.select2-dropdown-open .select2-choice .select2-arrow {\n    background: transparent;\n    border-left: none;\n    filter: none;\n}\nhtml[dir=\"rtl\"] .select2-dropdown-open .select2-choice .select2-arrow {\n    border-right: none;\n}\n\n.select2-dropdown-open .select2-choice .select2-arrow b {\n    background-position: -18px 1px;\n}\n\nhtml[dir=\"rtl\"] .select2-dropdown-open .select2-choice .select2-arrow b {\n    background-position: -16px 1px;\n}\n\n.select2-hidden-accessible {\n    border: 0;\n    clip: rect(0 0 0 0);\n    height: 1px;\n    margin: -1px;\n    overflow: hidden;\n    padding: 0;\n    position: absolute;\n    width: 1px;\n}\n\n/* results */\n.select2-results {\n    max-height: 200px;\n    padding: 0 0 0 4px;\n    margin: 4px 4px 4px 0;\n    position: relative;\n    overflow-x: hidden;\n    overflow-y: auto;\n    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhtml[dir=\"rtl\"] .select2-results {\n    padding: 0 4px 0 0;\n    margin: 4px 0 4px 4px;\n}\n\n.select2-results ul.select2-result-sub {\n    margin: 0;\n    padding-left: 0;\n}\n\n.select2-results li {\n    list-style: none;\n    display: list-item;\n    background-image: none;\n}\n\n.select2-results li.select2-result-with-children > .select2-result-label {\n    font-weight: bold;\n}\n\n.select2-results .select2-result-label {\n    padding: 3px 7px 4px;\n    margin: 0;\n    cursor: pointer;\n\n    min-height: 1em;\n\n    -webkit-touch-callout: none;\n      -webkit-user-select: none;\n         -moz-user-select: none;\n          -ms-user-select: none;\n              user-select: none;\n}\n\n.select2-results-dept-1 .select2-result-label { padding-left: 20px }\n.select2-results-dept-2 .select2-result-label { padding-left: 40px }\n.select2-results-dept-3 .select2-result-label { padding-left: 60px }\n.select2-results-dept-4 .select2-result-label { padding-left: 80px }\n.select2-results-dept-5 .select2-result-label { padding-left: 100px }\n.select2-results-dept-6 .select2-result-label { padding-left: 110px }\n.select2-results-dept-7 .select2-result-label { padding-left: 120px }\n\n.select2-results .select2-highlighted {\n    background: #3875d7;\n    color: #fff;\n}\n\n.select2-results li em {\n    background: #feffde;\n    font-style: normal;\n}\n\n.select2-results .select2-highlighted em {\n    background: transparent;\n}\n\n.select2-results .select2-highlighted ul {\n    background: #fff;\n    color: #000;\n}\n\n.select2-results .select2-no-results,\n.select2-results .select2-searching,\n.select2-results .select2-ajax-error,\n.select2-results .select2-selection-limit {\n    background: #f4f4f4;\n    display: list-item;\n    padding-left: 5px;\n}\n\n/*\ndisabled look for disabled choices in the results dropdown\n*/\n.select2-results .select2-disabled.select2-highlighted {\n    color: #666;\n    background: #f4f4f4;\n    display: list-item;\n    cursor: default;\n}\n.select2-results .select2-disabled {\n  background: #f4f4f4;\n  display: list-item;\n  cursor: default;\n}\n\n.select2-results .select2-selected {\n    display: none;\n}\n\n.select2-more-results.select2-active {\n    background: #f4f4f4 url('select2-spinner.gif') no-repeat 100%;\n}\n\n.select2-results .select2-ajax-error {\n    background: rgba(255, 50, 50, .2);\n}\n\n.select2-more-results {\n    background: #f4f4f4;\n    display: list-item;\n}\n\n/* disabled styles */\n\n.select2-container.select2-container-disabled .select2-choice {\n    background-color: #f4f4f4;\n    background-image: none;\n    border: 1px solid #ddd;\n    cursor: default;\n}\n\n.select2-container.select2-container-disabled .select2-choice .select2-arrow {\n    background-color: #f4f4f4;\n    background-image: none;\n    border-left: 0;\n}\n\n.select2-container.select2-container-disabled .select2-choice abbr {\n    display: none;\n}\n\n\n/* multiselect */\n\n.select2-container-multi .select2-choices {\n    height: auto !important;\n    height: 1%;\n    margin: 0;\n    padding: 0 5px 0 0;\n    position: relative;\n\n    border: 1px solid #aaa;\n    cursor: text;\n    overflow: hidden;\n\n    background-color: #fff;\n    background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eee), color-stop(15%, #fff));\n    background-image: -webkit-linear-gradient(top, #eee 1%, #fff 15%);\n    background-image: -moz-linear-gradient(top, #eee 1%, #fff 15%);\n    background-image: linear-gradient(to bottom, #eee 1%, #fff 15%);\n}\n\nhtml[dir=\"rtl\"] .select2-container-multi .select2-choices {\n    padding: 0 0 0 5px;\n}\n\n.select2-locked {\n  padding: 3px 5px 3px 5px !important;\n}\n\n.select2-container-multi .select2-choices {\n    min-height: 26px;\n}\n\n.select2-container-multi.select2-container-active .select2-choices {\n    border: 1px solid #5897fb;\n    outline: none;\n\n    -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);\n            box-shadow: 0 0 5px rgba(0, 0, 0, .3);\n}\n.select2-container-multi .select2-choices li {\n    float: left;\n    list-style: none;\n}\nhtml[dir=\"rtl\"] .select2-container-multi .select2-choices li\n{\n    float: right;\n}\n.select2-container-multi .select2-choices .select2-search-field {\n    margin: 0;\n    padding: 0;\n    white-space: nowrap;\n}\n\n.select2-container-multi .select2-choices .select2-search-field input {\n    padding: 5px;\n    margin: 1px 0;\n\n    font-family: sans-serif;\n    font-size: 100%;\n    color: #666;\n    outline: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n    background: transparent !important;\n}\n\n.select2-container-multi .select2-choices .select2-search-field input.select2-active {\n    background: #fff url('select2-spinner.gif') no-repeat 100% !important;\n}\n\n.select2-default {\n    color: #999 !important;\n}\n\n.select2-container-multi .select2-choices .select2-search-choice {\n    padding: 3px 5px 3px 18px;\n    margin: 3px 0 3px 5px;\n    position: relative;\n\n    line-height: 13px;\n    color: #333;\n    cursor: default;\n    border: 1px solid #aaaaaa;\n\n    border-radius: 3px;\n\n    -webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);\n            box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);\n\n    background-clip: padding-box;\n\n    -webkit-touch-callout: none;\n      -webkit-user-select: none;\n         -moz-user-select: none;\n          -ms-user-select: none;\n              user-select: none;\n\n    background-color: #e4e4e4;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0);\n    background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee));\n    background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);\n    background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);\n    background-image: linear-gradient(to bottom, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);\n}\nhtml[dir=\"rtl\"] .select2-container-multi .select2-choices .select2-search-choice\n{\n    margin: 3px 5px 3px 0;\n    padding: 3px 18px 3px 5px;\n}\n.select2-container-multi .select2-choices .select2-search-choice .select2-chosen {\n    cursor: default;\n}\n.select2-container-multi .select2-choices .select2-search-choice-focus {\n    background: #d4d4d4;\n}\n\n.select2-search-choice-close {\n    display: block;\n    width: 12px;\n    height: 13px;\n    position: absolute;\n    right: 3px;\n    top: 4px;\n\n    font-size: 1px;\n    outline: none;\n    background: url('select2.png') right top no-repeat;\n}\nhtml[dir=\"rtl\"] .select2-search-choice-close {\n    right: auto;\n    left: 3px;\n}\n\n.select2-container-multi .select2-search-choice-close {\n    left: 3px;\n}\n\nhtml[dir=\"rtl\"] .select2-container-multi .select2-search-choice-close {\n    left: auto;\n    right: 2px;\n}\n\n.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover {\n  background-position: right -11px;\n}\n.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close {\n    background-position: right -11px;\n}\n\n/* disabled styles */\n.select2-container-multi.select2-container-disabled .select2-choices {\n    background-color: #f4f4f4;\n    background-image: none;\n    border: 1px solid #ddd;\n    cursor: default;\n}\n\n.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice {\n    padding: 3px 5px 3px 5px;\n    border: 1px solid #ddd;\n    background-image: none;\n    background-color: #f4f4f4;\n}\n\n.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close {    display: none;\n    background: none;\n}\n/* end multiselect */\n\n\n.select2-result-selectable .select2-match,\n.select2-result-unselectable .select2-match {\n    text-decoration: underline;\n}\n\n.select2-offscreen, .select2-offscreen:focus {\n    clip: rect(0 0 0 0) !important;\n    width: 1px !important;\n    height: 1px !important;\n    border: 0 !important;\n    margin: 0 !important;\n    padding: 0 !important;\n    overflow: hidden !important;\n    position: absolute !important;\n    outline: 0 !important;\n    left: 0px !important;\n    top: 0px !important;\n}\n\n.select2-display-none {\n    display: none;\n}\n\n.select2-measure-scrollbar {\n    position: absolute;\n    top: -10000px;\n    left: -10000px;\n    width: 100px;\n    height: 100px;\n    overflow: scroll;\n}\n\n/* Retina-ize icons */\n\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 2dppx)  {\n    .select2-search input,\n    .select2-search-choice-close,\n    .select2-container .select2-choice abbr,\n    .select2-container .select2-choice .select2-arrow b {\n        background-image: url('select2x2.png') !important;\n        background-repeat: no-repeat !important;\n        background-size: 60px 40px !important;\n    }\n\n    .select2-search input {\n        background-position: 100% -21px !important;\n    }\n}\n", "/**\n * Select2 Bootstrap 3 CSS v1.4.1\n * Tested with Bootstrap v3.2.0 and Select2 v3.3.2, v3.4.1-v3.4.5, v3.5.1, master\n * in latest Chrome, Safari, Firefox, Opera (Mac) and IE8-IE11\n * MIT License\n */\n/**\n * Reset Bootstrap 3 .form-control styles which - if applied to the\n * original <select>-element the Select2-plugin may be run against -\n * are copied to the .select2-container.\n *\n * 1. Overwrite .select2-container's original display:inline-block\n *    with Bootstrap 3's default for .form-control, display:block;\n *    courtesy of @juristr (@see https://github.com/fk/select2-bootstrap-css/pull/1)\n */\n.select2-container.form-control {\n    background: transparent;\n    border: none;\n    display: block;\n    /* 1 */\n    margin: 0;\n    padding: 0;\n}\n\n/**\n * Adjust Select2 inputs to fit Bootstrap 3 default .form-control appearance.\n */\n.select2-container .select2-choices .select2-search-field input,\n.select2-container .select2-choice,\n.select2-container .select2-choices {\n    background: none;\n    padding: 0;\n    border-color: #cccccc;\n    border-radius: 4px;\n    color: #555555;\n    font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n    background-color: white;\n    filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n\n.select2-search input {\n    border-color: #cccccc;\n    border-radius: 4px;\n    color: #555555;\n    font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n    background-color: white;\n    filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n\n.select2-container .select2-choices .select2-search-field input {\n    -webkit-box-shadow: none;\n    box-shadow: none;\n}\n\n/**\n * Adjust Select2 input heights to match the Bootstrap default.\n */\n.select2-container .select2-choice {\n    height: 34px;\n    line-height: 1.42857;\n}\n\n/**\n * Address Multi Select2's height which - depending on how many elements have been selected -\n * may grown higher than their initial size.\n */\n.select2-container.select2-container-multi.form-control {\n    height: auto;\n}\n\n/**\n * Address Bootstrap 3 control sizing classes\n * @see http://getbootstrap.com/css/#forms-control-sizes\n */\n.select2-container.input-sm .select2-choice,\n.input-group-sm .select2-container .select2-choice {\n    height: 30px;\n    line-height: 1.5;\n    border-radius: 3px;\n}\n\n.select2-container.input-lg .select2-choice,\n.input-group-lg .select2-container .select2-choice {\n    height: 46px;\n    line-height: 1.33;\n    border-radius: 6px;\n}\n\n.select2-container-multi .select2-choices .select2-search-field input {\n    height: 32px;\n}\n\n.select2-container-multi.input-sm .select2-choices .select2-search-field input,\n.input-group-sm .select2-container-multi .select2-choices .select2-search-field input {\n    height: 28px;\n}\n\n.select2-container-multi.input-lg .select2-choices .select2-search-field input,\n.input-group-lg .select2-container-multi .select2-choices .select2-search-field input {\n    height: 44px;\n}\n\n/**\n * Adjust height and line-height for .select2-search-field amd multi-select Select2 widgets.\n *\n * 1. Class repetition to address missing .select2-chosen in Select2 < 3.3.2.\n */\n.select2-container-multi .select2-choices .select2-search-field input {\n    margin: 0;\n}\n\n.select2-chosen,\n.select2-choice > span:first-child,\n.select2-container .select2-choices .select2-search-field input {\n    padding: 6px 12px;\n}\n\n.input-sm .select2-chosen,\n.input-group-sm .select2-chosen,\n.input-sm .select2-choice > span:first-child,\n.input-group-sm .select2-choice > span:first-child,\n.input-sm .select2-choices .select2-search-field input,\n.input-group-sm .select2-choices .select2-search-field input {\n    padding: 5px 10px;\n}\n\n.input-lg .select2-chosen,\n.input-group-lg .select2-chosen,\n.input-lg .select2-choice > span:first-child,\n.input-group-lg .select2-choice > span:first-child,\n.input-lg .select2-choices .select2-search-field input,\n.input-group-lg .select2-choices .select2-search-field input {\n    padding: 10px 16px;\n}\n\n.select2-container-multi .select2-choices .select2-search-choice {\n    margin-top: 5px;\n    margin-bottom: 3px;\n}\n\n.select2-container-multi.input-sm .select2-choices .select2-search-choice,\n.input-group-sm .select2-container-multi .select2-choices .select2-search-choice {\n    margin-top: 3px;\n    margin-bottom: 2px;\n}\n\n.select2-container-multi.input-lg .select2-choices .select2-search-choice,\n.input-group-lg .select2-container-multi .select2-choices .select2-search-choice {\n    line-height: 24px;\n}\n\n/**\n * Adjust the single Select2's dropdown arrow button appearance.\n *\n * 1. For Select2 v.3.3.2.\n */\n.select2-container .select2-choice .select2-arrow,\n.select2-container .select2-choice div {\n    border-left: 1px solid #cccccc;\n    background: none;\n    filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n\n.select2-dropdown-open .select2-choice .select2-arrow,\n.select2-dropdown-open .select2-choice div {\n    border-left-color: transparent;\n    background: none;\n    filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n\n/**\n * Adjust the dropdown arrow button icon position for the single-select Select2 elements\n * to make it line up vertically now that we increased the height of .select2-container.\n *\n * 1. Class repetition to address missing .select2-chosen in Select2 v.3.3.2.\n */\n.select2-container .select2-choice .select2-arrow b,\n.select2-container .select2-choice div b {\n    background-position: 0 3px;\n}\n\n.select2-dropdown-open .select2-choice .select2-arrow b,\n.select2-dropdown-open .select2-choice div b {\n    background-position: -18px 3px;\n}\n\n.select2-container.input-sm .select2-choice .select2-arrow b,\n.input-group-sm .select2-container .select2-choice .select2-arrow b,\n.select2-container.input-sm .select2-choice div b,\n.input-group-sm .select2-container .select2-choice div b {\n    background-position: 0 1px;\n}\n\n.select2-dropdown-open.input-sm .select2-choice .select2-arrow b,\n.input-group-sm .select2-dropdown-open .select2-choice .select2-arrow b,\n.select2-dropdown-open.input-sm .select2-choice div b,\n.input-group-sm .select2-dropdown-open .select2-choice div b {\n    background-position: -18px 1px;\n}\n\n.select2-container.input-lg .select2-choice .select2-arrow b,\n.input-group-lg .select2-container .select2-choice .select2-arrow b,\n.select2-container.input-lg .select2-choice div b,\n.input-group-lg .select2-container .select2-choice div b {\n    background-position: 0 9px;\n}\n\n.select2-dropdown-open.input-lg .select2-choice .select2-arrow b,\n.input-group-lg .select2-dropdown-open .select2-choice .select2-arrow b,\n.select2-dropdown-open.input-lg .select2-choice div b,\n.input-group-lg .select2-dropdown-open .select2-choice div b {\n    background-position: -18px 9px;\n}\n\n/**\n * Address Bootstrap's validation states and change Select2's border colors and focus states.\n * Apply .has-warning, .has-danger or .has-succes to #select2-drop to match Bootstraps' colors.\n */\n.has-warning .select2-choice,\n.has-warning .select2-choices {\n    border-color: #8a6d3b;\n}\n.has-warning .select2-container-active .select2-choice,\n.has-warning .select2-container-multi.select2-container-active .select2-choices {\n    border-color: #66512c;\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning.select2-drop-active {\n    border-color: #66512c;\n}\n.has-warning.select2-drop-active.select2-drop.select2-drop-above {\n    border-top-color: #66512c;\n}\n\n.has-error .select2-choice,\n.has-error .select2-choices {\n    border-color: #a94442;\n}\n.has-error .select2-container-active .select2-choice,\n.has-error .select2-container-multi.select2-container-active .select2-choices {\n    border-color: #843534;\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error.select2-drop-active {\n    border-color: #843534;\n}\n.has-error.select2-drop-active.select2-drop.select2-drop-above {\n    border-top-color: #843534;\n}\n\n.has-success .select2-choice,\n.has-success .select2-choices {\n    border-color: #3c763d;\n}\n.has-success .select2-container-active .select2-choice,\n.has-success .select2-container-multi.select2-container-active .select2-choices {\n    border-color: #2b542c;\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success.select2-drop-active {\n    border-color: #2b542c;\n}\n.has-success.select2-drop-active.select2-drop.select2-drop-above {\n    border-top-color: #2b542c;\n}\n\n/**\n * Make Select2's active-styles - applied to .select2-container when the widget receives focus -\n * fit Bootstrap 3's .form-element:focus appearance.\n */\n.select2-container-active .select2-choice,\n.select2-container-multi.select2-container-active .select2-choices {\n    border-color: #66afe9;\n    outline: none;\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);\n    -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n    -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n    transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n}\n\n.select2-drop-active {\n    border-color: #66afe9;\n}\n\n.select2-drop-auto-width,\n.select2-drop.select2-drop-above.select2-drop-active {\n    border-top-color: #66afe9;\n}\n\n/**\n * Select2 widgets in Bootstrap Input Groups\n *\n * When Select2 widgets are combined with other elements using Bootstrap 3's\n * \"Input Group\" component, we don't want specific edges of the Select2 container\n * to have a border-radius.\n *\n * In Bootstrap 2, input groups required a markup where these style adjustments\n * could be bound to a CSS-class identifying if the additional elements are appended,\n * prepended or both.\n *\n * Bootstrap 3 doesn't rely on these classes anymore, so we have to use our own.\n * Use .select2-bootstrap-prepend and .select2-bootstrap-append on a Bootstrap 3 .input-group\n * to let the contained Select2 widget know which edges should not be rounded as they are\n * directly followed by another element.\n *\n * @see http://getbootstrap.com/components/#input-groups\n */\n.input-group.select2-bootstrap-prepend [class^=\"select2-choice\"] {\n    border-bottom-left-radius: 0 !important;\n    border-top-left-radius: 0 !important;\n}\n\n.input-group.select2-bootstrap-append [class^=\"select2-choice\"] {\n    border-bottom-right-radius: 0 !important;\n    border-top-right-radius: 0 !important;\n}\n\n.select2-dropdown-open [class^=\"select2-choice\"] {\n    border-bottom-right-radius: 0 !important;\n    border-bottom-left-radius: 0 !important;\n}\n\n.select2-dropdown-open.select2-drop-above [class^=\"select2-choice\"] {\n    border-top-right-radius: 0 !important;\n    border-top-left-radius: 0 !important;\n    border-bottom-right-radius: 4px !important;\n    border-bottom-left-radius: 4px !important;\n}\n.input-group.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^=\"select2-choice\"] {\n    border-bottom-left-radius: 0 !important;\n    border-top-left-radius: 0 !important;\n}\n.input-group.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^=\"select2-choice\"] {\n    border-bottom-right-radius: 0 !important;\n    border-top-right-radius: 0 !important;\n}\n.input-group.input-group-sm.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^=\"select2-choice\"] {\n    border-bottom-right-radius: 3px !important;\n}\n.input-group.input-group-lg.select2-bootstrap-prepend .select2-dropdown-open.select2-drop-above [class^=\"select2-choice\"] {\n    border-bottom-right-radius: 6px !important;\n}\n.input-group.input-group-sm.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^=\"select2-choice\"] {\n    border-bottom-left-radius: 3px !important;\n}\n.input-group.input-group-lg.select2-bootstrap-append .select2-dropdown-open.select2-drop-above [class^=\"select2-choice\"] {\n    border-bottom-left-radius: 6px !important;\n}\n\n/**\n * Adjust Select2's choices hover and selected styles to match Bootstrap 3's default dropdown styles.\n */\n.select2-results .select2-highlighted {\n    color: white;\n    background-color: #428bca;\n}\n\n/**\n * Adjust alignment of Bootstrap 3 buttons in Bootstrap 3 Input Groups to address\n * Multi Select2's height which - depending on how many elements have been selected -\n * may grown higher than their initial size.\n */\n.select2-bootstrap-append .select2-container-multiple,\n.select2-bootstrap-append .input-group-btn,\n.select2-bootstrap-append .input-group-btn .btn,\n.select2-bootstrap-prepend .select2-container-multiple,\n.select2-bootstrap-prepend .input-group-btn,\n.select2-bootstrap-prepend .input-group-btn .btn {\n    vertical-align: top;\n}\n\n/**\n * Make Multi Select2's choices match Bootstrap 3's default button styles.\n */\n.select2-container-multi .select2-choices .select2-search-choice {\n    color: #555555;\n    background: white;\n    border-color: #cccccc;\n    filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n    -webkit-box-shadow: none;\n    box-shadow: none;\n}\n\n.select2-container-multi .select2-choices .select2-search-choice-focus {\n    background: #ebebeb;\n    border-color: #adadad;\n    color: #333333;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n}\n\n/**\n * Address Multi Select2's choice close-button vertical alignment.\n */\n.select2-search-choice-close {\n    margin-top: -7px;\n    top: 50%;\n}\n\n/**\n * Adjust the single Select2's clear button position (used to reset the select box\n * back to the placeholder value and visible once a selection is made\n * activated by Select2's \"allowClear\" option).\n */\n.select2-container .select2-choice abbr {\n    top: 50%;\n}\n\n/**\n * Adjust \"no results\" and \"selection limit\" messages to make use\n * of Bootstrap 3's default \"Alert\" style.\n *\n * @see http://getbootstrap.com/components/#alerts-default\n */\n.select2-results .select2-no-results,\n.select2-results .select2-searching,\n.select2-results .select2-selection-limit {\n    background-color: #fcf8e3;\n    color: #8a6d3b;\n}\n\n/**\n * Address disabled Select2 styles.\n *\n * 1. For Select2 v.3.3.2.\n * 2. Revert border-left:0 inherited from Select2's CSS to prevent the arrow\n *    from jumping when switching from disabled to enabled state and vice versa.\n */\n.select2-container.select2-container-disabled .select2-choice,\n.select2-container.select2-container-disabled .select2-choices {\n    cursor: not-allowed;\n    background-color: #eeeeee;\n    border-color: #cccccc;\n}\n.select2-container.select2-container-disabled .select2-choice .select2-arrow,\n.select2-container.select2-container-disabled .select2-choice div,\n.select2-container.select2-container-disabled .select2-choices .select2-arrow,\n.select2-container.select2-container-disabled .select2-choices div {\n    background-color: transparent;\n    border-left: 1px solid transparent;\n    /* 2 */\n}\n\n/**\n * Address Select2's loading indicator position - which should not stick\n * to the right edge of Select2's search input.\n *\n * 1. in .select2-search input\n * 2. in Multi Select2's .select2-search-field input\n * 3. in the status-message of infinite-scroll with remote data (@see http://ivaynberg.github.io/select2/#infinite)\n *\n * These styles alter Select2's default background-position of 100%\n * and supply the new background-position syntax to browsers which support it:\n *\n * 1. Android, Safari < 6/Mobile, IE<9: change to a relative background-position of 99%\n * 2. Chrome 25+, Firefox 13+, IE 9+, Opera 10.5+: use the new CSS3-background-position syntax\n *\n * @see http://www.w3.org/TR/css3-background/#background-position\n *\n * @todo Since both Select2 and Bootstrap 3 only support IE8 and above,\n * we could use the :after-pseudo-element to display the loading indicator.\n * Alternatively, we could supply an altered loading indicator image which already\n * contains an offset to the right.\n */\n.select2-search input.select2-active,\n.select2-container-multi .select2-choices .select2-search-field input.select2-active,\n.select2-more-results.select2-active {\n    background-position: 99%;\n    /* 4 */\n    background-position: right 4px center;\n    /* 5 */\n}\n\n/**\n * To support Select2 pre v3.4.2 in combination with Bootstrap v3.2.0,\n * ensure that .select2-offscreen width, height and position can not be overwritten.\n *\n * This adresses changes in Bootstrap somewhere after the initial v3.0.0 which -\n * in combination with Select2's pre-v3.4.2 CSS missing the \"!important\" after\n * the following rules - allow Bootstrap to overwrite the latter, which results in\n * the original <select> element Select2 is replacing not be properly being hidden\n * when used in a \"Bootstrap Input Group with Addon\".\n **/\n.select2-offscreen,\n.select2-offscreen:focus {\n    width: 1px !important;\n    height: 1px !important;\n    position: absolute !important;\n}\n", ".select2-container .select2-choices {\n  font-family: inherit;\n}\n\n.select2-container-multi .select2-choices .select2-search-choice-focus {\n  background: none;\n}\n\n.select2-dropdown-open.select2-drop-above .select2-choice,\n.select2-dropdown-open.select2-drop-above .select2-choices {\n  background: none;\n}\n\n.select2-container .select2-choices .select2-search-field input, .select2-container .select2-choice, .select2-container .select2-choices {\n  -webkit-border-radius: 0 !important;\n  -moz-border-radius: 0 !important;\n  border-radius: 0 !important;\n}\n\n.select2-container-multi .select2-choices .select2-search-choice {\n  -webkit-border-radius: 0 !important;\n  -moz-border-radius: 0 !important;\n  border-radius: 0 !important;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL2hvbWUva3Vyc28vYXBwcy9rdXJzby9yZWxlYXNlcy8yMDI2MDkzMDEyNDk1My9hcHAvamF2YXNjcmlwdC9jb21wb25lbnRzL3NlbGVjdDIiLCJzb3VyY2VzIjpbInNlbGVjdDIta3Vyc28uc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtBQUFBO0VBRUk7OztBQUdKO0VBQ0k7RUFDQTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQSIsInNvdXJjZXNDb250ZW50IjpbIi5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1jaG9pY2VzIHtcbiAgICBmb250LWZhbWlseTogaW5oZXJpdDtcbn1cblxuLnNlbGVjdDItY29udGFpbmVyLW11bHRpIC5zZWxlY3QyLWNob2ljZXMgLnNlbGVjdDItc2VhcmNoLWNob2ljZS1mb2N1cyB7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbn1cblxuLnNlbGVjdDItZHJvcGRvd24tb3Blbi5zZWxlY3QyLWRyb3AtYWJvdmUgLnNlbGVjdDItY2hvaWNlLFxuLnNlbGVjdDItZHJvcGRvd24tb3Blbi5zZWxlY3QyLWRyb3AtYWJvdmUgLnNlbGVjdDItY2hvaWNlcyB7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbn1cblxuLnNlbGVjdDItY29udGFpbmVyIC5zZWxlY3QyLWNob2ljZXMgLnNlbGVjdDItc2VhcmNoLWZpZWxkIGlucHV0LCAuc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItY2hvaWNlLCAuc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItY2hvaWNlcyB7XG4gICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gICAgLW1vei1ib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xufVxuXG4uc2VsZWN0Mi1jb250YWluZXItbXVsdGkgLnNlbGVjdDItY2hvaWNlcyAuc2VsZWN0Mi1zZWFyY2gtY2hvaWNlIHtcbiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG59XG4iXX0= */", ".select2-container-multi.sortable .select2-choices .select2-search-choice {\n    cursor: move;\n}\n\n/*.select2-container {*/\n/*    display: block;*/\n/*    width: 100%;*/\n/*}*/\n\n/*.select2-choices {*/\n/*    border-radius: 0px;*/\n/*    border-color: #d0d0d0;*/\n/*}*/\n\n/*.select2-container-multi .select2-choices {*/\n/*    border-color: #d0d0d0;*/\n/*    padding: 0px;*/\n/*}*/\n\n/*.select2-drop {*/\n/*    border-radius: 0px;*/\n/*}*/\n\n/*.select2-container-multi.select2-container-active {*/\n/*    border-color: #646464;*/\n/*}*/\n\n/*.select2-container-multi.select2-container-active .select2-choices {*/\n/*    border-color: #646464;*/\n/*}*/\n\n/*.select2-drop-active {*/\n/*    border-color: #646464;*/\n/*}*/\n\n.select2-container-multi.sortable .select2-choices {\n    padding: 4px 4px 4px 4px;\n    border-radius: 0;\n}\n\n.select2-container-multi.sortable .select2-choices .select2-search-choice {\n    /*background: #646464;*/\n    /*color: #fdfdfd;*/\n    /*width: 90%;*/\n    /*margin: 0 0 2px 0;*/\n    /*border: 0px;*/\n    /*border-radius: 0px;*/\n    /*padding: 10px 10px 10px 30px;*/\n    /*box-shadow: 0 0 0px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);*/\n    border-radius: 2px;\n    background: #f4f4f4;\n    margin: 0 0 3px 0;\n    padding: 10px 10px 10px 25px;\n    border: none;\n    border-left: 2px solid #e6e7e8;\n    color: #444;\n    float: none;\n}\n\n.select2-container-multi.sortable .select2-search-choice-close {\n    left: 10px;\n    top: 10px;\n    margin: 0;\n}\n\n/*.select2-results .select2-highlighted {*/\n/*    background: #2f73b6;*/\n/*}*/\n", "/*! @preserve\r\n * bootbox.locales.js\r\n * version: 6.0.4\r\n * author: Nick Payne <nick@kurai.co.uk>\r\n * license: MIT\r\n * http://bootboxjs.com/\r\n */\r\n(function(global, factory) {\r\n  'use strict';\r\n  if (typeof define === 'function' && define.amd) {\r\n    define(['bootbox'], factory);\r\n  } else if (typeof module === 'object' && module.exports) {\r\n    factory(require('./bootbox'));\r\n  } else {\r\n    factory(global.bootbox);\r\n  }\r\n}(this, function(bootbox) {\r\n  'use strict';\r\n\r\n  // locale : Arabic\r\n  // author : Emad Omar\r\n  bootbox.addLocale('ar', {\r\n    OK: '\u0645\u0648\u0627\u0641\u0642',\r\n    CANCEL: '\u0627\u0644\u063A\u0627\u0621',\r\n    CONFIRM: '\u062A\u0623\u0643\u064A\u062F'\r\n  });\r\n  // locale : Azerbaijani\r\n  // author : Valentin Belousov\r\n  bootbox.addLocale('az', {\r\n    OK: 'OK',\r\n    CANCEL: '\u0130mtina et',\r\n    CONFIRM: 'T\u0259sdiq et'\r\n  });\r\n  // locale : Bulgarian\r\n  // author :  mraiur\r\n  bootbox.addLocale('bg-BG', {\r\n    OK: '\u041E\u043A',\r\n    CANCEL: '\u041E\u0442\u043A\u0430\u0437',\r\n    CONFIRM: '\u041F\u043E\u0442\u0432\u044A\u0440\u0436\u0434\u0430\u0432\u0430\u043C'\r\n  });\r\n  // locale : Czech\r\n  // author : Luk\u00E1\u0161 Fry\u010D\r\n  bootbox.addLocale('cs', {\r\n    OK: 'OK',\r\n    CANCEL: 'Zru\u0161it',\r\n    CONFIRM: 'Potvrdit'\r\n  });\r\n  // locale : Danish\r\n  // author : Frederik Alk\u00E6rsig\r\n  bootbox.addLocale('da', {\r\n    OK: 'OK',\r\n    CANCEL: 'Annuller',\r\n    CONFIRM: 'Accepter'\r\n  });\r\n  // locale : German\r\n  // author : Nick Payne\r\n  bootbox.addLocale('de', {\r\n    OK: 'OK',\r\n    CANCEL: 'Abbrechen',\r\n    CONFIRM: 'Akzeptieren'\r\n  });\r\n  // locale : Greek\r\n  // author : Tolis Emmanouilidis\r\n  bootbox.addLocale('el', {\r\n    OK: '\u0395\u03BD\u03C4\u03AC\u03BE\u03B5\u03B9',\r\n    CANCEL: '\u0391\u03BA\u03CD\u03C1\u03C9\u03C3\u03B7',\r\n    CONFIRM: '\u0395\u03C0\u03B9\u03B2\u03B5\u03B2\u03B1\u03AF\u03C9\u03C3\u03B7'\r\n  });\r\n  // locale : English\r\n  // author : Nick Payne\r\n  bootbox.addLocale('en', {\r\n    OK: 'OK',\r\n    CANCEL: 'Cancel',\r\n    CONFIRM: 'OK'\r\n  });\r\n  // locale : Spanish\r\n  // author : Ian Leckey\r\n  bootbox.addLocale('es', {\r\n    OK: 'OK',\r\n    CANCEL: 'Cancelar',\r\n    CONFIRM: 'Aceptar'\r\n  });\r\n  // locale : Estonian\r\n  // author : Pavel Kr\u00F5lov\r\n  bootbox.addLocale('et', {\r\n    OK: 'OK',\r\n    CANCEL: 'Katkesta',\r\n    CONFIRM: 'OK'\r\n  });\r\n  // locale : Basque\r\n  // author : Iker Ibarguren\r\n  bootbox.addLocale('eu', {\r\n    OK: 'OK',\r\n    CANCEL: 'Ezeztatu',\r\n    CONFIRM: 'Onartu'\r\n  });\r\n  // locale : Persian\r\n  // author : Touhid Arastu\r\n  bootbox.addLocale('fa', {\r\n    OK: '\u0642\u0628\u0648\u0644',\r\n    CANCEL: '\u0644\u063A\u0648',\r\n    CONFIRM: '\u062A\u0627\u06CC\u06CC\u062F'\r\n  });\r\n  // locale : Finnish\r\n  // author : Nick Payne\r\n  bootbox.addLocale('fi', {\r\n    OK: 'OK',\r\n    CANCEL: 'Peruuta',\r\n    CONFIRM: 'OK'\r\n  });\r\n  // locale : French\r\n  // author : Nick Payne, Sebastien Andary\r\n  bootbox.addLocale('fr', {\r\n    OK: 'OK',\r\n    CANCEL: 'Annuler',\r\n    CONFIRM: 'Confirmer'\r\n  });\r\n  // locale : Hebrew\r\n  // author : Chen Alon\r\n  bootbox.addLocale('he', {\r\n    OK: '\u05D0\u05D9\u05E9\u05D5\u05E8',\r\n    CANCEL: '\u05D1\u05D9\u05D8\u05D5\u05DC',\r\n    CONFIRM: '\u05D0\u05D9\u05E9\u05D5\u05E8'\r\n  });\r\n  // locale : Croatian\r\n  // author : Mario Ba\u0161i\u0107\r\n  bootbox.addLocale('hr', {\r\n    OK: 'OK',\r\n    CANCEL: 'Odustani',\r\n    CONFIRM: 'Potvrdi'\r\n  });\r\n  // locale : Hungarian\r\n  // author : M\u00E1rk S\u00E1gi-Kaz\u00E1r\r\n  bootbox.addLocale('hu', {\r\n    OK: 'OK',\r\n    CANCEL: 'M\u00E9gsem',\r\n    CONFIRM: 'Meger\u0151s\u00EDt'\r\n  });\r\n  // locale : Indonesian\r\n  // author : Budi Irawan\r\n  bootbox.addLocale('id', {\r\n    OK: 'OK',\r\n    CANCEL: 'Batal',\r\n    CONFIRM: 'OK'\r\n  });\r\n  // locale : Italian\r\n  // author : Mauro\r\n  bootbox.addLocale('it', {\r\n    OK: 'OK',\r\n    CANCEL: 'Annulla',\r\n    CONFIRM: 'Conferma'\r\n  });\r\n  // locale : Japanese\r\n  // author : ms183\r\n  bootbox.addLocale('ja', {\r\n    OK: 'OK',\r\n    CANCEL: '\u30AD\u30E3\u30F3\u30BB\u30EB',\r\n    CONFIRM: 'OK'\r\n  });\r\n\r\n  // locale : Georgian\r\n  // author : Avtandil Kikabidze aka LONGMAN (@akalongman)\r\n  bootbox.addLocale('ka', {\r\n    OK: 'OK',\r\n    CANCEL: '\u10D2\u10D0\u10E3\u10E5\u10DB\u10D4\u10D1\u10D0',\r\n    CONFIRM: '\u10D3\u10D0\u10D3\u10D0\u10E1\u10E2\u10E3\u10E0\u10D4\u10D1\u10D0'\r\n  });\r\n  // locale : Korean\r\n  // author : rigning\r\n  bootbox.addLocale('ko', {\r\n    OK: 'OK',\r\n    CANCEL: '\uCDE8\uC18C',\r\n    CONFIRM: '\uD655\uC778'\r\n  });\r\n  // locale : Lithuanian\r\n  // author : Tomas\r\n  bootbox.addLocale('lt', {\r\n    OK: 'Gerai',\r\n    CANCEL: 'At\u0161aukti',\r\n    CONFIRM: 'Patvirtinti'\r\n  });\r\n  // locale : Latvian\r\n  // author : Dmitry Bogatykh, Lauris BH\r\n  bootbox.addLocale('lv', {\r\n    OK: 'Labi',\r\n    CANCEL: 'Atcelt',\r\n    CONFIRM: 'Apstiprin\u0101t'\r\n  });\r\n  // locale : Dutch\r\n  // author : Bas ter Vrugt\r\n  bootbox.addLocale('nl', {\r\n    OK: 'OK',\r\n    CANCEL: 'Annuleren',\r\n    CONFIRM: 'Accepteren'\r\n  });\r\n  // locale : Norwegian\r\n  // author : Nils Magnus Englund\r\n  bootbox.addLocale('no', {\r\n    OK: 'OK',\r\n    CANCEL: 'Avbryt',\r\n    CONFIRM: 'OK'\r\n  });\r\n  // locale : Polish\r\n  // author : Szczepan Cie\u015Blik\r\n  bootbox.addLocale('pl', {\r\n    OK: 'OK',\r\n    CANCEL: 'Anuluj',\r\n    CONFIRM: 'Potwierd\u017A'\r\n  });\r\n  // locale : Portuguese (Brasil)\r\n  // author : Nick Payne\r\n  bootbox.addLocale('pt-BR', {\r\n    OK: 'OK',\r\n    CANCEL: 'Cancelar',\r\n    CONFIRM: 'Sim'\r\n  });\r\n  // locale : Portuguese\r\n  // author : Cl\u00E1udio Medina\r\n  bootbox.addLocale('pt', {\r\n    OK: 'OK',\r\n    CANCEL: 'Cancelar',\r\n    CONFIRM: 'Confirmar'\r\n  });\r\n  // locale : Russian\r\n  // author : ionian-wind\r\n  bootbox.addLocale('ru', {\r\n    OK: 'OK',\r\n    CANCEL: '\u041E\u0442\u043C\u0435\u043D\u0430',\r\n    CONFIRM: '\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C'\r\n  });\r\n  // locale : Slovak\r\n  // author : Stano Pa\u0161ka\r\n  bootbox.addLocale('sk', {\r\n    OK: 'OK',\r\n    CANCEL: 'Zru\u0161i\u0165',\r\n    CONFIRM: 'Potvrdi\u0165'\r\n  });\r\n  // locale : Slovenian\r\n  // author : @metalcamp\r\n  bootbox.addLocale('sl', {\r\n    OK: 'OK',\r\n    CANCEL: 'Prekli\u010Di',\r\n    CONFIRM: 'Potrdi'\r\n  });\r\n  // locale : Albanian\r\n  // author : Knut H\u00FChne\r\n  bootbox.addLocale('sq', {\r\n    OK: 'OK',\r\n    CANCEL: 'Anulo',\r\n    CONFIRM: 'Prano'\r\n  });\r\n  // locale : Swedish\r\n  // author : Mattias Reichel\r\n  bootbox.addLocale('sv', {\r\n    OK: 'OK',\r\n    CANCEL: 'Avbryt',\r\n    CONFIRM: 'OK'\r\n  });\r\n  // locale : Swahili\r\n  // author : Timothy Anyona\r\n  bootbox.addLocale('sw', {\r\n    OK: 'Sawa',\r\n    CANCEL: 'Ghairi',\r\n    CONFIRM: 'Thibitisha'\r\n  });\r\n  // locale : Tamil\r\n  // author : Kolappan Nathan\r\n  bootbox.addLocale('ta', {\r\n    OK: '\u0B9A\u0BB0\u0BBF',\r\n    CANCEL: '\u0BB0\u0BA4\u0BCD\u0BA4\u0BC1 \u0B9A\u0BC6\u0BAF\u0BCD',\r\n    CONFIRM: '\u0B89\u0BB1\u0BC1\u0BA4\u0BBF \u0B9A\u0BC6\u0BAF\u0BCD'\r\n  });\r\n  // locale : Thai\r\n  // author : Ishmael\u0E5B\r\n  bootbox.addLocale('th', {\r\n    OK: '\u0E15\u0E01\u0E25\u0E07',\r\n    CANCEL: '\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01',\r\n    CONFIRM: '\u0E22\u0E37\u0E19\u0E22\u0E31\u0E19'\r\n  });\r\n  // locale : Turkish\r\n  // author : Enes Karaca\r\n  bootbox.addLocale('tr', {\r\n    OK: 'Tamam',\r\n    CANCEL: '\u0130ptal',\r\n    CONFIRM: 'Onayla'\r\n  });\r\n  // locale : Ukrainian\r\n  // author : OlehBoiko\r\n  bootbox.addLocale('uk', {\r\n    OK: 'OK',\r\n    CANCEL: '\u0412\u0456\u0434\u043C\u0456\u043D\u0430',\r\n    CONFIRM: '\u041F\u0440\u0438\u0439\u043D\u044F\u0442\u0438'\r\n  });\r\n  // locale : Vietnamese\r\n  // author :  Anh Tu Nguyen\r\n  bootbox.addLocale('vi', {\r\n    OK: 'OK',\r\n    CANCEL: 'H\u1EE7y b\u1ECF',\r\n    CONFIRM: 'X\u00E1c nh\u1EADn'\r\n  });\r\n  // locale : Chinese (China / People's Republic of China)\r\n  // author : Nick Payne\r\n  bootbox.addLocale('zh-CN', {\r\n    OK: 'OK',\r\n    CANCEL: '\u53D6\u6D88',\r\n    CONFIRM: '\u786E\u8BA4'\r\n  });\r\n  // locale : Chinese (Taiwan / Republic of China)\r\n  // author : Nick Payne\r\n  bootbox.addLocale('zh-TW', {\r\n    OK: 'OK',\r\n    CANCEL: '\u53D6\u6D88',\r\n    CONFIRM: '\u78BA\u8A8D'\r\n  });\r\n\r\n}));\r\n", "/*\nStimulus 3.2.1\nCopyright \u00A9 2023 Basecamp, LLC\n */\nclass EventListener {\n    constructor(eventTarget, eventName, eventOptions) {\n        this.eventTarget = eventTarget;\n        this.eventName = eventName;\n        this.eventOptions = eventOptions;\n        this.unorderedBindings = new Set();\n    }\n    connect() {\n        this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n    }\n    disconnect() {\n        this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n    }\n    bindingConnected(binding) {\n        this.unorderedBindings.add(binding);\n    }\n    bindingDisconnected(binding) {\n        this.unorderedBindings.delete(binding);\n    }\n    handleEvent(event) {\n        const extendedEvent = extendEvent(event);\n        for (const binding of this.bindings) {\n            if (extendedEvent.immediatePropagationStopped) {\n                break;\n            }\n            else {\n                binding.handleEvent(extendedEvent);\n            }\n        }\n    }\n    hasBindings() {\n        return this.unorderedBindings.size > 0;\n    }\n    get bindings() {\n        return Array.from(this.unorderedBindings).sort((left, right) => {\n            const leftIndex = left.index, rightIndex = right.index;\n            return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n        });\n    }\n}\nfunction extendEvent(event) {\n    if (\"immediatePropagationStopped\" in event) {\n        return event;\n    }\n    else {\n        const { stopImmediatePropagation } = event;\n        return Object.assign(event, {\n            immediatePropagationStopped: false,\n            stopImmediatePropagation() {\n                this.immediatePropagationStopped = true;\n                stopImmediatePropagation.call(this);\n            },\n        });\n    }\n}\n\nclass Dispatcher {\n    constructor(application) {\n        this.application = application;\n        this.eventListenerMaps = new Map();\n        this.started = false;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.eventListeners.forEach((eventListener) => eventListener.connect());\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n        }\n    }\n    get eventListeners() {\n        return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n    }\n    bindingConnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n    }\n    bindingDisconnected(binding, clearEventListeners = false) {\n        this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n        if (clearEventListeners)\n            this.clearEventListenersForBinding(binding);\n    }\n    handleError(error, message, detail = {}) {\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    clearEventListenersForBinding(binding) {\n        const eventListener = this.fetchEventListenerForBinding(binding);\n        if (!eventListener.hasBindings()) {\n            eventListener.disconnect();\n            this.removeMappedEventListenerFor(binding);\n        }\n    }\n    removeMappedEventListenerFor(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        eventListenerMap.delete(cacheKey);\n        if (eventListenerMap.size == 0)\n            this.eventListenerMaps.delete(eventTarget);\n    }\n    fetchEventListenerForBinding(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        return this.fetchEventListener(eventTarget, eventName, eventOptions);\n    }\n    fetchEventListener(eventTarget, eventName, eventOptions) {\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        let eventListener = eventListenerMap.get(cacheKey);\n        if (!eventListener) {\n            eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n            eventListenerMap.set(cacheKey, eventListener);\n        }\n        return eventListener;\n    }\n    createEventListener(eventTarget, eventName, eventOptions) {\n        const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n        if (this.started) {\n            eventListener.connect();\n        }\n        return eventListener;\n    }\n    fetchEventListenerMapForEventTarget(eventTarget) {\n        let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n        if (!eventListenerMap) {\n            eventListenerMap = new Map();\n            this.eventListenerMaps.set(eventTarget, eventListenerMap);\n        }\n        return eventListenerMap;\n    }\n    cacheKey(eventName, eventOptions) {\n        const parts = [eventName];\n        Object.keys(eventOptions)\n            .sort()\n            .forEach((key) => {\n            parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n        });\n        return parts.join(\":\");\n    }\n}\n\nconst defaultActionDescriptorFilters = {\n    stop({ event, value }) {\n        if (value)\n            event.stopPropagation();\n        return true;\n    },\n    prevent({ event, value }) {\n        if (value)\n            event.preventDefault();\n        return true;\n    },\n    self({ event, value, element }) {\n        if (value) {\n            return element === event.target;\n        }\n        else {\n            return true;\n        }\n    },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n    const source = descriptorString.trim();\n    const matches = source.match(descriptorPattern) || [];\n    let eventName = matches[2];\n    let keyFilter = matches[3];\n    if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n        eventName += `.${keyFilter}`;\n        keyFilter = \"\";\n    }\n    return {\n        eventTarget: parseEventTarget(matches[4]),\n        eventName,\n        eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n        identifier: matches[5],\n        methodName: matches[6],\n        keyFilter: matches[1] || keyFilter,\n    };\n}\nfunction parseEventTarget(eventTargetName) {\n    if (eventTargetName == \"window\") {\n        return window;\n    }\n    else if (eventTargetName == \"document\") {\n        return document;\n    }\n}\nfunction parseEventOptions(eventOptions) {\n    return eventOptions\n        .split(\":\")\n        .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n    if (eventTarget == window) {\n        return \"window\";\n    }\n    else if (eventTarget == document) {\n        return \"document\";\n    }\n}\n\nfunction camelize(value) {\n    return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n    return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n    return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n    return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n    return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n    return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n    return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n    constructor(element, index, descriptor, schema) {\n        this.element = element;\n        this.index = index;\n        this.eventTarget = descriptor.eventTarget || element;\n        this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n        this.eventOptions = descriptor.eventOptions || {};\n        this.identifier = descriptor.identifier || error(\"missing identifier\");\n        this.methodName = descriptor.methodName || error(\"missing method name\");\n        this.keyFilter = descriptor.keyFilter || \"\";\n        this.schema = schema;\n    }\n    static forToken(token, schema) {\n        return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n    }\n    toString() {\n        const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n        const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n        return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n    }\n    shouldIgnoreKeyboardEvent(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filters = this.keyFilter.split(\"+\");\n        if (this.keyFilterDissatisfied(event, filters)) {\n            return true;\n        }\n        const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n        if (!standardFilter) {\n            return false;\n        }\n        if (!hasProperty(this.keyMappings, standardFilter)) {\n            error(`contains unknown key filter: ${this.keyFilter}`);\n        }\n        return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n    }\n    shouldIgnoreMouseEvent(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filters = [this.keyFilter];\n        if (this.keyFilterDissatisfied(event, filters)) {\n            return true;\n        }\n        return false;\n    }\n    get params() {\n        const params = {};\n        const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n        for (const { name, value } of Array.from(this.element.attributes)) {\n            const match = name.match(pattern);\n            const key = match && match[1];\n            if (key) {\n                params[camelize(key)] = typecast(value);\n            }\n        }\n        return params;\n    }\n    get eventTargetName() {\n        return stringifyEventTarget(this.eventTarget);\n    }\n    get keyMappings() {\n        return this.schema.keyMappings;\n    }\n    keyFilterDissatisfied(event, filters) {\n        const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n        return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n    }\n}\nconst defaultEventNames = {\n    a: () => \"click\",\n    button: () => \"click\",\n    form: () => \"submit\",\n    details: () => \"toggle\",\n    input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n    select: () => \"change\",\n    textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n    const tagName = element.tagName.toLowerCase();\n    if (tagName in defaultEventNames) {\n        return defaultEventNames[tagName](element);\n    }\n}\nfunction error(message) {\n    throw new Error(message);\n}\nfunction typecast(value) {\n    try {\n        return JSON.parse(value);\n    }\n    catch (o_O) {\n        return value;\n    }\n}\n\nclass Binding {\n    constructor(context, action) {\n        this.context = context;\n        this.action = action;\n    }\n    get index() {\n        return this.action.index;\n    }\n    get eventTarget() {\n        return this.action.eventTarget;\n    }\n    get eventOptions() {\n        return this.action.eventOptions;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    handleEvent(event) {\n        const actionEvent = this.prepareActionEvent(event);\n        if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n            this.invokeWithEvent(actionEvent);\n        }\n    }\n    get eventName() {\n        return this.action.eventName;\n    }\n    get method() {\n        const method = this.controller[this.methodName];\n        if (typeof method == \"function\") {\n            return method;\n        }\n        throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n    }\n    applyEventModifiers(event) {\n        const { element } = this.action;\n        const { actionDescriptorFilters } = this.context.application;\n        const { controller } = this.context;\n        let passes = true;\n        for (const [name, value] of Object.entries(this.eventOptions)) {\n            if (name in actionDescriptorFilters) {\n                const filter = actionDescriptorFilters[name];\n                passes = passes && filter({ name, value, event, element, controller });\n            }\n            else {\n                continue;\n            }\n        }\n        return passes;\n    }\n    prepareActionEvent(event) {\n        return Object.assign(event, { params: this.action.params });\n    }\n    invokeWithEvent(event) {\n        const { target, currentTarget } = event;\n        try {\n            this.method.call(this.controller, event);\n            this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n        }\n        catch (error) {\n            const { identifier, controller, element, index } = this;\n            const detail = { identifier, controller, element, index, event };\n            this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n        }\n    }\n    willBeInvokedByEvent(event) {\n        const eventTarget = event.target;\n        if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n            return false;\n        }\n        if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n            return false;\n        }\n        if (this.element === eventTarget) {\n            return true;\n        }\n        else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n            return this.scope.containsElement(eventTarget);\n        }\n        else {\n            return this.scope.containsElement(this.action.element);\n        }\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    get methodName() {\n        return this.action.methodName;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nclass ElementObserver {\n    constructor(element, delegate) {\n        this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n        this.element = element;\n        this.started = false;\n        this.delegate = delegate;\n        this.elements = new Set();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.refresh();\n        }\n    }\n    pause(callback) {\n        if (this.started) {\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n        callback();\n        if (!this.started) {\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            const matches = new Set(this.matchElementsInTree());\n            for (const element of Array.from(this.elements)) {\n                if (!matches.has(element)) {\n                    this.removeElement(element);\n                }\n            }\n            for (const element of Array.from(matches)) {\n                this.addElement(element);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        if (mutation.type == \"attributes\") {\n            this.processAttributeChange(mutation.target, mutation.attributeName);\n        }\n        else if (mutation.type == \"childList\") {\n            this.processRemovedNodes(mutation.removedNodes);\n            this.processAddedNodes(mutation.addedNodes);\n        }\n    }\n    processAttributeChange(element, attributeName) {\n        if (this.elements.has(element)) {\n            if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n                this.delegate.elementAttributeChanged(element, attributeName);\n            }\n            else {\n                this.removeElement(element);\n            }\n        }\n        else if (this.matchElement(element)) {\n            this.addElement(element);\n        }\n    }\n    processRemovedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element) {\n                this.processTree(element, this.removeElement);\n            }\n        }\n    }\n    processAddedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element && this.elementIsActive(element)) {\n                this.processTree(element, this.addElement);\n            }\n        }\n    }\n    matchElement(element) {\n        return this.delegate.matchElement(element);\n    }\n    matchElementsInTree(tree = this.element) {\n        return this.delegate.matchElementsInTree(tree);\n    }\n    processTree(tree, processor) {\n        for (const element of this.matchElementsInTree(tree)) {\n            processor.call(this, element);\n        }\n    }\n    elementFromNode(node) {\n        if (node.nodeType == Node.ELEMENT_NODE) {\n            return node;\n        }\n    }\n    elementIsActive(element) {\n        if (element.isConnected != this.element.isConnected) {\n            return false;\n        }\n        else {\n            return this.element.contains(element);\n        }\n    }\n    addElement(element) {\n        if (!this.elements.has(element)) {\n            if (this.elementIsActive(element)) {\n                this.elements.add(element);\n                if (this.delegate.elementMatched) {\n                    this.delegate.elementMatched(element);\n                }\n            }\n        }\n    }\n    removeElement(element) {\n        if (this.elements.has(element)) {\n            this.elements.delete(element);\n            if (this.delegate.elementUnmatched) {\n                this.delegate.elementUnmatched(element);\n            }\n        }\n    }\n}\n\nclass AttributeObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeName = attributeName;\n        this.delegate = delegate;\n        this.elementObserver = new ElementObserver(element, this);\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    get selector() {\n        return `[${this.attributeName}]`;\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    matchElement(element) {\n        return element.hasAttribute(this.attributeName);\n    }\n    matchElementsInTree(tree) {\n        const match = this.matchElement(tree) ? [tree] : [];\n        const matches = Array.from(tree.querySelectorAll(this.selector));\n        return match.concat(matches);\n    }\n    elementMatched(element) {\n        if (this.delegate.elementMatchedAttribute) {\n            this.delegate.elementMatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementUnmatched(element) {\n        if (this.delegate.elementUnmatchedAttribute) {\n            this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementAttributeChanged(element, attributeName) {\n        if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n            this.delegate.elementAttributeValueChanged(element, attributeName);\n        }\n    }\n}\n\nfunction add(map, key, value) {\n    fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n    fetch(map, key).delete(value);\n    prune(map, key);\n}\nfunction fetch(map, key) {\n    let values = map.get(key);\n    if (!values) {\n        values = new Set();\n        map.set(key, values);\n    }\n    return values;\n}\nfunction prune(map, key) {\n    const values = map.get(key);\n    if (values != null && values.size == 0) {\n        map.delete(key);\n    }\n}\n\nclass Multimap {\n    constructor() {\n        this.valuesByKey = new Map();\n    }\n    get keys() {\n        return Array.from(this.valuesByKey.keys());\n    }\n    get values() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n    }\n    get size() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((size, set) => size + set.size, 0);\n    }\n    add(key, value) {\n        add(this.valuesByKey, key, value);\n    }\n    delete(key, value) {\n        del(this.valuesByKey, key, value);\n    }\n    has(key, value) {\n        const values = this.valuesByKey.get(key);\n        return values != null && values.has(value);\n    }\n    hasKey(key) {\n        return this.valuesByKey.has(key);\n    }\n    hasValue(value) {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.some((set) => set.has(value));\n    }\n    getValuesForKey(key) {\n        const values = this.valuesByKey.get(key);\n        return values ? Array.from(values) : [];\n    }\n    getKeysForValue(value) {\n        return Array.from(this.valuesByKey)\n            .filter(([_key, values]) => values.has(value))\n            .map(([key, _values]) => key);\n    }\n}\n\nclass IndexedMultimap extends Multimap {\n    constructor() {\n        super();\n        this.keysByValue = new Map();\n    }\n    get values() {\n        return Array.from(this.keysByValue.keys());\n    }\n    add(key, value) {\n        super.add(key, value);\n        add(this.keysByValue, value, key);\n    }\n    delete(key, value) {\n        super.delete(key, value);\n        del(this.keysByValue, value, key);\n    }\n    hasValue(value) {\n        return this.keysByValue.has(value);\n    }\n    getKeysForValue(value) {\n        const set = this.keysByValue.get(value);\n        return set ? Array.from(set) : [];\n    }\n}\n\nclass SelectorObserver {\n    constructor(element, selector, delegate, details) {\n        this._selector = selector;\n        this.details = details;\n        this.elementObserver = new ElementObserver(element, this);\n        this.delegate = delegate;\n        this.matchesByElement = new Multimap();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    get selector() {\n        return this._selector;\n    }\n    set selector(selector) {\n        this._selector = selector;\n        this.refresh();\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    matchElement(element) {\n        const { selector } = this;\n        if (selector) {\n            const matches = element.matches(selector);\n            if (this.delegate.selectorMatchElement) {\n                return matches && this.delegate.selectorMatchElement(element, this.details);\n            }\n            return matches;\n        }\n        else {\n            return false;\n        }\n    }\n    matchElementsInTree(tree) {\n        const { selector } = this;\n        if (selector) {\n            const match = this.matchElement(tree) ? [tree] : [];\n            const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n            return match.concat(matches);\n        }\n        else {\n            return [];\n        }\n    }\n    elementMatched(element) {\n        const { selector } = this;\n        if (selector) {\n            this.selectorMatched(element, selector);\n        }\n    }\n    elementUnmatched(element) {\n        const selectors = this.matchesByElement.getKeysForValue(element);\n        for (const selector of selectors) {\n            this.selectorUnmatched(element, selector);\n        }\n    }\n    elementAttributeChanged(element, _attributeName) {\n        const { selector } = this;\n        if (selector) {\n            const matches = this.matchElement(element);\n            const matchedBefore = this.matchesByElement.has(selector, element);\n            if (matches && !matchedBefore) {\n                this.selectorMatched(element, selector);\n            }\n            else if (!matches && matchedBefore) {\n                this.selectorUnmatched(element, selector);\n            }\n        }\n    }\n    selectorMatched(element, selector) {\n        this.delegate.selectorMatched(element, selector, this.details);\n        this.matchesByElement.add(selector, element);\n    }\n    selectorUnmatched(element, selector) {\n        this.delegate.selectorUnmatched(element, selector, this.details);\n        this.matchesByElement.delete(selector, element);\n    }\n}\n\nclass StringMapObserver {\n    constructor(element, delegate) {\n        this.element = element;\n        this.delegate = delegate;\n        this.started = false;\n        this.stringMap = new Map();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n            this.refresh();\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            for (const attributeName of this.knownAttributeNames) {\n                this.refreshAttribute(attributeName, null);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        const attributeName = mutation.attributeName;\n        if (attributeName) {\n            this.refreshAttribute(attributeName, mutation.oldValue);\n        }\n    }\n    refreshAttribute(attributeName, oldValue) {\n        const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n        if (key != null) {\n            if (!this.stringMap.has(attributeName)) {\n                this.stringMapKeyAdded(key, attributeName);\n            }\n            const value = this.element.getAttribute(attributeName);\n            if (this.stringMap.get(attributeName) != value) {\n                this.stringMapValueChanged(value, key, oldValue);\n            }\n            if (value == null) {\n                const oldValue = this.stringMap.get(attributeName);\n                this.stringMap.delete(attributeName);\n                if (oldValue)\n                    this.stringMapKeyRemoved(key, attributeName, oldValue);\n            }\n            else {\n                this.stringMap.set(attributeName, value);\n            }\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        if (this.delegate.stringMapKeyAdded) {\n            this.delegate.stringMapKeyAdded(key, attributeName);\n        }\n    }\n    stringMapValueChanged(value, key, oldValue) {\n        if (this.delegate.stringMapValueChanged) {\n            this.delegate.stringMapValueChanged(value, key, oldValue);\n        }\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        if (this.delegate.stringMapKeyRemoved) {\n            this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n        }\n    }\n    get knownAttributeNames() {\n        return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n    }\n    get currentAttributeNames() {\n        return Array.from(this.element.attributes).map((attribute) => attribute.name);\n    }\n    get recordedAttributeNames() {\n        return Array.from(this.stringMap.keys());\n    }\n}\n\nclass TokenListObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeObserver = new AttributeObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.tokensByElement = new Multimap();\n    }\n    get started() {\n        return this.attributeObserver.started;\n    }\n    start() {\n        this.attributeObserver.start();\n    }\n    pause(callback) {\n        this.attributeObserver.pause(callback);\n    }\n    stop() {\n        this.attributeObserver.stop();\n    }\n    refresh() {\n        this.attributeObserver.refresh();\n    }\n    get element() {\n        return this.attributeObserver.element;\n    }\n    get attributeName() {\n        return this.attributeObserver.attributeName;\n    }\n    elementMatchedAttribute(element) {\n        this.tokensMatched(this.readTokensForElement(element));\n    }\n    elementAttributeValueChanged(element) {\n        const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n        this.tokensUnmatched(unmatchedTokens);\n        this.tokensMatched(matchedTokens);\n    }\n    elementUnmatchedAttribute(element) {\n        this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n    }\n    tokensMatched(tokens) {\n        tokens.forEach((token) => this.tokenMatched(token));\n    }\n    tokensUnmatched(tokens) {\n        tokens.forEach((token) => this.tokenUnmatched(token));\n    }\n    tokenMatched(token) {\n        this.delegate.tokenMatched(token);\n        this.tokensByElement.add(token.element, token);\n    }\n    tokenUnmatched(token) {\n        this.delegate.tokenUnmatched(token);\n        this.tokensByElement.delete(token.element, token);\n    }\n    refreshTokensForElement(element) {\n        const previousTokens = this.tokensByElement.getValuesForKey(element);\n        const currentTokens = this.readTokensForElement(element);\n        const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n        if (firstDifferingIndex == -1) {\n            return [[], []];\n        }\n        else {\n            return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n        }\n    }\n    readTokensForElement(element) {\n        const attributeName = this.attributeName;\n        const tokenString = element.getAttribute(attributeName) || \"\";\n        return parseTokenString(tokenString, element, attributeName);\n    }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n    return tokenString\n        .trim()\n        .split(/\\s+/)\n        .filter((content) => content.length)\n        .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n    const length = Math.max(left.length, right.length);\n    return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n    return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n    constructor(element, attributeName, delegate) {\n        this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.parseResultsByToken = new WeakMap();\n        this.valuesByTokenByElement = new WeakMap();\n    }\n    get started() {\n        return this.tokenListObserver.started;\n    }\n    start() {\n        this.tokenListObserver.start();\n    }\n    stop() {\n        this.tokenListObserver.stop();\n    }\n    refresh() {\n        this.tokenListObserver.refresh();\n    }\n    get element() {\n        return this.tokenListObserver.element;\n    }\n    get attributeName() {\n        return this.tokenListObserver.attributeName;\n    }\n    tokenMatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).set(token, value);\n            this.delegate.elementMatchedValue(element, value);\n        }\n    }\n    tokenUnmatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).delete(token);\n            this.delegate.elementUnmatchedValue(element, value);\n        }\n    }\n    fetchParseResultForToken(token) {\n        let parseResult = this.parseResultsByToken.get(token);\n        if (!parseResult) {\n            parseResult = this.parseToken(token);\n            this.parseResultsByToken.set(token, parseResult);\n        }\n        return parseResult;\n    }\n    fetchValuesByTokenForElement(element) {\n        let valuesByToken = this.valuesByTokenByElement.get(element);\n        if (!valuesByToken) {\n            valuesByToken = new Map();\n            this.valuesByTokenByElement.set(element, valuesByToken);\n        }\n        return valuesByToken;\n    }\n    parseToken(token) {\n        try {\n            const value = this.delegate.parseValueForToken(token);\n            return { value };\n        }\n        catch (error) {\n            return { error };\n        }\n    }\n}\n\nclass BindingObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.bindingsByAction = new Map();\n    }\n    start() {\n        if (!this.valueListObserver) {\n            this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n            this.valueListObserver.start();\n        }\n    }\n    stop() {\n        if (this.valueListObserver) {\n            this.valueListObserver.stop();\n            delete this.valueListObserver;\n            this.disconnectAllActions();\n        }\n    }\n    get element() {\n        return this.context.element;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get actionAttribute() {\n        return this.schema.actionAttribute;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get bindings() {\n        return Array.from(this.bindingsByAction.values());\n    }\n    connectAction(action) {\n        const binding = new Binding(this.context, action);\n        this.bindingsByAction.set(action, binding);\n        this.delegate.bindingConnected(binding);\n    }\n    disconnectAction(action) {\n        const binding = this.bindingsByAction.get(action);\n        if (binding) {\n            this.bindingsByAction.delete(action);\n            this.delegate.bindingDisconnected(binding);\n        }\n    }\n    disconnectAllActions() {\n        this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n        this.bindingsByAction.clear();\n    }\n    parseValueForToken(token) {\n        const action = Action.forToken(token, this.schema);\n        if (action.identifier == this.identifier) {\n            return action;\n        }\n    }\n    elementMatchedValue(element, action) {\n        this.connectAction(action);\n    }\n    elementUnmatchedValue(element, action) {\n        this.disconnectAction(action);\n    }\n}\n\nclass ValueObserver {\n    constructor(context, receiver) {\n        this.context = context;\n        this.receiver = receiver;\n        this.stringMapObserver = new StringMapObserver(this.element, this);\n        this.valueDescriptorMap = this.controller.valueDescriptorMap;\n    }\n    start() {\n        this.stringMapObserver.start();\n        this.invokeChangedCallbacksForDefaultValues();\n    }\n    stop() {\n        this.stringMapObserver.stop();\n    }\n    get element() {\n        return this.context.element;\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    getStringMapKeyForAttribute(attributeName) {\n        if (attributeName in this.valueDescriptorMap) {\n            return this.valueDescriptorMap[attributeName].name;\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        const descriptor = this.valueDescriptorMap[attributeName];\n        if (!this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n        }\n    }\n    stringMapValueChanged(value, name, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[name];\n        if (value === null)\n            return;\n        if (oldValue === null) {\n            oldValue = descriptor.writer(descriptor.defaultValue);\n        }\n        this.invokeChangedCallback(name, value, oldValue);\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[key];\n        if (this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n        }\n        else {\n            this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n        }\n    }\n    invokeChangedCallbacksForDefaultValues() {\n        for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n            if (defaultValue != undefined && !this.controller.data.has(key)) {\n                this.invokeChangedCallback(name, writer(defaultValue), undefined);\n            }\n        }\n    }\n    invokeChangedCallback(name, rawValue, rawOldValue) {\n        const changedMethodName = `${name}Changed`;\n        const changedMethod = this.receiver[changedMethodName];\n        if (typeof changedMethod == \"function\") {\n            const descriptor = this.valueDescriptorNameMap[name];\n            try {\n                const value = descriptor.reader(rawValue);\n                let oldValue = rawOldValue;\n                if (rawOldValue) {\n                    oldValue = descriptor.reader(rawOldValue);\n                }\n                changedMethod.call(this.receiver, value, oldValue);\n            }\n            catch (error) {\n                if (error instanceof TypeError) {\n                    error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n                }\n                throw error;\n            }\n        }\n    }\n    get valueDescriptors() {\n        const { valueDescriptorMap } = this;\n        return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n    }\n    get valueDescriptorNameMap() {\n        const descriptors = {};\n        Object.keys(this.valueDescriptorMap).forEach((key) => {\n            const descriptor = this.valueDescriptorMap[key];\n            descriptors[descriptor.name] = descriptor;\n        });\n        return descriptors;\n    }\n    hasValue(attributeName) {\n        const descriptor = this.valueDescriptorNameMap[attributeName];\n        const hasMethodName = `has${capitalize(descriptor.name)}`;\n        return this.receiver[hasMethodName];\n    }\n}\n\nclass TargetObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.targetsByName = new Multimap();\n    }\n    start() {\n        if (!this.tokenListObserver) {\n            this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n            this.tokenListObserver.start();\n        }\n    }\n    stop() {\n        if (this.tokenListObserver) {\n            this.disconnectAllTargets();\n            this.tokenListObserver.stop();\n            delete this.tokenListObserver;\n        }\n    }\n    tokenMatched({ element, content: name }) {\n        if (this.scope.containsElement(element)) {\n            this.connectTarget(element, name);\n        }\n    }\n    tokenUnmatched({ element, content: name }) {\n        this.disconnectTarget(element, name);\n    }\n    connectTarget(element, name) {\n        var _a;\n        if (!this.targetsByName.has(name, element)) {\n            this.targetsByName.add(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n        }\n    }\n    disconnectTarget(element, name) {\n        var _a;\n        if (this.targetsByName.has(name, element)) {\n            this.targetsByName.delete(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n        }\n    }\n    disconnectAllTargets() {\n        for (const name of this.targetsByName.keys) {\n            for (const element of this.targetsByName.getValuesForKey(name)) {\n                this.disconnectTarget(element, name);\n            }\n        }\n    }\n    get attributeName() {\n        return `data-${this.context.identifier}-target`;\n    }\n    get element() {\n        return this.context.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return Array.from(ancestors.reduce((values, constructor) => {\n        getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n        return values;\n    }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return ancestors.reduce((pairs, constructor) => {\n        pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n        return pairs;\n    }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n    const ancestors = [];\n    while (constructor) {\n        ancestors.push(constructor);\n        constructor = Object.getPrototypeOf(constructor);\n    }\n    return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n    constructor(context, delegate) {\n        this.started = false;\n        this.context = context;\n        this.delegate = delegate;\n        this.outletsByName = new Multimap();\n        this.outletElementsByName = new Multimap();\n        this.selectorObserverMap = new Map();\n        this.attributeObserverMap = new Map();\n    }\n    start() {\n        if (!this.started) {\n            this.outletDefinitions.forEach((outletName) => {\n                this.setupSelectorObserverForOutlet(outletName);\n                this.setupAttributeObserverForOutlet(outletName);\n            });\n            this.started = true;\n            this.dependentContexts.forEach((context) => context.refresh());\n        }\n    }\n    refresh() {\n        this.selectorObserverMap.forEach((observer) => observer.refresh());\n        this.attributeObserverMap.forEach((observer) => observer.refresh());\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.disconnectAllOutlets();\n            this.stopSelectorObservers();\n            this.stopAttributeObservers();\n        }\n    }\n    stopSelectorObservers() {\n        if (this.selectorObserverMap.size > 0) {\n            this.selectorObserverMap.forEach((observer) => observer.stop());\n            this.selectorObserverMap.clear();\n        }\n    }\n    stopAttributeObservers() {\n        if (this.attributeObserverMap.size > 0) {\n            this.attributeObserverMap.forEach((observer) => observer.stop());\n            this.attributeObserverMap.clear();\n        }\n    }\n    selectorMatched(element, _selector, { outletName }) {\n        const outlet = this.getOutlet(element, outletName);\n        if (outlet) {\n            this.connectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorUnmatched(element, _selector, { outletName }) {\n        const outlet = this.getOutletFromMap(element, outletName);\n        if (outlet) {\n            this.disconnectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorMatchElement(element, { outletName }) {\n        const selector = this.selector(outletName);\n        const hasOutlet = this.hasOutlet(element, outletName);\n        const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n        if (selector) {\n            return hasOutlet && hasOutletController && element.matches(selector);\n        }\n        else {\n            return false;\n        }\n    }\n    elementMatchedAttribute(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    elementAttributeValueChanged(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    elementUnmatchedAttribute(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    connectOutlet(outlet, element, outletName) {\n        var _a;\n        if (!this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.add(outletName, outlet);\n            this.outletElementsByName.add(outletName, element);\n            (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n        }\n    }\n    disconnectOutlet(outlet, element, outletName) {\n        var _a;\n        if (this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.delete(outletName, outlet);\n            this.outletElementsByName.delete(outletName, element);\n            (_a = this.selectorObserverMap\n                .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n        }\n    }\n    disconnectAllOutlets() {\n        for (const outletName of this.outletElementsByName.keys) {\n            for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n                for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n                    this.disconnectOutlet(outlet, element, outletName);\n                }\n            }\n        }\n    }\n    updateSelectorObserverForOutlet(outletName) {\n        const observer = this.selectorObserverMap.get(outletName);\n        if (observer) {\n            observer.selector = this.selector(outletName);\n        }\n    }\n    setupSelectorObserverForOutlet(outletName) {\n        const selector = this.selector(outletName);\n        const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n        this.selectorObserverMap.set(outletName, selectorObserver);\n        selectorObserver.start();\n    }\n    setupAttributeObserverForOutlet(outletName) {\n        const attributeName = this.attributeNameForOutletName(outletName);\n        const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n        this.attributeObserverMap.set(outletName, attributeObserver);\n        attributeObserver.start();\n    }\n    selector(outletName) {\n        return this.scope.outlets.getSelectorForOutletName(outletName);\n    }\n    attributeNameForOutletName(outletName) {\n        return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n    }\n    getOutletNameFromOutletAttributeName(attributeName) {\n        return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n    }\n    get outletDependencies() {\n        const dependencies = new Multimap();\n        this.router.modules.forEach((module) => {\n            const constructor = module.definition.controllerConstructor;\n            const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n            outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n        });\n        return dependencies;\n    }\n    get outletDefinitions() {\n        return this.outletDependencies.getKeysForValue(this.identifier);\n    }\n    get dependentControllerIdentifiers() {\n        return this.outletDependencies.getValuesForKey(this.identifier);\n    }\n    get dependentContexts() {\n        const identifiers = this.dependentControllerIdentifiers;\n        return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n    }\n    hasOutlet(element, outletName) {\n        return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n    }\n    getOutlet(element, outletName) {\n        return this.application.getControllerForElementAndIdentifier(element, outletName);\n    }\n    getOutletFromMap(element, outletName) {\n        return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get router() {\n        return this.application.router;\n    }\n}\n\nclass Context {\n    constructor(module, scope) {\n        this.logDebugActivity = (functionName, detail = {}) => {\n            const { identifier, controller, element } = this;\n            detail = Object.assign({ identifier, controller, element }, detail);\n            this.application.logDebugActivity(this.identifier, functionName, detail);\n        };\n        this.module = module;\n        this.scope = scope;\n        this.controller = new module.controllerConstructor(this);\n        this.bindingObserver = new BindingObserver(this, this.dispatcher);\n        this.valueObserver = new ValueObserver(this, this.controller);\n        this.targetObserver = new TargetObserver(this, this);\n        this.outletObserver = new OutletObserver(this, this);\n        try {\n            this.controller.initialize();\n            this.logDebugActivity(\"initialize\");\n        }\n        catch (error) {\n            this.handleError(error, \"initializing controller\");\n        }\n    }\n    connect() {\n        this.bindingObserver.start();\n        this.valueObserver.start();\n        this.targetObserver.start();\n        this.outletObserver.start();\n        try {\n            this.controller.connect();\n            this.logDebugActivity(\"connect\");\n        }\n        catch (error) {\n            this.handleError(error, \"connecting controller\");\n        }\n    }\n    refresh() {\n        this.outletObserver.refresh();\n    }\n    disconnect() {\n        try {\n            this.controller.disconnect();\n            this.logDebugActivity(\"disconnect\");\n        }\n        catch (error) {\n            this.handleError(error, \"disconnecting controller\");\n        }\n        this.outletObserver.stop();\n        this.targetObserver.stop();\n        this.valueObserver.stop();\n        this.bindingObserver.stop();\n    }\n    get application() {\n        return this.module.application;\n    }\n    get identifier() {\n        return this.module.identifier;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get dispatcher() {\n        return this.application.dispatcher;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get parentElement() {\n        return this.element.parentElement;\n    }\n    handleError(error, message, detail = {}) {\n        const { identifier, controller, element } = this;\n        detail = Object.assign({ identifier, controller, element }, detail);\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    targetConnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetConnected`, element);\n    }\n    targetDisconnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n    }\n    outletConnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n    }\n    outletDisconnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n    }\n    invokeControllerMethod(methodName, ...args) {\n        const controller = this.controller;\n        if (typeof controller[methodName] == \"function\") {\n            controller[methodName](...args);\n        }\n    }\n}\n\nfunction bless(constructor) {\n    return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n    const shadowConstructor = extend(constructor);\n    const shadowProperties = getShadowProperties(constructor.prototype, properties);\n    Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n    return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n    const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n    return blessings.reduce((blessedProperties, blessing) => {\n        const properties = blessing(constructor);\n        for (const key in properties) {\n            const descriptor = blessedProperties[key] || {};\n            blessedProperties[key] = Object.assign(descriptor, properties[key]);\n        }\n        return blessedProperties;\n    }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n    return getOwnKeys(properties).reduce((shadowProperties, key) => {\n        const descriptor = getShadowedDescriptor(prototype, properties, key);\n        if (descriptor) {\n            Object.assign(shadowProperties, { [key]: descriptor });\n        }\n        return shadowProperties;\n    }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n    const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n    const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n    if (!shadowedByValue) {\n        const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n        if (shadowingDescriptor) {\n            descriptor.get = shadowingDescriptor.get || descriptor.get;\n            descriptor.set = shadowingDescriptor.set || descriptor.set;\n        }\n        return descriptor;\n    }\n}\nconst getOwnKeys = (() => {\n    if (typeof Object.getOwnPropertySymbols == \"function\") {\n        return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n    }\n    else {\n        return Object.getOwnPropertyNames;\n    }\n})();\nconst extend = (() => {\n    function extendWithReflect(constructor) {\n        function extended() {\n            return Reflect.construct(constructor, arguments, new.target);\n        }\n        extended.prototype = Object.create(constructor.prototype, {\n            constructor: { value: extended },\n        });\n        Reflect.setPrototypeOf(extended, constructor);\n        return extended;\n    }\n    function testReflectExtension() {\n        const a = function () {\n            this.a.call(this);\n        };\n        const b = extendWithReflect(a);\n        b.prototype.a = function () { };\n        return new b();\n    }\n    try {\n        testReflectExtension();\n        return extendWithReflect;\n    }\n    catch (error) {\n        return (constructor) => class extended extends constructor {\n        };\n    }\n})();\n\nfunction blessDefinition(definition) {\n    return {\n        identifier: definition.identifier,\n        controllerConstructor: bless(definition.controllerConstructor),\n    };\n}\n\nclass Module {\n    constructor(application, definition) {\n        this.application = application;\n        this.definition = blessDefinition(definition);\n        this.contextsByScope = new WeakMap();\n        this.connectedContexts = new Set();\n    }\n    get identifier() {\n        return this.definition.identifier;\n    }\n    get controllerConstructor() {\n        return this.definition.controllerConstructor;\n    }\n    get contexts() {\n        return Array.from(this.connectedContexts);\n    }\n    connectContextForScope(scope) {\n        const context = this.fetchContextForScope(scope);\n        this.connectedContexts.add(context);\n        context.connect();\n    }\n    disconnectContextForScope(scope) {\n        const context = this.contextsByScope.get(scope);\n        if (context) {\n            this.connectedContexts.delete(context);\n            context.disconnect();\n        }\n    }\n    fetchContextForScope(scope) {\n        let context = this.contextsByScope.get(scope);\n        if (!context) {\n            context = new Context(this, scope);\n            this.contextsByScope.set(scope, context);\n        }\n        return context;\n    }\n}\n\nclass ClassMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    has(name) {\n        return this.data.has(this.getDataKey(name));\n    }\n    get(name) {\n        return this.getAll(name)[0];\n    }\n    getAll(name) {\n        const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n        return tokenize(tokenString);\n    }\n    getAttributeName(name) {\n        return this.data.getAttributeNameForKey(this.getDataKey(name));\n    }\n    getDataKey(name) {\n        return `${name}-class`;\n    }\n    get data() {\n        return this.scope.data;\n    }\n}\n\nclass DataMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.getAttribute(name);\n    }\n    set(key, value) {\n        const name = this.getAttributeNameForKey(key);\n        this.element.setAttribute(name, value);\n        return this.get(key);\n    }\n    has(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.hasAttribute(name);\n    }\n    delete(key) {\n        if (this.has(key)) {\n            const name = this.getAttributeNameForKey(key);\n            this.element.removeAttribute(name);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    getAttributeNameForKey(key) {\n        return `data-${this.identifier}-${dasherize(key)}`;\n    }\n}\n\nclass Guide {\n    constructor(logger) {\n        this.warnedKeysByObject = new WeakMap();\n        this.logger = logger;\n    }\n    warn(object, key, message) {\n        let warnedKeys = this.warnedKeysByObject.get(object);\n        if (!warnedKeys) {\n            warnedKeys = new Set();\n            this.warnedKeysByObject.set(object, warnedKeys);\n        }\n        if (!warnedKeys.has(key)) {\n            warnedKeys.add(key);\n            this.logger.warn(message, object);\n        }\n    }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n    return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(targetName) {\n        return this.find(targetName) != null;\n    }\n    find(...targetNames) {\n        return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n    }\n    findAll(...targetNames) {\n        return targetNames.reduce((targets, targetName) => [\n            ...targets,\n            ...this.findAllTargets(targetName),\n            ...this.findAllLegacyTargets(targetName),\n        ], []);\n    }\n    findTarget(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findElement(selector);\n    }\n    findAllTargets(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector);\n    }\n    getSelectorForTargetName(targetName) {\n        const attributeName = this.schema.targetAttributeForScope(this.identifier);\n        return attributeValueContainsToken(attributeName, targetName);\n    }\n    findLegacyTarget(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.deprecate(this.scope.findElement(selector), targetName);\n    }\n    findAllLegacyTargets(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n    }\n    getLegacySelectorForTargetName(targetName) {\n        const targetDescriptor = `${this.identifier}.${targetName}`;\n        return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n    }\n    deprecate(element, targetName) {\n        if (element) {\n            const { identifier } = this;\n            const attributeName = this.schema.targetAttribute;\n            const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n            this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n                `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n        }\n        return element;\n    }\n    get guide() {\n        return this.scope.guide;\n    }\n}\n\nclass OutletSet {\n    constructor(scope, controllerElement) {\n        this.scope = scope;\n        this.controllerElement = controllerElement;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(outletName) {\n        return this.find(outletName) != null;\n    }\n    find(...outletNames) {\n        return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n    }\n    findAll(...outletNames) {\n        return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n    }\n    getSelectorForOutletName(outletName) {\n        const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n        return this.controllerElement.getAttribute(attributeName);\n    }\n    findOutlet(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        if (selector)\n            return this.findElement(selector, outletName);\n    }\n    findAllOutlets(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        return selector ? this.findAllElements(selector, outletName) : [];\n    }\n    findElement(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n    }\n    findAllElements(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName));\n    }\n    matchesElement(element, selector, outletName) {\n        const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n        return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n    }\n}\n\nclass Scope {\n    constructor(schema, element, identifier, logger) {\n        this.targets = new TargetSet(this);\n        this.classes = new ClassMap(this);\n        this.data = new DataMap(this);\n        this.containsElement = (element) => {\n            return element.closest(this.controllerSelector) === this.element;\n        };\n        this.schema = schema;\n        this.element = element;\n        this.identifier = identifier;\n        this.guide = new Guide(logger);\n        this.outlets = new OutletSet(this.documentScope, element);\n    }\n    findElement(selector) {\n        return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n    }\n    findAllElements(selector) {\n        return [\n            ...(this.element.matches(selector) ? [this.element] : []),\n            ...this.queryElements(selector).filter(this.containsElement),\n        ];\n    }\n    queryElements(selector) {\n        return Array.from(this.element.querySelectorAll(selector));\n    }\n    get controllerSelector() {\n        return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n    }\n    get isDocumentScope() {\n        return this.element === document.documentElement;\n    }\n    get documentScope() {\n        return this.isDocumentScope\n            ? this\n            : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n    }\n}\n\nclass ScopeObserver {\n    constructor(element, schema, delegate) {\n        this.element = element;\n        this.schema = schema;\n        this.delegate = delegate;\n        this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n        this.scopesByIdentifierByElement = new WeakMap();\n        this.scopeReferenceCounts = new WeakMap();\n    }\n    start() {\n        this.valueListObserver.start();\n    }\n    stop() {\n        this.valueListObserver.stop();\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    parseValueForToken(token) {\n        const { element, content: identifier } = token;\n        return this.parseValueForElementAndIdentifier(element, identifier);\n    }\n    parseValueForElementAndIdentifier(element, identifier) {\n        const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n        let scope = scopesByIdentifier.get(identifier);\n        if (!scope) {\n            scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n            scopesByIdentifier.set(identifier, scope);\n        }\n        return scope;\n    }\n    elementMatchedValue(element, value) {\n        const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n        this.scopeReferenceCounts.set(value, referenceCount);\n        if (referenceCount == 1) {\n            this.delegate.scopeConnected(value);\n        }\n    }\n    elementUnmatchedValue(element, value) {\n        const referenceCount = this.scopeReferenceCounts.get(value);\n        if (referenceCount) {\n            this.scopeReferenceCounts.set(value, referenceCount - 1);\n            if (referenceCount == 1) {\n                this.delegate.scopeDisconnected(value);\n            }\n        }\n    }\n    fetchScopesByIdentifierForElement(element) {\n        let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n        if (!scopesByIdentifier) {\n            scopesByIdentifier = new Map();\n            this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n        }\n        return scopesByIdentifier;\n    }\n}\n\nclass Router {\n    constructor(application) {\n        this.application = application;\n        this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n        this.scopesByIdentifier = new Multimap();\n        this.modulesByIdentifier = new Map();\n    }\n    get element() {\n        return this.application.element;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get logger() {\n        return this.application.logger;\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    get modules() {\n        return Array.from(this.modulesByIdentifier.values());\n    }\n    get contexts() {\n        return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n    }\n    start() {\n        this.scopeObserver.start();\n    }\n    stop() {\n        this.scopeObserver.stop();\n    }\n    loadDefinition(definition) {\n        this.unloadIdentifier(definition.identifier);\n        const module = new Module(this.application, definition);\n        this.connectModule(module);\n        const afterLoad = definition.controllerConstructor.afterLoad;\n        if (afterLoad) {\n            afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n        }\n    }\n    unloadIdentifier(identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            this.disconnectModule(module);\n        }\n    }\n    getContextForElementAndIdentifier(element, identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            return module.contexts.find((context) => context.element == element);\n        }\n    }\n    proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n        const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n        if (scope) {\n            this.scopeObserver.elementMatchedValue(scope.element, scope);\n        }\n        else {\n            console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n        }\n    }\n    handleError(error, message, detail) {\n        this.application.handleError(error, message, detail);\n    }\n    createScopeForElementAndIdentifier(element, identifier) {\n        return new Scope(this.schema, element, identifier, this.logger);\n    }\n    scopeConnected(scope) {\n        this.scopesByIdentifier.add(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.connectContextForScope(scope);\n        }\n    }\n    scopeDisconnected(scope) {\n        this.scopesByIdentifier.delete(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.disconnectContextForScope(scope);\n        }\n    }\n    connectModule(module) {\n        this.modulesByIdentifier.set(module.identifier, module);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.connectContextForScope(scope));\n    }\n    disconnectModule(module) {\n        this.modulesByIdentifier.delete(module.identifier);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.disconnectContextForScope(scope));\n    }\n}\n\nconst defaultSchema = {\n    controllerAttribute: \"data-controller\",\n    actionAttribute: \"data-action\",\n    targetAttribute: \"data-target\",\n    targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n    outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n    keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n    return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n    constructor(element = document.documentElement, schema = defaultSchema) {\n        this.logger = console;\n        this.debug = false;\n        this.logDebugActivity = (identifier, functionName, detail = {}) => {\n            if (this.debug) {\n                this.logFormattedMessage(identifier, functionName, detail);\n            }\n        };\n        this.element = element;\n        this.schema = schema;\n        this.dispatcher = new Dispatcher(this);\n        this.router = new Router(this);\n        this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n    }\n    static start(element, schema) {\n        const application = new this(element, schema);\n        application.start();\n        return application;\n    }\n    async start() {\n        await domReady();\n        this.logDebugActivity(\"application\", \"starting\");\n        this.dispatcher.start();\n        this.router.start();\n        this.logDebugActivity(\"application\", \"start\");\n    }\n    stop() {\n        this.logDebugActivity(\"application\", \"stopping\");\n        this.dispatcher.stop();\n        this.router.stop();\n        this.logDebugActivity(\"application\", \"stop\");\n    }\n    register(identifier, controllerConstructor) {\n        this.load({ identifier, controllerConstructor });\n    }\n    registerActionOption(name, filter) {\n        this.actionDescriptorFilters[name] = filter;\n    }\n    load(head, ...rest) {\n        const definitions = Array.isArray(head) ? head : [head, ...rest];\n        definitions.forEach((definition) => {\n            if (definition.controllerConstructor.shouldLoad) {\n                this.router.loadDefinition(definition);\n            }\n        });\n    }\n    unload(head, ...rest) {\n        const identifiers = Array.isArray(head) ? head : [head, ...rest];\n        identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n    }\n    get controllers() {\n        return this.router.contexts.map((context) => context.controller);\n    }\n    getControllerForElementAndIdentifier(element, identifier) {\n        const context = this.router.getContextForElementAndIdentifier(element, identifier);\n        return context ? context.controller : null;\n    }\n    handleError(error, message, detail) {\n        var _a;\n        this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n        (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n    }\n    logFormattedMessage(identifier, functionName, detail = {}) {\n        detail = Object.assign({ application: this }, detail);\n        this.logger.groupCollapsed(`${identifier} #${functionName}`);\n        this.logger.log(\"details:\", Object.assign({}, detail));\n        this.logger.groupEnd();\n    }\n}\nfunction domReady() {\n    return new Promise((resolve) => {\n        if (document.readyState == \"loading\") {\n            document.addEventListener(\"DOMContentLoaded\", () => resolve());\n        }\n        else {\n            resolve();\n        }\n    });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n    const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n    return classes.reduce((properties, classDefinition) => {\n        return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n    }, {});\n}\nfunction propertiesForClassDefinition(key) {\n    return {\n        [`${key}Class`]: {\n            get() {\n                const { classes } = this;\n                if (classes.has(key)) {\n                    return classes.get(key);\n                }\n                else {\n                    const attribute = classes.getAttributeName(key);\n                    throw new Error(`Missing attribute \"${attribute}\"`);\n                }\n            },\n        },\n        [`${key}Classes`]: {\n            get() {\n                return this.classes.getAll(key);\n            },\n        },\n        [`has${capitalize(key)}Class`]: {\n            get() {\n                return this.classes.has(key);\n            },\n        },\n    };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n    const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n    return outlets.reduce((properties, outletDefinition) => {\n        return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n    }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n    return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n    let outletController = getOutletController(controller, element, outletName);\n    if (outletController)\n        return outletController;\n    controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n    outletController = getOutletController(controller, element, outletName);\n    if (outletController)\n        return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n    const camelizedName = namespaceCamelize(name);\n    return {\n        [`${camelizedName}Outlet`]: {\n            get() {\n                const outletElement = this.outlets.find(name);\n                const selector = this.outlets.getSelectorForOutletName(name);\n                if (outletElement) {\n                    const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n                    if (outletController)\n                        return outletController;\n                    throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n                }\n                throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n            },\n        },\n        [`${camelizedName}Outlets`]: {\n            get() {\n                const outlets = this.outlets.findAll(name);\n                if (outlets.length > 0) {\n                    return outlets\n                        .map((outletElement) => {\n                        const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n                        if (outletController)\n                            return outletController;\n                        console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n                    })\n                        .filter((controller) => controller);\n                }\n                return [];\n            },\n        },\n        [`${camelizedName}OutletElement`]: {\n            get() {\n                const outletElement = this.outlets.find(name);\n                const selector = this.outlets.getSelectorForOutletName(name);\n                if (outletElement) {\n                    return outletElement;\n                }\n                else {\n                    throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n                }\n            },\n        },\n        [`${camelizedName}OutletElements`]: {\n            get() {\n                return this.outlets.findAll(name);\n            },\n        },\n        [`has${capitalize(camelizedName)}Outlet`]: {\n            get() {\n                return this.outlets.has(name);\n            },\n        },\n    };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n    const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n    return targets.reduce((properties, targetDefinition) => {\n        return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n    }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n    return {\n        [`${name}Target`]: {\n            get() {\n                const target = this.targets.find(name);\n                if (target) {\n                    return target;\n                }\n                else {\n                    throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n                }\n            },\n        },\n        [`${name}Targets`]: {\n            get() {\n                return this.targets.findAll(name);\n            },\n        },\n        [`has${capitalize(name)}Target`]: {\n            get() {\n                return this.targets.has(name);\n            },\n        },\n    };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n    const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n    const propertyDescriptorMap = {\n        valueDescriptorMap: {\n            get() {\n                return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n                    const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n                    const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n                    return Object.assign(result, { [attributeName]: valueDescriptor });\n                }, {});\n            },\n        },\n    };\n    return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n        return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n    }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n    const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n    const { key, name, reader: read, writer: write } = definition;\n    return {\n        [name]: {\n            get() {\n                const value = this.data.get(key);\n                if (value !== null) {\n                    return read(value);\n                }\n                else {\n                    return definition.defaultValue;\n                }\n            },\n            set(value) {\n                if (value === undefined) {\n                    this.data.delete(key);\n                }\n                else {\n                    this.data.set(key, write(value));\n                }\n            },\n        },\n        [`has${capitalize(name)}`]: {\n            get() {\n                return this.data.has(key) || definition.hasCustomDefaultValue;\n            },\n        },\n    };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n    return valueDescriptorForTokenAndTypeDefinition({\n        controller,\n        token,\n        typeDefinition,\n    });\n}\nfunction parseValueTypeConstant(constant) {\n    switch (constant) {\n        case Array:\n            return \"array\";\n        case Boolean:\n            return \"boolean\";\n        case Number:\n            return \"number\";\n        case Object:\n            return \"object\";\n        case String:\n            return \"string\";\n    }\n}\nfunction parseValueTypeDefault(defaultValue) {\n    switch (typeof defaultValue) {\n        case \"boolean\":\n            return \"boolean\";\n        case \"number\":\n            return \"number\";\n        case \"string\":\n            return \"string\";\n    }\n    if (Array.isArray(defaultValue))\n        return \"array\";\n    if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n        return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n    const { controller, token, typeObject } = payload;\n    const hasType = isSomething(typeObject.type);\n    const hasDefault = isSomething(typeObject.default);\n    const fullObject = hasType && hasDefault;\n    const onlyType = hasType && !hasDefault;\n    const onlyDefault = !hasType && hasDefault;\n    const typeFromObject = parseValueTypeConstant(typeObject.type);\n    const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n    if (onlyType)\n        return typeFromObject;\n    if (onlyDefault)\n        return typeFromDefaultValue;\n    if (typeFromObject !== typeFromDefaultValue) {\n        const propertyPath = controller ? `${controller}.${token}` : token;\n        throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n    }\n    if (fullObject)\n        return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n    const { controller, token, typeDefinition } = payload;\n    const typeObject = { controller, token, typeObject: typeDefinition };\n    const typeFromObject = parseValueTypeObject(typeObject);\n    const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n    const typeFromConstant = parseValueTypeConstant(typeDefinition);\n    const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n    if (type)\n        return type;\n    const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n    throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n    const constant = parseValueTypeConstant(typeDefinition);\n    if (constant)\n        return defaultValuesByType[constant];\n    const hasDefault = hasProperty(typeDefinition, \"default\");\n    const hasType = hasProperty(typeDefinition, \"type\");\n    const typeObject = typeDefinition;\n    if (hasDefault)\n        return typeObject.default;\n    if (hasType) {\n        const { type } = typeObject;\n        const constantFromType = parseValueTypeConstant(type);\n        if (constantFromType)\n            return defaultValuesByType[constantFromType];\n    }\n    return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n    const { token, typeDefinition } = payload;\n    const key = `${dasherize(token)}-value`;\n    const type = parseValueTypeDefinition(payload);\n    return {\n        type,\n        key,\n        name: camelize(key),\n        get defaultValue() {\n            return defaultValueForDefinition(typeDefinition);\n        },\n        get hasCustomDefaultValue() {\n            return parseValueTypeDefault(typeDefinition) !== undefined;\n        },\n        reader: readers[type],\n        writer: writers[type] || writers.default,\n    };\n}\nconst defaultValuesByType = {\n    get array() {\n        return [];\n    },\n    boolean: false,\n    number: 0,\n    get object() {\n        return {};\n    },\n    string: \"\",\n};\nconst readers = {\n    array(value) {\n        const array = JSON.parse(value);\n        if (!Array.isArray(array)) {\n            throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n        }\n        return array;\n    },\n    boolean(value) {\n        return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n    },\n    number(value) {\n        return Number(value.replace(/_/g, \"\"));\n    },\n    object(value) {\n        const object = JSON.parse(value);\n        if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n            throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n        }\n        return object;\n    },\n    string(value) {\n        return value;\n    },\n};\nconst writers = {\n    default: writeString,\n    array: writeJSON,\n    object: writeJSON,\n};\nfunction writeJSON(value) {\n    return JSON.stringify(value);\n}\nfunction writeString(value) {\n    return `${value}`;\n}\n\nclass Controller {\n    constructor(context) {\n        this.context = context;\n    }\n    static get shouldLoad() {\n        return true;\n    }\n    static afterLoad(_identifier, _application) {\n        return;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get targets() {\n        return this.scope.targets;\n    }\n    get outlets() {\n        return this.scope.outlets;\n    }\n    get classes() {\n        return this.scope.classes;\n    }\n    get data() {\n        return this.scope.data;\n    }\n    initialize() {\n    }\n    connect() {\n    }\n    disconnect() {\n    }\n    dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n        const type = prefix ? `${prefix}:${eventName}` : eventName;\n        const event = new CustomEvent(type, { detail, bubbles, cancelable });\n        target.dispatchEvent(event);\n        return event;\n    }\n}\nController.blessings = [\n    ClassPropertiesBlessing,\n    TargetPropertiesBlessing,\n    ValuePropertiesBlessing,\n    OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "export function lastItemOf(arr) {\n  return arr[arr.length - 1];\n}\n\n// push only the items not included in the array\nexport function pushUnique(arr, ...items) {\n  items.forEach((item) => {\n    if (arr.includes(item)) {\n      return;\n    }\n    arr.push(item);\n  });\n  return arr;\n}\n\nexport function stringToArray(str, separator) {\n  // convert empty string to an empty array\n  return str ? str.split(separator) : [];\n}\n\nexport function isInRange(testVal, min, max) {\n  const minOK = min === undefined || testVal >= min;\n  const maxOK = max === undefined || testVal <= max;\n  return minOK && maxOK;\n}\n\nexport function limitToRange(val, min, max) {\n  if (val < min) {\n    return min;\n  }\n  if (val > max) {\n    return max;\n  }\n  return val;\n}\n\nexport function createTagRepeat(tagName, repeat, attributes = {}, index = 0, html = '') {\n  const openTagSrc = Object.keys(attributes).reduce((src, attr) => {\n    let val = attributes[attr];\n    if (typeof val === 'function') {\n      val = val(index);\n    }\n    return `${src} ${attr}=\"${val}\"`;\n  }, tagName);\n  html += `<${openTagSrc}></${tagName}>`;\n\n  const next = index + 1;\n  return next < repeat\n    ? createTagRepeat(tagName, repeat, attributes, next, html)\n    : html;\n}\n\n// Remove the spacing surrounding tags for HTML parser not to create text nodes\n// before/after elements\nexport function optimizeTemplateHTML(html) {\n  return html.replace(/>\\s+/g, '>').replace(/\\s+</, '<');\n}\n", "export function stripTime(timeValue) {\n  return new Date(timeValue).setHours(0, 0, 0, 0);\n}\n\nexport function today() {\n  return new Date().setHours(0, 0, 0, 0);\n}\n\n// Get the time value of the start of given date or year, month and day\nexport function dateValue(...args) {\n  switch (args.length) {\n    case 0:\n      return today();\n    case 1:\n      return stripTime(args[0]);\n  }\n\n  // use setFullYear() to keep 2-digit year from being mapped to 1900-1999\n  const newDate = new Date(0);\n  newDate.setFullYear(...args);\n  return newDate.setHours(0, 0, 0, 0);\n}\n\nexport function addDays(date, amount) {\n  const newDate = new Date(date);\n  return newDate.setDate(newDate.getDate() + amount);\n}\n\nexport function addWeeks(date, amount) {\n  return addDays(date, amount * 7);\n}\n\nexport function addMonths(date, amount) {\n  // If the day of the date is not in the new month, the last day of the new\n  // month will be returned. e.g. Jan 31 + 1 month \u2192 Feb 28 (not Mar 03)\n  const newDate = new Date(date);\n  const monthsToSet = newDate.getMonth() + amount;\n  let expectedMonth = monthsToSet % 12;\n  if (expectedMonth < 0) {\n    expectedMonth += 12;\n  }\n\n  const time = newDate.setMonth(monthsToSet);\n  return newDate.getMonth() !== expectedMonth ? newDate.setDate(0) : time;\n}\n\nexport function addYears(date, amount) {\n  // If the date is Feb 29 and the new year is not a leap year, Feb 28 of the\n  // new year will be returned.\n  const newDate = new Date(date);\n  const expectedMonth = newDate.getMonth();\n  const time = newDate.setFullYear(newDate.getFullYear() + amount);\n  return expectedMonth === 1 && newDate.getMonth() === 2 ? newDate.setDate(0) : time;\n}\n\n// Calculate the distance bettwen 2 days of the week\nfunction dayDiff(day, from) {\n  return (day - from + 7) % 7;\n}\n\n// Get the date of the specified day of the week of given base date\nexport function dayOfTheWeekOf(baseDate, dayOfWeek, weekStart = 0) {\n  const baseDay = new Date(baseDate).getDay();\n  return addDays(baseDate, dayDiff(dayOfWeek, weekStart) - dayDiff(baseDay, weekStart));\n}\n\nfunction calcWeekNum(dayOfTheWeek, sameDayOfFirstWeek) {\n  return Math.round((dayOfTheWeek - sameDayOfFirstWeek) / 604800000) + 1;\n}\n\n// Get the ISO week number of a date\nexport function getIsoWeek(date) {\n  // - Start of ISO week is Monday\n  // - Use Thursday for culculation because the first Thursday of ISO week is\n  //   always in January\n  const thuOfTheWeek = dayOfTheWeekOf(date, 4, 1);\n  // - Week 1 in ISO week is the week including Jan 04\n  // - Use the Thu of given date's week (instead of given date itself) to\n  //   calculate week 1 of the year so that Jan 01 - 03 won't be miscalculated\n  //   as week 0 when Jan 04 is Mon - Wed\n  const firstThu = dayOfTheWeekOf(new Date(thuOfTheWeek).setMonth(0, 4), 4, 1);\n  // return Math.round((thuOfTheWeek - firstThu) / 604800000) + 1;\n  return calcWeekNum(thuOfTheWeek, firstThu);\n}\n\n// Calculate week number in traditional week number system\n// @see https://en.wikipedia.org/wiki/Week#Other_week_numbering_systems\nfunction calcTraditionalWeekNumber(date, weekStart) {\n  // - Week 1 of traditional week is the week including the Jan 01\n  // - Use Jan 01 of given date's year to calculate the start of week 1\n  const startOfFirstWeek = dayOfTheWeekOf(new Date(date).setMonth(0, 1), weekStart, weekStart);\n  const startOfTheWeek = dayOfTheWeekOf(date, weekStart, weekStart);\n  const weekNum = calcWeekNum(startOfTheWeek, startOfFirstWeek);\n  if (weekNum < 53) {\n    return weekNum;\n  }\n  // If the 53rd week includes Jan 01, it's actually next year's week 1\n  const weekOneOfNextYear = dayOfTheWeekOf(new Date(date).setDate(32), weekStart, weekStart);\n  return startOfTheWeek === weekOneOfNextYear ? 1 : weekNum;\n}\n\n// Get the Western traditional week number of a date\nexport function getWesternTradWeek(date) {\n  // Start of Western traditionl week is Sunday\n  return calcTraditionalWeekNumber(date, 0);\n}\n\n// Get the Middle Eastern week number of a date\nexport function getMidEasternWeek(date) {\n  // Start of Middle Eastern week is Saturday\n  return calcTraditionalWeekNumber(date, 6);\n}\n\n// Get the start year of the period of years that includes given date\n// years: length of the year period\nexport function startOfYearPeriod(date, years) {\n  /* @see https://en.wikipedia.org/wiki/Year_zero#ISO_8601 */\n  const year = new Date(date).getFullYear();\n  return Math.floor(year / years) * years;\n}\n\n// Convert date to the first/last date of the month/year of the date\nexport function regularizeDate(date, timeSpan, useLastDate) {\n  if (timeSpan !== 1 && timeSpan !== 2) {\n    return date;\n  }\n  const newDate = new Date(date);\n  if (timeSpan === 1) {\n    useLastDate\n      ? newDate.setMonth(newDate.getMonth() + 1, 0)\n      : newDate.setDate(1);\n  } else {\n    useLastDate\n      ? newDate.setFullYear(newDate.getFullYear() + 1, 0, 0)\n      : newDate.setMonth(0, 1);\n  }\n  return newDate.setHours(0, 0, 0, 0);\n}\n", "import {stripTime, today} from './date.js';\nimport {lastItemOf} from './utils.js';\n\n// pattern for format parts\nexport const reFormatTokens = /dd?|DD?|mm?|MM?|yy?(?:yy)?/;\n// pattern for non date parts\nexport const reNonDateParts = /[\\s!-/:-@[-`{-~\u5E74\u6708\u65E5]+/;\n// cache for persed formats\nlet knownFormats = {};\n// parse funtions for date parts\nconst parseFns = {\n  y(date, year) {\n    return new Date(date).setFullYear(parseInt(year, 10));\n  },\n  m(date, month, locale) {\n    const newDate = new Date(date);\n    let monthIndex = parseInt(month, 10) - 1;\n\n    if (isNaN(monthIndex)) {\n      if (!month) {\n        return NaN;\n      }\n\n      const monthName = month.toLowerCase();\n      const compareNames = name => name.toLowerCase().startsWith(monthName);\n      // compare with both short and full names because some locales have periods\n      // in the short names (not equal to the first X letters of the full names)\n      monthIndex = locale.monthsShort.findIndex(compareNames);\n      if (monthIndex < 0) {\n        monthIndex = locale.months.findIndex(compareNames);\n      }\n      if (monthIndex < 0) {\n        return NaN;\n      }\n    }\n\n    newDate.setMonth(monthIndex);\n    return newDate.getMonth() !== normalizeMonth(monthIndex)\n      ? newDate.setDate(0)\n      : newDate.getTime();\n  },\n  d(date, day) {\n    return new Date(date).setDate(parseInt(day, 10));\n  },\n};\n// format functions for date parts\nconst formatFns = {\n  d(date) {\n    return date.getDate();\n  },\n  dd(date) {\n    return padZero(date.getDate(), 2);\n  },\n  D(date, locale) {\n    return locale.daysShort[date.getDay()];\n  },\n  DD(date, locale) {\n    return locale.days[date.getDay()];\n  },\n  m(date) {\n    return date.getMonth() + 1;\n  },\n  mm(date) {\n    return padZero(date.getMonth() + 1, 2);\n  },\n  M(date, locale) {\n    return locale.monthsShort[date.getMonth()];\n  },\n  MM(date, locale) {\n    return locale.months[date.getMonth()];\n  },\n  y(date) {\n    return date.getFullYear();\n  },\n  yy(date) {\n    return padZero(date.getFullYear(), 2).slice(-2);\n  },\n  yyyy(date) {\n    return padZero(date.getFullYear(), 4);\n  },\n};\n\n// get month index in normal range (0 - 11) from any number\nfunction normalizeMonth(monthIndex) {\n  return monthIndex > -1 ? monthIndex % 12 : normalizeMonth(monthIndex + 12);\n}\n\nfunction padZero(num, length) {\n  return num.toString().padStart(length, '0');\n}\n\nfunction parseFormatString(format) {\n  if (typeof format !== 'string') {\n    throw new Error(\"Invalid date format.\");\n  }\n  if (format in knownFormats) {\n    return knownFormats[format];\n  }\n\n  // sprit the format string into parts and seprators\n  const separators = format.split(reFormatTokens);\n  const parts = format.match(new RegExp(reFormatTokens, 'g'));\n  if (separators.length === 0 || !parts) {\n    throw new Error(\"Invalid date format.\");\n  }\n\n  // collect format functions used in the format\n  const partFormatters = parts.map(token => formatFns[token]);\n\n  // collect parse function keys used in the format\n  // iterate over parseFns' keys in order to keep the order of the keys.\n  const partParserKeys = Object.keys(parseFns).reduce((keys, key) => {\n    const token = parts.find(part => part[0] !== 'D' && part[0].toLowerCase() === key);\n    if (token) {\n      keys.push(key);\n    }\n    return keys;\n  }, []);\n\n  return knownFormats[format] = {\n    parser(dateStr, locale) {\n      const dateParts = dateStr.split(reNonDateParts).reduce((dtParts, part, index) => {\n        if (part.length > 0 && parts[index]) {\n          const token = parts[index][0];\n          if (token === 'M') {\n            dtParts.m = part;\n          } else if (token !== 'D') {\n            dtParts[token] = part;\n          }\n        }\n        return dtParts;\n      }, {});\n\n      // iterate over partParserkeys so that the parsing is made in the oder\n      // of year, month and day to prevent the day parser from correcting last\n      // day of month wrongly\n      return partParserKeys.reduce((origDate, key) => {\n        const newDate = parseFns[key](origDate, dateParts[key], locale);\n        // ingnore the part failed to parse\n        return isNaN(newDate) ? origDate : newDate;\n      }, today());\n    },\n    formatter(date, locale) {\n      let dateStr = partFormatters.reduce((str, fn, index) => {\n        return str += `${separators[index]}${fn(date, locale)}`;\n      }, '');\n      // separators' length is always parts' length + 1,\n      return dateStr += lastItemOf(separators);\n    },\n  };\n}\n\nexport function parseDate(dateStr, format, locale) {\n  if (dateStr instanceof Date || typeof dateStr === 'number') {\n    const date = stripTime(dateStr);\n    return isNaN(date) ? undefined : date;\n  }\n  if (!dateStr) {\n    return undefined;\n  }\n  if (dateStr === 'today') {\n    return today();\n  }\n\n  if (format && format.toValue) {\n    const date = format.toValue(dateStr, format, locale);\n    return isNaN(date) ? undefined : stripTime(date);\n  }\n\n  return parseFormatString(format).parser(dateStr, locale);\n}\n\nexport function formatDate(date, format, locale) {\n  if (isNaN(date) || (!date && date !== 0)) {\n    return '';\n  }\n\n  const dateObj = typeof date === 'number' ? new Date(date) : date;\n\n  if (format.toDisplay) {\n    return format.toDisplay(dateObj, format, locale);\n  }\n\n  return parseFormatString(format).formatter(dateObj, locale);\n}\n", "const range = document.createRange();\n\nexport function parseHTML(html) {\n  return range.createContextualFragment(html);\n}\n\nexport function getParent(el) {\n  return el.parentElement\n    || (el.parentNode instanceof ShadowRoot ? el.parentNode.host : undefined);\n}\n\nexport function isActiveElement(el) {\n  return el.getRootNode().activeElement === el;\n}\n\n// equivalent to jQuery's :visble\nexport function isVisible(el) {\n  return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length);\n}\n\nexport function hideElement(el) {\n  if (el.style.display === 'none') {\n    return;\n  }\n  // back up the existing display setting in data-style-display\n  if (el.style.display) {\n    el.dataset.styleDisplay = el.style.display;\n  }\n  el.style.display = 'none';\n}\n\nexport function showElement(el) {\n  if (el.style.display !== 'none') {\n    return;\n  }\n  if (el.dataset.styleDisplay) {\n    // restore backed-up dispay property\n    el.style.display = el.dataset.styleDisplay;\n    delete el.dataset.styleDisplay;\n  } else {\n    el.style.display = '';\n  }\n}\n\nexport function emptyChildNodes(el) {\n  if (el.firstChild) {\n    el.removeChild(el.firstChild);\n    emptyChildNodes(el);\n  }\n}\n\nexport function replaceChildNodes(el, newChildNodes) {\n  emptyChildNodes(el);\n  if (newChildNodes instanceof DocumentFragment) {\n    el.appendChild(newChildNodes);\n  } else if (typeof newChildNodes === 'string') {\n    el.appendChild(parseHTML(newChildNodes));\n  } else if (typeof newChildNodes.forEach === 'function') {\n    newChildNodes.forEach((node) => {\n      el.appendChild(node);\n    });\n  }\n}\n", "const listenerRegistry = new WeakMap();\nconst {addEventListener, removeEventListener} = EventTarget.prototype;\n\n// Register event listeners to a key object\n// listeners: array of listener definitions;\n//   - each definition must be a flat array of event target and the arguments\n//     used to call addEventListener() on the target\nexport function registerListeners(keyObj, listeners) {\n  let registered = listenerRegistry.get(keyObj);\n  if (!registered) {\n    registered = [];\n    listenerRegistry.set(keyObj, registered);\n  }\n  listeners.forEach((listener) => {\n    addEventListener.call(...listener);\n    registered.push(listener);\n  });\n}\n\nexport function unregisterListeners(keyObj) {\n  let listeners = listenerRegistry.get(keyObj);\n  if (!listeners) {\n    return;\n  }\n  listeners.forEach((listener) => {\n    removeEventListener.call(...listener);\n  });\n  listenerRegistry.delete(keyObj);\n}\n\n// Event.composedPath() polyfill for Edge\n// based on https://gist.github.com/kleinfreund/e9787d73776c0e3750dcfcdc89f100ec\nif (!Event.prototype.composedPath) {\n  const getComposedPath = (node, path = []) => {\n    path.push(node);\n\n    let parent;\n    if (node.parentNode) {\n      parent = node.parentNode;\n    } else if (node.host) { // ShadowRoot\n      parent = node.host;\n    } else if (node.defaultView) {  // Document\n      parent = node.defaultView;\n    }\n    return parent ? getComposedPath(parent, path) : path;\n  };\n\n  Event.prototype.composedPath = function () {\n    return getComposedPath(this.target);\n  };\n}\n\nfunction findFromPath(path, criteria, currentTarget) {\n  const [node, ...rest] = path;\n  if (criteria(node)) {\n    return node;\n  }\n  if (node === currentTarget || node.tagName === 'HTML' || rest.length === 0) {\n    // stop when reaching currentTarget or <html>\n    return;\n  }\n  return findFromPath(rest, criteria, currentTarget);\n}\n\n// Search for the actual target of a delegated event\nexport function findElementInEventPath(ev, selector) {\n  const criteria = typeof selector === 'function'\n    ? selector\n    : el => el instanceof Element && el.matches(selector);\n  return findFromPath(ev.composedPath(), criteria, ev.currentTarget);\n}\n", "// default locales\nexport default {\n  en: {\n    days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n    daysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n    daysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n    months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n    monthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n    today: \"Today\",\n    clear: \"Clear\",\n    titleFormat: \"MM y\"\n  }\n};\n", "// config options updatable by setOptions() and their default values\nexport default {\n  autohide: false,\n  beforeShowDay: null,\n  beforeShowDecade: null,\n  beforeShowMonth: null,\n  beforeShowYear: null,\n  clearButton: false,\n  dateDelimiter: ',',\n  datesDisabled: [],\n  daysOfWeekDisabled: [],\n  daysOfWeekHighlighted: [],\n  defaultViewDate: undefined, // placeholder, defaults to today() by the program\n  disableTouchKeyboard: false,\n  enableOnReadonly: true,\n  format: 'mm/dd/yyyy',\n  language: 'en',\n  maxDate: null,\n  maxNumberOfDates: 1,\n  maxView: 3,\n  minDate: null,\n  nextArrow: '\u00BB',\n  orientation: 'auto',\n  pickLevel: 0,\n  prevArrow: '\u00AB',\n  showDaysOfWeek: true,\n  showOnClick: true,\n  showOnFocus: true,\n  startView: 0,\n  title: '',\n  todayButton: false,\n  todayButtonMode: 0,\n  todayHighlight: false,\n  updateOnBlur: true,\n  weekNumbers: 0,\n  weekStart: 0,\n};\n", "import {pushUnique} from '../lib/utils.js';\nimport {\n  dateValue,\n  regularizeDate,\n  getIsoWeek,\n  getWesternTradWeek,\n  getMidEasternWeek,\n} from '../lib/date.js';\nimport {reFormatTokens, parseDate} from '../lib/date-format.js';\nimport {parseHTML} from '../lib/dom.js';\nimport defaultOptions from './defaultOptions.js';\n\nconst {\n  language: defaultLang,\n  format: defaultFormat,\n  weekStart: defaultWeekStart,\n} = defaultOptions;\n\n// Reducer function to filter out invalid day-of-week from the input\nfunction sanitizeDOW(dow, day) {\n  return dow.length < 6 && day >= 0 && day < 7\n    ? pushUnique(dow, day)\n    : dow;\n}\n\nfunction determineGetWeekMethod(numberingMode, weekStart) {\n  const methodId = numberingMode === 4\n    ? (weekStart === 6 ? 3 : !weekStart + 1)\n    : numberingMode;\n  switch (methodId) {\n    case 1:\n      return getIsoWeek;\n    case 2:\n      return getWesternTradWeek;\n    case 3:\n      return getMidEasternWeek;\n  }\n}\n\nfunction updateWeekStart(newValue, config, weekNumbers) {\n  config.weekStart = newValue;\n  config.weekEnd = (newValue + 6) % 7;\n  if (weekNumbers === 4) {\n    config.getWeekNumber = determineGetWeekMethod(4, newValue);\n  }\n  return newValue;\n}\n\n// validate input date. if invalid, fallback to the original value\nfunction validateDate(value, format, locale, origValue) {\n  const date = parseDate(value, format, locale);\n  return date !== undefined ? date : origValue;\n}\n\n// Validate viewId. if invalid, fallback to the original value\nfunction validateViewId(value, origValue, max = 3) {\n  const viewId = parseInt(value, 10);\n  return viewId >= 0 && viewId <= max ? viewId : origValue;\n}\n\nfunction replaceOptions(options, from, to, convert = undefined) {\n  if (from in options) {\n    if (!(to in options)) {\n      options[to] = convert ? convert(options[from]) : options[from];\n    }\n    delete options[from];\n  }\n}\n\n// Create Datepicker configuration to set\nexport default function processOptions(options, datepicker) {\n  const inOpts = Object.assign({}, options);\n  const config = {};\n  const locales = datepicker.constructor.locales;\n  const rangeEnd = !!datepicker.rangeSideIndex;\n  let {\n    datesDisabled,\n    format,\n    language,\n    locale,\n    maxDate,\n    maxView,\n    minDate,\n    pickLevel,\n    startView,\n    weekNumbers,\n    weekStart,\n  } = datepicker.config || {};\n\n  // for backword compatibility\n  replaceOptions(inOpts, 'calendarWeeks', 'weekNumbers', val => val ? 1 : 0);\n  replaceOptions(inOpts, 'clearBtn', 'clearButton');\n  replaceOptions(inOpts, 'todayBtn', 'todayButton');\n  replaceOptions(inOpts, 'todayBtnMode', 'todayButtonMode');\n\n  if (inOpts.language) {\n    let lang;\n    if (inOpts.language !== language) {\n      if (locales[inOpts.language]) {\n        lang = inOpts.language;\n      } else {\n        // Check if langauge + region tag can fallback to the one without\n        // region (e.g. fr-CA \u2192 fr)\n        lang = inOpts.language.split('-')[0];\n        if (!locales[lang]) {\n          lang = false;\n        }\n      }\n    }\n    delete inOpts.language;\n    if (lang) {\n      language = config.language = lang;\n\n      // update locale as well when updating language\n      const origLocale = locale || locales[defaultLang];\n      // use default language's properties for the fallback\n      locale = Object.assign({\n        format: defaultFormat,\n        weekStart: defaultWeekStart\n      }, locales[defaultLang]);\n      if (language !== defaultLang) {\n        Object.assign(locale, locales[language]);\n      }\n      config.locale = locale;\n      // if format and/or weekStart are the same as old locale's defaults,\n      // update them to new locale's defaults\n      if (format === origLocale.format) {\n        format = config.format = locale.format;\n      }\n      if (weekStart === origLocale.weekStart) {\n        weekStart = updateWeekStart(locale.weekStart, config, weekNumbers);\n      }\n    }\n  }\n\n  if (inOpts.format) {\n    const hasToDisplay = typeof inOpts.format.toDisplay === 'function';\n    const hasToValue = typeof inOpts.format.toValue === 'function';\n    const validFormatString = reFormatTokens.test(inOpts.format);\n    if ((hasToDisplay && hasToValue) || validFormatString) {\n      format = config.format = inOpts.format;\n    }\n    delete inOpts.format;\n  }\n\n  //*** pick level ***//\n  let newPickLevel = pickLevel;\n  if ('pickLevel' in inOpts) {\n    newPickLevel = validateViewId(inOpts.pickLevel, pickLevel, 2);\n    delete inOpts.pickLevel;\n  }\n  if (newPickLevel !== pickLevel) {\n    if (newPickLevel > pickLevel) {\n      // complement current minDate/madDate so that the existing range will be\n      // expanded to fit the new level later\n      if (!('minDate' in inOpts)) {\n        inOpts.minDate = minDate;\n      }\n      if (!('maxDate' in inOpts)) {\n        inOpts.maxDate = maxDate;\n      }\n    }\n    // complement datesDisabled so that it will be reset later\n    if (datesDisabled && !inOpts.datesDisabled) {\n      inOpts.datesDisabled = [];\n    }\n    pickLevel = config.pickLevel = newPickLevel;\n  }\n\n  //*** dates ***//\n  // while min and maxDate for \"no limit\" in the options are better to be null\n  // (especially when updating), the ones in the config have to be undefined\n  // because null is treated as 0 (= unix epoch) when comparing with time value\n  let minDt = minDate;\n  let maxDt = maxDate;\n  if ('minDate' in inOpts) {\n    const defaultMinDt = dateValue(0, 0, 1);\n    minDt = inOpts.minDate === null\n      ? defaultMinDt  // set 0000-01-01 to prevent negative values for year\n      : validateDate(inOpts.minDate, format, locale, minDt);\n    if (minDt !== defaultMinDt) {\n      minDt = regularizeDate(minDt, pickLevel, false);\n    }\n    delete inOpts.minDate;\n  }\n  if ('maxDate' in inOpts) {\n    maxDt = inOpts.maxDate === null\n      ? undefined\n      : validateDate(inOpts.maxDate, format, locale, maxDt);\n    if (maxDt !== undefined) {\n      maxDt = regularizeDate(maxDt, pickLevel, true);\n    }\n    delete inOpts.maxDate;\n  }\n  if (maxDt < minDt) {\n    minDate = config.minDate = maxDt;\n    maxDate = config.maxDate = minDt;\n  } else {\n    if (minDate !== minDt) {\n      minDate = config.minDate = minDt;\n    }\n    if (maxDate !== maxDt) {\n      maxDate = config.maxDate = maxDt;\n    }\n  }\n\n  if (inOpts.datesDisabled) {\n    const dtsDisabled = inOpts.datesDisabled;\n    if (typeof dtsDisabled === 'function') {\n      config.datesDisabled = null;\n      config.checkDisabled = (timeValue, viewId) => dtsDisabled(\n        new Date(timeValue),\n        viewId,\n        rangeEnd\n      );\n    } else {\n      const disabled = config.datesDisabled = dtsDisabled.reduce((dates, dt) => {\n        const date = parseDate(dt, format, locale);\n        return date !== undefined\n          ? pushUnique(dates, regularizeDate(date, pickLevel, rangeEnd))\n          : dates;\n      }, []);\n      config.checkDisabled = timeValue => disabled.includes(timeValue);\n    }\n    delete inOpts.datesDisabled;\n  }\n  if ('defaultViewDate' in inOpts) {\n    const viewDate = parseDate(inOpts.defaultViewDate, format, locale);\n    if (viewDate !== undefined) {\n      config.defaultViewDate = viewDate;\n    }\n    delete inOpts.defaultViewDate;\n  }\n\n  //*** days of week ***//\n  if ('weekStart' in inOpts) {\n    const wkStart = Number(inOpts.weekStart) % 7;\n    if (!isNaN(wkStart)) {\n      weekStart = updateWeekStart(wkStart, config, weekNumbers);\n    }\n    delete inOpts.weekStart;\n  }\n  if (inOpts.daysOfWeekDisabled) {\n    config.daysOfWeekDisabled = inOpts.daysOfWeekDisabled.reduce(sanitizeDOW, []);\n    delete inOpts.daysOfWeekDisabled;\n  }\n  if (inOpts.daysOfWeekHighlighted) {\n    config.daysOfWeekHighlighted = inOpts.daysOfWeekHighlighted.reduce(sanitizeDOW, []);\n    delete inOpts.daysOfWeekHighlighted;\n  }\n\n  //*** week numbers ***//\n  if ('weekNumbers' in inOpts) {\n    let method = inOpts.weekNumbers;\n    if (method) {\n      const getWeekNumber = typeof method === 'function'\n        ? (timeValue, startOfWeek) => method(new Date(timeValue), startOfWeek)\n        : determineGetWeekMethod((method = parseInt(method, 10)), weekStart);\n      if (getWeekNumber) {\n        weekNumbers = config.weekNumbers = method;\n        config.getWeekNumber = getWeekNumber;\n      }\n    } else {\n      weekNumbers = config.weekNumbers = 0;\n      config.getWeekNumber = null;\n    }\n    delete inOpts.weekNumbers;\n  }\n\n  //*** multi date ***//\n  if ('maxNumberOfDates' in inOpts) {\n    const maxNumberOfDates = parseInt(inOpts.maxNumberOfDates, 10);\n    if (maxNumberOfDates >= 0) {\n      config.maxNumberOfDates = maxNumberOfDates;\n      config.multidate = maxNumberOfDates !== 1;\n    }\n    delete inOpts.maxNumberOfDates;\n  }\n  if (inOpts.dateDelimiter) {\n    config.dateDelimiter = String(inOpts.dateDelimiter);\n    delete inOpts.dateDelimiter;\n  }\n\n  //*** view ***//\n  let newMaxView = maxView;\n  if ('maxView' in inOpts) {\n    newMaxView = validateViewId(inOpts.maxView, maxView);\n    delete inOpts.maxView;\n  }\n  // ensure max view >= pick level\n  newMaxView = pickLevel > newMaxView ? pickLevel : newMaxView;\n  if (newMaxView !== maxView) {\n    maxView = config.maxView = newMaxView;\n  }\n\n  let newStartView = startView;\n  if ('startView' in inOpts) {\n    newStartView = validateViewId(inOpts.startView, newStartView);\n    delete inOpts.startView;\n  }\n  // ensure pick level <= start view <= max view\n  if (newStartView < pickLevel) {\n    newStartView = pickLevel;\n  } else if (newStartView > maxView) {\n    newStartView = maxView;\n  }\n  if (newStartView !== startView) {\n    config.startView = newStartView;\n  }\n\n  //*** template ***//\n  if (inOpts.prevArrow) {\n    const prevArrow = parseHTML(inOpts.prevArrow);\n    if (prevArrow.childNodes.length > 0) {\n      config.prevArrow = prevArrow.childNodes;\n    }\n    delete inOpts.prevArrow;\n  }\n  if (inOpts.nextArrow) {\n    const nextArrow = parseHTML(inOpts.nextArrow);\n    if (nextArrow.childNodes.length > 0) {\n      config.nextArrow = nextArrow.childNodes;\n    }\n    delete inOpts.nextArrow;\n  }\n\n  //*** misc ***//\n  if ('disableTouchKeyboard' in inOpts) {\n    config.disableTouchKeyboard = 'ontouchstart' in document && !!inOpts.disableTouchKeyboard;\n    delete inOpts.disableTouchKeyboard;\n  }\n  if (inOpts.orientation) {\n    const orientation = inOpts.orientation.toLowerCase().split(/\\s+/g);\n    config.orientation = {\n      x: orientation.find(x => (x === 'left' || x === 'right')) || 'auto',\n      y: orientation.find(y => (y === 'top' || y === 'bottom')) || 'auto',\n    };\n    delete inOpts.orientation;\n  }\n  if ('todayButtonMode' in inOpts) {\n    switch(inOpts.todayButtonMode) {\n      case 0:\n      case 1:\n        config.todayButtonMode = inOpts.todayButtonMode;\n    }\n    delete inOpts.todayButtonMode;\n  }\n\n  //*** copy the rest ***//\n  Object.entries(inOpts).forEach(([key, value]) => {\n    if (value !== undefined && key in defaultOptions) {\n      config[key] = value;\n    }\n  });\n\n  return config;\n}\n", "const defaultShortcutKeys = {\n  show: {key: 'ArrowDown'},\n  hide: null,\n  toggle: {key: 'Escape'},\n  prevButton: {key: 'ArrowLeft', ctrlOrMetaKey: true},\n  nextButton: {key: 'ArrowRight', ctrlOrMetaKey: true},\n  viewSwitch: {key: 'ArrowUp', ctrlOrMetaKey: true},\n  clearButton: {key: 'Backspace', ctrlOrMetaKey: true},\n  todayButton: {key: '.', ctrlOrMetaKey: true},\n  exitEditMode: {key: 'ArrowDown', ctrlOrMetaKey: true},\n};\n\nexport default function createShortcutKeyConfig(options) {\n  return Object.keys(defaultShortcutKeys).reduce((keyDefs, shortcut) => {\n    const keyDef = options[shortcut] === undefined\n      ? defaultShortcutKeys[shortcut]\n      : options[shortcut];\n    const key = keyDef && keyDef.key;\n    if (!key || typeof key !== 'string') {\n      return keyDefs;\n    }\n\n    const normalizedDef = {\n      key,\n      ctrlOrMetaKey: !!(keyDef.ctrlOrMetaKey || keyDef.ctrlKey || keyDef.metaKey),\n    };\n    if (key.length > 1) {\n      normalizedDef.altKey = !!keyDef.altKey;\n      normalizedDef.shiftKey = !!keyDef.shiftKey;\n    }\n    keyDefs[shortcut] = normalizedDef;\n    return keyDefs;\n  }, {});\n}\n", "import {optimizeTemplateHTML} from '../../lib/utils.js';\n\nconst getButtons = buttonList => buttonList\n  .map(classes => `<button type=\"button\" class=\"%buttonClass% ${classes}\" tabindex=\"-1\"></button>`)\n  .join('');\n\nexport default optimizeTemplateHTML(`<div class=\"datepicker\">\n  <div class=\"datepicker-picker\">\n    <div class=\"datepicker-header\">\n      <div class=\"datepicker-title\"></div>\n      <div class=\"datepicker-controls\">\n        ${getButtons([\n          'prev-button prev-btn',\n          'view-switch',\n          'next-button next-btn',\n        ])}\n      </div>\n    </div>\n    <div class=\"datepicker-main\"></div>\n    <div class=\"datepicker-footer\">\n      <div class=\"datepicker-controls\">\n        ${getButtons([\n          'today-button today-btn',\n          'clear-button clear-btn',\n        ])}\n      </div>\n    </div>\n  </div>\n</div>`);\n", "import {createTagRepeat, optimizeTemplateHTML} from '../../lib/utils.js';\n\nexport default optimizeTemplateHTML(`<div class=\"days\">\n  <div class=\"days-of-week\">${createTagRepeat('span', 7, {class: 'dow'})}</div>\n  <div class=\"datepicker-grid\">${createTagRepeat('span', 42)}</div>\n</div>`);\n", "import {createTagRepeat, optimizeTemplateHTML} from '../../lib/utils.js';\n\nexport default optimizeTemplateHTML(`<div class=\"week-numbers calendar-weeks\">\n  <div class=\"days-of-week\"><span class=\"dow\"></span></div>\n  <div class=\"weeks\">${createTagRepeat('span', 6, {class: 'week'})}</div>\n</div>`);\n\n", "import {pushUnique} from '../../lib/utils.js';\nimport {parseHTML, replaceChildNodes} from '../../lib/dom.js';\n\n// Base class of the view classes\nexport default class View {\n  constructor(picker, config) {\n    Object.assign(this, config, {\n      picker,\n      element: parseHTML(`<div class=\"datepicker-view\"></div>`).firstChild,\n      selected: [],\n      isRangeEnd: !!picker.datepicker.rangeSideIndex,\n    });\n    this.init(this.picker.datepicker.config);\n  }\n\n  init(options) {\n    if ('pickLevel' in options) {\n      this.isMinView = this.id === options.pickLevel;\n    }\n    this.setOptions(options);\n    this.updateFocus();\n    this.updateSelection();\n  }\n\n  prepareForRender(switchLabel, prevButtonDisabled, nextButtonDisabled) {\n    // refresh disabled years on every render in order to clear the ones added\n    // by beforeShow hook at previous render\n    this.disabled = [];\n\n    const picker = this.picker;\n    picker.setViewSwitchLabel(switchLabel);\n    picker.setPrevButtonDisabled(prevButtonDisabled);\n    picker.setNextButtonDisabled(nextButtonDisabled);\n  }\n\n  setDisabled(date, classList) {\n    classList.add('disabled');\n    pushUnique(this.disabled, date);\n  }\n\n  // Execute beforeShow() callback and apply the result to the element\n  // args:\n  performBeforeHook(el, timeValue) {\n    let result = this.beforeShow(new Date(timeValue));\n    switch (typeof result) {\n      case 'boolean':\n        result = {enabled: result};\n        break;\n      case 'string':\n        result = {classes: result};\n    }\n\n    if (result) {\n      const classList = el.classList;\n      if (result.enabled === false) {\n        this.setDisabled(timeValue, classList);\n      }\n      if (result.classes) {\n        const extraClasses = result.classes.split(/\\s+/);\n        classList.add(...extraClasses);\n        if (extraClasses.includes('disabled')) {\n          this.setDisabled(timeValue, classList);\n        }\n      }\n      if (result.content) {\n        replaceChildNodes(el, result.content);\n      }\n    }\n  }\n\n  renderCell(el, content, cellVal, date, {selected, range}, outOfScope, extraClasses = []) {\n    el.textContent = content;\n    if (this.isMinView) {\n      el.dataset.date = date;\n    }\n\n    const classList = el.classList;\n    el.className = `datepicker-cell ${this.cellClass}`;\n    if (cellVal < this.first) {\n      classList.add('prev');\n    } else if (cellVal > this.last) {\n      classList.add('next');\n    }\n    classList.add(...extraClasses);\n    if (outOfScope || this.checkDisabled(date, this.id)) {\n      this.setDisabled(date, classList);\n    }\n    if (range) {\n      const [rangeStart, rangeEnd] = range;\n      if (cellVal > rangeStart && cellVal < rangeEnd) {\n        classList.add('range');\n      }\n      if (cellVal === rangeStart) {\n        classList.add('range-start');\n      }\n      if (cellVal === rangeEnd) {\n        classList.add('range-end');\n      }\n    }\n    if (selected.includes(cellVal)) {\n      classList.add('selected');\n    }\n    if (cellVal === this.focused) {\n      classList.add('focused');\n    }\n\n    if (this.beforeShow) {\n      this.performBeforeHook(el, date);\n    }\n  }\n\n  refreshCell(el, cellVal, selected, [rangeStart, rangeEnd]) {\n    const classList = el.classList;\n    classList.remove('range', 'range-start', 'range-end', 'selected', 'focused');\n    if (cellVal > rangeStart && cellVal < rangeEnd) {\n      classList.add('range');\n    }\n    if (cellVal === rangeStart) {\n      classList.add('range-start');\n    }\n    if (cellVal === rangeEnd) {\n      classList.add('range-end');\n    }\n    if (selected.includes(cellVal)) {\n      classList.add('selected');\n    }\n    if (cellVal === this.focused) {\n      classList.add('focused');\n    }\n  }\n\n  changeFocusedCell(cellIndex) {\n    this.grid.querySelectorAll('.focused').forEach((el) => {\n      el.classList.remove('focused');\n    });\n    this.grid.children[cellIndex].classList.add('focused');\n  }\n}\n", "import {today, dateValue, addDays, addWeeks, dayOfTheWeekOf} from '../../lib/date.js';\nimport {formatDate} from '../../lib/date-format.js';\nimport {parseHTML, showElement, hideElement} from '../../lib/dom.js';\nimport daysTemplate from '../templates/daysTemplate.js';\nimport weekNumbersTemplate from '../templates/weekNumbersTemplate.js';\nimport View from './View.js';\n\nexport default class DaysView extends View {\n  constructor(picker) {\n    super(picker, {\n      id: 0,\n      name: 'days',\n      cellClass: 'day',\n    });\n  }\n\n  init(options, onConstruction = true) {\n    if (onConstruction) {\n      const inner = parseHTML(daysTemplate).firstChild;\n      this.dow = inner.firstChild;\n      this.grid = inner.lastChild;\n      this.element.appendChild(inner);\n    }\n    super.init(options);\n  }\n\n  setOptions(options) {\n    let updateDOW;\n\n    if ('minDate' in options) {\n      this.minDate = options.minDate;\n    }\n    if ('maxDate' in options) {\n      this.maxDate = options.maxDate;\n    }\n    if (options.checkDisabled) {\n      this.checkDisabled = options.checkDisabled;\n    }\n    if (options.daysOfWeekDisabled) {\n      this.daysOfWeekDisabled = options.daysOfWeekDisabled;\n      updateDOW = true;\n    }\n    if (options.daysOfWeekHighlighted) {\n      this.daysOfWeekHighlighted = options.daysOfWeekHighlighted;\n    }\n    if ('todayHighlight' in options) {\n      this.todayHighlight = options.todayHighlight;\n    }\n    if ('weekStart' in options) {\n      this.weekStart = options.weekStart;\n      this.weekEnd = options.weekEnd;\n      updateDOW = true;\n    }\n    if (options.locale) {\n      const locale = this.locale = options.locale;\n      this.dayNames = locale.daysMin;\n      this.switchLabelFormat = locale.titleFormat;\n      updateDOW = true;\n    }\n    if ('beforeShowDay' in options) {\n      this.beforeShow = typeof options.beforeShowDay === 'function'\n        ? options.beforeShowDay\n        : undefined;\n    }\n\n    if ('weekNumbers' in options) {\n      if (options.weekNumbers && !this.weekNumbers) {\n        const weeksElem = parseHTML(weekNumbersTemplate).firstChild;\n        this.weekNumbers = {\n          element: weeksElem,\n          dow: weeksElem.firstChild,\n          weeks: weeksElem.lastChild,\n        };\n        this.element.insertBefore(weeksElem, this.element.firstChild);\n      } else if (this.weekNumbers && !options.weekNumbers) {\n        this.element.removeChild(this.weekNumbers.element);\n        this.weekNumbers = null;\n      }\n    }\n\n    if ('getWeekNumber' in options) {\n      this.getWeekNumber = options.getWeekNumber;\n    }\n\n    if ('showDaysOfWeek' in options) {\n      if (options.showDaysOfWeek) {\n        showElement(this.dow);\n        if (this.weekNumbers) {\n          showElement(this.weekNumbers.dow);\n        }\n      } else {\n        hideElement(this.dow);\n        if (this.weekNumbers) {\n          hideElement(this.weekNumbers.dow);\n        }\n      }\n    }\n\n    // update days-of-week when locale, daysOfweekDisabled or weekStart is changed\n    if (updateDOW) {\n      Array.from(this.dow.children).forEach((el, index) => {\n        const dow = (this.weekStart + index) % 7;\n        el.textContent = this.dayNames[dow];\n        el.className = this.daysOfWeekDisabled.includes(dow) ? 'dow disabled' : 'dow';\n      });\n    }\n  }\n\n  // Apply update on the focused date to view's settings\n  updateFocus() {\n    const viewDate = new Date(this.picker.viewDate);\n    const viewYear = viewDate.getFullYear();\n    const viewMonth = viewDate.getMonth();\n    const firstOfMonth = dateValue(viewYear, viewMonth, 1);\n    const start = dayOfTheWeekOf(firstOfMonth, this.weekStart, this.weekStart);\n\n    this.first = firstOfMonth;\n    this.last = dateValue(viewYear, viewMonth + 1, 0);\n    this.start = start;\n    this.focused = this.picker.viewDate;\n  }\n\n  // Apply update on the selected dates to view's settings\n  updateSelection() {\n    const {dates, rangepicker} = this.picker.datepicker;\n    this.selected = dates;\n    if (rangepicker) {\n      this.range = rangepicker.dates;\n    }\n  }\n\n   // Update the entire view UI\n  render() {\n    // update today marker on ever render\n    this.today = this.todayHighlight ? today() : undefined;\n\n    this.prepareForRender(\n      formatDate(this.focused, this.switchLabelFormat, this.locale),\n      this.first <= this.minDate,\n      this.last >= this.maxDate\n    );\n\n    if (this.weekNumbers) {\n      const weekStart = this.weekStart;\n      const startOfWeek = dayOfTheWeekOf(this.first, weekStart, weekStart);\n      Array.from(this.weekNumbers.weeks.children).forEach((el, index) => {\n        const dateOfWeekStart = addWeeks(startOfWeek, index);\n        el.textContent = this.getWeekNumber(dateOfWeekStart, weekStart);\n        if (index > 3) {\n          el.classList[dateOfWeekStart > this.last ? 'add' : 'remove']('next');\n        }\n      });\n    }\n    Array.from(this.grid.children).forEach((el, index) => {\n      const current = addDays(this.start, index);\n      const dateObj = new Date(current);\n      const day = dateObj.getDay();\n      const extraClasses = [];\n\n      if (this.today === current) {\n        extraClasses.push('today');\n      }\n      if (this.daysOfWeekHighlighted.includes(day)) {\n        extraClasses.push('highlighted');\n      }\n\n      this.renderCell(\n        el,\n        dateObj.getDate(),\n        current,\n        current,\n        this,\n        current < this.minDate\n          || current > this.maxDate\n          || this.daysOfWeekDisabled.includes(day),\n        extraClasses\n      );\n    });\n  }\n\n  // Update the view UI by applying the changes of selected and focused items\n  refresh() {\n    const range = this.range || [];\n    Array.from(this.grid.children).forEach((el) => {\n      this.refreshCell(el, Number(el.dataset.date), this.selected, range);\n    });\n  }\n\n  // Update the view UI by applying the change of focused item\n  refreshFocus() {\n    this.changeFocusedCell(Math.round((this.focused - this.start) / 86400000));\n  }\n}\n", "import {pushUnique, createTagRepeat} from '../../lib/utils.js';\nimport {dateValue, regularizeDate} from '../../lib/date.js';\nimport {parseHTML} from '../../lib/dom.js';\nimport View from './View.js';\n\nfunction computeMonthRange(range, thisYear) {\n  if (!range || !range[0] || !range[1]) {\n    return;\n  }\n\n  const [[startY, startM], [endY, endM]] = range;\n  if (startY > thisYear || endY < thisYear) {\n    return;\n  }\n  return [\n    startY === thisYear ? startM : -1,\n    endY === thisYear ? endM : 12,\n  ];\n}\n\nexport default class MonthsView extends View {\n  constructor(picker) {\n    super(picker, {\n      id: 1,\n      name: 'months',\n      cellClass: 'month',\n    });\n  }\n\n  init(options, onConstruction = true) {\n    if (onConstruction) {\n      this.grid = this.element;\n      this.element.classList.add('months', 'datepicker-grid');\n      this.grid.appendChild(parseHTML(createTagRepeat('span', 12, {'data-month': ix => ix})));\n      this.first = 0;\n      this.last = 11;\n    }\n    super.init(options);\n  }\n\n  setOptions(options) {\n    if (options.locale) {\n      this.monthNames = options.locale.monthsShort;\n    }\n    if ('minDate' in options) {\n      if (options.minDate === undefined) {\n        this.minYear = this.minMonth = this.minDate = undefined;\n      } else {\n        const minDateObj = new Date(options.minDate);\n        this.minYear = minDateObj.getFullYear();\n        this.minMonth = minDateObj.getMonth();\n        this.minDate = minDateObj.setDate(1);\n      }\n    }\n    if ('maxDate' in options) {\n      if (options.maxDate === undefined) {\n        this.maxYear = this.maxMonth = this.maxDate = undefined;\n      } else {\n        const maxDateObj = new Date(options.maxDate);\n        this.maxYear = maxDateObj.getFullYear();\n        this.maxMonth = maxDateObj.getMonth();\n        this.maxDate = dateValue(this.maxYear, this.maxMonth + 1, 0);\n      }\n    }\n    if (options.checkDisabled) {\n      this.checkDisabled = this.isMinView || options.datesDisabled === null\n        ? options.checkDisabled\n        : () => false;\n    }\n    if ('beforeShowMonth' in options) {\n      this.beforeShow = typeof options.beforeShowMonth === 'function'\n        ? options.beforeShowMonth\n        : undefined;\n    }\n  }\n\n  // Update view's settings to reflect the viewDate set on the picker\n  updateFocus() {\n    const viewDate = new Date(this.picker.viewDate);\n    this.year = viewDate.getFullYear();\n    this.focused = viewDate.getMonth();\n  }\n\n  // Update view's settings to reflect the selected dates\n  updateSelection() {\n    const {dates, rangepicker} = this.picker.datepicker;\n    this.selected = dates.reduce((selected, timeValue) => {\n      const date = new Date(timeValue);\n      const year = date.getFullYear();\n      const month = date.getMonth();\n      if (selected[year] === undefined) {\n        selected[year] = [month];\n      } else {\n        pushUnique(selected[year], month);\n      }\n      return selected;\n    }, {});\n    if (rangepicker && rangepicker.dates) {\n      this.range = rangepicker.dates.map(timeValue => {\n        const date = new Date(timeValue);\n        return isNaN(date) ? undefined : [date.getFullYear(), date.getMonth()];\n      });\n    }\n  }\n\n  // Update the entire view UI\n  render() {\n    this.prepareForRender(\n      this.year,\n      this.year <= this.minYear,\n      this.year >= this.maxYear\n    );\n\n    const selected = this.selected[this.year] || [];\n    const yrOutOfRange = this.year < this.minYear || this.year > this.maxYear;\n    const isMinYear = this.year === this.minYear;\n    const isMaxYear = this.year === this.maxYear;\n    const range = computeMonthRange(this.range, this.year);\n\n    Array.from(this.grid.children).forEach((el, index) => {\n      const date = regularizeDate(new Date(this.year, index, 1), 1, this.isRangeEnd);\n\n      this.renderCell(\n        el,\n        this.monthNames[index],\n        index,\n        date,\n        {selected, range},\n        yrOutOfRange\n          || isMinYear && index < this.minMonth\n          || isMaxYear && index > this.maxMonth\n      );\n    });\n  }\n\n  // Update the view UI by applying the changes of selected and focused items\n  refresh() {\n    const selected = this.selected[this.year] || [];\n    const range = computeMonthRange(this.range, this.year) || [];\n    Array.from(this.grid.children).forEach((el, index) => {\n      this.refreshCell(el, index, selected, range);\n    });\n  }\n\n  // Update the view UI by applying the change of focused item\n  refreshFocus() {\n    this.changeFocusedCell(this.focused);\n  }\n}", "import {pushUnique, createTagRepeat} from '../../lib/utils.js';\nimport {dateValue, regularizeDate, startOfYearPeriod} from '../../lib/date.js';\nimport {parseHTML} from '../../lib/dom.js';\nimport View from './View.js';\n\nfunction toTitleCase(word) {\n  return [...word].reduce((str, ch, ix) => str += ix ? ch : ch.toUpperCase(), '');\n}\n\n// Class representing the years and decades view elements\nexport default class YearsView extends View {\n  constructor(picker, config) {\n    super(picker, config);\n  }\n\n  init(options, onConstruction = true) {\n    if (onConstruction) {\n      this.navStep = this.step * 10;\n      this.beforeShowOption = `beforeShow${toTitleCase(this.cellClass)}`;\n      this.grid = this.element;\n      this.element.classList.add(this.name, 'datepicker-grid');\n      this.grid.appendChild(parseHTML(createTagRepeat('span', 12)));\n    }\n    super.init(options);\n  }\n\n  setOptions(options) {\n    if ('minDate' in options) {\n      if (options.minDate === undefined) {\n        this.minYear = this.minDate = undefined;\n      } else {\n        this.minYear = startOfYearPeriod(options.minDate, this.step);\n        this.minDate = dateValue(this.minYear, 0, 1);\n      }\n    }\n    if ('maxDate' in options) {\n      if (options.maxDate === undefined) {\n        this.maxYear = this.maxDate = undefined;\n      } else {\n        this.maxYear = startOfYearPeriod(options.maxDate, this.step);\n        this.maxDate = dateValue(this.maxYear, 11, 31);\n      }\n    }\n    if (options.checkDisabled) {\n      this.checkDisabled = this.isMinView || options.datesDisabled === null\n        ? options.checkDisabled\n        : () => false;\n    }\n    if (this.beforeShowOption in options) {\n      const beforeShow = options[this.beforeShowOption];\n      this.beforeShow = typeof beforeShow === 'function' ? beforeShow : undefined;\n    }\n  }\n\n  // Update view's settings to reflect the viewDate set on the picker\n  updateFocus() {\n    const viewDate = new Date(this.picker.viewDate);\n    const first = startOfYearPeriod(viewDate, this.navStep);\n    const last = first + 9 * this.step;\n\n    this.first = first;\n    this.last = last;\n    this.start = first - this.step;\n    this.focused = startOfYearPeriod(viewDate, this.step);\n  }\n\n  // Update view's settings to reflect the selected dates\n  updateSelection() {\n    const {dates, rangepicker} = this.picker.datepicker;\n    this.selected = dates.reduce((years, timeValue) => {\n      return pushUnique(years, startOfYearPeriod(timeValue, this.step));\n    }, []);\n    if (rangepicker && rangepicker.dates) {\n      this.range = rangepicker.dates.map(timeValue => {\n        if (timeValue !== undefined) {\n          return startOfYearPeriod(timeValue, this.step);\n        }\n      });\n    }\n  }\n\n  // Update the entire view UI\n  render() {\n    this.prepareForRender(\n      `${this.first}-${this.last}`,\n      this.first <= this.minYear,\n      this.last >= this.maxYear\n    );\n\n    Array.from(this.grid.children).forEach((el, index) => {\n      const current = this.start + (index * this.step);\n      const date = regularizeDate(new Date(current, 0, 1), 2, this.isRangeEnd);\n\n      el.dataset.year = current;\n      this.renderCell(\n        el,\n        current,\n        current,\n        date,\n        this,\n        current < this.minYear || current > this.maxYear\n      );\n    });\n  }\n\n  // Update the view UI by applying the changes of selected and focused items\n  refresh() {\n    const range = this.range || [];\n    Array.from(this.grid.children).forEach((el) => {\n      this.refreshCell(el, Number(el.textContent), this.selected, range);\n    });\n  }\n\n  // Update the view UI by applying the change of focused item\n  refreshFocus() {\n    this.changeFocusedCell(Math.round((this.focused - this.start) / this.step));\n  }\n}\n", "import {limitToRange} from '../lib/utils.js';\nimport {today, addMonths, addYears} from '../lib/date.js';\nimport {isActiveElement} from '../lib/dom.js';\n\nexport function triggerDatepickerEvent(datepicker, type) {\n  const options = {\n    bubbles: true,\n    cancelable: true,\n    detail: {\n      date: datepicker.getDate(),\n      viewDate: new Date(datepicker.picker.viewDate),\n      viewId: datepicker.picker.currentView.id,\n      datepicker,\n    },\n  };\n  datepicker.element.dispatchEvent(new CustomEvent(type, options));\n}\n\n// direction: -1 (to previous), 1 (to next)\nexport function goToPrevOrNext(datepicker, direction) {\n  const {config, picker} = datepicker;\n  const {currentView, viewDate} = picker;\n  let newViewDate;\n  switch (currentView.id) {\n    case 0:\n      newViewDate = addMonths(viewDate, direction);\n      break;\n    case 1:\n      newViewDate = addYears(viewDate, direction);\n      break;\n    default:\n      newViewDate = addYears(viewDate, direction * currentView.navStep);\n  }\n  newViewDate = limitToRange(newViewDate, config.minDate, config.maxDate);\n  picker.changeFocus(newViewDate).render();\n}\n\nexport function switchView(datepicker) {\n  const viewId = datepicker.picker.currentView.id;\n  if (viewId === datepicker.config.maxView) {\n    return;\n  }\n  datepicker.picker.changeView(viewId + 1).render();\n}\n\nexport function clearSelection(datepicker) {\n  datepicker.setDate({clear: true});\n}\n\nexport function goToOrSelectToday(datepicker) {\n  const currentDate = today();\n  if (datepicker.config.todayButtonMode === 1) {\n    datepicker.setDate(currentDate, {forceRefresh: true, viewDate: currentDate});\n  } else {\n    datepicker.setFocusedDate(currentDate, true);\n  }\n}\n\nexport function unfocus(datepicker) {\n  const onBlur = () => {\n    if (datepicker.config.updateOnBlur) {\n      datepicker.update({revert: true});\n    } else {\n      datepicker.refresh('input');\n    }\n    datepicker.hide();\n  };\n  const element = datepicker.element;\n\n  if (isActiveElement(element)) {\n    element.addEventListener('blur', onBlur, {once: true});\n  } else {\n    onBlur();\n  }\n}\n", "import {addMonths, addYears} from '../lib/date.js';\nimport {findElementInEventPath} from '../lib/event.js';\nimport {goToPrevOrNext, switchView} from './functions.js';\n\nfunction goToSelectedMonthOrYear(datepicker, selection) {\n  const picker = datepicker.picker;\n  const viewDate = new Date(picker.viewDate);\n  const viewId = picker.currentView.id;\n  const newDate = viewId === 1\n    ? addMonths(viewDate, selection - viewDate.getMonth())\n    : addYears(viewDate, selection - viewDate.getFullYear());\n\n  picker.changeFocus(newDate).changeView(viewId - 1).render();\n}\n\nexport function onClickViewSwitch(datepicker) {\n  switchView(datepicker);\n}\n\nexport function onClickPrevButton(datepicker) {\n  goToPrevOrNext(datepicker, -1);\n}\n\nexport function onClickNextButton(datepicker) {\n  goToPrevOrNext(datepicker, 1);\n}\n\n// For the picker's main block to delegete the events from `datepicker-cell`s\nexport function onClickView(datepicker, ev) {\n  const target = findElementInEventPath(ev, '.datepicker-cell');\n  if (!target || target.classList.contains('disabled')) {\n    return;\n  }\n\n  const {id, isMinView} = datepicker.picker.currentView;\n  const data = target.dataset;\n  if (isMinView) {\n    datepicker.setDate(Number(data.date));\n  } else if (id === 1) {\n    goToSelectedMonthOrYear(datepicker, Number(data.month));\n  } else {\n    goToSelectedMonthOrYear(datepicker, Number(data.year));\n  }\n}\n\nexport function onMousedownPicker(ev) {\n  ev.preventDefault();\n}\n", "import {lastItemOf, isInRange, limitToRange} from '../lib/utils.js';\nimport {today, regularizeDate} from '../lib/date.js';\nimport {\n  parseHTML,\n  getParent,\n  showElement,\n  hideElement,\n  emptyChildNodes,\n} from '../lib/dom.js';\nimport {registerListeners} from '../lib/event.js';\nimport pickerTemplate from './templates/pickerTemplate.js';\nimport DaysView from './views/DaysView.js';\nimport MonthsView from './views/MonthsView.js';\nimport YearsView from './views/YearsView.js';\nimport {\n  triggerDatepickerEvent,\n  clearSelection,\n  goToOrSelectToday,\n} from '../events/functions.js';\nimport {\n  onClickViewSwitch,\n  onClickPrevButton,\n  onClickNextButton,\n  onClickView,\n  onMousedownPicker,\n} from '../events/pickerListeners.js';\n\nconst orientClasses = ['left', 'top', 'right', 'bottom'].reduce((obj, key) => {\n  obj[key] = `datepicker-orient-${key}`;\n  return obj;\n}, {});\nconst toPx = num => num ? `${num}px` : num;\n\nfunction processPickerOptions(picker, options) {\n  if ('title' in options) {\n    if (options.title) {\n      picker.controls.title.textContent = options.title;\n      showElement(picker.controls.title);\n    } else {\n      picker.controls.title.textContent = '';\n      hideElement(picker.controls.title);\n    }\n  }\n  if (options.prevArrow) {\n    const prevButton = picker.controls.prevButton;\n    emptyChildNodes(prevButton);\n    options.prevArrow.forEach((node) => {\n      prevButton.appendChild(node.cloneNode(true));\n    });\n  }\n  if (options.nextArrow) {\n    const nextButton = picker.controls.nextButton;\n    emptyChildNodes(nextButton);\n    options.nextArrow.forEach((node) => {\n      nextButton.appendChild(node.cloneNode(true));\n    });\n  }\n  if (options.locale) {\n    picker.controls.todayButton.textContent = options.locale.today;\n    picker.controls.clearButton.textContent = options.locale.clear;\n  }\n  if ('todayButton' in options) {\n    if (options.todayButton) {\n      showElement(picker.controls.todayButton);\n    } else {\n      hideElement(picker.controls.todayButton);\n    }\n  }\n  if ('minDate' in options || 'maxDate' in options) {\n    const {minDate, maxDate} = picker.datepicker.config;\n    picker.controls.todayButton.disabled = !isInRange(today(), minDate, maxDate);\n  }\n  if ('clearButton' in options) {\n    if (options.clearButton) {\n      showElement(picker.controls.clearButton);\n    } else {\n      hideElement(picker.controls.clearButton);\n    }\n  }\n}\n\n// Compute view date to reset, which will be...\n// - the last item of the selected dates or defaultViewDate if no selection\n// - limitted to minDate or maxDate if it exceeds the range\nfunction computeResetViewDate(datepicker) {\n  const {dates, config, rangeSideIndex} = datepicker;\n  const viewDate = dates.length > 0\n    ? lastItemOf(dates)\n    : regularizeDate(config.defaultViewDate, config.pickLevel, rangeSideIndex);\n  return limitToRange(viewDate, config.minDate, config.maxDate);\n}\n\n// Change current view's view date\nfunction setViewDate(picker, newDate) {\n  if (!('_oldViewDate' in picker) && newDate !== picker.viewDate) {\n    picker._oldViewDate = picker.viewDate;\n  }\n  picker.viewDate = newDate;\n\n  // return whether the new date is in different period on time from the one\n  // displayed in the current view\n  // when true, the view needs to be re-rendered on the next UI refresh.\n  const {id, year, first, last} = picker.currentView;\n  const viewYear = new Date(newDate).getFullYear();\n  switch (id) {\n    case 0:\n      return newDate < first || newDate > last;\n    case 1:\n      return viewYear !== year;\n    default:\n      return viewYear < first || viewYear > last;\n  }\n}\n\nfunction getTextDirection(el) {\n  return window.getComputedStyle(el).direction;\n}\n\n// find the closet scrollable ancestor elemnt under the body\nfunction findScrollParents(el) {\n  const parent = getParent(el);\n  if (parent === document.body || !parent) {\n    return;\n  }\n\n  // checking overflow only is enough because computed overflow cannot be\n  // visible or a combination of visible and other when either axis is set\n  // to other than visible.\n  // (Setting one axis to other than 'visible' while the other is 'visible'\n  // results in the other axis turning to 'auto')\n  return window.getComputedStyle(parent).overflow !== 'visible'\n    ? parent\n    : findScrollParents(parent);\n}\n\n// Class representing the picker UI\nexport default class Picker {\n  constructor(datepicker) {\n    const {config, inputField} = this.datepicker = datepicker;\n\n    const template = pickerTemplate.replace(/%buttonClass%/g, config.buttonClass);\n    const element = this.element = parseHTML(template).firstChild;\n    const [header, main, footer] = element.firstChild.children;\n    const title = header.firstElementChild;\n    const [prevButton, viewSwitch, nextButton] = header.lastElementChild.children;\n    const [todayButton, clearButton] = footer.firstChild.children;\n    const controls = {\n      title,\n      prevButton,\n      viewSwitch,\n      nextButton,\n      todayButton,\n      clearButton,\n    };\n    this.main = main;\n    this.controls = controls;\n\n    const elementClass = inputField ? 'dropdown' : 'inline';\n    element.classList.add(`datepicker-${elementClass}`);\n\n    processPickerOptions(this, config);\n    this.viewDate = computeResetViewDate(datepicker);\n\n    // set up event listeners\n    registerListeners(datepicker, [\n      [element, 'mousedown', onMousedownPicker],\n      [main, 'click', onClickView.bind(null, datepicker)],\n      [controls.viewSwitch, 'click', onClickViewSwitch.bind(null, datepicker)],\n      [controls.prevButton, 'click', onClickPrevButton.bind(null, datepicker)],\n      [controls.nextButton, 'click', onClickNextButton.bind(null, datepicker)],\n      [controls.todayButton, 'click', goToOrSelectToday.bind(null, datepicker)],\n      [controls.clearButton, 'click', clearSelection.bind(null, datepicker)],\n    ]);\n\n    // set up views\n    this.views = [\n      new DaysView(this),\n      new MonthsView(this),\n      new YearsView(this, {id: 2, name: 'years', cellClass: 'year', step: 1}),\n      new YearsView(this, {id: 3, name: 'decades', cellClass: 'decade', step: 10}),\n    ];\n    this.currentView = this.views[config.startView];\n\n    this.currentView.render();\n    this.main.appendChild(this.currentView.element);\n    if (config.container) {\n      config.container.appendChild(this.element);\n    } else {\n      inputField.after(this.element);\n    }\n  }\n\n  setOptions(options) {\n    processPickerOptions(this, options);\n    this.views.forEach((view) => {\n      view.init(options, false);\n    });\n    this.currentView.render();\n  }\n\n  detach() {\n    this.element.remove();\n  }\n\n  show() {\n    if (this.active) {\n      return;\n    }\n\n    const {datepicker, element} = this;\n    const inputField = datepicker.inputField;\n    if (inputField) {\n      // ensure picker's direction matches input's\n      const inputDirection = getTextDirection(inputField);\n      if (inputDirection !== getTextDirection(getParent(element))) {\n        element.dir = inputDirection;\n      } else if (element.dir) {\n        element.removeAttribute('dir');\n      }\n\n      // Determine the picker's position first to prevent `orientation: 'auto'`\n      // from being miscalculated to 'bottom' after the picker temporarily\n      // shown below the input field expands the document height if the field\n      // is at the bottom edge of the document\n      this.place();\n      element.classList.add('active');\n\n      if (datepicker.config.disableTouchKeyboard) {\n        inputField.blur();\n      }\n    } else {\n      element.classList.add('active');\n    }\n    this.active = true;\n    triggerDatepickerEvent(datepicker, 'show');\n  }\n\n  hide() {\n    if (!this.active) {\n      return;\n    }\n    this.datepicker.exitEditMode();\n    this.element.classList.remove('active');\n    this.active = false;\n    triggerDatepickerEvent(this.datepicker, 'hide');\n  }\n\n  place() {\n    const {classList, style} = this.element;\n    // temporarily display the picker to get its size and offset parent\n    style.display = 'block';\n\n    const {\n      width: calendarWidth,\n      height: calendarHeight,\n    } = this.element.getBoundingClientRect();\n    const offsetParent = this.element.offsetParent;\n    // turn the picker back to hidden so that the position is determined with\n    // the state before it is shown.\n    style.display = '';\n\n    const {config, inputField} = this.datepicker;\n    const {\n      left: inputLeft,\n      top: inputTop,\n      right: inputRight,\n      bottom: inputBottom,\n      width: inputWidth,\n      height: inputHeight\n    } = inputField.getBoundingClientRect();\n    let {x: orientX, y: orientY} = config.orientation;\n    let left = inputLeft;\n    let top = inputTop;\n\n    // caliculate offsetLeft/Top of inputField\n    if (offsetParent === document.body || !offsetParent) {\n      left += window.scrollX;\n      top += window.scrollY;\n    } else {\n      const offsetParentRect = offsetParent.getBoundingClientRect();\n      left -= offsetParentRect.left - offsetParent.scrollLeft;\n      top -= offsetParentRect.top - offsetParent.scrollTop;\n    }\n\n    // caliculate the boundaries of the visible area that contains inputField\n    const scrollParent = findScrollParents(inputField);\n    let scrollAreaLeft = 0;\n    let scrollAreaTop = 0;\n    let {\n      clientWidth: scrollAreaRight,\n      clientHeight: scrollAreaBottom,\n    } = document.documentElement;\n\n    if (scrollParent) {\n      const scrollParentRect = scrollParent.getBoundingClientRect();\n      if (scrollParentRect.top > 0) {\n        scrollAreaTop = scrollParentRect.top;\n      }\n      if (scrollParentRect.left > 0) {\n        scrollAreaLeft = scrollParentRect.left;\n      }\n      if (scrollParentRect.right < scrollAreaRight) {\n        scrollAreaRight = scrollParentRect.right;\n      }\n      if (scrollParentRect.bottom < scrollAreaBottom) {\n        scrollAreaBottom = scrollParentRect.bottom;\n      }\n    }\n\n    // determine the horizontal orientation and left position\n    let adjustment = 0;\n    if (orientX === 'auto') {\n      if (inputLeft < scrollAreaLeft) {\n        orientX = 'left';\n        adjustment = scrollAreaLeft - inputLeft;\n      } else if (inputLeft + calendarWidth > scrollAreaRight) {\n        orientX = 'right';\n        if (scrollAreaRight < inputRight) {\n          adjustment = scrollAreaRight - inputRight;\n        }\n      } else if (getTextDirection(inputField) === 'rtl') {\n        orientX = inputRight - calendarWidth < scrollAreaLeft ? 'left' : 'right';\n      } else {\n        orientX = 'left';\n      }\n    }\n    if (orientX === 'right') {\n      left += inputWidth - calendarWidth;\n    }\n    left += adjustment;\n\n    // determine the vertical orientation and top position\n    if (orientY === 'auto') {\n      if (inputTop - calendarHeight > scrollAreaTop) {\n        orientY = inputBottom + calendarHeight > scrollAreaBottom ? 'top' : 'bottom';\n      } else {\n        orientY = 'bottom';\n      }\n    }\n    if (orientY === 'top') {\n      top -= calendarHeight;\n    } else {\n      top += inputHeight;\n    }\n\n    classList.remove(...Object.values(orientClasses));\n    classList.add(orientClasses[orientX], orientClasses[orientY]);\n\n    style.left = toPx(left);\n    style.top = toPx(top);\n  }\n\n  setViewSwitchLabel(labelText) {\n    this.controls.viewSwitch.textContent = labelText;\n  }\n\n  setPrevButtonDisabled(disabled) {\n    this.controls.prevButton.disabled = disabled;\n  }\n\n  setNextButtonDisabled(disabled) {\n    this.controls.nextButton.disabled = disabled;\n  }\n\n  changeView(viewId) {\n    const currentView = this.currentView;\n    if (viewId !== currentView.id) {\n      if (!this._oldView) {\n        this._oldView = currentView;\n      }\n      this.currentView = this.views[viewId];\n      this._renderMethod = 'render';\n    }\n    return this;\n  }\n\n  // Change the focused date (view date)\n  changeFocus(newViewDate) {\n    this._renderMethod = setViewDate(this, newViewDate) ? 'render' : 'refreshFocus';\n    this.views.forEach((view) => {\n      view.updateFocus();\n    });\n    return this;\n  }\n\n  // Apply the change of the selected dates\n  update(viewDate = undefined) {\n    const newViewDate = viewDate === undefined\n      ? computeResetViewDate(this.datepicker)\n      : viewDate;\n    this._renderMethod = setViewDate(this, newViewDate) ? 'render' : 'refresh';\n    this.views.forEach((view) => {\n      view.updateFocus();\n      view.updateSelection();\n    });\n    return this;\n  }\n\n  // Refresh the picker UI\n  render(quickRender = true) {\n    const {currentView, datepicker, _oldView: oldView} = this;\n    const oldViewDate = new Date(this._oldViewDate);\n    const renderMethod = (quickRender && this._renderMethod) || 'render';\n    delete this._oldView;\n    delete this._oldViewDate;\n    delete this._renderMethod;\n\n    currentView[renderMethod]();\n    if (oldView) {\n      this.main.replaceChild(currentView.element, oldView.element);\n      triggerDatepickerEvent(datepicker, 'changeView');\n    }\n    if (!isNaN(oldViewDate)) {\n      const newViewDate = new Date(this.viewDate);\n      if (newViewDate.getFullYear() !== oldViewDate.getFullYear()) {\n        triggerDatepickerEvent(datepicker, 'changeYear');\n      }\n      if (newViewDate.getMonth() !== oldViewDate.getMonth()) {\n        triggerDatepickerEvent(datepicker, 'changeMonth');\n      }\n    }\n  }\n}\n", "import {isInRange} from '../lib/utils.js';\nimport {isActiveElement} from '../lib/dom.js';\nimport {addDays, addMonths, addYears} from '../lib/date.js';\nimport {\n  goToPrevOrNext,\n  switchView,\n  clearSelection,\n  goToOrSelectToday,\n  unfocus,\n} from './functions.js';\n\n// Find the closest date that doesn't meet the condition for unavailable date\n// Returns undefined if no available date is found\n// addFn: function to calculate the next date\n//   - args: time value, amount\n// increase: amount to pass to addFn\n// testFn: function to test the unavailability of the date\n//   - args: time value; return: true if unavailable\nfunction findNextAvailableOne(date, addFn, increase, testFn, min, max) {\n  if (!isInRange(date, min, max)) {\n    return;\n  }\n  if (testFn(date)) {\n    const newDate = addFn(date, increase);\n    return findNextAvailableOne(newDate, addFn, increase, testFn, min, max);\n  }\n  return date;\n}\n\n// direction: -1 (left/up), 1 (right/down)\n// vertical: true for up/down, false for left/right\nfunction moveByArrowKey(datepicker, direction, vertical) {\n  const picker = datepicker.picker;\n  const currentView = picker.currentView;\n  const step = currentView.step || 1;\n  let viewDate = picker.viewDate;\n  let addFn;\n  switch (currentView.id) {\n    case 0:\n      viewDate = addDays(viewDate, vertical ? direction * 7 : direction);\n      addFn = addDays;\n      break;\n    case 1:\n      viewDate = addMonths(viewDate, vertical ? direction * 4 : direction);\n      addFn = addMonths;\n      break;\n    default:\n      viewDate = addYears(viewDate, direction * (vertical ? 4 : 1) * step);\n      addFn = addYears;\n  }\n  viewDate = findNextAvailableOne(\n    viewDate,\n    addFn,\n    direction < 0 ? -step : step,\n    (date) => currentView.disabled.includes(date),\n    currentView.minDate,\n    currentView.maxDate\n  );\n  if (viewDate !== undefined) {\n    picker.changeFocus(viewDate).render();\n  }\n}\n\nexport function onKeydown(datepicker, ev) {\n  const {config, picker, editMode} = datepicker;\n  const active = picker.active;\n  const {key, altKey, shiftKey} = ev;\n  const ctrlOrMetaKey = ev.ctrlKey || ev.metaKey;\n  const cancelEvent = () => {\n    ev.preventDefault();\n    ev.stopPropagation();\n  };\n\n  // tab/enter keys should not be taken by shortcut keys\n  if (key === 'Tab') {\n    unfocus(datepicker);\n    return;\n  }\n  if (key === 'Enter') {\n    if (!active) {\n      datepicker.update();\n    } else if (editMode) {\n      datepicker.exitEditMode({update: true, autohide: config.autohide});\n    } else {\n      const currentView = picker.currentView;\n      if (currentView.isMinView) {\n        datepicker.setDate(picker.viewDate);\n      } else {\n        picker.changeView(currentView.id - 1).render();\n        cancelEvent();\n      }\n    }\n    return;\n  }\n\n  const shortcutKeys = config.shortcutKeys;\n  const keyInfo = {key, ctrlOrMetaKey, altKey, shiftKey};\n  const shortcut = Object.keys(shortcutKeys).find((item) => {\n    const keyDef = shortcutKeys[item];\n    return !Object.keys(keyDef).find(prop => keyDef[prop] !== keyInfo[prop]);\n  });\n  if (shortcut) {\n    let action;\n    if (shortcut === 'toggle') {\n      action = shortcut;\n    } else if (editMode) {\n      if (shortcut === 'exitEditMode') {\n        action = shortcut;\n      }\n    } else if (active) {\n      if (shortcut === 'hide') {\n        action = shortcut;\n      } else if (shortcut === 'prevButton') {\n        action = [goToPrevOrNext, [datepicker, -1]];\n      } else if (shortcut === 'nextButton') {\n        action = [goToPrevOrNext, [datepicker, 1]];\n      } else if (shortcut === 'viewSwitch') {\n        action = [switchView, [datepicker]];\n      } else if (config.clearButton && shortcut === 'clearButton') {\n        action = [clearSelection, [datepicker]];\n      } else if (config.todayButton && shortcut === 'todayButton') {\n        action = [goToOrSelectToday, [datepicker]];\n      }\n    } else if (shortcut === 'show') {\n      action = shortcut;\n    }\n    if (action) {\n      if (Array.isArray(action)) {\n        action[0].apply(null, action[1]);\n      } else {\n        datepicker[action]();\n      }\n      cancelEvent();\n      return;\n    }\n  }\n\n  // perform as a regular <input> when picker in hidden or in edit mode\n  if (!active || editMode) {\n    return;\n  }\n\n  const handleArrowKeyPress = (direction, vertical) => {\n    if (shiftKey || ctrlOrMetaKey || altKey) {\n      datepicker.enterEditMode();\n    } else {\n      moveByArrowKey(datepicker, direction, vertical);\n      ev.preventDefault();\n    }\n  };\n\n  if (key === 'ArrowLeft') {\n    handleArrowKeyPress(-1, false);\n  } else if (key === 'ArrowRight') {\n    handleArrowKeyPress(1, false);\n  } else if (key === 'ArrowUp') {\n    handleArrowKeyPress(-1, true);\n  } else if (key === 'ArrowDown') {\n    handleArrowKeyPress(1, true);\n  } else if (\n    key === 'Backspace'\n    || key === 'Delete'\n      // When autofill is performed, Chromium-based browsers trigger fake\n      // keydown/keyup events that don't have the `key` property (on Edge,\n      // keyup only) in addition to the input event. Therefore, we need to\n      // check the existence of `key`'s value before checking the length.\n      // (issue #144)\n    || (key && key.length === 1 && !ctrlOrMetaKey)\n  ) {\n    datepicker.enterEditMode();\n  }\n}\n\nexport function onFocus(datepicker) {\n  if (datepicker.config.showOnFocus && !datepicker._showing) {\n    datepicker.show();\n  }\n}\n\n// for the prevention for entering edit mode while getting focus on click\nexport function onMousedown(datepicker, ev) {\n  const el = ev.target;\n  if (datepicker.picker.active || datepicker.config.showOnClick) {\n    el._active = isActiveElement(el);\n    el._clicking = setTimeout(() => {\n      delete el._active;\n      delete el._clicking;\n    }, 2000);\n  }\n}\n\nexport function onClickInput(datepicker, ev) {\n  const el = ev.target;\n  if (!el._clicking) {\n    return;\n  }\n  clearTimeout(el._clicking);\n  delete el._clicking;\n\n  if (el._active) {\n    datepicker.enterEditMode();\n  }\n  delete el._active;\n\n  if (datepicker.config.showOnClick) {\n    datepicker.show();\n  }\n}\n\nexport function onPaste(datepicker, ev) {\n  if (ev.clipboardData.types.includes('text/plain')) {\n    datepicker.enterEditMode();\n  }\n}\n", "import {isActiveElement} from '../lib/dom.js';\nimport {findElementInEventPath} from '../lib/event.js';\nimport {unfocus} from './functions.js';\n\n// for the `document` to delegate the events from outside the picker/input field\nexport function onClickOutside(datepicker, ev) {\n  const {element, picker} = datepicker;\n  // check both picker's and input's activeness to make updateOnBlur work in\n  // the cases where...\n  // - picker is hidden by ESC key press \u2192 input stays focused\n  // - input is unfocused by closing mobile keyboard \u2192 piker is kept shown\n  if (!picker.active && !isActiveElement(element)) {\n    return;\n  }\n  const pickerElem = picker.element;\n  if (findElementInEventPath(ev, el => el === element || el === pickerElem)) {\n    return;\n  }\n  unfocus(datepicker);\n}\n", "import {lastItemOf, stringToArray, isInRange} from './lib/utils.js';\nimport {today, regularizeDate} from './lib/date.js';\nimport {parseDate, formatDate} from './lib/date-format.js';\nimport {isActiveElement} from './lib/dom.js';\nimport {registerListeners, unregisterListeners} from './lib/event.js';\nimport locales from './i18n/base-locales.js';\nimport defaultOptions from './options/defaultOptions.js';\nimport processOptions from './options/processOptions.js';\nimport createShortcutKeyConfig from './options/shortcutKeys.js';\nimport Picker from './picker/Picker.js';\nimport {triggerDatepickerEvent} from './events/functions.js';\nimport {\n  onKeydown,\n  onFocus,\n  onMousedown,\n  onClickInput,\n  onPaste,\n} from './events/elementListeners.js';\nimport {onClickOutside} from './events/otherListeners.js';\n\nfunction stringifyDates(dates, config) {\n  return dates\n    .map(dt => formatDate(dt, config.format, config.locale))\n    .join(config.dateDelimiter);\n}\n\n// parse input dates and create an array of time values for selection\n// returns undefined if there are no valid dates in inputDates\n// when origDates (current selection) is passed, the function works to mix\n// the input dates into the current selection\nfunction processInputDates(datepicker, inputDates, clear = false) {\n  if (inputDates.length === 0) {\n    // empty input is considered valid unless origiDates is passed\n    return clear ? [] : undefined;\n  }\n\n  const {config, dates: origDates, rangeSideIndex} = datepicker;\n  const {pickLevel, maxNumberOfDates} = config;\n  let newDates = inputDates.reduce((dates, dt) => {\n    let date = parseDate(dt, config.format, config.locale);\n    if (date === undefined) {\n      return dates;\n    }\n    // adjust to 1st of the month/Jan 1st of the year\n    // or to the last day of the monh/Dec 31st of the year if the datepicker\n    // is the range-end picker of a rangepicker\n    date = regularizeDate(date, pickLevel, rangeSideIndex);\n    if (\n      isInRange(date, config.minDate, config.maxDate)\n      && !dates.includes(date)\n      && !config.checkDisabled(date, pickLevel)\n      && (pickLevel > 0 || !config.daysOfWeekDisabled.includes(new Date(date).getDay()))\n    ) {\n      dates.push(date);\n    }\n    return dates;\n  }, []);\n  if (newDates.length === 0) {\n    return;\n  }\n  if (config.multidate && !clear) {\n    // get the synmetric difference between origDates and newDates\n    newDates = newDates.reduce((dates, date) => {\n      if (!origDates.includes(date)) {\n        dates.push(date);\n      }\n      return dates;\n    }, origDates.filter(date => !newDates.includes(date)));\n  }\n  // do length check always because user can input multiple dates regardless of the mode\n  return maxNumberOfDates && newDates.length > maxNumberOfDates\n    ? newDates.slice(maxNumberOfDates * -1)\n    : newDates;\n}\n\n// refresh the UI elements\n// modes: 1: input only, 2, picker only, 3 both\nfunction refreshUI(datepicker, mode = 3, quickRender = true, viewDate = undefined) {\n  const {config, picker, inputField} = datepicker;\n  if (mode & 2) {\n    const newView = picker.active ? config.pickLevel : config.startView;\n    picker.update(viewDate).changeView(newView).render(quickRender);\n  }\n  if (mode & 1 && inputField) {\n    inputField.value = stringifyDates(datepicker.dates, config);\n  }\n}\n\nfunction setDate(datepicker, inputDates, options) {\n  const config = datepicker.config;\n  let {clear, render, autohide, revert, forceRefresh, viewDate} = options;\n  if (render === undefined) {\n    render = true;\n  }\n  if (!render) {\n    autohide = forceRefresh = false;\n  } else if (autohide === undefined) {\n    autohide = config.autohide;\n  }\n  viewDate = parseDate(viewDate, config.format, config.locale);\n\n  const newDates = processInputDates(datepicker, inputDates, clear);\n  if (!newDates && !revert) {\n    return;\n  }\n  if (newDates && newDates.toString() !== datepicker.dates.toString()) {\n    datepicker.dates = newDates;\n    refreshUI(datepicker, render ? 3 : 1, true, viewDate);\n    triggerDatepickerEvent(datepicker, 'changeDate');\n  } else {\n    refreshUI(datepicker, forceRefresh ? 3 : 1, true, viewDate);\n  }\n\n  if (autohide) {\n    datepicker.hide();\n  }\n}\n\nfunction getOutputConverter(datepicker, format) {\n  return format\n    ? date => formatDate(date, format, datepicker.config.locale)\n    : date => new Date(date);\n}\n\n/**\n * Class representing a date picker\n */\nexport default class Datepicker {\n  /**\n   * Create a date picker\n   * @param  {Element} element - element to bind a date picker\n   * @param  {Object} [options] - config options\n   * @param  {DateRangePicker} [rangepicker] - DateRangePicker instance the\n   * date picker belongs to. Use this only when creating date picker as a part\n   * of date range picker\n   */\n  constructor(element, options = {}, rangepicker = undefined) {\n    element.datepicker = this;\n    this.element = element;\n    this.dates = [];\n\n    // initialize config\n    const config = this.config = Object.assign({\n      buttonClass: (options.buttonClass && String(options.buttonClass)) || 'button',\n      container: null,\n      defaultViewDate: today(),\n      maxDate: undefined,\n      minDate: undefined,\n    }, processOptions(defaultOptions, this));\n\n    // configure by type\n    let inputField;\n    if (element.tagName === 'INPUT') {\n      inputField = this.inputField = element;\n      inputField.classList.add('datepicker-input');\n      if (options.container) {\n        // omit string type check because it doesn't guarantee to avoid errors\n        // (invalid selector string causes abend with sytax error)\n        config.container = options.container instanceof HTMLElement\n          ? options.container\n          : document.querySelector(options.container);\n      }\n    } else {\n      config.container = element;\n    }\n    if (rangepicker) {\n      // check validiry\n      const index = rangepicker.inputs.indexOf(inputField);\n      const datepickers = rangepicker.datepickers;\n      if (index < 0 || index > 1 || !Array.isArray(datepickers)) {\n        throw Error('Invalid rangepicker object.');\n      }\n      // attach itaelf to the rangepicker here so that processInputDates() can\n      // determine if this is the range-end picker of the rangepicker while\n      // setting inital values when pickLevel > 0\n      datepickers[index] = this;\n      this.rangepicker = rangepicker;\n      this.rangeSideIndex = index;\n    }\n\n    // set up config\n    this._options = options;\n    Object.assign(config, processOptions(options, this));\n    config.shortcutKeys = createShortcutKeyConfig(options.shortcutKeys || {});\n\n    // process initial value\n    const initialDates = stringToArray(\n      element.value || element.dataset.date,\n      config.dateDelimiter\n    );\n    delete element.dataset.date;\n    const inputDateValues = processInputDates(this, initialDates);\n    if (inputDateValues && inputDateValues.length > 0) {\n      this.dates = inputDateValues;\n    }\n    if (inputField) {\n      inputField.value = stringifyDates(this.dates, config);\n    }\n\n    // set up picekr element\n    const picker = this.picker = new Picker(this);\n\n    const keydownListener = [element, 'keydown', onKeydown.bind(null, this)];\n    if (inputField) {\n      registerListeners(this, [\n        keydownListener,\n        [inputField, 'focus', onFocus.bind(null, this)],\n        [inputField, 'mousedown', onMousedown.bind(null, this)],\n        [inputField, 'click', onClickInput.bind(null, this)],\n        [inputField, 'paste', onPaste.bind(null, this)],\n        // To detect a click on outside, just listening to mousedown is enough,\n        // no need to listen to touchstart.\n        // Actually, listening to touchstart can be a problem because, while\n        // mousedown is fired only on tapping but not on swiping/pinching,\n        // touchstart is fired on swiping/pinching as well.\n        // (issue #95)\n        [document, 'mousedown', onClickOutside.bind(null, this)],\n        [window, 'resize', picker.place.bind(picker)]\n      ]);\n    } else {\n      registerListeners(this, [keydownListener]);\n      this.show();\n    }\n  }\n\n  /**\n   * Format Date object or time value in given format and language\n   * @param  {Date|Number} date - date or time value to format\n   * @param  {String|Object} format - format string or object that contains\n   * toDisplay() custom formatter, whose signature is\n   * - args:\n   *   - date: {Date} - Date instance of the date passed to the method\n   *   - format: {Object} - the format object passed to the method\n   *   - locale: {Object} - locale for the language specified by `lang`\n   * - return:\n   *     {String} formatted date\n   * @param  {String} [lang=en] - language code for the locale to use\n   * @return {String} formatted date\n   */\n  static formatDate(date, format, lang) {\n    return formatDate(date, format, lang && locales[lang] || locales.en);\n  }\n\n  /**\n   * Parse date string\n   * @param  {String|Date|Number} dateStr - date string, Date object or time\n   * value to parse\n   * @param  {String|Object} format - format string or object that contains\n   * toValue() custom parser, whose signature is\n   * - args:\n   *   - dateStr: {String|Date|Number} - the dateStr passed to the method\n   *   - format: {Object} - the format object passed to the method\n   *   - locale: {Object} - locale for the language specified by `lang`\n   * - return:\n   *     {Date|Number} parsed date or its time value\n   * @param  {String} [lang=en] - language code for the locale to use\n   * @return {Number} time value of parsed date\n   */\n  static parseDate(dateStr, format, lang) {\n    return parseDate(dateStr, format, lang && locales[lang] || locales.en);\n  }\n\n  /**\n   * @type {Object} - Installed locales in `[languageCode]: localeObject` format\n   * en`:_English (US)_ is pre-installed.\n   */\n  static get locales() {\n    return locales;\n  }\n\n  /**\n   * @type {Boolean} - Whether the picker element is shown. `true` whne shown\n   */\n  get active() {\n    return !!(this.picker && this.picker.active);\n  }\n\n  /**\n   * @type {HTMLDivElement} - DOM object of picker element\n   */\n  get pickerElement() {\n    return this.picker ? this.picker.element : undefined;\n  }\n\n  /**\n   * Set new values to the config options\n   * @param {Object} options - config options to update\n   */\n  setOptions(options) {\n    const newOptions = processOptions(options, this);\n    Object.assign(this._options, options);\n    Object.assign(this.config, newOptions);\n    this.picker.setOptions(newOptions);\n\n    refreshUI(this, 3);\n  }\n\n  /**\n   * Show the picker element\n   */\n  show() {\n    if (this.inputField) {\n      const {config, inputField} = this;\n      if (inputField.disabled || (inputField.readOnly && !config.enableOnReadonly)) {\n        return;\n      }\n      if (!isActiveElement(inputField) && !config.disableTouchKeyboard) {\n        this._showing = true;\n        inputField.focus();\n        delete this._showing;\n      }\n    }\n    this.picker.show();\n  }\n\n  /**\n   * Hide the picker element\n   * Not available on inline picker\n   */\n  hide() {\n    if (!this.inputField) {\n      return;\n    }\n    this.picker.hide();\n    this.picker.update().changeView(this.config.startView).render();\n  }\n\n  /**\n   * Toggle the display of the picker element\n   * Not available on inline picker\n   *\n   * Unlike hide(), the picker does not return to the start view when hiding.\n   */\n  toggle() {\n    if (!this.picker.active) {\n      this.show();\n    } else if (this.inputField) {\n      this.picker.hide();\n    }\n  }\n\n  /**\n   * Destroy the Datepicker instance\n   * @return {Detepicker} - the instance destroyed\n   */\n  destroy() {\n    this.hide();\n    unregisterListeners(this);\n    this.picker.detach();\n    const element = this.element;\n    element.classList.remove('datepicker-input');\n    delete element.datepicker;\n    return this;\n  }\n\n  /**\n   * Get the selected date(s)\n   *\n   * The method returns a Date object of selected date by default, and returns\n   * an array of selected dates in multidate mode. If format string is passed,\n   * it returns date string(s) formatted in given format.\n   *\n   * @param  {String} [format] - format string to stringify the date(s)\n   * @return {Date|String|Date[]|String[]} - selected date(s), or if none is\n   * selected, empty array in multidate mode and undefined in sigledate mode\n   */\n  getDate(format = undefined) {\n    const callback = getOutputConverter(this, format);\n\n    if (this.config.multidate) {\n      return this.dates.map(callback);\n    }\n    if (this.dates.length > 0) {\n      return callback(this.dates[0]);\n    }\n  }\n\n  /**\n   * Set selected date(s)\n   *\n   * In multidate mode, you can pass multiple dates as a series of arguments\n   * or an array. (Since each date is parsed individually, the type of the\n   * dates doesn't have to be the same.)\n   * The given dates are used to toggle the select status of each date. The\n   * number of selected dates is kept from exceeding the length set to\n   * maxNumberOfDates.\n   *\n   * With clear: true option, the method can be used to clear the selection\n   * and to replace the selection instead of toggling in multidate mode.\n   * If the option is passed with no date arguments or an empty dates array,\n   * it works as \"clear\" (clear the selection then set nothing), and if the\n   * option is passed with new dates to select, it works as \"replace\" (clear\n   * the selection then set the given dates)\n   *\n   * When render: false option is used, the method omits re-rendering the\n   * picker element. In this case, you need to call refresh() method later in\n   * order for the picker element to reflect the changes. The input field is\n   * refreshed always regardless of this option.\n   *\n   * When invalid (unparsable, repeated, disabled or out-of-range) dates are\n   * passed, the method ignores them and applies only valid ones. In the case\n   * that all the given dates are invalid, which is distinguished from passing\n   * no dates, the method considers it as an error and leaves the selection\n   * untouched. (The input field also remains untouched unless revert: true\n   * option is used.)\n   * Replacing the selection with the same date(s) also causes a similar\n   * situation. In both cases, the method does not refresh the picker element\n   * unless forceRefresh: true option is used.\n   *\n   * If viewDate option is used, the method changes the focused date to the\n   * specified date instead of the last item of the selection.\n   *\n   * @param {...(Date|Number|String)|Array} [dates] - Date strings, Date\n   * objects, time values or mix of those for new selection\n   * @param {Object} [options] - function options\n   * - clear: {boolean} - Whether to clear the existing selection\n   *     defualt: false\n   * - render: {boolean} - Whether to re-render the picker element\n   *     default: true\n   * - autohide: {boolean} - Whether to hide the picker element after re-render\n   *     Ignored when used with render: false\n   *     default: config.autohide\n   * - revert: {boolean} - Whether to refresh the input field when all the\n   *     passed dates are invalid\n   *     default: false\n   * - forceRefresh: {boolean} - Whether to refresh the picker element when\n   *     passed dates don't change the existing selection\n   *     default: false\n   * - viewDate: {Date|Number|String} - Date to be focused after setiing date(s)\n   *     default: The last item of the resulting selection, or defaultViewDate\n   *     config option if none is selected\n   */\n  setDate(...args) {\n    const dates = [...args];\n    const opts = {};\n    const lastArg = lastItemOf(args);\n    if (\n      lastArg\n      && typeof lastArg === 'object'\n      && !Array.isArray(lastArg)\n      && !(lastArg instanceof Date)\n    ) {\n      Object.assign(opts, dates.pop());\n    }\n\n    const inputDates = Array.isArray(dates[0]) ? dates[0] : dates;\n    setDate(this, inputDates, opts);\n  }\n\n  /**\n   * Update the selected date(s) with input field's value\n   * Not available on inline picker\n   *\n   * The input field will be refreshed with properly formatted date string.\n   *\n   * In the case that all the entered dates are invalid (unparsable, repeated,\n   * disabled or out-of-range), which is distinguished from empty input field,\n   * the method leaves the input field untouched as well as the selection by\n   * default. If revert: true option is used in this case, the input field is\n   * refreshed with the existing selection.\n   * The method also doesn't refresh the picker element in this case and when\n   * the entered dates are the same as the existing selection. If\n   * forceRefresh: true option is used, the picker element is refreshed in\n   * these cases too.\n   *\n   * @param  {Object} [options] - function options\n   * - autohide: {boolean} - whether to hide the picker element after refresh\n   *     default: false\n   * - revert: {boolean} - Whether to refresh the input field when all the\n   *     passed dates are invalid\n   *     default: false\n   * - forceRefresh: {boolean} - Whether to refresh the picer element when\n   *     input field's value doesn't change the existing selection\n   *     default: false\n   */\n  update(options = undefined) {\n    if (!this.inputField) {\n      return;\n    }\n\n    const opts = Object.assign(options || {}, {clear: true, render: true, viewDate: undefined});\n    const inputDates = stringToArray(this.inputField.value, this.config.dateDelimiter);\n    setDate(this, inputDates, opts);\n  }\n\n  /**\n   * Get the focused date\n   *\n   * The method returns a Date object of focused date by default. If format\n   * string is passed, it returns date string formatted in given format.\n   *\n   * @param  {String} [format] - format string to stringify the date\n   * @return {Date|String} - focused date (viewDate)\n   */\n  getFocusedDate(format = undefined) {\n    return getOutputConverter(this, format)(this.picker.viewDate);\n  }\n\n  /**\n   * Set focused date\n   *\n   * By default, the method updates the focus on the view shown at the time,\n   * or the one set to the startView config option if the picker is hidden.\n   * When resetView: true is passed, the view displayed is changed to the\n   * pickLevel config option's if the picker is shown.\n   *\n   * @param {Date|Number|String} viewDate - date string, Date object, time\n   * values of the date to focus\n   * @param {Boolean} [resetView] - whether to change the view to pickLevel\n   * config option's when the picker is shown. Ignored when the picker is\n   * hidden\n   */\n  setFocusedDate(viewDate, resetView = false) {\n    const {config, picker, active, rangeSideIndex} = this;\n    const pickLevel = config.pickLevel;\n    const newViewDate = parseDate(viewDate, config.format, config.locale);\n    if (newViewDate === undefined) {\n      return;\n    }\n\n    picker.changeFocus(regularizeDate(newViewDate, pickLevel, rangeSideIndex));\n    if (active && resetView) {\n      picker.changeView(pickLevel);\n    }\n    picker.render();\n  }\n\n  /**\n   * Refresh the picker element and the associated input field\n   * @param {String} [target] - target item when refreshing one item only\n   * 'picker' or 'input'\n   * @param {Boolean} [forceRender] - whether to re-render the picker element\n   * regardless of its state instead of optimized refresh\n   */\n  refresh(target = undefined, forceRender = false) {\n    if (target && typeof target !== 'string') {\n      forceRender = target;\n      target = undefined;\n    }\n\n    let mode;\n    if (target === 'picker') {\n      mode = 2;\n    } else if (target === 'input') {\n      mode = 1;\n    } else {\n      mode = 3;\n    }\n    refreshUI(this, mode, !forceRender);\n  }\n\n  /**\n   * Enter edit mode\n   * Not available on inline picker or when the picker element is hidden\n   */\n  enterEditMode() {\n    const inputField = this.inputField;\n    if (!inputField || inputField.readOnly || !this.picker.active || this.editMode) {\n      return;\n    }\n    this.editMode = true;\n    inputField.classList.add('in-edit');\n  }\n\n  /**\n   * Exit from edit mode\n   * Not available on inline picker\n   * @param  {Object} [options] - function options\n   * - update: {boolean} - whether to call update() after exiting\n   *     If false, input field is revert to the existing selection\n   *     default: false\n   */\n  exitEditMode(options = undefined) {\n    if (!this.inputField || !this.editMode) {\n      return;\n    }\n    const opts = Object.assign({update: false}, options);\n    delete this.editMode;\n    this.inputField.classList.remove('in-edit');\n    if (opts.update) {\n      this.update(opts);\n    }\n  }\n}\n", "/**\n * German translation for bootstrap-datepicker\n * Sam Zurcher <sam@orelias.ch>\n */\nexport default {\n  de: {\n    days: [\"Sonntag\", \"Montag\", \"Dienstag\", \"Mittwoch\", \"Donnerstag\", \"Freitag\", \"Samstag\"],\n    daysShort: [\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"],\n    daysMin: [\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"],\n    months: [\"Januar\", \"Februar\", \"M\u00E4rz\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Dezember\"],\n    monthsShort: [\"Jan\", \"Feb\", \"M\u00E4r\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dez\"],\n    today: \"Heute\",\n    monthsTitle: \"Monate\",\n    clear: \"L\u00F6schen\",\n    weekStart: 1,\n    format: \"dd.mm.yyyy\"\n  }\n};\n", "/**\n * Canadian English translation for bootstrap-datepicker\n * Mike Nacey <mnacey@gmail.com>\n */\nexport default {\n  'en-CA': {\n    days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n    daysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n    daysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n    months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n    monthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n    today: \"Today\",\n    monthsTitle: \"Months\",\n    clear: \"Clear\",\n    weekStart: 0,\n    format: \"yyyy-mm-dd\"\n  }\n};\n", "import {Datepicker} from 'vanillajs-datepicker';\nimport de from 'vanillajs-datepicker/locales/de';\nimport en from 'vanillajs-datepicker/locales/en-CA';\n\nObject.assign(Datepicker.locales, en, de);\n\n// The Rails locale codes do not all match the ones the datepicker ships.\nexport function mapLocale(locale) {\n    switch (locale) {\n        case 'en':\n            return 'en-CA';\n        default:\n            return locale;\n    }\n}\n\n// The datepicker has its own format syntax (\"dd.mm.yyyy\"), which is not the strftime pattern Ruby\n// uses. Anything rendering a date for the user has to take it from here, otherwise the pattern ends\n// up on screen unreplaced.\nexport function dateFormatFor(locale) {\n    const language = Datepicker.locales[mapLocale(locale)] || Datepicker.locales.en;\n    return language.format;\n}\n", "import {Controller} from '@hotwired/stimulus';\nimport {Datepicker} from 'vanillajs-datepicker';\nimport {mapLocale} from '../components/datepicker/locales';\n\nexport class DatepickerController extends Controller {\n\n    static values = {\n        openerId: String,\n        pickLevel: Number,\n        maxDate: String,\n        minDate: String,\n        locale: String,\n        minDateFor: String,\n        maxDateFor: String,\n        setDateFor: String,\n        setDateForOffset: { type: Number, default: 0 }\n    }\n\n    static targets = [\n        'input'\n    ]\n\n    connect() {\n        this.config = this.loadConfig();\n        // this.datepickerElement.setAttribute('type', 'text');\n        this.datepickerElement.setAttribute('autocomplete', 'off');\n        // register before datepicker because of event order\n        this.registerDateFixer();\n        this.datepicker = new Datepicker(this.datepickerElement, {\n            ...this.config\n        });\n        this.registerCalButtons();\n        this.registerRestrictors();\n    }\n\n    disconnect() {\n        this.datepicker.destroy();\n    }\n\n    loadConfig() {\n        return {\n            pickLevel: this.hasPickLevelValue ? this.pickLevelValue : undefined,\n            language: this.hasLocaleValue ? mapLocale(this.localeValue) : undefined,\n            minDate: this.minDateValue,\n            maxDate: this.maxDateValue,\n            buttonClass: 'btn',\n            showOnClick: false,\n            showOnFocus: false,\n            autohide: true,\n            orientation: 'auto right',\n            todayBtn: true,\n            // clearBtn: true,\n            todayHighlight: true\n        };\n    }\n\n    minDateValueChanged() {\n        if (this.config && this.datepicker) {\n            this.config.minDate = this.minDateValue;\n            this.datepicker.setOptions(this.config)\n        }\n    }\n\n    maxDateValueChanged() {\n        if (this.config && this.datepicker) {\n            this.config.maxDate = this.maxDateValue;\n            this.datepicker.setOptions(this.config)\n        }\n    }\n\n    registerCalButtons() {\n        if (this.hasOpenerIdValue) {\n            document.getElementById(this.openerIdValue).addEventListener('click', () => this.datepicker.show());\n        }\n    }\n\n    registerRestrictors() {\n        if (this.hasMinDateForValue) {\n            this.updateMinDate();\n            this.datepicker.element.addEventListener('changeDate', () => this.updateMinDate());\n        }\n        if (this.hasMaxDateForValue) {\n            this.updateMaxDate();\n            this.datepicker.element.addEventListener('changeDate', () => this.updateMaxDate());\n        }\n        if (this.hasSetDateForValue) {\n            this.datepicker.element.addEventListener('changeDate', () => this.setDateFor());\n        }\n    }\n\n    registerDateFixer() {\n        this.datepickerElement.addEventListener('focusout', (event) => {\n            this.fixDate();\n        });\n    }\n\n    fixDate() {\n        const dateMs = Datepicker.parseDate(this.datepickerElement.value, Datepicker.locales[this.datepicker.config.language].format);\n        const date = dateMs ? new Date(dateMs) : undefined;\n        if (date && date.getFullYear() < 100) {\n            let year = date.getFullYear() + 1900\n            if (year < new Date().getFullYear() - 90) {\n                year += 100;\n            }\n            date.setFullYear(year);\n        }\n        this.datepicker.element.value = Datepicker.formatDate(date, Datepicker.locales[this.datepicker.config.language].format);\n        this.datepicker.setDate(date);\n    }\n\n    updateMinDate() {\n        const elements = this.findElements(this.minDateForValue);\n        elements.forEach(e => {\n            const date = this.datepicker.getDate(Datepicker.locales[this.datepicker.config.language].format);\n            if (date) {\n                e.setAttribute('data-datepicker-min-date-value', date)\n            } else {\n                if (e.hasAttribute('data-datepicker-min-date-value')) {\n                    e.removeAttribute('data-datepicker-min-date-value')\n                }\n            }\n        })\n    }\n\n    updateMaxDate() {\n        const elements = this.findElements(this.maxDateForValue);\n        elements.forEach(e => {\n            const date = this.datepicker.getDate(Datepicker.locales[this.datepicker.config.language].format);\n            if (date) {\n                e.setAttribute('data-datepicker-max-date-value', date)\n            } else {\n                if (e.hasAttribute('data-datepicker-max-date-value')) {\n                    e.removeAttribute('data-datepicker-max-date-value')\n                }\n            }\n        })\n    }\n\n    setDateFor() {\n        const date = this.datepicker.getDate();\n        if (!date) {\n            return;\n        }\n        const elements = this.findElements(this.setDateForValue);\n        elements.forEach(e => {\n            var offsetDate = new Date(date);\n            offsetDate.setDate(offsetDate.getDate() + this.setDateForOffsetValue);\n            e.datepicker.setDate(offsetDate);\n        })\n    }\n\n    findElements(pattern) {\n        if (!pattern) {\n            return [];\n        }\n        // the form is a performance optimization. In general we don't expect to connect inputs across forms.\n        const form = this.datepickerElement.closest('form');\n        let elements;\n        let i;\n        switch (pattern) {\n            case ':next':\n                elements = Array.prototype.slice.call((form || document).querySelectorAll('input.date, input.date_picker'));\n                i = elements.indexOf(this.datepickerElement);\n                return elements[i + 1] ? [elements[i + 1]] : []\n            case ':previous':\n                elements = Array.prototype.slice.call((form || document).querySelectorAll('input.date, input.date_picker'));\n                i = elements.indexOf(this.datepickerElement);\n                return elements[i - 1] ? [elements[i - 1]] : []\n            default:\n                return (form || document).querySelectorAll(pattern)\n        }\n\n    }\n\n    get datepickerElement() {\n        return (this.hasInputTarget && this.inputTarget) || this.element\n    }\n\n}\n", "/*!\nTurbo 8.0.13\nCopyright \u00A9 2025 37signals LLC\n */\n/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2019 Javan Makhmali\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function (prototype) {\n  if (typeof prototype.requestSubmit == \"function\") return\n\n  prototype.requestSubmit = function (submitter) {\n    if (submitter) {\n      validateSubmitter(submitter, this);\n      submitter.click();\n    } else {\n      submitter = document.createElement(\"input\");\n      submitter.type = \"submit\";\n      submitter.hidden = true;\n      this.appendChild(submitter);\n      submitter.click();\n      this.removeChild(submitter);\n    }\n  };\n\n  function validateSubmitter(submitter, form) {\n    submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n    submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n    submitter.form == form ||\n      raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n  }\n\n  function raise(errorConstructor, message, name) {\n    throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n  }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\n\nfunction findSubmitterFromClickTarget(target) {\n  const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n  const candidate = element ? element.closest(\"input, button\") : null;\n  return candidate?.type == \"submit\" ? candidate : null\n}\n\nfunction clickCaptured(event) {\n  const submitter = findSubmitterFromClickTarget(event.target);\n\n  if (submitter && submitter.form) {\n    submittersByForm.set(submitter.form, submitter);\n  }\n}\n\n(function () {\n  if (\"submitter\" in Event.prototype) return\n\n  let prototype = window.Event.prototype;\n  // Certain versions of Safari 15 have a bug where they won't\n  // populate the submitter. This hurts TurboDrive's enable/disable detection.\n  // See https://bugs.webkit.org/show_bug.cgi?id=229660\n  if (\"SubmitEvent\" in window) {\n    const prototypeOfSubmitEvent = window.SubmitEvent.prototype;\n\n    if (/Apple Computer/.test(navigator.vendor) && !(\"submitter\" in prototypeOfSubmitEvent)) {\n      prototype = prototypeOfSubmitEvent;\n    } else {\n      return // polyfill not needed\n    }\n  }\n\n  addEventListener(\"click\", clickCaptured, true);\n\n  Object.defineProperty(prototype, \"submitter\", {\n    get() {\n      if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n        return submittersByForm.get(this.target)\n      }\n    }\n  });\n})();\n\nconst FrameLoadingStyle = {\n  eager: \"eager\",\n  lazy: \"lazy\"\n};\n\n/**\n * Contains a fragment of HTML which is updated based on navigation within\n * it (e.g. via links or form submissions).\n *\n * @customElement turbo-frame\n * @example\n *   <turbo-frame id=\"messages\">\n *     <a href=\"/messages/expanded\">\n *       Show all expanded messages in this frame.\n *     </a>\n *\n *     <form action=\"/messages\">\n *       Show response from this form within this frame.\n *     </form>\n *   </turbo-frame>\n */\nclass FrameElement extends HTMLElement {\n  static delegateConstructor = undefined\n\n  loaded = Promise.resolve()\n\n  static get observedAttributes() {\n    return [\"disabled\", \"loading\", \"src\"]\n  }\n\n  constructor() {\n    super();\n    this.delegate = new FrameElement.delegateConstructor(this);\n  }\n\n  connectedCallback() {\n    this.delegate.connect();\n  }\n\n  disconnectedCallback() {\n    this.delegate.disconnect();\n  }\n\n  reload() {\n    return this.delegate.sourceURLReloaded()\n  }\n\n  attributeChangedCallback(name) {\n    if (name == \"loading\") {\n      this.delegate.loadingStyleChanged();\n    } else if (name == \"src\") {\n      this.delegate.sourceURLChanged();\n    } else if (name == \"disabled\") {\n      this.delegate.disabledChanged();\n    }\n  }\n\n  /**\n   * Gets the URL to lazily load source HTML from\n   */\n  get src() {\n    return this.getAttribute(\"src\")\n  }\n\n  /**\n   * Sets the URL to lazily load source HTML from\n   */\n  set src(value) {\n    if (value) {\n      this.setAttribute(\"src\", value);\n    } else {\n      this.removeAttribute(\"src\");\n    }\n  }\n\n  /**\n   * Gets the refresh mode for the frame.\n   */\n  get refresh() {\n    return this.getAttribute(\"refresh\")\n  }\n\n  /**\n   * Sets the refresh mode for the frame.\n   */\n  set refresh(value) {\n    if (value) {\n      this.setAttribute(\"refresh\", value);\n    } else {\n      this.removeAttribute(\"refresh\");\n    }\n  }\n\n  get shouldReloadWithMorph() {\n    return this.src && this.refresh === \"morph\"\n  }\n\n  /**\n   * Determines if the element is loading\n   */\n  get loading() {\n    return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\")\n  }\n\n  /**\n   * Sets the value of if the element is loading\n   */\n  set loading(value) {\n    if (value) {\n      this.setAttribute(\"loading\", value);\n    } else {\n      this.removeAttribute(\"loading\");\n    }\n  }\n\n  /**\n   * Gets the disabled state of the frame.\n   *\n   * If disabled, no requests will be intercepted by the frame.\n   */\n  get disabled() {\n    return this.hasAttribute(\"disabled\")\n  }\n\n  /**\n   * Sets the disabled state of the frame.\n   *\n   * If disabled, no requests will be intercepted by the frame.\n   */\n  set disabled(value) {\n    if (value) {\n      this.setAttribute(\"disabled\", \"\");\n    } else {\n      this.removeAttribute(\"disabled\");\n    }\n  }\n\n  /**\n   * Gets the autoscroll state of the frame.\n   *\n   * If true, the frame will be scrolled into view automatically on update.\n   */\n  get autoscroll() {\n    return this.hasAttribute(\"autoscroll\")\n  }\n\n  /**\n   * Sets the autoscroll state of the frame.\n   *\n   * If true, the frame will be scrolled into view automatically on update.\n   */\n  set autoscroll(value) {\n    if (value) {\n      this.setAttribute(\"autoscroll\", \"\");\n    } else {\n      this.removeAttribute(\"autoscroll\");\n    }\n  }\n\n  /**\n   * Determines if the element has finished loading\n   */\n  get complete() {\n    return !this.delegate.isLoading\n  }\n\n  /**\n   * Gets the active state of the frame.\n   *\n   * If inactive, source changes will not be observed.\n   */\n  get isActive() {\n    return this.ownerDocument === document && !this.isPreview\n  }\n\n  /**\n   * Sets the active state of the frame.\n   *\n   * If inactive, source changes will not be observed.\n   */\n  get isPreview() {\n    return this.ownerDocument?.documentElement?.hasAttribute(\"data-turbo-preview\")\n  }\n}\n\nfunction frameLoadingStyleFromString(style) {\n  switch (style.toLowerCase()) {\n    case \"lazy\":\n      return FrameLoadingStyle.lazy\n    default:\n      return FrameLoadingStyle.eager\n  }\n}\n\nconst drive = {\n  enabled: true,\n  progressBarDelay: 500,\n  unvisitableExtensions: new Set(\n    [\n      \".7z\", \".aac\", \".apk\", \".avi\", \".bmp\", \".bz2\", \".css\", \".csv\", \".deb\", \".dmg\", \".doc\",\n      \".docx\", \".exe\", \".gif\", \".gz\", \".heic\", \".heif\", \".ico\", \".iso\", \".jpeg\", \".jpg\",\n      \".js\", \".json\", \".m4a\", \".mkv\", \".mov\", \".mp3\", \".mp4\", \".mpeg\", \".mpg\", \".msi\",\n      \".ogg\", \".ogv\", \".pdf\", \".pkg\", \".png\", \".ppt\", \".pptx\", \".rar\", \".rtf\",\n      \".svg\", \".tar\", \".tif\", \".tiff\", \".txt\", \".wav\", \".webm\", \".webp\", \".wma\", \".wmv\",\n      \".xls\", \".xlsx\", \".xml\", \".zip\"\n    ]\n  )\n};\n\nfunction activateScriptElement(element) {\n  if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n    return element\n  } else {\n    const createdScriptElement = document.createElement(\"script\");\n    const cspNonce = getCspNonce();\n    if (cspNonce) {\n      createdScriptElement.nonce = cspNonce;\n    }\n    createdScriptElement.textContent = element.textContent;\n    createdScriptElement.async = false;\n    copyElementAttributes(createdScriptElement, element);\n    return createdScriptElement\n  }\n}\n\nfunction copyElementAttributes(destinationElement, sourceElement) {\n  for (const { name, value } of sourceElement.attributes) {\n    destinationElement.setAttribute(name, value);\n  }\n}\n\nfunction createDocumentFragment(html) {\n  const template = document.createElement(\"template\");\n  template.innerHTML = html;\n  return template.content\n}\n\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n  const event = new CustomEvent(eventName, {\n    cancelable,\n    bubbles: true,\n    composed: true,\n    detail\n  });\n\n  if (target && target.isConnected) {\n    target.dispatchEvent(event);\n  } else {\n    document.documentElement.dispatchEvent(event);\n  }\n\n  return event\n}\n\nfunction cancelEvent(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n\nfunction nextRepaint() {\n  if (document.visibilityState === \"hidden\") {\n    return nextEventLoopTick()\n  } else {\n    return nextAnimationFrame()\n  }\n}\n\nfunction nextAnimationFrame() {\n  return new Promise((resolve) => requestAnimationFrame(() => resolve()))\n}\n\nfunction nextEventLoopTick() {\n  return new Promise((resolve) => setTimeout(() => resolve(), 0))\n}\n\nfunction nextMicrotask() {\n  return Promise.resolve()\n}\n\nfunction parseHTMLDocument(html = \"\") {\n  return new DOMParser().parseFromString(html, \"text/html\")\n}\n\nfunction unindent(strings, ...values) {\n  const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n  const match = lines[0].match(/^\\s+/);\n  const indent = match ? match[0].length : 0;\n  return lines.map((line) => line.slice(indent)).join(\"\\n\")\n}\n\nfunction interpolate(strings, values) {\n  return strings.reduce((result, string, i) => {\n    const value = values[i] == undefined ? \"\" : values[i];\n    return result + string + value\n  }, \"\")\n}\n\nfunction uuid() {\n  return Array.from({ length: 36 })\n    .map((_, i) => {\n      if (i == 8 || i == 13 || i == 18 || i == 23) {\n        return \"-\"\n      } else if (i == 14) {\n        return \"4\"\n      } else if (i == 19) {\n        return (Math.floor(Math.random() * 4) + 8).toString(16)\n      } else {\n        return Math.floor(Math.random() * 15).toString(16)\n      }\n    })\n    .join(\"\")\n}\n\nfunction getAttribute(attributeName, ...elements) {\n  for (const value of elements.map((element) => element?.getAttribute(attributeName))) {\n    if (typeof value == \"string\") return value\n  }\n\n  return null\n}\n\nfunction hasAttribute(attributeName, ...elements) {\n  return elements.some((element) => element && element.hasAttribute(attributeName))\n}\n\nfunction markAsBusy(...elements) {\n  for (const element of elements) {\n    if (element.localName == \"turbo-frame\") {\n      element.setAttribute(\"busy\", \"\");\n    }\n    element.setAttribute(\"aria-busy\", \"true\");\n  }\n}\n\nfunction clearBusyState(...elements) {\n  for (const element of elements) {\n    if (element.localName == \"turbo-frame\") {\n      element.removeAttribute(\"busy\");\n    }\n\n    element.removeAttribute(\"aria-busy\");\n  }\n}\n\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n  return new Promise((resolve) => {\n    const onComplete = () => {\n      element.removeEventListener(\"error\", onComplete);\n      element.removeEventListener(\"load\", onComplete);\n      resolve();\n    };\n\n    element.addEventListener(\"load\", onComplete, { once: true });\n    element.addEventListener(\"error\", onComplete, { once: true });\n    setTimeout(resolve, timeoutInMilliseconds);\n  })\n}\n\nfunction getHistoryMethodForAction(action) {\n  switch (action) {\n    case \"replace\":\n      return history.replaceState\n    case \"advance\":\n    case \"restore\":\n      return history.pushState\n  }\n}\n\nfunction isAction(action) {\n  return action == \"advance\" || action == \"replace\" || action == \"restore\"\n}\n\nfunction getVisitAction(...elements) {\n  const action = getAttribute(\"data-turbo-action\", ...elements);\n\n  return isAction(action) ? action : null\n}\n\nfunction getMetaElement(name) {\n  return document.querySelector(`meta[name=\"${name}\"]`)\n}\n\nfunction getMetaContent(name) {\n  const element = getMetaElement(name);\n  return element && element.content\n}\n\nfunction getCspNonce() {\n  const element = getMetaElement(\"csp-nonce\");\n\n  if (element) {\n    const { nonce, content } = element;\n    return nonce == \"\" ? content : nonce\n  }\n}\n\nfunction setMetaContent(name, content) {\n  let element = getMetaElement(name);\n\n  if (!element) {\n    element = document.createElement(\"meta\");\n    element.setAttribute(\"name\", name);\n\n    document.head.appendChild(element);\n  }\n\n  element.setAttribute(\"content\", content);\n\n  return element\n}\n\nfunction findClosestRecursively(element, selector) {\n  if (element instanceof Element) {\n    return (\n      element.closest(selector) || findClosestRecursively(element.assignedSlot || element.getRootNode()?.host, selector)\n    )\n  }\n}\n\nfunction elementIsFocusable(element) {\n  const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n\n  return !!element && element.closest(inertDisabledOrHidden) == null && typeof element.focus == \"function\"\n}\n\nfunction queryAutofocusableElement(elementOrDocumentFragment) {\n  return Array.from(elementOrDocumentFragment.querySelectorAll(\"[autofocus]\")).find(elementIsFocusable)\n}\n\nasync function around(callback, reader) {\n  const before = reader();\n\n  callback();\n\n  await nextAnimationFrame();\n\n  const after = reader();\n\n  return [before, after]\n}\n\nfunction doesNotTargetIFrame(name) {\n  if (name === \"_blank\") {\n    return false\n  } else if (name) {\n    for (const element of document.getElementsByName(name)) {\n      if (element instanceof HTMLIFrameElement) return false\n    }\n\n    return true\n  } else {\n    return true\n  }\n}\n\nfunction findLinkFromClickTarget(target) {\n  return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\")\n}\n\nfunction getLocationForLink(link) {\n  return expandURL(link.getAttribute(\"href\") || \"\")\n}\n\nfunction debounce(fn, delay) {\n  let timeoutId = null;\n\n  return (...args) => {\n    const callback = () => fn.apply(this, args);\n    clearTimeout(timeoutId);\n    timeoutId = setTimeout(callback, delay);\n  }\n}\n\nconst submitter = {\n  \"aria-disabled\": {\n    beforeSubmit: submitter => {\n      submitter.setAttribute(\"aria-disabled\", \"true\");\n      submitter.addEventListener(\"click\", cancelEvent);\n    },\n\n    afterSubmit: submitter => {\n      submitter.removeAttribute(\"aria-disabled\");\n      submitter.removeEventListener(\"click\", cancelEvent);\n    }\n  },\n\n  \"disabled\": {\n    beforeSubmit: submitter => submitter.disabled = true,\n    afterSubmit: submitter => submitter.disabled = false\n  }\n};\n\nclass Config {\n  #submitter = null\n\n  constructor(config) {\n    Object.assign(this, config);\n  }\n\n  get submitter() {\n    return this.#submitter\n  }\n\n  set submitter(value) {\n    this.#submitter = submitter[value] || value;\n  }\n}\n\nconst forms = new Config({\n  mode: \"on\",\n  submitter: \"disabled\"\n});\n\nconst config = {\n  drive,\n  forms\n};\n\nfunction expandURL(locatable) {\n  return new URL(locatable.toString(), document.baseURI)\n}\n\nfunction getAnchor(url) {\n  let anchorMatch;\n  if (url.hash) {\n    return url.hash.slice(1)\n    // eslint-disable-next-line no-cond-assign\n  } else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n    return anchorMatch[1]\n  }\n}\n\nfunction getAction$1(form, submitter) {\n  const action = submitter?.getAttribute(\"formaction\") || form.getAttribute(\"action\") || form.action;\n\n  return expandURL(action)\n}\n\nfunction getExtension(url) {\n  return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\"\n}\n\nfunction isPrefixedBy(baseURL, url) {\n  const prefix = getPrefix(url);\n  return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix)\n}\n\nfunction locationIsVisitable(location, rootLocation) {\n  return isPrefixedBy(location, rootLocation) && !config.drive.unvisitableExtensions.has(getExtension(location))\n}\n\nfunction getRequestURL(url) {\n  const anchor = getAnchor(url);\n  return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href\n}\n\nfunction toCacheKey(url) {\n  return getRequestURL(url)\n}\n\nfunction urlsAreEqual(left, right) {\n  return expandURL(left).href == expandURL(right).href\n}\n\nfunction getPathComponents(url) {\n  return url.pathname.split(\"/\").slice(1)\n}\n\nfunction getLastPathComponent(url) {\n  return getPathComponents(url).slice(-1)[0]\n}\n\nfunction getPrefix(url) {\n  return addTrailingSlash(url.origin + url.pathname)\n}\n\nfunction addTrailingSlash(value) {\n  return value.endsWith(\"/\") ? value : value + \"/\"\n}\n\nclass FetchResponse {\n  constructor(response) {\n    this.response = response;\n  }\n\n  get succeeded() {\n    return this.response.ok\n  }\n\n  get failed() {\n    return !this.succeeded\n  }\n\n  get clientError() {\n    return this.statusCode >= 400 && this.statusCode <= 499\n  }\n\n  get serverError() {\n    return this.statusCode >= 500 && this.statusCode <= 599\n  }\n\n  get redirected() {\n    return this.response.redirected\n  }\n\n  get location() {\n    return expandURL(this.response.url)\n  }\n\n  get isHTML() {\n    return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/)\n  }\n\n  get statusCode() {\n    return this.response.status\n  }\n\n  get contentType() {\n    return this.header(\"Content-Type\")\n  }\n\n  get responseText() {\n    return this.response.clone().text()\n  }\n\n  get responseHTML() {\n    if (this.isHTML) {\n      return this.response.clone().text()\n    } else {\n      return Promise.resolve(undefined)\n    }\n  }\n\n  header(name) {\n    return this.response.headers.get(name)\n  }\n}\n\nclass LimitedSet extends Set {\n  constructor(maxSize) {\n    super();\n    this.maxSize = maxSize;\n  }\n\n  add(value) {\n    if (this.size >= this.maxSize) {\n      const iterator = this.values();\n      const oldestValue = iterator.next().value;\n      this.delete(oldestValue);\n    }\n    super.add(value);\n  }\n}\n\nconst recentRequests = new LimitedSet(20);\n\nconst nativeFetch = window.fetch;\n\nfunction fetchWithTurboHeaders(url, options = {}) {\n  const modifiedHeaders = new Headers(options.headers || {});\n  const requestUID = uuid();\n  recentRequests.add(requestUID);\n  modifiedHeaders.append(\"X-Turbo-Request-Id\", requestUID);\n\n  return nativeFetch(url, {\n    ...options,\n    headers: modifiedHeaders\n  })\n}\n\nfunction fetchMethodFromString(method) {\n  switch (method.toLowerCase()) {\n    case \"get\":\n      return FetchMethod.get\n    case \"post\":\n      return FetchMethod.post\n    case \"put\":\n      return FetchMethod.put\n    case \"patch\":\n      return FetchMethod.patch\n    case \"delete\":\n      return FetchMethod.delete\n  }\n}\n\nconst FetchMethod = {\n  get: \"get\",\n  post: \"post\",\n  put: \"put\",\n  patch: \"patch\",\n  delete: \"delete\"\n};\n\nfunction fetchEnctypeFromString(encoding) {\n  switch (encoding.toLowerCase()) {\n    case FetchEnctype.multipart:\n      return FetchEnctype.multipart\n    case FetchEnctype.plain:\n      return FetchEnctype.plain\n    default:\n      return FetchEnctype.urlEncoded\n  }\n}\n\nconst FetchEnctype = {\n  urlEncoded: \"application/x-www-form-urlencoded\",\n  multipart: \"multipart/form-data\",\n  plain: \"text/plain\"\n};\n\nclass FetchRequest {\n  abortController = new AbortController()\n  #resolveRequestPromise = (_value) => {}\n\n  constructor(delegate, method, location, requestBody = new URLSearchParams(), target = null, enctype = FetchEnctype.urlEncoded) {\n    const [url, body] = buildResourceAndBody(expandURL(location), method, requestBody, enctype);\n\n    this.delegate = delegate;\n    this.url = url;\n    this.target = target;\n    this.fetchOptions = {\n      credentials: \"same-origin\",\n      redirect: \"follow\",\n      method: method.toUpperCase(),\n      headers: { ...this.defaultHeaders },\n      body: body,\n      signal: this.abortSignal,\n      referrer: this.delegate.referrer?.href\n    };\n    this.enctype = enctype;\n  }\n\n  get method() {\n    return this.fetchOptions.method\n  }\n\n  set method(value) {\n    const fetchBody = this.isSafe ? this.url.searchParams : this.fetchOptions.body || new FormData();\n    const fetchMethod = fetchMethodFromString(value) || FetchMethod.get;\n\n    this.url.search = \"\";\n\n    const [url, body] = buildResourceAndBody(this.url, fetchMethod, fetchBody, this.enctype);\n\n    this.url = url;\n    this.fetchOptions.body = body;\n    this.fetchOptions.method = fetchMethod.toUpperCase();\n  }\n\n  get headers() {\n    return this.fetchOptions.headers\n  }\n\n  set headers(value) {\n    this.fetchOptions.headers = value;\n  }\n\n  get body() {\n    if (this.isSafe) {\n      return this.url.searchParams\n    } else {\n      return this.fetchOptions.body\n    }\n  }\n\n  set body(value) {\n    this.fetchOptions.body = value;\n  }\n\n  get location() {\n    return this.url\n  }\n\n  get params() {\n    return this.url.searchParams\n  }\n\n  get entries() {\n    return this.body ? Array.from(this.body.entries()) : []\n  }\n\n  cancel() {\n    this.abortController.abort();\n  }\n\n  async perform() {\n    const { fetchOptions } = this;\n    this.delegate.prepareRequest(this);\n    const event = await this.#allowRequestToBeIntercepted(fetchOptions);\n    try {\n      this.delegate.requestStarted(this);\n\n      if (event.detail.fetchRequest) {\n        this.response = event.detail.fetchRequest.response;\n      } else {\n        this.response = fetchWithTurboHeaders(this.url.href, fetchOptions);\n      }\n\n      const response = await this.response;\n      return await this.receive(response)\n    } catch (error) {\n      if (error.name !== \"AbortError\") {\n        if (this.#willDelegateErrorHandling(error)) {\n          this.delegate.requestErrored(this, error);\n        }\n        throw error\n      }\n    } finally {\n      this.delegate.requestFinished(this);\n    }\n  }\n\n  async receive(response) {\n    const fetchResponse = new FetchResponse(response);\n    const event = dispatch(\"turbo:before-fetch-response\", {\n      cancelable: true,\n      detail: { fetchResponse },\n      target: this.target\n    });\n    if (event.defaultPrevented) {\n      this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n    } else if (fetchResponse.succeeded) {\n      this.delegate.requestSucceededWithResponse(this, fetchResponse);\n    } else {\n      this.delegate.requestFailedWithResponse(this, fetchResponse);\n    }\n    return fetchResponse\n  }\n\n  get defaultHeaders() {\n    return {\n      Accept: \"text/html, application/xhtml+xml\"\n    }\n  }\n\n  get isSafe() {\n    return isSafe(this.method)\n  }\n\n  get abortSignal() {\n    return this.abortController.signal\n  }\n\n  acceptResponseType(mimeType) {\n    this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n  }\n\n  async #allowRequestToBeIntercepted(fetchOptions) {\n    const requestInterception = new Promise((resolve) => (this.#resolveRequestPromise = resolve));\n    const event = dispatch(\"turbo:before-fetch-request\", {\n      cancelable: true,\n      detail: {\n        fetchOptions,\n        url: this.url,\n        resume: this.#resolveRequestPromise\n      },\n      target: this.target\n    });\n    this.url = event.detail.url;\n    if (event.defaultPrevented) await requestInterception;\n\n    return event\n  }\n\n  #willDelegateErrorHandling(error) {\n    const event = dispatch(\"turbo:fetch-request-error\", {\n      target: this.target,\n      cancelable: true,\n      detail: { request: this, error: error }\n    });\n\n    return !event.defaultPrevented\n  }\n}\n\nfunction isSafe(fetchMethod) {\n  return fetchMethodFromString(fetchMethod) == FetchMethod.get\n}\n\nfunction buildResourceAndBody(resource, method, requestBody, enctype) {\n  const searchParams =\n    Array.from(requestBody).length > 0 ? new URLSearchParams(entriesExcludingFiles(requestBody)) : resource.searchParams;\n\n  if (isSafe(method)) {\n    return [mergeIntoURLSearchParams(resource, searchParams), null]\n  } else if (enctype == FetchEnctype.urlEncoded) {\n    return [resource, searchParams]\n  } else {\n    return [resource, requestBody]\n  }\n}\n\nfunction entriesExcludingFiles(requestBody) {\n  const entries = [];\n\n  for (const [name, value] of requestBody) {\n    if (value instanceof File) continue\n    else entries.push([name, value]);\n  }\n\n  return entries\n}\n\nfunction mergeIntoURLSearchParams(url, requestBody) {\n  const searchParams = new URLSearchParams(entriesExcludingFiles(requestBody));\n\n  url.search = searchParams.toString();\n\n  return url\n}\n\nclass AppearanceObserver {\n  started = false\n\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n    this.intersectionObserver = new IntersectionObserver(this.intersect);\n  }\n\n  start() {\n    if (!this.started) {\n      this.started = true;\n      this.intersectionObserver.observe(this.element);\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.started = false;\n      this.intersectionObserver.unobserve(this.element);\n    }\n  }\n\n  intersect = (entries) => {\n    const lastEntry = entries.slice(-1)[0];\n    if (lastEntry?.isIntersecting) {\n      this.delegate.elementAppearedInViewport(this.element);\n    }\n  }\n}\n\nclass StreamMessage {\n  static contentType = \"text/vnd.turbo-stream.html\"\n\n  static wrap(message) {\n    if (typeof message == \"string\") {\n      return new this(createDocumentFragment(message))\n    } else {\n      return message\n    }\n  }\n\n  constructor(fragment) {\n    this.fragment = importStreamElements(fragment);\n  }\n}\n\nfunction importStreamElements(fragment) {\n  for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n    const streamElement = document.importNode(element, true);\n\n    for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n      inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n    }\n\n    element.replaceWith(streamElement);\n  }\n\n  return fragment\n}\n\nconst PREFETCH_DELAY = 100;\n\nclass PrefetchCache {\n  #prefetchTimeout = null\n  #prefetched = null\n\n  get(url) {\n    if (this.#prefetched && this.#prefetched.url === url && this.#prefetched.expire > Date.now()) {\n      return this.#prefetched.request\n    }\n  }\n\n  setLater(url, request, ttl) {\n    this.clear();\n\n    this.#prefetchTimeout = setTimeout(() => {\n      request.perform();\n      this.set(url, request, ttl);\n      this.#prefetchTimeout = null;\n    }, PREFETCH_DELAY);\n  }\n\n  set(url, request, ttl) {\n    this.#prefetched = { url, request, expire: new Date(new Date().getTime() + ttl) };\n  }\n\n  clear() {\n    if (this.#prefetchTimeout) clearTimeout(this.#prefetchTimeout);\n    this.#prefetched = null;\n  }\n}\n\nconst cacheTtl = 10 * 1000;\nconst prefetchCache = new PrefetchCache();\n\nconst FormSubmissionState = {\n  initialized: \"initialized\",\n  requesting: \"requesting\",\n  waiting: \"waiting\",\n  receiving: \"receiving\",\n  stopping: \"stopping\",\n  stopped: \"stopped\"\n};\n\nclass FormSubmission {\n  state = FormSubmissionState.initialized\n\n  static confirmMethod(message) {\n    return Promise.resolve(confirm(message))\n  }\n\n  constructor(delegate, formElement, submitter, mustRedirect = false) {\n    const method = getMethod(formElement, submitter);\n    const action = getAction(getFormAction(formElement, submitter), method);\n    const body = buildFormData(formElement, submitter);\n    const enctype = getEnctype(formElement, submitter);\n\n    this.delegate = delegate;\n    this.formElement = formElement;\n    this.submitter = submitter;\n    this.fetchRequest = new FetchRequest(this, method, action, body, formElement, enctype);\n    this.mustRedirect = mustRedirect;\n  }\n\n  get method() {\n    return this.fetchRequest.method\n  }\n\n  set method(value) {\n    this.fetchRequest.method = value;\n  }\n\n  get action() {\n    return this.fetchRequest.url.toString()\n  }\n\n  set action(value) {\n    this.fetchRequest.url = expandURL(value);\n  }\n\n  get body() {\n    return this.fetchRequest.body\n  }\n\n  get enctype() {\n    return this.fetchRequest.enctype\n  }\n\n  get isSafe() {\n    return this.fetchRequest.isSafe\n  }\n\n  get location() {\n    return this.fetchRequest.url\n  }\n\n  // The submission process\n\n  async start() {\n    const { initialized, requesting } = FormSubmissionState;\n    const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n\n    if (typeof confirmationMessage === \"string\") {\n      const confirmMethod = typeof config.forms.confirm === \"function\" ?\n        config.forms.confirm :\n        FormSubmission.confirmMethod;\n\n      const answer = await confirmMethod(confirmationMessage, this.formElement, this.submitter);\n      if (!answer) {\n        return\n      }\n    }\n\n    if (this.state == initialized) {\n      this.state = requesting;\n      return this.fetchRequest.perform()\n    }\n  }\n\n  stop() {\n    const { stopping, stopped } = FormSubmissionState;\n    if (this.state != stopping && this.state != stopped) {\n      this.state = stopping;\n      this.fetchRequest.cancel();\n      return true\n    }\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    if (!request.isSafe) {\n      const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n      if (token) {\n        request.headers[\"X-CSRF-Token\"] = token;\n      }\n    }\n\n    if (this.requestAcceptsTurboStreamResponse(request)) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted(_request) {\n    this.state = FormSubmissionState.waiting;\n    if (this.submitter) config.forms.submitter.beforeSubmit(this.submitter);\n    this.setSubmitsWith();\n    markAsBusy(this.formElement);\n    dispatch(\"turbo:submit-start\", {\n      target: this.formElement,\n      detail: { formSubmission: this }\n    });\n    this.delegate.formSubmissionStarted(this);\n  }\n\n  requestPreventedHandlingResponse(request, response) {\n    prefetchCache.clear();\n\n    this.result = { success: response.succeeded, fetchResponse: response };\n  }\n\n  requestSucceededWithResponse(request, response) {\n    if (response.clientError || response.serverError) {\n      this.delegate.formSubmissionFailedWithResponse(this, response);\n      return\n    }\n\n    prefetchCache.clear();\n\n    if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n      const error = new Error(\"Form responses must redirect to another location\");\n      this.delegate.formSubmissionErrored(this, error);\n    } else {\n      this.state = FormSubmissionState.receiving;\n      this.result = { success: true, fetchResponse: response };\n      this.delegate.formSubmissionSucceededWithResponse(this, response);\n    }\n  }\n\n  requestFailedWithResponse(request, response) {\n    this.result = { success: false, fetchResponse: response };\n    this.delegate.formSubmissionFailedWithResponse(this, response);\n  }\n\n  requestErrored(request, error) {\n    this.result = { success: false, error };\n    this.delegate.formSubmissionErrored(this, error);\n  }\n\n  requestFinished(_request) {\n    this.state = FormSubmissionState.stopped;\n    if (this.submitter) config.forms.submitter.afterSubmit(this.submitter);\n    this.resetSubmitterText();\n    clearBusyState(this.formElement);\n    dispatch(\"turbo:submit-end\", {\n      target: this.formElement,\n      detail: { formSubmission: this, ...this.result }\n    });\n    this.delegate.formSubmissionFinished(this);\n  }\n\n  // Private\n\n  setSubmitsWith() {\n    if (!this.submitter || !this.submitsWith) return\n\n    if (this.submitter.matches(\"button\")) {\n      this.originalSubmitText = this.submitter.innerHTML;\n      this.submitter.innerHTML = this.submitsWith;\n    } else if (this.submitter.matches(\"input\")) {\n      const input = this.submitter;\n      this.originalSubmitText = input.value;\n      input.value = this.submitsWith;\n    }\n  }\n\n  resetSubmitterText() {\n    if (!this.submitter || !this.originalSubmitText) return\n\n    if (this.submitter.matches(\"button\")) {\n      this.submitter.innerHTML = this.originalSubmitText;\n    } else if (this.submitter.matches(\"input\")) {\n      const input = this.submitter;\n      input.value = this.originalSubmitText;\n    }\n  }\n\n  requestMustRedirect(request) {\n    return !request.isSafe && this.mustRedirect\n  }\n\n  requestAcceptsTurboStreamResponse(request) {\n    return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement)\n  }\n\n  get submitsWith() {\n    return this.submitter?.getAttribute(\"data-turbo-submits-with\")\n  }\n}\n\nfunction buildFormData(formElement, submitter) {\n  const formData = new FormData(formElement);\n  const name = submitter?.getAttribute(\"name\");\n  const value = submitter?.getAttribute(\"value\");\n\n  if (name) {\n    formData.append(name, value || \"\");\n  }\n\n  return formData\n}\n\nfunction getCookieValue(cookieName) {\n  if (cookieName != null) {\n    const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n    const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n    if (cookie) {\n      const value = cookie.split(\"=\").slice(1).join(\"=\");\n      return value ? decodeURIComponent(value) : undefined\n    }\n  }\n}\n\nfunction responseSucceededWithoutRedirect(response) {\n  return response.statusCode == 200 && !response.redirected\n}\n\nfunction getFormAction(formElement, submitter) {\n  const formElementAction = typeof formElement.action === \"string\" ? formElement.action : null;\n\n  if (submitter?.hasAttribute(\"formaction\")) {\n    return submitter.getAttribute(\"formaction\") || \"\"\n  } else {\n    return formElement.getAttribute(\"action\") || formElementAction || \"\"\n  }\n}\n\nfunction getAction(formAction, fetchMethod) {\n  const action = expandURL(formAction);\n\n  if (isSafe(fetchMethod)) {\n    action.search = \"\";\n  }\n\n  return action\n}\n\nfunction getMethod(formElement, submitter) {\n  const method = submitter?.getAttribute(\"formmethod\") || formElement.getAttribute(\"method\") || \"\";\n  return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get\n}\n\nfunction getEnctype(formElement, submitter) {\n  return fetchEnctypeFromString(submitter?.getAttribute(\"formenctype\") || formElement.enctype)\n}\n\nclass Snapshot {\n  constructor(element) {\n    this.element = element;\n  }\n\n  get activeElement() {\n    return this.element.ownerDocument.activeElement\n  }\n\n  get children() {\n    return [...this.element.children]\n  }\n\n  hasAnchor(anchor) {\n    return this.getElementForAnchor(anchor) != null\n  }\n\n  getElementForAnchor(anchor) {\n    return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null\n  }\n\n  get isConnected() {\n    return this.element.isConnected\n  }\n\n  get firstAutofocusableElement() {\n    return queryAutofocusableElement(this.element)\n  }\n\n  get permanentElements() {\n    return queryPermanentElementsAll(this.element)\n  }\n\n  getPermanentElementById(id) {\n    return getPermanentElementById(this.element, id)\n  }\n\n  getPermanentElementMapForSnapshot(snapshot) {\n    const permanentElementMap = {};\n\n    for (const currentPermanentElement of this.permanentElements) {\n      const { id } = currentPermanentElement;\n      const newPermanentElement = snapshot.getPermanentElementById(id);\n      if (newPermanentElement) {\n        permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n      }\n    }\n\n    return permanentElementMap\n  }\n}\n\nfunction getPermanentElementById(node, id) {\n  return node.querySelector(`#${id}[data-turbo-permanent]`)\n}\n\nfunction queryPermanentElementsAll(node) {\n  return node.querySelectorAll(\"[id][data-turbo-permanent]\")\n}\n\nclass FormSubmitObserver {\n  started = false\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (!this.started) {\n      this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n      this.started = false;\n    }\n  }\n\n  submitCaptured = () => {\n    this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n    this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n  }\n\n  submitBubbled = (event) => {\n    if (!event.defaultPrevented) {\n      const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n      const submitter = event.submitter || undefined;\n\n      if (\n        form &&\n        submissionDoesNotDismissDialog(form, submitter) &&\n        submissionDoesNotTargetIFrame(form, submitter) &&\n        this.delegate.willSubmitForm(form, submitter)\n      ) {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        this.delegate.formSubmitted(form, submitter);\n      }\n    }\n  }\n}\n\nfunction submissionDoesNotDismissDialog(form, submitter) {\n  const method = submitter?.getAttribute(\"formmethod\") || form.getAttribute(\"method\");\n\n  return method != \"dialog\"\n}\n\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n  const target = submitter?.getAttribute(\"formtarget\") || form.getAttribute(\"target\");\n\n  return doesNotTargetIFrame(target)\n}\n\nclass View {\n  #resolveRenderPromise = (_value) => {}\n  #resolveInterceptionPromise = (_value) => {}\n\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n  }\n\n  // Scrolling\n\n  scrollToAnchor(anchor) {\n    const element = this.snapshot.getElementForAnchor(anchor);\n    if (element) {\n      this.scrollToElement(element);\n      this.focusElement(element);\n    } else {\n      this.scrollToPosition({ x: 0, y: 0 });\n    }\n  }\n\n  scrollToAnchorFromLocation(location) {\n    this.scrollToAnchor(getAnchor(location));\n  }\n\n  scrollToElement(element) {\n    element.scrollIntoView();\n  }\n\n  focusElement(element) {\n    if (element instanceof HTMLElement) {\n      if (element.hasAttribute(\"tabindex\")) {\n        element.focus();\n      } else {\n        element.setAttribute(\"tabindex\", \"-1\");\n        element.focus();\n        element.removeAttribute(\"tabindex\");\n      }\n    }\n  }\n\n  scrollToPosition({ x, y }) {\n    this.scrollRoot.scrollTo(x, y);\n  }\n\n  scrollToTop() {\n    this.scrollToPosition({ x: 0, y: 0 });\n  }\n\n  get scrollRoot() {\n    return window\n  }\n\n  // Rendering\n\n  async render(renderer) {\n    const { isPreview, shouldRender, willRender, newSnapshot: snapshot } = renderer;\n\n    // A workaround to ignore tracked element mismatch reloads when performing\n    // a promoted Visit from a frame navigation\n    const shouldInvalidate = willRender;\n\n    if (shouldRender) {\n      try {\n        this.renderPromise = new Promise((resolve) => (this.#resolveRenderPromise = resolve));\n        this.renderer = renderer;\n        await this.prepareToRenderSnapshot(renderer);\n\n        const renderInterception = new Promise((resolve) => (this.#resolveInterceptionPromise = resolve));\n        const options = { resume: this.#resolveInterceptionPromise, render: this.renderer.renderElement, renderMethod: this.renderer.renderMethod };\n        const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n        if (!immediateRender) await renderInterception;\n\n        await this.renderSnapshot(renderer);\n        this.delegate.viewRenderedSnapshot(snapshot, isPreview, this.renderer.renderMethod);\n        this.delegate.preloadOnLoadLinksForView(this.element);\n        this.finishRenderingSnapshot(renderer);\n      } finally {\n        delete this.renderer;\n        this.#resolveRenderPromise(undefined);\n        delete this.renderPromise;\n      }\n    } else if (shouldInvalidate) {\n      this.invalidate(renderer.reloadReason);\n    }\n  }\n\n  invalidate(reason) {\n    this.delegate.viewInvalidated(reason);\n  }\n\n  async prepareToRenderSnapshot(renderer) {\n    this.markAsPreview(renderer.isPreview);\n    await renderer.prepareToRender();\n  }\n\n  markAsPreview(isPreview) {\n    if (isPreview) {\n      this.element.setAttribute(\"data-turbo-preview\", \"\");\n    } else {\n      this.element.removeAttribute(\"data-turbo-preview\");\n    }\n  }\n\n  markVisitDirection(direction) {\n    this.element.setAttribute(\"data-turbo-visit-direction\", direction);\n  }\n\n  unmarkVisitDirection() {\n    this.element.removeAttribute(\"data-turbo-visit-direction\");\n  }\n\n  async renderSnapshot(renderer) {\n    await renderer.render();\n  }\n\n  finishRenderingSnapshot(renderer) {\n    renderer.finishRendering();\n  }\n}\n\nclass FrameView extends View {\n  missing() {\n    this.element.innerHTML = `<strong class=\"turbo-frame-error\">Content missing</strong>`;\n  }\n\n  get snapshot() {\n    return new Snapshot(this.element)\n  }\n}\n\nclass LinkInterceptor {\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n  }\n\n  start() {\n    this.element.addEventListener(\"click\", this.clickBubbled);\n    document.addEventListener(\"turbo:click\", this.linkClicked);\n    document.addEventListener(\"turbo:before-visit\", this.willVisit);\n  }\n\n  stop() {\n    this.element.removeEventListener(\"click\", this.clickBubbled);\n    document.removeEventListener(\"turbo:click\", this.linkClicked);\n    document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n  }\n\n  clickBubbled = (event) => {\n    if (this.clickEventIsSignificant(event)) {\n      this.clickEvent = event;\n    } else {\n      delete this.clickEvent;\n    }\n  }\n\n  linkClicked = (event) => {\n    if (this.clickEvent && this.clickEventIsSignificant(event)) {\n      if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n        this.clickEvent.preventDefault();\n        event.preventDefault();\n        this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n      }\n    }\n    delete this.clickEvent;\n  }\n\n  willVisit = (_event) => {\n    delete this.clickEvent;\n  }\n\n  clickEventIsSignificant(event) {\n    const target = event.composed ? event.target?.parentElement : event.target;\n    const element = findLinkFromClickTarget(target) || target;\n\n    return element instanceof Element && element.closest(\"turbo-frame, html\") == this.element\n  }\n}\n\nclass LinkClickObserver {\n  started = false\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (!this.started) {\n      this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n      this.started = false;\n    }\n  }\n\n  clickCaptured = () => {\n    this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n    this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n  }\n\n  clickBubbled = (event) => {\n    if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n      const target = (event.composedPath && event.composedPath()[0]) || event.target;\n      const link = findLinkFromClickTarget(target);\n      if (link && doesNotTargetIFrame(link.target)) {\n        const location = getLocationForLink(link);\n        if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n          event.preventDefault();\n          this.delegate.followedLinkToLocation(link, location);\n        }\n      }\n    }\n  }\n\n  clickEventIsSignificant(event) {\n    return !(\n      (event.target && event.target.isContentEditable) ||\n      event.defaultPrevented ||\n      event.which > 1 ||\n      event.altKey ||\n      event.ctrlKey ||\n      event.metaKey ||\n      event.shiftKey\n    )\n  }\n}\n\nclass FormLinkClickObserver {\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.linkInterceptor = new LinkClickObserver(this, element);\n  }\n\n  start() {\n    this.linkInterceptor.start();\n  }\n\n  stop() {\n    this.linkInterceptor.stop();\n  }\n\n  // Link hover observer delegate\n\n  canPrefetchRequestToLocation(link, location) {\n    return false\n  }\n\n  prefetchAndCacheRequestToLocation(link, location) {\n    return\n  }\n\n  // Link click observer delegate\n\n  willFollowLinkToLocation(link, location, originalEvent) {\n    return (\n      this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n      (link.hasAttribute(\"data-turbo-method\") || link.hasAttribute(\"data-turbo-stream\"))\n    )\n  }\n\n  followedLinkToLocation(link, location) {\n    const form = document.createElement(\"form\");\n\n    const type = \"hidden\";\n    for (const [name, value] of location.searchParams) {\n      form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n    }\n\n    const action = Object.assign(location, { search: \"\" });\n    form.setAttribute(\"data-turbo\", \"true\");\n    form.setAttribute(\"action\", action.href);\n    form.setAttribute(\"hidden\", \"\");\n\n    const method = link.getAttribute(\"data-turbo-method\");\n    if (method) form.setAttribute(\"method\", method);\n\n    const turboFrame = link.getAttribute(\"data-turbo-frame\");\n    if (turboFrame) form.setAttribute(\"data-turbo-frame\", turboFrame);\n\n    const turboAction = getVisitAction(link);\n    if (turboAction) form.setAttribute(\"data-turbo-action\", turboAction);\n\n    const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n    if (turboConfirm) form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n\n    const turboStream = link.hasAttribute(\"data-turbo-stream\");\n    if (turboStream) form.setAttribute(\"data-turbo-stream\", \"\");\n\n    this.delegate.submittedFormLinkToLocation(link, location, form);\n\n    document.body.appendChild(form);\n    form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n    requestAnimationFrame(() => form.requestSubmit());\n  }\n}\n\nclass Bardo {\n  static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n    const bardo = new this(delegate, permanentElementMap);\n    bardo.enter();\n    await callback();\n    bardo.leave();\n  }\n\n  constructor(delegate, permanentElementMap) {\n    this.delegate = delegate;\n    this.permanentElementMap = permanentElementMap;\n  }\n\n  enter() {\n    for (const id in this.permanentElementMap) {\n      const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n      this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n      this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n    }\n  }\n\n  leave() {\n    for (const id in this.permanentElementMap) {\n      const [currentPermanentElement] = this.permanentElementMap[id];\n      this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n      this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n      this.delegate.leavingBardo(currentPermanentElement);\n    }\n  }\n\n  replaceNewPermanentElementWithPlaceholder(permanentElement) {\n    const placeholder = createPlaceholderForPermanentElement(permanentElement);\n    permanentElement.replaceWith(placeholder);\n  }\n\n  replaceCurrentPermanentElementWithClone(permanentElement) {\n    const clone = permanentElement.cloneNode(true);\n    permanentElement.replaceWith(clone);\n  }\n\n  replacePlaceholderWithPermanentElement(permanentElement) {\n    const placeholder = this.getPlaceholderById(permanentElement.id);\n    placeholder?.replaceWith(permanentElement);\n  }\n\n  getPlaceholderById(id) {\n    return this.placeholders.find((element) => element.content == id)\n  }\n\n  get placeholders() {\n    return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")]\n  }\n}\n\nfunction createPlaceholderForPermanentElement(permanentElement) {\n  const element = document.createElement(\"meta\");\n  element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n  element.setAttribute(\"content\", permanentElement.id);\n  return element\n}\n\nclass Renderer {\n  #activeElement = null\n\n  static renderElement(currentElement, newElement) {\n    // Abstract method\n  }\n\n  constructor(currentSnapshot, newSnapshot, isPreview, willRender = true) {\n    this.currentSnapshot = currentSnapshot;\n    this.newSnapshot = newSnapshot;\n    this.isPreview = isPreview;\n    this.willRender = willRender;\n    this.renderElement = this.constructor.renderElement;\n    this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n  }\n\n  get shouldRender() {\n    return true\n  }\n\n  get shouldAutofocus() {\n    return true\n  }\n\n  get reloadReason() {\n    return\n  }\n\n  prepareToRender() {\n    return\n  }\n\n  render() {\n    // Abstract method\n  }\n\n  finishRendering() {\n    if (this.resolvingFunctions) {\n      this.resolvingFunctions.resolve();\n      delete this.resolvingFunctions;\n    }\n  }\n\n  async preservingPermanentElements(callback) {\n    await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n  }\n\n  focusFirstAutofocusableElement() {\n    if (this.shouldAutofocus) {\n      const element = this.connectedSnapshot.firstAutofocusableElement;\n      if (element) {\n        element.focus();\n      }\n    }\n  }\n\n  // Bardo delegate\n\n  enteringBardo(currentPermanentElement) {\n    if (this.#activeElement) return\n\n    if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n      this.#activeElement = this.currentSnapshot.activeElement;\n    }\n  }\n\n  leavingBardo(currentPermanentElement) {\n    if (currentPermanentElement.contains(this.#activeElement) && this.#activeElement instanceof HTMLElement) {\n      this.#activeElement.focus();\n\n      this.#activeElement = null;\n    }\n  }\n\n  get connectedSnapshot() {\n    return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot\n  }\n\n  get currentElement() {\n    return this.currentSnapshot.element\n  }\n\n  get newElement() {\n    return this.newSnapshot.element\n  }\n\n  get permanentElementMap() {\n    return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)\n  }\n\n  get renderMethod() {\n    return \"replace\"\n  }\n}\n\nclass FrameRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    const destinationRange = document.createRange();\n    destinationRange.selectNodeContents(currentElement);\n    destinationRange.deleteContents();\n\n    const frameElement = newElement;\n    const sourceRange = frameElement.ownerDocument?.createRange();\n    if (sourceRange) {\n      sourceRange.selectNodeContents(frameElement);\n      currentElement.appendChild(sourceRange.extractContents());\n    }\n  }\n\n  constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n    super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n    this.delegate = delegate;\n  }\n\n  get shouldRender() {\n    return true\n  }\n\n  async render() {\n    await nextRepaint();\n    this.preservingPermanentElements(() => {\n      this.loadFrameElement();\n    });\n    this.scrollFrameIntoView();\n    await nextRepaint();\n    this.focusFirstAutofocusableElement();\n    await nextRepaint();\n    this.activateScriptElements();\n  }\n\n  loadFrameElement() {\n    this.delegate.willRenderFrame(this.currentElement, this.newElement);\n    this.renderElement(this.currentElement, this.newElement);\n  }\n\n  scrollFrameIntoView() {\n    if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n      const element = this.currentElement.firstElementChild;\n      const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n      const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n\n      if (element) {\n        element.scrollIntoView({ block, behavior });\n        return true\n      }\n    }\n    return false\n  }\n\n  activateScriptElements() {\n    for (const inertScriptElement of this.newScriptElements) {\n      const activatedScriptElement = activateScriptElement(inertScriptElement);\n      inertScriptElement.replaceWith(activatedScriptElement);\n    }\n  }\n\n  get newScriptElements() {\n    return this.currentElement.querySelectorAll(\"script\")\n  }\n}\n\nfunction readScrollLogicalPosition(value, defaultValue) {\n  if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n    return value\n  } else {\n    return defaultValue\n  }\n}\n\nfunction readScrollBehavior(value, defaultValue) {\n  if (value == \"auto\" || value == \"smooth\") {\n    return value\n  } else {\n    return defaultValue\n  }\n}\n\n/**\n * @typedef {object} ConfigHead\n *\n * @property {'merge' | 'append' | 'morph' | 'none'} [style]\n * @property {boolean} [block]\n * @property {boolean} [ignore]\n * @property {function(Element): boolean} [shouldPreserve]\n * @property {function(Element): boolean} [shouldReAppend]\n * @property {function(Element): boolean} [shouldRemove]\n * @property {function(Element, {added: Node[], kept: Element[], removed: Element[]}): void} [afterHeadMorphed]\n */\n\n/**\n * @typedef {object} ConfigCallbacks\n *\n * @property {function(Node): boolean} [beforeNodeAdded]\n * @property {function(Node): void} [afterNodeAdded]\n * @property {function(Element, Node): boolean} [beforeNodeMorphed]\n * @property {function(Element, Node): void} [afterNodeMorphed]\n * @property {function(Element): boolean} [beforeNodeRemoved]\n * @property {function(Element): void} [afterNodeRemoved]\n * @property {function(string, Element, \"update\" | \"remove\"): boolean} [beforeAttributeUpdated]\n */\n\n/**\n * @typedef {object} Config\n *\n * @property {'outerHTML' | 'innerHTML'} [morphStyle]\n * @property {boolean} [ignoreActive]\n * @property {boolean} [ignoreActiveValue]\n * @property {boolean} [restoreFocus]\n * @property {ConfigCallbacks} [callbacks]\n * @property {ConfigHead} [head]\n */\n\n/**\n * @typedef {function} NoOp\n *\n * @returns {void}\n */\n\n/**\n * @typedef {object} ConfigHeadInternal\n *\n * @property {'merge' | 'append' | 'morph' | 'none'} style\n * @property {boolean} [block]\n * @property {boolean} [ignore]\n * @property {(function(Element): boolean) | NoOp} shouldPreserve\n * @property {(function(Element): boolean) | NoOp} shouldReAppend\n * @property {(function(Element): boolean) | NoOp} shouldRemove\n * @property {(function(Element, {added: Node[], kept: Element[], removed: Element[]}): void) | NoOp} afterHeadMorphed\n */\n\n/**\n * @typedef {object} ConfigCallbacksInternal\n *\n * @property {(function(Node): boolean) | NoOp} beforeNodeAdded\n * @property {(function(Node): void) | NoOp} afterNodeAdded\n * @property {(function(Node, Node): boolean) | NoOp} beforeNodeMorphed\n * @property {(function(Node, Node): void) | NoOp} afterNodeMorphed\n * @property {(function(Node): boolean) | NoOp} beforeNodeRemoved\n * @property {(function(Node): void) | NoOp} afterNodeRemoved\n * @property {(function(string, Element, \"update\" | \"remove\"): boolean) | NoOp} beforeAttributeUpdated\n */\n\n/**\n * @typedef {object} ConfigInternal\n *\n * @property {'outerHTML' | 'innerHTML'} morphStyle\n * @property {boolean} [ignoreActive]\n * @property {boolean} [ignoreActiveValue]\n * @property {boolean} [restoreFocus]\n * @property {ConfigCallbacksInternal} callbacks\n * @property {ConfigHeadInternal} head\n */\n\n/**\n * @typedef {Object} IdSets\n * @property {Set<string>} persistentIds\n * @property {Map<Node, Set<string>>} idMap\n */\n\n/**\n * @typedef {Function} Morph\n *\n * @param {Element | Document} oldNode\n * @param {Element | Node | HTMLCollection | Node[] | string | null} newContent\n * @param {Config} [config]\n * @returns {undefined | Node[]}\n */\n\n// base IIFE to define idiomorph\n/**\n *\n * @type {{defaults: ConfigInternal, morph: Morph}}\n */\nvar Idiomorph = (function () {\n\n  /**\n   * @typedef {object} MorphContext\n   *\n   * @property {Element} target\n   * @property {Element} newContent\n   * @property {ConfigInternal} config\n   * @property {ConfigInternal['morphStyle']} morphStyle\n   * @property {ConfigInternal['ignoreActive']} ignoreActive\n   * @property {ConfigInternal['ignoreActiveValue']} ignoreActiveValue\n   * @property {ConfigInternal['restoreFocus']} restoreFocus\n   * @property {Map<Node, Set<string>>} idMap\n   * @property {Set<string>} persistentIds\n   * @property {ConfigInternal['callbacks']} callbacks\n   * @property {ConfigInternal['head']} head\n   * @property {HTMLDivElement} pantry\n   */\n\n  //=============================================================================\n  // AND NOW IT BEGINS...\n  //=============================================================================\n\n  const noOp = () => {};\n  /**\n   * Default configuration values, updatable by users now\n   * @type {ConfigInternal}\n   */\n  const defaults = {\n    morphStyle: \"outerHTML\",\n    callbacks: {\n      beforeNodeAdded: noOp,\n      afterNodeAdded: noOp,\n      beforeNodeMorphed: noOp,\n      afterNodeMorphed: noOp,\n      beforeNodeRemoved: noOp,\n      afterNodeRemoved: noOp,\n      beforeAttributeUpdated: noOp,\n    },\n    head: {\n      style: \"merge\",\n      shouldPreserve: (elt) => elt.getAttribute(\"im-preserve\") === \"true\",\n      shouldReAppend: (elt) => elt.getAttribute(\"im-re-append\") === \"true\",\n      shouldRemove: noOp,\n      afterHeadMorphed: noOp,\n    },\n    restoreFocus: true,\n  };\n\n  /**\n   * Core idiomorph function for morphing one DOM tree to another\n   *\n   * @param {Element | Document} oldNode\n   * @param {Element | Node | HTMLCollection | Node[] | string | null} newContent\n   * @param {Config} [config]\n   * @returns {Promise<Node[]> | Node[]}\n   */\n  function morph(oldNode, newContent, config = {}) {\n    oldNode = normalizeElement(oldNode);\n    const newNode = normalizeParent(newContent);\n    const ctx = createMorphContext(oldNode, newNode, config);\n\n    const morphedNodes = saveAndRestoreFocus(ctx, () => {\n      return withHeadBlocking(\n        ctx,\n        oldNode,\n        newNode,\n        /** @param {MorphContext} ctx */ (ctx) => {\n          if (ctx.morphStyle === \"innerHTML\") {\n            morphChildren(ctx, oldNode, newNode);\n            return Array.from(oldNode.childNodes);\n          } else {\n            return morphOuterHTML(ctx, oldNode, newNode);\n          }\n        },\n      );\n    });\n\n    ctx.pantry.remove();\n    return morphedNodes;\n  }\n\n  /**\n   * Morph just the outerHTML of the oldNode to the newContent\n   * We have to be careful because the oldNode could have siblings which need to be untouched\n   * @param {MorphContext} ctx\n   * @param {Element} oldNode\n   * @param {Element} newNode\n   * @returns {Node[]}\n   */\n  function morphOuterHTML(ctx, oldNode, newNode) {\n    const oldParent = normalizeParent(oldNode);\n\n    // basis for calulating which nodes were morphed\n    // since there may be unmorphed sibling nodes\n    let childNodes = Array.from(oldParent.childNodes);\n    const index = childNodes.indexOf(oldNode);\n    // how many elements are to the right of the oldNode\n    const rightMargin = childNodes.length - (index + 1);\n\n    morphChildren(\n      ctx,\n      oldParent,\n      newNode,\n      // these two optional params are the secret sauce\n      oldNode, // start point for iteration\n      oldNode.nextSibling, // end point for iteration\n    );\n\n    // return just the morphed nodes\n    childNodes = Array.from(oldParent.childNodes);\n    return childNodes.slice(index, childNodes.length - rightMargin);\n  }\n\n  /**\n   * @param {MorphContext} ctx\n   * @param {Function} fn\n   * @returns {Promise<Node[]> | Node[]}\n   */\n  function saveAndRestoreFocus(ctx, fn) {\n    if (!ctx.config.restoreFocus) return fn();\n    let activeElement =\n      /** @type {HTMLInputElement|HTMLTextAreaElement|null} */ (\n        document.activeElement\n      );\n\n    // don't bother if the active element is not an input or textarea\n    if (\n      !(\n        activeElement instanceof HTMLInputElement ||\n        activeElement instanceof HTMLTextAreaElement\n      )\n    ) {\n      return fn();\n    }\n\n    const { id: activeElementId, selectionStart, selectionEnd } = activeElement;\n\n    const results = fn();\n\n    if (activeElementId && activeElementId !== document.activeElement?.id) {\n      activeElement = ctx.target.querySelector(`#${activeElementId}`);\n      activeElement?.focus();\n    }\n    if (activeElement && !activeElement.selectionEnd && selectionEnd) {\n      activeElement.setSelectionRange(selectionStart, selectionEnd);\n    }\n\n    return results;\n  }\n\n  const morphChildren = (function () {\n    /**\n     * This is the core algorithm for matching up children.  The idea is to use id sets to try to match up\n     * nodes as faithfully as possible.  We greedily match, which allows us to keep the algorithm fast, but\n     * by using id sets, we are able to better match up with content deeper in the DOM.\n     *\n     * Basic algorithm:\n     * - for each node in the new content:\n     *   - search self and siblings for an id set match, falling back to a soft match\n     *   - if match found\n     *     - remove any nodes up to the match:\n     *       - pantry persistent nodes\n     *       - delete the rest\n     *     - morph the match\n     *   - elsif no match found, and node is persistent\n     *     - find its match by querying the old root (future) and pantry (past)\n     *     - move it and its children here\n     *     - morph it\n     *   - else\n     *     - create a new node from scratch as a last result\n     *\n     * @param {MorphContext} ctx the merge context\n     * @param {Element} oldParent the old content that we are merging the new content into\n     * @param {Element} newParent the parent element of the new content\n     * @param {Node|null} [insertionPoint] the point in the DOM we start morphing at (defaults to first child)\n     * @param {Node|null} [endPoint] the point in the DOM we stop morphing at (defaults to after last child)\n     */\n    function morphChildren(\n      ctx,\n      oldParent,\n      newParent,\n      insertionPoint = null,\n      endPoint = null,\n    ) {\n      // normalize\n      if (\n        oldParent instanceof HTMLTemplateElement &&\n        newParent instanceof HTMLTemplateElement\n      ) {\n        // @ts-ignore we can pretend the DocumentFragment is an Element\n        oldParent = oldParent.content;\n        // @ts-ignore ditto\n        newParent = newParent.content;\n      }\n      insertionPoint ||= oldParent.firstChild;\n\n      // run through all the new content\n      for (const newChild of newParent.childNodes) {\n        // once we reach the end of the old parent content skip to the end and insert the rest\n        if (insertionPoint && insertionPoint != endPoint) {\n          const bestMatch = findBestMatch(\n            ctx,\n            newChild,\n            insertionPoint,\n            endPoint,\n          );\n          if (bestMatch) {\n            // if the node to morph is not at the insertion point then remove/move up to it\n            if (bestMatch !== insertionPoint) {\n              removeNodesBetween(ctx, insertionPoint, bestMatch);\n            }\n            morphNode(bestMatch, newChild, ctx);\n            insertionPoint = bestMatch.nextSibling;\n            continue;\n          }\n        }\n\n        // if the matching node is elsewhere in the original content\n        if (newChild instanceof Element && ctx.persistentIds.has(newChild.id)) {\n          // move it and all its children here and morph\n          const movedChild = moveBeforeById(\n            oldParent,\n            newChild.id,\n            insertionPoint,\n            ctx,\n          );\n          morphNode(movedChild, newChild, ctx);\n          insertionPoint = movedChild.nextSibling;\n          continue;\n        }\n\n        // last resort: insert the new node from scratch\n        const insertedNode = createNode(\n          oldParent,\n          newChild,\n          insertionPoint,\n          ctx,\n        );\n        // could be null if beforeNodeAdded prevented insertion\n        if (insertedNode) {\n          insertionPoint = insertedNode.nextSibling;\n        }\n      }\n\n      // remove any remaining old nodes that didn't match up with new content\n      while (insertionPoint && insertionPoint != endPoint) {\n        const tempNode = insertionPoint;\n        insertionPoint = insertionPoint.nextSibling;\n        removeNode(ctx, tempNode);\n      }\n    }\n\n    /**\n     * This performs the action of inserting a new node while handling situations where the node contains\n     * elements with persistent ids and possible state info we can still preserve by moving in and then morphing\n     *\n     * @param {Element} oldParent\n     * @param {Node} newChild\n     * @param {Node|null} insertionPoint\n     * @param {MorphContext} ctx\n     * @returns {Node|null}\n     */\n    function createNode(oldParent, newChild, insertionPoint, ctx) {\n      if (ctx.callbacks.beforeNodeAdded(newChild) === false) return null;\n      if (ctx.idMap.has(newChild)) {\n        // node has children with ids with possible state so create a dummy elt of same type and apply full morph algorithm\n        const newEmptyChild = document.createElement(\n          /** @type {Element} */ (newChild).tagName,\n        );\n        oldParent.insertBefore(newEmptyChild, insertionPoint);\n        morphNode(newEmptyChild, newChild, ctx);\n        ctx.callbacks.afterNodeAdded(newEmptyChild);\n        return newEmptyChild;\n      } else {\n        // optimisation: no id state to preserve so we can just insert a clone of the newChild and its descendants\n        const newClonedChild = document.importNode(newChild, true); // importNode to not mutate newParent\n        oldParent.insertBefore(newClonedChild, insertionPoint);\n        ctx.callbacks.afterNodeAdded(newClonedChild);\n        return newClonedChild;\n      }\n    }\n\n    //=============================================================================\n    // Matching Functions\n    //=============================================================================\n    const findBestMatch = (function () {\n      /**\n       * Scans forward from the startPoint to the endPoint looking for a match\n       * for the node. It looks for an id set match first, then a soft match.\n       * We abort softmatching if we find two future soft matches, to reduce churn.\n       * @param {Node} node\n       * @param {MorphContext} ctx\n       * @param {Node | null} startPoint\n       * @param {Node | null} endPoint\n       * @returns {Node | null}\n       */\n      function findBestMatch(ctx, node, startPoint, endPoint) {\n        let softMatch = null;\n        let nextSibling = node.nextSibling;\n        let siblingSoftMatchCount = 0;\n\n        let cursor = startPoint;\n        while (cursor && cursor != endPoint) {\n          // soft matching is a prerequisite for id set matching\n          if (isSoftMatch(cursor, node)) {\n            if (isIdSetMatch(ctx, cursor, node)) {\n              return cursor; // found an id set match, we're done!\n            }\n\n            // we haven't yet saved a soft match fallback\n            if (softMatch === null) {\n              // the current soft match will hard match something else in the future, leave it\n              if (!ctx.idMap.has(cursor)) {\n                // save this as the fallback if we get through the loop without finding a hard match\n                softMatch = cursor;\n              }\n            }\n          }\n          if (\n            softMatch === null &&\n            nextSibling &&\n            isSoftMatch(cursor, nextSibling)\n          ) {\n            // The next new node has a soft match with this node, so\n            // increment the count of future soft matches\n            siblingSoftMatchCount++;\n            nextSibling = nextSibling.nextSibling;\n\n            // If there are two future soft matches, block soft matching for this node to allow\n            // future siblings to soft match. This is to reduce churn in the DOM when an element\n            // is prepended.\n            if (siblingSoftMatchCount >= 2) {\n              softMatch = undefined;\n            }\n          }\n\n          // if the current node contains active element, stop looking for better future matches,\n          // because if one is found, this node will be moved to the pantry, reparenting it and thus losing focus\n          if (cursor.contains(document.activeElement)) break;\n\n          cursor = cursor.nextSibling;\n        }\n\n        return softMatch || null;\n      }\n\n      /**\n       *\n       * @param {MorphContext} ctx\n       * @param {Node} oldNode\n       * @param {Node} newNode\n       * @returns {boolean}\n       */\n      function isIdSetMatch(ctx, oldNode, newNode) {\n        let oldSet = ctx.idMap.get(oldNode);\n        let newSet = ctx.idMap.get(newNode);\n\n        if (!newSet || !oldSet) return false;\n\n        for (const id of oldSet) {\n          // a potential match is an id in the new and old nodes that\n          // has not already been merged into the DOM\n          // But the newNode content we call this on has not been\n          // merged yet and we don't allow duplicate IDs so it is simple\n          if (newSet.has(id)) {\n            return true;\n          }\n        }\n        return false;\n      }\n\n      /**\n       *\n       * @param {Node} oldNode\n       * @param {Node} newNode\n       * @returns {boolean}\n       */\n      function isSoftMatch(oldNode, newNode) {\n        // ok to cast: if one is not element, `id` and `tagName` will be undefined and we'll just compare that.\n        const oldElt = /** @type {Element} */ (oldNode);\n        const newElt = /** @type {Element} */ (newNode);\n\n        return (\n          oldElt.nodeType === newElt.nodeType &&\n          oldElt.tagName === newElt.tagName &&\n          // If oldElt has an `id` with possible state and it doesn't match newElt.id then avoid morphing.\n          // We'll still match an anonymous node with an IDed newElt, though, because if it got this far,\n          // its not persistent, and new nodes can't have any hidden state.\n          (!oldElt.id || oldElt.id === newElt.id)\n        );\n      }\n\n      return findBestMatch;\n    })();\n\n    //=============================================================================\n    // DOM Manipulation Functions\n    //=============================================================================\n\n    /**\n     * Gets rid of an unwanted DOM node; strategy depends on nature of its reuse:\n     * - Persistent nodes will be moved to the pantry for later reuse\n     * - Other nodes will have their hooks called, and then are removed\n     * @param {MorphContext} ctx\n     * @param {Node} node\n     */\n    function removeNode(ctx, node) {\n      // are we going to id set match this later?\n      if (ctx.idMap.has(node)) {\n        // skip callbacks and move to pantry\n        moveBefore(ctx.pantry, node, null);\n      } else {\n        // remove for realsies\n        if (ctx.callbacks.beforeNodeRemoved(node) === false) return;\n        node.parentNode?.removeChild(node);\n        ctx.callbacks.afterNodeRemoved(node);\n      }\n    }\n\n    /**\n     * Remove nodes between the start and end nodes\n     * @param {MorphContext} ctx\n     * @param {Node} startInclusive\n     * @param {Node} endExclusive\n     * @returns {Node|null}\n     */\n    function removeNodesBetween(ctx, startInclusive, endExclusive) {\n      /** @type {Node | null} */\n      let cursor = startInclusive;\n      // remove nodes until the endExclusive node\n      while (cursor && cursor !== endExclusive) {\n        let tempNode = /** @type {Node} */ (cursor);\n        cursor = cursor.nextSibling;\n        removeNode(ctx, tempNode);\n      }\n      return cursor;\n    }\n\n    /**\n     * Search for an element by id within the document and pantry, and move it using moveBefore.\n     *\n     * @param {Element} parentNode - The parent node to which the element will be moved.\n     * @param {string} id - The ID of the element to be moved.\n     * @param {Node | null} after - The reference node to insert the element before.\n     *                              If `null`, the element is appended as the last child.\n     * @param {MorphContext} ctx\n     * @returns {Element} The found element\n     */\n    function moveBeforeById(parentNode, id, after, ctx) {\n      const target =\n        /** @type {Element} - will always be found */\n        (\n          ctx.target.querySelector(`#${id}`) ||\n            ctx.pantry.querySelector(`#${id}`)\n        );\n      removeElementFromAncestorsIdMaps(target, ctx);\n      moveBefore(parentNode, target, after);\n      return target;\n    }\n\n    /**\n     * Removes an element from its ancestors' id maps. This is needed when an element is moved from the\n     * \"future\" via `moveBeforeId`. Otherwise, its erstwhile ancestors could be mistakenly moved to the\n     * pantry rather than being deleted, preventing their removal hooks from being called.\n     *\n     * @param {Element} element - element to remove from its ancestors' id maps\n     * @param {MorphContext} ctx\n     */\n    function removeElementFromAncestorsIdMaps(element, ctx) {\n      const id = element.id;\n      /** @ts-ignore - safe to loop in this way **/\n      while ((element = element.parentNode)) {\n        let idSet = ctx.idMap.get(element);\n        if (idSet) {\n          idSet.delete(id);\n          if (!idSet.size) {\n            ctx.idMap.delete(element);\n          }\n        }\n      }\n    }\n\n    /**\n     * Moves an element before another element within the same parent.\n     * Uses the proposed `moveBefore` API if available (and working), otherwise falls back to `insertBefore`.\n     * This is essentialy a forward-compat wrapper.\n     *\n     * @param {Element} parentNode - The parent node containing the after element.\n     * @param {Node} element - The element to be moved.\n     * @param {Node | null} after - The reference node to insert `element` before.\n     *                              If `null`, `element` is appended as the last child.\n     */\n    function moveBefore(parentNode, element, after) {\n      // @ts-ignore - use proposed moveBefore feature\n      if (parentNode.moveBefore) {\n        try {\n          // @ts-ignore - use proposed moveBefore feature\n          parentNode.moveBefore(element, after);\n        } catch (e) {\n          // fall back to insertBefore as some browsers may fail on moveBefore when trying to move Dom disconnected nodes to pantry\n          parentNode.insertBefore(element, after);\n        }\n      } else {\n        parentNode.insertBefore(element, after);\n      }\n    }\n\n    return morphChildren;\n  })();\n\n  //=============================================================================\n  // Single Node Morphing Code\n  //=============================================================================\n  const morphNode = (function () {\n    /**\n     * @param {Node} oldNode root node to merge content into\n     * @param {Node} newContent new content to merge\n     * @param {MorphContext} ctx the merge context\n     * @returns {Node | null} the element that ended up in the DOM\n     */\n    function morphNode(oldNode, newContent, ctx) {\n      if (ctx.ignoreActive && oldNode === document.activeElement) {\n        // don't morph focused element\n        return null;\n      }\n\n      if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) {\n        return oldNode;\n      }\n\n      if (oldNode instanceof HTMLHeadElement && ctx.head.ignore) ; else if (\n        oldNode instanceof HTMLHeadElement &&\n        ctx.head.style !== \"morph\"\n      ) {\n        // ok to cast: if newContent wasn't also a <head>, it would've got caught in the `!isSoftMatch` branch above\n        handleHeadElement(\n          oldNode,\n          /** @type {HTMLHeadElement} */ (newContent),\n          ctx,\n        );\n      } else {\n        morphAttributes(oldNode, newContent, ctx);\n        if (!ignoreValueOfActiveElement(oldNode, ctx)) {\n          // @ts-ignore newContent can be a node here because .firstChild will be null\n          morphChildren(ctx, oldNode, newContent);\n        }\n      }\n      ctx.callbacks.afterNodeMorphed(oldNode, newContent);\n      return oldNode;\n    }\n\n    /**\n     * syncs the oldNode to the newNode, copying over all attributes and\n     * inner element state from the newNode to the oldNode\n     *\n     * @param {Node} oldNode the node to copy attributes & state to\n     * @param {Node} newNode the node to copy attributes & state from\n     * @param {MorphContext} ctx the merge context\n     */\n    function morphAttributes(oldNode, newNode, ctx) {\n      let type = newNode.nodeType;\n\n      // if is an element type, sync the attributes from the\n      // new node into the new node\n      if (type === 1 /* element type */) {\n        const oldElt = /** @type {Element} */ (oldNode);\n        const newElt = /** @type {Element} */ (newNode);\n\n        const oldAttributes = oldElt.attributes;\n        const newAttributes = newElt.attributes;\n        for (const newAttribute of newAttributes) {\n          if (ignoreAttribute(newAttribute.name, oldElt, \"update\", ctx)) {\n            continue;\n          }\n          if (oldElt.getAttribute(newAttribute.name) !== newAttribute.value) {\n            oldElt.setAttribute(newAttribute.name, newAttribute.value);\n          }\n        }\n        // iterate backwards to avoid skipping over items when a delete occurs\n        for (let i = oldAttributes.length - 1; 0 <= i; i--) {\n          const oldAttribute = oldAttributes[i];\n\n          // toAttributes is a live NamedNodeMap, so iteration+mutation is unsafe\n          // e.g. custom element attribute callbacks can remove other attributes\n          if (!oldAttribute) continue;\n\n          if (!newElt.hasAttribute(oldAttribute.name)) {\n            if (ignoreAttribute(oldAttribute.name, oldElt, \"remove\", ctx)) {\n              continue;\n            }\n            oldElt.removeAttribute(oldAttribute.name);\n          }\n        }\n\n        if (!ignoreValueOfActiveElement(oldElt, ctx)) {\n          syncInputValue(oldElt, newElt, ctx);\n        }\n      }\n\n      // sync text nodes\n      if (type === 8 /* comment */ || type === 3 /* text */) {\n        if (oldNode.nodeValue !== newNode.nodeValue) {\n          oldNode.nodeValue = newNode.nodeValue;\n        }\n      }\n    }\n\n    /**\n     * NB: many bothans died to bring us information:\n     *\n     *  https://github.com/patrick-steele-idem/morphdom/blob/master/src/specialElHandlers.js\n     *  https://github.com/choojs/nanomorph/blob/master/lib/morph.jsL113\n     *\n     * @param {Element} oldElement the element to sync the input value to\n     * @param {Element} newElement the element to sync the input value from\n     * @param {MorphContext} ctx the merge context\n     */\n    function syncInputValue(oldElement, newElement, ctx) {\n      if (\n        oldElement instanceof HTMLInputElement &&\n        newElement instanceof HTMLInputElement &&\n        newElement.type !== \"file\"\n      ) {\n        let newValue = newElement.value;\n        let oldValue = oldElement.value;\n\n        // sync boolean attributes\n        syncBooleanAttribute(oldElement, newElement, \"checked\", ctx);\n        syncBooleanAttribute(oldElement, newElement, \"disabled\", ctx);\n\n        if (!newElement.hasAttribute(\"value\")) {\n          if (!ignoreAttribute(\"value\", oldElement, \"remove\", ctx)) {\n            oldElement.value = \"\";\n            oldElement.removeAttribute(\"value\");\n          }\n        } else if (oldValue !== newValue) {\n          if (!ignoreAttribute(\"value\", oldElement, \"update\", ctx)) {\n            oldElement.setAttribute(\"value\", newValue);\n            oldElement.value = newValue;\n          }\n        }\n        // TODO: QUESTION(1cg): this used to only check `newElement` unlike the other branches -- why?\n        // did I break something?\n      } else if (\n        oldElement instanceof HTMLOptionElement &&\n        newElement instanceof HTMLOptionElement\n      ) {\n        syncBooleanAttribute(oldElement, newElement, \"selected\", ctx);\n      } else if (\n        oldElement instanceof HTMLTextAreaElement &&\n        newElement instanceof HTMLTextAreaElement\n      ) {\n        let newValue = newElement.value;\n        let oldValue = oldElement.value;\n        if (ignoreAttribute(\"value\", oldElement, \"update\", ctx)) {\n          return;\n        }\n        if (newValue !== oldValue) {\n          oldElement.value = newValue;\n        }\n        if (\n          oldElement.firstChild &&\n          oldElement.firstChild.nodeValue !== newValue\n        ) {\n          oldElement.firstChild.nodeValue = newValue;\n        }\n      }\n    }\n\n    /**\n     * @param {Element} oldElement element to write the value to\n     * @param {Element} newElement element to read the value from\n     * @param {string} attributeName the attribute name\n     * @param {MorphContext} ctx the merge context\n     */\n    function syncBooleanAttribute(oldElement, newElement, attributeName, ctx) {\n      // @ts-ignore this function is only used on boolean attrs that are reflected as dom properties\n      const newLiveValue = newElement[attributeName],\n        // @ts-ignore ditto\n        oldLiveValue = oldElement[attributeName];\n      if (newLiveValue !== oldLiveValue) {\n        const ignoreUpdate = ignoreAttribute(\n          attributeName,\n          oldElement,\n          \"update\",\n          ctx,\n        );\n        if (!ignoreUpdate) {\n          // update attribute's associated DOM property\n          // @ts-ignore this function is only used on boolean attrs that are reflected as dom properties\n          oldElement[attributeName] = newElement[attributeName];\n        }\n        if (newLiveValue) {\n          if (!ignoreUpdate) {\n            // https://developer.mozilla.org/en-US/docs/Glossary/Boolean/HTML\n            // this is the correct way to set a boolean attribute to \"true\"\n            oldElement.setAttribute(attributeName, \"\");\n          }\n        } else {\n          if (!ignoreAttribute(attributeName, oldElement, \"remove\", ctx)) {\n            oldElement.removeAttribute(attributeName);\n          }\n        }\n      }\n    }\n\n    /**\n     * @param {string} attr the attribute to be mutated\n     * @param {Element} element the element that is going to be updated\n     * @param {\"update\" | \"remove\"} updateType\n     * @param {MorphContext} ctx the merge context\n     * @returns {boolean} true if the attribute should be ignored, false otherwise\n     */\n    function ignoreAttribute(attr, element, updateType, ctx) {\n      if (\n        attr === \"value\" &&\n        ctx.ignoreActiveValue &&\n        element === document.activeElement\n      ) {\n        return true;\n      }\n      return (\n        ctx.callbacks.beforeAttributeUpdated(attr, element, updateType) ===\n        false\n      );\n    }\n\n    /**\n     * @param {Node} possibleActiveElement\n     * @param {MorphContext} ctx\n     * @returns {boolean}\n     */\n    function ignoreValueOfActiveElement(possibleActiveElement, ctx) {\n      return (\n        !!ctx.ignoreActiveValue &&\n        possibleActiveElement === document.activeElement &&\n        possibleActiveElement !== document.body\n      );\n    }\n\n    return morphNode;\n  })();\n\n  //=============================================================================\n  // Head Management Functions\n  //=============================================================================\n  /**\n   * @param {MorphContext} ctx\n   * @param {Element} oldNode\n   * @param {Element} newNode\n   * @param {function} callback\n   * @returns {Node[] | Promise<Node[]>}\n   */\n  function withHeadBlocking(ctx, oldNode, newNode, callback) {\n    if (ctx.head.block) {\n      const oldHead = oldNode.querySelector(\"head\");\n      const newHead = newNode.querySelector(\"head\");\n      if (oldHead && newHead) {\n        const promises = handleHeadElement(oldHead, newHead, ctx);\n        // when head promises resolve, proceed ignoring the head tag\n        return Promise.all(promises).then(() => {\n          const newCtx = Object.assign(ctx, {\n            head: {\n              block: false,\n              ignore: true,\n            },\n          });\n          return callback(newCtx);\n        });\n      }\n    }\n    // just proceed if we not head blocking\n    return callback(ctx);\n  }\n\n  /**\n   *  The HEAD tag can be handled specially, either w/ a 'merge' or 'append' style\n   *\n   * @param {Element} oldHead\n   * @param {Element} newHead\n   * @param {MorphContext} ctx\n   * @returns {Promise<void>[]}\n   */\n  function handleHeadElement(oldHead, newHead, ctx) {\n    let added = [];\n    let removed = [];\n    let preserved = [];\n    let nodesToAppend = [];\n\n    // put all new head elements into a Map, by their outerHTML\n    let srcToNewHeadNodes = new Map();\n    for (const newHeadChild of newHead.children) {\n      srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild);\n    }\n\n    // for each elt in the current head\n    for (const currentHeadElt of oldHead.children) {\n      // If the current head element is in the map\n      let inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML);\n      let isReAppended = ctx.head.shouldReAppend(currentHeadElt);\n      let isPreserved = ctx.head.shouldPreserve(currentHeadElt);\n      if (inNewContent || isPreserved) {\n        if (isReAppended) {\n          // remove the current version and let the new version replace it and re-execute\n          removed.push(currentHeadElt);\n        } else {\n          // this element already exists and should not be re-appended, so remove it from\n          // the new content map, preserving it in the DOM\n          srcToNewHeadNodes.delete(currentHeadElt.outerHTML);\n          preserved.push(currentHeadElt);\n        }\n      } else {\n        if (ctx.head.style === \"append\") {\n          // we are appending and this existing element is not new content\n          // so if and only if it is marked for re-append do we do anything\n          if (isReAppended) {\n            removed.push(currentHeadElt);\n            nodesToAppend.push(currentHeadElt);\n          }\n        } else {\n          // if this is a merge, we remove this content since it is not in the new head\n          if (ctx.head.shouldRemove(currentHeadElt) !== false) {\n            removed.push(currentHeadElt);\n          }\n        }\n      }\n    }\n\n    // Push the remaining new head elements in the Map into the\n    // nodes to append to the head tag\n    nodesToAppend.push(...srcToNewHeadNodes.values());\n\n    let promises = [];\n    for (const newNode of nodesToAppend) {\n      // TODO: This could theoretically be null, based on type\n      let newElt = /** @type {ChildNode} */ (\n        document.createRange().createContextualFragment(newNode.outerHTML)\n          .firstChild\n      );\n      if (ctx.callbacks.beforeNodeAdded(newElt) !== false) {\n        if (\n          (\"href\" in newElt && newElt.href) ||\n          (\"src\" in newElt && newElt.src)\n        ) {\n          /** @type {(result?: any) => void} */ let resolve;\n          let promise = new Promise(function (_resolve) {\n            resolve = _resolve;\n          });\n          newElt.addEventListener(\"load\", function () {\n            resolve();\n          });\n          promises.push(promise);\n        }\n        oldHead.appendChild(newElt);\n        ctx.callbacks.afterNodeAdded(newElt);\n        added.push(newElt);\n      }\n    }\n\n    // remove all removed elements, after we have appended the new elements to avoid\n    // additional network requests for things like style sheets\n    for (const removedElement of removed) {\n      if (ctx.callbacks.beforeNodeRemoved(removedElement) !== false) {\n        oldHead.removeChild(removedElement);\n        ctx.callbacks.afterNodeRemoved(removedElement);\n      }\n    }\n\n    ctx.head.afterHeadMorphed(oldHead, {\n      added: added,\n      kept: preserved,\n      removed: removed,\n    });\n    return promises;\n  }\n\n  //=============================================================================\n  // Create Morph Context Functions\n  //=============================================================================\n  const createMorphContext = (function () {\n    /**\n     *\n     * @param {Element} oldNode\n     * @param {Element} newContent\n     * @param {Config} config\n     * @returns {MorphContext}\n     */\n    function createMorphContext(oldNode, newContent, config) {\n      const { persistentIds, idMap } = createIdMaps(oldNode, newContent);\n\n      const mergedConfig = mergeDefaults(config);\n      const morphStyle = mergedConfig.morphStyle || \"outerHTML\";\n      if (![\"innerHTML\", \"outerHTML\"].includes(morphStyle)) {\n        throw `Do not understand how to morph style ${morphStyle}`;\n      }\n\n      return {\n        target: oldNode,\n        newContent: newContent,\n        config: mergedConfig,\n        morphStyle: morphStyle,\n        ignoreActive: mergedConfig.ignoreActive,\n        ignoreActiveValue: mergedConfig.ignoreActiveValue,\n        restoreFocus: mergedConfig.restoreFocus,\n        idMap: idMap,\n        persistentIds: persistentIds,\n        pantry: createPantry(),\n        callbacks: mergedConfig.callbacks,\n        head: mergedConfig.head,\n      };\n    }\n\n    /**\n     * Deep merges the config object and the Idiomorph.defaults object to\n     * produce a final configuration object\n     * @param {Config} config\n     * @returns {ConfigInternal}\n     */\n    function mergeDefaults(config) {\n      let finalConfig = Object.assign({}, defaults);\n\n      // copy top level stuff into final config\n      Object.assign(finalConfig, config);\n\n      // copy callbacks into final config (do this to deep merge the callbacks)\n      finalConfig.callbacks = Object.assign(\n        {},\n        defaults.callbacks,\n        config.callbacks,\n      );\n\n      // copy head config into final config  (do this to deep merge the head)\n      finalConfig.head = Object.assign({}, defaults.head, config.head);\n\n      return finalConfig;\n    }\n\n    /**\n     * @returns {HTMLDivElement}\n     */\n    function createPantry() {\n      const pantry = document.createElement(\"div\");\n      pantry.hidden = true;\n      document.body.insertAdjacentElement(\"afterend\", pantry);\n      return pantry;\n    }\n\n    /**\n     * Returns all elements with an ID contained within the root element and its descendants\n     *\n     * @param {Element} root\n     * @returns {Element[]}\n     */\n    function findIdElements(root) {\n      let elements = Array.from(root.querySelectorAll(\"[id]\"));\n      if (root.id) {\n        elements.push(root);\n      }\n      return elements;\n    }\n\n    /**\n     * A bottom-up algorithm that populates a map of Element -> IdSet.\n     * The idSet for a given element is the set of all IDs contained within its subtree.\n     * As an optimzation, we filter these IDs through the given list of persistent IDs,\n     * because we don't need to bother considering IDed elements that won't be in the new content.\n     *\n     * @param {Map<Node, Set<string>>} idMap\n     * @param {Set<string>} persistentIds\n     * @param {Element} root\n     * @param {Element[]} elements\n     */\n    function populateIdMapWithTree(idMap, persistentIds, root, elements) {\n      for (const elt of elements) {\n        if (persistentIds.has(elt.id)) {\n          /** @type {Element|null} */\n          let current = elt;\n          // walk up the parent hierarchy of that element, adding the id\n          // of element to the parent's id set\n          while (current) {\n            let idSet = idMap.get(current);\n            // if the id set doesn't exist, create it and insert it in the map\n            if (idSet == null) {\n              idSet = new Set();\n              idMap.set(current, idSet);\n            }\n            idSet.add(elt.id);\n\n            if (current === root) break;\n            current = current.parentElement;\n          }\n        }\n      }\n    }\n\n    /**\n     * This function computes a map of nodes to all ids contained within that node (inclusive of the\n     * node).  This map can be used to ask if two nodes have intersecting sets of ids, which allows\n     * for a looser definition of \"matching\" than tradition id matching, and allows child nodes\n     * to contribute to a parent nodes matching.\n     *\n     * @param {Element} oldContent  the old content that will be morphed\n     * @param {Element} newContent  the new content to morph to\n     * @returns {IdSets}\n     */\n    function createIdMaps(oldContent, newContent) {\n      const oldIdElements = findIdElements(oldContent);\n      const newIdElements = findIdElements(newContent);\n\n      const persistentIds = createPersistentIds(oldIdElements, newIdElements);\n\n      /** @type {Map<Node, Set<string>>} */\n      let idMap = new Map();\n      populateIdMapWithTree(idMap, persistentIds, oldContent, oldIdElements);\n\n      /** @ts-ignore - if newContent is a duck-typed parent, pass its single child node as the root to halt upwards iteration */\n      const newRoot = newContent.__idiomorphRoot || newContent;\n      populateIdMapWithTree(idMap, persistentIds, newRoot, newIdElements);\n\n      return { persistentIds, idMap };\n    }\n\n    /**\n     * This function computes the set of ids that persist between the two contents excluding duplicates\n     *\n     * @param {Element[]} oldIdElements\n     * @param {Element[]} newIdElements\n     * @returns {Set<string>}\n     */\n    function createPersistentIds(oldIdElements, newIdElements) {\n      let duplicateIds = new Set();\n\n      /** @type {Map<string, string>} */\n      let oldIdTagNameMap = new Map();\n      for (const { id, tagName } of oldIdElements) {\n        if (oldIdTagNameMap.has(id)) {\n          duplicateIds.add(id);\n        } else {\n          oldIdTagNameMap.set(id, tagName);\n        }\n      }\n\n      let persistentIds = new Set();\n      for (const { id, tagName } of newIdElements) {\n        if (persistentIds.has(id)) {\n          duplicateIds.add(id);\n        } else if (oldIdTagNameMap.get(id) === tagName) {\n          persistentIds.add(id);\n        }\n        // skip if tag types mismatch because its not possible to morph one tag into another\n      }\n\n      for (const id of duplicateIds) {\n        persistentIds.delete(id);\n      }\n      return persistentIds;\n    }\n\n    return createMorphContext;\n  })();\n\n  //=============================================================================\n  // HTML Normalization Functions\n  //=============================================================================\n  const { normalizeElement, normalizeParent } = (function () {\n    /** @type {WeakSet<Node>} */\n    const generatedByIdiomorph = new WeakSet();\n\n    /**\n     *\n     * @param {Element | Document} content\n     * @returns {Element}\n     */\n    function normalizeElement(content) {\n      if (content instanceof Document) {\n        return content.documentElement;\n      } else {\n        return content;\n      }\n    }\n\n    /**\n     *\n     * @param {null | string | Node | HTMLCollection | Node[] | Document & {generatedByIdiomorph:boolean}} newContent\n     * @returns {Element}\n     */\n    function normalizeParent(newContent) {\n      if (newContent == null) {\n        return document.createElement(\"div\"); // dummy parent element\n      } else if (typeof newContent === \"string\") {\n        return normalizeParent(parseContent(newContent));\n      } else if (\n        generatedByIdiomorph.has(/** @type {Element} */ (newContent))\n      ) {\n        // the template tag created by idiomorph parsing can serve as a dummy parent\n        return /** @type {Element} */ (newContent);\n      } else if (newContent instanceof Node) {\n        if (newContent.parentNode) {\n          // we can't use the parent directly because newContent may have siblings\n          // that we don't want in the morph, and reparenting might be expensive (TODO is it?),\n          // so we create a duck-typed parent node instead.\n          return createDuckTypedParent(newContent);\n        } else {\n          // a single node is added as a child to a dummy parent\n          const dummyParent = document.createElement(\"div\");\n          dummyParent.append(newContent);\n          return dummyParent;\n        }\n      } else {\n        // all nodes in the array or HTMLElement collection are consolidated under\n        // a single dummy parent element\n        const dummyParent = document.createElement(\"div\");\n        for (const elt of [...newContent]) {\n          dummyParent.append(elt);\n        }\n        return dummyParent;\n      }\n    }\n\n    /**\n     * Creates a fake duck-typed parent element to wrap a single node, without actually reparenting it.\n     * \"If it walks like a duck, and quacks like a duck, then it must be a duck!\" -- James Whitcomb Riley (1849\u20131916)\n     *\n     * @param {Node} newContent\n     * @returns {Element}\n     */\n    function createDuckTypedParent(newContent) {\n      return /** @type {Element} */ (\n        /** @type {unknown} */ ({\n          childNodes: [newContent],\n          /** @ts-ignore - cover your eyes for a minute, tsc */\n          querySelectorAll: (s) => {\n            /** @ts-ignore */\n            const elements = newContent.querySelectorAll(s);\n            /** @ts-ignore */\n            return newContent.matches(s) ? [newContent, ...elements] : elements;\n          },\n          /** @ts-ignore */\n          insertBefore: (n, r) => newContent.parentNode.insertBefore(n, r),\n          /** @ts-ignore */\n          moveBefore: (n, r) => newContent.parentNode.moveBefore(n, r),\n          // for later use with populateIdMapWithTree to halt upwards iteration\n          get __idiomorphRoot() {\n            return newContent;\n          },\n        })\n      );\n    }\n\n    /**\n     *\n     * @param {string} newContent\n     * @returns {Node | null | DocumentFragment}\n     */\n    function parseContent(newContent) {\n      let parser = new DOMParser();\n\n      // remove svgs to avoid false-positive matches on head, etc.\n      let contentWithSvgsRemoved = newContent.replace(\n        /<svg(\\s[^>]*>|>)([\\s\\S]*?)<\\/svg>/gim,\n        \"\",\n      );\n\n      // if the newContent contains a html, head or body tag, we can simply parse it w/o wrapping\n      if (\n        contentWithSvgsRemoved.match(/<\\/html>/) ||\n        contentWithSvgsRemoved.match(/<\\/head>/) ||\n        contentWithSvgsRemoved.match(/<\\/body>/)\n      ) {\n        let content = parser.parseFromString(newContent, \"text/html\");\n        // if it is a full HTML document, return the document itself as the parent container\n        if (contentWithSvgsRemoved.match(/<\\/html>/)) {\n          generatedByIdiomorph.add(content);\n          return content;\n        } else {\n          // otherwise return the html element as the parent container\n          let htmlElement = content.firstChild;\n          if (htmlElement) {\n            generatedByIdiomorph.add(htmlElement);\n          }\n          return htmlElement;\n        }\n      } else {\n        // if it is partial HTML, wrap it in a template tag to provide a parent element and also to help\n        // deal with touchy tags like tr, tbody, etc.\n        let responseDoc = parser.parseFromString(\n          \"<body><template>\" + newContent + \"</template></body>\",\n          \"text/html\",\n        );\n        let content = /** @type {HTMLTemplateElement} */ (\n          responseDoc.body.querySelector(\"template\")\n        ).content;\n        generatedByIdiomorph.add(content);\n        return content;\n      }\n    }\n\n    return { normalizeElement, normalizeParent };\n  })();\n\n  //=============================================================================\n  // This is what ends up becoming the Idiomorph global object\n  //=============================================================================\n  return {\n    morph,\n    defaults,\n  };\n})();\n\nfunction morphElements(currentElement, newElement, { callbacks, ...options } = {}) {\n  Idiomorph.morph(currentElement, newElement, {\n    ...options,\n    callbacks: new DefaultIdiomorphCallbacks(callbacks)\n  });\n}\n\nfunction morphChildren(currentElement, newElement) {\n  morphElements(currentElement, newElement.childNodes, {\n    morphStyle: \"innerHTML\"\n  });\n}\n\nclass DefaultIdiomorphCallbacks {\n  #beforeNodeMorphed\n\n  constructor({ beforeNodeMorphed } = {}) {\n    this.#beforeNodeMorphed = beforeNodeMorphed || (() => true);\n  }\n\n  beforeNodeAdded = (node) => {\n    return !(node.id && node.hasAttribute(\"data-turbo-permanent\") && document.getElementById(node.id))\n  }\n\n  beforeNodeMorphed = (currentElement, newElement) => {\n    if (currentElement instanceof Element) {\n      if (!currentElement.hasAttribute(\"data-turbo-permanent\") && this.#beforeNodeMorphed(currentElement, newElement)) {\n        const event = dispatch(\"turbo:before-morph-element\", {\n          cancelable: true,\n          target: currentElement,\n          detail: { currentElement, newElement }\n        });\n\n        return !event.defaultPrevented\n      } else {\n        return false\n      }\n    }\n  }\n\n  beforeAttributeUpdated = (attributeName, target, mutationType) => {\n    const event = dispatch(\"turbo:before-morph-attribute\", {\n      cancelable: true,\n      target,\n      detail: { attributeName, mutationType }\n    });\n\n    return !event.defaultPrevented\n  }\n\n  beforeNodeRemoved = (node) => {\n    return this.beforeNodeMorphed(node)\n  }\n\n  afterNodeMorphed = (currentElement, newElement) => {\n    if (currentElement instanceof Element) {\n      dispatch(\"turbo:morph-element\", {\n        target: currentElement,\n        detail: { currentElement, newElement }\n      });\n    }\n  }\n}\n\nclass MorphingFrameRenderer extends FrameRenderer {\n  static renderElement(currentElement, newElement) {\n    dispatch(\"turbo:before-frame-morph\", {\n      target: currentElement,\n      detail: { currentElement, newElement }\n    });\n\n    morphChildren(currentElement, newElement);\n  }\n\n  async preservingPermanentElements(callback) {\n    return await callback()\n  }\n}\n\nclass ProgressBar {\n  static animationDuration = 300 /*ms*/\n\n  static get defaultCSS() {\n    return unindent`\n      .turbo-progress-bar {\n        position: fixed;\n        display: block;\n        top: 0;\n        left: 0;\n        height: 3px;\n        background: #0076ff;\n        z-index: 2147483647;\n        transition:\n          width ${ProgressBar.animationDuration}ms ease-out,\n          opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n        transform: translate3d(0, 0, 0);\n      }\n    `\n  }\n\n  hiding = false\n  value = 0\n  visible = false\n\n  constructor() {\n    this.stylesheetElement = this.createStylesheetElement();\n    this.progressElement = this.createProgressElement();\n    this.installStylesheetElement();\n    this.setValue(0);\n  }\n\n  show() {\n    if (!this.visible) {\n      this.visible = true;\n      this.installProgressElement();\n      this.startTrickling();\n    }\n  }\n\n  hide() {\n    if (this.visible && !this.hiding) {\n      this.hiding = true;\n      this.fadeProgressElement(() => {\n        this.uninstallProgressElement();\n        this.stopTrickling();\n        this.visible = false;\n        this.hiding = false;\n      });\n    }\n  }\n\n  setValue(value) {\n    this.value = value;\n    this.refresh();\n  }\n\n  // Private\n\n  installStylesheetElement() {\n    document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n  }\n\n  installProgressElement() {\n    this.progressElement.style.width = \"0\";\n    this.progressElement.style.opacity = \"1\";\n    document.documentElement.insertBefore(this.progressElement, document.body);\n    this.refresh();\n  }\n\n  fadeProgressElement(callback) {\n    this.progressElement.style.opacity = \"0\";\n    setTimeout(callback, ProgressBar.animationDuration * 1.5);\n  }\n\n  uninstallProgressElement() {\n    if (this.progressElement.parentNode) {\n      document.documentElement.removeChild(this.progressElement);\n    }\n  }\n\n  startTrickling() {\n    if (!this.trickleInterval) {\n      this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n    }\n  }\n\n  stopTrickling() {\n    window.clearInterval(this.trickleInterval);\n    delete this.trickleInterval;\n  }\n\n  trickle = () => {\n    this.setValue(this.value + Math.random() / 100);\n  }\n\n  refresh() {\n    requestAnimationFrame(() => {\n      this.progressElement.style.width = `${10 + this.value * 90}%`;\n    });\n  }\n\n  createStylesheetElement() {\n    const element = document.createElement(\"style\");\n    element.type = \"text/css\";\n    element.textContent = ProgressBar.defaultCSS;\n    const cspNonce = getCspNonce();\n    if (cspNonce) {\n      element.nonce = cspNonce;\n    }\n    return element\n  }\n\n  createProgressElement() {\n    const element = document.createElement(\"div\");\n    element.className = \"turbo-progress-bar\";\n    return element\n  }\n}\n\nclass HeadSnapshot extends Snapshot {\n  detailsByOuterHTML = this.children\n    .filter((element) => !elementIsNoscript(element))\n    .map((element) => elementWithoutNonce(element))\n    .reduce((result, element) => {\n      const { outerHTML } = element;\n      const details =\n        outerHTML in result\n          ? result[outerHTML]\n          : {\n              type: elementType(element),\n              tracked: elementIsTracked(element),\n              elements: []\n            };\n      return {\n        ...result,\n        [outerHTML]: {\n          ...details,\n          elements: [...details.elements, element]\n        }\n      }\n    }, {})\n\n  get trackedElementSignature() {\n    return Object.keys(this.detailsByOuterHTML)\n      .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n      .join(\"\")\n  }\n\n  getScriptElementsNotInSnapshot(snapshot) {\n    return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot)\n  }\n\n  getStylesheetElementsNotInSnapshot(snapshot) {\n    return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot)\n  }\n\n  getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n    return Object.keys(this.detailsByOuterHTML)\n      .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n      .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n      .filter(({ type }) => type == matchedType)\n      .map(({ elements: [element] }) => element)\n  }\n\n  get provisionalElements() {\n    return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n      const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n      if (type == null && !tracked) {\n        return [...result, ...elements]\n      } else if (elements.length > 1) {\n        return [...result, ...elements.slice(1)]\n      } else {\n        return result\n      }\n    }, [])\n  }\n\n  getMetaValue(name) {\n    const element = this.findMetaElementByName(name);\n    return element ? element.getAttribute(\"content\") : null\n  }\n\n  findMetaElementByName(name) {\n    return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n      const {\n        elements: [element]\n      } = this.detailsByOuterHTML[outerHTML];\n      return elementIsMetaElementWithName(element, name) ? element : result\n    }, undefined | undefined)\n  }\n}\n\nfunction elementType(element) {\n  if (elementIsScript(element)) {\n    return \"script\"\n  } else if (elementIsStylesheet(element)) {\n    return \"stylesheet\"\n  }\n}\n\nfunction elementIsTracked(element) {\n  return element.getAttribute(\"data-turbo-track\") == \"reload\"\n}\n\nfunction elementIsScript(element) {\n  const tagName = element.localName;\n  return tagName == \"script\"\n}\n\nfunction elementIsNoscript(element) {\n  const tagName = element.localName;\n  return tagName == \"noscript\"\n}\n\nfunction elementIsStylesheet(element) {\n  const tagName = element.localName;\n  return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\")\n}\n\nfunction elementIsMetaElementWithName(element, name) {\n  const tagName = element.localName;\n  return tagName == \"meta\" && element.getAttribute(\"name\") == name\n}\n\nfunction elementWithoutNonce(element) {\n  if (element.hasAttribute(\"nonce\")) {\n    element.setAttribute(\"nonce\", \"\");\n  }\n\n  return element\n}\n\nclass PageSnapshot extends Snapshot {\n  static fromHTMLString(html = \"\") {\n    return this.fromDocument(parseHTMLDocument(html))\n  }\n\n  static fromElement(element) {\n    return this.fromDocument(element.ownerDocument)\n  }\n\n  static fromDocument({ documentElement, body, head }) {\n    return new this(documentElement, body, new HeadSnapshot(head))\n  }\n\n  constructor(documentElement, body, headSnapshot) {\n    super(body);\n    this.documentElement = documentElement;\n    this.headSnapshot = headSnapshot;\n  }\n\n  clone() {\n    const clonedElement = this.element.cloneNode(true);\n\n    const selectElements = this.element.querySelectorAll(\"select\");\n    const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n\n    for (const [index, source] of selectElements.entries()) {\n      const clone = clonedSelectElements[index];\n      for (const option of clone.selectedOptions) option.selected = false;\n      for (const option of source.selectedOptions) clone.options[option.index].selected = true;\n    }\n\n    for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n      clonedPasswordInput.value = \"\";\n    }\n\n    return new PageSnapshot(this.documentElement, clonedElement, this.headSnapshot)\n  }\n\n  get lang() {\n    return this.documentElement.getAttribute(\"lang\")\n  }\n\n  get headElement() {\n    return this.headSnapshot.element\n  }\n\n  get rootLocation() {\n    const root = this.getSetting(\"root\") ?? \"/\";\n    return expandURL(root)\n  }\n\n  get cacheControlValue() {\n    return this.getSetting(\"cache-control\")\n  }\n\n  get isPreviewable() {\n    return this.cacheControlValue != \"no-preview\"\n  }\n\n  get isCacheable() {\n    return this.cacheControlValue != \"no-cache\"\n  }\n\n  get isVisitable() {\n    return this.getSetting(\"visit-control\") != \"reload\"\n  }\n\n  get prefersViewTransitions() {\n    return this.headSnapshot.getMetaValue(\"view-transition\") === \"same-origin\"\n  }\n\n  get shouldMorphPage() {\n    return this.getSetting(\"refresh-method\") === \"morph\"\n  }\n\n  get shouldPreserveScrollPosition() {\n    return this.getSetting(\"refresh-scroll\") === \"preserve\"\n  }\n\n  // Private\n\n  getSetting(name) {\n    return this.headSnapshot.getMetaValue(`turbo-${name}`)\n  }\n}\n\nclass ViewTransitioner {\n  #viewTransitionStarted = false\n  #lastOperation = Promise.resolve()\n\n  renderChange(useViewTransition, render) {\n    if (useViewTransition && this.viewTransitionsAvailable && !this.#viewTransitionStarted) {\n      this.#viewTransitionStarted = true;\n      this.#lastOperation = this.#lastOperation.then(async () => {\n        await document.startViewTransition(render).finished;\n      });\n    } else {\n      this.#lastOperation = this.#lastOperation.then(render);\n    }\n\n    return this.#lastOperation\n  }\n\n  get viewTransitionsAvailable() {\n    return document.startViewTransition\n  }\n}\n\nconst defaultOptions = {\n  action: \"advance\",\n  historyChanged: false,\n  visitCachedSnapshot: () => {},\n  willRender: true,\n  updateHistory: true,\n  shouldCacheSnapshot: true,\n  acceptsStreamResponse: false\n};\n\nconst TimingMetric = {\n  visitStart: \"visitStart\",\n  requestStart: \"requestStart\",\n  requestEnd: \"requestEnd\",\n  visitEnd: \"visitEnd\"\n};\n\nconst VisitState = {\n  initialized: \"initialized\",\n  started: \"started\",\n  canceled: \"canceled\",\n  failed: \"failed\",\n  completed: \"completed\"\n};\n\nconst SystemStatusCode = {\n  networkFailure: 0,\n  timeoutFailure: -1,\n  contentTypeMismatch: -2\n};\n\nconst Direction = {\n  advance: \"forward\",\n  restore: \"back\",\n  replace: \"none\"\n};\n\nclass Visit {\n  identifier = uuid() // Required by turbo-ios\n  timingMetrics = {}\n\n  followedRedirect = false\n  historyChanged = false\n  scrolled = false\n  shouldCacheSnapshot = true\n  acceptsStreamResponse = false\n  snapshotCached = false\n  state = VisitState.initialized\n  viewTransitioner = new ViewTransitioner()\n\n  constructor(delegate, location, restorationIdentifier, options = {}) {\n    this.delegate = delegate;\n    this.location = location;\n    this.restorationIdentifier = restorationIdentifier || uuid();\n\n    const {\n      action,\n      historyChanged,\n      referrer,\n      snapshot,\n      snapshotHTML,\n      response,\n      visitCachedSnapshot,\n      willRender,\n      updateHistory,\n      shouldCacheSnapshot,\n      acceptsStreamResponse,\n      direction\n    } = {\n      ...defaultOptions,\n      ...options\n    };\n    this.action = action;\n    this.historyChanged = historyChanged;\n    this.referrer = referrer;\n    this.snapshot = snapshot;\n    this.snapshotHTML = snapshotHTML;\n    this.response = response;\n    this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n    this.isPageRefresh = this.view.isPageRefresh(this);\n    this.visitCachedSnapshot = visitCachedSnapshot;\n    this.willRender = willRender;\n    this.updateHistory = updateHistory;\n    this.scrolled = !willRender;\n    this.shouldCacheSnapshot = shouldCacheSnapshot;\n    this.acceptsStreamResponse = acceptsStreamResponse;\n    this.direction = direction || Direction[action];\n  }\n\n  get adapter() {\n    return this.delegate.adapter\n  }\n\n  get view() {\n    return this.delegate.view\n  }\n\n  get history() {\n    return this.delegate.history\n  }\n\n  get restorationData() {\n    return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)\n  }\n\n  get silent() {\n    return this.isSamePage\n  }\n\n  start() {\n    if (this.state == VisitState.initialized) {\n      this.recordTimingMetric(TimingMetric.visitStart);\n      this.state = VisitState.started;\n      this.adapter.visitStarted(this);\n      this.delegate.visitStarted(this);\n    }\n  }\n\n  cancel() {\n    if (this.state == VisitState.started) {\n      if (this.request) {\n        this.request.cancel();\n      }\n      this.cancelRender();\n      this.state = VisitState.canceled;\n    }\n  }\n\n  complete() {\n    if (this.state == VisitState.started) {\n      this.recordTimingMetric(TimingMetric.visitEnd);\n      this.adapter.visitCompleted(this);\n      this.state = VisitState.completed;\n      this.followRedirect();\n\n      if (!this.followedRedirect) {\n        this.delegate.visitCompleted(this);\n      }\n    }\n  }\n\n  fail() {\n    if (this.state == VisitState.started) {\n      this.state = VisitState.failed;\n      this.adapter.visitFailed(this);\n      this.delegate.visitCompleted(this);\n    }\n  }\n\n  changeHistory() {\n    if (!this.historyChanged && this.updateHistory) {\n      const actionForHistory = this.location.href === this.referrer?.href ? \"replace\" : this.action;\n      const method = getHistoryMethodForAction(actionForHistory);\n      this.history.update(method, this.location, this.restorationIdentifier);\n      this.historyChanged = true;\n    }\n  }\n\n  issueRequest() {\n    if (this.hasPreloadedResponse()) {\n      this.simulateRequest();\n    } else if (this.shouldIssueRequest() && !this.request) {\n      this.request = new FetchRequest(this, FetchMethod.get, this.location);\n      this.request.perform();\n    }\n  }\n\n  simulateRequest() {\n    if (this.response) {\n      this.startRequest();\n      this.recordResponse();\n      this.finishRequest();\n    }\n  }\n\n  startRequest() {\n    this.recordTimingMetric(TimingMetric.requestStart);\n    this.adapter.visitRequestStarted(this);\n  }\n\n  recordResponse(response = this.response) {\n    this.response = response;\n    if (response) {\n      const { statusCode } = response;\n      if (isSuccessful(statusCode)) {\n        this.adapter.visitRequestCompleted(this);\n      } else {\n        this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n      }\n    }\n  }\n\n  finishRequest() {\n    this.recordTimingMetric(TimingMetric.requestEnd);\n    this.adapter.visitRequestFinished(this);\n  }\n\n  loadResponse() {\n    if (this.response) {\n      const { statusCode, responseHTML } = this.response;\n      this.render(async () => {\n        if (this.shouldCacheSnapshot) this.cacheSnapshot();\n        if (this.view.renderPromise) await this.view.renderPromise;\n\n        if (isSuccessful(statusCode) && responseHTML != null) {\n          const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n          await this.renderPageSnapshot(snapshot, false);\n\n          this.adapter.visitRendered(this);\n          this.complete();\n        } else {\n          await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n          this.adapter.visitRendered(this);\n          this.fail();\n        }\n      });\n    }\n  }\n\n  getCachedSnapshot() {\n    const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n\n    if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n      if (this.action == \"restore\" || snapshot.isPreviewable) {\n        return snapshot\n      }\n    }\n  }\n\n  getPreloadedSnapshot() {\n    if (this.snapshotHTML) {\n      return PageSnapshot.fromHTMLString(this.snapshotHTML)\n    }\n  }\n\n  hasCachedSnapshot() {\n    return this.getCachedSnapshot() != null\n  }\n\n  loadCachedSnapshot() {\n    const snapshot = this.getCachedSnapshot();\n    if (snapshot) {\n      const isPreview = this.shouldIssueRequest();\n      this.render(async () => {\n        this.cacheSnapshot();\n        if (this.isSamePage || this.isPageRefresh) {\n          this.adapter.visitRendered(this);\n        } else {\n          if (this.view.renderPromise) await this.view.renderPromise;\n\n          await this.renderPageSnapshot(snapshot, isPreview);\n\n          this.adapter.visitRendered(this);\n          if (!isPreview) {\n            this.complete();\n          }\n        }\n      });\n    }\n  }\n\n  followRedirect() {\n    if (this.redirectedToLocation && !this.followedRedirect && this.response?.redirected) {\n      this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n        action: \"replace\",\n        response: this.response,\n        shouldCacheSnapshot: false,\n        willRender: false\n      });\n      this.followedRedirect = true;\n    }\n  }\n\n  goToSamePageAnchor() {\n    if (this.isSamePage) {\n      this.render(async () => {\n        this.cacheSnapshot();\n        this.performScroll();\n        this.changeHistory();\n        this.adapter.visitRendered(this);\n      });\n    }\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    if (this.acceptsStreamResponse) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted() {\n    this.startRequest();\n  }\n\n  requestPreventedHandlingResponse(_request, _response) {}\n\n  async requestSucceededWithResponse(request, response) {\n    const responseHTML = await response.responseHTML;\n    const { redirected, statusCode } = response;\n    if (responseHTML == undefined) {\n      this.recordResponse({\n        statusCode: SystemStatusCode.contentTypeMismatch,\n        redirected\n      });\n    } else {\n      this.redirectedToLocation = response.redirected ? response.location : undefined;\n      this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n    }\n  }\n\n  async requestFailedWithResponse(request, response) {\n    const responseHTML = await response.responseHTML;\n    const { redirected, statusCode } = response;\n    if (responseHTML == undefined) {\n      this.recordResponse({\n        statusCode: SystemStatusCode.contentTypeMismatch,\n        redirected\n      });\n    } else {\n      this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n    }\n  }\n\n  requestErrored(_request, _error) {\n    this.recordResponse({\n      statusCode: SystemStatusCode.networkFailure,\n      redirected: false\n    });\n  }\n\n  requestFinished() {\n    this.finishRequest();\n  }\n\n  // Scrolling\n\n  performScroll() {\n    if (!this.scrolled && !this.view.forceReloaded && !this.view.shouldPreserveScrollPosition(this)) {\n      if (this.action == \"restore\") {\n        this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n      } else {\n        this.scrollToAnchor() || this.view.scrollToTop();\n      }\n      if (this.isSamePage) {\n        this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n      }\n\n      this.scrolled = true;\n    }\n  }\n\n  scrollToRestoredPosition() {\n    const { scrollPosition } = this.restorationData;\n    if (scrollPosition) {\n      this.view.scrollToPosition(scrollPosition);\n      return true\n    }\n  }\n\n  scrollToAnchor() {\n    const anchor = getAnchor(this.location);\n    if (anchor != null) {\n      this.view.scrollToAnchor(anchor);\n      return true\n    }\n  }\n\n  // Instrumentation\n\n  recordTimingMetric(metric) {\n    this.timingMetrics[metric] = new Date().getTime();\n  }\n\n  getTimingMetrics() {\n    return { ...this.timingMetrics }\n  }\n\n  // Private\n\n  hasPreloadedResponse() {\n    return typeof this.response == \"object\"\n  }\n\n  shouldIssueRequest() {\n    if (this.isSamePage) {\n      return false\n    } else if (this.action == \"restore\") {\n      return !this.hasCachedSnapshot()\n    } else {\n      return this.willRender\n    }\n  }\n\n  cacheSnapshot() {\n    if (!this.snapshotCached) {\n      this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n      this.snapshotCached = true;\n    }\n  }\n\n  async render(callback) {\n    this.cancelRender();\n    await new Promise((resolve) => {\n      this.frame =\n        document.visibilityState === \"hidden\" ? setTimeout(() => resolve(), 0) : requestAnimationFrame(() => resolve());\n    });\n    await callback();\n    delete this.frame;\n  }\n\n  async renderPageSnapshot(snapshot, isPreview) {\n    await this.viewTransitioner.renderChange(this.view.shouldTransitionTo(snapshot), async () => {\n      await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n      this.performScroll();\n    });\n  }\n\n  cancelRender() {\n    if (this.frame) {\n      cancelAnimationFrame(this.frame);\n      delete this.frame;\n    }\n  }\n}\n\nfunction isSuccessful(statusCode) {\n  return statusCode >= 200 && statusCode < 300\n}\n\nclass BrowserAdapter {\n  progressBar = new ProgressBar()\n\n  constructor(session) {\n    this.session = session;\n  }\n\n  visitProposedToLocation(location, options) {\n    if (locationIsVisitable(location, this.navigator.rootLocation)) {\n      this.navigator.startVisit(location, options?.restorationIdentifier || uuid(), options);\n    } else {\n      window.location.href = location.toString();\n    }\n  }\n\n  visitStarted(visit) {\n    this.location = visit.location;\n    visit.loadCachedSnapshot();\n    visit.issueRequest();\n    visit.goToSamePageAnchor();\n  }\n\n  visitRequestStarted(visit) {\n    this.progressBar.setValue(0);\n    if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n      this.showVisitProgressBarAfterDelay();\n    } else {\n      this.showProgressBar();\n    }\n  }\n\n  visitRequestCompleted(visit) {\n    visit.loadResponse();\n  }\n\n  visitRequestFailedWithStatusCode(visit, statusCode) {\n    switch (statusCode) {\n      case SystemStatusCode.networkFailure:\n      case SystemStatusCode.timeoutFailure:\n      case SystemStatusCode.contentTypeMismatch:\n        return this.reload({\n          reason: \"request_failed\",\n          context: {\n            statusCode\n          }\n        })\n      default:\n        return visit.loadResponse()\n    }\n  }\n\n  visitRequestFinished(_visit) {}\n\n  visitCompleted(_visit) {\n    this.progressBar.setValue(1);\n    this.hideVisitProgressBar();\n  }\n\n  pageInvalidated(reason) {\n    this.reload(reason);\n  }\n\n  visitFailed(_visit) {\n    this.progressBar.setValue(1);\n    this.hideVisitProgressBar();\n  }\n\n  visitRendered(_visit) {}\n\n  // Link prefetching\n\n  linkPrefetchingIsEnabledForLocation(location) {\n    return true\n  }\n\n  // Form Submission Delegate\n\n  formSubmissionStarted(_formSubmission) {\n    this.progressBar.setValue(0);\n    this.showFormProgressBarAfterDelay();\n  }\n\n  formSubmissionFinished(_formSubmission) {\n    this.progressBar.setValue(1);\n    this.hideFormProgressBar();\n  }\n\n  // Private\n\n  showVisitProgressBarAfterDelay() {\n    this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n  }\n\n  hideVisitProgressBar() {\n    this.progressBar.hide();\n    if (this.visitProgressBarTimeout != null) {\n      window.clearTimeout(this.visitProgressBarTimeout);\n      delete this.visitProgressBarTimeout;\n    }\n  }\n\n  showFormProgressBarAfterDelay() {\n    if (this.formProgressBarTimeout == null) {\n      this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n    }\n  }\n\n  hideFormProgressBar() {\n    this.progressBar.hide();\n    if (this.formProgressBarTimeout != null) {\n      window.clearTimeout(this.formProgressBarTimeout);\n      delete this.formProgressBarTimeout;\n    }\n  }\n\n  showProgressBar = () => {\n    this.progressBar.show();\n  }\n\n  reload(reason) {\n    dispatch(\"turbo:reload\", { detail: reason });\n\n    window.location.href = this.location?.toString() || window.location.href;\n  }\n\n  get navigator() {\n    return this.session.navigator\n  }\n}\n\nclass CacheObserver {\n  selector = \"[data-turbo-temporary]\"\n  deprecatedSelector = \"[data-turbo-cache=false]\"\n\n  started = false\n\n  start() {\n    if (!this.started) {\n      this.started = true;\n      addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.started = false;\n      removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n\n  removeTemporaryElements = (_event) => {\n    for (const element of this.temporaryElements) {\n      element.remove();\n    }\n  }\n\n  get temporaryElements() {\n    return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation]\n  }\n\n  get temporaryElementsWithDeprecation() {\n    const elements = document.querySelectorAll(this.deprecatedSelector);\n\n    if (elements.length) {\n      console.warn(\n        `The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`\n      );\n    }\n\n    return [...elements]\n  }\n}\n\nclass FrameRedirector {\n  constructor(session, element) {\n    this.session = session;\n    this.element = element;\n    this.linkInterceptor = new LinkInterceptor(this, element);\n    this.formSubmitObserver = new FormSubmitObserver(this, element);\n  }\n\n  start() {\n    this.linkInterceptor.start();\n    this.formSubmitObserver.start();\n  }\n\n  stop() {\n    this.linkInterceptor.stop();\n    this.formSubmitObserver.stop();\n  }\n\n  // Link interceptor delegate\n\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.#shouldRedirect(element)\n  }\n\n  linkClickIntercepted(element, url, event) {\n    const frame = this.#findFrameElement(element);\n    if (frame) {\n      frame.delegate.linkClickIntercepted(element, url, event);\n    }\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(element, submitter) {\n    return (\n      element.closest(\"turbo-frame\") == null &&\n      this.#shouldSubmit(element, submitter) &&\n      this.#shouldRedirect(element, submitter)\n    )\n  }\n\n  formSubmitted(element, submitter) {\n    const frame = this.#findFrameElement(element, submitter);\n    if (frame) {\n      frame.delegate.formSubmitted(element, submitter);\n    }\n  }\n\n  #shouldSubmit(form, submitter) {\n    const action = getAction$1(form, submitter);\n    const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n    const rootLocation = expandURL(meta?.content ?? \"/\");\n\n    return this.#shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation)\n  }\n\n  #shouldRedirect(element, submitter) {\n    const isNavigatable =\n      element instanceof HTMLFormElement\n        ? this.session.submissionIsNavigatable(element, submitter)\n        : this.session.elementIsNavigatable(element);\n\n    if (isNavigatable) {\n      const frame = this.#findFrameElement(element, submitter);\n      return frame ? frame != element.closest(\"turbo-frame\") : false\n    } else {\n      return false\n    }\n  }\n\n  #findFrameElement(element, submitter) {\n    const id = submitter?.getAttribute(\"data-turbo-frame\") || element.getAttribute(\"data-turbo-frame\");\n    if (id && id != \"_top\") {\n      const frame = this.element.querySelector(`#${id}:not([disabled])`);\n      if (frame instanceof FrameElement) {\n        return frame\n      }\n    }\n  }\n}\n\nclass History {\n  location\n  restorationIdentifier = uuid()\n  restorationData = {}\n  started = false\n  pageLoaded = false\n  currentIndex = 0\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      addEventListener(\"popstate\", this.onPopState, false);\n      addEventListener(\"load\", this.onPageLoad, false);\n      this.currentIndex = history.state?.turbo?.restorationIndex || 0;\n      this.started = true;\n      this.replace(new URL(window.location.href));\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      removeEventListener(\"popstate\", this.onPopState, false);\n      removeEventListener(\"load\", this.onPageLoad, false);\n      this.started = false;\n    }\n  }\n\n  push(location, restorationIdentifier) {\n    this.update(history.pushState, location, restorationIdentifier);\n  }\n\n  replace(location, restorationIdentifier) {\n    this.update(history.replaceState, location, restorationIdentifier);\n  }\n\n  update(method, location, restorationIdentifier = uuid()) {\n    if (method === history.pushState) ++this.currentIndex;\n\n    const state = { turbo: { restorationIdentifier, restorationIndex: this.currentIndex } };\n    method.call(history, state, \"\", location.href);\n    this.location = location;\n    this.restorationIdentifier = restorationIdentifier;\n  }\n\n  // Restoration data\n\n  getRestorationDataForIdentifier(restorationIdentifier) {\n    return this.restorationData[restorationIdentifier] || {}\n  }\n\n  updateRestorationData(additionalData) {\n    const { restorationIdentifier } = this;\n    const restorationData = this.restorationData[restorationIdentifier];\n    this.restorationData[restorationIdentifier] = {\n      ...restorationData,\n      ...additionalData\n    };\n  }\n\n  // Scroll restoration\n\n  assumeControlOfScrollRestoration() {\n    if (!this.previousScrollRestoration) {\n      this.previousScrollRestoration = history.scrollRestoration ?? \"auto\";\n      history.scrollRestoration = \"manual\";\n    }\n  }\n\n  relinquishControlOfScrollRestoration() {\n    if (this.previousScrollRestoration) {\n      history.scrollRestoration = this.previousScrollRestoration;\n      delete this.previousScrollRestoration;\n    }\n  }\n\n  // Event handlers\n\n  onPopState = (event) => {\n    if (this.shouldHandlePopState()) {\n      const { turbo } = event.state || {};\n      if (turbo) {\n        this.location = new URL(window.location.href);\n        const { restorationIdentifier, restorationIndex } = turbo;\n        this.restorationIdentifier = restorationIdentifier;\n        const direction = restorationIndex > this.currentIndex ? \"forward\" : \"back\";\n        this.delegate.historyPoppedToLocationWithRestorationIdentifierAndDirection(this.location, restorationIdentifier, direction);\n        this.currentIndex = restorationIndex;\n      }\n    }\n  }\n\n  onPageLoad = async (_event) => {\n    await nextMicrotask();\n    this.pageLoaded = true;\n  }\n\n  // Private\n\n  shouldHandlePopState() {\n    // Safari dispatches a popstate event after window's load event, ignore it\n    return this.pageIsLoaded()\n  }\n\n  pageIsLoaded() {\n    return this.pageLoaded || document.readyState == \"complete\"\n  }\n}\n\nclass LinkPrefetchObserver {\n  started = false\n  #prefetchedLink = null\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (this.started) return\n\n    if (this.eventTarget.readyState === \"loading\") {\n      this.eventTarget.addEventListener(\"DOMContentLoaded\", this.#enable, { once: true });\n    } else {\n      this.#enable();\n    }\n  }\n\n  stop() {\n    if (!this.started) return\n\n    this.eventTarget.removeEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n      capture: true,\n      passive: true\n    });\n    this.eventTarget.removeEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n      capture: true,\n      passive: true\n    });\n\n    this.eventTarget.removeEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n    this.started = false;\n  }\n\n  #enable = () => {\n    this.eventTarget.addEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n      capture: true,\n      passive: true\n    });\n    this.eventTarget.addEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n      capture: true,\n      passive: true\n    });\n\n    this.eventTarget.addEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n    this.started = true;\n  }\n\n  #tryToPrefetchRequest = (event) => {\n    if (getMetaContent(\"turbo-prefetch\") === \"false\") return\n\n    const target = event.target;\n    const isLink = target.matches && target.matches(\"a[href]:not([target^=_]):not([download])\");\n\n    if (isLink && this.#isPrefetchable(target)) {\n      const link = target;\n      const location = getLocationForLink(link);\n\n      if (this.delegate.canPrefetchRequestToLocation(link, location)) {\n        this.#prefetchedLink = link;\n\n        const fetchRequest = new FetchRequest(\n          this,\n          FetchMethod.get,\n          location,\n          new URLSearchParams(),\n          target\n        );\n\n        prefetchCache.setLater(location.toString(), fetchRequest, this.#cacheTtl);\n      }\n    }\n  }\n\n  #cancelRequestIfObsolete = (event) => {\n    if (event.target === this.#prefetchedLink) this.#cancelPrefetchRequest();\n  }\n\n  #cancelPrefetchRequest = () => {\n    prefetchCache.clear();\n    this.#prefetchedLink = null;\n  }\n\n  #tryToUsePrefetchedRequest = (event) => {\n    if (event.target.tagName !== \"FORM\" && event.detail.fetchOptions.method === \"GET\") {\n      const cached = prefetchCache.get(event.detail.url.toString());\n\n      if (cached) {\n        // User clicked link, use cache response\n        event.detail.fetchRequest = cached;\n      }\n\n      prefetchCache.clear();\n    }\n  }\n\n  prepareRequest(request) {\n    const link = request.target;\n\n    request.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n\n    const turboFrame = link.closest(\"turbo-frame\");\n    const turboFrameTarget = link.getAttribute(\"data-turbo-frame\") || turboFrame?.getAttribute(\"target\") || turboFrame?.id;\n\n    if (turboFrameTarget && turboFrameTarget !== \"_top\") {\n      request.headers[\"Turbo-Frame\"] = turboFrameTarget;\n    }\n  }\n\n  // Fetch request interface\n\n  requestSucceededWithResponse() {}\n\n  requestStarted(fetchRequest) {}\n\n  requestErrored(fetchRequest) {}\n\n  requestFinished(fetchRequest) {}\n\n  requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n  requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n  get #cacheTtl() {\n    return Number(getMetaContent(\"turbo-prefetch-cache-time\")) || cacheTtl\n  }\n\n  #isPrefetchable(link) {\n    const href = link.getAttribute(\"href\");\n\n    if (!href) return false\n\n    if (unfetchableLink(link)) return false\n    if (linkToTheSamePage(link)) return false\n    if (linkOptsOut(link)) return false\n    if (nonSafeLink(link)) return false\n    if (eventPrevented(link)) return false\n\n    return true\n  }\n}\n\nconst unfetchableLink = (link) => {\n  return link.origin !== document.location.origin || ![\"http:\", \"https:\"].includes(link.protocol) || link.hasAttribute(\"target\")\n};\n\nconst linkToTheSamePage = (link) => {\n  return (link.pathname + link.search === document.location.pathname + document.location.search) || link.href.startsWith(\"#\")\n};\n\nconst linkOptsOut = (link) => {\n  if (link.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n  if (link.getAttribute(\"data-turbo\") === \"false\") return true\n\n  const turboPrefetchParent = findClosestRecursively(link, \"[data-turbo-prefetch]\");\n  if (turboPrefetchParent && turboPrefetchParent.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n\n  return false\n};\n\nconst nonSafeLink = (link) => {\n  const turboMethod = link.getAttribute(\"data-turbo-method\");\n  if (turboMethod && turboMethod.toLowerCase() !== \"get\") return true\n\n  if (isUJS(link)) return true\n  if (link.hasAttribute(\"data-turbo-confirm\")) return true\n  if (link.hasAttribute(\"data-turbo-stream\")) return true\n\n  return false\n};\n\nconst isUJS = (link) => {\n  return link.hasAttribute(\"data-remote\") || link.hasAttribute(\"data-behavior\") || link.hasAttribute(\"data-confirm\") || link.hasAttribute(\"data-method\")\n};\n\nconst eventPrevented = (link) => {\n  const event = dispatch(\"turbo:before-prefetch\", { target: link, cancelable: true });\n  return event.defaultPrevented\n};\n\nclass Navigator {\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  proposeVisit(location, options = {}) {\n    if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n      this.delegate.visitProposedToLocation(location, options);\n    }\n  }\n\n  startVisit(locatable, restorationIdentifier, options = {}) {\n    this.stop();\n    this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, {\n      referrer: this.location,\n      ...options\n    });\n    this.currentVisit.start();\n  }\n\n  submitForm(form, submitter) {\n    this.stop();\n    this.formSubmission = new FormSubmission(this, form, submitter, true);\n\n    this.formSubmission.start();\n  }\n\n  stop() {\n    if (this.formSubmission) {\n      this.formSubmission.stop();\n      delete this.formSubmission;\n    }\n\n    if (this.currentVisit) {\n      this.currentVisit.cancel();\n      delete this.currentVisit;\n    }\n  }\n\n  get adapter() {\n    return this.delegate.adapter\n  }\n\n  get view() {\n    return this.delegate.view\n  }\n\n  get rootLocation() {\n    return this.view.snapshot.rootLocation\n  }\n\n  get history() {\n    return this.delegate.history\n  }\n\n  // Form submission delegate\n\n  formSubmissionStarted(formSubmission) {\n    // Not all adapters implement formSubmissionStarted\n    if (typeof this.adapter.formSubmissionStarted === \"function\") {\n      this.adapter.formSubmissionStarted(formSubmission);\n    }\n  }\n\n  async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n    if (formSubmission == this.formSubmission) {\n      const responseHTML = await fetchResponse.responseHTML;\n      if (responseHTML) {\n        const shouldCacheSnapshot = formSubmission.isSafe;\n        if (!shouldCacheSnapshot) {\n          this.view.clearSnapshotCache();\n        }\n\n        const { statusCode, redirected } = fetchResponse;\n        const action = this.#getActionForFormSubmission(formSubmission, fetchResponse);\n        const visitOptions = {\n          action,\n          shouldCacheSnapshot,\n          response: { statusCode, responseHTML, redirected }\n        };\n        this.proposeVisit(fetchResponse.location, visitOptions);\n      }\n    }\n  }\n\n  async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n    const responseHTML = await fetchResponse.responseHTML;\n\n    if (responseHTML) {\n      const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n      if (fetchResponse.serverError) {\n        await this.view.renderError(snapshot, this.currentVisit);\n      } else {\n        await this.view.renderPage(snapshot, false, true, this.currentVisit);\n      }\n      if(!snapshot.shouldPreserveScrollPosition) {\n        this.view.scrollToTop();\n      }\n      this.view.clearSnapshotCache();\n    }\n  }\n\n  formSubmissionErrored(formSubmission, error) {\n    console.error(error);\n  }\n\n  formSubmissionFinished(formSubmission) {\n    // Not all adapters implement formSubmissionFinished\n    if (typeof this.adapter.formSubmissionFinished === \"function\") {\n      this.adapter.formSubmissionFinished(formSubmission);\n    }\n  }\n\n  // Link prefetching\n\n  linkPrefetchingIsEnabledForLocation(location) {\n    // Not all adapters implement linkPrefetchingIsEnabledForLocation\n    if (typeof this.adapter.linkPrefetchingIsEnabledForLocation === \"function\") {\n      return this.adapter.linkPrefetchingIsEnabledForLocation(location)\n    }\n\n    return true\n  }\n\n  // Visit delegate\n\n  visitStarted(visit) {\n    this.delegate.visitStarted(visit);\n  }\n\n  visitCompleted(visit) {\n    this.delegate.visitCompleted(visit);\n    delete this.currentVisit;\n  }\n\n  locationWithActionIsSamePage(location, action) {\n    const anchor = getAnchor(location);\n    const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n    const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n\n    return (\n      action !== \"replace\" &&\n      getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n      (isRestorationToTop || (anchor != null && anchor !== currentAnchor))\n    )\n  }\n\n  visitScrolledToSamePageLocation(oldURL, newURL) {\n    this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n  }\n\n  // Visits\n\n  get location() {\n    return this.history.location\n  }\n\n  get restorationIdentifier() {\n    return this.history.restorationIdentifier\n  }\n\n  #getActionForFormSubmission(formSubmission, fetchResponse) {\n    const { submitter, formElement } = formSubmission;\n    return getVisitAction(submitter, formElement) || this.#getDefaultAction(fetchResponse)\n  }\n\n  #getDefaultAction(fetchResponse) {\n    const sameLocationRedirect = fetchResponse.redirected && fetchResponse.location.href === this.location?.href;\n    return sameLocationRedirect ? \"replace\" : \"advance\"\n  }\n}\n\nconst PageStage = {\n  initial: 0,\n  loading: 1,\n  interactive: 2,\n  complete: 3\n};\n\nclass PageObserver {\n  stage = PageStage.initial\n  started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      if (this.stage == PageStage.initial) {\n        this.stage = PageStage.loading;\n      }\n      document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n      addEventListener(\"pagehide\", this.pageWillUnload, false);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n      removeEventListener(\"pagehide\", this.pageWillUnload, false);\n      this.started = false;\n    }\n  }\n\n  interpretReadyState = () => {\n    const { readyState } = this;\n    if (readyState == \"interactive\") {\n      this.pageIsInteractive();\n    } else if (readyState == \"complete\") {\n      this.pageIsComplete();\n    }\n  }\n\n  pageIsInteractive() {\n    if (this.stage == PageStage.loading) {\n      this.stage = PageStage.interactive;\n      this.delegate.pageBecameInteractive();\n    }\n  }\n\n  pageIsComplete() {\n    this.pageIsInteractive();\n    if (this.stage == PageStage.interactive) {\n      this.stage = PageStage.complete;\n      this.delegate.pageLoaded();\n    }\n  }\n\n  pageWillUnload = () => {\n    this.delegate.pageWillUnload();\n  }\n\n  get readyState() {\n    return document.readyState\n  }\n}\n\nclass ScrollObserver {\n  started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      addEventListener(\"scroll\", this.onScroll, false);\n      this.onScroll();\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      removeEventListener(\"scroll\", this.onScroll, false);\n      this.started = false;\n    }\n  }\n\n  onScroll = () => {\n    this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n  }\n\n  // Private\n\n  updatePosition(position) {\n    this.delegate.scrollPositionChanged(position);\n  }\n}\n\nclass StreamMessageRenderer {\n  render({ fragment }) {\n    Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => {\n      withAutofocusFromFragment(fragment, () => {\n        withPreservedFocus(() => {\n          document.documentElement.appendChild(fragment);\n        });\n      });\n    });\n  }\n\n  // Bardo delegate\n\n  enteringBardo(currentPermanentElement, newPermanentElement) {\n    newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n  }\n\n  leavingBardo() {}\n}\n\nfunction getPermanentElementMapForFragment(fragment) {\n  const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n  const permanentElementMap = {};\n  for (const permanentElementInDocument of permanentElementsInDocument) {\n    const { id } = permanentElementInDocument;\n\n    for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n      const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n\n      if (elementInStream) {\n        permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n      }\n    }\n  }\n\n  return permanentElementMap\n}\n\nasync function withAutofocusFromFragment(fragment, callback) {\n  const generatedID = `turbo-stream-autofocus-${uuid()}`;\n  const turboStreams = fragment.querySelectorAll(\"turbo-stream\");\n  const elementWithAutofocus = firstAutofocusableElementInStreams(turboStreams);\n  let willAutofocusId = null;\n\n  if (elementWithAutofocus) {\n    if (elementWithAutofocus.id) {\n      willAutofocusId = elementWithAutofocus.id;\n    } else {\n      willAutofocusId = generatedID;\n    }\n\n    elementWithAutofocus.id = willAutofocusId;\n  }\n\n  callback();\n  await nextRepaint();\n\n  const hasNoActiveElement = document.activeElement == null || document.activeElement == document.body;\n\n  if (hasNoActiveElement && willAutofocusId) {\n    const elementToAutofocus = document.getElementById(willAutofocusId);\n\n    if (elementIsFocusable(elementToAutofocus)) {\n      elementToAutofocus.focus();\n    }\n    if (elementToAutofocus && elementToAutofocus.id == generatedID) {\n      elementToAutofocus.removeAttribute(\"id\");\n    }\n  }\n}\n\nasync function withPreservedFocus(callback) {\n  const [activeElementBeforeRender, activeElementAfterRender] = await around(callback, () => document.activeElement);\n\n  const restoreFocusTo = activeElementBeforeRender && activeElementBeforeRender.id;\n\n  if (restoreFocusTo) {\n    const elementToFocus = document.getElementById(restoreFocusTo);\n\n    if (elementIsFocusable(elementToFocus) && elementToFocus != activeElementAfterRender) {\n      elementToFocus.focus();\n    }\n  }\n}\n\nfunction firstAutofocusableElementInStreams(nodeListOfStreamElements) {\n  for (const streamElement of nodeListOfStreamElements) {\n    const elementWithAutofocus = queryAutofocusableElement(streamElement.templateElement.content);\n\n    if (elementWithAutofocus) return elementWithAutofocus\n  }\n\n  return null\n}\n\nclass StreamObserver {\n  sources = new Set()\n  #started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.#started) {\n      this.#started = true;\n      addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n    }\n  }\n\n  stop() {\n    if (this.#started) {\n      this.#started = false;\n      removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n    }\n  }\n\n  connectStreamSource(source) {\n    if (!this.streamSourceIsConnected(source)) {\n      this.sources.add(source);\n      source.addEventListener(\"message\", this.receiveMessageEvent, false);\n    }\n  }\n\n  disconnectStreamSource(source) {\n    if (this.streamSourceIsConnected(source)) {\n      this.sources.delete(source);\n      source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n    }\n  }\n\n  streamSourceIsConnected(source) {\n    return this.sources.has(source)\n  }\n\n  inspectFetchResponse = (event) => {\n    const response = fetchResponseFromEvent(event);\n    if (response && fetchResponseIsStream(response)) {\n      event.preventDefault();\n      this.receiveMessageResponse(response);\n    }\n  }\n\n  receiveMessageEvent = (event) => {\n    if (this.#started && typeof event.data == \"string\") {\n      this.receiveMessageHTML(event.data);\n    }\n  }\n\n  async receiveMessageResponse(response) {\n    const html = await response.responseHTML;\n    if (html) {\n      this.receiveMessageHTML(html);\n    }\n  }\n\n  receiveMessageHTML(html) {\n    this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n  }\n}\n\nfunction fetchResponseFromEvent(event) {\n  const fetchResponse = event.detail?.fetchResponse;\n  if (fetchResponse instanceof FetchResponse) {\n    return fetchResponse\n  }\n}\n\nfunction fetchResponseIsStream(response) {\n  const contentType = response.contentType ?? \"\";\n  return contentType.startsWith(StreamMessage.contentType)\n}\n\nclass ErrorRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    const { documentElement, body } = document;\n\n    documentElement.replaceChild(newElement, body);\n  }\n\n  async render() {\n    this.replaceHeadAndBody();\n    this.activateScriptElements();\n  }\n\n  replaceHeadAndBody() {\n    const { documentElement, head } = document;\n    documentElement.replaceChild(this.newHead, head);\n    this.renderElement(this.currentElement, this.newElement);\n  }\n\n  activateScriptElements() {\n    for (const replaceableElement of this.scriptElements) {\n      const parentNode = replaceableElement.parentNode;\n      if (parentNode) {\n        const element = activateScriptElement(replaceableElement);\n        parentNode.replaceChild(element, replaceableElement);\n      }\n    }\n  }\n\n  get newHead() {\n    return this.newSnapshot.headSnapshot.element\n  }\n\n  get scriptElements() {\n    return document.documentElement.querySelectorAll(\"script\")\n  }\n}\n\nclass PageRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    if (document.body && newElement instanceof HTMLBodyElement) {\n      document.body.replaceWith(newElement);\n    } else {\n      document.documentElement.appendChild(newElement);\n    }\n  }\n\n  get shouldRender() {\n    return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical\n  }\n\n  get reloadReason() {\n    if (!this.newSnapshot.isVisitable) {\n      return {\n        reason: \"turbo_visit_control_is_reload\"\n      }\n    }\n\n    if (!this.trackedElementsAreIdentical) {\n      return {\n        reason: \"tracked_element_mismatch\"\n      }\n    }\n  }\n\n  async prepareToRender() {\n    this.#setLanguage();\n    await this.mergeHead();\n  }\n\n  async render() {\n    if (this.willRender) {\n      await this.replaceBody();\n    }\n  }\n\n  finishRendering() {\n    super.finishRendering();\n    if (!this.isPreview) {\n      this.focusFirstAutofocusableElement();\n    }\n  }\n\n  get currentHeadSnapshot() {\n    return this.currentSnapshot.headSnapshot\n  }\n\n  get newHeadSnapshot() {\n    return this.newSnapshot.headSnapshot\n  }\n\n  get newElement() {\n    return this.newSnapshot.element\n  }\n\n  #setLanguage() {\n    const { documentElement } = this.currentSnapshot;\n    const { lang } = this.newSnapshot;\n\n    if (lang) {\n      documentElement.setAttribute(\"lang\", lang);\n    } else {\n      documentElement.removeAttribute(\"lang\");\n    }\n  }\n\n  async mergeHead() {\n    const mergedHeadElements = this.mergeProvisionalElements();\n    const newStylesheetElements = this.copyNewHeadStylesheetElements();\n    this.copyNewHeadScriptElements();\n\n    await mergedHeadElements;\n    await newStylesheetElements;\n\n    if (this.willRender) {\n      this.removeUnusedDynamicStylesheetElements();\n    }\n  }\n\n  async replaceBody() {\n    await this.preservingPermanentElements(async () => {\n      this.activateNewBody();\n      await this.assignNewBody();\n    });\n  }\n\n  get trackedElementsAreIdentical() {\n    return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature\n  }\n\n  async copyNewHeadStylesheetElements() {\n    const loadingElements = [];\n\n    for (const element of this.newHeadStylesheetElements) {\n      loadingElements.push(waitForLoad(element));\n\n      document.head.appendChild(element);\n    }\n\n    await Promise.all(loadingElements);\n  }\n\n  copyNewHeadScriptElements() {\n    for (const element of this.newHeadScriptElements) {\n      document.head.appendChild(activateScriptElement(element));\n    }\n  }\n\n  removeUnusedDynamicStylesheetElements() {\n    for (const element of this.unusedDynamicStylesheetElements) {\n      document.head.removeChild(element);\n    }\n  }\n\n  async mergeProvisionalElements() {\n    const newHeadElements = [...this.newHeadProvisionalElements];\n\n    for (const element of this.currentHeadProvisionalElements) {\n      if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n        document.head.removeChild(element);\n      }\n    }\n\n    for (const element of newHeadElements) {\n      document.head.appendChild(element);\n    }\n  }\n\n  isCurrentElementInElementList(element, elementList) {\n    for (const [index, newElement] of elementList.entries()) {\n      // if title element...\n      if (element.tagName == \"TITLE\") {\n        if (newElement.tagName != \"TITLE\") {\n          continue\n        }\n        if (element.innerHTML == newElement.innerHTML) {\n          elementList.splice(index, 1);\n          return true\n        }\n      }\n\n      // if any other element...\n      if (newElement.isEqualNode(element)) {\n        elementList.splice(index, 1);\n        return true\n      }\n    }\n\n    return false\n  }\n\n  removeCurrentHeadProvisionalElements() {\n    for (const element of this.currentHeadProvisionalElements) {\n      document.head.removeChild(element);\n    }\n  }\n\n  copyNewHeadProvisionalElements() {\n    for (const element of this.newHeadProvisionalElements) {\n      document.head.appendChild(element);\n    }\n  }\n\n  activateNewBody() {\n    document.adoptNode(this.newElement);\n    this.activateNewBodyScriptElements();\n  }\n\n  activateNewBodyScriptElements() {\n    for (const inertScriptElement of this.newBodyScriptElements) {\n      const activatedScriptElement = activateScriptElement(inertScriptElement);\n      inertScriptElement.replaceWith(activatedScriptElement);\n    }\n  }\n\n  async assignNewBody() {\n    await this.renderElement(this.currentElement, this.newElement);\n  }\n\n  get unusedDynamicStylesheetElements() {\n    return this.oldHeadStylesheetElements.filter((element) => {\n      return element.getAttribute(\"data-turbo-track\") === \"dynamic\"\n    })\n  }\n\n  get oldHeadStylesheetElements() {\n    return this.currentHeadSnapshot.getStylesheetElementsNotInSnapshot(this.newHeadSnapshot)\n  }\n\n  get newHeadStylesheetElements() {\n    return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)\n  }\n\n  get newHeadScriptElements() {\n    return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)\n  }\n\n  get currentHeadProvisionalElements() {\n    return this.currentHeadSnapshot.provisionalElements\n  }\n\n  get newHeadProvisionalElements() {\n    return this.newHeadSnapshot.provisionalElements\n  }\n\n  get newBodyScriptElements() {\n    return this.newElement.querySelectorAll(\"script\")\n  }\n}\n\nclass MorphingPageRenderer extends PageRenderer {\n  static renderElement(currentElement, newElement) {\n    morphElements(currentElement, newElement, {\n      callbacks: {\n        beforeNodeMorphed: element => !canRefreshFrame(element)\n      }\n    });\n\n    for (const frame of currentElement.querySelectorAll(\"turbo-frame\")) {\n      if (canRefreshFrame(frame)) frame.reload();\n    }\n\n    dispatch(\"turbo:morph\", { detail: { currentElement, newElement } });\n  }\n\n  async preservingPermanentElements(callback) {\n    return await callback()\n  }\n\n  get renderMethod() {\n    return \"morph\"\n  }\n\n  get shouldAutofocus() {\n    return false\n  }\n}\n\nfunction canRefreshFrame(frame) {\n  return frame instanceof FrameElement &&\n    frame.src &&\n    frame.refresh === \"morph\" &&\n    !frame.closest(\"[data-turbo-permanent]\")\n}\n\nclass SnapshotCache {\n  keys = []\n  snapshots = {}\n\n  constructor(size) {\n    this.size = size;\n  }\n\n  has(location) {\n    return toCacheKey(location) in this.snapshots\n  }\n\n  get(location) {\n    if (this.has(location)) {\n      const snapshot = this.read(location);\n      this.touch(location);\n      return snapshot\n    }\n  }\n\n  put(location, snapshot) {\n    this.write(location, snapshot);\n    this.touch(location);\n    return snapshot\n  }\n\n  clear() {\n    this.snapshots = {};\n  }\n\n  // Private\n\n  read(location) {\n    return this.snapshots[toCacheKey(location)]\n  }\n\n  write(location, snapshot) {\n    this.snapshots[toCacheKey(location)] = snapshot;\n  }\n\n  touch(location) {\n    const key = toCacheKey(location);\n    const index = this.keys.indexOf(key);\n    if (index > -1) this.keys.splice(index, 1);\n    this.keys.unshift(key);\n    this.trim();\n  }\n\n  trim() {\n    for (const key of this.keys.splice(this.size)) {\n      delete this.snapshots[key];\n    }\n  }\n}\n\nclass PageView extends View {\n  snapshotCache = new SnapshotCache(10)\n  lastRenderedLocation = new URL(location.href)\n  forceReloaded = false\n\n  shouldTransitionTo(newSnapshot) {\n    return this.snapshot.prefersViewTransitions && newSnapshot.prefersViewTransitions\n  }\n\n  renderPage(snapshot, isPreview = false, willRender = true, visit) {\n    const shouldMorphPage = this.isPageRefresh(visit) && this.snapshot.shouldMorphPage;\n    const rendererClass = shouldMorphPage ? MorphingPageRenderer : PageRenderer;\n\n    const renderer = new rendererClass(this.snapshot, snapshot, isPreview, willRender);\n\n    if (!renderer.shouldRender) {\n      this.forceReloaded = true;\n    } else {\n      visit?.changeHistory();\n    }\n\n    return this.render(renderer)\n  }\n\n  renderError(snapshot, visit) {\n    visit?.changeHistory();\n    const renderer = new ErrorRenderer(this.snapshot, snapshot, false);\n    return this.render(renderer)\n  }\n\n  clearSnapshotCache() {\n    this.snapshotCache.clear();\n  }\n\n  async cacheSnapshot(snapshot = this.snapshot) {\n    if (snapshot.isCacheable) {\n      this.delegate.viewWillCacheSnapshot();\n      const { lastRenderedLocation: location } = this;\n      await nextEventLoopTick();\n      const cachedSnapshot = snapshot.clone();\n      this.snapshotCache.put(location, cachedSnapshot);\n      return cachedSnapshot\n    }\n  }\n\n  getCachedSnapshotForLocation(location) {\n    return this.snapshotCache.get(location)\n  }\n\n  isPageRefresh(visit) {\n    return !visit || (this.lastRenderedLocation.pathname === visit.location.pathname && visit.action === \"replace\")\n  }\n\n  shouldPreserveScrollPosition(visit) {\n    return this.isPageRefresh(visit) && this.snapshot.shouldPreserveScrollPosition\n  }\n\n  get snapshot() {\n    return PageSnapshot.fromElement(this.element)\n  }\n}\n\nclass Preloader {\n  selector = \"a[data-turbo-preload]\"\n\n  constructor(delegate, snapshotCache) {\n    this.delegate = delegate;\n    this.snapshotCache = snapshotCache;\n  }\n\n  start() {\n    if (document.readyState === \"loading\") {\n      document.addEventListener(\"DOMContentLoaded\", this.#preloadAll);\n    } else {\n      this.preloadOnLoadLinksForView(document.body);\n    }\n  }\n\n  stop() {\n    document.removeEventListener(\"DOMContentLoaded\", this.#preloadAll);\n  }\n\n  preloadOnLoadLinksForView(element) {\n    for (const link of element.querySelectorAll(this.selector)) {\n      if (this.delegate.shouldPreloadLink(link)) {\n        this.preloadURL(link);\n      }\n    }\n  }\n\n  async preloadURL(link) {\n    const location = new URL(link.href);\n\n    if (this.snapshotCache.has(location)) {\n      return\n    }\n\n    const fetchRequest = new FetchRequest(this, FetchMethod.get, location, new URLSearchParams(), link);\n    await fetchRequest.perform();\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(fetchRequest) {\n    fetchRequest.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n  }\n\n  async requestSucceededWithResponse(fetchRequest, fetchResponse) {\n    try {\n      const responseHTML = await fetchResponse.responseHTML;\n      const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n\n      this.snapshotCache.put(fetchRequest.url, snapshot);\n    } catch (_) {\n      // If we cannot preload that is ok!\n    }\n  }\n\n  requestStarted(fetchRequest) {}\n\n  requestErrored(fetchRequest) {}\n\n  requestFinished(fetchRequest) {}\n\n  requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n  requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n  #preloadAll = () => {\n    this.preloadOnLoadLinksForView(document.body);\n  }\n}\n\nclass Cache {\n  constructor(session) {\n    this.session = session;\n  }\n\n  clear() {\n    this.session.clearCache();\n  }\n\n  resetCacheControl() {\n    this.#setCacheControl(\"\");\n  }\n\n  exemptPageFromCache() {\n    this.#setCacheControl(\"no-cache\");\n  }\n\n  exemptPageFromPreview() {\n    this.#setCacheControl(\"no-preview\");\n  }\n\n  #setCacheControl(value) {\n    setMetaContent(\"turbo-cache-control\", value);\n  }\n}\n\nclass Session {\n  navigator = new Navigator(this)\n  history = new History(this)\n  view = new PageView(this, document.documentElement)\n  adapter = new BrowserAdapter(this)\n\n  pageObserver = new PageObserver(this)\n  cacheObserver = new CacheObserver()\n  linkPrefetchObserver = new LinkPrefetchObserver(this, document)\n  linkClickObserver = new LinkClickObserver(this, window)\n  formSubmitObserver = new FormSubmitObserver(this, document)\n  scrollObserver = new ScrollObserver(this)\n  streamObserver = new StreamObserver(this)\n  formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement)\n  frameRedirector = new FrameRedirector(this, document.documentElement)\n  streamMessageRenderer = new StreamMessageRenderer()\n  cache = new Cache(this)\n\n  enabled = true\n  started = false\n  #pageRefreshDebouncePeriod = 150\n\n  constructor(recentRequests) {\n    this.recentRequests = recentRequests;\n    this.preloader = new Preloader(this, this.view.snapshotCache);\n    this.debouncedRefresh = this.refresh;\n    this.pageRefreshDebouncePeriod = this.pageRefreshDebouncePeriod;\n  }\n\n  start() {\n    if (!this.started) {\n      this.pageObserver.start();\n      this.cacheObserver.start();\n      this.linkPrefetchObserver.start();\n      this.formLinkClickObserver.start();\n      this.linkClickObserver.start();\n      this.formSubmitObserver.start();\n      this.scrollObserver.start();\n      this.streamObserver.start();\n      this.frameRedirector.start();\n      this.history.start();\n      this.preloader.start();\n      this.started = true;\n      this.enabled = true;\n    }\n  }\n\n  disable() {\n    this.enabled = false;\n  }\n\n  stop() {\n    if (this.started) {\n      this.pageObserver.stop();\n      this.cacheObserver.stop();\n      this.linkPrefetchObserver.stop();\n      this.formLinkClickObserver.stop();\n      this.linkClickObserver.stop();\n      this.formSubmitObserver.stop();\n      this.scrollObserver.stop();\n      this.streamObserver.stop();\n      this.frameRedirector.stop();\n      this.history.stop();\n      this.preloader.stop();\n      this.started = false;\n    }\n  }\n\n  registerAdapter(adapter) {\n    this.adapter = adapter;\n  }\n\n  visit(location, options = {}) {\n    const frameElement = options.frame ? document.getElementById(options.frame) : null;\n\n    if (frameElement instanceof FrameElement) {\n      const action = options.action || getVisitAction(frameElement);\n\n      frameElement.delegate.proposeVisitIfNavigatedWithAction(frameElement, action);\n      frameElement.src = location.toString();\n    } else {\n      this.navigator.proposeVisit(expandURL(location), options);\n    }\n  }\n\n  refresh(url, requestId) {\n    const isRecentRequest = requestId && this.recentRequests.has(requestId);\n    const isCurrentUrl = url === document.baseURI;\n    if (!isRecentRequest && !this.navigator.currentVisit && isCurrentUrl) {\n      this.visit(url, { action: \"replace\", shouldCacheSnapshot: false });\n    }\n  }\n\n  connectStreamSource(source) {\n    this.streamObserver.connectStreamSource(source);\n  }\n\n  disconnectStreamSource(source) {\n    this.streamObserver.disconnectStreamSource(source);\n  }\n\n  renderStreamMessage(message) {\n    this.streamMessageRenderer.render(StreamMessage.wrap(message));\n  }\n\n  clearCache() {\n    this.view.clearSnapshotCache();\n  }\n\n  setProgressBarDelay(delay) {\n    console.warn(\n      \"Please replace `session.setProgressBarDelay(delay)` with `session.progressBarDelay = delay`. The function is deprecated and will be removed in a future version of Turbo.`\"\n    );\n\n    this.progressBarDelay = delay;\n  }\n\n  set progressBarDelay(delay) {\n    config.drive.progressBarDelay = delay;\n  }\n\n  get progressBarDelay() {\n    return config.drive.progressBarDelay\n  }\n\n  set drive(value) {\n    config.drive.enabled = value;\n  }\n\n  get drive() {\n    return config.drive.enabled\n  }\n\n  set formMode(value) {\n    config.forms.mode = value;\n  }\n\n  get formMode() {\n    return config.forms.mode\n  }\n\n  get location() {\n    return this.history.location\n  }\n\n  get restorationIdentifier() {\n    return this.history.restorationIdentifier\n  }\n\n  get pageRefreshDebouncePeriod() {\n    return this.#pageRefreshDebouncePeriod\n  }\n\n  set pageRefreshDebouncePeriod(value) {\n    this.refresh = debounce(this.debouncedRefresh.bind(this), value);\n    this.#pageRefreshDebouncePeriod = value;\n  }\n\n  // Preloader delegate\n\n  shouldPreloadLink(element) {\n    const isUnsafe = element.hasAttribute(\"data-turbo-method\");\n    const isStream = element.hasAttribute(\"data-turbo-stream\");\n    const frameTarget = element.getAttribute(\"data-turbo-frame\");\n    const frame = frameTarget == \"_top\" ?\n      null :\n      document.getElementById(frameTarget) || findClosestRecursively(element, \"turbo-frame:not([disabled])\");\n\n    if (isUnsafe || isStream || frame instanceof FrameElement) {\n      return false\n    } else {\n      const location = new URL(element.href);\n\n      return this.elementIsNavigatable(element) && locationIsVisitable(location, this.snapshot.rootLocation)\n    }\n  }\n\n  // History delegate\n\n  historyPoppedToLocationWithRestorationIdentifierAndDirection(location, restorationIdentifier, direction) {\n    if (this.enabled) {\n      this.navigator.startVisit(location, restorationIdentifier, {\n        action: \"restore\",\n        historyChanged: true,\n        direction\n      });\n    } else {\n      this.adapter.pageInvalidated({\n        reason: \"turbo_disabled\"\n      });\n    }\n  }\n\n  // Scroll observer delegate\n\n  scrollPositionChanged(position) {\n    this.history.updateRestorationData({ scrollPosition: position });\n  }\n\n  // Form click observer delegate\n\n  willSubmitFormLinkToLocation(link, location) {\n    return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation)\n  }\n\n  submittedFormLinkToLocation() {}\n\n  // Link hover observer delegate\n\n  canPrefetchRequestToLocation(link, location) {\n    return (\n      this.elementIsNavigatable(link) &&\n      locationIsVisitable(location, this.snapshot.rootLocation) &&\n      this.navigator.linkPrefetchingIsEnabledForLocation(location)\n    )\n  }\n\n  // Link click observer delegate\n\n  willFollowLinkToLocation(link, location, event) {\n    return (\n      this.elementIsNavigatable(link) &&\n      locationIsVisitable(location, this.snapshot.rootLocation) &&\n      this.applicationAllowsFollowingLinkToLocation(link, location, event)\n    )\n  }\n\n  followedLinkToLocation(link, location) {\n    const action = this.getActionForLink(link);\n    const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n\n    this.visit(location.href, { action, acceptsStreamResponse });\n  }\n\n  // Navigator delegate\n\n  allowsVisitingLocationWithAction(location, action) {\n    return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location)\n  }\n\n  visitProposedToLocation(location, options) {\n    extendURLWithDeprecatedProperties(location);\n    this.adapter.visitProposedToLocation(location, options);\n  }\n\n  // Visit delegate\n\n  visitStarted(visit) {\n    if (!visit.acceptsStreamResponse) {\n      markAsBusy(document.documentElement);\n      this.view.markVisitDirection(visit.direction);\n    }\n    extendURLWithDeprecatedProperties(visit.location);\n    if (!visit.silent) {\n      this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n    }\n  }\n\n  visitCompleted(visit) {\n    this.view.unmarkVisitDirection();\n    clearBusyState(document.documentElement);\n    this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n  }\n\n  locationWithActionIsSamePage(location, action) {\n    return this.navigator.locationWithActionIsSamePage(location, action)\n  }\n\n  visitScrolledToSamePageLocation(oldURL, newURL) {\n    this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(form, submitter) {\n    const action = getAction$1(form, submitter);\n\n    return (\n      this.submissionIsNavigatable(form, submitter) &&\n      locationIsVisitable(expandURL(action), this.snapshot.rootLocation)\n    )\n  }\n\n  formSubmitted(form, submitter) {\n    this.navigator.submitForm(form, submitter);\n  }\n\n  // Page observer delegate\n\n  pageBecameInteractive() {\n    this.view.lastRenderedLocation = this.location;\n    this.notifyApplicationAfterPageLoad();\n  }\n\n  pageLoaded() {\n    this.history.assumeControlOfScrollRestoration();\n  }\n\n  pageWillUnload() {\n    this.history.relinquishControlOfScrollRestoration();\n  }\n\n  // Stream observer delegate\n\n  receivedMessageFromStream(message) {\n    this.renderStreamMessage(message);\n  }\n\n  // Page view delegate\n\n  viewWillCacheSnapshot() {\n    if (!this.navigator.currentVisit?.silent) {\n      this.notifyApplicationBeforeCachingSnapshot();\n    }\n  }\n\n  allowsImmediateRender({ element }, options) {\n    const event = this.notifyApplicationBeforeRender(element, options);\n    const {\n      defaultPrevented,\n      detail: { render }\n    } = event;\n\n    if (this.view.renderer && render) {\n      this.view.renderer.renderElement = render;\n    }\n\n    return !defaultPrevented\n  }\n\n  viewRenderedSnapshot(_snapshot, _isPreview, renderMethod) {\n    this.view.lastRenderedLocation = this.history.location;\n    this.notifyApplicationAfterRender(renderMethod);\n  }\n\n  preloadOnLoadLinksForView(element) {\n    this.preloader.preloadOnLoadLinksForView(element);\n  }\n\n  viewInvalidated(reason) {\n    this.adapter.pageInvalidated(reason);\n  }\n\n  // Frame element\n\n  frameLoaded(frame) {\n    this.notifyApplicationAfterFrameLoad(frame);\n  }\n\n  frameRendered(fetchResponse, frame) {\n    this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n  }\n\n  // Application events\n\n  applicationAllowsFollowingLinkToLocation(link, location, ev) {\n    const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n    return !event.defaultPrevented\n  }\n\n  applicationAllowsVisitingLocation(location) {\n    const event = this.notifyApplicationBeforeVisitingLocation(location);\n    return !event.defaultPrevented\n  }\n\n  notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n    return dispatch(\"turbo:click\", {\n      target: link,\n      detail: { url: location.href, originalEvent: event },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationBeforeVisitingLocation(location) {\n    return dispatch(\"turbo:before-visit\", {\n      detail: { url: location.href },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationAfterVisitingLocation(location, action) {\n    return dispatch(\"turbo:visit\", { detail: { url: location.href, action } })\n  }\n\n  notifyApplicationBeforeCachingSnapshot() {\n    return dispatch(\"turbo:before-cache\")\n  }\n\n  notifyApplicationBeforeRender(newBody, options) {\n    return dispatch(\"turbo:before-render\", {\n      detail: { newBody, ...options },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationAfterRender(renderMethod) {\n    return dispatch(\"turbo:render\", { detail: { renderMethod } })\n  }\n\n  notifyApplicationAfterPageLoad(timing = {}) {\n    return dispatch(\"turbo:load\", {\n      detail: { url: this.location.href, timing }\n    })\n  }\n\n  notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n    dispatchEvent(\n      new HashChangeEvent(\"hashchange\", {\n        oldURL: oldURL.toString(),\n        newURL: newURL.toString()\n      })\n    );\n  }\n\n  notifyApplicationAfterFrameLoad(frame) {\n    return dispatch(\"turbo:frame-load\", { target: frame })\n  }\n\n  notifyApplicationAfterFrameRender(fetchResponse, frame) {\n    return dispatch(\"turbo:frame-render\", {\n      detail: { fetchResponse },\n      target: frame,\n      cancelable: true\n    })\n  }\n\n  // Helpers\n\n  submissionIsNavigatable(form, submitter) {\n    if (config.forms.mode == \"off\") {\n      return false\n    } else {\n      const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n\n      if (config.forms.mode == \"optin\") {\n        return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null\n      } else {\n        return submitterIsNavigatable && this.elementIsNavigatable(form)\n      }\n    }\n  }\n\n  elementIsNavigatable(element) {\n    const container = findClosestRecursively(element, \"[data-turbo]\");\n    const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n\n    // Check if Drive is enabled on the session or we're within a Frame.\n    if (config.drive.enabled || withinFrame) {\n      // Element is navigatable by default, unless `data-turbo=\"false\"`.\n      if (container) {\n        return container.getAttribute(\"data-turbo\") != \"false\"\n      } else {\n        return true\n      }\n    } else {\n      // Element isn't navigatable by default, unless `data-turbo=\"true\"`.\n      if (container) {\n        return container.getAttribute(\"data-turbo\") == \"true\"\n      } else {\n        return false\n      }\n    }\n  }\n\n  // Private\n\n  getActionForLink(link) {\n    return getVisitAction(link) || \"advance\"\n  }\n\n  get snapshot() {\n    return this.view.snapshot\n  }\n}\n\n// Older versions of the Turbo Native adapters referenced the\n// `Location#absoluteURL` property in their implementations of\n// the `Adapter#visitProposedToLocation()` and `#visitStarted()`\n// methods. The Location class has since been removed in favor\n// of the DOM URL API, and accordingly all Adapter methods now\n// receive URL objects.\n//\n// We alias #absoluteURL to #toString() here to avoid crashing\n// older adapters which do not expect URL objects. We should\n// consider removing this support at some point in the future.\n\nfunction extendURLWithDeprecatedProperties(url) {\n  Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\n\nconst deprecatedLocationPropertyDescriptors = {\n  absoluteURL: {\n    get() {\n      return this.toString()\n    }\n  }\n};\n\nconst session = new Session(recentRequests);\nconst { cache, navigator: navigator$1 } = session;\n\n/**\n * Starts the main session.\n * This initialises any necessary observers such as those to monitor\n * link interactions.\n */\nfunction start() {\n  session.start();\n}\n\n/**\n * Registers an adapter for the main session.\n *\n * @param adapter Adapter to register\n */\nfunction registerAdapter(adapter) {\n  session.registerAdapter(adapter);\n}\n\n/**\n * Performs an application visit to the given location.\n *\n * @param location Location to visit (a URL or path)\n * @param options Options to apply\n * @param options.action Type of history navigation to apply (\"restore\",\n * \"replace\" or \"advance\")\n * @param options.historyChanged Specifies whether the browser history has\n * already been changed for this visit or not\n * @param options.referrer Specifies the referrer of this visit such that\n * navigations to the same page will not result in a new history entry.\n * @param options.snapshotHTML Cached snapshot to render\n * @param options.response Response of the specified location\n */\nfunction visit(location, options) {\n  session.visit(location, options);\n}\n\n/**\n * Connects a stream source to the main session.\n *\n * @param source Stream source to connect\n */\nfunction connectStreamSource(source) {\n  session.connectStreamSource(source);\n}\n\n/**\n * Disconnects a stream source from the main session.\n *\n * @param source Stream source to disconnect\n */\nfunction disconnectStreamSource(source) {\n  session.disconnectStreamSource(source);\n}\n\n/**\n * Renders a stream message to the main session by appending it to the\n * current document.\n *\n * @param message Message to render\n */\nfunction renderStreamMessage(message) {\n  session.renderStreamMessage(message);\n}\n\n/**\n * Removes all entries from the Turbo Drive page cache.\n * Call this when state has changed on the server that may affect cached pages.\n *\n * @deprecated since version 7.2.0 in favor of `Turbo.cache.clear()`\n */\nfunction clearCache() {\n  console.warn(\n    \"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  session.clearCache();\n}\n\n/**\n * Sets the delay after which the progress bar will appear during navigation.\n *\n * The progress bar appears after 500ms by default.\n *\n * Note that this method has no effect when used with the iOS or Android\n * adapters.\n *\n * @param delay Time to delay in milliseconds\n */\nfunction setProgressBarDelay(delay) {\n  console.warn(\n    \"Please replace `Turbo.setProgressBarDelay(delay)` with `Turbo.config.drive.progressBarDelay = delay`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.drive.progressBarDelay = delay;\n}\n\nfunction setConfirmMethod(confirmMethod) {\n  console.warn(\n    \"Please replace `Turbo.setConfirmMethod(confirmMethod)` with `Turbo.config.forms.confirm = confirmMethod`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.forms.confirm = confirmMethod;\n}\n\nfunction setFormMode(mode) {\n  console.warn(\n    \"Please replace `Turbo.setFormMode(mode)` with `Turbo.config.forms.mode = mode`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.forms.mode = mode;\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  navigator: navigator$1,\n  session: session,\n  cache: cache,\n  PageRenderer: PageRenderer,\n  PageSnapshot: PageSnapshot,\n  FrameRenderer: FrameRenderer,\n  fetch: fetchWithTurboHeaders,\n  config: config,\n  start: start,\n  registerAdapter: registerAdapter,\n  visit: visit,\n  connectStreamSource: connectStreamSource,\n  disconnectStreamSource: disconnectStreamSource,\n  renderStreamMessage: renderStreamMessage,\n  clearCache: clearCache,\n  setProgressBarDelay: setProgressBarDelay,\n  setConfirmMethod: setConfirmMethod,\n  setFormMode: setFormMode\n});\n\nclass TurboFrameMissingError extends Error {}\n\nclass FrameController {\n  fetchResponseLoaded = (_fetchResponse) => Promise.resolve()\n  #currentFetchRequest = null\n  #resolveVisitPromise = () => {}\n  #connected = false\n  #hasBeenLoaded = false\n  #ignoredAttributes = new Set()\n  #shouldMorphFrame = false\n  action = null\n\n  constructor(element) {\n    this.element = element;\n    this.view = new FrameView(this, this.element);\n    this.appearanceObserver = new AppearanceObserver(this, this.element);\n    this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n    this.linkInterceptor = new LinkInterceptor(this, this.element);\n    this.restorationIdentifier = uuid();\n    this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n  }\n\n  // Frame delegate\n\n  connect() {\n    if (!this.#connected) {\n      this.#connected = true;\n      if (this.loadingStyle == FrameLoadingStyle.lazy) {\n        this.appearanceObserver.start();\n      } else {\n        this.#loadSourceURL();\n      }\n      this.formLinkClickObserver.start();\n      this.linkInterceptor.start();\n      this.formSubmitObserver.start();\n    }\n  }\n\n  disconnect() {\n    if (this.#connected) {\n      this.#connected = false;\n      this.appearanceObserver.stop();\n      this.formLinkClickObserver.stop();\n      this.linkInterceptor.stop();\n      this.formSubmitObserver.stop();\n    }\n  }\n\n  disabledChanged() {\n    if (this.loadingStyle == FrameLoadingStyle.eager) {\n      this.#loadSourceURL();\n    }\n  }\n\n  sourceURLChanged() {\n    if (this.#isIgnoringChangesTo(\"src\")) return\n\n    if (this.element.isConnected) {\n      this.complete = false;\n    }\n\n    if (this.loadingStyle == FrameLoadingStyle.eager || this.#hasBeenLoaded) {\n      this.#loadSourceURL();\n    }\n  }\n\n  sourceURLReloaded() {\n    const { refresh, src } = this.element;\n\n    this.#shouldMorphFrame = src && refresh === \"morph\";\n\n    this.element.removeAttribute(\"complete\");\n    this.element.src = null;\n    this.element.src = src;\n    return this.element.loaded\n  }\n\n  loadingStyleChanged() {\n    if (this.loadingStyle == FrameLoadingStyle.lazy) {\n      this.appearanceObserver.start();\n    } else {\n      this.appearanceObserver.stop();\n      this.#loadSourceURL();\n    }\n  }\n\n  async #loadSourceURL() {\n    if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n      this.element.loaded = this.#visit(expandURL(this.sourceURL));\n      this.appearanceObserver.stop();\n      await this.element.loaded;\n      this.#hasBeenLoaded = true;\n    }\n  }\n\n  async loadResponse(fetchResponse) {\n    if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n      this.sourceURL = fetchResponse.response.url;\n    }\n\n    try {\n      const html = await fetchResponse.responseHTML;\n      if (html) {\n        const document = parseHTMLDocument(html);\n        const pageSnapshot = PageSnapshot.fromDocument(document);\n\n        if (pageSnapshot.isVisitable) {\n          await this.#loadFrameResponse(fetchResponse, document);\n        } else {\n          await this.#handleUnvisitableFrameResponse(fetchResponse);\n        }\n      }\n    } finally {\n      this.#shouldMorphFrame = false;\n      this.fetchResponseLoaded = () => Promise.resolve();\n    }\n  }\n\n  // Appearance observer delegate\n\n  elementAppearedInViewport(element) {\n    this.proposeVisitIfNavigatedWithAction(element, getVisitAction(element));\n    this.#loadSourceURL();\n  }\n\n  // Form link click observer delegate\n\n  willSubmitFormLinkToLocation(link) {\n    return this.#shouldInterceptNavigation(link)\n  }\n\n  submittedFormLinkToLocation(link, _location, form) {\n    const frame = this.#findFrameElement(link);\n    if (frame) form.setAttribute(\"data-turbo-frame\", frame.id);\n  }\n\n  // Link interceptor delegate\n\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.#shouldInterceptNavigation(element)\n  }\n\n  linkClickIntercepted(element, location) {\n    this.#navigateFrame(element, location);\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(element, submitter) {\n    return element.closest(\"turbo-frame\") == this.element && this.#shouldInterceptNavigation(element, submitter)\n  }\n\n  formSubmitted(element, submitter) {\n    if (this.formSubmission) {\n      this.formSubmission.stop();\n    }\n\n    this.formSubmission = new FormSubmission(this, element, submitter);\n    const { fetchRequest } = this.formSubmission;\n    this.prepareRequest(fetchRequest);\n    this.formSubmission.start();\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    request.headers[\"Turbo-Frame\"] = this.id;\n\n    if (this.currentNavigationElement?.hasAttribute(\"data-turbo-stream\")) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted(_request) {\n    markAsBusy(this.element);\n  }\n\n  requestPreventedHandlingResponse(_request, _response) {\n    this.#resolveVisitPromise();\n  }\n\n  async requestSucceededWithResponse(request, response) {\n    await this.loadResponse(response);\n    this.#resolveVisitPromise();\n  }\n\n  async requestFailedWithResponse(request, response) {\n    await this.loadResponse(response);\n    this.#resolveVisitPromise();\n  }\n\n  requestErrored(request, error) {\n    console.error(error);\n    this.#resolveVisitPromise();\n  }\n\n  requestFinished(_request) {\n    clearBusyState(this.element);\n  }\n\n  // Form submission delegate\n\n  formSubmissionStarted({ formElement }) {\n    markAsBusy(formElement, this.#findFrameElement(formElement));\n  }\n\n  formSubmissionSucceededWithResponse(formSubmission, response) {\n    const frame = this.#findFrameElement(formSubmission.formElement, formSubmission.submitter);\n\n    frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(formSubmission.submitter, formSubmission.formElement, frame));\n    frame.delegate.loadResponse(response);\n\n    if (!formSubmission.isSafe) {\n      session.clearCache();\n    }\n  }\n\n  formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n    this.element.delegate.loadResponse(fetchResponse);\n    session.clearCache();\n  }\n\n  formSubmissionErrored(formSubmission, error) {\n    console.error(error);\n  }\n\n  formSubmissionFinished({ formElement }) {\n    clearBusyState(formElement, this.#findFrameElement(formElement));\n  }\n\n  // View delegate\n\n  allowsImmediateRender({ element: newFrame }, options) {\n    const event = dispatch(\"turbo:before-frame-render\", {\n      target: this.element,\n      detail: { newFrame, ...options },\n      cancelable: true\n    });\n\n    const {\n      defaultPrevented,\n      detail: { render }\n    } = event;\n\n    if (this.view.renderer && render) {\n      this.view.renderer.renderElement = render;\n    }\n\n    return !defaultPrevented\n  }\n\n  viewRenderedSnapshot(_snapshot, _isPreview, _renderMethod) {}\n\n  preloadOnLoadLinksForView(element) {\n    session.preloadOnLoadLinksForView(element);\n  }\n\n  viewInvalidated() {}\n\n  // Frame renderer delegate\n\n  willRenderFrame(currentElement, _newElement) {\n    this.previousFrameElement = currentElement.cloneNode(true);\n  }\n\n  visitCachedSnapshot = ({ element }) => {\n    const frame = element.querySelector(\"#\" + this.element.id);\n\n    if (frame && this.previousFrameElement) {\n      frame.replaceChildren(...this.previousFrameElement.children);\n    }\n\n    delete this.previousFrameElement;\n  }\n\n  // Private\n\n  async #loadFrameResponse(fetchResponse, document) {\n    const newFrameElement = await this.extractForeignFrameElement(document.body);\n    const rendererClass = this.#shouldMorphFrame ? MorphingFrameRenderer : FrameRenderer;\n\n    if (newFrameElement) {\n      const snapshot = new Snapshot(newFrameElement);\n      const renderer = new rendererClass(this, this.view.snapshot, snapshot, false, false);\n      if (this.view.renderPromise) await this.view.renderPromise;\n      this.changeHistory();\n\n      await this.view.render(renderer);\n      this.complete = true;\n      session.frameRendered(fetchResponse, this.element);\n      session.frameLoaded(this.element);\n      await this.fetchResponseLoaded(fetchResponse);\n    } else if (this.#willHandleFrameMissingFromResponse(fetchResponse)) {\n      this.#handleFrameMissingFromResponse(fetchResponse);\n    }\n  }\n\n  async #visit(url) {\n    const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n\n    this.#currentFetchRequest?.cancel();\n    this.#currentFetchRequest = request;\n\n    return new Promise((resolve) => {\n      this.#resolveVisitPromise = () => {\n        this.#resolveVisitPromise = () => {};\n        this.#currentFetchRequest = null;\n        resolve();\n      };\n      request.perform();\n    })\n  }\n\n  #navigateFrame(element, url, submitter) {\n    const frame = this.#findFrameElement(element, submitter);\n\n    frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(submitter, element, frame));\n\n    this.#withCurrentNavigationElement(element, () => {\n      frame.src = url;\n    });\n  }\n\n  proposeVisitIfNavigatedWithAction(frame, action = null) {\n    this.action = action;\n\n    if (this.action) {\n      const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n      const { visitCachedSnapshot } = frame.delegate;\n\n      frame.delegate.fetchResponseLoaded = async (fetchResponse) => {\n        if (frame.src) {\n          const { statusCode, redirected } = fetchResponse;\n          const responseHTML = await fetchResponse.responseHTML;\n          const response = { statusCode, redirected, responseHTML };\n          const options = {\n            response,\n            visitCachedSnapshot,\n            willRender: false,\n            updateHistory: false,\n            restorationIdentifier: this.restorationIdentifier,\n            snapshot: pageSnapshot\n          };\n\n          if (this.action) options.action = this.action;\n\n          session.visit(frame.src, options);\n        }\n      };\n    }\n  }\n\n  changeHistory() {\n    if (this.action) {\n      const method = getHistoryMethodForAction(this.action);\n      session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n    }\n  }\n\n  async #handleUnvisitableFrameResponse(fetchResponse) {\n    console.warn(\n      `The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`\n    );\n\n    await this.#visitResponse(fetchResponse.response);\n  }\n\n  #willHandleFrameMissingFromResponse(fetchResponse) {\n    this.element.setAttribute(\"complete\", \"\");\n\n    const response = fetchResponse.response;\n    const visit = async (url, options) => {\n      if (url instanceof Response) {\n        this.#visitResponse(url);\n      } else {\n        session.visit(url, options);\n      }\n    };\n\n    const event = dispatch(\"turbo:frame-missing\", {\n      target: this.element,\n      detail: { response, visit },\n      cancelable: true\n    });\n\n    return !event.defaultPrevented\n  }\n\n  #handleFrameMissingFromResponse(fetchResponse) {\n    this.view.missing();\n    this.#throwFrameMissingError(fetchResponse);\n  }\n\n  #throwFrameMissingError(fetchResponse) {\n    const message = `The response (${fetchResponse.statusCode}) did not contain the expected <turbo-frame id=\"${this.element.id}\"> and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n    throw new TurboFrameMissingError(message)\n  }\n\n  async #visitResponse(response) {\n    const wrapped = new FetchResponse(response);\n    const responseHTML = await wrapped.responseHTML;\n    const { location, redirected, statusCode } = wrapped;\n\n    return session.visit(location, { response: { redirected, statusCode, responseHTML } })\n  }\n\n  #findFrameElement(element, submitter) {\n    const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n    return getFrameElementById(id) ?? this.element\n  }\n\n  async extractForeignFrameElement(container) {\n    let element;\n    const id = CSS.escape(this.id);\n\n    try {\n      element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n      if (element) {\n        return element\n      }\n\n      element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n      if (element) {\n        await element.loaded;\n        return await this.extractForeignFrameElement(element)\n      }\n    } catch (error) {\n      console.error(error);\n      return new FrameElement()\n    }\n\n    return null\n  }\n\n  #formActionIsVisitable(form, submitter) {\n    const action = getAction$1(form, submitter);\n\n    return locationIsVisitable(expandURL(action), this.rootLocation)\n  }\n\n  #shouldInterceptNavigation(element, submitter) {\n    const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n\n    if (element instanceof HTMLFormElement && !this.#formActionIsVisitable(element, submitter)) {\n      return false\n    }\n\n    if (!this.enabled || id == \"_top\") {\n      return false\n    }\n\n    if (id) {\n      const frameElement = getFrameElementById(id);\n      if (frameElement) {\n        return !frameElement.disabled\n      }\n    }\n\n    if (!session.elementIsNavigatable(element)) {\n      return false\n    }\n\n    if (submitter && !session.elementIsNavigatable(submitter)) {\n      return false\n    }\n\n    return true\n  }\n\n  // Computed properties\n\n  get id() {\n    return this.element.id\n  }\n\n  get enabled() {\n    return !this.element.disabled\n  }\n\n  get sourceURL() {\n    if (this.element.src) {\n      return this.element.src\n    }\n  }\n\n  set sourceURL(sourceURL) {\n    this.#ignoringChangesToAttribute(\"src\", () => {\n      this.element.src = sourceURL ?? null;\n    });\n  }\n\n  get loadingStyle() {\n    return this.element.loading\n  }\n\n  get isLoading() {\n    return this.formSubmission !== undefined || this.#resolveVisitPromise() !== undefined\n  }\n\n  get complete() {\n    return this.element.hasAttribute(\"complete\")\n  }\n\n  set complete(value) {\n    if (value) {\n      this.element.setAttribute(\"complete\", \"\");\n    } else {\n      this.element.removeAttribute(\"complete\");\n    }\n  }\n\n  get isActive() {\n    return this.element.isActive && this.#connected\n  }\n\n  get rootLocation() {\n    const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n    const root = meta?.content ?? \"/\";\n    return expandURL(root)\n  }\n\n  #isIgnoringChangesTo(attributeName) {\n    return this.#ignoredAttributes.has(attributeName)\n  }\n\n  #ignoringChangesToAttribute(attributeName, callback) {\n    this.#ignoredAttributes.add(attributeName);\n    callback();\n    this.#ignoredAttributes.delete(attributeName);\n  }\n\n  #withCurrentNavigationElement(element, callback) {\n    this.currentNavigationElement = element;\n    callback();\n    delete this.currentNavigationElement;\n  }\n}\n\nfunction getFrameElementById(id) {\n  if (id != null) {\n    const element = document.getElementById(id);\n    if (element instanceof FrameElement) {\n      return element\n    }\n  }\n}\n\nfunction activateElement(element, currentURL) {\n  if (element) {\n    const src = element.getAttribute(\"src\");\n    if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n      throw new Error(`Matching <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`)\n    }\n    if (element.ownerDocument !== document) {\n      element = document.importNode(element, true);\n    }\n\n    if (element instanceof FrameElement) {\n      element.connectedCallback();\n      element.disconnectedCallback();\n      return element\n    }\n  }\n}\n\nconst StreamActions = {\n  after() {\n    this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e.nextSibling));\n  },\n\n  append() {\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach((e) => e.append(this.templateContent));\n  },\n\n  before() {\n    this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e));\n  },\n\n  prepend() {\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach((e) => e.prepend(this.templateContent));\n  },\n\n  remove() {\n    this.targetElements.forEach((e) => e.remove());\n  },\n\n  replace() {\n    const method = this.getAttribute(\"method\");\n\n    this.targetElements.forEach((targetElement) => {\n      if (method === \"morph\") {\n        morphElements(targetElement, this.templateContent);\n      } else {\n        targetElement.replaceWith(this.templateContent);\n      }\n    });\n  },\n\n  update() {\n    const method = this.getAttribute(\"method\");\n\n    this.targetElements.forEach((targetElement) => {\n      if (method === \"morph\") {\n        morphChildren(targetElement, this.templateContent);\n      } else {\n        targetElement.innerHTML = \"\";\n        targetElement.append(this.templateContent);\n      }\n    });\n  },\n\n  refresh() {\n    session.refresh(this.baseURI, this.requestId);\n  }\n};\n\n// <turbo-stream action=replace target=id><template>...\n\n/**\n * Renders updates to the page from a stream of messages.\n *\n * Using the `action` attribute, this can be configured one of eight ways:\n *\n * - `after` - inserts the result after the target\n * - `append` - appends the result to the target\n * - `before` - inserts the result before the target\n * - `prepend` - prepends the result to the target\n * - `refresh` - initiates a page refresh\n * - `remove` - removes the target\n * - `replace` - replaces the outer HTML of the target\n * - `update` - replaces the inner HTML of the target\n *\n * @customElement turbo-stream\n * @example\n *   <turbo-stream action=\"append\" target=\"dom_id\">\n *     <template>\n *       Content to append to target designated with the dom_id.\n *     </template>\n *   </turbo-stream>\n */\nclass StreamElement extends HTMLElement {\n  static async renderElement(newElement) {\n    await newElement.performAction();\n  }\n\n  async connectedCallback() {\n    try {\n      await this.render();\n    } catch (error) {\n      console.error(error);\n    } finally {\n      this.disconnect();\n    }\n  }\n\n  async render() {\n    return (this.renderPromise ??= (async () => {\n      const event = this.beforeRenderEvent;\n\n      if (this.dispatchEvent(event)) {\n        await nextRepaint();\n        await event.detail.render(this);\n      }\n    })())\n  }\n\n  disconnect() {\n    try {\n      this.remove();\n      // eslint-disable-next-line no-empty\n    } catch {}\n  }\n\n  /**\n   * Removes duplicate children (by ID)\n   */\n  removeDuplicateTargetChildren() {\n    this.duplicateChildren.forEach((c) => c.remove());\n  }\n\n  /**\n   * Gets the list of duplicate children (i.e. those with the same ID)\n   */\n  get duplicateChildren() {\n    const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.getAttribute(\"id\"));\n    const newChildrenIds = [...(this.templateContent?.children || [])].filter((c) => !!c.getAttribute(\"id\")).map((c) => c.getAttribute(\"id\"));\n\n    return existingChildren.filter((c) => newChildrenIds.includes(c.getAttribute(\"id\")))\n  }\n\n  /**\n   * Gets the action function to be performed.\n   */\n  get performAction() {\n    if (this.action) {\n      const actionFunction = StreamActions[this.action];\n      if (actionFunction) {\n        return actionFunction\n      }\n      this.#raise(\"unknown action\");\n    }\n    this.#raise(\"action attribute is missing\");\n  }\n\n  /**\n   * Gets the target elements which the template will be rendered to.\n   */\n  get targetElements() {\n    if (this.target) {\n      return this.targetElementsById\n    } else if (this.targets) {\n      return this.targetElementsByQuery\n    } else {\n      this.#raise(\"target or targets attribute is missing\");\n    }\n  }\n\n  /**\n   * Gets the contents of the main `<template>`.\n   */\n  get templateContent() {\n    return this.templateElement.content.cloneNode(true)\n  }\n\n  /**\n   * Gets the main `<template>` used for rendering\n   */\n  get templateElement() {\n    if (this.firstElementChild === null) {\n      const template = this.ownerDocument.createElement(\"template\");\n      this.appendChild(template);\n      return template\n    } else if (this.firstElementChild instanceof HTMLTemplateElement) {\n      return this.firstElementChild\n    }\n    this.#raise(\"first child element must be a <template> element\");\n  }\n\n  /**\n   * Gets the current action.\n   */\n  get action() {\n    return this.getAttribute(\"action\")\n  }\n\n  /**\n   * Gets the current target (an element ID) to which the result will\n   * be rendered.\n   */\n  get target() {\n    return this.getAttribute(\"target\")\n  }\n\n  /**\n   * Gets the current \"targets\" selector (a CSS selector)\n   */\n  get targets() {\n    return this.getAttribute(\"targets\")\n  }\n\n  /**\n   * Reads the request-id attribute\n   */\n  get requestId() {\n    return this.getAttribute(\"request-id\")\n  }\n\n  #raise(message) {\n    throw new Error(`${this.description}: ${message}`)\n  }\n\n  get description() {\n    return (this.outerHTML.match(/<[^>]+>/) ?? [])[0] ?? \"<turbo-stream>\"\n  }\n\n  get beforeRenderEvent() {\n    return new CustomEvent(\"turbo:before-stream-render\", {\n      bubbles: true,\n      cancelable: true,\n      detail: { newStream: this, render: StreamElement.renderElement }\n    })\n  }\n\n  get targetElementsById() {\n    const element = this.ownerDocument?.getElementById(this.target);\n\n    if (element !== null) {\n      return [element]\n    } else {\n      return []\n    }\n  }\n\n  get targetElementsByQuery() {\n    const elements = this.ownerDocument?.querySelectorAll(this.targets);\n\n    if (elements.length !== 0) {\n      return Array.prototype.slice.call(elements)\n    } else {\n      return []\n    }\n  }\n}\n\nclass StreamSourceElement extends HTMLElement {\n  streamSource = null\n\n  connectedCallback() {\n    this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n\n    connectStreamSource(this.streamSource);\n  }\n\n  disconnectedCallback() {\n    if (this.streamSource) {\n      this.streamSource.close();\n\n      disconnectStreamSource(this.streamSource);\n    }\n  }\n\n  get src() {\n    return this.getAttribute(\"src\") || \"\"\n  }\n}\n\nFrameElement.delegateConstructor = FrameController;\n\nif (customElements.get(\"turbo-frame\") === undefined) {\n  customElements.define(\"turbo-frame\", FrameElement);\n}\n\nif (customElements.get(\"turbo-stream\") === undefined) {\n  customElements.define(\"turbo-stream\", StreamElement);\n}\n\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n  customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n  let element = document.currentScript;\n  if (!element) return\n  if (element.hasAttribute(\"data-turbo-suppress-warning\")) return\n\n  element = element.parentElement;\n  while (element) {\n    if (element == document.body) {\n      return console.warn(\n        unindent`\n        You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n        Load your application\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n        For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements\n\n        \u2014\u2014\n        Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n      `,\n        element.outerHTML\n      )\n    }\n\n    element = element.parentElement;\n  }\n})();\n\nwindow.Turbo = { ...Turbo, StreamActions };\nstart();\n\nexport { FetchEnctype, FetchMethod, FetchRequest, FetchResponse, FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, clearCache, config, connectStreamSource, disconnectStreamSource, fetchWithTurboHeaders as fetch, fetchEnctypeFromString, fetchMethodFromString, isSafe, navigator$1 as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setFormMode, setProgressBarDelay, start, visit };\n", "let consumer\n\nexport async function getConsumer() {\n  return consumer || setConsumer(createConsumer().then(setConsumer))\n}\n\nexport function setConsumer(newConsumer) {\n  return consumer = newConsumer\n}\n\nexport async function createConsumer() {\n  const { createConsumer } = await import(/* webpackChunkName: \"actioncable\" */ \"@rails/actioncable/src\")\n  return createConsumer()\n}\n\nexport async function subscribeTo(channel, mixin) {\n  const { subscriptions } = await getConsumer()\n  return subscriptions.create(channel, mixin)\n}\n", "// Based on https://github.com/nathan7/snakeize\n//\n// This software is released under the MIT license:\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nexport default function walk (obj) {\n    if (!obj || typeof obj !== 'object') return obj;\n    if (obj instanceof Date || obj instanceof RegExp) return obj;\n    if (Array.isArray(obj)) return obj.map(walk);\n    return Object.keys(obj).reduce(function (acc, key) {\n        var camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, function (m, x) {\n            return '_' + x.toLowerCase();\n        });\n        acc[camel] = walk(obj[key]);\n        return acc;\n    }, {});\n};", "import { connectStreamSource, disconnectStreamSource } from \"@hotwired/turbo\"\nimport { subscribeTo } from \"./cable\"\nimport snakeize from \"./snakeize\"\n\nclass TurboCableStreamSourceElement extends HTMLElement {\n  static observedAttributes = [\"channel\", \"signed-stream-name\"]\n\n  async connectedCallback() {\n    connectStreamSource(this)\n    this.subscription = await subscribeTo(this.channel, {\n      received: this.dispatchMessageEvent.bind(this),\n      connected: this.subscriptionConnected.bind(this),\n      disconnected: this.subscriptionDisconnected.bind(this)\n    })\n  }\n\n  disconnectedCallback() {\n    disconnectStreamSource(this)\n    if (this.subscription) this.subscription.unsubscribe()\n    this.subscriptionDisconnected()\n  }\n\n  attributeChangedCallback() {\n    if (this.subscription) {\n      this.disconnectedCallback()\n      this.connectedCallback()\n    }\n  }\n\n  dispatchMessageEvent(data) {\n    const event = new MessageEvent(\"message\", { data })\n    return this.dispatchEvent(event)\n  }\n\n  subscriptionConnected() {\n    this.setAttribute(\"connected\", \"\")\n  }\n\n  subscriptionDisconnected() {\n    this.removeAttribute(\"connected\")\n  }\n\n  get channel() {\n    const channel = this.getAttribute(\"channel\")\n    const signed_stream_name = this.getAttribute(\"signed-stream-name\")\n    return { channel, signed_stream_name, ...snakeize({ ...this.dataset }) }\n  }\n}\n\n\nif (customElements.get(\"turbo-cable-stream-source\") === undefined) {\n  customElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement)\n}\n", "export function encodeMethodIntoRequestBody(event) {\n  if (event.target instanceof HTMLFormElement) {\n    const { target: form, detail: { fetchOptions } } = event\n\n    form.addEventListener(\"turbo:submit-start\", ({ detail: { formSubmission: { submitter } } }) => {\n      const body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams()\n      const method = determineFetchMethod(submitter, body, form)\n\n      if (!/get/i.test(method)) {\n        if (/post/i.test(method)) {\n          body.delete(\"_method\")\n        } else {\n          body.set(\"_method\", method)\n        }\n\n        fetchOptions.method = \"post\"\n      }\n    }, { once: true })\n  }\n}\n\nfunction determineFetchMethod(submitter, body, form) {\n  const formMethod = determineFormMethod(submitter)\n  const overrideMethod = body.get(\"_method\")\n  const method = form.getAttribute(\"method\") || \"get\"\n\n  if (typeof formMethod == \"string\") {\n    return formMethod\n  } else if (typeof overrideMethod == \"string\") {\n    return overrideMethod\n  } else {\n    return method\n  }\n}\n\nfunction determineFormMethod(submitter) {\n  if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) {\n    // Rails 7 ActionView::Helpers::FormBuilder#button method has an override\n    // for formmethod if the button does not have name or value attributes\n    // set, which is the default. This means that if you use <%= f.button\n    // formmethod: :delete %>, it will generate a <button name=\"_method\"\n    // value=\"delete\" formmethod=\"post\">. Therefore, if the submitter's name\n    // is already _method, it's value attribute already contains the desired\n    // method.\n    if (submitter.name === '_method') {\n      return submitter.value\n    } else if (submitter.hasAttribute(\"formmethod\")) {\n      return submitter.formMethod\n    } else {\n      return null\n    }\n  } else {\n    return null\n  }\n}\n\nfunction isBodyInit(body) {\n  return body instanceof FormData || body instanceof URLSearchParams\n}\n", "import \"./cable_stream_source_element\"\n\nimport * as Turbo from \"@hotwired/turbo\"\nexport { Turbo }\n\nimport * as cable from \"./cable\"\nexport { cable }\n\nimport { encodeMethodIntoRequestBody } from \"./fetch_requests\"\n\nwindow.Turbo = Turbo\n\naddEventListener(\"turbo:before-fetch-request\", encodeMethodIntoRequestBody)\n", "import { Controller } from '@hotwired/stimulus';\n\nexport class InvoiceItemSelectorController extends Controller {\n\n    // checkbox dataset: amount, group, order, due\n\n    static targets = ['checkbox', 'sum', 'submit', 'overdueItemsHint']\n\n    static values = {\n        currencySymbol: String\n    }\n\n    connect() {\n        this.checkboxTargets.forEach(checkbox => checkbox.addEventListener('click', () => this.checkboxClick(checkbox)));\n        this.updateSum();\n    }\n\n    checkboxClick(checkbox) {\n        if (checkbox.checked) {\n            this.checkboxTargets\n                .filter((cb) => cb.dataset.group === checkbox.dataset.group && cb.dataset.order < checkbox.dataset.order)\n                .forEach((cb) => cb.checked = true);\n        } else {\n            this.checkboxTargets\n                .filter((cb) => cb.dataset.group === checkbox.dataset.group && cb.dataset.order > checkbox.dataset.order)\n                .forEach((cb) => cb.checked = false);\n        }\n        this.updateSum();\n    }\n\n    updateSum() {\n        const sum = this.checkboxTargets\n            .filter(checkbox => checkbox.checked)\n            .map(checkbox => parseFloat(checkbox.dataset.amount))\n            .reduce(function (pv, cv) {\n                return pv + cv;\n            }, 0);\n        if (sum === 0) {\n            this.submitTargets.forEach(target => target.disabled)\n        }\n        this.counterAnim(parseFloat(this.sumTargets[0]?.dataset?.value) ?? 0, sum)\n        this.sumTargets.forEach(sumTarget => sumTarget.dataset.value = sum);\n        const overDueItemsHintBoolean = this.checkboxTargets\n            .every(checkbox => checkbox.checked || !checkbox.dataset.overdue);\n        this.overdueItemsHintTargets.forEach(target => target.hidden = overDueItemsHintBoolean);\n    }\n\n    localize(amount) {\n        return amount.toLocaleString(document.documentElement.lang, { style: 'currency', currency: this.currencySymbolValue });\n    }\n\n    counterAnim = (start, end) => {\n        let startTimestamp = null;\n        const step = (timestamp) => {\n            if (!startTimestamp) startTimestamp = timestamp;\n            const progress = Math.min((timestamp - startTimestamp) / 200, 1);\n            const sumText = this.localize(Math.floor(progress * (end - start) + start));\n            this.sumTargets.forEach(target => target.innerText = sumText);\n            if (progress < 1) {\n                window.requestAnimationFrame(step);\n            } else {\n                this.sumTargets.forEach(target => target.innerText = this.localize(end));\n            }\n        };\n        window.requestAnimationFrame(step);\n    };\n}\n", "import {Controller} from '@hotwired/stimulus';\n\nexport class RadioToggleController extends Controller {\n\n    static targets = [\"element\", \"radio\"]\n\n    connect() {\n        for (let element of this.elementTargets) {\n            this.toggle(element, this.radioValue());\n            this.radioTargets.forEach(r => r.addEventListener('change', event => {\n                for (let element of this.elementTargets) {\n                    this.toggle(element, this.radioValue());\n                }\n            }))\n        }\n    }\n\n    radioValue() {\n        return this.radioTargets.find(r => r.checked)?.value;\n    }\n\n    toggle(element, radioValue) {\n        const visibleValues = element.dataset.values || element.dataset.radioToggleValues;\n        if (element && visibleValues != undefined) {\n            let hidden;\n            if (visibleValues === '*') {\n                hidden = !radioValue;\n            } else {\n                hidden = !visibleValues.split(',').includes(radioValue);\n            }\n            element.hidden = hidden;\n            if (['INPUT', 'SELECT'].includes(element.tagName)) {\n                element.disabled = hidden;\n            }\n        }\n    }\n\n}\n", "import { loadStripe } from '@stripe/stripe-js/pure';\nimport { Controller } from '@hotwired/stimulus';\nimport {alert} from 'bootbox';\n\nexport class StripePaymentController extends Controller {\n\n    static values = {\n        pubkey: String,\n        account: String,\n        clientSecret: String,\n        // 'payment' confirms a PaymentIntent, 'setup' a SetupIntent\n        mode: { type: String, default: 'payment' },\n        returnUrl: String,\n        payerName: String,\n        payerEmail: String,\n        payerAddress: String,\n        payerPostalCode: String,\n        payerCity: String,\n        payerCountry: String,\n    }\n\n    static targets = ['element', 'message', 'form', 'submit']\n\n    stripe;\n    elements;\n\n    connect() {\n        this.connectAsync().then()\n    }\n\n    async connectAsync() {\n        this.stripe = await loadStripe(this.pubkeyValue, { stripeAccount: this.accountValue, locale: document.documentElement.lang });\n        const appearance = {\n            theme: 'stripe',\n        };\n        this.elements = this.stripe.elements({ appearance, clientSecret: this.clientSecretValue });\n        const paymentElement = this.elements.create('payment', {\n            defaultValues: {\n                billingDetails: {\n                    name: this.payerNameValue || undefined,\n                    email: this.payerEmailValue || undefined,\n                    address: {\n                        line1: this.payerAddressValue || undefined,\n                        country: this.payerCountryValue || undefined,\n                        postal_code: this.payerPostalCodeValue || undefined,\n                        city: this.payerCityValue || undefined\n                    }\n                }\n            }\n        });\n        paymentElement.mount(this.elementTarget);\n\n        this.formTarget.addEventListener('submit', this.handleSubmit.bind(this));\n    }\n\n    async handleSubmit(e) {\n        e.preventDefault();\n        this.setLoading(true);\n\n        const options = {\n            elements: this.elements,\n            confirmParams: {\n                // Make sure to change this to your payment completion page\n                return_url: this.returnUrlValue,\n            },\n        };\n        const { error } = this.modeValue === 'setup'\n            ? await this.stripe.confirmSetup(options)\n            : await this.stripe.confirmPayment(options);\n\n        console.log(error)\n\n        // This point will only be reached if there is an immediate error when\n        // confirming the payment. Otherwise, your customer will be redirected to\n        // your `return_url`. For some payment methods like iDEAL, your customer will\n        // be redirected to an intermediate site first to authorize the payment, then\n        // redirected to the `return_url`.\n        if (error.type === 'card_error' || error.type === 'validation_error') {\n            alert(error.message);\n        } else {\n            alert('An unexpected error occurred.');\n        }\n\n        this.setLoading(false);\n    }\n\n    setLoading(isLoading) {\n        this.submitTarget.disabled = !!isLoading;\n    }\n\n}\n\n", "import { Controller } from \"@hotwired/stimulus\";\nconst _Reveal = class _Reveal extends Controller {\n  connect() {\n    this.class = this.hasHiddenClass ? this.hiddenClass : \"hidden\";\n  }\n  toggle() {\n    this.itemTargets.forEach((item) => {\n      item.classList.toggle(this.class);\n    });\n  }\n  show() {\n    this.itemTargets.forEach((item) => {\n      item.classList.remove(this.class);\n    });\n  }\n  hide() {\n    this.itemTargets.forEach((item) => {\n      item.classList.add(this.class);\n    });\n  }\n};\n_Reveal.targets = [\"item\"], _Reveal.classes = [\"hidden\"];\nlet Reveal = _Reveal;\nexport {\n  Reveal as default\n};\n", "import {Controller} from '@hotwired/stimulus';\n\nexport class TimerController extends Controller {\n\n    static targets = ['hideOnTimeout', 'showOnTimeout', 'countdown']\n\n    static values = {\n        time: Number\n    }\n\n    time = null;\n\n    connect() {\n        this.parseTime()\n        if (this.time) {\n            this.refresh()\n        } else {\n            this.showOnTimeoutTargets.forEach((e) => e.hidden = true);\n            this.hideOnTimeoutTargets.forEach((e) => e.hidden = false);\n        }\n    }\n\n    refresh() {\n        this.draw();\n        setTimeout(() => { this.refresh() }, 1000)\n    }\n\n    draw() {\n        let timeDiff = this.time.getTime() - new Date().getTime();\n        let timedOut = false;\n        if (timeDiff < 0) {\n            timeDiff = 0;\n            timedOut = true;\n        }\n        const hours = Math.floor(timeDiff / (60 * 60 * 1000))\n        const minutes = Math.floor((timeDiff % (60 * 60 * 1000)) / (60 * 1000))\n        const seconds = Math.floor(((timeDiff % (60 * 60 * 1000)) % (60 * 1000)) / 1000)\n        let result = '';\n        if (hours > 0) {\n            result = `${hours}:`\n        }\n        if (minutes < 10) {\n            result = result + `0${minutes}:`\n        } else {\n            result = result + `${minutes}:`\n        }\n        if (seconds < 10) {\n            result = result + `0${seconds}`\n        } else {\n            result = result + seconds\n        }\n        this.countdownTargets.forEach((e) => e.innerHTML = result);\n        this.showOnTimeoutTargets.forEach((e) => e.hidden = !timedOut);\n        this.hideOnTimeoutTargets.forEach((e) => {\n            e.hidden = timedOut\n            if (timedOut) {\n                e.disabled = true;\n            }\n        });\n    }\n\n    parseTime() {\n        if (!this.timeValue) {\n            return\n        }\n        this.time = new Date(this.timeValue * 1000)\n    }\n}\n", "import {Controller} from '@hotwired/stimulus';\n\nexport class AddressAutocompleteController extends Controller {\n\n    static targets = ['street', 'zip', 'town', 'country', 'federalState', 'results']\n\n    connect() {\n        this.sessionToken = this.generateSessionToken();\n        this.debounceTimer = null;\n        this.resultsVisible = false;\n        this.selectedIndex = -1;\n        this.suggestions = [];\n\n        this.handleDocumentClick = this.handleDocumentClick.bind(this);\n        this.handleWindowResize = this.handleWindowResize.bind(this);\n        document.addEventListener('click', this.handleDocumentClick);\n        window.addEventListener('resize', this.handleWindowResize);\n    }\n\n    disconnect() {\n        document.removeEventListener('click', this.handleDocumentClick);\n        window.removeEventListener('resize', this.handleWindowResize);\n        if (this.debounceTimer) clearTimeout(this.debounceTimer);\n    }\n\n    onInput() {\n        const query = this.streetTarget.value.trim();\n        if (query.length < 3) {\n            this.hideResults();\n            return;\n        }\n\n        if (this.debounceTimer) clearTimeout(this.debounceTimer);\n        this.debounceTimer = setTimeout(() => this.fetchSuggestions(query), 300);\n    }\n\n    onKeydown(event) {\n        if (!this.resultsVisible) return;\n\n        switch (event.key) {\n            case 'ArrowDown':\n                event.preventDefault();\n                this.selectedIndex = Math.min(this.selectedIndex + 1, this.suggestions.length - 1);\n                this.highlightResult();\n                break;\n            case 'ArrowUp':\n                event.preventDefault();\n                this.selectedIndex = Math.max(this.selectedIndex - 1, 0);\n                this.highlightResult();\n                break;\n            case 'Enter':\n                event.preventDefault();\n                if (this.selectedIndex >= 0 && this.suggestions[this.selectedIndex]) {\n                    this.selectPlace(this.suggestions[this.selectedIndex]);\n                }\n                break;\n            case 'Escape':\n                event.preventDefault();\n                this.hideResults();\n                break;\n        }\n    }\n\n    async fetchSuggestions(query) {\n        try {\n            const params = new URLSearchParams({\n                input: query,\n                session_token: this.sessionToken\n            });\n            const response = await fetch(`/places/autocomplete?${params}`);\n            if (!response.ok) return;\n\n            this.suggestions = await response.json();\n            if (Array.isArray(this.suggestions) && this.suggestions.length > 0) {\n                this.showResults(this.suggestions);\n            } else {\n                this.hideResults();\n            }\n        } catch (e) {\n            // Silently ignore network errors\n        }\n    }\n\n    async selectPlace(suggestion) {\n        this.hideResults();\n\n        try {\n            const params = new URLSearchParams({\n                place_id: suggestion.place_id,\n                session_token: this.sessionToken\n            });\n            const response = await fetch(`/places/details?${params}`);\n            if (!response.ok) return;\n\n            const data = await response.json();\n            this.fillAddressFields(data);\n\n            // Generate a new session token for the next autocomplete cycle\n            this.sessionToken = this.generateSessionToken();\n        } catch (e) {\n            // Silently ignore network errors\n        }\n    }\n\n    fillAddressFields(data) {\n        if (this.hasStreetTarget) {\n            this.streetTarget.value = data.street_name || '';\n        }\n        if (this.hasZipTarget) {\n            this.zipTarget.value = data.zip || '';\n        }\n        if (this.hasTownTarget) {\n            this.townTarget.value = data.town || '';\n        }\n        if (this.hasCountryTarget && data.country_id) {\n            $(this.countryTarget).select2('val', String(data.country_id));\n        }\n        if (this.hasFederalStateTarget && data.federal_state_id) {\n            $(this.federalStateTarget).select2('data', {\n                id: data.federal_state_id,\n                text: data.federal_state_name\n            });\n        }\n    }\n\n    showResults(suggestions) {\n        this.selectedIndex = -1;\n        let dropdown = this.resultsTarget;\n        dropdown.innerHTML = '';\n        suggestions.forEach((s, index) => {\n            const item = document.createElement('div');\n            item.className = 'address-autocomplete-item';\n            item.textContent = s.description;\n            item.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                this.selectPlace(s);\n            });\n            item.addEventListener('mouseenter', () => {\n                this.selectedIndex = index;\n                this.highlightResult();\n            });\n            dropdown.appendChild(item);\n        });\n        this.positionDropdown();\n        dropdown.style.display = 'block';\n        this.resultsVisible = true;\n    }\n\n    hideResults() {\n        if (this.hasResultsTarget) {\n            this.resultsTarget.style.display = 'none';\n            this.resultsTarget.innerHTML = '';\n        }\n        this.resultsVisible = false;\n        this.selectedIndex = -1;\n    }\n\n    highlightResult() {\n        if (!this.hasResultsTarget) return;\n        const items = this.resultsTarget.querySelectorAll('.address-autocomplete-item');\n        items.forEach((item, i) => {\n            item.classList.toggle('active', i === this.selectedIndex);\n        });\n    }\n\n    handleDocumentClick(event) {\n        if (!this.element.contains(event.target)) {\n            this.hideResults();\n        }\n    }\n\n    handleWindowResize() {\n        if (this.resultsVisible) {\n            this.positionDropdown();\n        }\n    }\n\n    positionDropdown() {\n        if (!this.hasStreetTarget || !this.hasResultsTarget) return;\n\n        const containerRect = this.element.getBoundingClientRect();\n        const inputRect = this.streetTarget.getBoundingClientRect();\n\n        this.resultsTarget.style.top = `${inputRect.bottom - containerRect.top}px`;\n        this.resultsTarget.style.left = `${inputRect.left - containerRect.left}px`;\n        this.resultsTarget.style.width = `${inputRect.width}px`;\n    }\n\n    generateSessionToken() {\n        return crypto.randomUUID();\n    }\n}\n", "document.addEventListener('wheel', (event) => {\n  const el = document.activeElement;\n  if (el instanceof HTMLInputElement &&\n      el.type === 'number' &&\n      el === event.target) {\n    el.blur();\n  }\n}, { passive: true });\n", "import jquery from \"jquery\";\nwindow.jQuery = jquery;\nwindow.$ = jquery;\nexport { jquery as $ }\nexport { jquery as jQuery }\n", "/*! jQuery UI - v1.13.3 - 2024-07-12\n* https://jqueryui.com\n* Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/draggable.js, widgets/sortable.js, widgets/mouse.js, effect.js, effects/effect-fade.js, effects/effect-puff.js, effects/effect-scale.js, effects/effect-size.js\n* Copyright OpenJS Foundation and other contributors; Licensed MIT */\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\n$.ui = $.ui || {};\n\nvar version = $.ui.version = \"1.13.3\";\n\n\n/*!\n * jQuery UI Widget 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Widget\n//>>group: Core\n//>>description: Provides a factory for creating stateful widgets with a common API.\n//>>docs: https://api.jqueryui.com/jQuery.widget/\n//>>demos: https://jqueryui.com/widget/\n\n\nvar widgetUuid = 0;\nvar widgetHasOwnProperty = Array.prototype.hasOwnProperty;\nvar widgetSlice = Array.prototype.slice;\n\n$.cleanData = ( function( orig ) {\n\treturn function( elems ) {\n\t\tvar events, elem, i;\n\t\tfor ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {\n\n\t\t\t// Only trigger remove when necessary to save time\n\t\t\tevents = $._data( elem, \"events\" );\n\t\t\tif ( events && events.remove ) {\n\t\t\t\t$( elem ).triggerHandler( \"remove\" );\n\t\t\t}\n\t\t}\n\t\torig( elems );\n\t};\n} )( $.cleanData );\n\n$.widget = function( name, base, prototype ) {\n\tvar existingConstructor, constructor, basePrototype;\n\n\t// ProxiedPrototype allows the provided prototype to remain unmodified\n\t// so that it can be used as a mixin for multiple widgets (#8876)\n\tvar proxiedPrototype = {};\n\n\tvar namespace = name.split( \".\" )[ 0 ];\n\tname = name.split( \".\" )[ 1 ];\n\tvar fullName = namespace + \"-\" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\tif ( Array.isArray( prototype ) ) {\n\t\tprototype = $.extend.apply( null, [ {} ].concat( prototype ) );\n\t}\n\n\t// Create selector for plugin\n\t$.expr.pseudos[ fullName.toLowerCase() ] = function( elem ) {\n\t\treturn !!$.data( elem, fullName );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\texistingConstructor = $[ namespace ][ name ];\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\n\n\t\t// Allow instantiation without \"new\" keyword\n\t\tif ( !this || !this._createWidget ) {\n\t\t\treturn new constructor( options, element );\n\t\t}\n\n\t\t// Allow instantiation without initializing for simple inheritance\n\t\t// must use \"new\" keyword (the code above always passes args)\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\n\t// Extend with the existing constructor to carry over any static properties\n\t$.extend( constructor, existingConstructor, {\n\t\tversion: prototype.version,\n\n\t\t// Copy the object used to create the prototype in case we need to\n\t\t// redefine the widget later\n\t\t_proto: $.extend( {}, prototype ),\n\n\t\t// Track widgets that inherit from this widget in case this widget is\n\t\t// redefined after a widget inherits from it\n\t\t_childConstructors: []\n\t} );\n\n\tbasePrototype = new base();\n\n\t// We need to make the options hash a property directly on the new instance\n\t// otherwise we'll modify the options hash on the prototype that we're\n\t// inheriting from\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\n\t$.each( prototype, function( prop, value ) {\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\tproxiedPrototype[ prop ] = value;\n\t\t\treturn;\n\t\t}\n\t\tproxiedPrototype[ prop ] = ( function() {\n\t\t\tfunction _super() {\n\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\n\t\t\t}\n\n\t\t\tfunction _superApply( args ) {\n\t\t\t\treturn base.prototype[ prop ].apply( this, args );\n\t\t\t}\n\n\t\t\treturn function() {\n\t\t\t\tvar __super = this._super;\n\t\t\t\tvar __superApply = this._superApply;\n\t\t\t\tvar returnValue;\n\n\t\t\t\tthis._super = _super;\n\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\treturnValue = value.apply( this, arguments );\n\n\t\t\t\tthis._super = __super;\n\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t} )();\n\t} );\n\tconstructor.prototype = $.widget.extend( basePrototype, {\n\n\t\t// TODO: remove support for widgetEventPrefix\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t// don't prefix for widgets that aren't DOM-based\n\t\twidgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name\n\t}, proxiedPrototype, {\n\t\tconstructor: constructor,\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetFullName: fullName\n\t} );\n\n\t// If this widget is being redefined then we need to find all widgets that\n\t// are inheriting from it and redefine all of them so that they inherit from\n\t// the new version of this widget. We're essentially trying to replace one\n\t// level in the prototype chain.\n\tif ( existingConstructor ) {\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\n\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t// Redefine the child widget using the same prototype that was\n\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor,\n\t\t\t\tchild._proto );\n\t\t} );\n\n\t\t// Remove the list of existing child constructors from the old constructor\n\t\t// so the old child constructors can be garbage collected\n\t\tdelete existingConstructor._childConstructors;\n\t} else {\n\t\tbase._childConstructors.push( constructor );\n\t}\n\n\t$.widget.bridge( name, constructor );\n\n\treturn constructor;\n};\n\n$.widget.extend = function( target ) {\n\tvar input = widgetSlice.call( arguments, 1 );\n\tvar inputIndex = 0;\n\tvar inputLength = input.length;\n\tvar key;\n\tvar value;\n\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\n\t\tfor ( key in input[ inputIndex ] ) {\n\t\t\tvalue = input[ inputIndex ][ key ];\n\t\t\tif ( widgetHasOwnProperty.call( input[ inputIndex ], key ) && value !== undefined ) {\n\n\t\t\t\t// Clone objects\n\t\t\t\tif ( $.isPlainObject( value ) ) {\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\n\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend( {}, value );\n\n\t\t\t\t// Copy everything else by reference\n\t\t\t\t} else {\n\t\t\t\t\ttarget[ key ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\n$.widget.bridge = function( name, object ) {\n\tvar fullName = object.prototype.widgetFullName || name;\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === \"string\";\n\t\tvar args = widgetSlice.call( arguments, 1 );\n\t\tvar returnValue = this;\n\n\t\tif ( isMethodCall ) {\n\n\t\t\t// If this is an empty collection, we need to have the instance method\n\t\t\t// return undefined instead of the jQuery instance\n\t\t\tif ( !this.length && options === \"instance\" ) {\n\t\t\t\treturnValue = undefined;\n\t\t\t} else {\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar methodValue;\n\t\t\t\t\tvar instance = $.data( this, fullName );\n\n\t\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\treturn $.error( \"cannot call methods on \" + name +\n\t\t\t\t\t\t\t\" prior to initialization; \" +\n\t\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( typeof instance[ options ] !== \"function\" ||\n\t\t\t\t\t\toptions.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name +\n\t\t\t\t\t\t\t\" widget instance\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\n\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\t\tmethodValue;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Allow multiple hashes to be passed on init\n\t\t\tif ( args.length ) {\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\n\t\t\t}\n\n\t\t\tthis.each( function() {\n\t\t\t\tvar instance = $.data( this, fullName );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = function( /* options, element */ ) {};\n$.Widget._childConstructors = [];\n\n$.Widget.prototype = {\n\twidgetName: \"widget\",\n\twidgetEventPrefix: \"\",\n\tdefaultElement: \"<div>\",\n\n\toptions: {\n\t\tclasses: {},\n\t\tdisabled: false,\n\n\t\t// Callbacks\n\t\tcreate: null\n\t},\n\n\t_createWidget: function( options, element ) {\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\n\t\tthis.element = $( element );\n\t\tthis.uuid = widgetUuid++;\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\n\n\t\tthis.bindings = $();\n\t\tthis.hoverable = $();\n\t\tthis.focusable = $();\n\t\tthis.classesElementLookup = {};\n\n\t\tif ( element !== this ) {\n\t\t\t$.data( element, this.widgetFullName, this );\n\t\t\tthis._on( true, this.element, {\n\t\t\t\tremove: function( event ) {\n\t\t\t\t\tif ( event.target === element ) {\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t\tthis.document = $( element.style ?\n\n\t\t\t\t// Element within the document\n\t\t\t\telement.ownerDocument :\n\n\t\t\t\t// Element is window or document\n\t\t\t\telement.document || element );\n\t\t\tthis.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );\n\t\t}\n\n\t\tthis.options = $.widget.extend( {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tthis._create();\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis._setOptionDisabled( this.options.disabled );\n\t\t}\n\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\n\t\tthis._init();\n\t},\n\n\t_getCreateOptions: function() {\n\t\treturn {};\n\t},\n\n\t_getCreateEventData: $.noop,\n\n\t_create: $.noop,\n\n\t_init: $.noop,\n\n\tdestroy: function() {\n\t\tvar that = this;\n\n\t\tthis._destroy();\n\t\t$.each( this.classesElementLookup, function( key, value ) {\n\t\t\tthat._removeClass( value, key );\n\t\t} );\n\n\t\t// We can probably remove the unbind calls in 2.0\n\t\t// all event bindings should go through this._on()\n\t\tthis.element\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeData( this.widgetFullName );\n\t\tthis.widget()\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeAttr( \"aria-disabled\" );\n\n\t\t// Clean up events and states\n\t\tthis.bindings.off( this.eventNamespace );\n\t},\n\n\t_destroy: $.noop,\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key;\n\t\tvar parts;\n\t\tvar curOption;\n\t\tvar i;\n\n\t\tif ( arguments.length === 0 ) {\n\n\t\t\t// Don't return a reference to the internal hash\n\t\t\treturn $.widget.extend( {}, this.options );\n\t\t}\n\n\t\tif ( typeof key === \"string\" ) {\n\n\t\t\t// Handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n\t\t\toptions = {};\n\t\t\tparts = key.split( \".\" );\n\t\t\tkey = parts.shift();\n\t\t\tif ( parts.length ) {\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\n\t\t\t\t}\n\t\t\t\tkey = parts.pop();\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\n\t\t\t\t}\n\t\t\t\tcurOption[ key ] = value;\n\t\t\t} else {\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\n\t\t\t\t}\n\t\t\t\toptions[ key ] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar key;\n\n\t\tfor ( key in options ) {\n\t\t\tthis._setOption( key, options[ key ] );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"classes\" ) {\n\t\t\tthis._setOptionClasses( value );\n\t\t}\n\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._setOptionDisabled( value );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOptionClasses: function( value ) {\n\t\tvar classKey, elements, currentElements;\n\n\t\tfor ( classKey in value ) {\n\t\t\tcurrentElements = this.classesElementLookup[ classKey ];\n\t\t\tif ( value[ classKey ] === this.options.classes[ classKey ] ||\n\t\t\t\t\t!currentElements ||\n\t\t\t\t\t!currentElements.length ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// We are doing this to create a new jQuery object because the _removeClass() call\n\t\t\t// on the next line is going to destroy the reference to the current elements being\n\t\t\t// tracked. We need to save a copy of this collection so that we can add the new classes\n\t\t\t// below.\n\t\t\telements = $( currentElements.get() );\n\t\t\tthis._removeClass( currentElements, classKey );\n\n\t\t\t// We don't use _addClass() here, because that uses this.options.classes\n\t\t\t// for generating the string of classes. We want to use the value passed in from\n\t\t\t// _setOption(), this is the new value of the classes option which was passed to\n\t\t\t// _setOption(). We pass this value directly to _classes().\n\t\t\telements.addClass( this._classes( {\n\t\t\t\telement: elements,\n\t\t\t\tkeys: classKey,\n\t\t\t\tclasses: value,\n\t\t\t\tadd: true\n\t\t\t} ) );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null, !!value );\n\n\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\tif ( value ) {\n\t\t\tthis._removeClass( this.hoverable, null, \"ui-state-hover\" );\n\t\t\tthis._removeClass( this.focusable, null, \"ui-state-focus\" );\n\t\t}\n\t},\n\n\tenable: function() {\n\t\treturn this._setOptions( { disabled: false } );\n\t},\n\n\tdisable: function() {\n\t\treturn this._setOptions( { disabled: true } );\n\t},\n\n\t_classes: function( options ) {\n\t\tvar full = [];\n\t\tvar that = this;\n\n\t\toptions = $.extend( {\n\t\t\telement: this.element,\n\t\t\tclasses: this.options.classes || {}\n\t\t}, options );\n\n\t\tfunction bindRemoveEvent() {\n\t\t\tvar nodesToBind = [];\n\n\t\t\toptions.element.each( function( _, element ) {\n\t\t\t\tvar isTracked = $.map( that.classesElementLookup, function( elements ) {\n\t\t\t\t\treturn elements;\n\t\t\t\t} )\n\t\t\t\t\t.some( function( elements ) {\n\t\t\t\t\t\treturn elements.is( element );\n\t\t\t\t\t} );\n\n\t\t\t\tif ( !isTracked ) {\n\t\t\t\t\tnodesToBind.push( element );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthat._on( $( nodesToBind ), {\n\t\t\t\tremove: \"_untrackClassesElement\"\n\t\t\t} );\n\t\t}\n\n\t\tfunction processClassString( classes, checkOption ) {\n\t\t\tvar current, i;\n\t\t\tfor ( i = 0; i < classes.length; i++ ) {\n\t\t\t\tcurrent = that.classesElementLookup[ classes[ i ] ] || $();\n\t\t\t\tif ( options.add ) {\n\t\t\t\t\tbindRemoveEvent();\n\t\t\t\t\tcurrent = $( $.uniqueSort( current.get().concat( options.element.get() ) ) );\n\t\t\t\t} else {\n\t\t\t\t\tcurrent = $( current.not( options.element ).get() );\n\t\t\t\t}\n\t\t\t\tthat.classesElementLookup[ classes[ i ] ] = current;\n\t\t\t\tfull.push( classes[ i ] );\n\t\t\t\tif ( checkOption && options.classes[ classes[ i ] ] ) {\n\t\t\t\t\tfull.push( options.classes[ classes[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( options.keys ) {\n\t\t\tprocessClassString( options.keys.match( /\\S+/g ) || [], true );\n\t\t}\n\t\tif ( options.extra ) {\n\t\t\tprocessClassString( options.extra.match( /\\S+/g ) || [] );\n\t\t}\n\n\t\treturn full.join( \" \" );\n\t},\n\n\t_untrackClassesElement: function( event ) {\n\t\tvar that = this;\n\t\t$.each( that.classesElementLookup, function( key, value ) {\n\t\t\tif ( $.inArray( event.target, value ) !== -1 ) {\n\t\t\t\tthat.classesElementLookup[ key ] = $( value.not( event.target ).get() );\n\t\t\t}\n\t\t} );\n\n\t\tthis._off( $( event.target ) );\n\t},\n\n\t_removeClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, false );\n\t},\n\n\t_addClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, true );\n\t},\n\n\t_toggleClass: function( element, keys, extra, add ) {\n\t\tadd = ( typeof add === \"boolean\" ) ? add : extra;\n\t\tvar shift = ( typeof element === \"string\" || element === null ),\n\t\t\toptions = {\n\t\t\t\textra: shift ? keys : extra,\n\t\t\t\tkeys: shift ? element : keys,\n\t\t\t\telement: shift ? this.element : element,\n\t\t\t\tadd: add\n\t\t\t};\n\t\toptions.element.toggleClass( this._classes( options ), add );\n\t\treturn this;\n\t},\n\n\t_on: function( suppressDisabledCheck, element, handlers ) {\n\t\tvar delegateElement;\n\t\tvar instance = this;\n\n\t\t// No suppressDisabledCheck flag, shuffle arguments\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\n\t\t\thandlers = element;\n\t\t\telement = suppressDisabledCheck;\n\t\t\tsuppressDisabledCheck = false;\n\t\t}\n\n\t\t// No element argument, shuffle and use this.element\n\t\tif ( !handlers ) {\n\t\t\thandlers = element;\n\t\t\telement = this.element;\n\t\t\tdelegateElement = this.widget();\n\t\t} else {\n\t\t\telement = delegateElement = $( element );\n\t\t\tthis.bindings = this.bindings.add( element );\n\t\t}\n\n\t\t$.each( handlers, function( event, handler ) {\n\t\t\tfunction handlerProxy() {\n\n\t\t\t\t// Allow widgets to customize the disabled handling\n\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\tif ( !suppressDisabledCheck &&\n\t\t\t\t\t\t( instance.options.disabled === true ||\n\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t\t.apply( instance, arguments );\n\t\t\t}\n\n\t\t\t// Copy the guid so direct unbinding works\n\t\t\tif ( typeof handler !== \"string\" ) {\n\t\t\t\thandlerProxy.guid = handler.guid =\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\n\t\t\t}\n\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ );\n\t\t\tvar eventName = match[ 1 ] + instance.eventNamespace;\n\t\t\tvar selector = match[ 2 ];\n\n\t\t\tif ( selector ) {\n\t\t\t\tdelegateElement.on( eventName, selector, handlerProxy );\n\t\t\t} else {\n\t\t\t\telement.on( eventName, handlerProxy );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_off: function( element, eventName ) {\n\t\teventName = ( eventName || \"\" ).split( \" \" ).join( this.eventNamespace + \" \" ) +\n\t\t\tthis.eventNamespace;\n\t\telement.off( eventName );\n\n\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\n\t},\n\n\t_delay: function( handler, delay ) {\n\t\tfunction handlerProxy() {\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t.apply( instance, arguments );\n\t\t}\n\t\tvar instance = this;\n\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t},\n\n\t_hoverable: function( element ) {\n\t\tthis.hoverable = this.hoverable.add( element );\n\t\tthis._on( element, {\n\t\t\tmouseenter: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t},\n\t\t\tmouseleave: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_focusable: function( element ) {\n\t\tthis.focusable = this.focusable.add( element );\n\t\tthis._on( element, {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t},\n\t\t\tfocusout: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig;\n\t\tvar callback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\n\t\t// The original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// Copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\t\treturn !( typeof callback === \"function\" &&\n\t\t\tcallback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\toptions = { effect: options };\n\t\t}\n\n\t\tvar hasOptions;\n\t\tvar effectName = !options ?\n\t\t\tmethod :\n\t\t\toptions === true || typeof options === \"number\" ?\n\t\t\t\tdefaultEffect :\n\t\t\t\toptions.effect || defaultEffect;\n\n\t\toptions = options || {};\n\t\tif ( typeof options === \"number\" ) {\n\t\t\toptions = { duration: options };\n\t\t} else if ( options === true ) {\n\t\t\toptions = {};\n\t\t}\n\n\t\thasOptions = !$.isEmptyObject( options );\n\t\toptions.complete = callback;\n\n\t\tif ( options.delay ) {\n\t\t\telement.delay( options.delay );\n\t\t}\n\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\n\t\t\telement[ method ]( options );\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\n\t\t} else {\n\t\t\telement.queue( function( next ) {\n\t\t\t\t$( this )[ method ]();\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback.call( element[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnext();\n\t\t\t} );\n\t\t}\n\t};\n} );\n\nvar widget = $.widget;\n\n\n/*!\n * jQuery UI Position 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n *\n * https://api.jqueryui.com/position/\n */\n\n//>>label: Position\n//>>group: Core\n//>>description: Positions elements relative to other elements.\n//>>docs: https://api.jqueryui.com/position/\n//>>demos: https://jqueryui.com/position/\n\n\n( function() {\nvar cachedScrollbarWidth,\n\tmax = Math.max,\n\tabs = Math.abs,\n\trhorizontal = /left|center|right/,\n\trvertical = /top|center|bottom/,\n\troffset = /[\\+\\-]\\d+(\\.[\\d]+)?%?/,\n\trposition = /^\\w+/,\n\trpercent = /%$/,\n\t_position = $.fn.position;\n\nfunction getOffsets( offsets, width, height ) {\n\treturn [\n\t\tparseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),\n\t\tparseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )\n\t];\n}\n\nfunction parseCss( element, property ) {\n\treturn parseInt( $.css( element, property ), 10 ) || 0;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction getDimensions( elem ) {\n\tvar raw = elem[ 0 ];\n\tif ( raw.nodeType === 9 ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: 0, left: 0 }\n\t\t};\n\t}\n\tif ( isWindow( raw ) ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: elem.scrollTop(), left: elem.scrollLeft() }\n\t\t};\n\t}\n\tif ( raw.preventDefault ) {\n\t\treturn {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\toffset: { top: raw.pageY, left: raw.pageX }\n\t\t};\n\t}\n\treturn {\n\t\twidth: elem.outerWidth(),\n\t\theight: elem.outerHeight(),\n\t\toffset: elem.offset()\n\t};\n}\n\n$.position = {\n\tscrollbarWidth: function() {\n\t\tif ( cachedScrollbarWidth !== undefined ) {\n\t\t\treturn cachedScrollbarWidth;\n\t\t}\n\t\tvar w1, w2,\n\t\t\tdiv = $( \"<div style=\" +\n\t\t\t\t\"'display:block;position:absolute;width:200px;height:200px;overflow:hidden;'>\" +\n\t\t\t\t\"<div style='height:300px;width:auto;'></div></div>\" ),\n\t\t\tinnerDiv = div.children()[ 0 ];\n\n\t\t$( \"body\" ).append( div );\n\t\tw1 = innerDiv.offsetWidth;\n\t\tdiv.css( \"overflow\", \"scroll\" );\n\n\t\tw2 = innerDiv.offsetWidth;\n\n\t\tif ( w1 === w2 ) {\n\t\t\tw2 = div[ 0 ].clientWidth;\n\t\t}\n\n\t\tdiv.remove();\n\n\t\treturn ( cachedScrollbarWidth = w1 - w2 );\n\t},\n\tgetScrollInfo: function( within ) {\n\t\tvar overflowX = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-x\" ),\n\t\t\toverflowY = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-y\" ),\n\t\t\thasOverflowX = overflowX === \"scroll\" ||\n\t\t\t\t( overflowX === \"auto\" && within.width < within.element[ 0 ].scrollWidth ),\n\t\t\thasOverflowY = overflowY === \"scroll\" ||\n\t\t\t\t( overflowY === \"auto\" && within.height < within.element[ 0 ].scrollHeight );\n\t\treturn {\n\t\t\twidth: hasOverflowY ? $.position.scrollbarWidth() : 0,\n\t\t\theight: hasOverflowX ? $.position.scrollbarWidth() : 0\n\t\t};\n\t},\n\tgetWithinInfo: function( element ) {\n\t\tvar withinElement = $( element || window ),\n\t\t\tisElemWindow = isWindow( withinElement[ 0 ] ),\n\t\t\tisDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,\n\t\t\thasOffset = !isElemWindow && !isDocument;\n\t\treturn {\n\t\t\telement: withinElement,\n\t\t\tisWindow: isElemWindow,\n\t\t\tisDocument: isDocument,\n\t\t\toffset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },\n\t\t\tscrollLeft: withinElement.scrollLeft(),\n\t\t\tscrollTop: withinElement.scrollTop(),\n\t\t\twidth: withinElement.outerWidth(),\n\t\t\theight: withinElement.outerHeight()\n\t\t};\n\t}\n};\n\n$.fn.position = function( options ) {\n\tif ( !options || !options.of ) {\n\t\treturn _position.apply( this, arguments );\n\t}\n\n\t// Make a copy, we don't want to modify arguments\n\toptions = $.extend( {}, options );\n\n\tvar atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,\n\n\t\t// Make sure string options are treated as CSS selectors\n\t\ttarget = typeof options.of === \"string\" ?\n\t\t\t$( document ).find( options.of ) :\n\t\t\t$( options.of ),\n\n\t\twithin = $.position.getWithinInfo( options.within ),\n\t\tscrollInfo = $.position.getScrollInfo( within ),\n\t\tcollision = ( options.collision || \"flip\" ).split( \" \" ),\n\t\toffsets = {};\n\n\tdimensions = getDimensions( target );\n\tif ( target[ 0 ].preventDefault ) {\n\n\t\t// Force left top to allow flipping\n\t\toptions.at = \"left top\";\n\t}\n\ttargetWidth = dimensions.width;\n\ttargetHeight = dimensions.height;\n\ttargetOffset = dimensions.offset;\n\n\t// Clone to reuse original targetOffset later\n\tbasePosition = $.extend( {}, targetOffset );\n\n\t// Force my and at to have valid horizontal and vertical positions\n\t// if a value is missing or invalid, it will be converted to center\n\t$.each( [ \"my\", \"at\" ], function() {\n\t\tvar pos = ( options[ this ] || \"\" ).split( \" \" ),\n\t\t\thorizontalOffset,\n\t\t\tverticalOffset;\n\n\t\tif ( pos.length === 1 ) {\n\t\t\tpos = rhorizontal.test( pos[ 0 ] ) ?\n\t\t\t\tpos.concat( [ \"center\" ] ) :\n\t\t\t\trvertical.test( pos[ 0 ] ) ?\n\t\t\t\t\t[ \"center\" ].concat( pos ) :\n\t\t\t\t\t[ \"center\", \"center\" ];\n\t\t}\n\t\tpos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : \"center\";\n\t\tpos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : \"center\";\n\n\t\t// Calculate offsets\n\t\thorizontalOffset = roffset.exec( pos[ 0 ] );\n\t\tverticalOffset = roffset.exec( pos[ 1 ] );\n\t\toffsets[ this ] = [\n\t\t\thorizontalOffset ? horizontalOffset[ 0 ] : 0,\n\t\t\tverticalOffset ? verticalOffset[ 0 ] : 0\n\t\t];\n\n\t\t// Reduce to just the positions without the offsets\n\t\toptions[ this ] = [\n\t\t\trposition.exec( pos[ 0 ] )[ 0 ],\n\t\t\trposition.exec( pos[ 1 ] )[ 0 ]\n\t\t];\n\t} );\n\n\t// Normalize collision option\n\tif ( collision.length === 1 ) {\n\t\tcollision[ 1 ] = collision[ 0 ];\n\t}\n\n\tif ( options.at[ 0 ] === \"right\" ) {\n\t\tbasePosition.left += targetWidth;\n\t} else if ( options.at[ 0 ] === \"center\" ) {\n\t\tbasePosition.left += targetWidth / 2;\n\t}\n\n\tif ( options.at[ 1 ] === \"bottom\" ) {\n\t\tbasePosition.top += targetHeight;\n\t} else if ( options.at[ 1 ] === \"center\" ) {\n\t\tbasePosition.top += targetHeight / 2;\n\t}\n\n\tatOffset = getOffsets( offsets.at, targetWidth, targetHeight );\n\tbasePosition.left += atOffset[ 0 ];\n\tbasePosition.top += atOffset[ 1 ];\n\n\treturn this.each( function() {\n\t\tvar collisionPosition, using,\n\t\t\telem = $( this ),\n\t\t\telemWidth = elem.outerWidth(),\n\t\t\telemHeight = elem.outerHeight(),\n\t\t\tmarginLeft = parseCss( this, \"marginLeft\" ),\n\t\t\tmarginTop = parseCss( this, \"marginTop\" ),\n\t\t\tcollisionWidth = elemWidth + marginLeft + parseCss( this, \"marginRight\" ) +\n\t\t\t\tscrollInfo.width,\n\t\t\tcollisionHeight = elemHeight + marginTop + parseCss( this, \"marginBottom\" ) +\n\t\t\t\tscrollInfo.height,\n\t\t\tposition = $.extend( {}, basePosition ),\n\t\t\tmyOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );\n\n\t\tif ( options.my[ 0 ] === \"right\" ) {\n\t\t\tposition.left -= elemWidth;\n\t\t} else if ( options.my[ 0 ] === \"center\" ) {\n\t\t\tposition.left -= elemWidth / 2;\n\t\t}\n\n\t\tif ( options.my[ 1 ] === \"bottom\" ) {\n\t\t\tposition.top -= elemHeight;\n\t\t} else if ( options.my[ 1 ] === \"center\" ) {\n\t\t\tposition.top -= elemHeight / 2;\n\t\t}\n\n\t\tposition.left += myOffset[ 0 ];\n\t\tposition.top += myOffset[ 1 ];\n\n\t\tcollisionPosition = {\n\t\t\tmarginLeft: marginLeft,\n\t\t\tmarginTop: marginTop\n\t\t};\n\n\t\t$.each( [ \"left\", \"top\" ], function( i, dir ) {\n\t\t\tif ( $.ui.position[ collision[ i ] ] ) {\n\t\t\t\t$.ui.position[ collision[ i ] ][ dir ]( position, {\n\t\t\t\t\ttargetWidth: targetWidth,\n\t\t\t\t\ttargetHeight: targetHeight,\n\t\t\t\t\telemWidth: elemWidth,\n\t\t\t\t\telemHeight: elemHeight,\n\t\t\t\t\tcollisionPosition: collisionPosition,\n\t\t\t\t\tcollisionWidth: collisionWidth,\n\t\t\t\t\tcollisionHeight: collisionHeight,\n\t\t\t\t\toffset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],\n\t\t\t\t\tmy: options.my,\n\t\t\t\t\tat: options.at,\n\t\t\t\t\twithin: within,\n\t\t\t\t\telem: elem\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\tif ( options.using ) {\n\n\t\t\t// Adds feedback as second argument to using callback, if present\n\t\t\tusing = function( props ) {\n\t\t\t\tvar left = targetOffset.left - position.left,\n\t\t\t\t\tright = left + targetWidth - elemWidth,\n\t\t\t\t\ttop = targetOffset.top - position.top,\n\t\t\t\t\tbottom = top + targetHeight - elemHeight,\n\t\t\t\t\tfeedback = {\n\t\t\t\t\t\ttarget: {\n\t\t\t\t\t\t\telement: target,\n\t\t\t\t\t\t\tleft: targetOffset.left,\n\t\t\t\t\t\t\ttop: targetOffset.top,\n\t\t\t\t\t\t\twidth: targetWidth,\n\t\t\t\t\t\t\theight: targetHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\telement: {\n\t\t\t\t\t\t\telement: elem,\n\t\t\t\t\t\t\tleft: position.left,\n\t\t\t\t\t\t\ttop: position.top,\n\t\t\t\t\t\t\twidth: elemWidth,\n\t\t\t\t\t\t\theight: elemHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\thorizontal: right < 0 ? \"left\" : left > 0 ? \"right\" : \"center\",\n\t\t\t\t\t\tvertical: bottom < 0 ? \"top\" : top > 0 ? \"bottom\" : \"middle\"\n\t\t\t\t\t};\n\t\t\t\tif ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {\n\t\t\t\t\tfeedback.horizontal = \"center\";\n\t\t\t\t}\n\t\t\t\tif ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {\n\t\t\t\t\tfeedback.vertical = \"middle\";\n\t\t\t\t}\n\t\t\t\tif ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {\n\t\t\t\t\tfeedback.important = \"horizontal\";\n\t\t\t\t} else {\n\t\t\t\t\tfeedback.important = \"vertical\";\n\t\t\t\t}\n\t\t\t\toptions.using.call( this, props, feedback );\n\t\t\t};\n\t\t}\n\n\t\telem.offset( $.extend( position, { using: using } ) );\n\t} );\n};\n\n$.ui.position = {\n\tfit: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\touterWidth = within.width,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = withinOffset - collisionPosLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,\n\t\t\t\tnewOverRight;\n\n\t\t\t// Element is wider than within\n\t\t\tif ( data.collisionWidth > outerWidth ) {\n\n\t\t\t\t// Element is initially over the left side of within\n\t\t\t\tif ( overLeft > 0 && overRight <= 0 ) {\n\t\t\t\t\tnewOverRight = position.left + overLeft + data.collisionWidth - outerWidth -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.left += overLeft - newOverRight;\n\n\t\t\t\t// Element is initially over right side of within\n\t\t\t\t} else if ( overRight > 0 && overLeft <= 0 ) {\n\t\t\t\t\tposition.left = withinOffset;\n\n\t\t\t\t// Element is initially over both left and right sides of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overLeft > overRight ) {\n\t\t\t\t\t\tposition.left = withinOffset + outerWidth - data.collisionWidth;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.left = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far left -> align with left edge\n\t\t\t} else if ( overLeft > 0 ) {\n\t\t\t\tposition.left += overLeft;\n\n\t\t\t// Too far right -> align with right edge\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tposition.left -= overRight;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.left = max( position.left - collisionPosLeft, position.left );\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\touterHeight = data.within.height,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = withinOffset - collisionPosTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,\n\t\t\t\tnewOverBottom;\n\n\t\t\t// Element is taller than within\n\t\t\tif ( data.collisionHeight > outerHeight ) {\n\n\t\t\t\t// Element is initially over the top of within\n\t\t\t\tif ( overTop > 0 && overBottom <= 0 ) {\n\t\t\t\t\tnewOverBottom = position.top + overTop + data.collisionHeight - outerHeight -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.top += overTop - newOverBottom;\n\n\t\t\t\t// Element is initially over bottom of within\n\t\t\t\t} else if ( overBottom > 0 && overTop <= 0 ) {\n\t\t\t\t\tposition.top = withinOffset;\n\n\t\t\t\t// Element is initially over both top and bottom of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overTop > overBottom ) {\n\t\t\t\t\t\tposition.top = withinOffset + outerHeight - data.collisionHeight;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.top = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far up -> align with top\n\t\t\t} else if ( overTop > 0 ) {\n\t\t\t\tposition.top += overTop;\n\n\t\t\t// Too far down -> align with bottom edge\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tposition.top -= overBottom;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.top = max( position.top - collisionPosTop, position.top );\n\t\t\t}\n\t\t}\n\t},\n\tflip: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.left + within.scrollLeft,\n\t\t\t\touterWidth = within.width,\n\t\t\t\toffsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = collisionPosLeft - offsetLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,\n\t\t\t\tmyOffset = data.my[ 0 ] === \"left\" ?\n\t\t\t\t\t-data.elemWidth :\n\t\t\t\t\tdata.my[ 0 ] === \"right\" ?\n\t\t\t\t\t\tdata.elemWidth :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 0 ] === \"left\" ?\n\t\t\t\t\tdata.targetWidth :\n\t\t\t\t\tdata.at[ 0 ] === \"right\" ?\n\t\t\t\t\t\t-data.targetWidth :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 0 ],\n\t\t\t\tnewOverRight,\n\t\t\t\tnewOverLeft;\n\n\t\t\tif ( overLeft < 0 ) {\n\t\t\t\tnewOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -\n\t\t\t\t\touterWidth - withinOffset;\n\t\t\t\tif ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tnewOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +\n\t\t\t\t\tatOffset + offset - offsetLeft;\n\t\t\t\tif ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.top + within.scrollTop,\n\t\t\t\touterHeight = within.height,\n\t\t\t\toffsetTop = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = collisionPosTop - offsetTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,\n\t\t\t\ttop = data.my[ 1 ] === \"top\",\n\t\t\t\tmyOffset = top ?\n\t\t\t\t\t-data.elemHeight :\n\t\t\t\t\tdata.my[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\tdata.elemHeight :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 1 ] === \"top\" ?\n\t\t\t\t\tdata.targetHeight :\n\t\t\t\t\tdata.at[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\t-data.targetHeight :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 1 ],\n\t\t\t\tnewOverTop,\n\t\t\t\tnewOverBottom;\n\t\t\tif ( overTop < 0 ) {\n\t\t\t\tnewOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -\n\t\t\t\t\touterHeight - withinOffset;\n\t\t\t\tif ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tnewOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +\n\t\t\t\t\toffset - offsetTop;\n\t\t\t\tif ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tflipfit: {\n\t\tleft: function() {\n\t\t\t$.ui.position.flip.left.apply( this, arguments );\n\t\t\t$.ui.position.fit.left.apply( this, arguments );\n\t\t},\n\t\ttop: function() {\n\t\t\t$.ui.position.flip.top.apply( this, arguments );\n\t\t\t$.ui.position.fit.top.apply( this, arguments );\n\t\t}\n\t}\n};\n\n} )();\n\nvar position = $.ui.position;\n\n\n/*!\n * jQuery UI :data 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: :data Selector\n//>>group: Core\n//>>description: Selects elements which have data stored under the specified key.\n//>>docs: https://api.jqueryui.com/data-selector/\n\n\nvar data = $.extend( $.expr.pseudos, {\n\tdata: $.expr.createPseudo ?\n\t\t$.expr.createPseudo( function( dataName ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn !!$.data( elem, dataName );\n\t\t\t};\n\t\t} ) :\n\n\t\t// Support: jQuery <1.8\n\t\tfunction( elem, i, match ) {\n\t\t\treturn !!$.data( elem, match[ 3 ] );\n\t\t}\n} );\n\n/*!\n * jQuery UI Disable Selection 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: disableSelection\n//>>group: Core\n//>>description: Disable selection of text content within the set of matched elements.\n//>>docs: https://api.jqueryui.com/disableSelection/\n\n// This file is deprecated\n\nvar disableSelection = $.fn.extend( {\n\tdisableSelection: ( function() {\n\t\tvar eventType = \"onselectstart\" in document.createElement( \"div\" ) ?\n\t\t\t\"selectstart\" :\n\t\t\t\"mousedown\";\n\n\t\treturn function() {\n\t\t\treturn this.on( eventType + \".ui-disableSelection\", function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tenableSelection: function() {\n\t\treturn this.off( \".ui-disableSelection\" );\n\t}\n} );\n\n\n/*!\n * jQuery UI Focusable 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: :focusable Selector\n//>>group: Core\n//>>description: Selects elements which can be focused.\n//>>docs: https://api.jqueryui.com/focusable-selector/\n\n\n// Selectors\n$.ui.focusable = function( element, hasTabindex ) {\n\tvar map, mapName, img, focusableIfVisible, fieldset,\n\t\tnodeName = element.nodeName.toLowerCase();\n\n\tif ( \"area\" === nodeName ) {\n\t\tmap = element.parentNode;\n\t\tmapName = map.name;\n\t\tif ( !element.href || !mapName || map.nodeName.toLowerCase() !== \"map\" ) {\n\t\t\treturn false;\n\t\t}\n\t\timg = $( \"img[usemap='#\" + mapName + \"']\" );\n\t\treturn img.length > 0 && img.is( \":visible\" );\n\t}\n\n\tif ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) {\n\t\tfocusableIfVisible = !element.disabled;\n\n\t\tif ( focusableIfVisible ) {\n\n\t\t\t// Form controls within a disabled fieldset are disabled.\n\t\t\t// However, controls within the fieldset's legend do not get disabled.\n\t\t\t// Since controls generally aren't placed inside legends, we skip\n\t\t\t// this portion of the check.\n\t\t\tfieldset = $( element ).closest( \"fieldset\" )[ 0 ];\n\t\t\tif ( fieldset ) {\n\t\t\t\tfocusableIfVisible = !fieldset.disabled;\n\t\t\t}\n\t\t}\n\t} else if ( \"a\" === nodeName ) {\n\t\tfocusableIfVisible = element.href || hasTabindex;\n\t} else {\n\t\tfocusableIfVisible = hasTabindex;\n\t}\n\n\treturn focusableIfVisible && $( element ).is( \":visible\" ) && visible( $( element ) );\n};\n\n// Support: IE 8 only\n// IE 8 doesn't resolve inherit to visible/hidden for computed values\nfunction visible( element ) {\n\tvar visibility = element.css( \"visibility\" );\n\twhile ( visibility === \"inherit\" ) {\n\t\telement = element.parent();\n\t\tvisibility = element.css( \"visibility\" );\n\t}\n\treturn visibility === \"visible\";\n}\n\n$.extend( $.expr.pseudos, {\n\tfocusable: function( element ) {\n\t\treturn $.ui.focusable( element, $.attr( element, \"tabindex\" ) != null );\n\t}\n} );\n\nvar focusable = $.ui.focusable;\n\n\n\n// Support: IE8 Only\n// IE8 does not support the form attribute and when it is supplied. It overwrites the form prop\n// with a string, so we need to find the proper form.\nvar form = $.fn._form = function() {\n\treturn typeof this[ 0 ].form === \"string\" ? this.closest( \"form\" ) : $( this[ 0 ].form );\n};\n\n\n/*!\n * jQuery UI Form Reset Mixin 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Form Reset Mixin\n//>>group: Core\n//>>description: Refresh input widgets when their form is reset\n//>>docs: https://api.jqueryui.com/form-reset-mixin/\n\n\nvar formResetMixin = $.ui.formResetMixin = {\n\t_formResetHandler: function() {\n\t\tvar form = $( this );\n\n\t\t// Wait for the form reset to actually happen before refreshing\n\t\tsetTimeout( function() {\n\t\t\tvar instances = form.data( \"ui-form-reset-instances\" );\n\t\t\t$.each( instances, function() {\n\t\t\t\tthis.refresh();\n\t\t\t} );\n\t\t} );\n\t},\n\n\t_bindFormResetHandler: function() {\n\t\tthis.form = this.element._form();\n\t\tif ( !this.form.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar instances = this.form.data( \"ui-form-reset-instances\" ) || [];\n\t\tif ( !instances.length ) {\n\n\t\t\t// We don't use _on() here because we use a single event handler per form\n\t\t\tthis.form.on( \"reset.ui-form-reset\", this._formResetHandler );\n\t\t}\n\t\tinstances.push( this );\n\t\tthis.form.data( \"ui-form-reset-instances\", instances );\n\t},\n\n\t_unbindFormResetHandler: function() {\n\t\tif ( !this.form.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar instances = this.form.data( \"ui-form-reset-instances\" );\n\t\tinstances.splice( $.inArray( this, instances ), 1 );\n\t\tif ( instances.length ) {\n\t\t\tthis.form.data( \"ui-form-reset-instances\", instances );\n\t\t} else {\n\t\t\tthis.form\n\t\t\t\t.removeData( \"ui-form-reset-instances\" )\n\t\t\t\t.off( \"reset.ui-form-reset\" );\n\t\t}\n\t}\n};\n\n\n/*!\n * jQuery UI Support for jQuery core 1.8.x and newer 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n *\n */\n\n//>>label: jQuery 1.8+ Support\n//>>group: Core\n//>>description: Support version 1.8.x and newer of jQuery core\n\n\n// Support: jQuery 1.9.x or older\n// $.expr[ \":\" ] is deprecated.\nif ( !$.expr.pseudos ) {\n\t$.expr.pseudos = $.expr[ \":\" ];\n}\n\n// Support: jQuery 1.11.x or older\n// $.unique has been renamed to $.uniqueSort\nif ( !$.uniqueSort ) {\n\t$.uniqueSort = $.unique;\n}\n\n// Support: jQuery 2.2.x or older.\n// This method has been defined in jQuery 3.0.0.\n// Code from https://github.com/jquery/jquery/blob/e539bac79e666bba95bba86d690b4e609dca2286/src/selector/escapeSelector.js\nif ( !$.escapeSelector ) {\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tvar fcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t};\n\n\t$.escapeSelector = function( sel ) {\n\t\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n\t};\n}\n\n// Support: jQuery 3.4.x or older\n// These methods have been defined in jQuery 3.5.0.\nif ( !$.fn.even || !$.fn.odd ) {\n\t$.fn.extend( {\n\t\teven: function() {\n\t\t\treturn this.filter( function( i ) {\n\t\t\t\treturn i % 2 === 0;\n\t\t\t} );\n\t\t},\n\t\todd: function() {\n\t\t\treturn this.filter( function( i ) {\n\t\t\t\treturn i % 2 === 1;\n\t\t\t} );\n\t\t}\n\t} );\n}\n\n;\n/*!\n * jQuery UI Keycode 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Keycode\n//>>group: Core\n//>>description: Provide keycodes as keynames\n//>>docs: https://api.jqueryui.com/jQuery.ui.keyCode/\n\n\nvar keycode = $.ui.keyCode = {\n\tBACKSPACE: 8,\n\tCOMMA: 188,\n\tDELETE: 46,\n\tDOWN: 40,\n\tEND: 35,\n\tENTER: 13,\n\tESCAPE: 27,\n\tHOME: 36,\n\tLEFT: 37,\n\tPAGE_DOWN: 34,\n\tPAGE_UP: 33,\n\tPERIOD: 190,\n\tRIGHT: 39,\n\tSPACE: 32,\n\tTAB: 9,\n\tUP: 38\n};\n\n\n/*!\n * jQuery UI Labels 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: labels\n//>>group: Core\n//>>description: Find all the labels associated with a given input\n//>>docs: https://api.jqueryui.com/labels/\n\n\nvar labels = $.fn.labels = function() {\n\tvar ancestor, selector, id, labels, ancestors;\n\n\tif ( !this.length ) {\n\t\treturn this.pushStack( [] );\n\t}\n\n\t// Check control.labels first\n\tif ( this[ 0 ].labels && this[ 0 ].labels.length ) {\n\t\treturn this.pushStack( this[ 0 ].labels );\n\t}\n\n\t// Support: IE <= 11, FF <= 37, Android <= 2.3 only\n\t// Above browsers do not support control.labels. Everything below is to support them\n\t// as well as document fragments. control.labels does not work on document fragments\n\tlabels = this.eq( 0 ).parents( \"label\" );\n\n\t// Look for the label based on the id\n\tid = this.attr( \"id\" );\n\tif ( id ) {\n\n\t\t// We don't search against the document in case the element\n\t\t// is disconnected from the DOM\n\t\tancestor = this.eq( 0 ).parents().last();\n\n\t\t// Get a full set of top level ancestors\n\t\tancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() );\n\n\t\t// Create a selector for the label based on the id\n\t\tselector = \"label[for='\" + $.escapeSelector( id ) + \"']\";\n\n\t\tlabels = labels.add( ancestors.find( selector ).addBack( selector ) );\n\n\t}\n\n\t// Return whatever we have found for labels\n\treturn this.pushStack( labels );\n};\n\n\n/*!\n * jQuery UI Scroll Parent 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: scrollParent\n//>>group: Core\n//>>description: Get the closest ancestor element that is scrollable.\n//>>docs: https://api.jqueryui.com/scrollParent/\n\n\nvar scrollParent = $.fn.scrollParent = function( includeHidden ) {\n\tvar position = this.css( \"position\" ),\n\t\texcludeStaticParent = position === \"absolute\",\n\t\toverflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\n\t\tscrollParent = this.parents().filter( function() {\n\t\t\tvar parent = $( this );\n\t\t\tif ( excludeStaticParent && parent.css( \"position\" ) === \"static\" ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn overflowRegex.test( parent.css( \"overflow\" ) + parent.css( \"overflow-y\" ) +\n\t\t\t\tparent.css( \"overflow-x\" ) );\n\t\t} ).eq( 0 );\n\n\treturn position === \"fixed\" || !scrollParent.length ?\n\t\t$( this[ 0 ].ownerDocument || document ) :\n\t\tscrollParent;\n};\n\n\n/*!\n * jQuery UI Tabbable 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: :tabbable Selector\n//>>group: Core\n//>>description: Selects elements which can be tabbed to.\n//>>docs: https://api.jqueryui.com/tabbable-selector/\n\n\nvar tabbable = $.extend( $.expr.pseudos, {\n\ttabbable: function( element ) {\n\t\tvar tabIndex = $.attr( element, \"tabindex\" ),\n\t\t\thasTabindex = tabIndex != null;\n\t\treturn ( !hasTabindex || tabIndex >= 0 ) && $.ui.focusable( element, hasTabindex );\n\t}\n} );\n\n\n/*!\n * jQuery UI Unique ID 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: uniqueId\n//>>group: Core\n//>>description: Functions to generate and remove uniqueId's\n//>>docs: https://api.jqueryui.com/uniqueId/\n\n\nvar uniqueId = $.fn.extend( {\n\tuniqueId: ( function() {\n\t\tvar uuid = 0;\n\n\t\treturn function() {\n\t\t\treturn this.each( function() {\n\t\t\t\tif ( !this.id ) {\n\t\t\t\t\tthis.id = \"ui-id-\" + ( ++uuid );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tremoveUniqueId: function() {\n\t\treturn this.each( function() {\n\t\t\tif ( /^ui-id-\\d+$/.test( this.id ) ) {\n\t\t\t\t$( this ).removeAttr( \"id\" );\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\n\n// This file is deprecated\nvar ie = $.ui.ie = !!/msie [\\w.]+/.exec( navigator.userAgent.toLowerCase() );\n\n/*!\n * jQuery UI Mouse 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Mouse\n//>>group: Widgets\n//>>description: Abstracts mouse-based interactions to assist in creating certain widgets.\n//>>docs: https://api.jqueryui.com/mouse/\n\n\nvar mouseHandled = false;\n$( document ).on( \"mouseup\", function() {\n\tmouseHandled = false;\n} );\n\nvar widgetsMouse = $.widget( \"ui.mouse\", {\n\tversion: \"1.13.3\",\n\toptions: {\n\t\tcancel: \"input, textarea, button, select, option\",\n\t\tdistance: 1,\n\t\tdelay: 0\n\t},\n\t_mouseInit: function() {\n\t\tvar that = this;\n\n\t\tthis.element\n\t\t\t.on( \"mousedown.\" + this.widgetName, function( event ) {\n\t\t\t\treturn that._mouseDown( event );\n\t\t\t} )\n\t\t\t.on( \"click.\" + this.widgetName, function( event ) {\n\t\t\t\tif ( true === $.data( event.target, that.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t\t\t$.removeData( event.target, that.widgetName + \".preventClickEvent\" );\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.started = false;\n\t},\n\n\t// TODO: make sure destroying one instance of mouse doesn't mess with\n\t// other instances of mouse\n\t_mouseDestroy: function() {\n\t\tthis.element.off( \".\" + this.widgetName );\n\t\tif ( this._mouseMoveDelegate ) {\n\t\t\tthis.document\n\t\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\t\t}\n\t},\n\n\t_mouseDown: function( event ) {\n\n\t\t// don't let more than one widget handle mouseStart\n\t\tif ( mouseHandled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._mouseMoved = false;\n\n\t\t// We may have missed mouseup (out of window)\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseUp( event );\n\t\t}\n\n\t\tthis._mouseDownEvent = event;\n\n\t\tvar that = this,\n\t\t\tbtnIsLeft = ( event.which === 1 ),\n\n\t\t\t// event.target.nodeName works around a bug in IE 8 with\n\t\t\t// disabled inputs (#7620)\n\t\t\telIsCancel = ( typeof this.options.cancel === \"string\" && event.target.nodeName ?\n\t\t\t\t$( event.target ).closest( this.options.cancel ).length : false );\n\t\tif ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.mouseDelayMet = !this.options.delay;\n\t\tif ( !this.mouseDelayMet ) {\n\t\t\tthis._mouseDelayTimer = setTimeout( function() {\n\t\t\t\tthat.mouseDelayMet = true;\n\t\t\t}, this.options.delay );\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted = ( this._mouseStart( event ) !== false );\n\t\t\tif ( !this._mouseStarted ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Click event may never have fired (Gecko & Opera)\n\t\tif ( true === $.data( event.target, this.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t$.removeData( event.target, this.widgetName + \".preventClickEvent\" );\n\t\t}\n\n\t\t// These delegates are required to keep context\n\t\tthis._mouseMoveDelegate = function( event ) {\n\t\t\treturn that._mouseMove( event );\n\t\t};\n\t\tthis._mouseUpDelegate = function( event ) {\n\t\t\treturn that._mouseUp( event );\n\t\t};\n\n\t\tthis.document\n\t\t\t.on( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.on( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tevent.preventDefault();\n\n\t\tmouseHandled = true;\n\t\treturn true;\n\t},\n\n\t_mouseMove: function( event ) {\n\n\t\t// Only check for mouseups outside the document if you've moved inside the document\n\t\t// at least once. This prevents the firing of mouseup in the case of IE<9, which will\n\t\t// fire a mousemove event if content is placed under the cursor. See #7778\n\t\t// Support: IE <9\n\t\tif ( this._mouseMoved ) {\n\n\t\t\t// IE mouseup check - mouseup happened when mouse was out of window\n\t\t\tif ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) &&\n\t\t\t\t\t!event.button ) {\n\t\t\t\treturn this._mouseUp( event );\n\n\t\t\t// Iframe mouseup check - mouseup occurred in another document\n\t\t\t} else if ( !event.which ) {\n\n\t\t\t\t// Support: Safari <=8 - 9\n\t\t\t\t// Safari sets which to 0 if you press any of the following keys\n\t\t\t\t// during a drag (#14461)\n\t\t\t\tif ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||\n\t\t\t\t\t\tevent.originalEvent.metaKey || event.originalEvent.shiftKey ) {\n\t\t\t\t\tthis.ignoreMissingWhich = true;\n\t\t\t\t} else if ( !this.ignoreMissingWhich ) {\n\t\t\t\t\treturn this._mouseUp( event );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( event.which || event.button ) {\n\t\t\tthis._mouseMoved = true;\n\t\t}\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseDrag( event );\n\t\t\treturn event.preventDefault();\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted =\n\t\t\t\t( this._mouseStart( this._mouseDownEvent, event ) !== false );\n\t\t\tif ( this._mouseStarted ) {\n\t\t\t\tthis._mouseDrag( event );\n\t\t\t} else {\n\t\t\t\tthis._mouseUp( event );\n\t\t\t}\n\t\t}\n\n\t\treturn !this._mouseStarted;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis.document\n\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseStarted = false;\n\n\t\t\tif ( event.target === this._mouseDownEvent.target ) {\n\t\t\t\t$.data( event.target, this.widgetName + \".preventClickEvent\", true );\n\t\t\t}\n\n\t\t\tthis._mouseStop( event );\n\t\t}\n\n\t\tif ( this._mouseDelayTimer ) {\n\t\t\tclearTimeout( this._mouseDelayTimer );\n\t\t\tdelete this._mouseDelayTimer;\n\t\t}\n\n\t\tthis.ignoreMissingWhich = false;\n\t\tmouseHandled = false;\n\t\tevent.preventDefault();\n\t},\n\n\t_mouseDistanceMet: function( event ) {\n\t\treturn ( Math.max(\n\t\t\t\tMath.abs( this._mouseDownEvent.pageX - event.pageX ),\n\t\t\t\tMath.abs( this._mouseDownEvent.pageY - event.pageY )\n\t\t\t) >= this.options.distance\n\t\t);\n\t},\n\n\t_mouseDelayMet: function( /* event */ ) {\n\t\treturn this.mouseDelayMet;\n\t},\n\n\t// These are placeholder methods, to be overriden by extending plugin\n\t_mouseStart: function( /* event */ ) {},\n\t_mouseDrag: function( /* event */ ) {},\n\t_mouseStop: function( /* event */ ) {},\n\t_mouseCapture: function( /* event */ ) {\n\t\treturn true;\n\t}\n} );\n\n\n\n// $.ui.plugin is deprecated. Use $.widget() extensions instead.\nvar plugin = $.ui.plugin = {\n\tadd: function( module, option, set ) {\n\t\tvar i,\n\t\t\tproto = $.ui[ module ].prototype;\n\t\tfor ( i in set ) {\n\t\t\tproto.plugins[ i ] = proto.plugins[ i ] || [];\n\t\t\tproto.plugins[ i ].push( [ option, set[ i ] ] );\n\t\t}\n\t},\n\tcall: function( instance, name, args, allowDisconnected ) {\n\t\tvar i,\n\t\t\tset = instance.plugins[ name ];\n\n\t\tif ( !set ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !allowDisconnected && ( !instance.element[ 0 ].parentNode ||\n\t\t\t\tinstance.element[ 0 ].parentNode.nodeType === 11 ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor ( i = 0; i < set.length; i++ ) {\n\t\t\tif ( instance.options[ set[ i ][ 0 ] ] ) {\n\t\t\t\tset[ i ][ 1 ].apply( instance.element, args );\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n\nvar safeActiveElement = $.ui.safeActiveElement = function( document ) {\n\tvar activeElement;\n\n\t// Support: IE 9 only\n\t// IE9 throws an \"Unspecified error\" accessing document.activeElement from an <iframe>\n\ttry {\n\t\tactiveElement = document.activeElement;\n\t} catch ( error ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE may return null instead of an element\n\t// Interestingly, this only seems to occur when NOT in an iframe\n\tif ( !activeElement ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 11 only\n\t// IE11 returns a seemingly empty object in some cases when accessing\n\t// document.activeElement from an <iframe>\n\tif ( !activeElement.nodeName ) {\n\t\tactiveElement = document.body;\n\t}\n\n\treturn activeElement;\n};\n\n\n\nvar safeBlur = $.ui.safeBlur = function( element ) {\n\n\t// Support: IE9 - 10 only\n\t// If the <body> is blurred, IE will switch windows, see #9420\n\tif ( element && element.nodeName.toLowerCase() !== \"body\" ) {\n\t\t$( element ).trigger( \"blur\" );\n\t}\n};\n\n\n/*!\n * jQuery UI Draggable 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Draggable\n//>>group: Interactions\n//>>description: Enables dragging functionality for any element.\n//>>docs: https://api.jqueryui.com/draggable/\n//>>demos: https://jqueryui.com/draggable/\n//>>css.structure: ../../themes/base/draggable.css\n\n\n$.widget( \"ui.draggable\", $.ui.mouse, {\n\tversion: \"1.13.3\",\n\twidgetEventPrefix: \"drag\",\n\toptions: {\n\t\taddClasses: true,\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectToSortable: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\tiframeFix: false,\n\t\topacity: false,\n\t\trefreshPositions: false,\n\t\trevert: false,\n\t\trevertDuration: 500,\n\t\tscope: \"default\",\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tsnap: false,\n\t\tsnapMode: \"both\",\n\t\tsnapTolerance: 20,\n\t\tstack: false,\n\t\tzIndex: false,\n\n\t\t// Callbacks\n\t\tdrag: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\t_create: function() {\n\n\t\tif ( this.options.helper === \"original\" ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\t\tif ( this.options.addClasses ) {\n\t\t\tthis._addClass( \"ui-draggable\" );\n\t\t}\n\t\tthis._setHandleClassName();\n\n\t\tthis._mouseInit();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._removeHandleClassName();\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tif ( ( this.helper || this.element ).is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis.destroyOnClear = true;\n\t\t\treturn;\n\t\t}\n\t\tthis._removeHandleClassName();\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar o = this.options;\n\n\t\t// Among others, prevent a drag on a resizable-handle\n\t\tif ( this.helper || o.disabled ||\n\t\t\t\t$( event.target ).closest( \".ui-resizable-handle\" ).length > 0 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//Quit if we're not on a valid handle\n\t\tthis.handle = this._getHandle( event );\n\t\tif ( !this.handle ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._blurActiveElement( event );\n\n\t\tthis._blockFrames( o.iframeFix === true ? \"iframe\" : o.iframeFix );\n\n\t\treturn true;\n\n\t},\n\n\t_blockFrames: function( selector ) {\n\t\tthis.iframeBlocks = this.document.find( selector ).map( function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css( \"position\", \"absolute\" )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.outerWidth( iframe.outerWidth() )\n\t\t\t\t.outerHeight( iframe.outerHeight() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t} );\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_blurActiveElement: function( event ) {\n\t\tvar activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),\n\t\t\ttarget = $( event.target );\n\n\t\t// Don't blur if the event occurred on an element that is within\n\t\t// the currently focused element\n\t\t// See #10527, #12472\n\t\tif ( target.closest( activeElement ).length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Blur any element that currently has focus, see #4261\n\t\t$.ui.safeBlur( activeElement );\n\t},\n\n\t_mouseStart: function( event ) {\n\n\t\tvar o = this.options;\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\tthis._addClass( this.helper, \"ui-draggable-dragging\" );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//If ddmanager is used for droppables, set the global draggable\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Store the helper's css position\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\t\tthis.scrollParent = this.helper.scrollParent( true );\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tthis.hasFixedAncestor = this.helper.parents().filter( function() {\n\t\t\t\treturn $( this ).css( \"position\" ) === \"fixed\";\n\t\t\t} ).length > 0;\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.positionAbs = this.element.offset();\n\t\tthis._refreshOffsets( event );\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this.position = this._generatePosition( event, false );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\tif ( o.cursorAt ) {\n\t\t\tthis._adjustOffsetFromHelper( o.cursorAt );\n\t\t}\n\n\t\t//Set a containment if given in the options\n\t\tthis._setContainment();\n\n\t\t//Trigger event + callbacks\n\t\tif ( this._trigger( \"start\", event ) === false ) {\n\t\t\tthis._clear();\n\t\t\treturn false;\n\t\t}\n\n\t\t//Recache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//Prepare the droppable offsets\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\t// Execute the drag once - this causes the helper not to be visible before getting its\n\t\t// correct position\n\t\tthis._mouseDrag( event, true );\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has started\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStart( this, event );\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t_refreshOffsets: function( event ) {\n\t\tthis.offset = {\n\t\t\ttop: this.positionAbs.top - this.margins.top,\n\t\t\tleft: this.positionAbs.left - this.margins.left,\n\t\t\tscroll: false,\n\t\t\tparent: this._getParentOffset(),\n\t\t\trelative: this._getRelativeOffset()\n\t\t};\n\n\t\tthis.offset.click = {\n\t\t\tleft: event.pageX - this.offset.left,\n\t\t\ttop: event.pageY - this.offset.top\n\t\t};\n\t},\n\n\t_mouseDrag: function( event, noPropagation ) {\n\n\t\t// reset any necessary cached properties (see #5009)\n\t\tif ( this.hasFixedAncestor ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event, true );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Call plugins and callbacks and use the resulting position if something is returned\n\t\tif ( !noPropagation ) {\n\t\t\tvar ui = this._uiHash();\n\t\t\tif ( this._trigger( \"drag\", event, ui ) === false ) {\n\t\t\t\tthis._mouseUp( new $.Event( \"mouseup\", event ) );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.position = ui.position;\n\t\t}\n\n\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tvar that = this,\n\t\t\tdropped = false;\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\tdropped = $.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\t//if a drop comes from outside (a sortable)\n\t\tif ( this.dropped ) {\n\t\t\tdropped = this.dropped;\n\t\t\tthis.dropped = false;\n\t\t}\n\n\t\tif ( ( this.options.revert === \"invalid\" && !dropped ) ||\n\t\t\t\t( this.options.revert === \"valid\" && dropped ) ||\n\t\t\t\tthis.options.revert === true || ( typeof this.options.revert === \"function\" &&\n\t\t\t\tthis.options.revert.call( this.element, dropped ) )\n\t\t) {\n\t\t\t$( this.helper ).animate(\n\t\t\t\tthis.originalPosition,\n\t\t\t\tparseInt( this.options.revertDuration, 10 ),\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( that._trigger( \"stop\", event ) !== false ) {\n\t\t\t\t\t\tthat._clear();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tif ( this._trigger( \"stop\", event ) !== false ) {\n\t\t\t\tthis._clear();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis._unblockFrames();\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has stopped\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStop( this, event );\n\t\t}\n\n\t\t// Only need to focus if the event occurred on the draggable itself, see #10527\n\t\tif ( this.handleElement.is( event.target ) ) {\n\n\t\t\t// The interaction is over; whether or not the click resulted in a drag,\n\t\t\t// focus the element\n\t\t\tthis.element.trigger( \"focus\" );\n\t\t}\n\n\t\treturn $.ui.mouse.prototype._mouseUp.call( this, event );\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.helper.is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: this.element[ 0 ] } ) );\n\t\t} else {\n\t\t\tthis._clear();\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t_getHandle: function( event ) {\n\t\treturn this.options.handle ?\n\t\t\t!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :\n\t\t\ttrue;\n\t},\n\n\t_setHandleClassName: function() {\n\t\tthis.handleElement = this.options.handle ?\n\t\t\tthis.element.find( this.options.handle ) : this.element;\n\t\tthis._addClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_removeHandleClassName: function() {\n\t\tthis._removeClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelperIsFunction = typeof o.helper === \"function\",\n\t\t\thelper = helperIsFunction ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ?\n\t\t\t\t\tthis.element.clone().removeAttr( \"id\" ) :\n\t\t\t\t\tthis.element );\n\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\thelper.appendTo( ( o.appendTo === \"parent\" ?\n\t\t\t\tthis.element[ 0 ].parentNode :\n\t\t\t\to.appendTo ) );\n\t\t}\n\n\t\t// https://bugs.jqueryui.com/ticket/9446\n\t\t// a helper function can return the original element\n\t\t// which wouldn't have been set to relative in _create\n\t\tif ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\n\t\tif ( helper[ 0 ] !== this.element[ 0 ] &&\n\t\t\t\t!( /(fixed|absolute)/ ).test( helper.css( \"position\" ) ) ) {\n\t\t\thelper.css( \"position\", \"absolute\" );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_setPositionRelative: function() {\n\t\tif ( !( /^(?:r|a|f)/ ).test( this.element.css( \"position\" ) ) ) {\n\t\t\tthis.element[ 0 ].style.position = \"relative\";\n\t\t}\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( Array.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_isRootNode: function( element ) {\n\t\treturn ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tvar po = this.offsetParent.offset(),\n\t\t\tdocument = this.document[ 0 ];\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== document &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\tif ( this._isRootNode( this.offsetParent[ 0 ] ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\t\tif ( this.cssPosition !== \"relative\" ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\tvar p = this.element.position(),\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),\n\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )\n\t\t};\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.element.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.element.css( \"marginTop\" ), 10 ) || 0 ),\n\t\t\tright: ( parseInt( this.element.css( \"marginRight\" ), 10 ) || 0 ),\n\t\t\tbottom: ( parseInt( this.element.css( \"marginBottom\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar isUserScrollable, c, ce,\n\t\t\to = this.options,\n\t\t\tdocument = this.document[ 0 ];\n\n\t\tthis.relativeContainer = null;\n\n\t\tif ( !o.containment ) {\n\t\t\tthis.containment = null;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\t$( window ).scrollLeft() + $( window ).width() -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\t$( window ).scrollTop() +\n\t\t\t\t\t( $( window ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"document\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t$( document ).width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( $( document ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment.constructor === Array ) {\n\t\t\tthis.containment = o.containment;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\n\t\tc = $( o.containment );\n\t\tce = c[ 0 ];\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tisUserScrollable = /(scroll|auto)/.test( c.css( \"overflow\" ) );\n\n\t\tthis.containment = [\n\t\t\t( parseInt( c.css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingLeft\" ), 10 ) || 0 ),\n\t\t\t( parseInt( c.css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingTop\" ), 10 ) || 0 ),\n\t\t\t( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t( parseInt( c.css( \"borderRightWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.width -\n\t\t\t\tthis.margins.left -\n\t\t\t\tthis.margins.right,\n\t\t\t( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t( parseInt( c.css( \"borderBottomWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.height -\n\t\t\t\tthis.margins.top -\n\t\t\t\tthis.margins.bottom\n\t\t];\n\t\tthis.relativeContainer = c;\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event, constrainPosition ) {\n\n\t\tvar containment, co, top, left,\n\t\t\to = this.options,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY;\n\n\t\t// Cache the scroll\n\t\tif ( !scrollIsRootNode || !this.offset.scroll ) {\n\t\t\tthis.offset.scroll = {\n\t\t\t\ttop: this.scrollParent.scrollTop(),\n\t\t\t\tleft: this.scrollParent.scrollLeft()\n\t\t\t};\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\t// If we are not dragging yet, we won't check for options\n\t\tif ( constrainPosition ) {\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( this.relativeContainer ) {\n\t\t\t\t\tco = this.relativeContainer.offset();\n\t\t\t\t\tcontainment = [\n\t\t\t\t\t\tthis.containment[ 0 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 1 ] + co.top,\n\t\t\t\t\t\tthis.containment[ 2 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 3 ] + co.top\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcontainment = this.containment;\n\t\t\t\t}\n\n\t\t\t\tif ( event.pageX - this.offset.click.left < containment[ 0 ] ) {\n\t\t\t\t\tpageX = containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < containment[ 1 ] ) {\n\t\t\t\t\tpageY = containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > containment[ 2 ] ) {\n\t\t\t\t\tpageX = containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > containment[ 3 ] ) {\n\t\t\t\t\tpageY = containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\n\t\t\t\t//Check for grid elements set to 0 to prevent divide by 0 error causing invalid\n\t\t\t\t// argument errors in IE (see ticket #6950)\n\t\t\t\ttop = o.grid[ 1 ] ? this.originalPageY + Math.round( ( pageY -\n\t\t\t\t\tthis.originalPageY ) / o.grid[ 1 ] ) * o.grid[ 1 ] : this.originalPageY;\n\t\t\t\tpageY = containment ? ( ( top - this.offset.click.top >= containment[ 1 ] ||\n\t\t\t\t\ttop - this.offset.click.top > containment[ 3 ] ) ?\n\t\t\t\t\t\ttop :\n\t\t\t\t\t\t( ( top - this.offset.click.top >= containment[ 1 ] ) ?\n\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : top;\n\n\t\t\t\tleft = o.grid[ 0 ] ? this.originalPageX +\n\t\t\t\t\tMath.round( ( pageX - this.originalPageX ) / o.grid[ 0 ] ) * o.grid[ 0 ] :\n\t\t\t\t\tthis.originalPageX;\n\t\t\t\tpageX = containment ? ( ( left - this.offset.click.left >= containment[ 0 ] ||\n\t\t\t\t\tleft - this.offset.click.left > containment[ 2 ] ) ?\n\t\t\t\t\t\tleft :\n\t\t\t\t\t\t( ( left - this.offset.click.left >= containment[ 0 ] ) ?\n\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : left;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"y\" ) {\n\t\t\t\tpageX = this.originalPageX;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"x\" ) {\n\t\t\t\tpageY = this.originalPageY;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_clear: function() {\n\t\tthis._removeClass( this.helper, \"ui-draggable-dragging\" );\n\t\tif ( this.helper[ 0 ] !== this.element[ 0 ] && !this.cancelHelperRemoval ) {\n\t\t\tthis.helper.remove();\n\t\t}\n\t\tthis.helper = null;\n\t\tthis.cancelHelperRemoval = false;\n\t\tif ( this.destroyOnClear ) {\n\t\t\tthis.destroy();\n\t\t}\n\t},\n\n\t// From now on bulk stuff - mainly helpers\n\n\t_trigger: function( type, event, ui ) {\n\t\tui = ui || this._uiHash();\n\t\t$.ui.plugin.call( this, type, [ event, ui, this ], true );\n\n\t\t// Absolute position and offset (see #6884 ) have to be recalculated after plugins\n\t\tif ( /^(drag|start|stop)/.test( type ) ) {\n\t\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\t\t\tui.offset = this.positionAbs;\n\t\t}\n\t\treturn $.Widget.prototype._trigger.call( this, type, event, ui );\n\t},\n\n\tplugins: {},\n\n\t_uiHash: function() {\n\t\treturn {\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\toriginalPosition: this.originalPosition,\n\t\t\toffset: this.positionAbs\n\t\t};\n\t}\n\n} );\n\n$.ui.plugin.add( \"draggable\", \"connectToSortable\", {\n\tstart: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.sortables = [];\n\t\t$( draggable.options.connectToSortable ).each( function() {\n\t\t\tvar sortable = $( this ).sortable( \"instance\" );\n\n\t\t\tif ( sortable && !sortable.options.disabled ) {\n\t\t\t\tdraggable.sortables.push( sortable );\n\n\t\t\t\t// RefreshPositions is called at drag start to refresh the containerCache\n\t\t\t\t// which is used in drag. This ensures it's initialized and synchronized\n\t\t\t\t// with any changes that might have happened on the page since initialization.\n\t\t\t\tsortable.refreshPositions();\n\t\t\t\tsortable._trigger( \"activate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tstop: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.cancelHelperRemoval = false;\n\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar sortable = this;\n\n\t\t\tif ( sortable.isOver ) {\n\t\t\t\tsortable.isOver = 0;\n\n\t\t\t\t// Allow this sortable to handle removing the helper\n\t\t\t\tdraggable.cancelHelperRemoval = true;\n\t\t\t\tsortable.cancelHelperRemoval = false;\n\n\t\t\t\t// Use _storedCSS To restore properties in the sortable,\n\t\t\t\t// as this also handles revert (#9675) since the draggable\n\t\t\t\t// may have modified them in unexpected ways (#8809)\n\t\t\t\tsortable._storedCSS = {\n\t\t\t\t\tposition: sortable.placeholder.css( \"position\" ),\n\t\t\t\t\ttop: sortable.placeholder.css( \"top\" ),\n\t\t\t\t\tleft: sortable.placeholder.css( \"left\" )\n\t\t\t\t};\n\n\t\t\t\tsortable._mouseStop( event );\n\n\t\t\t\t// Once drag has ended, the sortable should return to using\n\t\t\t\t// its original helper, not the shared helper from draggable\n\t\t\t\tsortable.options.helper = sortable.options._helper;\n\t\t\t} else {\n\n\t\t\t\t// Prevent this Sortable from removing the helper.\n\t\t\t\t// However, don't set the draggable to remove the helper\n\t\t\t\t// either as another connected Sortable may yet handle the removal.\n\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\tsortable._trigger( \"deactivate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tdrag: function( event, ui, draggable ) {\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar innermostIntersecting = false,\n\t\t\t\tsortable = this;\n\n\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\tsortable.positionAbs = draggable.positionAbs;\n\t\t\tsortable.helperProportions = draggable.helperProportions;\n\t\t\tsortable.offset.click = draggable.offset.click;\n\n\t\t\tif ( sortable._intersectsWith( sortable.containerCache ) ) {\n\t\t\t\tinnermostIntersecting = true;\n\n\t\t\t\t$.each( draggable.sortables, function() {\n\n\t\t\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\t\t\tthis.positionAbs = draggable.positionAbs;\n\t\t\t\t\tthis.helperProportions = draggable.helperProportions;\n\t\t\t\t\tthis.offset.click = draggable.offset.click;\n\n\t\t\t\t\tif ( this !== sortable &&\n\t\t\t\t\t\t\tthis._intersectsWith( this.containerCache ) &&\n\t\t\t\t\t\t\t$.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {\n\t\t\t\t\t\tinnermostIntersecting = false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn innermostIntersecting;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( innermostIntersecting ) {\n\n\t\t\t\t// If it intersects, we use a little isOver variable and set it once,\n\t\t\t\t// so that the move-in stuff gets fired only once.\n\t\t\t\tif ( !sortable.isOver ) {\n\t\t\t\t\tsortable.isOver = 1;\n\n\t\t\t\t\t// Store draggable's parent in case we need to reappend to it later.\n\t\t\t\t\tdraggable._parent = ui.helper.parent();\n\n\t\t\t\t\tsortable.currentItem = ui.helper\n\t\t\t\t\t\t.appendTo( sortable.element )\n\t\t\t\t\t\t.data( \"ui-sortable-item\", true );\n\n\t\t\t\t\t// Store helper option to later restore it\n\t\t\t\t\tsortable.options._helper = sortable.options.helper;\n\n\t\t\t\t\tsortable.options.helper = function() {\n\t\t\t\t\t\treturn ui.helper[ 0 ];\n\t\t\t\t\t};\n\n\t\t\t\t\t// Fire the start events of the sortable with our passed browser event,\n\t\t\t\t\t// and our own helper (so it doesn't create a new one)\n\t\t\t\t\tevent.target = sortable.currentItem[ 0 ];\n\t\t\t\t\tsortable._mouseCapture( event, true );\n\t\t\t\t\tsortable._mouseStart( event, true, true );\n\n\t\t\t\t\t// Because the browser event is way off the new appended portlet,\n\t\t\t\t\t// modify necessary variables to reflect the changes\n\t\t\t\t\tsortable.offset.click.top = draggable.offset.click.top;\n\t\t\t\t\tsortable.offset.click.left = draggable.offset.click.left;\n\t\t\t\t\tsortable.offset.parent.left -= draggable.offset.parent.left -\n\t\t\t\t\t\tsortable.offset.parent.left;\n\t\t\t\t\tsortable.offset.parent.top -= draggable.offset.parent.top -\n\t\t\t\t\t\tsortable.offset.parent.top;\n\n\t\t\t\t\tdraggable._trigger( \"toSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is in a valid drop zone,\n\t\t\t\t\t// used solely in the revert option to handle \"valid/invalid\".\n\t\t\t\t\tdraggable.dropped = sortable.element;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables in the case that\n\t\t\t\t\t// adding to one sortable changes the location of the other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Hack so receive/update callbacks work (mostly)\n\t\t\t\t\tdraggable.currentItem = draggable.element;\n\t\t\t\t\tsortable.fromOutside = draggable;\n\t\t\t\t}\n\n\t\t\t\tif ( sortable.currentItem ) {\n\t\t\t\t\tsortable._mouseDrag( event );\n\n\t\t\t\t\t// Copy the sortable's position because the draggable's can potentially reflect\n\t\t\t\t\t// a relative position, while sortable is always absolute, which the dragged\n\t\t\t\t\t// element has now become. (#8809)\n\t\t\t\t\tui.position = sortable.position;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// If it doesn't intersect with the sortable, and it intersected before,\n\t\t\t\t// we fake the drag stop of the sortable, but make sure it doesn't remove\n\t\t\t\t// the helper by using cancelHelperRemoval.\n\t\t\t\tif ( sortable.isOver ) {\n\n\t\t\t\t\tsortable.isOver = 0;\n\t\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\t\t// Calling sortable's mouseStop would trigger a revert,\n\t\t\t\t\t// so revert must be temporarily false until after mouseStop is called.\n\t\t\t\t\tsortable.options._revert = sortable.options.revert;\n\t\t\t\t\tsortable.options.revert = false;\n\n\t\t\t\t\tsortable._trigger( \"out\", event, sortable._uiHash( sortable ) );\n\t\t\t\t\tsortable._mouseStop( event, true );\n\n\t\t\t\t\t// Restore sortable behaviors that were modfied\n\t\t\t\t\t// when the draggable entered the sortable area (#9481)\n\t\t\t\t\tsortable.options.revert = sortable.options._revert;\n\t\t\t\t\tsortable.options.helper = sortable.options._helper;\n\n\t\t\t\t\tif ( sortable.placeholder ) {\n\t\t\t\t\t\tsortable.placeholder.remove();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Restore and recalculate the draggable's offset considering the sortable\n\t\t\t\t\t// may have modified them in unexpected ways. (#8809, #10669)\n\t\t\t\t\tui.helper.appendTo( draggable._parent );\n\t\t\t\t\tdraggable._refreshOffsets( event );\n\t\t\t\t\tui.position = draggable._generatePosition( event, true );\n\n\t\t\t\t\tdraggable._trigger( \"fromSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is no longer in a valid drop zone\n\t\t\t\t\tdraggable.dropped = false;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables just in case removing\n\t\t\t\t\t// from one sortable changes the location of other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"cursor\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( \"body\" ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"cursor\" ) ) {\n\t\t\to._cursor = t.css( \"cursor\" );\n\t\t}\n\t\tt.css( \"cursor\", o.cursor );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._cursor ) {\n\t\t\t$( \"body\" ).css( \"cursor\", o._cursor );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"opacity\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\t\tif ( t.css( \"opacity\" ) ) {\n\t\t\to._opacity = t.css( \"opacity\" );\n\t\t}\n\t\tt.css( \"opacity\", o.opacity );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._opacity ) {\n\t\t\t$( ui.helper ).css( \"opacity\", o._opacity );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"scroll\", {\n\tstart: function( event, ui, i ) {\n\t\tif ( !i.scrollParentNotHidden ) {\n\t\t\ti.scrollParentNotHidden = i.helper.scrollParent( false );\n\t\t}\n\n\t\tif ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] &&\n\t\t\t\ti.scrollParentNotHidden[ 0 ].tagName !== \"HTML\" ) {\n\t\t\ti.overflowOffset = i.scrollParentNotHidden.offset();\n\t\t}\n\t},\n\tdrag: function( event, ui, i  ) {\n\n\t\tvar o = i.options,\n\t\t\tscrolled = false,\n\t\t\tscrollParent = i.scrollParentNotHidden[ 0 ],\n\t\t\tdocument = i.document[ 0 ];\n\n\t\tif ( scrollParent !== document && scrollParent.tagName !== \"HTML\" ) {\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( event.pageY - $( document ).scrollTop() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() - o.scrollSpeed );\n\t\t\t\t} else if ( $( window ).height() - ( event.pageY - $( document ).scrollTop() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() + o.scrollSpeed );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( event.pageX - $( document ).scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() - o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t} else if ( $( window ).width() - ( event.pageX - $( document ).scrollLeft() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() + o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( i, event );\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"snap\", {\n\tstart: function( event, ui, i ) {\n\n\t\tvar o = i.options;\n\n\t\ti.snapElements = [];\n\n\t\t$( o.snap.constructor !== String ? ( o.snap.items || \":data(ui-draggable)\" ) : o.snap )\n\t\t\t.each( function() {\n\t\t\t\tvar $t = $( this ),\n\t\t\t\t\t$o = $t.offset();\n\t\t\t\tif ( this !== i.element[ 0 ] ) {\n\t\t\t\t\ti.snapElements.push( {\n\t\t\t\t\t\titem: this,\n\t\t\t\t\t\twidth: $t.outerWidth(), height: $t.outerHeight(),\n\t\t\t\t\t\ttop: $o.top, left: $o.left\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\n\t},\n\tdrag: function( event, ui, inst ) {\n\n\t\tvar ts, bs, ls, rs, l, r, t, b, i, first,\n\t\t\to = inst.options,\n\t\t\td = o.snapTolerance,\n\t\t\tx1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,\n\t\t\ty1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;\n\n\t\tfor ( i = inst.snapElements.length - 1; i >= 0; i-- ) {\n\n\t\t\tl = inst.snapElements[ i ].left - inst.margins.left;\n\t\t\tr = l + inst.snapElements[ i ].width;\n\t\t\tt = inst.snapElements[ i ].top - inst.margins.top;\n\t\t\tb = t + inst.snapElements[ i ].height;\n\n\t\t\tif ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d ||\n\t\t\t\t\t!$.contains( inst.snapElements[ i ].item.ownerDocument,\n\t\t\t\t\tinst.snapElements[ i ].item ) ) {\n\t\t\t\tif ( inst.snapElements[ i ].snapping ) {\n\t\t\t\t\tif ( inst.options.snap.release ) {\n\t\t\t\t\t\tinst.options.snap.release.call(\n\t\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t$.extend( inst._uiHash(), { snapItem: inst.snapElements[ i ].item } )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tinst.snapElements[ i ].snapping = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( o.snapMode !== \"inner\" ) {\n\t\t\t\tts = Math.abs( t - y2 ) <= d;\n\t\t\t\tbs = Math.abs( b - y1 ) <= d;\n\t\t\t\tls = Math.abs( l - x2 ) <= d;\n\t\t\t\trs = Math.abs( r - x1 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfirst = ( ts || bs || ls || rs );\n\n\t\t\tif ( o.snapMode !== \"outer\" ) {\n\t\t\t\tts = Math.abs( t - y1 ) <= d;\n\t\t\t\tbs = Math.abs( b - y2 ) <= d;\n\t\t\t\tls = Math.abs( l - x1 ) <= d;\n\t\t\t\trs = Math.abs( r - x2 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !inst.snapElements[ i ].snapping && ( ts || bs || ls || rs || first ) ) {\n\t\t\t\tif ( inst.options.snap.snap ) {\n\t\t\t\t\tinst.options.snap.snap.call(\n\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\t$.extend( inst._uiHash(), {\n\t\t\t\t\t\t\tsnapItem: inst.snapElements[ i ].item\n\t\t\t\t\t\t} ) );\n\t\t\t\t}\n\t\t\t}\n\t\t\tinst.snapElements[ i ].snapping = ( ts || bs || ls || rs || first );\n\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"stack\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar min,\n\t\t\to = instance.options,\n\t\t\tgroup = $.makeArray( $( o.stack ) ).sort( function( a, b ) {\n\t\t\t\treturn ( parseInt( $( a ).css( \"zIndex\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( b ).css( \"zIndex\" ), 10 ) || 0 );\n\t\t\t} );\n\n\t\tif ( !group.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tmin = parseInt( $( group[ 0 ] ).css( \"zIndex\" ), 10 ) || 0;\n\t\t$( group ).each( function( i ) {\n\t\t\t$( this ).css( \"zIndex\", min + i );\n\t\t} );\n\t\tthis.css( \"zIndex\", ( min + group.length ) );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"zIndex\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"zIndex\" ) ) {\n\t\t\to._zIndex = t.css( \"zIndex\" );\n\t\t}\n\t\tt.css( \"zIndex\", o.zIndex );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\n\t\tif ( o._zIndex ) {\n\t\t\t$( ui.helper ).css( \"zIndex\", o._zIndex );\n\t\t}\n\t}\n} );\n\nvar widgetsDraggable = $.ui.draggable;\n\n\n/*!\n * jQuery UI Sortable 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Sortable\n//>>group: Interactions\n//>>description: Enables items in a list to be sorted using the mouse.\n//>>docs: https://api.jqueryui.com/sortable/\n//>>demos: https://jqueryui.com/sortable/\n//>>css.structure: ../../themes/base/sortable.css\n\n\nvar widgetsSortable = $.widget( \"ui.sortable\", $.ui.mouse, {\n\tversion: \"1.13.3\",\n\twidgetEventPrefix: \"sort\",\n\tready: false,\n\toptions: {\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectWith: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tdropOnEmpty: true,\n\t\tforcePlaceholderSize: false,\n\t\tforceHelperSize: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\titems: \"> *\",\n\t\topacity: false,\n\t\tplaceholder: false,\n\t\trevert: false,\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\t\tzIndex: 1000,\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeStop: null,\n\t\tchange: null,\n\t\tdeactivate: null,\n\t\tout: null,\n\t\tover: null,\n\t\treceive: null,\n\t\tremove: null,\n\t\tsort: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tupdate: null\n\t},\n\n\t_isOverAxis: function( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t},\n\n\t_isFloating: function( item ) {\n\t\treturn ( /left|right/ ).test( item.css( \"float\" ) ) ||\n\t\t\t( /inline|table-cell/ ).test( item.css( \"display\" ) );\n\t},\n\n\t_create: function() {\n\t\tthis.containerCache = {};\n\t\tthis._addClass( \"ui-sortable\" );\n\n\t\t//Get the items\n\t\tthis.refresh();\n\n\t\t//Let's determine the parent's offset\n\t\tthis.offset = this.element.offset();\n\n\t\t//Initialize mouse events for interaction\n\t\tthis._mouseInit();\n\n\t\tthis._setHandleClassName();\n\n\t\t//We're ready to go\n\t\tthis.ready = true;\n\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_setHandleClassName: function() {\n\t\tvar that = this;\n\t\tthis._removeClass( this.element.find( \".ui-sortable-handle\" ), \"ui-sortable-handle\" );\n\t\t$.each( this.items, function() {\n\t\t\tthat._addClass(\n\t\t\t\tthis.instance.options.handle ?\n\t\t\t\t\tthis.item.find( this.instance.options.handle ) :\n\t\t\t\t\tthis.item,\n\t\t\t\t\"ui-sortable-handle\"\n\t\t\t);\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tthis._mouseDestroy();\n\n\t\tfor ( var i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\tthis.items[ i ].item.removeData( this.widgetName + \"-item\" );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_mouseCapture: function( event, overrideHandle ) {\n\t\tvar currentItem = null,\n\t\t\tvalidHandle = false,\n\t\t\tthat = this;\n\n\t\tif ( this.reverting ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.options.disabled || this.options.type === \"static\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//We have to refresh the items data once first\n\t\tthis._refreshItems( event );\n\n\t\t//Find out if the clicked node (or one of its parents) is a actual item in this.items\n\t\t$( event.target ).parents().each( function() {\n\t\t\tif ( $.data( this, that.widgetName + \"-item\" ) === that ) {\n\t\t\t\tcurrentItem = $( this );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t\tif ( $.data( event.target, that.widgetName + \"-item\" ) === that ) {\n\t\t\tcurrentItem = $( event.target );\n\t\t}\n\n\t\tif ( !currentItem ) {\n\t\t\treturn false;\n\t\t}\n\t\tif ( this.options.handle && !overrideHandle ) {\n\t\t\t$( this.options.handle, currentItem ).find( \"*\" ).addBack().each( function() {\n\t\t\t\tif ( this === event.target ) {\n\t\t\t\t\tvalidHandle = true;\n\t\t\t\t}\n\t\t\t} );\n\t\t\tif ( !validHandle ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tthis.currentItem = currentItem;\n\t\tthis._removeCurrentsFromItems();\n\t\treturn true;\n\n\t},\n\n\t_mouseStart: function( event, overrideHandle, noActivation ) {\n\n\t\tvar i, body,\n\t\t\to = this.options;\n\n\t\tthis.currentContainer = this;\n\n\t\t//We only need to call refreshPositions, because the refreshItems call has been moved to\n\t\t// mouseCapture\n\t\tthis.refreshPositions();\n\n\t\t//Prepare the dragged items parent\n\t\tthis.appendTo = $( o.appendTo !== \"parent\" ?\n\t\t\t\to.appendTo :\n\t\t\t\tthis.currentItem.parent() );\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.offset = this.currentItem.offset();\n\t\tthis.offset = {\n\t\t\ttop: this.offset.top - this.margins.top,\n\t\t\tleft: this.offset.left - this.margins.left\n\t\t};\n\n\t\t$.extend( this.offset, {\n\t\t\tclick: { //Where the click happened, relative to the element\n\t\t\t\tleft: event.pageX - this.offset.left,\n\t\t\t\ttop: event.pageY - this.offset.top\n\t\t\t},\n\n\t\t\t// This is a relative to absolute position minus the actual position calculation -\n\t\t\t// only used for relative positioned helper\n\t\t\trelative: this._getRelativeOffset()\n\t\t} );\n\n\t\t// After we get the helper offset, but before we get the parent offset we can\n\t\t// change the helper's position to absolute\n\t\t// TODO: Still need to figure out a way to make relative sorting possible\n\t\tthis.helper.css( \"position\", \"absolute\" );\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\tif ( o.cursorAt ) {\n\t\t\tthis._adjustOffsetFromHelper( o.cursorAt );\n\t\t}\n\n\t\t//Cache the former DOM position\n\t\tthis.domPosition = {\n\t\t\tprev: this.currentItem.prev()[ 0 ],\n\t\t\tparent: this.currentItem.parent()[ 0 ]\n\t\t};\n\n\t\t// If the helper is not the original, hide the original so it's not playing any role during\n\t\t// the drag, won't cause anything bad this way\n\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\tthis.currentItem.hide();\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthis._createPlaceholder();\n\n\t\t//Get the next scrolling parent\n\t\tthis.scrollParent = this.placeholder.scrollParent();\n\n\t\t$.extend( this.offset, {\n\t\t\tparent: this._getParentOffset()\n\t\t} );\n\n\t\t//Set a containment if given in the options\n\t\tif ( o.containment ) {\n\t\t\tthis._setContainment();\n\t\t}\n\n\t\tif ( o.cursor && o.cursor !== \"auto\" ) { // cursor option\n\t\t\tbody = this.document.find( \"body\" );\n\n\t\t\t// Support: IE\n\t\t\tthis.storedCursor = body.css( \"cursor\" );\n\t\t\tbody.css( \"cursor\", o.cursor );\n\n\t\t\tthis.storedStylesheet =\n\t\t\t\t$( \"<style>*{ cursor: \" + o.cursor + \" !important; }</style>\" ).appendTo( body );\n\t\t}\n\n\t\t// We need to make sure to grab the zIndex before setting the\n\t\t// opacity, because setting the opacity to anything lower than 1\n\t\t// causes the zIndex to change from \"auto\" to 0.\n\t\tif ( o.zIndex ) { // zIndex option\n\t\t\tif ( this.helper.css( \"zIndex\" ) ) {\n\t\t\t\tthis._storedZIndex = this.helper.css( \"zIndex\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"zIndex\", o.zIndex );\n\t\t}\n\n\t\tif ( o.opacity ) { // opacity option\n\t\t\tif ( this.helper.css( \"opacity\" ) ) {\n\t\t\t\tthis._storedOpacity = this.helper.css( \"opacity\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"opacity\", o.opacity );\n\t\t}\n\n\t\t//Prepare scrolling\n\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\t\t\tthis.overflowOffset = this.scrollParent.offset();\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"start\", event, this._uiHash() );\n\n\t\t//Recache the helper size\n\t\tif ( !this._preserveHelperProportions ) {\n\t\t\tthis._cacheHelperProportions();\n\t\t}\n\n\t\t//Post \"activate\" events to possible containers\n\t\tif ( !noActivation ) {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"activate\", event, this._uiHash( this ) );\n\t\t\t}\n\t\t}\n\n\t\t//Prepare possible droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\tthis.dragging = true;\n\n\t\tthis._addClass( this.helper, \"ui-sortable-helper\" );\n\n\t\t//Move the helper, if needed\n\t\tif ( !this.helper.parent().is( this.appendTo ) ) {\n\t\t\tthis.helper.detach().appendTo( this.appendTo );\n\n\t\t\t//Update position\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\t//Generate the original position\n\t\tthis.position = this.originalPosition = this._generatePosition( event );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\t\tthis.lastPositionAbs = this.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\tthis._mouseDrag( event );\n\n\t\treturn true;\n\n\t},\n\n\t_scroll: function( event ) {\n\t\tvar o = this.options,\n\t\t\tscrolled = false;\n\n\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\n\t\t\tif ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) -\n\t\t\t\t\tevent.pageY < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed;\n\t\t\t} else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed;\n\t\t\t}\n\n\t\t\tif ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) -\n\t\t\t\t\tevent.pageX < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft + o.scrollSpeed;\n\t\t\t} else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft - o.scrollSpeed;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed );\n\t\t\t} else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) <\n\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed );\n\t\t\t}\n\n\t\t\tif ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\tthis.document.scrollLeft() - o.scrollSpeed\n\t\t\t\t);\n\t\t\t} else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) <\n\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\tthis.document.scrollLeft() + o.scrollSpeed\n\t\t\t\t);\n\t\t\t}\n\n\t\t}\n\n\t\treturn scrolled;\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar i, item, itemElement, intersection,\n\t\t\to = this.options;\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Set the helper position\n\t\tif ( !this.options.axis || this.options.axis !== \"y\" ) {\n\t\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\t}\n\t\tif ( !this.options.axis || this.options.axis !== \"x\" ) {\n\t\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\t\t}\n\n\t\t//Do scrolling\n\t\tif ( o.scroll ) {\n\t\t\tif ( this._scroll( event ) !== false ) {\n\n\t\t\t\t//Update item positions used in position checks\n\t\t\t\tthis._refreshItemPositions( true );\n\n\t\t\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.dragDirection = {\n\t\t\tvertical: this._getDragVerticalDirection(),\n\t\t\thorizontal: this._getDragHorizontalDirection()\n\t\t};\n\n\t\t//Rearrange\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\n\t\t\t//Cache variables and intersection, continue if no intersection\n\t\t\titem = this.items[ i ];\n\t\t\titemElement = item.item[ 0 ];\n\t\t\tintersection = this._intersectsWithPointer( item );\n\t\t\tif ( !intersection ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Only put the placeholder inside the current Container, skip all\n\t\t\t// items from other containers. This works because when moving\n\t\t\t// an item from one container to another the\n\t\t\t// currentContainer is switched before the placeholder is moved.\n\t\t\t//\n\t\t\t// Without this, moving items in \"sub-sortables\" can cause\n\t\t\t// the placeholder to jitter between the outer and inner container.\n\t\t\tif ( item.instance !== this.currentContainer ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Cannot intersect with itself\n\t\t\t// no useless actions that have been done before\n\t\t\t// no action if the item moved is the parent of the item checked\n\t\t\tif ( itemElement !== this.currentItem[ 0 ] &&\n\t\t\t\tthis.placeholder[ intersection === 1 ?\n\t\t\t\t\"next\" : \"prev\" ]()[ 0 ] !== itemElement &&\n\t\t\t\t!$.contains( this.placeholder[ 0 ], itemElement ) &&\n\t\t\t\t( this.options.type === \"semi-dynamic\" ?\n\t\t\t\t\t!$.contains( this.element[ 0 ], itemElement ) :\n\t\t\t\t\ttrue\n\t\t\t\t)\n\t\t\t) {\n\n\t\t\t\tthis.direction = intersection === 1 ? \"down\" : \"up\";\n\n\t\t\t\tif ( this.options.tolerance === \"pointer\" ||\n\t\t\t\t\t\tthis._intersectsWithSides( item ) ) {\n\t\t\t\t\tthis._rearrange( event, item );\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tthis._contactContainers( event );\n\n\t\t//Interconnect with droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"sort\", event, this._uiHash() );\n\n\t\tthis.lastPositionAbs = this.positionAbs;\n\t\treturn false;\n\n\t},\n\n\t_mouseStop: function( event, noPropagation ) {\n\n\t\tif ( !event ) {\n\t\t\treturn;\n\t\t}\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\tif ( this.options.revert ) {\n\t\t\tvar that = this,\n\t\t\t\tcur = this.placeholder.offset(),\n\t\t\t\taxis = this.options.axis,\n\t\t\t\tanimation = {};\n\n\t\t\tif ( !axis || axis === \"x\" ) {\n\t\t\t\tanimation.left = cur.left - this.offset.parent.left - this.margins.left +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollLeft\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tif ( !axis || axis === \"y\" ) {\n\t\t\t\tanimation.top = cur.top - this.offset.parent.top - this.margins.top +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollTop\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tthis.reverting = true;\n\t\t\t$( this.helper ).animate(\n\t\t\t\tanimation,\n\t\t\t\tparseInt( this.options.revert, 10 ) || 500,\n\t\t\t\tfunction() {\n\t\t\t\t\tthat._clear( event );\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tthis._clear( event, noPropagation );\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.dragging ) {\n\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: null } ) );\n\n\t\t\tif ( this.options.helper === \"original\" ) {\n\t\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t\t} else {\n\t\t\t\tthis.currentItem.show();\n\t\t\t}\n\n\t\t\t//Post deactivating events to containers\n\t\t\tfor ( var i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"deactivate\", null, this._uiHash( this ) );\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", null, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.placeholder ) {\n\n\t\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t\t// it unbinds ALL events from the original node!\n\t\t\tif ( this.placeholder[ 0 ].parentNode ) {\n\t\t\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\t\t\t}\n\t\t\tif ( this.options.helper !== \"original\" && this.helper &&\n\t\t\t\t\tthis.helper[ 0 ].parentNode ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\n\t\t\t$.extend( this, {\n\t\t\t\thelper: null,\n\t\t\t\tdragging: false,\n\t\t\t\treverting: false,\n\t\t\t\t_noFinalSort: null\n\t\t\t} );\n\n\t\t\tif ( this.domPosition.prev ) {\n\t\t\t\t$( this.domPosition.prev ).after( this.currentItem );\n\t\t\t} else {\n\t\t\t\t$( this.domPosition.parent ).prepend( this.currentItem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tserialize: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tstr = [];\n\t\to = o || {};\n\n\t\t$( items ).each( function() {\n\t\t\tvar res = ( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" )\n\t\t\t\t.match( o.expression || ( /(.+)[\\-=_](.+)/ ) );\n\t\t\tif ( res ) {\n\t\t\t\tstr.push(\n\t\t\t\t\t( o.key || res[ 1 ] + \"[]\" ) +\n\t\t\t\t\t\"=\" + ( o.key && o.expression ? res[ 1 ] : res[ 2 ] ) );\n\t\t\t}\n\t\t} );\n\n\t\tif ( !str.length && o.key ) {\n\t\t\tstr.push( o.key + \"=\" );\n\t\t}\n\n\t\treturn str.join( \"&\" );\n\n\t},\n\n\ttoArray: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tret = [];\n\n\t\to = o || {};\n\n\t\titems.each( function() {\n\t\t\tret.push( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" );\n\t\t} );\n\t\treturn ret;\n\n\t},\n\n\t/* Be careful with the following core functions */\n\t_intersectsWith: function( item ) {\n\n\t\tvar x1 = this.positionAbs.left,\n\t\t\tx2 = x1 + this.helperProportions.width,\n\t\t\ty1 = this.positionAbs.top,\n\t\t\ty2 = y1 + this.helperProportions.height,\n\t\t\tl = item.left,\n\t\t\tr = l + item.width,\n\t\t\tt = item.top,\n\t\t\tb = t + item.height,\n\t\t\tdyClick = this.offset.click.top,\n\t\t\tdxClick = this.offset.click.left,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) || ( ( y1 + dyClick ) > t &&\n\t\t\t\t( y1 + dyClick ) < b ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) || ( ( x1 + dxClick ) > l &&\n\t\t\t\t( x1 + dxClick ) < r ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( this.options.tolerance === \"pointer\" ||\n\t\t\tthis.options.forcePointerForContainers ||\n\t\t\t( this.options.tolerance !== \"pointer\" &&\n\t\t\t\tthis.helperProportions[ this.floating ? \"width\" : \"height\" ] >\n\t\t\t\titem[ this.floating ? \"width\" : \"height\" ] )\n\t\t) {\n\t\t\treturn isOverElement;\n\t\t} else {\n\n\t\t\treturn ( l < x1 + ( this.helperProportions.width / 2 ) && // Right Half\n\t\t\t\tx2 - ( this.helperProportions.width / 2 ) < r && // Left Half\n\t\t\t\tt < y1 + ( this.helperProportions.height / 2 ) && // Bottom Half\n\t\t\t\ty2 - ( this.helperProportions.height / 2 ) < b ); // Top Half\n\n\t\t}\n\t},\n\n\t_intersectsWithPointer: function( item ) {\n\t\tvar verticalDirection, horizontalDirection,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.top + this.offset.click.top, item.top, item.height ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.left + this.offset.click.left, item.left, item.width ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( !isOverElement ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tverticalDirection = this.dragDirection.vertical;\n\t\thorizontalDirection = this.dragDirection.horizontal;\n\n\t\treturn this.floating ?\n\t\t\t( ( horizontalDirection === \"right\" || verticalDirection === \"down\" ) ? 2 : 1 ) :\n\t\t\t( verticalDirection && ( verticalDirection === \"down\" ? 2 : 1 ) );\n\n\t},\n\n\t_intersectsWithSides: function( item ) {\n\n\t\tvar isOverBottomHalf = this._isOverAxis( this.positionAbs.top +\n\t\t\t\tthis.offset.click.top, item.top + ( item.height / 2 ), item.height ),\n\t\t\tisOverRightHalf = this._isOverAxis( this.positionAbs.left +\n\t\t\t\tthis.offset.click.left, item.left + ( item.width / 2 ), item.width ),\n\t\t\tverticalDirection = this.dragDirection.vertical,\n\t\t\thorizontalDirection = this.dragDirection.horizontal;\n\n\t\tif ( this.floating && horizontalDirection ) {\n\t\t\treturn ( ( horizontalDirection === \"right\" && isOverRightHalf ) ||\n\t\t\t\t( horizontalDirection === \"left\" && !isOverRightHalf ) );\n\t\t} else {\n\t\t\treturn verticalDirection && ( ( verticalDirection === \"down\" && isOverBottomHalf ) ||\n\t\t\t\t( verticalDirection === \"up\" && !isOverBottomHalf ) );\n\t\t}\n\n\t},\n\n\t_getDragVerticalDirection: function() {\n\t\tvar delta = this.positionAbs.top - this.lastPositionAbs.top;\n\t\treturn delta !== 0 && ( delta > 0 ? \"down\" : \"up\" );\n\t},\n\n\t_getDragHorizontalDirection: function() {\n\t\tvar delta = this.positionAbs.left - this.lastPositionAbs.left;\n\t\treturn delta !== 0 && ( delta > 0 ? \"right\" : \"left\" );\n\t},\n\n\trefresh: function( event ) {\n\t\tthis._refreshItems( event );\n\t\tthis._setHandleClassName();\n\t\tthis.refreshPositions();\n\t\treturn this;\n\t},\n\n\t_connectWith: function() {\n\t\tvar options = this.options;\n\t\treturn options.connectWith.constructor === String ?\n\t\t\t[ options.connectWith ] :\n\t\t\toptions.connectWith;\n\t},\n\n\t_getItemsAsjQuery: function( connected ) {\n\n\t\tvar i, j, cur, inst,\n\t\t\titems = [],\n\t\t\tqueries = [],\n\t\t\tconnectWith = this._connectWith();\n\n\t\tif ( connectWith && connected ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ typeof inst.options.items === \"function\" ?\n\t\t\t\t\t\t\tinst.options.items.call( inst.element ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-placeholder\" ), inst ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tqueries.push( [ typeof this.options.items === \"function\" ?\n\t\t\tthis.options.items\n\t\t\t\t.call( this.element, null, { options: this.options, item: this.currentItem } ) :\n\t\t\t$( this.options.items, this.element )\n\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t.not( \".ui-sortable-placeholder\" ), this ] );\n\n\t\tfunction addItems() {\n\t\t\titems.push( this );\n\t\t}\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\tqueries[ i ][ 0 ].each( addItems );\n\t\t}\n\n\t\treturn $( items );\n\n\t},\n\n\t_removeCurrentsFromItems: function() {\n\n\t\tvar list = this.currentItem.find( \":data(\" + this.widgetName + \"-item)\" );\n\n\t\tthis.items = $.grep( this.items, function( item ) {\n\t\t\tfor ( var j = 0; j < list.length; j++ ) {\n\t\t\t\tif ( list[ j ] === item.item[ 0 ] ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} );\n\n\t},\n\n\t_refreshItems: function( event ) {\n\n\t\tthis.items = [];\n\t\tthis.containers = [ this ];\n\n\t\tvar i, j, cur, inst, targetData, _queries, item, queriesLength,\n\t\t\titems = this.items,\n\t\t\tqueries = [ [ typeof this.options.items === \"function\" ?\n\t\t\t\tthis.options.items.call( this.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t$( this.options.items, this.element ), this ] ],\n\t\t\tconnectWith = this._connectWith();\n\n\t\t//Shouldn't be run the first time through due to massive slow-down\n\t\tif ( connectWith && this.ready ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ typeof inst.options.items === \"function\" ?\n\t\t\t\t\t\t\tinst.options.items\n\t\t\t\t\t\t\t\t.call( inst.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element ), inst ] );\n\t\t\t\t\t\tthis.containers.push( inst );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\ttargetData = queries[ i ][ 1 ];\n\t\t\t_queries = queries[ i ][ 0 ];\n\n\t\t\tfor ( j = 0, queriesLength = _queries.length; j < queriesLength; j++ ) {\n\t\t\t\titem = $( _queries[ j ] );\n\n\t\t\t\t// Data for target checking (mouse manager)\n\t\t\t\titem.data( this.widgetName + \"-item\", targetData );\n\n\t\t\t\titems.push( {\n\t\t\t\t\titem: item,\n\t\t\t\t\tinstance: targetData,\n\t\t\t\t\twidth: 0, height: 0,\n\t\t\t\t\tleft: 0, top: 0\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t_refreshItemPositions: function( fast ) {\n\t\tvar i, item, t, p;\n\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\titem = this.items[ i ];\n\n\t\t\t//We ignore calculating positions of all connected containers when we're not over them\n\t\t\tif ( this.currentContainer && item.instance !== this.currentContainer &&\n\t\t\t\t\titem.item[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tt = this.options.toleranceElement ?\n\t\t\t\t$( this.options.toleranceElement, item.item ) :\n\t\t\t\titem.item;\n\n\t\t\tif ( !fast ) {\n\t\t\t\titem.width = t.outerWidth();\n\t\t\t\titem.height = t.outerHeight();\n\t\t\t}\n\n\t\t\tp = t.offset();\n\t\t\titem.left = p.left;\n\t\t\titem.top = p.top;\n\t\t}\n\t},\n\n\trefreshPositions: function( fast ) {\n\n\t\t// Determine whether items are being displayed horizontally\n\t\tthis.floating = this.items.length ?\n\t\t\tthis.options.axis === \"x\" || this._isFloating( this.items[ 0 ].item ) :\n\t\t\tfalse;\n\n\t\t// This has to be redone because due to the item being moved out/into the offsetParent,\n\t\t// the offsetParent's position will change\n\t\tif ( this.offsetParent && this.helper ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\tthis._refreshItemPositions( fast );\n\n\t\tvar i, p;\n\n\t\tif ( this.options.custom && this.options.custom.refreshContainers ) {\n\t\t\tthis.options.custom.refreshContainers.call( this );\n\t\t} else {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tp = this.containers[ i ].element.offset();\n\t\t\t\tthis.containers[ i ].containerCache.left = p.left;\n\t\t\t\tthis.containers[ i ].containerCache.top = p.top;\n\t\t\t\tthis.containers[ i ].containerCache.width =\n\t\t\t\t\tthis.containers[ i ].element.outerWidth();\n\t\t\t\tthis.containers[ i ].containerCache.height =\n\t\t\t\t\tthis.containers[ i ].element.outerHeight();\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_createPlaceholder: function( that ) {\n\t\tthat = that || this;\n\t\tvar className, nodeName,\n\t\t\to = that.options;\n\n\t\tif ( !o.placeholder || o.placeholder.constructor === String ) {\n\t\t\tclassName = o.placeholder;\n\t\t\tnodeName = that.currentItem[ 0 ].nodeName.toLowerCase();\n\t\t\to.placeholder = {\n\t\t\t\telement: function() {\n\n\t\t\t\t\tvar element = $( \"<\" + nodeName + \">\", that.document[ 0 ] );\n\n\t\t\t\t\tthat._addClass( element, \"ui-sortable-placeholder\",\n\t\t\t\t\t\t\tclassName || that.currentItem[ 0 ].className )\n\t\t\t\t\t\t._removeClass( element, \"ui-sortable-helper\" );\n\n\t\t\t\t\tif ( nodeName === \"tbody\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder(\n\t\t\t\t\t\t\tthat.currentItem.find( \"tr\" ).eq( 0 ),\n\t\t\t\t\t\t\t$( \"<tr>\", that.document[ 0 ] ).appendTo( element )\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if ( nodeName === \"tr\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder( that.currentItem, element );\n\t\t\t\t\t} else if ( nodeName === \"img\" ) {\n\t\t\t\t\t\telement.attr( \"src\", that.currentItem.attr( \"src\" ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !className ) {\n\t\t\t\t\t\telement.css( \"visibility\", \"hidden\" );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn element;\n\t\t\t\t},\n\t\t\t\tupdate: function( container, p ) {\n\n\t\t\t\t\t// 1. If a className is set as 'placeholder option, we don't force sizes -\n\t\t\t\t\t// the class is responsible for that\n\t\t\t\t\t// 2. The option 'forcePlaceholderSize can be enabled to force it even if a\n\t\t\t\t\t// class name is specified\n\t\t\t\t\tif ( className && !o.forcePlaceholderSize ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element doesn't have a actual height or width by itself (without\n\t\t\t\t\t// styles coming from a stylesheet), it receives the inline height and width\n\t\t\t\t\t// from the dragged item. Or, if it's a tbody or tr, it's going to have a height\n\t\t\t\t\t// anyway since we're populating them with <td>s above, but they're unlikely to\n\t\t\t\t\t// be the correct height on their own if the row heights are dynamic, so we'll\n\t\t\t\t\t// always assign the height of the dragged item given forcePlaceholderSize\n\t\t\t\t\t// is true.\n\t\t\t\t\tif ( !p.height() || ( o.forcePlaceholderSize &&\n\t\t\t\t\t\t\t( nodeName === \"tbody\" || nodeName === \"tr\" ) ) ) {\n\t\t\t\t\t\tp.height(\n\t\t\t\t\t\t\tthat.currentItem.innerHeight() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingTop\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingBottom\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t\tif ( !p.width() ) {\n\t\t\t\t\t\tp.width(\n\t\t\t\t\t\t\tthat.currentItem.innerWidth() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingLeft\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingRight\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthat.placeholder = $( o.placeholder.element.call( that.element, that.currentItem ) );\n\n\t\t//Append it after the actual current item\n\t\tthat.currentItem.after( that.placeholder );\n\n\t\t//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)\n\t\to.placeholder.update( that, that.placeholder );\n\n\t},\n\n\t_createTrPlaceholder: function( sourceTr, targetTr ) {\n\t\tvar that = this;\n\n\t\tsourceTr.children().each( function() {\n\t\t\t$( \"<td>&#160;</td>\", that.document[ 0 ] )\n\t\t\t\t.attr( \"colspan\", $( this ).attr( \"colspan\" ) || 1 )\n\t\t\t\t.appendTo( targetTr );\n\t\t} );\n\t},\n\n\t_contactContainers: function( event ) {\n\t\tvar i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom,\n\t\t\tfloating, axis,\n\t\t\tinnermostContainer = null,\n\t\t\tinnermostIndex = null;\n\n\t\t// Get innermost container that intersects with item\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\n\t\t\t// Never consider a container that's located within the item itself\n\t\t\tif ( $.contains( this.currentItem[ 0 ], this.containers[ i ].element[ 0 ] ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( this._intersectsWith( this.containers[ i ].containerCache ) ) {\n\n\t\t\t\t// If we've already found a container and it's more \"inner\" than this, then continue\n\t\t\t\tif ( innermostContainer &&\n\t\t\t\t\t\t$.contains(\n\t\t\t\t\t\t\tthis.containers[ i ].element[ 0 ],\n\t\t\t\t\t\t\tinnermostContainer.element[ 0 ] ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tinnermostContainer = this.containers[ i ];\n\t\t\t\tinnermostIndex = i;\n\n\t\t\t} else {\n\n\t\t\t\t// container doesn't intersect. trigger \"out\" event if necessary\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", event, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t// If no intersecting containers found, return\n\t\tif ( !innermostContainer ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Move the item into the container if it's not there already\n\t\tif ( this.containers.length === 1 ) {\n\t\t\tif ( !this.containers[ innermostIndex ].containerCache.over ) {\n\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t\t}\n\t\t} else {\n\n\t\t\t// When entering a new container, we will find the item with the least distance and\n\t\t\t// append our item near it\n\t\t\tdist = 10000;\n\t\t\titemWithLeastDistance = null;\n\t\t\tfloating = innermostContainer.floating || this._isFloating( this.currentItem );\n\t\t\tposProperty = floating ? \"left\" : \"top\";\n\t\t\tsizeProperty = floating ? \"width\" : \"height\";\n\t\t\taxis = floating ? \"pageX\" : \"pageY\";\n\n\t\t\tfor ( j = this.items.length - 1; j >= 0; j-- ) {\n\t\t\t\tif ( !$.contains(\n\t\t\t\t\t\tthis.containers[ innermostIndex ].element[ 0 ], this.items[ j ].item[ 0 ] )\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif ( this.items[ j ].item[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcur = this.items[ j ].item.offset()[ posProperty ];\n\t\t\t\tnearBottom = false;\n\t\t\t\tif ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {\n\t\t\t\t\tnearBottom = true;\n\t\t\t\t}\n\n\t\t\t\tif ( Math.abs( event[ axis ] - cur ) < dist ) {\n\t\t\t\t\tdist = Math.abs( event[ axis ] - cur );\n\t\t\t\t\titemWithLeastDistance = this.items[ j ];\n\t\t\t\t\tthis.direction = nearBottom ? \"up\" : \"down\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Check if dropOnEmpty is enabled\n\t\t\tif ( !itemWithLeastDistance && !this.options.dropOnEmpty ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.currentContainer === this.containers[ innermostIndex ] ) {\n\t\t\t\tif ( !this.currentContainer.containerCache.over ) {\n\t\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash() );\n\t\t\t\t\tthis.currentContainer.containerCache.over = 1;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( itemWithLeastDistance ) {\n\t\t\t\tthis._rearrange( event, itemWithLeastDistance, null, true );\n\t\t\t} else {\n\t\t\t\tthis._rearrange( event, null, this.containers[ innermostIndex ].element, true );\n\t\t\t}\n\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"change\", event, this._uiHash( this ) );\n\t\t\tthis.currentContainer = this.containers[ innermostIndex ];\n\n\t\t\t//Update the placeholder\n\t\t\tthis.options.placeholder.update( this.currentContainer, this.placeholder );\n\n\t\t\t//Update scrollParent\n\t\t\tthis.scrollParent = this.placeholder.scrollParent();\n\n\t\t\t//Update overflowOffset\n\t\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\t\t\t\tthis.overflowOffset = this.scrollParent.offset();\n\t\t\t}\n\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t}\n\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelper = typeof o.helper === \"function\" ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event, this.currentItem ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ? this.currentItem.clone() : this.currentItem );\n\n\t\t//Add the helper to the DOM if that didn't happen already\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\tthis.appendTo[ 0 ].appendChild( helper[ 0 ] );\n\t\t}\n\n\t\tif ( helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tthis._storedCSS = {\n\t\t\t\twidth: this.currentItem[ 0 ].style.width,\n\t\t\t\theight: this.currentItem[ 0 ].style.height,\n\t\t\t\tposition: this.currentItem.css( \"position\" ),\n\t\t\t\ttop: this.currentItem.css( \"top\" ),\n\t\t\t\tleft: this.currentItem.css( \"left\" )\n\t\t\t};\n\t\t}\n\n\t\tif ( !helper[ 0 ].style.width || o.forceHelperSize ) {\n\t\t\thelper.width( this.currentItem.width() );\n\t\t}\n\t\tif ( !helper[ 0 ].style.height || o.forceHelperSize ) {\n\t\t\thelper.height( this.currentItem.height() );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( Array.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tvar po = this.offsetParent.offset();\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\t// This needs to be actually done for all browsers, since pageX/pageY includes this\n\t\t// information with an ugly IE fix\n\t\tif ( this.offsetParent[ 0 ] === this.document[ 0 ].body ||\n\t\t\t\t( this.offsetParent[ 0 ].tagName &&\n\t\t\t\tthis.offsetParent[ 0 ].tagName.toLowerCase() === \"html\" && $.ui.ie ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\n\t\tif ( this.cssPosition === \"relative\" ) {\n\t\t\tvar p = this.currentItem.position();\n\t\t\treturn {\n\t\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollTop(),\n\t\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollLeft()\n\t\t\t};\n\t\t} else {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.currentItem.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.currentItem.css( \"marginTop\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar ce, co, over,\n\t\t\to = this.options;\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\t\tif ( o.containment === \"document\" || o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0 - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t0 - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\to.containment === \"document\" ?\n\t\t\t\t\tthis.document.width() :\n\t\t\t\t\tthis.window.width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( o.containment === \"document\" ?\n\t\t\t\t\t( this.document.height() || document.body.parentNode.scrollHeight ) :\n\t\t\t\t\tthis.window.height() || this.document[ 0 ].body.parentNode.scrollHeight\n\t\t\t\t) - this.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t\tif ( !( /^(document|window|parent)$/ ).test( o.containment ) ) {\n\t\t\tce = $( o.containment )[ 0 ];\n\t\t\tco = $( o.containment ).offset();\n\t\t\tover = ( $( ce ).css( \"overflow\" ) !== \"hidden\" );\n\n\t\t\tthis.containment = [\n\t\t\t\tco.left + ( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingLeft\" ), 10 ) || 0 ) - this.margins.left,\n\t\t\t\tco.top + ( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingTop\" ), 10 ) || 0 ) - this.margins.top,\n\t\t\t\tco.left + ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\tco.top + ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 :\n\t\t\t\t\tscroll.scrollLeft() ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event ) {\n\n\t\tvar top, left,\n\t\t\to = this.options,\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\t// This is another very weird special case that only happens for relative elements:\n\t\t// 1. If the css position is relative\n\t\t// 2. and the scroll parent is the document or similar to the offset parent\n\t\t// we have to refresh the relative offset during the scroll so there are no jumps\n\t\tif ( this.cssPosition === \"relative\" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ] !== this.offsetParent[ 0 ] ) ) {\n\t\t\tthis.offset.relative = this._getRelativeOffset();\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\tif ( this.originalPosition ) { //If we are not dragging yet, we won't check for options\n\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( event.pageX - this.offset.click.left < this.containment[ 0 ] ) {\n\t\t\t\t\tpageX = this.containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < this.containment[ 1 ] ) {\n\t\t\t\t\tpageY = this.containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > this.containment[ 2 ] ) {\n\t\t\t\t\tpageX = this.containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > this.containment[ 3 ] ) {\n\t\t\t\t\tpageY = this.containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\t\t\t\ttop = this.originalPageY + Math.round( ( pageY - this.originalPageY ) /\n\t\t\t\t\to.grid[ 1 ] ) * o.grid[ 1 ];\n\t\t\t\tpageY = this.containment ?\n\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] &&\n\t\t\t\t\t\ttop - this.offset.click.top <= this.containment[ 3 ] ) ?\n\t\t\t\t\t\t\ttop :\n\t\t\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] ) ?\n\t\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) :\n\t\t\t\t\t\t\t\ttop;\n\n\t\t\t\tleft = this.originalPageX + Math.round( ( pageX - this.originalPageX ) /\n\t\t\t\t\to.grid[ 0 ] ) * o.grid[ 0 ];\n\t\t\t\tpageX = this.containment ?\n\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] &&\n\t\t\t\t\t\tleft - this.offset.click.left <= this.containment[ 2 ] ) ?\n\t\t\t\t\t\t\tleft :\n\t\t\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] ) ?\n\t\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) :\n\t\t\t\t\t\t\t\tleft;\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() :\n\t\t\t\t\tscrollIsRootNode ? 0 : scroll.scrollLeft() ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_rearrange: function( event, i, a, hardRefresh ) {\n\n\t\tif ( a ) {\n\t\t\ta[ 0 ].appendChild( this.placeholder[ 0 ] );\n\t\t} else {\n\t\t\ti.item[ 0 ].parentNode.insertBefore( this.placeholder[ 0 ],\n\t\t\t\t( this.direction === \"down\" ? i.item[ 0 ] : i.item[ 0 ].nextSibling ) );\n\t\t}\n\n\t\t//Various things done here to improve the performance:\n\t\t// 1. we create a setTimeout, that calls refreshPositions\n\t\t// 2. on the instance, we have a counter variable, that get's higher after every append\n\t\t// 3. on the local scope, we copy the counter variable, and check in the timeout,\n\t\t// if it's still the same\n\t\t// 4. this lets only the last addition to the timeout stack through\n\t\tthis.counter = this.counter ? ++this.counter : 1;\n\t\tvar counter = this.counter;\n\n\t\tthis._delay( function() {\n\t\t\tif ( counter === this.counter ) {\n\n\t\t\t\t//Precompute after each DOM insertion, NOT on mousemove\n\t\t\t\tthis.refreshPositions( !hardRefresh );\n\t\t\t}\n\t\t} );\n\n\t},\n\n\t_clear: function( event, noPropagation ) {\n\n\t\tthis.reverting = false;\n\n\t\t// We delay all events that have to be triggered to after the point where the placeholder\n\t\t// has been removed and everything else normalized again\n\t\tvar i,\n\t\t\tdelayedTriggers = [];\n\n\t\t// We first have to update the dom position of the actual currentItem\n\t\t// Note: don't do it if the current item is already removed (by a user), or it gets\n\t\t// reappended (see #4088)\n\t\tif ( !this._noFinalSort && this.currentItem.parent().length ) {\n\t\t\tthis.placeholder.before( this.currentItem );\n\t\t}\n\t\tthis._noFinalSort = null;\n\n\t\tif ( this.helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tfor ( i in this._storedCSS ) {\n\t\t\t\tif ( this._storedCSS[ i ] === \"auto\" || this._storedCSS[ i ] === \"static\" ) {\n\t\t\t\t\tthis._storedCSS[ i ] = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t} else {\n\t\t\tthis.currentItem.show();\n\t\t}\n\n\t\tif ( this.fromOutside && !noPropagation ) {\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"receive\", event, this._uiHash( this.fromOutside ) );\n\t\t\t} );\n\t\t}\n\t\tif ( ( this.fromOutside ||\n\t\t\t\tthis.domPosition.prev !==\n\t\t\t\tthis.currentItem.prev().not( \".ui-sortable-helper\" )[ 0 ] ||\n\t\t\t\tthis.domPosition.parent !== this.currentItem.parent()[ 0 ] ) && !noPropagation ) {\n\n\t\t\t// Trigger update callback if the DOM position has changed\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"update\", event, this._uiHash() );\n\t\t\t} );\n\t\t}\n\n\t\t// Check if the items Container has Changed and trigger appropriate\n\t\t// events.\n\t\tif ( this !== this.currentContainer ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\t\tthis._trigger( \"remove\", event, this._uiHash() );\n\t\t\t\t} );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"receive\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"update\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tfunction delayEvent( type, instance, container ) {\n\t\t\treturn function( event ) {\n\t\t\t\tcontainer._trigger( type, event, instance._uiHash( instance ) );\n\t\t\t};\n\t\t}\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"deactivate\", this, this.containers[ i ] ) );\n\t\t\t}\n\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"out\", this, this.containers[ i ] ) );\n\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t}\n\t\t}\n\n\t\t//Do what was originally in plugins\n\t\tif ( this.storedCursor ) {\n\t\t\tthis.document.find( \"body\" ).css( \"cursor\", this.storedCursor );\n\t\t\tthis.storedStylesheet.remove();\n\t\t}\n\t\tif ( this._storedOpacity ) {\n\t\t\tthis.helper.css( \"opacity\", this._storedOpacity );\n\t\t}\n\t\tif ( this._storedZIndex ) {\n\t\t\tthis.helper.css( \"zIndex\", this._storedZIndex === \"auto\" ? \"\" : this._storedZIndex );\n\t\t}\n\n\t\tthis.dragging = false;\n\n\t\tif ( !noPropagation ) {\n\t\t\tthis._trigger( \"beforeStop\", event, this._uiHash() );\n\t\t}\n\n\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t// it unbinds ALL events from the original node!\n\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\n\t\tif ( !this.cancelHelperRemoval ) {\n\t\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\t\t\tthis.helper = null;\n\t\t}\n\n\t\tif ( !noPropagation ) {\n\t\t\tfor ( i = 0; i < delayedTriggers.length; i++ ) {\n\n\t\t\t\t// Trigger all delayed events\n\t\t\t\tdelayedTriggers[ i ].call( this, event );\n\t\t\t}\n\t\t\tthis._trigger( \"stop\", event, this._uiHash() );\n\t\t}\n\n\t\tthis.fromOutside = false;\n\t\treturn !this.cancelHelperRemoval;\n\n\t},\n\n\t_trigger: function() {\n\t\tif ( $.Widget.prototype._trigger.apply( this, arguments ) === false ) {\n\t\t\tthis.cancel();\n\t\t}\n\t},\n\n\t_uiHash: function( _inst ) {\n\t\tvar inst = _inst || this;\n\t\treturn {\n\t\t\thelper: inst.helper,\n\t\t\tplaceholder: inst.placeholder || $( [] ),\n\t\t\tposition: inst.position,\n\t\t\toriginalPosition: inst.originalPosition,\n\t\t\toffset: inst.positionAbs,\n\t\t\titem: inst.currentItem,\n\t\t\tsender: _inst ? _inst.element : null\n\t\t};\n\t}\n\n} );\n\n\n\n// Create a local jQuery because jQuery Color relies on it and the\n// global may not exist with AMD and a custom build (#10199).\n// This module is a noop if used as a regular AMD module.\n// eslint-disable-next-line no-unused-vars\nvar jQuery = $;\n\n\n/*!\n * jQuery Color Animations v2.2.0\n * https://github.com/jquery/jquery-color\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n *\n * Date: Sun May 10 09:02:36 2020 +0200\n */\n\n\n\n\tvar stepHooks = \"backgroundColor borderBottomColor borderLeftColor borderRightColor \" +\n\t\t\"borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor\",\n\n\tclass2type = {},\n\ttoString = class2type.toString,\n\n\t// plusequals test for += 100 -= 100\n\trplusequals = /^([\\-+])=\\s*(\\d+\\.?\\d*)/,\n\n\t// a set of RE's that can match strings and generate color tuples.\n\tstringParsers = [ {\n\t\t\tre: /rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ],\n\t\t\t\t\texecResult[ 3 ],\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /rgba?\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ] * 2.55,\n\t\t\t\t\texecResult[ 2 ] * 2.55,\n\t\t\t\t\texecResult[ 3 ] * 2.55,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\n\t\t\t// this regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ], 16 ),\n\t\t\t\t\texecResult[ 4 ] ?\n\t\t\t\t\t\t( parseInt( execResult[ 4 ], 16 ) / 255 ).toFixed( 2 ) :\n\t\t\t\t\t\t1\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\n\t\t\t// this regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ] + execResult[ 3 ], 16 ),\n\t\t\t\t\texecResult[ 4 ] ?\n\t\t\t\t\t\t( parseInt( execResult[ 4 ] + execResult[ 4 ], 16 ) / 255 )\n\t\t\t\t\t\t\t.toFixed( 2 ) :\n\t\t\t\t\t\t1\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /hsla?\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tspace: \"hsla\",\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ] / 100,\n\t\t\t\t\texecResult[ 3 ] / 100,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t} ],\n\n\t// jQuery.Color( )\n\tcolor = jQuery.Color = function( color, green, blue, alpha ) {\n\t\treturn new jQuery.Color.fn.parse( color, green, blue, alpha );\n\t},\n\tspaces = {\n\t\trgba: {\n\t\t\tprops: {\n\t\t\t\tred: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tgreen: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tblue: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\thsla: {\n\t\t\tprops: {\n\t\t\t\thue: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"degrees\"\n\t\t\t\t},\n\t\t\t\tsaturation: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t},\n\t\t\t\tlightness: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tpropTypes = {\n\t\t\"byte\": {\n\t\t\tfloor: true,\n\t\t\tmax: 255\n\t\t},\n\t\t\"percent\": {\n\t\t\tmax: 1\n\t\t},\n\t\t\"degrees\": {\n\t\t\tmod: 360,\n\t\t\tfloor: true\n\t\t}\n\t},\n\tsupport = color.support = {},\n\n\t// element for support tests\n\tsupportElem = jQuery( \"<p>\" )[ 0 ],\n\n\t// colors = jQuery.Color.names\n\tcolors,\n\n\t// local aliases of functions called often\n\teach = jQuery.each;\n\n// determine rgba support immediately\nsupportElem.style.cssText = \"background-color:rgba(1,1,1,.5)\";\nsupport.rgba = supportElem.style.backgroundColor.indexOf( \"rgba\" ) > -1;\n\n// define cache name and alpha properties\n// for rgba and hsla spaces\neach( spaces, function( spaceName, space ) {\n\tspace.cache = \"_\" + spaceName;\n\tspace.props.alpha = {\n\t\tidx: 3,\n\t\ttype: \"percent\",\n\t\tdef: 1\n\t};\n} );\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction getType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction clamp( value, prop, allowEmpty ) {\n\tvar type = propTypes[ prop.type ] || {};\n\n\tif ( value == null ) {\n\t\treturn ( allowEmpty || !prop.def ) ? null : prop.def;\n\t}\n\n\t// ~~ is an short way of doing floor for positive numbers\n\tvalue = type.floor ? ~~value : parseFloat( value );\n\n\t// IE will pass in empty strings as value for alpha,\n\t// which will hit this case\n\tif ( isNaN( value ) ) {\n\t\treturn prop.def;\n\t}\n\n\tif ( type.mod ) {\n\n\t\t// we add mod before modding to make sure that negatives values\n\t\t// get converted properly: -10 -> 350\n\t\treturn ( value + type.mod ) % type.mod;\n\t}\n\n\t// for now all property types without mod have min and max\n\treturn Math.min( type.max, Math.max( 0, value ) );\n}\n\nfunction stringParse( string ) {\n\tvar inst = color(),\n\t\trgba = inst._rgba = [];\n\n\tstring = string.toLowerCase();\n\n\teach( stringParsers, function( _i, parser ) {\n\t\tvar parsed,\n\t\t\tmatch = parser.re.exec( string ),\n\t\t\tvalues = match && parser.parse( match ),\n\t\t\tspaceName = parser.space || \"rgba\";\n\n\t\tif ( values ) {\n\t\t\tparsed = inst[ spaceName ]( values );\n\n\t\t\t// if this was an rgba parse the assignment might happen twice\n\t\t\t// oh well....\n\t\t\tinst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];\n\t\t\trgba = inst._rgba = parsed._rgba;\n\n\t\t\t// exit each( stringParsers ) here because we matched\n\t\t\treturn false;\n\t\t}\n\t} );\n\n\t// Found a stringParser that handled it\n\tif ( rgba.length ) {\n\n\t\t// if this came from a parsed string, force \"transparent\" when alpha is 0\n\t\t// chrome, (and maybe others) return \"transparent\" as rgba(0,0,0,0)\n\t\tif ( rgba.join() === \"0,0,0,0\" ) {\n\t\t\tjQuery.extend( rgba, colors.transparent );\n\t\t}\n\t\treturn inst;\n\t}\n\n\t// named colors\n\treturn colors[ string ];\n}\n\ncolor.fn = jQuery.extend( color.prototype, {\n\tparse: function( red, green, blue, alpha ) {\n\t\tif ( red === undefined ) {\n\t\t\tthis._rgba = [ null, null, null, null ];\n\t\t\treturn this;\n\t\t}\n\t\tif ( red.jquery || red.nodeType ) {\n\t\t\tred = jQuery( red ).css( green );\n\t\t\tgreen = undefined;\n\t\t}\n\n\t\tvar inst = this,\n\t\t\ttype = getType( red ),\n\t\t\trgba = this._rgba = [];\n\n\t\t// more than 1 argument specified - assume ( red, green, blue, alpha )\n\t\tif ( green !== undefined ) {\n\t\t\tred = [ red, green, blue, alpha ];\n\t\t\ttype = \"array\";\n\t\t}\n\n\t\tif ( type === \"string\" ) {\n\t\t\treturn this.parse( stringParse( red ) || colors._default );\n\t\t}\n\n\t\tif ( type === \"array\" ) {\n\t\t\teach( spaces.rgba.props, function( _key, prop ) {\n\t\t\t\trgba[ prop.idx ] = clamp( red[ prop.idx ], prop );\n\t\t\t} );\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( type === \"object\" ) {\n\t\t\tif ( red instanceof color ) {\n\t\t\t\teach( spaces, function( _spaceName, space ) {\n\t\t\t\t\tif ( red[ space.cache ] ) {\n\t\t\t\t\t\tinst[ space.cache ] = red[ space.cache ].slice();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\teach( spaces, function( _spaceName, space ) {\n\t\t\t\t\tvar cache = space.cache;\n\t\t\t\t\teach( space.props, function( key, prop ) {\n\n\t\t\t\t\t\t// if the cache doesn't exist, and we know how to convert\n\t\t\t\t\t\tif ( !inst[ cache ] && space.to ) {\n\n\t\t\t\t\t\t\t// if the value was null, we don't need to copy it\n\t\t\t\t\t\t\t// if the key was alpha, we don't need to copy it either\n\t\t\t\t\t\t\tif ( key === \"alpha\" || red[ key ] == null ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinst[ cache ] = space.to( inst._rgba );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// this is the only case where we allow nulls for ALL properties.\n\t\t\t\t\t\t// call clamp with alwaysAllowEmpty\n\t\t\t\t\t\tinst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );\n\t\t\t\t\t} );\n\n\t\t\t\t\t// everything defined but alpha?\n\t\t\t\t\tif ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {\n\n\t\t\t\t\t\t// use the default of 1\n\t\t\t\t\t\tif ( inst[ cache ][ 3 ] == null ) {\n\t\t\t\t\t\t\tinst[ cache ][ 3 ] = 1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( space.from ) {\n\t\t\t\t\t\t\tinst._rgba = space.from( inst[ cache ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t},\n\tis: function( compare ) {\n\t\tvar is = color( compare ),\n\t\t\tsame = true,\n\t\t\tinst = this;\n\n\t\teach( spaces, function( _, space ) {\n\t\t\tvar localCache,\n\t\t\t\tisCache = is[ space.cache ];\n\t\t\tif ( isCache ) {\n\t\t\t\tlocalCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];\n\t\t\t\teach( space.props, function( _, prop ) {\n\t\t\t\t\tif ( isCache[ prop.idx ] != null ) {\n\t\t\t\t\t\tsame = ( isCache[ prop.idx ] === localCache[ prop.idx ] );\n\t\t\t\t\t\treturn same;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn same;\n\t\t} );\n\t\treturn same;\n\t},\n\t_space: function() {\n\t\tvar used = [],\n\t\t\tinst = this;\n\t\teach( spaces, function( spaceName, space ) {\n\t\t\tif ( inst[ space.cache ] ) {\n\t\t\t\tused.push( spaceName );\n\t\t\t}\n\t\t} );\n\t\treturn used.pop();\n\t},\n\ttransition: function( other, distance ) {\n\t\tvar end = color( other ),\n\t\t\tspaceName = end._space(),\n\t\t\tspace = spaces[ spaceName ],\n\t\t\tstartColor = this.alpha() === 0 ? color( \"transparent\" ) : this,\n\t\t\tstart = startColor[ space.cache ] || space.to( startColor._rgba ),\n\t\t\tresult = start.slice();\n\n\t\tend = end[ space.cache ];\n\t\teach( space.props, function( _key, prop ) {\n\t\t\tvar index = prop.idx,\n\t\t\t\tstartValue = start[ index ],\n\t\t\t\tendValue = end[ index ],\n\t\t\t\ttype = propTypes[ prop.type ] || {};\n\n\t\t\t// if null, don't override start value\n\t\t\tif ( endValue === null ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// if null - use end\n\t\t\tif ( startValue === null ) {\n\t\t\t\tresult[ index ] = endValue;\n\t\t\t} else {\n\t\t\t\tif ( type.mod ) {\n\t\t\t\t\tif ( endValue - startValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue += type.mod;\n\t\t\t\t\t} else if ( startValue - endValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue -= type.mod;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresult[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );\n\t\t\t}\n\t\t} );\n\t\treturn this[ spaceName ]( result );\n\t},\n\tblend: function( opaque ) {\n\n\t\t// if we are already opaque - return ourself\n\t\tif ( this._rgba[ 3 ] === 1 ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tvar rgb = this._rgba.slice(),\n\t\t\ta = rgb.pop(),\n\t\t\tblend = color( opaque )._rgba;\n\n\t\treturn color( jQuery.map( rgb, function( v, i ) {\n\t\t\treturn ( 1 - a ) * blend[ i ] + a * v;\n\t\t} ) );\n\t},\n\ttoRgbaString: function() {\n\t\tvar prefix = \"rgba(\",\n\t\t\trgba = jQuery.map( this._rgba, function( v, i ) {\n\t\t\t\tif ( v != null ) {\n\t\t\t\t\treturn v;\n\t\t\t\t}\n\t\t\t\treturn i > 2 ? 1 : 0;\n\t\t\t} );\n\n\t\tif ( rgba[ 3 ] === 1 ) {\n\t\t\trgba.pop();\n\t\t\tprefix = \"rgb(\";\n\t\t}\n\n\t\treturn prefix + rgba.join() + \")\";\n\t},\n\ttoHslaString: function() {\n\t\tvar prefix = \"hsla(\",\n\t\t\thsla = jQuery.map( this.hsla(), function( v, i ) {\n\t\t\t\tif ( v == null ) {\n\t\t\t\t\tv = i > 2 ? 1 : 0;\n\t\t\t\t}\n\n\t\t\t\t// catch 1 and 2\n\t\t\t\tif ( i && i < 3 ) {\n\t\t\t\t\tv = Math.round( v * 100 ) + \"%\";\n\t\t\t\t}\n\t\t\t\treturn v;\n\t\t\t} );\n\n\t\tif ( hsla[ 3 ] === 1 ) {\n\t\t\thsla.pop();\n\t\t\tprefix = \"hsl(\";\n\t\t}\n\t\treturn prefix + hsla.join() + \")\";\n\t},\n\ttoHexString: function( includeAlpha ) {\n\t\tvar rgba = this._rgba.slice(),\n\t\t\talpha = rgba.pop();\n\n\t\tif ( includeAlpha ) {\n\t\t\trgba.push( ~~( alpha * 255 ) );\n\t\t}\n\n\t\treturn \"#\" + jQuery.map( rgba, function( v ) {\n\n\t\t\t// default to 0 when nulls exist\n\t\t\tv = ( v || 0 ).toString( 16 );\n\t\t\treturn v.length === 1 ? \"0\" + v : v;\n\t\t} ).join( \"\" );\n\t},\n\ttoString: function() {\n\t\treturn this._rgba[ 3 ] === 0 ? \"transparent\" : this.toRgbaString();\n\t}\n} );\ncolor.fn.parse.prototype = color.fn;\n\n// hsla conversions adapted from:\n// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021\n\nfunction hue2rgb( p, q, h ) {\n\th = ( h + 1 ) % 1;\n\tif ( h * 6 < 1 ) {\n\t\treturn p + ( q - p ) * h * 6;\n\t}\n\tif ( h * 2 < 1 ) {\n\t\treturn q;\n\t}\n\tif ( h * 3 < 2 ) {\n\t\treturn p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;\n\t}\n\treturn p;\n}\n\nspaces.hsla.to = function( rgba ) {\n\tif ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {\n\t\treturn [ null, null, null, rgba[ 3 ] ];\n\t}\n\tvar r = rgba[ 0 ] / 255,\n\t\tg = rgba[ 1 ] / 255,\n\t\tb = rgba[ 2 ] / 255,\n\t\ta = rgba[ 3 ],\n\t\tmax = Math.max( r, g, b ),\n\t\tmin = Math.min( r, g, b ),\n\t\tdiff = max - min,\n\t\tadd = max + min,\n\t\tl = add * 0.5,\n\t\th, s;\n\n\tif ( min === max ) {\n\t\th = 0;\n\t} else if ( r === max ) {\n\t\th = ( 60 * ( g - b ) / diff ) + 360;\n\t} else if ( g === max ) {\n\t\th = ( 60 * ( b - r ) / diff ) + 120;\n\t} else {\n\t\th = ( 60 * ( r - g ) / diff ) + 240;\n\t}\n\n\t// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%\n\t// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)\n\tif ( diff === 0 ) {\n\t\ts = 0;\n\t} else if ( l <= 0.5 ) {\n\t\ts = diff / add;\n\t} else {\n\t\ts = diff / ( 2 - add );\n\t}\n\treturn [ Math.round( h ) % 360, s, l, a == null ? 1 : a ];\n};\n\nspaces.hsla.from = function( hsla ) {\n\tif ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {\n\t\treturn [ null, null, null, hsla[ 3 ] ];\n\t}\n\tvar h = hsla[ 0 ] / 360,\n\t\ts = hsla[ 1 ],\n\t\tl = hsla[ 2 ],\n\t\ta = hsla[ 3 ],\n\t\tq = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,\n\t\tp = 2 * l - q;\n\n\treturn [\n\t\tMath.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),\n\t\ta\n\t];\n};\n\n\neach( spaces, function( spaceName, space ) {\n\tvar props = space.props,\n\t\tcache = space.cache,\n\t\tto = space.to,\n\t\tfrom = space.from;\n\n\t// makes rgba() and hsla()\n\tcolor.fn[ spaceName ] = function( value ) {\n\n\t\t// generate a cache for this space if it doesn't exist\n\t\tif ( to && !this[ cache ] ) {\n\t\t\tthis[ cache ] = to( this._rgba );\n\t\t}\n\t\tif ( value === undefined ) {\n\t\t\treturn this[ cache ].slice();\n\t\t}\n\n\t\tvar ret,\n\t\t\ttype = getType( value ),\n\t\t\tarr = ( type === \"array\" || type === \"object\" ) ? value : arguments,\n\t\t\tlocal = this[ cache ].slice();\n\n\t\teach( props, function( key, prop ) {\n\t\t\tvar val = arr[ type === \"object\" ? key : prop.idx ];\n\t\t\tif ( val == null ) {\n\t\t\t\tval = local[ prop.idx ];\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = clamp( val, prop );\n\t\t} );\n\n\t\tif ( from ) {\n\t\t\tret = color( from( local ) );\n\t\t\tret[ cache ] = local;\n\t\t\treturn ret;\n\t\t} else {\n\t\t\treturn color( local );\n\t\t}\n\t};\n\n\t// makes red() green() blue() alpha() hue() saturation() lightness()\n\teach( props, function( key, prop ) {\n\n\t\t// alpha is included in more than one space\n\t\tif ( color.fn[ key ] ) {\n\t\t\treturn;\n\t\t}\n\t\tcolor.fn[ key ] = function( value ) {\n\t\t\tvar local, cur, match, fn,\n\t\t\t\tvtype = getType( value );\n\n\t\t\tif ( key === \"alpha\" ) {\n\t\t\t\tfn = this._hsla ? \"hsla\" : \"rgba\";\n\t\t\t} else {\n\t\t\t\tfn = spaceName;\n\t\t\t}\n\t\t\tlocal = this[ fn ]();\n\t\t\tcur = local[ prop.idx ];\n\n\t\t\tif ( vtype === \"undefined\" ) {\n\t\t\t\treturn cur;\n\t\t\t}\n\n\t\t\tif ( vtype === \"function\" ) {\n\t\t\t\tvalue = value.call( this, cur );\n\t\t\t\tvtype = getType( value );\n\t\t\t}\n\t\t\tif ( value == null && prop.empty ) {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif ( vtype === \"string\" ) {\n\t\t\t\tmatch = rplusequals.exec( value );\n\t\t\t\tif ( match ) {\n\t\t\t\t\tvalue = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === \"+\" ? 1 : -1 );\n\t\t\t\t}\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = value;\n\t\t\treturn this[ fn ]( local );\n\t\t};\n\t} );\n} );\n\n// add cssHook and .fx.step function for each named hook.\n// accept a space separated string of properties\ncolor.hook = function( hook ) {\n\tvar hooks = hook.split( \" \" );\n\teach( hooks, function( _i, hook ) {\n\t\tjQuery.cssHooks[ hook ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar parsed, curElem,\n\t\t\t\t\tbackgroundColor = \"\";\n\n\t\t\t\tif ( value !== \"transparent\" && ( getType( value ) !== \"string\" || ( parsed = stringParse( value ) ) ) ) {\n\t\t\t\t\tvalue = color( parsed || value );\n\t\t\t\t\tif ( !support.rgba && value._rgba[ 3 ] !== 1 ) {\n\t\t\t\t\t\tcurElem = hook === \"backgroundColor\" ? elem.parentNode : elem;\n\t\t\t\t\t\twhile (\n\t\t\t\t\t\t\t( backgroundColor === \"\" || backgroundColor === \"transparent\" ) &&\n\t\t\t\t\t\t\tcurElem && curElem.style\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tbackgroundColor = jQuery.css( curElem, \"backgroundColor\" );\n\t\t\t\t\t\t\t\tcurElem = curElem.parentNode;\n\t\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvalue = value.blend( backgroundColor && backgroundColor !== \"transparent\" ?\n\t\t\t\t\t\t\tbackgroundColor :\n\t\t\t\t\t\t\t\"_default\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = value.toRgbaString();\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\telem.style[ hook ] = value;\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// wrapped to prevent IE from throwing errors on \"invalid\" values like 'auto' or 'inherit'\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tjQuery.fx.step[ hook ] = function( fx ) {\n\t\t\tif ( !fx.colorInit ) {\n\t\t\t\tfx.start = color( fx.elem, hook );\n\t\t\t\tfx.end = color( fx.end );\n\t\t\t\tfx.colorInit = true;\n\t\t\t}\n\t\t\tjQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );\n\t\t};\n\t} );\n\n};\n\ncolor.hook( stepHooks );\n\njQuery.cssHooks.borderColor = {\n\texpand: function( value ) {\n\t\tvar expanded = {};\n\n\t\teach( [ \"Top\", \"Right\", \"Bottom\", \"Left\" ], function( _i, part ) {\n\t\t\texpanded[ \"border\" + part + \"Color\" ] = value;\n\t\t} );\n\t\treturn expanded;\n\t}\n};\n\n// Basic color names only.\n// Usage of any of the other color names requires adding yourself or including\n// jquery.color.svg-names.js.\ncolors = jQuery.Color.names = {\n\n\t// 4.1. Basic color keywords\n\taqua: \"#00ffff\",\n\tblack: \"#000000\",\n\tblue: \"#0000ff\",\n\tfuchsia: \"#ff00ff\",\n\tgray: \"#808080\",\n\tgreen: \"#008000\",\n\tlime: \"#00ff00\",\n\tmaroon: \"#800000\",\n\tnavy: \"#000080\",\n\tolive: \"#808000\",\n\tpurple: \"#800080\",\n\tred: \"#ff0000\",\n\tsilver: \"#c0c0c0\",\n\tteal: \"#008080\",\n\twhite: \"#ffffff\",\n\tyellow: \"#ffff00\",\n\n\t// 4.2.3. \"transparent\" color keyword\n\ttransparent: [ null, null, null, 0 ],\n\n\t_default: \"#ffffff\"\n};\n\n\n/*!\n * jQuery UI Effects 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Effects Core\n//>>group: Effects\n/* eslint-disable max-len */\n//>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects.\n/* eslint-enable max-len */\n//>>docs: https://api.jqueryui.com/category/effects-core/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar dataSpace = \"ui-effects-\",\n\tdataSpaceStyle = \"ui-effects-style\",\n\tdataSpaceAnimated = \"ui-effects-animated\";\n\n$.effects = {\n\teffect: {}\n};\n\n/******************************************************************************/\n/****************************** CLASS ANIMATIONS ******************************/\n/******************************************************************************/\n( function() {\n\nvar classAnimationActions = [ \"add\", \"remove\", \"toggle\" ],\n\tshorthandStyles = {\n\t\tborder: 1,\n\t\tborderBottom: 1,\n\t\tborderColor: 1,\n\t\tborderLeft: 1,\n\t\tborderRight: 1,\n\t\tborderTop: 1,\n\t\tborderWidth: 1,\n\t\tmargin: 1,\n\t\tpadding: 1\n\t};\n\n$.each(\n\t[ \"borderLeftStyle\", \"borderRightStyle\", \"borderBottomStyle\", \"borderTopStyle\" ],\n\tfunction( _, prop ) {\n\t\t$.fx.step[ prop ] = function( fx ) {\n\t\t\tif ( fx.end !== \"none\" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {\n\t\t\t\tjQuery.style( fx.elem, prop, fx.end );\n\t\t\t\tfx.setAttr = true;\n\t\t\t}\n\t\t};\n\t}\n);\n\nfunction camelCase( string ) {\n\treturn string.replace( /-([\\da-z])/gi, function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t} );\n}\n\nfunction getElementStyles( elem ) {\n\tvar key, len,\n\t\tstyle = elem.ownerDocument.defaultView ?\n\t\t\telem.ownerDocument.defaultView.getComputedStyle( elem, null ) :\n\t\t\telem.currentStyle,\n\t\tstyles = {};\n\n\tif ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {\n\t\tlen = style.length;\n\t\twhile ( len-- ) {\n\t\t\tkey = style[ len ];\n\t\t\tif ( typeof style[ key ] === \"string\" ) {\n\t\t\t\tstyles[ camelCase( key ) ] = style[ key ];\n\t\t\t}\n\t\t}\n\n\t// Support: Opera, IE <9\n\t} else {\n\t\tfor ( key in style ) {\n\t\t\tif ( typeof style[ key ] === \"string\" ) {\n\t\t\t\tstyles[ key ] = style[ key ];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn styles;\n}\n\nfunction styleDifference( oldStyle, newStyle ) {\n\tvar diff = {},\n\t\tname, value;\n\n\tfor ( name in newStyle ) {\n\t\tvalue = newStyle[ name ];\n\t\tif ( oldStyle[ name ] !== value ) {\n\t\t\tif ( !shorthandStyles[ name ] ) {\n\t\t\t\tif ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {\n\t\t\t\t\tdiff[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn diff;\n}\n\n// Support: jQuery <1.8\nif ( !$.fn.addBack ) {\n\t$.fn.addBack = function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t};\n}\n\n$.effects.animateClass = function( value, duration, easing, callback ) {\n\tvar o = $.speed( duration, easing, callback );\n\n\treturn this.queue( function() {\n\t\tvar animated = $( this ),\n\t\t\tbaseClass = animated.attr( \"class\" ) || \"\",\n\t\t\tapplyClassChange,\n\t\t\tallAnimations = o.children ? animated.find( \"*\" ).addBack() : animated;\n\n\t\t// Map the animated objects to store the original styles.\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tvar el = $( this );\n\t\t\treturn {\n\t\t\t\tel: el,\n\t\t\t\tstart: getElementStyles( this )\n\t\t\t};\n\t\t} );\n\n\t\t// Apply class change\n\t\tapplyClassChange = function() {\n\t\t\t$.each( classAnimationActions, function( i, action ) {\n\t\t\t\tif ( value[ action ] ) {\n\t\t\t\t\tanimated[ action + \"Class\" ]( value[ action ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t\tapplyClassChange();\n\n\t\t// Map all animated objects again - calculate new styles and diff\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tthis.end = getElementStyles( this.el[ 0 ] );\n\t\t\tthis.diff = styleDifference( this.start, this.end );\n\t\t\treturn this;\n\t\t} );\n\n\t\t// Apply original class\n\t\tanimated.attr( \"class\", baseClass );\n\n\t\t// Map all animated objects again - this time collecting a promise\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tvar styleInfo = this,\n\t\t\t\tdfd = $.Deferred(),\n\t\t\t\topts = $.extend( {}, o, {\n\t\t\t\t\tqueue: false,\n\t\t\t\t\tcomplete: function() {\n\t\t\t\t\t\tdfd.resolve( styleInfo );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\tthis.el.animate( this.diff, opts );\n\t\t\treturn dfd.promise();\n\t\t} );\n\n\t\t// Once all animations have completed:\n\t\t$.when.apply( $, allAnimations.get() ).done( function() {\n\n\t\t\t// Set the final class\n\t\t\tapplyClassChange();\n\n\t\t\t// For each animated element,\n\t\t\t// clear all css properties that were animated\n\t\t\t$.each( arguments, function() {\n\t\t\t\tvar el = this.el;\n\t\t\t\t$.each( this.diff, function( key ) {\n\t\t\t\t\tel.css( key, \"\" );\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t\t// This is guarnteed to be there if you use jQuery.speed()\n\t\t\t// it also handles dequeuing the next anim...\n\t\t\to.complete.call( animated[ 0 ] );\n\t\t} );\n\t} );\n};\n\n$.fn.extend( {\n\taddClass: ( function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn speed ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ add: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t} )( $.fn.addClass ),\n\n\tremoveClass: ( function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn arguments.length > 1 ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ remove: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t} )( $.fn.removeClass ),\n\n\ttoggleClass: ( function( orig ) {\n\t\treturn function( classNames, force, speed, easing, callback ) {\n\t\t\tif ( typeof force === \"boolean\" || force === undefined ) {\n\t\t\t\tif ( !speed ) {\n\n\t\t\t\t\t// Without speed parameter\n\t\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t\t( force ? { add: classNames } : { remove: classNames } ),\n\t\t\t\t\t\tspeed, easing, callback );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Without force parameter\n\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t{ toggle: classNames }, force, speed, easing );\n\t\t\t}\n\t\t};\n\t} )( $.fn.toggleClass ),\n\n\tswitchClass: function( remove, add, speed, easing, callback ) {\n\t\treturn $.effects.animateClass.call( this, {\n\t\t\tadd: add,\n\t\t\tremove: remove\n\t\t}, speed, easing, callback );\n\t}\n} );\n\n} )();\n\n/******************************************************************************/\n/*********************************** EFFECTS **********************************/\n/******************************************************************************/\n\n( function() {\n\nif ( $.expr && $.expr.pseudos && $.expr.pseudos.animated ) {\n\t$.expr.pseudos.animated = ( function( orig ) {\n\t\treturn function( elem ) {\n\t\t\treturn !!$( elem ).data( dataSpaceAnimated ) || orig( elem );\n\t\t};\n\t} )( $.expr.pseudos.animated );\n}\n\nif ( $.uiBackCompat !== false ) {\n\t$.extend( $.effects, {\n\n\t\t// Saves a set of properties in a data storage\n\t\tsave: function( element, set ) {\n\t\t\tvar i = 0, length = set.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\t\telement.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Restores a set of previously saved properties from a data storage\n\t\trestore: function( element, set ) {\n\t\t\tvar val, i = 0, length = set.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\t\tval = element.data( dataSpace + set[ i ] );\n\t\t\t\t\telement.css( set[ i ], val );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tsetMode: function( el, mode ) {\n\t\t\tif ( mode === \"toggle\" ) {\n\t\t\t\tmode = el.is( \":hidden\" ) ? \"show\" : \"hide\";\n\t\t\t}\n\t\t\treturn mode;\n\t\t},\n\n\t\t// Wraps the element around a wrapper that copies position properties\n\t\tcreateWrapper: function( element ) {\n\n\t\t\t// If the element is already wrapped, return it\n\t\t\tif ( element.parent().is( \".ui-effects-wrapper\" ) ) {\n\t\t\t\treturn element.parent();\n\t\t\t}\n\n\t\t\t// Wrap the element\n\t\t\tvar props = {\n\t\t\t\t\twidth: element.outerWidth( true ),\n\t\t\t\t\theight: element.outerHeight( true ),\n\t\t\t\t\t\"float\": element.css( \"float\" )\n\t\t\t\t},\n\t\t\t\twrapper = $( \"<div></div>\" )\n\t\t\t\t\t.addClass( \"ui-effects-wrapper\" )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tfontSize: \"100%\",\n\t\t\t\t\t\tbackground: \"transparent\",\n\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\tpadding: 0\n\t\t\t\t\t} ),\n\n\t\t\t\t// Store the size in case width/height are defined in % - Fixes #5245\n\t\t\t\tsize = {\n\t\t\t\t\twidth: element.width(),\n\t\t\t\t\theight: element.height()\n\t\t\t\t},\n\t\t\t\tactive = document.activeElement;\n\n\t\t\t// Support: Firefox\n\t\t\t// Firefox incorrectly exposes anonymous content\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=561664\n\t\t\ttry {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tactive.id;\n\t\t\t} catch ( e ) {\n\t\t\t\tactive = document.body;\n\t\t\t}\n\n\t\t\telement.wrap( wrapper );\n\n\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t\t$( active ).trigger( \"focus\" );\n\t\t\t}\n\n\t\t\t// Hotfix for jQuery 1.4 since some change in wrap() seems to actually\n\t\t\t// lose the reference to the wrapped element\n\t\t\twrapper = element.parent();\n\n\t\t\t// Transfer positioning properties to the wrapper\n\t\t\tif ( element.css( \"position\" ) === \"static\" ) {\n\t\t\t\twrapper.css( { position: \"relative\" } );\n\t\t\t\telement.css( { position: \"relative\" } );\n\t\t\t} else {\n\t\t\t\t$.extend( props, {\n\t\t\t\t\tposition: element.css( \"position\" ),\n\t\t\t\t\tzIndex: element.css( \"z-index\" )\n\t\t\t\t} );\n\t\t\t\t$.each( [ \"top\", \"left\", \"bottom\", \"right\" ], function( i, pos ) {\n\t\t\t\t\tprops[ pos ] = element.css( pos );\n\t\t\t\t\tif ( isNaN( parseInt( props[ pos ], 10 ) ) ) {\n\t\t\t\t\t\tprops[ pos ] = \"auto\";\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\telement.css( {\n\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: \"auto\",\n\t\t\t\t\tbottom: \"auto\"\n\t\t\t\t} );\n\t\t\t}\n\t\t\telement.css( size );\n\n\t\t\treturn wrapper.css( props ).show();\n\t\t},\n\n\t\tremoveWrapper: function( element ) {\n\t\t\tvar active = document.activeElement;\n\n\t\t\tif ( element.parent().is( \".ui-effects-wrapper\" ) ) {\n\t\t\t\telement.parent().replaceWith( element );\n\n\t\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t\t\t$( active ).trigger( \"focus\" );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn element;\n\t\t}\n\t} );\n}\n\n$.extend( $.effects, {\n\tversion: \"1.13.3\",\n\n\tdefine: function( name, mode, effect ) {\n\t\tif ( !effect ) {\n\t\t\teffect = mode;\n\t\t\tmode = \"effect\";\n\t\t}\n\n\t\t$.effects.effect[ name ] = effect;\n\t\t$.effects.effect[ name ].mode = mode;\n\n\t\treturn effect;\n\t},\n\n\tscaledDimensions: function( element, percent, direction ) {\n\t\tif ( percent === 0 ) {\n\t\t\treturn {\n\t\t\t\theight: 0,\n\t\t\t\twidth: 0,\n\t\t\t\touterHeight: 0,\n\t\t\t\touterWidth: 0\n\t\t\t};\n\t\t}\n\n\t\tvar x = direction !== \"horizontal\" ? ( ( percent || 100 ) / 100 ) : 1,\n\t\t\ty = direction !== \"vertical\" ? ( ( percent || 100 ) / 100 ) : 1;\n\n\t\treturn {\n\t\t\theight: element.height() * y,\n\t\t\twidth: element.width() * x,\n\t\t\touterHeight: element.outerHeight() * y,\n\t\t\touterWidth: element.outerWidth() * x\n\t\t};\n\n\t},\n\n\tclipToBox: function( animation ) {\n\t\treturn {\n\t\t\twidth: animation.clip.right - animation.clip.left,\n\t\t\theight: animation.clip.bottom - animation.clip.top,\n\t\t\tleft: animation.clip.left,\n\t\t\ttop: animation.clip.top\n\t\t};\n\t},\n\n\t// Injects recently queued functions to be first in line (after \"inprogress\")\n\tunshift: function( element, queueLength, count ) {\n\t\tvar queue = element.queue();\n\n\t\tif ( queueLength > 1 ) {\n\t\t\tqueue.splice.apply( queue,\n\t\t\t\t[ 1, 0 ].concat( queue.splice( queueLength, count ) ) );\n\t\t}\n\t\telement.dequeue();\n\t},\n\n\tsaveStyle: function( element ) {\n\t\telement.data( dataSpaceStyle, element[ 0 ].style.cssText );\n\t},\n\n\trestoreStyle: function( element ) {\n\t\telement[ 0 ].style.cssText = element.data( dataSpaceStyle ) || \"\";\n\t\telement.removeData( dataSpaceStyle );\n\t},\n\n\tmode: function( element, mode ) {\n\t\tvar hidden = element.is( \":hidden\" );\n\n\t\tif ( mode === \"toggle\" ) {\n\t\t\tmode = hidden ? \"show\" : \"hide\";\n\t\t}\n\t\tif ( hidden ? mode === \"hide\" : mode === \"show\" ) {\n\t\t\tmode = \"none\";\n\t\t}\n\t\treturn mode;\n\t},\n\n\t// Translates a [top,left] array into a baseline value\n\tgetBaseline: function( origin, original ) {\n\t\tvar y, x;\n\n\t\tswitch ( origin[ 0 ] ) {\n\t\tcase \"top\":\n\t\t\ty = 0;\n\t\t\tbreak;\n\t\tcase \"middle\":\n\t\t\ty = 0.5;\n\t\t\tbreak;\n\t\tcase \"bottom\":\n\t\t\ty = 1;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\ty = origin[ 0 ] / original.height;\n\t\t}\n\n\t\tswitch ( origin[ 1 ] ) {\n\t\tcase \"left\":\n\t\t\tx = 0;\n\t\t\tbreak;\n\t\tcase \"center\":\n\t\t\tx = 0.5;\n\t\t\tbreak;\n\t\tcase \"right\":\n\t\t\tx = 1;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tx = origin[ 1 ] / original.width;\n\t\t}\n\n\t\treturn {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t},\n\n\t// Creates a placeholder element so that the original element can be made absolute\n\tcreatePlaceholder: function( element ) {\n\t\tvar placeholder,\n\t\t\tcssPosition = element.css( \"position\" ),\n\t\t\tposition = element.position();\n\n\t\t// Lock in margins first to account for form elements, which\n\t\t// will change margin if you explicitly set height\n\t\t// see: https://jsfiddle.net/JZSMt/3/ https://bugs.webkit.org/show_bug.cgi?id=107380\n\t\t// Support: Safari\n\t\telement.css( {\n\t\t\tmarginTop: element.css( \"marginTop\" ),\n\t\t\tmarginBottom: element.css( \"marginBottom\" ),\n\t\t\tmarginLeft: element.css( \"marginLeft\" ),\n\t\t\tmarginRight: element.css( \"marginRight\" )\n\t\t} )\n\t\t.outerWidth( element.outerWidth() )\n\t\t.outerHeight( element.outerHeight() );\n\n\t\tif ( /^(static|relative)/.test( cssPosition ) ) {\n\t\t\tcssPosition = \"absolute\";\n\n\t\t\tplaceholder = $( \"<\" + element[ 0 ].nodeName + \">\" ).insertAfter( element ).css( {\n\n\t\t\t\t// Convert inline to inline block to account for inline elements\n\t\t\t\t// that turn to inline block based on content (like img)\n\t\t\t\tdisplay: /^(inline|ruby)/.test( element.css( \"display\" ) ) ?\n\t\t\t\t\t\"inline-block\" :\n\t\t\t\t\t\"block\",\n\t\t\t\tvisibility: \"hidden\",\n\n\t\t\t\t// Margins need to be set to account for margin collapse\n\t\t\t\tmarginTop: element.css( \"marginTop\" ),\n\t\t\t\tmarginBottom: element.css( \"marginBottom\" ),\n\t\t\t\tmarginLeft: element.css( \"marginLeft\" ),\n\t\t\t\tmarginRight: element.css( \"marginRight\" ),\n\t\t\t\t\"float\": element.css( \"float\" )\n\t\t\t} )\n\t\t\t.outerWidth( element.outerWidth() )\n\t\t\t.outerHeight( element.outerHeight() )\n\t\t\t.addClass( \"ui-effects-placeholder\" );\n\n\t\t\telement.data( dataSpace + \"placeholder\", placeholder );\n\t\t}\n\n\t\telement.css( {\n\t\t\tposition: cssPosition,\n\t\t\tleft: position.left,\n\t\t\ttop: position.top\n\t\t} );\n\n\t\treturn placeholder;\n\t},\n\n\tremovePlaceholder: function( element ) {\n\t\tvar dataKey = dataSpace + \"placeholder\",\n\t\t\t\tplaceholder = element.data( dataKey );\n\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.remove();\n\t\t\telement.removeData( dataKey );\n\t\t}\n\t},\n\n\t// Removes a placeholder if it exists and restores\n\t// properties that were modified during placeholder creation\n\tcleanUp: function( element ) {\n\t\t$.effects.restoreStyle( element );\n\t\t$.effects.removePlaceholder( element );\n\t},\n\n\tsetTransition: function( element, list, factor, value ) {\n\t\tvalue = value || {};\n\t\t$.each( list, function( i, x ) {\n\t\t\tvar unit = element.cssUnit( x );\n\t\t\tif ( unit[ 0 ] > 0 ) {\n\t\t\t\tvalue[ x ] = unit[ 0 ] * factor + unit[ 1 ];\n\t\t\t}\n\t\t} );\n\t\treturn value;\n\t}\n} );\n\n// Return an effect options object for the given parameters:\nfunction _normalizeArguments( effect, options, speed, callback ) {\n\n\t// Allow passing all options as the first parameter\n\tif ( $.isPlainObject( effect ) ) {\n\t\toptions = effect;\n\t\teffect = effect.effect;\n\t}\n\n\t// Convert to an object\n\teffect = { effect: effect };\n\n\t// Catch (effect, null, ...)\n\tif ( options == null ) {\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, callback)\n\tif ( typeof options === \"function\" ) {\n\t\tcallback = options;\n\t\tspeed = null;\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, speed, ?)\n\tif ( typeof options === \"number\" || $.fx.speeds[ options ] ) {\n\t\tcallback = speed;\n\t\tspeed = options;\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, options, callback)\n\tif ( typeof speed === \"function\" ) {\n\t\tcallback = speed;\n\t\tspeed = null;\n\t}\n\n\t// Add options to effect\n\tif ( options ) {\n\t\t$.extend( effect, options );\n\t}\n\n\tspeed = speed || options.duration;\n\teffect.duration = $.fx.off ? 0 :\n\t\ttypeof speed === \"number\" ? speed :\n\t\tspeed in $.fx.speeds ? $.fx.speeds[ speed ] :\n\t\t$.fx.speeds._default;\n\n\teffect.complete = callback || options.complete;\n\n\treturn effect;\n}\n\nfunction standardAnimationOption( option ) {\n\n\t// Valid standard speeds (nothing, number, named speed)\n\tif ( !option || typeof option === \"number\" || $.fx.speeds[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Invalid strings - treat as \"normal\" speed\n\tif ( typeof option === \"string\" && !$.effects.effect[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Complete callback\n\tif ( typeof option === \"function\" ) {\n\t\treturn true;\n\t}\n\n\t// Options hash (but not naming an effect)\n\tif ( typeof option === \"object\" && !option.effect ) {\n\t\treturn true;\n\t}\n\n\t// Didn't match any standard API\n\treturn false;\n}\n\n$.fn.extend( {\n\teffect: function( /* effect, options, speed, callback */ ) {\n\t\tvar args = _normalizeArguments.apply( this, arguments ),\n\t\t\teffectMethod = $.effects.effect[ args.effect ],\n\t\t\tdefaultMode = effectMethod.mode,\n\t\t\tqueue = args.queue,\n\t\t\tqueueName = queue || \"fx\",\n\t\t\tcomplete = args.complete,\n\t\t\tmode = args.mode,\n\t\t\tmodes = [],\n\t\t\tprefilter = function( next ) {\n\t\t\t\tvar el = $( this ),\n\t\t\t\t\tnormalizedMode = $.effects.mode( el, mode ) || defaultMode;\n\n\t\t\t\t// Sentinel for duck-punching the :animated pseudo-selector\n\t\t\t\tel.data( dataSpaceAnimated, true );\n\n\t\t\t\t// Save effect mode for later use,\n\t\t\t\t// we can't just call $.effects.mode again later,\n\t\t\t\t// as the .show() below destroys the initial state\n\t\t\t\tmodes.push( normalizedMode );\n\n\t\t\t\t// See $.uiBackCompat inside of run() for removal of defaultMode in 1.14\n\t\t\t\tif ( defaultMode && ( normalizedMode === \"show\" ||\n\t\t\t\t\t\t( normalizedMode === defaultMode && normalizedMode === \"hide\" ) ) ) {\n\t\t\t\t\tel.show();\n\t\t\t\t}\n\n\t\t\t\tif ( !defaultMode || normalizedMode !== \"none\" ) {\n\t\t\t\t\t$.effects.saveStyle( el );\n\t\t\t\t}\n\n\t\t\t\tif ( typeof next === \"function\" ) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( $.fx.off || !effectMethod ) {\n\n\t\t\t// Delegate to the original method (e.g., .show()) if possible\n\t\t\tif ( mode ) {\n\t\t\t\treturn this[ mode ]( args.duration, complete );\n\t\t\t} else {\n\t\t\t\treturn this.each( function() {\n\t\t\t\t\tif ( complete ) {\n\t\t\t\t\t\tcomplete.call( this );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\tfunction run( next ) {\n\t\t\tvar elem = $( this );\n\n\t\t\tfunction cleanup() {\n\t\t\t\telem.removeData( dataSpaceAnimated );\n\n\t\t\t\t$.effects.cleanUp( elem );\n\n\t\t\t\tif ( args.mode === \"hide\" ) {\n\t\t\t\t\telem.hide();\n\t\t\t\t}\n\n\t\t\t\tdone();\n\t\t\t}\n\n\t\t\tfunction done() {\n\t\t\t\tif ( typeof complete === \"function\" ) {\n\t\t\t\t\tcomplete.call( elem[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\tif ( typeof next === \"function\" ) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mode option on a per element basis,\n\t\t\t// as toggle can be either show or hide depending on element state\n\t\t\targs.mode = modes.shift();\n\n\t\t\tif ( $.uiBackCompat !== false && !defaultMode ) {\n\t\t\t\tif ( elem.is( \":hidden\" ) ? mode === \"hide\" : mode === \"show\" ) {\n\n\t\t\t\t\t// Call the core method to track \"olddisplay\" properly\n\t\t\t\t\telem[ mode ]();\n\t\t\t\t\tdone();\n\t\t\t\t} else {\n\t\t\t\t\teffectMethod.call( elem[ 0 ], args, done );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( args.mode === \"none\" ) {\n\n\t\t\t\t\t// Call the core method to track \"olddisplay\" properly\n\t\t\t\t\telem[ mode ]();\n\t\t\t\t\tdone();\n\t\t\t\t} else {\n\t\t\t\t\teffectMethod.call( elem[ 0 ], args, cleanup );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Run prefilter on all elements first to ensure that\n\t\t// any showing or hiding happens before placeholder creation,\n\t\t// which ensures that any layout changes are correctly captured.\n\t\treturn queue === false ?\n\t\t\tthis.each( prefilter ).each( run ) :\n\t\t\tthis.queue( queueName, prefilter ).queue( queueName, run );\n\t},\n\n\tshow: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"show\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.show ),\n\n\thide: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"hide\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.hide ),\n\n\ttoggle: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) || typeof option === \"boolean\" ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"toggle\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.toggle ),\n\n\tcssUnit: function( key ) {\n\t\tvar style = this.css( key ),\n\t\t\tval = [];\n\n\t\t$.each( [ \"em\", \"px\", \"%\", \"pt\" ], function( i, unit ) {\n\t\t\tif ( style.indexOf( unit ) > 0 ) {\n\t\t\t\tval = [ parseFloat( style ), unit ];\n\t\t\t}\n\t\t} );\n\t\treturn val;\n\t},\n\n\tcssClip: function( clipObj ) {\n\t\tif ( clipObj ) {\n\t\t\treturn this.css( \"clip\", \"rect(\" + clipObj.top + \"px \" + clipObj.right + \"px \" +\n\t\t\t\tclipObj.bottom + \"px \" + clipObj.left + \"px)\" );\n\t\t}\n\t\treturn parseClip( this.css( \"clip\" ), this );\n\t},\n\n\ttransfer: function( options, done ) {\n\t\tvar element = $( this ),\n\t\t\ttarget = $( options.to ),\n\t\t\ttargetFixed = target.css( \"position\" ) === \"fixed\",\n\t\t\tbody = $( \"body\" ),\n\t\t\tfixTop = targetFixed ? body.scrollTop() : 0,\n\t\t\tfixLeft = targetFixed ? body.scrollLeft() : 0,\n\t\t\tendPosition = target.offset(),\n\t\t\tanimation = {\n\t\t\t\ttop: endPosition.top - fixTop,\n\t\t\t\tleft: endPosition.left - fixLeft,\n\t\t\t\theight: target.innerHeight(),\n\t\t\t\twidth: target.innerWidth()\n\t\t\t},\n\t\t\tstartPosition = element.offset(),\n\t\t\ttransfer = $( \"<div class='ui-effects-transfer'></div>\" );\n\n\t\ttransfer\n\t\t\t.appendTo( \"body\" )\n\t\t\t.addClass( options.className )\n\t\t\t.css( {\n\t\t\t\ttop: startPosition.top - fixTop,\n\t\t\t\tleft: startPosition.left - fixLeft,\n\t\t\t\theight: element.innerHeight(),\n\t\t\t\twidth: element.innerWidth(),\n\t\t\t\tposition: targetFixed ? \"fixed\" : \"absolute\"\n\t\t\t} )\n\t\t\t.animate( animation, options.duration, options.easing, function() {\n\t\t\t\ttransfer.remove();\n\t\t\t\tif ( typeof done === \"function\" ) {\n\t\t\t\t\tdone();\n\t\t\t\t}\n\t\t\t} );\n\t}\n} );\n\nfunction parseClip( str, element ) {\n\t\tvar outerWidth = element.outerWidth(),\n\t\t\touterHeight = element.outerHeight(),\n\t\t\tclipRegex = /^rect\\((-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto)\\)$/,\n\t\t\tvalues = clipRegex.exec( str ) || [ \"\", 0, outerWidth, outerHeight, 0 ];\n\n\t\treturn {\n\t\t\ttop: parseFloat( values[ 1 ] ) || 0,\n\t\t\tright: values[ 2 ] === \"auto\" ? outerWidth : parseFloat( values[ 2 ] ),\n\t\t\tbottom: values[ 3 ] === \"auto\" ? outerHeight : parseFloat( values[ 3 ] ),\n\t\t\tleft: parseFloat( values[ 4 ] ) || 0\n\t\t};\n}\n\n$.fx.step.clip = function( fx ) {\n\tif ( !fx.clipInit ) {\n\t\tfx.start = $( fx.elem ).cssClip();\n\t\tif ( typeof fx.end === \"string\" ) {\n\t\t\tfx.end = parseClip( fx.end, fx.elem );\n\t\t}\n\t\tfx.clipInit = true;\n\t}\n\n\t$( fx.elem ).cssClip( {\n\t\ttop: fx.pos * ( fx.end.top - fx.start.top ) + fx.start.top,\n\t\tright: fx.pos * ( fx.end.right - fx.start.right ) + fx.start.right,\n\t\tbottom: fx.pos * ( fx.end.bottom - fx.start.bottom ) + fx.start.bottom,\n\t\tleft: fx.pos * ( fx.end.left - fx.start.left ) + fx.start.left\n\t} );\n};\n\n} )();\n\n/******************************************************************************/\n/*********************************** EASING ***********************************/\n/******************************************************************************/\n\n( function() {\n\n// Based on easing equations from Robert Penner (http://robertpenner.com/easing)\n\nvar baseEasings = {};\n\n$.each( [ \"Quad\", \"Cubic\", \"Quart\", \"Quint\", \"Expo\" ], function( i, name ) {\n\tbaseEasings[ name ] = function( p ) {\n\t\treturn Math.pow( p, i + 2 );\n\t};\n} );\n\n$.extend( baseEasings, {\n\tSine: function( p ) {\n\t\treturn 1 - Math.cos( p * Math.PI / 2 );\n\t},\n\tCirc: function( p ) {\n\t\treturn 1 - Math.sqrt( 1 - p * p );\n\t},\n\tElastic: function( p ) {\n\t\treturn p === 0 || p === 1 ? p :\n\t\t\t-Math.pow( 2, 8 * ( p - 1 ) ) * Math.sin( ( ( p - 1 ) * 80 - 7.5 ) * Math.PI / 15 );\n\t},\n\tBack: function( p ) {\n\t\treturn p * p * ( 3 * p - 2 );\n\t},\n\tBounce: function( p ) {\n\t\tvar pow2,\n\t\t\tbounce = 4;\n\n\t\twhile ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}\n\t\treturn 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );\n\t}\n} );\n\n$.each( baseEasings, function( name, easeIn ) {\n\t$.easing[ \"easeIn\" + name ] = easeIn;\n\t$.easing[ \"easeOut\" + name ] = function( p ) {\n\t\treturn 1 - easeIn( 1 - p );\n\t};\n\t$.easing[ \"easeInOut\" + name ] = function( p ) {\n\t\treturn p < 0.5 ?\n\t\t\teaseIn( p * 2 ) / 2 :\n\t\t\t1 - easeIn( p * -2 + 2 ) / 2;\n\t};\n} );\n\n} )();\n\nvar effect = $.effects;\n\n\n/*!\n * jQuery UI Effects Fade 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Fade Effect\n//>>group: Effects\n//>>description: Fades the element.\n//>>docs: https://api.jqueryui.com/fade-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectFade = $.effects.define( \"fade\", \"toggle\", function( options, done ) {\n\tvar show = options.mode === \"show\";\n\n\t$( this )\n\t\t.css( \"opacity\", show ? 0 : 1 )\n\t\t.animate( {\n\t\t\topacity: show ? 1 : 0\n\t\t}, {\n\t\t\tqueue: false,\n\t\t\tduration: options.duration,\n\t\t\teasing: options.easing,\n\t\t\tcomplete: done\n\t\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Size 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Size Effect\n//>>group: Effects\n//>>description: Resize an element to a specified width and height.\n//>>docs: https://api.jqueryui.com/size-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectSize = $.effects.define( \"size\", function( options, done ) {\n\n\t// Create element\n\tvar baseline, factor, temp,\n\t\telement = $( this ),\n\n\t\t// Copy for children\n\t\tcProps = [ \"fontSize\" ],\n\t\tvProps = [ \"borderTopWidth\", \"borderBottomWidth\", \"paddingTop\", \"paddingBottom\" ],\n\t\thProps = [ \"borderLeftWidth\", \"borderRightWidth\", \"paddingLeft\", \"paddingRight\" ],\n\n\t\t// Set options\n\t\tmode = options.mode,\n\t\trestore = mode !== \"effect\",\n\t\tscale = options.scale || \"both\",\n\t\torigin = options.origin || [ \"middle\", \"center\" ],\n\t\tposition = element.css( \"position\" ),\n\t\tpos = element.position(),\n\t\toriginal = $.effects.scaledDimensions( element ),\n\t\tfrom = options.from || original,\n\t\tto = options.to || $.effects.scaledDimensions( element, 0 );\n\n\t$.effects.createPlaceholder( element );\n\n\tif ( mode === \"show\" ) {\n\t\ttemp = from;\n\t\tfrom = to;\n\t\tto = temp;\n\t}\n\n\t// Set scaling factor\n\tfactor = {\n\t\tfrom: {\n\t\t\ty: from.height / original.height,\n\t\t\tx: from.width / original.width\n\t\t},\n\t\tto: {\n\t\t\ty: to.height / original.height,\n\t\t\tx: to.width / original.width\n\t\t}\n\t};\n\n\t// Scale the css box\n\tif ( scale === \"box\" || scale === \"both\" ) {\n\n\t\t// Vertical props scaling\n\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\tfrom = $.effects.setTransition( element, vProps, factor.from.y, from );\n\t\t\tto = $.effects.setTransition( element, vProps, factor.to.y, to );\n\t\t}\n\n\t\t// Horizontal props scaling\n\t\tif ( factor.from.x !== factor.to.x ) {\n\t\t\tfrom = $.effects.setTransition( element, hProps, factor.from.x, from );\n\t\t\tto = $.effects.setTransition( element, hProps, factor.to.x, to );\n\t\t}\n\t}\n\n\t// Scale the content\n\tif ( scale === \"content\" || scale === \"both\" ) {\n\n\t\t// Vertical props scaling\n\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\tfrom = $.effects.setTransition( element, cProps, factor.from.y, from );\n\t\t\tto = $.effects.setTransition( element, cProps, factor.to.y, to );\n\t\t}\n\t}\n\n\t// Adjust the position properties based on the provided origin points\n\tif ( origin ) {\n\t\tbaseline = $.effects.getBaseline( origin, original );\n\t\tfrom.top = ( original.outerHeight - from.outerHeight ) * baseline.y + pos.top;\n\t\tfrom.left = ( original.outerWidth - from.outerWidth ) * baseline.x + pos.left;\n\t\tto.top = ( original.outerHeight - to.outerHeight ) * baseline.y + pos.top;\n\t\tto.left = ( original.outerWidth - to.outerWidth ) * baseline.x + pos.left;\n\t}\n\tdelete from.outerHeight;\n\tdelete from.outerWidth;\n\telement.css( from );\n\n\t// Animate the children if desired\n\tif ( scale === \"content\" || scale === \"both\" ) {\n\n\t\tvProps = vProps.concat( [ \"marginTop\", \"marginBottom\" ] ).concat( cProps );\n\t\thProps = hProps.concat( [ \"marginLeft\", \"marginRight\" ] );\n\n\t\t// Only animate children with width attributes specified\n\t\t// TODO: is this right? should we include anything with css width specified as well\n\t\telement.find( \"*[width]\" ).each( function() {\n\t\t\tvar child = $( this ),\n\t\t\t\tchildOriginal = $.effects.scaledDimensions( child ),\n\t\t\t\tchildFrom = {\n\t\t\t\t\theight: childOriginal.height * factor.from.y,\n\t\t\t\t\twidth: childOriginal.width * factor.from.x,\n\t\t\t\t\touterHeight: childOriginal.outerHeight * factor.from.y,\n\t\t\t\t\touterWidth: childOriginal.outerWidth * factor.from.x\n\t\t\t\t},\n\t\t\t\tchildTo = {\n\t\t\t\t\theight: childOriginal.height * factor.to.y,\n\t\t\t\t\twidth: childOriginal.width * factor.to.x,\n\t\t\t\t\touterHeight: childOriginal.height * factor.to.y,\n\t\t\t\t\touterWidth: childOriginal.width * factor.to.x\n\t\t\t\t};\n\n\t\t\t// Vertical props scaling\n\t\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\t\tchildFrom = $.effects.setTransition( child, vProps, factor.from.y, childFrom );\n\t\t\t\tchildTo = $.effects.setTransition( child, vProps, factor.to.y, childTo );\n\t\t\t}\n\n\t\t\t// Horizontal props scaling\n\t\t\tif ( factor.from.x !== factor.to.x ) {\n\t\t\t\tchildFrom = $.effects.setTransition( child, hProps, factor.from.x, childFrom );\n\t\t\t\tchildTo = $.effects.setTransition( child, hProps, factor.to.x, childTo );\n\t\t\t}\n\n\t\t\tif ( restore ) {\n\t\t\t\t$.effects.saveStyle( child );\n\t\t\t}\n\n\t\t\t// Animate children\n\t\t\tchild.css( childFrom );\n\t\t\tchild.animate( childTo, options.duration, options.easing, function() {\n\n\t\t\t\t// Restore children\n\t\t\t\tif ( restore ) {\n\t\t\t\t\t$.effects.restoreStyle( child );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Animate\n\telement.animate( to, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: function() {\n\n\t\t\tvar offset = element.offset();\n\n\t\t\tif ( to.opacity === 0 ) {\n\t\t\t\telement.css( \"opacity\", from.opacity );\n\t\t\t}\n\n\t\t\tif ( !restore ) {\n\t\t\t\telement\n\t\t\t\t\t.css( \"position\", position === \"static\" ? \"relative\" : position )\n\t\t\t\t\t.offset( offset );\n\n\t\t\t\t// Need to save style here so that automatic style restoration\n\t\t\t\t// doesn't restore to the original styles from before the animation.\n\t\t\t\t$.effects.saveStyle( element );\n\t\t\t}\n\n\t\t\tdone();\n\t\t}\n\t} );\n\n} );\n\n\n/*!\n * jQuery UI Effects Scale 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Scale Effect\n//>>group: Effects\n//>>description: Grows or shrinks an element and its content.\n//>>docs: https://api.jqueryui.com/scale-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectScale = $.effects.define( \"scale\", function( options, done ) {\n\n\t// Create element\n\tvar el = $( this ),\n\t\tmode = options.mode,\n\t\tpercent = parseInt( options.percent, 10 ) ||\n\t\t\t( parseInt( options.percent, 10 ) === 0 ? 0 : ( mode !== \"effect\" ? 0 : 100 ) ),\n\n\t\tnewOptions = $.extend( true, {\n\t\t\tfrom: $.effects.scaledDimensions( el ),\n\t\t\tto: $.effects.scaledDimensions( el, percent, options.direction || \"both\" ),\n\t\t\torigin: options.origin || [ \"middle\", \"center\" ]\n\t\t}, options );\n\n\t// Fade option to support puff\n\tif ( options.fade ) {\n\t\tnewOptions.from.opacity = 1;\n\t\tnewOptions.to.opacity = 0;\n\t}\n\n\t$.effects.effect.size.call( this, newOptions, done );\n} );\n\n\n/*!\n * jQuery UI Effects Puff 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Puff Effect\n//>>group: Effects\n//>>description: Creates a puff effect by scaling the element up and hiding it at the same time.\n//>>docs: https://api.jqueryui.com/puff-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectPuff = $.effects.define( \"puff\", \"hide\", function( options, done ) {\n\tvar newOptions = $.extend( true, {}, options, {\n\t\tfade: true,\n\t\tpercent: parseInt( options.percent, 10 ) || 150\n\t} );\n\n\t$.effects.effect.scale.call( this, newOptions, done );\n} );\n\n\n\n\n} );", "import { Application } from '@hotwired/stimulus'\nimport { DatepickerController } from './controllers/datepicker.controller';\nimport '@hotwired/turbo-rails'\nimport { InvoiceItemSelectorController } from './controllers/invoice-item-selector.controller';\nimport { RadioToggleController } from './controllers/radio-toggle.controller';\nimport { StripePaymentController } from './controllers/stripe-payment.controller';\nimport Reveal from '@stimulus-components/reveal'\nimport {TimerController} from \"./controllers/timer.controller\";\nimport {AddressAutocompleteController} from \"./controllers/address-autocomplete.controller\";\nimport \"./components/address-autocomplete.css\";\nimport './components/prevent_number_input_scroll';\n\n\n// All the jquery stuff. Take care, imports are awaited in Promise.all style, so jquery is not available when not using import() or require!\nimport'./vendor/jquery'\nimport './vendor/jquery-ui'\nimport 'jquery-ui/themes/base/all.css'\n\n\nimport Rails from \"@rails/ujs\"\nimport './components/bootstrap'\nimport './components/datepicker/custom-bs3.scss'\nimport './components/select2'\nimport './components/bootbox'\nimport './components/student_portal_base.css'\nimport 'font-awesome/css/font-awesome.min.css'\n\nRails.start();\nconst application = Application.start();\napplication.register('datepicker', DatepickerController);\napplication.register('radio-toggle', RadioToggleController);\napplication.register('reveal', Reveal);\napplication.register('stripe-payment', StripePaymentController);\napplication.register('invoice-item-selector', InvoiceItemSelectorController)\napplication.register('timer', TimerController)\napplication.register('address-autocomplete', AddressAutocompleteController)\n\n$(function () {\n    activateSelect2(document);\n});\n\nfunction activateSelect2(elem) {\n    $(elem).find('.select2').each(function (i, e) {\n        var getUrl = function () {\n            var url = select.data('source');\n            var appendValue = select.data('source-append-value-of');\n            if (appendValue) {\n                var appendedValue = $(select.data('source-append-value-of')).val();\n                var appendValueMissingMessage = select.data('source-append-value-of-missing-message');\n                if (!appendedValue && appendValueMissingMessage) {\n                    bootbox.alert(appendValueMissingMessage);\n                    throw new Error('Missing value for get parameter');\n                }\n                url = url + $(select.data('source-append-value-of')).val();\n            }\n            return url;\n        };\n\n        var select = $(e);\n        var options = {\n            theme: 'bootstrap',\n            allowClear: true,\n            placeholder: '-'\n        };\n        if (select.hasClass('ajax')) {\n            options.ajax = {\n                url: getUrl,\n                dataType: 'json',\n                data: function (term, page) {\n                    return { q: term, page: page, per: 30 };\n                },\n                results: function (data, page) {\n                    return { results: data };\n                }\n            };\n            // TODO is the following condition correct? should not be attribute 'class' but 'multiple'\n            if (select.hasClass('multiple')) {\n                options.multiple = true;\n            }\n        }\n        // always keep open when able to select multiple\n        if (select.attr('multiple') || select.hasClass('multiple')) {\n            options.closeOnSelect = false;\n        }\n        if (select.hasClass('sortable')) {\n            select.select2Sortable(options);\n        } else {\n            select.select2(options)\n        }\n        if (select.hasClass('ajax') && select.data('value-id')) {\n            select.select2('data', { id: select.data('value-id'), text: select.data('value-name') });\n        }\n        if (select.hasClass('ajax') && select.data('values')) {\n            select.select2('data', select.data('values'));\n        }\n        if (select.data('source-append-value-of')) {\n            $(select.data('source-append-value-of')).change(function () {\n                select.select2('val', '');\n            });\n        }\n    });\n}\n", "require('bootstrap');\nrequire('bootstrap/dist/css/bootstrap.css');\nrequire('./bootstrap_print.css')\nrequire('./auto-dropup')\n", "require('select2');\nrequire('./select2_sortable');\nrequire('select2/select2_locale_de');\nrequire('select2/select2.css');\nrequire('./select2-bootstrap.css');\nrequire('select2/')\nrequire('./select2-kurso.scss');\nrequire('./select2-sortable.css');\n", "const bootbox = require('bootbox');\nrequire('bootbox/dist/bootbox.locales');\n\nbootbox.setDefaults({\n    /**\n     * @optional String\n     * @default: en\n     * which locale settings to use to translate the three\n     * standard button labels: OK, CONFIRM, CANCEL\n     */\n    locale: \"de\",\n\n    /**\n     * @optional Boolean\n     * @default: true\n     * whether the dialog should be shown immediately\n     */\n    show: true,\n\n    /**\n     * @optional Boolean\n     * @default: true\n     * whether the dialog should be have a backdrop or not\n     */\n    backdrop: true,\n\n    /**\n     * @optional Boolean\n     * @default: true\n     * show a close button\n     */\n    closeButton: true,\n\n    /**\n     * @optional Boolean\n     * @default: true\n     * animate the dialog in and out (not supported in < IE 10)\n     */\n    animate: false,\n\n    /**\n     * @optional String\n     * @default: null\n     * an additional class to apply to the dialog wrapper\n     */\n    className: \"bootbox-modal\"\n\n});\n\nexport { bootbox };\n"],
  "mappings": "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KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,QAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,QAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,QAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,QAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,QAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,QAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,QAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,QAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,UAAS,MAAK,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,QAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,MAAK,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,QAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,KAAI,UAAS,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",
  "names": ["consumer", "error", "extend", "consumer", "consumer", "subscription", "obj", "findScript", "injectScript", "registerWrapper", "onError", "onLoad", "loadScript", "error", "initStripe", "validateLoadParams", "loadStripe", "require_pure", "window", "document", "indexOf", "jQuery", "arr", "support", "tokenize", "hasOwn", "push", "slice", "i", "rtrim", "rquickExpr", "Sizzle", "cache", "matches", "documentElement", "node", "start", "dir", "isXML", "elem", "self", "add", "key", "value", "data", "name", "prop", "index", "length", "j", "location", "error", "val", "method", "type", "$", "undefined", "exports", "_", "defaults", "$", "error", "CustomEvent", "confirm", "href", "Rails", "start", "$", "$", "$", "$", "$", "$", "getParent", "$", "e", "$", "self", "$", "$", "$", "$", "$", "undefined", "indexOf", "debounce", "range", "self", "data", "results", "container", "element", "tags", "selected", "$", "$", "require_select2", "require_select2_sortable", "bootbox", "application", "error", "fetch", "match", "oldValue", "error", "constructor", "application", "element", "addEventListener", "removeEventListener", "config", "config", "range", "start", "range", "range", "config", "range", "config", "config", "config", "cancelEvent", "config", "submitter", "config", "location", "error", "cookie", "View", "ctx", "morphChildren", "findBestMatch", "morphNode", "createMorphContext", "normalizeElement", "normalizeParent", "session", "visit", "recentRequests", "document", "createConsumer", "submitter", "start", "element", "error", "_Reveal", "jquery", "$", "add", "data", "position", "form", "labels", "scrollParent", "uuid", "event", "document", "error", "jQuery", "color", "cache", "_", "start", "hook", "effect", "bootbox", "Rails"]
}
