(() => {window.fr_deff_store = {"key":"store:settings-3","defaultSchema":{"theme":"system","locale":"ru","show_cookies":true,"basket":[],"o":{}}}
const noopProgress = (p) => {console.log(p)}

const pfetch = (url, params = {}, progress = noopProgress) => {
  progress(1)

  return fetch(url, params)
    .then((response) => {
      if (!response.ok) {
        throw Error(response.status + " " + response.statusText);
      }

      if (!response.body) {
        throw Error("ReadableStream not yet supported in this browser.");
      }

      // A compressed or chunked response may not expose its decoded size.
      const contentEncoding = response.headers.get("content-encoding");
      const contentLength = response.headers.get(
        contentEncoding ? "x-file-size" : "content-length"
      );
      const total = parseInt(contentLength, 10);
      const hasTotal = Number.isFinite(total) && total > 0;
      let loaded = 0;
      let reportedProgress = 1;

      return new Response(
        new ReadableStream({
          start(controller) {
            const reader = response.body.getReader();

            read();
            function read() {
              reader
                .read()
                .then(({ done, value }) => {
                  if (done) {
                    if (reportedProgress < 100) {
                      progress(100);
                    }
                    controller.close();
                    return;
                  }
                  loaded += value.byteLength;
                  if (hasTotal) {
                    const nextProgress = Math.min(100, Math.round((loaded / total) * 100));
                    if (nextProgress !== reportedProgress) {
                      reportedProgress = nextProgress;
                      progress(nextProgress);
                    }
                  }
                  controller.enqueue(value);
                  read();
                })
                .catch((error) => {
                  console.error(error);
                  controller.error(error);
                });
            }
          },
        })
      );
    })
    .catch((error) => {
      console.error(error);
    });
};


const delimiter = ":";
const delimetrRXP = new RegExp(delimiter);

class Emitter {
  constructor() {
    this._listeners = {};
    this._map = {};
    this._dev = true;
    this.delimiter = delimiter;
  }

  emit(event, message) {
    if (Array.isArray(event)) event = event.join(".");
    const res = [];

    if (this._listeners["*"] !== undefined) {
      let l = this._listeners["*"].length;

      while (l--) {
        res.push(this._listeners["*"][l].callback(message, event));
      }
    }

    if (this._listeners[event] !== undefined) {
      let l = this._listeners[event].length;

      while (l--) {
        res.push(this._listeners[event][l].callback(message, event));
      }
    }

    return res;
  }

  once(event, callback) {
    const _callback = (message) => {
      callback(message);
      this.off(event, _callback);
    };
    this.on(event, _callback);
  }

  addToPrefixMap(event) {
    const steps = event.split(".");

    let parent = this._map;

    for (let index = 0; index < steps.length; index++) {
      const element = steps[index];
      if (parent[element] === undefined) {
        parent[element] = {
          count: 1,
        };
      } else {
        parent[element].count += 1;
      }

      parent = parent[element];
    }
  }

  removeToPrefixMap(event) {
    const steps = event.split(".");

    let parent = this._map;

    for (let index = 0; index < steps.length; index++) {
      const element = steps[index];

      if (parent[element] !== undefined) {
        parent[element].count -= 1;

        if (parent[element].count === 0) {
          delete parent[element];
        } else {
          parent = parent[element];
        }
      }
    }
  }

  on(_event, callback) {
    if (Array.isArray(_event)) {
      const offArr = _event.map((e) => this.on(e, callback));

      return () => {
        return offArr.forEach((fn) => fn());
      };
    }

    if (!delimetrRXP.test(_event)) {
      _event = _event + `:${getUID()}`;
    }
    const [event, postfix] = _event.split(delimiter);

    this.addToPrefixMap(event);

    if (this._listeners[event] === undefined) this._listeners[event] = [];

    this._listeners[event].push({ _event, event, postfix, callback });

    return () => this.off(_event);
  }

  off(_event) {
    if (Array.isArray(_event)) return _event.forEach((e) => this.off(e));

    const [event, postfix] = _event.split(delimiter);

    if (event === "&") {
      // eslint-disable-next-line no-unused-vars
      for (let e in this._listeners) {
        this.off(`${e}${delimiter}${postfix}`);
      }

      return;
    }

    if (this._listeners[event] === undefined) this._listeners[event] = [];

    this._listeners[event].forEach((em, index) => {
      if (em._event === _event) {
        this.removeToPrefixMap(event);

        this._listeners[event].splice(index, 1);
      }
    });

    return this;
  }
}

const getUID = () => {
  return "_" + Math.random().toString(36).substr(2, 9);
};

const getStore = () => {
  const Storage = {
    set: async (key, value) => {
      return await localStorage.setItem(key, value);
    },
    get: async (key) => {
      return await localStorage.getItem(key);
    },
    setJSON: async (key, value) => {
      const v = typeof value === "string" ? value : JSON.stringify(value);

      return await Storage.set(key, v);
    },
    getJSON: async (key) => {
      const res = await Storage.get(key);

      return JSON.parse(res);
    },
    remove: async (key) => await localStorage.removeItem(key),
  };

  class Store extends Emitter {
    constructor({ key, defaultSchema = {} }, func = {}) {
      super();

      this.defaultSchema = defaultSchema;
      this.storageKey = key;
      this.temporary = key !== undefined ? false : true;
      this._ = {};
      this.__ = {};
      this._prepare = func?.prepare;
      this._inited = false;
    }

    async init() {
      if (this._inited) return;
      if (this.temporary === false) {
        const _ = await Storage.getJSON(this.storageKey);

        this._ = _ || {};
      } else {
        this._ = {};
      }

      if (this._prepare) {
        await this._prepare();
      }

      this._inited = true;
      this.memorize("event-inited", true);
    }

    get(oKey, def = undefined, handler = void 0) {
      if (this._inited === false) {
        throw new Error(`Store not inited ${this.storageKey} get`);
      }

      if (oKey === undefined) return this._;

      let [key] = oKey.split(Emitter.delimiter);
      let off = () => {};

      const isFunction = typeof handler === "function";

      const rRes = get(this.__, key);

      if (isFunction) {
        off = this.on(oKey, handler);
      }

      if (rRes !== undefined) {
        if (isFunction) {
          handler({ next: rRes, def });
          return off;
        } else {
          return rRes;
        }
      }

      const res = get(this._, key);

      if (res !== undefined) {
        if (isFunction) {
          handler({ next: res, def });
          return off;
        } else {
          return res;
        }
      }

      const dRes = get(this.defaultSchema, key);
      if (dRes !== undefined) {
        if (isFunction) {
          handler({ next: dRes, def });
          return off;
        } else {
          return dRes;
        }
      }

      if (def !== undefined) {
        if (isFunction) {
          handler({ next: def, def });
          return off;
        } else {
          return def;
        }
      }

      if (isFunction) {
        handler({ next: undefined, def });
        return off;
      } else {
        return undefined;
      }
    }

    remove(okey) {
      if (this._inited === false) {
        throw new Error(`Store not inited ${this.storageKey} remove`);
      }

      this.clear(okey);

      this.off(okey);
    }

    clear(key) {
      if (this._inited === false) {
        throw new Error(`Store not inited' ${this.storageKey} clear`);
      }

      if (get(this._, key) !== undefined) {
        this.set(key, void 0);
        this.save();
      } else {
        this.memorize(key, void 0);
      }
    }

    set(key, value, temp = this.temporary) {
      if (this._inited === false) {
        throw new Error(`Store not inited ${this.storageKey} set`);
      }

      [key] = key.split(Emitter.delimiter);

      const kArr = key.split(".");

      if (!temp) {
        const prev = get(this._, key);

        // TODO - обратить внимание

        if (prev === value) return;

        set(this._, key, value);

        kArr.reduce((acc, elem) => {
          acc.push(elem);

          const currentKey = acc.join(".");

          this.emit(currentKey, { prev, next: get(this._, currentKey) });

          return acc;
        }, []);

        // emit to up

        traverse(this._map, kArr, (path) => {
          const _prev = get(prev, [...path].splice(kArr.length, path.length));
          const next = get(this._, path);

          if (_prev !== next) {
            this.emit(path, { prev: _prev, next });
          }
        });

        this.save();
      } else {
        const prev = get(this.__, key);

        set(this.__, key, value);

        kArr.reduce((acc, elem) => {
          acc.push(elem);

          const currentKey = acc.join(".");

          this.emit(currentKey, { prev, next: get(this.__, currentKey) });

          return acc;
        }, []);

        // emit to up

        traverse(this._map, kArr, (path) => {
          const _prev = get(prev, [...path].splice(kArr.length, path.length));
          const next = get(this.__, path);

          if (_prev !== next) {
            this.emit(path, { prev: _prev, next });
          }
        });
      }

      return true;
    }

    has(key) {
      if (this._inited === false) {
        throw new Error(`Store not inited ${this.storageKey} has`);
      }

      return !!this.get(key);
    }

    memorize(key, value) {
      if (this._inited === false) {
        throw new Error(`Store not inited ${this.storageKey} memorize`);
      }

      return this.set(key, value, true);
    }

    memorizeAssign(key, object) {
      if (this._inited === false) {
        throw new Error(`Store not inited ${this.storageKey} memorizeAssign`);
      }

      const old = this.get(key, {});

      if (old) {
        const ndata = Object.assign({}, old, object);
        this.memorize(key, ndata);
      }
    }

    assign(key, object) {
        if (this._inited === false) {
          throw new Error(`Store not inited ${this.storageKey} memorizeAssign`);
        }
  
        const old = this.get(key, {});
  
        if (old) {
          const ndata = Object.assign({}, old, object);
          this.set(key, ndata);
        }
      }

    async save() {
      if (this._inited === false) {
        throw new Error(`Store not inited ${this.storageKey} save`);
      }

      if (this.temporary === false) {
        await Storage.setJSON(this.storageKey, this._);
      }
    }
  }

  const traverse = (map, kArr, cb) => {
    const last = get(map, kArr);

    if (last !== undefined) {
      for (let _ in last) {
        if (_ === "count") {
          continue;
        }
        const currentKey = [...kArr, _];

        cb(currentKey);

        traverse(map, currentKey, cb);
      }
    }
  };

  const get = (obj, path, defaultValue) => {
    if (typeof path === "string") path = path.split(".");

    let node = obj;

    for (let i = 0; i < path.length; i++) {
      const key = path[i];

      if (!node) {
        node = undefined;

        break;
      }

      node = node[key];
    }

    return typeof node === "undefined" ? defaultValue : node;
  };

  const set = (obj, path, defaultValue, setter) => {
    if (typeof path === "string") path = path.split(".");

    if (typeof setter === "undefined") setter = defaultValue;

    let value = get(obj, path);

    if (
      (typeof value === "undefined" ||
        (typeof value === "number" && isNaN(value))) &&
      typeof defaultValue !== "function"
    ) {
      value = defaultValue;
    }

    let node = obj;

    for (var i = 0; i < path.length - 1; i++) {
      const key = path[i];
      const nextKey = +path[i + 1];

      if (!node[key]) node[key] = isNaN(nextKey) ? {} : [];

      node = node[key];
    }

    node[path[i]] = typeof setter === "function" ? setter(value) : setter;

    return obj;
  };

  return { Emitter, Store };
};

const setCookie = (name, value, options = {}) => {
  options = {
    path: "/",
    ...options,
  };

  if (options.expires instanceof Date) {
    options.expires = options.expires.toUTCString();
  }

  let updatedCookie =
    encodeURIComponent(name) + "=" + encodeURIComponent(value);

  for (let optionKey in options) {
    updatedCookie += "; " + optionKey;
    let optionValue = options[optionKey];
    if (optionValue !== true) {
      updatedCookie += "=" + optionValue;
    }
  }

  document.cookie = updatedCookie;
};

const deleteCookie = (name) => {
  setCookie(name, "", {
    "max-age": -1,
  });
};


class Portal {
  constructor(elm, block, name) {
    this.name = name;
    this.root = elm;
    this.block = block;
    this.page = block.page;

    this.page._portals[this.name] = this;
  }
  destroy() {
    delete this.page._portals[this.name];
  }
}


class BlockClass extends Emitter {
  _colors = {
    light: {
      textGray: "#67738A",
      textLightGray: "#ACB4C6",
      textGreen: "#09B96A",
      textRed: "#FF1A05",
      textOrange: "#D97706",
      textBlue: "#124BE7",
    },
    dark: {
      textGray: "#676C7A",
      textLightGray: "#484F5D",
      textGreen: "#00904E",
      textRed: "#F79389",
      textOrange: "#935F07",
      textBlue: "#163B8D",
    },
  };

  _colorAlias = {
    light: {
      "#67738A": "textGray",
      "#ACB4C6": "textLightGray",
      "#09B96A": "textGreen",
      "#FF1A05": "textRed",
      "#D97706": "textOrange",
      "#124BE7": "textBlue",
    },
    dark: {
      "#676C7A": "textGray",
      "#484F5D": "textLightGray",
      "#00904E": "textGreen",
      "#F79389": "textRed",
      "#935F07": "textOrange",
      "#163B8D": "textBlue",
    },
  };

  __cache = {};
  __event_cache = {};

  constructor(name, id, page, state = {}, data = {}) {
    super();
    this.name = name;
    this.id = id;
    this.type = name.replace(/-(.\d*)$/, "");
    this.page = page;
    this.children = [];
    this.state = state;
    if (this.page._blocks[this.id] && this.page._blocks[this.id] !== this) {
      throw new Error(`Duplicate block id: ${this.id}`);
    }
    this.page._blocks[this.id] = this;
    this.initData = data;
    this.data = data;
    this.isBlock = true;
    this.refs = {};
    this.portal = null;
    this.renderKey = id;
    this._mounted = false;
    this._unmounted = false;
    this._reloadSequence = 0;
  }

  clearCache() {
    delete this.page.__cache[this.id];

    if (this.state && this.state.eventList) {
      this.state.eventList.forEach(e => {
        delete this.page.__event_cache[e.fid];
      });
    }
  }

  findDOMElement() {
    const cached = this.page.__cache[this.id];
    if (cached && cached.isConnected !== false) {
      return cached;
    }

    delete this.page.__cache[this.id];
    const elm = document.getElementById(this.id);

    elm && (this.page.__cache[this.id] = elm);

    return elm;
  }

  findEventDOMElement(id) {
    if (this.page.__event_cache[id]) {
      return this.page.__event_cache[id];
    } else {
      const elm = this.root.querySelector(`[f-id=${id}]`);

      this.page.__event_cache[id] = elm;
      return elm;
    }
  }


  async getBlock(name, data = {}) {
    return await this.page.getBlock(name, {
      parent_id: this.id,
      parent_render_key: this.renderKey,
      ...data,
    });
  }

  async refetchBlock(name, data = {}) {
    return await this.page.getBlock(name, {
      block_id: this.id,
      block_render_key: this.renderKey,
      parent_id: this.parent.id,
      parent_render_key: this.parent.renderKey,
      ...data
    });
  }

  async __remove() {
    return await this.page.enqueueMutation(async () => {
      await this._beforeUnmountTree();

      this.traverse((b) => {
        delete this.page.__cache[b.id];
      });

      this._unmount();

      this.root.remove();
    });
  }

  async remove() {
    return await this.page.enqueueMutation(async () => {
      await this._beforeUnmountTree();

      this.traverse((b) =>
        b.clearCache()
      );

      this._unmount();

      this.root.remove();
    });
  }


  _update(name, id, page, state = {}, data = {}) {
    this.name = name;
    this.id = id;
    this.type = name.replace(/-(.\d*)$/, "");
    this.page = page;
    this.state = state;
    this.initData = data;
    this.data = data;
    this.refs = {};
    this.portal = null;
    this.root = null;
    this.selector = null;
    this.page._blocks[this.id] = this;
    this._mounted = false;
    this._unmounted = false;
  }

  render() {
    return this.page.renderFrBlock(this);
  }

  getMorphdomNodeKey(node) {
    if (node._frKey) return node._frKey;

    const renderKey = node.getAttribute?.("data-fr-key");

    if (renderKey) return renderKey;
    if (node.block?.renderKey) return node.block.renderKey;
    if (node._id) return node._id;
    return node.id;
  }

  async rerender(fullUpdate = false) {
    if (this._preparingUnmount) {
      throw new Error(`Cannot rerender ${this.name} during beforeUnmount`);
    }

    // Задел для сохранения data при перерендере
    const data = this._willUnmount();

    const [html, rb] = this.page.renderFrBlock(this, data);

    // console.log('html', html, rb)

    const traverseDOM = (node, cb) => {
      cb(node);
      const children = node.children;
      if (children) {
        for (let child of children) {
          traverseDOM(child, cb);
        }
      }
    };

    if (!fullUpdate) {
      const needEventRemove = [];
      const needEventUpdate = {};
      const needElmRemove = [];
      const needElmUpdate = {};

      return await this.page.updateBlocks(rb, void 0, this, () => {
        morphdom(this.root, html, {
          onBeforeElUpdated: (fromEl, toEl) => {
            if (toEl.hasAttribute) {
              if (toEl.hasAttribute("id")) {
                let id = toEl.getAttribute("id");
                needElmUpdate[id] = fromEl;
                toEl.removeAttribute("id");
                fromEl._id = id;
              }

              if (toEl.hasAttribute("f-id")) {
                if (fromEl._f) {
                  needEventRemove.push(fromEl._f.id);
                }

                needEventUpdate[toEl.getAttribute("f-id")] = fromEl;
                toEl.removeAttribute("f-id");
              }
            }

            if (fromEl.isEqualNode(toEl)) {
              return false;
            }

            return true;
          },
          getNodeKey: (node) => this.getMorphdomNodeKey(node),
          onBeforeNodeAdded: (node) => {
            if (node.hasAttribute) {
              if (node.hasAttribute("id")) {
                let id = node.getAttribute("id");
                needElmUpdate[id] = node;
                node._id = id;
                node.removeAttribute("id");
              }
            }

            traverseDOM(node, (n) => {
              if (n.hasAttribute && n.hasAttribute("f-id")) {
                needEventUpdate[n.getAttribute("f-id")] = n;
                n.removeAttribute("f-id");
              }
            });

            return node;
          },
          onBeforeNodeDiscarded: (node) => {
            if (node.block) {
              node.block.traverse((b) => {
                needElmRemove.push(b.id);
              });

              (node.block.state.eventList || []).forEach((e) => {
                needEventRemove.push(e.fid);
              });
            } else {
              traverseDOM(node, (n) => {
                if (n._f) {
                  needEventRemove.push(n._f.id);
                }
              });
            }

            return true;
          },
        });

        for (let index = 0; index < needElmRemove.length; index++) {
          const nr = needElmRemove[index];

          delete this.page.__cache[nr];
        }

        for (let index = 0; index < needEventRemove.length; index++) {
          const nr = needEventRemove[index];

          delete this.page.__event_cache[nr];
        }

        for (let _id in needElmUpdate) {
          this.page.__cache[_id] = needElmUpdate[_id];
        }

        for (let _id in needEventUpdate) {
          this.page.__event_cache[_id] = needEventUpdate[_id];
        }
      });
    } else {
      return await this.page.updateBlocks(rb, void 0, this, () => {
        this.replaceRoot(html);
      });
    }
  }

  getBlockByBlockName(name) {
    for (let block of this.children) {
      if (block.name === name) {
        return block;
      } else {
        const res = block.getBlockByBlockName(name);
        if (res) return res;
      }
    }
  }

  traverse(cb) {
    cb(this);

    this.children.slice(0).forEach((b) => {
      b.traverse(cb);
    });
  }

  getBlockByName(name) {
    return this.getBlockByBlockName("blocks-" + name);
  }

  _mount() {
    this.root = this.findDOMElement();
    if (this.root) {
      this.root.removeAttribute("id");
      this.root.removeAttribute("data-fr-key");
      this.root._frKey = this.renderKey;
      this.root.block = this;
      this.selector = typeof window.jQuery === "function"
        ? window.jQuery(this.root)
        : null;
    }

    this.initEvents();

    if (!this.data.inited) {
      this.init();
    }

    if (this.state && this.state.lazy) {
      this.loadLazyBlock();
    }

    this._mounted = true;
    this._unmounted = false;
  }

  async setData(data = {}) {
    const previousData = this.data;
    this.data = { ...this.data, ...data };

    try {
      return await this.rerender();
    } catch (error) {
      this.data = previousData;
      throw error;
    }
  }

  init() {
    this.data.inited = true;
  }

  initEvents() {
    const cache = {};
    this.state &&
      this.state.eventList &&
      this.state.eventList.forEach((event) => {
        if (!this.root) return console.warn("root selector not found");

        let elm;

        if (cache[event.fid]) {
          elm = cache[event.fid];
        } else {
          if (!["pref"].includes(event.type)) {
            elm = this.findEventDOMElement(event.fid); //this.root.querySelector(`[f-id=${event.fid}]`);

            // FIXME

            if (!elm) {
              console.log(event.fid, this.page.__event_cache)
              elm = this.root.querySelector(`[f-id=${event.fid}]`);
              console.log('Не могу найти элемент')
            }

            if (elm) {

              cache[event.fid] = elm;
              elm.removeAttribute("f-id");
              if (elm._f === undefined) {
                elm._f = { e: {}, b: this, id: event.fid };
              }

            } else {
              console.log('Так и не смог найти элемент')
            }
          }
        }

        if (event.type === "portal") {
          this.portal = new Portal(elm, this, event.name);
        } else if (event.type === "ref") {
          safeSet(this.refs, event.method, elm);
        } else if (event.type === "pref") {
          safeSet(this.parent.refs, event.name, this);
        } else {
          safeSet(this.refs, `_.${event.method}`, {
            elm,
            type: event.type,
            params: event.params,
            fn: this[event.method],
          });

          if (elm) {
            elm._f.e[event.type] = (pointerEvent) =>
              typeof event.method === "function"
                ? event.method(event.params, pointerEvent)
                : this[event.method](event.params, pointerEvent);
          } else {
            console.log('Не получилось инициализировать событие', event)
          }
        }
        // removeAttribute
      });
  }

  async loadLazyBlock() {
    await this.reload({
      ...this.state.lazyData,
      parent_id: this.parent.id,
      parent_render_key: this.parent.renderKey,
      block_id: this.id,
      block_render_key: this.renderKey,
    });
  }

  async beforeUnmount() {}

  _hasBeforeUnmountWork() {
    if (this.beforeUnmount !== BlockClass.prototype.beforeUnmount) {
      return true;
    }

    return this.children.some((child) => child._hasBeforeUnmountWork());
  }

  async _beforeUnmountTree(visited = new Set()) {
    if (visited.has(this)) return;
    visited.add(this);

    this._preparingUnmount = true;
    try {
      await Promise.all(
        this.children.slice().map((child) => child._beforeUnmountTree(visited))
      );
      await this.beforeUnmount();
    } finally {
      this._preparingUnmount = false;
    }
  }

  _unmount() {
    if (this._unmounted) return;

    this.children.slice().forEach((child) => child._unmount());
    this.children = [];

    this.portal && this.portal.destroy();

    if (this.page._blocks[this.id] === this) {
      delete this.page._blocks[this.id];
    }

    const index = this.parent.children.indexOf(this);
    if (index !== -1) {
      this.parent.children.splice(index, 1);
    }

    this._mounted = false;
    this._unmounted = true;
    this.emit("unmount", this);
  }

  _willUnmount(data = {}) {
    data[this.id] = this.data;

    this.children.forEach((child) => child._willUnmount(data));

    return data;
  }

  async reload(payload = {}) {
    const reloadId = ++this._reloadSequence;
    const res = await this.refetchBlock(
      this.name.replace("blocks-", ""),
      payload
    );

    if (reloadId !== this._reloadSequence) return false;

    if (!this.isElementOnPage(this.root)) {
      console.warn('Елемент вне дом дерева')
    }

    return await this.page.updateBlocks(
      res.state.renderBlocks,
      res.state,
      this,
      () => this.replaceRoot(res.html)
    );
  }

  replaceRoot(html) {
    const template = document.createElement("template");
    template.innerHTML = String(html).trim();
    const replacement = template.content.firstElementChild;

    if (!replacement) {
      throw new Error(`Cannot replace ${this.name}: rendered HTML has no root element`);
    }

    this.root.replaceWith(replacement);
    return replacement;
  }

  isElementOnPage(element, options = {}) {
    const {
      checkVisibility = false,
      checkDimensions = false
    } = options;

    // Базовая проверка
    if (!element || !document.contains(element)) {
      return false;
    }

    // Проверка видимости (если требуется)
    if (checkVisibility) {
      const style = window.getComputedStyle(element);
      if (style.display === 'none' || style.visibility === 'hidden' || style.opacity === '0') {
        return false;
      }
    }

    // Проверка размеров (если требуется)
    if (checkDimensions) {
      const rect = element.getBoundingClientRect();
      if (rect.width === 0 && rect.height === 0) {
        return false;
      }
    }

    return true;
  }


  getElementNode(cls, type = this.type, root = this.root) {
    return this.page.getElementNode(root, type, cls);
  }

  getElement(cls, type = this.type, root = this.root) {
    return this.page.getElement(root, type, cls);
  }

  getClass(...cls) {
    return cls
      .map((name) => {
        return styleAlias[`${this.type}-${name}`]
          ? styleAlias[`${this.type}-${name}`]
          : name;
      })
      .join(" ");
  }
}



const safeSet = (obj, path, value) => {
  if (typeof path === "string") path = path.split(".");

  let node = obj;

  for (var i = 0; i < path.length - 1; i++) {
    const key = path[i];
    const nextKey = +path[i + 1];

    if (!node[key]) node[key] = isNaN(nextKey) ? {} : [];

    node = node[key];
  }

  node[path[i]] = value;

  return obj;
};


const Router = class {
  constructor(page) {
    this.page = page;
    this.currentHref = location.href.replace(location.origin, '');
    this.stack = [this.currentHref];
    this.meta = {};
    this.parseQuery();
    this.index = 0;
    this.navigationSequence = 0;

    window.history.replaceState({
      ...(window.history.state || {}),
      href: this.currentHref,
      pastishIndex: this.index,
    }, "");

    window.addEventListener("popstate", (event) => {
      console.log('Popstate event:', event);
      if (!event?.state?.href) return;

      const href = event.state.href;

      if (Number.isInteger(event.state.pastishIndex)) {
        this.index = event.state.pastishIndex;
        this.stack[this.index] = href;
      }

      this.goTo(href, void 0, {
        scroll: false,
        withOutPush: true,
        ignorePortal: false,
      });
    });
  }

  findBlock(target) {
    if (target.block) return target.block;
    else return this.findBlock(target.parentElement);
  }

  tryMethod(method, target) {
    try {
      if (!method)
        return false

      const block = this.findBlock(target);
      if (!block)
        return false

      block[method](target);

      return true;
    } catch (err) {
      return false;
    }
  }

  init() {
    //alert('Router.init() is deprecated. Please use Router.__init() instead.');
    this.page.root.addEventListener("click", (event) => {
      const link = event.target.closest("a");
      if (!link) return;

      const href = link.getAttribute("href");

      // Собираем данные о ссылке
      const linkData = {
        method: link.getAttribute("method"),
        href: href,
        text: link.textContent.trim() || '(без текста)',
        target: link.target || '_self',
        rel: link.rel || 'нет',
        dataset: { ...link.dataset },
        protocol: new URL(link.href).protocol,
        hostname: new URL(link.href).hostname,
        pathname: new URL(link.href).pathname,
        external: link.hasAttribute("external"),
        csr: link.hasAttribute("csr"),
      };

      if (this.tryMethod(linkData.method, event.currentTarget)) {
        event.preventDefault();
        event.stopPropagation();
        return false;
      }

      if (linkData.href.startsWith('#')) {
        // Разрешаем переход к якорю
        return;
      }

      // Проверяем, не mailto или tel
      if (linkData.protocol === 'mailto:' || linkData.protocol === 'tel:') {
        // Разрешаем переход
        return;
      }

      // Проверяем, не пустая ли ссылка
      if (linkData.href === '' || linkData.href === '#') {
        event.preventDefault();
        return;
      }


      let external = linkData.external;
      let csr = linkData.csr;


      if (/:\/\//.test(href)) {
        external = true;
      }

      if (/^#/.test(href)) {

        return
      }

      if (external) {
        link.setAttribute("target", "_blank");

        return;
      }

      event.preventDefault();
      event.stopPropagation();



      if (!csr) {
        this.goTo(href);
      } else {
        this.goToCSR(href);
      }


    })
  }

  __init() {
    this.init();
  }

  parseQuery() {
    this.query = this.extractAndRemoveQueryParams(location.pathname + location.search).queryParams;
  }

  // явный аргумент query перебивает параметры из строки href; пустые значения выкидываются
  resolveNavigation(href = "/", query) {
    let path = href;
    let hrefQuery = {};

    if (path.includes("?")) {
      const extracted = this.extractAndRemoveQueryParams(path);
      path = extracted.cleanUrl;
      hrefQuery = extracted.queryParams;
    }

    const merged = { ...hrefQuery, ...(query || {}) };
    for (const key in merged) {
      if (merged[key] === void 0 || merged[key] === null || merged[key] === '') {
        delete merged[key];
      }
    }

    const search = serialize(merged);

    return {
      path,
      query: merged,
      href: search ? `${path}?${search}` : path,
    };
  }

  reload() {
    this.goTo(this.currentHref, void 0, { scroll: false, withOutPush: true, ignorePortal: true });
  }

  extractAndRemoveQueryParams(inputUrl) {
    // Добавляем базовый URL для корректного парсинга относительных путей
    const baseUrl = inputUrl.startsWith('http') ? '' : 'http://dummy.com';
    const fullUrl = baseUrl + inputUrl;

    try {
      const urlObj = new URL(fullUrl);
      const queryParams = {};

      urlObj.searchParams.forEach((value, key) => {
        queryParams[key] = value;
      });

      // Получаем путь без query параметров
      let cleanPath = urlObj.pathname;

      // Если был передан относительный URL, убираем слеш если он был добавлен
      if (!inputUrl.startsWith('http') && cleanPath.startsWith('/')) {
        cleanPath = cleanPath.substring(1);
      }

      // Если исходный URL не имел слеша в начале (например "path?param=1")
      if (!inputUrl.startsWith('/') && !inputUrl.startsWith('http') && inputUrl.includes('?')) {
        cleanPath = urlObj.pathname.substring(1);
      }

      return {
        cleanUrl: '/' + cleanPath,
        queryParams: queryParams
      };
    } catch (e) {
      console.error('Error processing URL:', e);
      return {
        cleanUrl: inputUrl,
        queryParams: {}
      };
    }
  }


  goBack() {
    window.history.back();
  }

  async simulateGoTo(href = "/", cb = async () => { }, { scroll, query } = { scroll: true, query: void 0 }) {
    const target = this.resolveNavigation(href, query);
    href = target.href;
    this.query = target.query;
    this.currentHref = href;

    window.history.pushState({ href }, "", href);
    await cb();
    // this.init();
    this.stack.push(href);
    scroll && window.scrollTo({ top: 0 });
  }


  scrollData = [];

  saveScroll() {
    const elements = document.querySelectorAll('[data-scroll-save]');

    this.scrollData = [];

    elements.forEach(el => {
      // Получаем ID элемента
      const id = el.getAttribute('data-scroll-save');

      // Определяем тип скролла
      let scrollType = 'vertical'; // по умолчанию

      const style = window.getComputedStyle(el);
      const overflowY = style.overflowY;
      const overflowX = style.overflowX;

      // Проверяем горизонтальный скролл
      if ((overflowX === 'auto' || overflowX === 'scroll') &&
        (overflowY !== 'auto' && overflowY !== 'scroll')) {
        scrollType = 'horizontal';
      }

      // Проверяем вертикальный скролл
      if (overflowY === 'auto' || overflowY === 'scroll') {
        scrollType = 'vertical';
      }

      // Определяем позицию скролла
      let position = 0;
      if (scrollType === 'vertical') {
        position = el.scrollTop;
      } else if (scrollType === 'horizontal') {
        position = el.scrollLeft;
      }

      // Сохраняем данные
      this.scrollData.push({
        id: id,
        element: el,
        scrollType: scrollType,
        position: position
      });
    });


  }

  restoreScroll() {
    this.scrollData.forEach(item => {
      // Ищем элемент по ID
      const element = document.querySelector(`[data-scroll-save="${item.id}"]`);

      // Если элемент найден
      if (element) {
        // Устанавливаем позицию в зависимости от типа скролла
        if (item.scrollType === 'vertical') {
          element.scrollTop = item.position;
        } else if (item.scrollType === 'horizontal') {
          element.scrollLeft = item.position;
        }
      }
    });
  }

  async goTo(href = "/", query, options = { scroll: true, withOutPush: false, ignorePortal: false }) {
    const navigationId = ++this.navigationSequence;

    if (window.__PASTISH_CLIENT_ONLY__) {
      return this.goToCSR(href, query, options);
    }

    const target = this.resolveNavigation(href, query);
    href = target.href;
    query = target.query;

    this.query = query;
    this.currentHref = href;

    if (!options.withOutPush) {
      this.index += 1;
      this.stack = this.stack.splice(0, this.index);
      this.stack.push(href);
    }

    if (await this.page.store.emit('try-go-to', { href, query, options })[0] === false)
      return this.page.store.emit('location_changed', { href, query, options });


    const { html, state, meta, debug } = await this.page.getPage(
      href.substr(1),
      {
        parent_id: this.mainPage.parent.id,
        parent_render_key: this.mainPage.parent.renderKey,
      }
    );

    if (navigationId !== this.navigationSequence) return false;

    this.page.addDebugInfo(debug);

    this.saveScroll();

    console.log('Navigating to:', href);

    this.setCurrent(await this.page.replacePageBlocks(
      state.renderBlocks,
      state,
      this.mainPage,
      () => {
        this.page.root.innerHTML = html;
        this.restoreScroll();
      }
    ));

    if (!options.withOutPush) {
      window.history.pushState({ href, html, ...meta, pastishIndex: this.index }, "", href);
    }

    this.changeMetaTags(meta);
    this.page.store.emit('location_changed', { href, query });

    options.scroll && window.scrollTo({ top: 0 });



    const rootBlock = state.renderBlocks && state.renderBlocks[0];
    if (rootBlock) {
      this.mainPage = this.page.findFirstBlock({ id: rootBlock.id });
    }
  }

  async goToCSR(href = "/", query, options = { scroll: true, withOutPush: false }) {
    ++this.navigationSequence;

    if (href.startsWith("views://")) {
      const viewsUrl = new URL(href);
      href = viewsUrl.pathname + viewsUrl.search;
    }

    const target = this.resolveNavigation(href, query);
    href = target.href;
    query = target.query;

    const url = target.path.replace(/^\//, "").replace(/\.html$/, "") || "index";
    const routeChain = this.testPSRouts(url);
    const route = routeChain[0] || { params: [] };
    const leafRoute = routeChain[routeChain.length - 1] || route;
    const name = route.name || `pages-${url.replace(/\//g, "-")}`;
    const id = this.page.createBlockId();
    const currentPage = this.page.router.mainPage || this.page.findFirstBlock({ id: this.page.state.id });

    const state = {
      ...(this.page.state || {}),
      context: this.getCSRContext(),
      name,
      id,
      index: 0,
      url,
      query,
      params: leafRoute.params || [],
      payload: {},
      responseState: {},
    };

    this.query = query;
    this.currentHref = href;

    const childRoute = routeChain[1];
    const mountedPortal = route.portal ? this.page._portals[route.portal] : null;

    // если сменилась только вложенная часть маршрута — перерисовываем только портал
    if (
      childRoute &&
      routeChain.length === 2 &&
      mountedPortal &&
      mountedPortal.root &&
      currentPage &&
      currentPage.name === name
    ) {
      await this.renderCSRPortal(mountedPortal, childRoute, state);
    } else {
      this.page._portals = {};
      routeChain.slice(0, -1).forEach((parentRoute, index) => {
        const nextRoute = routeChain[index + 1];
        if (!parentRoute.portal || !nextRoute) return;

        this.page._portals[parentRoute.portal] = {
          data: {
            currentName: nextRoute.name,
            currentData: { params: nextRoute.params || [] },
          },
        };
      });

      this.page.state = state;
      const [html, blocks] = this.page.renderFrBlock({
        name,
        data: {},
        id,
        state,
        parent: currentPage?.parent || this.page,
      });

      await this.page.replacePageBlocks(blocks, state, currentPage, () => {
        const currentElement = currentPage?.findDOMElement?.();
        if (currentElement) currentElement.outerHTML = html;
        else this.page.root.innerHTML = html;
      });
      this.page.router.mainPage = this.page.findFirstBlock({ id });
    }

    if (!options.withOutPush) {
      this.index += 1;
      this.stack = this.stack.splice(0, this.index);
      this.pushCSRState(href, this.index);
      this.stack.push(href);
    }

    this.page.store.emit("location_changed", { href, query });
    options.scroll !== false && window.scrollTo({ top: 0 });
  }

  getCSRContext() {
    const storeToken = this.page.store.get('authorizationToken') || this.page.store.get('token');
    const storeOptions = this.page.store.get('o');

    return {
      ...(this.page.state?.context || {}),
      ...(storeToken ? { token: storeToken } : {}),
      ...(storeOptions != null ? {
        options: typeof storeOptions === 'string'
          ? JSON.parse(storeOptions)
          : storeOptions,
      } : {}),
    };
  }

  async renderCSRPortal(portalBlock, route, state) {
    const id = this.page.createBlockId();
    const data = { params: route.params || [] };

    portalBlock.data.currentName = route.name;
    portalBlock.data.currentData = data;

    this.page.state = state;

    const [html, blocks] = this.page.renderFrBlock({
      name: route.name,
      data,
      id,
      state: { ...state, index: 0 },
      parent: portalBlock,
    });

    if (portalBlock.children[0]) {
      this.setCurrent(await this.page.replacePageBlocks(
        blocks,
        state,
        portalBlock.children[0],
        () => {
          portalBlock.root.innerHTML = html;
        }
      ));
    } else {
      portalBlock.root.innerHTML = html;
      this.page.pushBlocks(blocks, portalBlock);
    }
  }

  // в упакованном приложении история работает на views://, относительный push может бросить SecurityError
  pushCSRState(href, pastishIndex) {
    try {
      window.history.pushState({ href, pastishIndex }, "", href);
    } catch (e) {
      window.history.replaceState({ href, pastishIndex }, "");
    }
  }

  setCurrent(c) {
    this.current = c;
  }

  cahngeQuery(e = {}, t = !1) {
    const target = this.resolveNavigation(this.currentHref, { ...this.query, ...e });

    if (t) {
      return this.goTo(target.href, void 0, { scroll: false, withOutPush: true, ignorePortal: true });
    }

    this.query = target.query;
    this.currentHref = target.href;
    this.index += 1;
    this.stack = this.stack.splice(0, this.index);
    this.stack.push(target.href);
    window.history.pushState({ href: target.href, pastishIndex: this.index }, "", target.href);
  }


  testPSRouts(url, routs = this.page._routes, three = []) {
    const matchRoutes = (currentUrl, currentRoutes, parents) => {
      const fallbacks = [];

      for (const route of currentRoutes) {
        if (route.route === "") {
          fallbacks.push(route);
          continue;
        }

        const match = new RegExp(`^(?:${route.route})`).exec(currentUrl);
        if (!match) continue;

        const remainder = currentUrl.slice(match[0].length).replace(/^\/+/, "");
        const next = [...parents, {
          name: route.block,
          portal: route.portal,
          params: match.slice(1),
        }];

        if (!route.routs && remainder === "") return next;
        if (!route.routs) continue;

        const nested = matchRoutes(remainder, route.routs, next);
        if (nested) return nested;
      }

      for (const route of fallbacks) {
        const next = [...parents, {
          name: route.block,
          portal: route.portal,
          params: [],
        }];
        if (!route.routs) return next;

        const nested = matchRoutes(currentUrl, route.routs, next);
        if (nested) return nested;

        return next;
      }

      return null;
    };

    return matchRoutes(url.replace(/^\/+/, ""), routs, three) || (three.length ? three : [{ params: [] }]);
  }

  // async goToCSR(href = "/", query, options = { scroll: true }) {
  //   if (query) {
  //     href += `?${serialize(query)}`;
  //   }

  //   const url = href.substr(1) || "index";
  //   const blockName = url.replace(/\//g, "-");
  //   const isPageBlock = true;
  //   const responseState = {};
  //   let name = [isPageBlock ? "pages" : "blocks", blockName].join("-");
  //   const withLayout = false;
  //   let needResetSession = false;


  //   let rt = {
  //     params: [],
  //   };
  //   let innerPortals = [];
  //   let innerPortalsNames = [];

  //   if (isPageBlock) {
  //     [rt, ...innerPortals] = this.testPSRouts(url);

  //     if (rt.name) {
  //       name = rt.name;
  //     }
  //   }

  //   innerPortals = innerPortals.reverse();

  //   const id = this.page.utils.getRandomString();



  //   const [html, rb] = this.page.renderFrBlock({ name, data:{}, id, state: this.page.state, parent: this.page })

  //   console.log(html, rb)

  // const { html, state, meta, debug } = await this.page.getPage(
  //   href.substr(1)
  // );

  // this.page.addDebugInfo(debug);
  // this.page.root.innerHTML = html;

  // window.history.pushState({ href, html, ...meta }, "", href);

  // this.changeMetaTags(meta);
  // this.init();
  // this.page.replacePageBlocks(state.renderBlocks, state);
  // this.stack.push(href);
  // options.scroll && window.scrollTo({ top: 0 });
  //}

  changeMetaTags(meta) {
    this.meta = meta;
    const setContent = (selector, value) => {
      const element = document.querySelector(selector);
      if (element && value) element.setAttribute("content", value);
    };

    setContent('meta[name="description"]', meta.description);
    setContent('meta[name="keywords"]', meta.keywords);
    setContent('meta[name="og:title"]', meta.title);
    setContent('meta[name="og:description"]', meta.description);
    setContent('meta[name="og:url"]', meta.url);
    setContent('meta[name="og:image"]', meta.image);
    setContent('meta[name="og:type"]', meta.type);

    const title = document.querySelector("title");
    if (title && meta.title) title.textContent = meta.title;
  }
};

const serialize = (obj) => {
  var str = [];
  for (var p in obj)
    if (obj.hasOwnProperty(p) && obj[p] !== undefined) {
      str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
    }
  return str.join("&");
};


window._fr_blocks = {};
window.renderBlocks = {};
const EventListHandler = [
  "click",
  "change",
  "focus",
  "blur",
  "pointerover",
  "pointerout",
  "input",
  "keydown",
  "keyup",
  "dragstart",
  "dragover",
  "drop",
  "dragend",
  "mousedown",
  "mouseup",
  "dblclick",
  "focusout",
  "focusin",
  "paste",
  "pointerup",
  "pointerdown",
  "pointercancel"
];

window.Page = new (class {
  constructor() {
    this._blocks = {};
    this.router = new Router(this);
    this.state = {};
    this.lastDebug = { errors: [], blocks: [] };
    this.__cache = {};
    this.__event_cache = {};
    this.__data_cache = {};
    this.eventCount = 0;
    this.store = new (getStore().Store)(window.fr_deff_store);
    this.children = [];
    this.utils = {};
    this._portals = {};
    this._plugins = {};
    this._blockIdScope = this.generateUUID("fr_").replace(/[^a-zA-Z0-9_-]/g, "");
    this._blockIdIndex = 0;
    this._mutationQueue = null;
  }

  createBlockId() {
    this._blockIdIndex += 1;
    return `${this._blockIdScope}_${this._blockIdIndex}`;
  }

  enqueueMutation(operation) {
    if (this._mutationQueue === null) {
      const result = operation();
      this._mutationQueue = Promise.resolve(result).catch(() => { });
      return result;
    }

    const result = this._mutationQueue.then(operation, operation);
    this._mutationQueue = result.catch(() => { });
    return result;
  }

  createRenderBlocks() {
    const renderBlocks = [];

    Object.defineProperty(renderBlocks, "renderContext", {
      value: {
        renderKeyCounts: new Map(),
        renderKeys: new Set(),
        renderKeyById: new Map(),
      },
    });

    return renderBlocks;
  }

  encodeRenderKeyPart(value) {
    return Array.from(String(value), (char) =>
      char.codePointAt(0).toString(36)
    ).join(".") || "empty";
  }

  allocateRenderKey(renderBlocks, {
    parentKey = "root",
    name,
    key,
    renderKey,
    useReserved = false,
  }) {
    const { renderKeyCounts, renderKeys } = renderBlocks.renderContext;

    if (renderKey) {
      if (useReserved) {
        if (!renderKeys.has(renderKey)) {
          throw new Error(`Unknown reserved block render key: ${renderKey}`);
        }
      } else if (renderKeys.has(renderKey)) {
        throw new Error(`Duplicate block render key: ${renderKey}`);
      } else {
        renderKeys.add(renderKey);
      }

      return renderKey;
    }

    const namePart = this.encodeRenderKeyPart(name);
    let identity;

    if (key !== undefined && key !== null) {
      if (!["string", "number", "bigint", "boolean"].includes(typeof key)) {
        throw new TypeError("Block key must be a string, number, bigint, or boolean");
      }
      identity = `k.${this.encodeRenderKeyPart(key)}`;
    } else {
      const counterKey = `${parentKey}/${namePart}`;
      const index = (renderKeyCounts.get(counterKey) || 0) + 1;
      renderKeyCounts.set(counterKey, index);
      identity = `i.${index}`;
    }

    const nextRenderKey = `${parentKey}/${namePart}:${identity}`;
    if (renderKeys.has(nextRenderKey)) {
      throw new Error(`Duplicate block render key: ${nextRenderKey}`);
    }

    renderKeys.add(nextRenderKey);
    return nextRenderKey;
  }

  registerPlugin(_class) {
    this.plugins.push(new _class(this).register())
  }

  initPlugins(data = {}) {
    Object.values(data).forEach(arr => {
      for (let name in arr) {
        this._plugins[name] = arr[name];
      }
      // const name = Object.keys(arr)[0];
      // const fn = arr[name];

      // this._plugins[name] = fn;
    })
  }

  traverse(cb) {
    cb(this);

    this.children.slice(0).forEach((b) => {
      b.traverse(cb);
    });
  }

  async init() {
    this.root = document.getElementById("root");
    await this.store.init();
    this.initStoreHandlers();
    this.initHandlers();
    this.router.init();

    if (!this.store.has("webuuid")) {
      this.store.set("webuuid", this.generateUUID("mr:qr:"));
    }
  }

  initStoreHandlers() {
    this.store.on("o", ({ next }) => {
      setCookie("o", JSON.stringify(next));
    });

    window.addEventListener("resize", (e) => {
      this.store.emit("resize", e);
    });
  }

  nextTick(fn) {
    setImmediate(fn);
  }

  async nextTickAsync() {
    return new Promise((resolve) => {
      this.nextTick(() => resolve());
    });
  }

  async initHandlers() {
    const eventRoot = this.root.parentNode;

    window.addEventListener('beforeunload', (event) => {
      this._unmount();

    });

    EventListHandler.forEach((eventName) => {
      eventRoot.addEventListener(eventName, (event) => {
        this.callClientEvent(eventName, event);
      });
    });
  }

  findParentBlock(elm, eventName) {
    if (!elm) return false;

    if (elm._f && elm._f.e && elm._f.e[eventName]) {
      return elm;
    } else {
      return this.findParentBlock(elm.parentElement, eventName);
    }
  }

  callClientEvent(eventName, event) {
    const block = this.findParentBlock(event.target, eventName);

    this.store.emit(eventName, event);

    if (!block) return;

    if (block._f && block._f.e && typeof block._f.e[eventName] === "function") {
      this.eventCount += 1;
      block._f.e[eventName](event);
    }
  }

  async server(url, payload = {}, method = "POST") {
    const id = this.utils.getRandomString();
    const requestUrl = window.__PASTISH_API_BASE__ && url.startsWith("/")
      ? `${window.__PASTISH_API_BASE__.replace(/\/$/, "")}${url}`
      : url;

    try {
      this.store.emit("start_fetch", { id, url: requestUrl, payload, method });
      const res = await fetch(requestUrl, {
        method,
        body: JSON.stringify(payload),
        headers: {},
      });

      const json = await res.json();

      if (!res.ok) {
        throw json;
      }

      return json;
    } catch (err) {
      this.store.emit("error_fetch", { id, url: requestUrl, payload, method, err });

      throw err;
    } finally {
      this.store.emit("end_fetch", { id, url: requestUrl, payload, method });
    }
  }

  generateUUID(prefix) {
    // Public Domain/MIT
    var d = new Date().getTime(); //Timestamp
    var d2 =
      (typeof performance !== "undefined" &&
        performance.now &&
        performance.now() * 1000) ||
      0; //Time in microseconds since page-load or 0 if unsupported
    return (
      prefix +
      "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
        var r = Math.random() * 16; //random number between 0 and 16
        if (d > 0) {
          //Use timestamp until depleted
          r = (d + r) % 16 | 0;
          d = Math.floor(d / 16);
        } else {
          //Use microseconds since page-load if supported
          r = (d2 + r) % 16 | 0;
          d2 = Math.floor(d2 / 16);
        }
        return (c === "x" ? r : (r & 0x3) | 0x8).toString(16);
      })
    );
  }

  findFirstBlock({ id, name }) {
    const n = `blocks-${name}`;

    for (let b in this._blocks) {
      const block = this._blocks[b];

      if (id === block.id) return block;
      if (n === block.name) return block;
    }

    return false;
  }

  createFrontBlock(name, state = {}, data = {}) {
    name = `blocks-${name}`;

    const blockClass = window._fr_blocks[name];

    if (!blockClass) return void 0;

    const id = this.createBlockId();
    const block = new blockClass(name, id, this, state, data);

    return block;
  }

  async getBlock(name, payload = {}, query = {}) {
    let url = `/${name}`;

    const sq = serialize(query);

    sq && (url += `?${serialize(query)}`);

    const res = await fetch(url, {
      method: "POST",
      body: JSON.stringify(payload),
      headers: {
        "x-type-block": true,
      },
    });

    const json = await res.json();

    return json;
  }

  async getPage(name, payload = {}) {
    const res = await pfetch(
      `/${name}`,
      {
        method: "POST",
        body: JSON.stringify(payload)
      },

      (progress) => {
        this.store.emit("progress", { progress });
      }
    );

    const json = await res.json();

    return json;
  }

  getElementNode(root, block, name) {
    const cls = styleAlias[`${block}-${name}`];
    const selector = cls ? `.${cls}` : `.${name}`;

    return (root || this.root)?.querySelector(selector) || null;
  }

  getElement(root, block, name) {

    if (typeof window.jQuery === "function") {
      const cls = styleAlias[`${block}-${name}`];
      const selector = cls ? `.${cls}` : `.${name}`;
      return window.jQuery(root).find(selector);
    } else {
      return this.getElementNode(root, block, name);

    }

  }

  _unmount() {
    this.children.slice().forEach((child) => child._unmount());
    this.children = [];
  }

  async setState(state, debug, meta) {
    await this.store.init();

    if (state.needResetSession) {
      try {
        await this.server("/clients/deauth");
      } catch (err) { }
      this.store.clear("token");
      deleteCookie("token");
      location.reload();
      return;
    }

    return await this.enqueueMutation(async () => {
      this.addDebugInfo(debug);
      await Promise.all(
        this.children.slice().map((child) => child._beforeUnmountTree())
      );
      this._unmount();
      this.children = [];
      this._blocks = {};

      this.state = state;
      this.router.meta = meta;

      const blocks = this._createBlockTree(state.renderBlocks, this);
      this._mountBlockTree(blocks);

      const mainPageBlock = state.renderBlocks && state.renderBlocks[1];
      this.router.mainPage = mainPageBlock
        ? this.findFirstBlock({ id: mainPageBlock.id })
        : false;

      this.store.emit("blocks-updated", state.renderBlocks);

      this.store.emit("page-complete");
    });
  }

  addDebugInfo(debug) {
    this.store.emit("addDebugInfo", debug);
    this.lastDebug = debug;
  }

  addBlocks(pb, state, parentBlock = this) {
    const blocks = {};
    // deprecated
    pb.forEach(({ name, id, parent, state = {}, data = {} }, index) => {
      const blockClass = window._fr_blocks[name] || BlockClass;
      const block = new blockClass(name, id, this, state, data);
      this.__data_cache[id] = data;
      blocks[id] = block;

      block.parent = this._blocks[parent] || parentBlock;

      (parent === "root" ? parentBlock : this._blocks[parent]).children.push(
        block
      );
    });

    for (let b in blocks) {
      blocks[b]._mount();
    }

    // this.router.init();
    this.store.emit("blocks-updated", pb);
  }

  _createBlockTree(pb, parentBlock = this, reusableBlock) {
    const blocks = {};
    const renderKeys = new Set();

    pb.forEach((item) => {
      if (!item) return;

      const {
        name,
        id = this.createBlockId(),
        parent = "root",
        state = {},
        data = {},
        renderKey,
      } = item;

      if (blocks[id]) {
        throw new Error(`Duplicate block id in render tree: ${id}`);
      }
      if (renderKey && renderKeys.has(renderKey)) {
        throw new Error(`Duplicate block render key in tree: ${renderKey}`);
      }
      renderKey && renderKeys.add(renderKey);

      let block;

      if (
        reusableBlock &&
        reusableBlock.id === id &&
        reusableBlock.name === name
      ) {
        block = reusableBlock;
        block._update(name, id, this, state, data);
      } else {
        const blockClass = window._fr_blocks[name] || BlockClass;
        block = new blockClass(name, id, this, state, data);
      }

      blocks[id] = block;
      this.__data_cache[id] = data;

      block.parent = parent;
      block.renderKey = renderKey || id;
      block.state.context = this.state.context || block.state.context;
    });

    for (let b in blocks) {
      const parent = blocks[b].parent === "root"
        ? parentBlock
        : this._blocks[blocks[b].parent];

      if (!parent) {
        throw new Error(
          `Parent block ${blocks[b].parent} not found for ${blocks[b].id}`
        );
      }

      parent.children.push(blocks[b]);
      blocks[b].parent = parent;
    }

    return blocks;
  }

  _mountBlockTree(blocks) {
    const blockSet = new Set(Object.values(blocks));
    const mount = (block) => {
      block._mount();
      block.children.forEach(mount);
    };

    Object.values(blocks)
      .filter((block) => !blockSet.has(block.parent))
      .forEach(mount);
  }

  _clearBlockTreeCaches(block) {
    block.traverse((child) => {
      delete this.__data_cache[child.id];
      child.clearCache();
    });
  }

  _validateBlockTree(pb, replaceableBlock) {
    const ids = new Set();
    const renderKeys = new Set();
    const replacedIds = new Set();
    replaceableBlock?.traverse((block) => {
      replacedIds.add(block.id);
    });
    const mountedRenderKeys = new Set(
      Object.values(this._blocks)
        .filter((block) => !replacedIds.has(block.id))
        .map((block) => block.renderKey)
    );

    for (const block of pb) {
      if (!block) continue;
      if (ids.has(block.id)) {
        throw new Error(`Duplicate block id in render tree: ${block.id}`);
      }
      if (block.renderKey && renderKeys.has(block.renderKey)) {
        throw new Error(`Duplicate block render key in tree: ${block.renderKey}`);
      }
      if (block.renderKey && mountedRenderKeys.has(block.renderKey)) {
        throw new Error(`Block render key is already mounted: ${block.renderKey}`);
      }
      if (this._blocks[block.id] && !replacedIds.has(block.id)) {
        throw new Error(`Block id is already mounted: ${block.id}`);
      }

      ids.add(block.id);
      block.renderKey && renderKeys.add(block.renderKey);
    }

    for (const block of pb) {
      if (!block) continue;
      if (
        block.parent !== "root" &&
        !ids.has(block.parent) &&
        (!this._blocks[block.parent] || replacedIds.has(block.parent))
      ) {
        throw new Error(`Parent block ${block.parent} not found for ${block.id}`);
      }
    }
  }

  async _replaceBlockTree(pb, state, replaceableBlock, mutateDOM, reusableBlock) {
    return await this.enqueueMutation(async () => {
      const parentBlock = replaceableBlock.parent;

      this._validateBlockTree(pb, replaceableBlock);

      if (replaceableBlock._hasBeforeUnmountWork()) {
        await replaceableBlock._beforeUnmountTree();
      }

      this._clearBlockTreeCaches(replaceableBlock);
      replaceableBlock._unmount();

      mutateDOM && mutateDOM();

      if (state !== undefined) {
        this.state = state;
      }

      const blocks = this._createBlockTree(pb, parentBlock, reusableBlock);
      this._mountBlockTree(blocks);

      this.store.emit("blocks-updated", pb);

      return blocks;
    });
  }

  async _insertBlockTree(pb, state, parentBlock, mutateDOM) {
    return await this.enqueueMutation(async () => {
      this._validateBlockTree(pb);
      mutateDOM && mutateDOM();

      if (state !== undefined) {
        this.state = state;
      }

      const blocks = this._createBlockTree(pb, parentBlock);
      this._mountBlockTree(blocks);
      this.store.emit("blocks-updated", pb);

      return blocks;
    });
  }

  pushBlocks(pb, parentBlock = this) {
    this._validateBlockTree(pb);
    const blocks = this._createBlockTree(pb, parentBlock);

    this._mountBlockTree(blocks);

    this.store.emit("blocks-updated", pb);

    return blocks;
  }

  async replacePageBlocks(pb, state, replaceableBlock, mutateDOM) {
    if (!replaceableBlock) {
      replaceableBlock = this.findFirstBlock({ id: this.state.id });
    }

    if (!replaceableBlock) {
      const blocks = await this._insertBlockTree(pb, state, this, mutateDOM);
      return Object.values(blocks)[0];
    }

    await this._replaceBlockTree(pb, state, replaceableBlock, mutateDOM);
    return replaceableBlock;
  }

  async updateBlocks(pb, state, replaceableBlock, mutateDOM) {
    return await this._replaceBlockTree(
      pb,
      undefined,
      replaceableBlock,
      mutateDOM,
      replaceableBlock
    );
  }

  // deprecated
  async replaceBlocks(pb, state, replaceableBlock, mutateDOM) {
    return await this._replaceBlockTree(
      pb,
      state,
      replaceableBlock,
      mutateDOM
    );
  }

  getEvents(events, { name, id }) {
    let index = 0;

    const makeID = () => {
      index += 1;

      return id + "-e-" + index;
    };

    return {
      portal: (params, fid = makeID(), insertId = true) => {
        events.push({ params, name, id, fid, type: "portal" });

        if (insertId) return `f-id="${fid}"`;
        else return "";
      },
      pref: (name) => {
        events.push({ name, type: "pref" });
      },
      ref: (method, params, fid = makeID(), insertId = true) => {
        events.push({ method, params, name, id, fid, type: "ref" });

        if (insertId) return `f-id="${fid}"`;
        else return "";
      },
      on: (event, method, params, fid = makeID(), insertId = true) => {
        events.push({ method, params, name, id, fid, type: event });

        if (insertId) return `f-id="${fid}"`;
        else return "";
      },
      makeId: () => {
        return makeID();
      },
      click: (method, params, fid = makeID(), insertId = true) => {
        events.push({ method, params, name, id, fid, type: "click" });

        if (insertId) return `f-id="${fid}"`;
        else return "";
      },
      change: (method, params, fid = makeID(), insertId = true) => {
        events.push({ method, params, name, id, fid, type: "change" });

        if (insertId) return `f-id="${fid}"`;
        else return "";
      },
      focus: (method, params, fid = makeID(), insertId = true) => {
        events.push({ method, params, name, id, fid, type: "focus" });

        if (insertId) return `f-id="${fid}"`;
        else return "";
      },
      pointerover: (method, params, fid = makeID(), insertId = true) => {
        events.push({ method, params, name, id, fid, type: "pointerover" });

        if (insertId) return `f-id="${fid}"`;
        else return "";
      },
      pointerout: (method, params, fid = makeID(), insertId = true) => {
        events.push({ method, params, name, id, fid, type: "pointerout" });

        if (insertId) return `f-id="${fid}"`;
        else return "";
      },

      blur: (method, params, fid = makeID(), insertId = true) => {
        events.push({ method, params, name, id, fid, type: "blur" });

        if (insertId) return `f-id="${fid}"`;
        else return "";
      },
    };
  }

  createBlock({ name, data = {}, state = {}, parent = this }, insertHtml) {
    const id = this.createBlockId();
    const [html, rb] = this.renderFrBlock({ name, data, id, state, parent });
    insertHtml(html);
    return this.pushBlocks(rb, parent);
  }

  async renderInnerPortal(
    name,
    data,
    server,
    renderBlocks,
    debug,
    lazy,
    empty
  ) {
    const fr = this.renderBlock(
      name.replace("pages-", ""),
      data,
      server,
      renderBlocks,
      debug,
      lazy,
      empty,
      "pages"
    );

    return fr;
  }

  renderFrBlock(block, oldDataObject = {}) {
    const {
      name,
      data,
      id,
      state,
      parent,
      withoutContainer = false,
      children,
      renderKey: currentRenderKey,
    } = block;
    const fn = window.renderBlocks[name];

    const debug = {
      t: Date.now(),
      blocks: [],
      errors: [],
      index: 0,
      children,
    };

    if (state.index === void 0) {
      state.index = 0;
    }

    let renderBlocks = this.createRenderBlocks();
    const renderKey = this.allocateRenderKey(renderBlocks, {
      parentKey: parent.renderKey || "root",
      name,
      renderKey: currentRenderKey,
    });
    renderBlocks[state.index] = {
      id,
      name,
      parent: parent.id || 'root',
      renderKey,
    };
    renderBlocks.renderContext.renderKeyById.set(id, renderKey);

    if (!fn) return "";

    let eventList = [];
    let events = this.getEvents(eventList, { id, name });
    const createChildServer = (blockOptions) => {
      const {
        id: currentId,
        renderKey: currentRenderKey,
        useReservedRenderKey,
        parentRenderKey,
        blockOptions: currentBlockOptions,
        ...childServer
      } = server;

      return {
        ...childServer,
        ctx: this,
        parent: id,
        parentRenderKey: renderKey,
        formMainrender: false,
        blockOptions,
      };
    };

    debug.index += 1;

    const html = fn({
      ctx: this,
      plugins: this._plugins,
      id,
      name,
      index: state.index,
      data,
      state,
      utils: this.utils,
      params: this.state.params,
      query: this.state.query,
      responseState: this.state.responseState,
      context: this.state.context,
      payload: this.state.payload,
      e: events,
      meta: this._meta,
      options: this._options,
      f: {
        renderInnerPortal: (name, pData = {}) => {
          const portal = this._portals[name];
          const portalId = this.createBlockId();
          const portalRenderKey = this.allocateRenderKey(renderBlocks, {
            parentKey: renderKey,
            name: "blocks-portal",
            key: name,
          });

          let gtml = "";

          if (portal && portal.data.currentName) {
            gtml = this.renderBlock(
              portal.data.currentName,
              { ...pData, ...portal.data.currentData },
              {
                ctx: this,
                context: this.state.context,
                responseState: this.state.responseState,
                params: this.state.params,
                payload: this.state.payload,
                query: this.state.query,
                parent: portalId,
                parentRenderKey: portalRenderKey,
                oldDataObject: oldDataObject,
                formMainrender: true,
                meta: this._meta,
                options: this._options,
              },
              renderBlocks,
              debug
            );
          }

          return this.renderBlock(
            "portal",
            {
              ...pData,
              pname: name,
              html: portal ? gtml : "",
              currentName: portal ? portal.data.currentName : void 0,
              currentData: portal ? portal.data.currentData : {},
            },
            {
              ctx: this,
              context: this.state.context,
              responseState: this.state.responseState,
              params: this.state.params,
              payload: this.state.payload,
              query: this.state.query,
              parent: id,
              id: portalId,
              renderKey: portalRenderKey,
              useReservedRenderKey: true,
              oldDataObject: oldDataObject,
              formMainrender: true,
              meta: this._meta,
              options: this._options,
            },
            renderBlocks,
            debug
          );
        },
        getClass: (...n) => this.getClass(name, ...n),
        renderBlock: (
          n,
          data,
          blockOptions,
          server = {
            ctx: this,
            context: this.state.context,
            responseState: this.state.responseState,
            params: this.state.params,
            payload: this.state.payload,
            query: this.state.query,
            parent: id,
            blockOptions,
            oldDataObject: oldDataObject,
            formMainrender: true,
            meta: this._meta,
            options: this._options,
          }
        ) => this.renderBlock(n, data, server, renderBlocks, debug),
        renderLazyBlock: (
          n,
          data,
          blockOptions,
          server = {
            ctx: this,
            context: this.state.context,
            responseState: this.state.responseState,
            params: this.state.params,
            payload: this.state.payload,
            query: this.state.query,
            parent: id,
            blockOptions,
            oldDataObject: oldDataObject,
            formMainrender: true,
            meta: this._meta,
            options: this._options,
          }
        ) => this.renderLazyBlock(n, data, server, renderBlocks, debug),
        renderEmptyBlock: (
          n,
          data,
          blockOptions,
          server = {
            ctx: this,

            context: this.state.context,
            responseState: this.state.responseState,
            params: this.state.params,
            payload: this.state.payload,
            query: this.state.query,
            parent: id,
            blockOptions,
            oldDataObject: oldDataObject,
            formMainrender: true,
            meta: this._meta,
            options: this._options,
          }
        ) => this.renderEmptyBlock(n, data, server, renderBlocks, debug),
      },
    });

    const nState = {
      name,
      id,
      index: state.index,
      params: this.state.params,
      query: this.state.query,
      responseState: this.state.responseState,
      url: this.state.url,
      renderBlocks,
      payload: this.state.payload,
      eventList,
    };

    renderBlocks[state.index].state = { ...nState, renderBlocks: void 0 };
    renderBlocks[state.index].data = data;

    if (withoutContainer) {
      return [html, renderBlocks];
    }

    const rootClass = this.getClass(name, [name]);

    return [
      `<div ${rootClass ? `class="${rootClass}"` : ""
      } id="${id}" data-fr-key="${renderKey}">${html}</div>`,
      renderBlocks,
    ];
  }

  getClass(block, ...names) {
    return names
      .map((name) => {
        return styleAlias[`${block}-${name}`];
      })
      .join(" ");
  }

  renderBlock(
    blockName,
    data = {},
    server,
    renderBlocks,
    debug = { blocks: [], errors: [], index: 0, children: [] },
    lazy = false,
    empty = false,
    bType = "blocks"
  ) {
    let name;
    let options = {
      memorized: false,
    };

    if (typeof blockName === "object") {
      name = blockName.name;
      options = blockName.options || options;
    } else {
      name = blockName;
    }

    if (/^pages/.test(name)) {
      name = name;
    } else {
      name = [bType, name].join("-");
    }

    const fr = window.renderBlocks[name];

    if (!fr || fr instanceof Error) {
      name = `blocks-dev.WrongBlock`;
    }

    const state = {};

    if (lazy) state.lazyData = data;

    const id = server.id || this.createBlockId();
    const parentRenderKey = server.parentRenderKey ||
      renderBlocks.renderContext.renderKeyById.get(server.parent) ||
      "root";
    const renderKey = this.allocateRenderKey(renderBlocks, {
      parentKey: parentRenderKey,
      name,
      key: server.blockOptions?.key,
      renderKey: server.renderKey,
      useReserved: server.useReservedRenderKey,
    });

    if (options.memorized) {
      if (server.oldDataObject[id]) {
        data = server.oldDataObject[id];
      }
    }

    // let oldData = server.oldDataObject[id] || data;

    debug.index += 1;

    let index = renderBlocks.push({
      id,
      name,
      state: {},
      parent: server.parent,
      renderKey,
    });
    renderBlocks.renderContext.renderKeyById.set(id, renderKey);

    let eventList = [];
    let events = this.getEvents(eventList, { id, name });

    const createChildServer = (blockOptions) => {
      const {
        id: currentId,
        renderKey: currentRenderKey,
        useReservedRenderKey,
        parentRenderKey,
        blockOptions: currentBlockOptions,
        ...childServer
      } = server;

      return {
        ...childServer,
        ctx: this,
        parent: id,
        parentRenderKey: renderKey,
        formMainrender: false,
        blockOptions,
      };
    };

    const tpl =
      lazy || empty
        ? ""
        : window.renderBlocks[name]({
          ...server,
          ctx: this,
          plugins: this._plugins,
          state,
          id,
          name,
          index,
          data,
          utils: this.utils,
          e: events,
          f: {
            renderInnerPortal: (name) => {
              const portal = this._portals[name];

              return "this.renderBlock(portal.data.currentName, portal.data.currentData, { ...server, parent: id }, renderBlocks, debug)";
            },
            getClass: (...n) => this.getClass(name, ...n),
            renderBlock: (n, d, blockOptions) =>
              this.renderBlock(
                n,
                d,
                createChildServer(blockOptions),
                renderBlocks,
                debug
              ),
            renderLazyBlock: (n, d, blockOptions) =>
              this.renderLazyBlock(
                n,
                d,
                createChildServer(blockOptions),
                renderBlocks,
                debug
              ),
            renderEmptyBlock: (n, d, blockOptions) =>
              this.renderEmptyBlock(
                n,
                d,
                createChildServer(blockOptions),
                renderBlocks,
                debug
              ),
          },
        });

    renderBlocks[index - 1].state = {
      responseState: { ...server.responseState },
      eventList,
      lazy: lazy,
      empty: empty,
      id,
      name,
      index,
      ...state,
    };

    renderBlocks[index - 1].data = data;

    let hasJS = window._fr_blocks[name];
    let rootClass = this.getClass(name, [name]);

    if (this._options.dev && !hasJS) {
      hasJS = true;
      rootClass = 'debugBlock'
    }

    data.pref && events.pref(data.pref);

    return hasJS
      ? `<div ${rootClass ? `class="${rootClass}"` : ""
      } id="${id}" data-fr-key="${renderKey}">${tpl}</div>`
      : tpl;
  }

  renderLazyBlock(...args) {
    return this.renderBlock(...args, true);
  }

  renderEmptyBlock(...args) {
    return this.renderBlock(...args, false, true);
  }
})();

window.onload = () => {
  Page.init();
  // PageBlocks.forEach((name, index) => {
  //   const itemName = `${name}-${index+1}`;
  //   window._fr_blocks[name] && (new window._fr_blocks[name](itemName))._mount(Page);

  // });
};


const Loader = (() => {
  const uploadBinaryFile = ({ upload_url, content_type, file, onProgress }) => {
    return new Promise((resolve, reject) => {
      const xhr = new XMLHttpRequest();

      xhr.onload = () => {
        if (xhr.status === 200) {
          // succeeded
          resolve(xhr.response);
        } else {
          reject(xhr.response);
        }
      };

      xhr.onerror = (error) => {
        reject(error);
      };

      xhr.open("PUT", upload_url);
      xhr.setRequestHeader("content-type", content_type);
      xhr.upload.onprogress = function (event) {
        if (onProgress) {
          onProgress(Math.round((event.loaded / event.total) * 100), event);
        }
      };
      xhr.send(file);
    });
  };

  const createFile = async ({ content_type, prefix, options }) => {
    const res = await Page.server("/files/create", {
      content_type: content_type,
      prefix: prefix,
      options: options,
    });

    return res;
  };

  const load = async (file, { prefix }) => {
    try {
      Page.store.emit("progress", { progress: 1 });
      const nfile = await createFile({
        content_type: file.type,
        prefix: prefix,
        options: {
          size: file.size,
          width: file.width,
          height: file.height,
          duration: file.duration,
          filename: file.name,
        },
      });

      await uploadBinaryFile({
        upload_url: nfile.upload_url,
        content_type: file.type,
        file: file,
        onProgress: (progress) => {
          Page.store.emit("progress", { progress });
        },
      });

      return { ...nfile };
    } catch (err) {
      Page.store.emit("progress", { progress: 100 });

      return {};
    }
  };

  return { load };
})();


!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define(a):e.moment=a()}(this,function(){"use strict";var E;function M(){return E.apply(null,arguments)}function F(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function z(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function l(e,a){return Object.prototype.hasOwnProperty.call(e,a)}function N(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;for(var a in e)if(l(e,a))return;return 1}function d(e){return void 0===e}function J(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function R(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function C(e,a){for(var t=[],s=e.length,n=0;n<s;++n)t.push(a(e[n],n));return t}function I(e,a){for(var t in a)l(a,t)&&(e[t]=a[t]);return l(a,"toString")&&(e.toString=a.toString),l(a,"valueOf")&&(e.valueOf=a.valueOf),e}function U(e,a,t,s){return Fa(e,a,t,s,!0).utc()}function h(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function G(e){if(null==e._isValid){var a=h(e),t=B.call(a.parsedDateParts,function(e){return null!=e}),t=!isNaN(e._d.getTime())&&a.overflow<0&&!a.empty&&!a.invalidEra&&!a.invalidMonth&&!a.invalidWeekday&&!a.weekdayMismatch&&!a.nullInput&&!a.invalidFormat&&!a.userInvalidated&&(!a.meridiem||a.meridiem&&t);if(e._strict&&(t=t&&0===a.charsLeftOver&&0===a.unusedTokens.length&&void 0===a.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return t;e._isValid=t}return e._isValid}function V(e){var a=U(NaN);return null!=e?I(h(a),e):h(a).userInvalidated=!0,a}var B=Array.prototype.some||function(e){for(var a=Object(this),t=a.length>>>0,s=0;s<t;s++)if(s in a&&e.call(this,a[s],s,a))return!0;return!1},K=M.momentProperties=[],q=!1;function Z(e,a){var t,s,n,r=K.length;if(d(a._isAMomentObject)||(e._isAMomentObject=a._isAMomentObject),d(a._i)||(e._i=a._i),d(a._f)||(e._f=a._f),d(a._l)||(e._l=a._l),d(a._strict)||(e._strict=a._strict),d(a._tzm)||(e._tzm=a._tzm),d(a._isUTC)||(e._isUTC=a._isUTC),d(a._offset)||(e._offset=a._offset),d(a._pf)||(e._pf=h(a)),d(a._locale)||(e._locale=a._locale),0<r)for(t=0;t<r;t++)d(n=a[s=K[t]])||(e[s]=n);return e}function $(e){Z(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===q&&(q=!0,M.updateOffset(this),q=!1)}function Q(e){return e instanceof $||null!=e&&null!=e._isAMomentObject}function X(e){!1===M.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function e(r,d){var i=!0;return I(function(){if(null!=M.deprecationHandler&&M.deprecationHandler(null,r),i){for(var e,a,t=[],s=arguments.length,n=0;n<s;n++){if(e="","object"==typeof arguments[n]){for(a in e+="\n["+n+"] ",arguments[0])l(arguments[0],a)&&(e+=a+": "+arguments[0][a]+", ");e=e.slice(0,-2)}else e=arguments[n];t.push(e)}X(r+"\nArguments: "+Array.prototype.slice.call(t).join("")+"\n"+(new Error).stack),i=!1}return d.apply(this,arguments)},d)}var ee={};function ae(e,a){null!=M.deprecationHandler&&M.deprecationHandler(e,a),ee[e]||(X(a),ee[e]=!0)}function te(e){return"undefined"!=typeof Function&&e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function se(e,a){var t,s=I({},e);for(t in a)l(a,t)&&(z(e[t])&&z(a[t])?(s[t]={},I(s[t],e[t]),I(s[t],a[t])):null!=a[t]?s[t]=a[t]:delete s[t]);for(t in e)l(e,t)&&!l(a,t)&&z(e[t])&&(s[t]=I({},s[t]));return s}function ne(e){null!=e&&this.set(e)}M.suppressDeprecationWarnings=!1,M.deprecationHandler=null;var re=Object.keys||function(e){var a,t=[];for(a in e)l(e,a)&&t.push(a);return t};function de(e,a,t){var s=""+Math.abs(e);return(0<=e?t?"+":"":"-")+Math.pow(10,Math.max(0,a-s.length)).toString().substr(1)+s}var ie=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,_e=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,oe={},me={};function s(e,a,t,s){var n="string"==typeof s?function(){return this[s]()}:s;e&&(me[e]=n),a&&(me[a[0]]=function(){return de(n.apply(this,arguments),a[1],a[2])}),t&&(me[t]=function(){return this.localeData().ordinal(n.apply(this,arguments),e)})}function ue(e,a){return e.isValid()?(a=le(a,e.localeData()),oe[a]=oe[a]||function(s){for(var e,n=s.match(ie),a=0,r=n.length;a<r;a++)me[n[a]]?n[a]=me[n[a]]:n[a]=(e=n[a]).match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"");return function(e){for(var a="",t=0;t<r;t++)a+=te(n[t])?n[t].call(e,s):n[t];return a}}(a),oe[a](e)):e.localeData().invalidDate()}function le(e,a){var t=5;function s(e){return a.longDateFormat(e)||e}for(_e.lastIndex=0;0<=t&&_e.test(e);)e=e.replace(_e,s),_e.lastIndex=0,--t;return e}var Me={};function a(e,a){var t=e.toLowerCase();Me[t]=Me[t+"s"]=Me[a]=e}function i(e){return"string"==typeof e?Me[e]||Me[e.toLowerCase()]:void 0}function he(e){var a,t,s={};for(t in e)l(e,t)&&(a=i(t))&&(s[a]=e[t]);return s}var ce={};function t(e,a){ce[e]=a}function Le(e){return e%4==0&&e%100!=0||e%400==0}function u(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function m(e){var e=+e,a=0;return a=0!=e&&isFinite(e)?u(e):a}function Ye(a,t){return function(e){return null!=e?(fe(this,a,e),M.updateOffset(this,t),this):ye(this,a)}}function ye(e,a){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+a]():NaN}function fe(e,a,t){e.isValid()&&!isNaN(t)&&("FullYear"===a&&Le(e.year())&&1===e.month()&&29===e.date()?(t=m(t),e._d["set"+(e._isUTC?"UTC":"")+a](t,e.month(),ze(t,e.month()))):e._d["set"+(e._isUTC?"UTC":"")+a](t))}var n=/\d/,r=/\d\d/,pe=/\d{3}/,ke=/\d{4}/,_=/[+-]?\d{6}/,o=/\d\d?/,c=/\d\d\d\d?/,L=/\d\d\d\d\d\d?/,De=/\d{1,3}/,Y=/\d{1,4}/,y=/[+-]?\d{1,6}/,Te=/\d+/,ge=/[+-]?\d+/,we=/Z|[+-]\d\d:?\d\d/gi,be=/Z|[+-]\d\d(?::?\d\d)?/gi,f=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function p(e,t,s){He[e]=te(t)?t:function(e,a){return e&&s?s:t}}function Se(e,a){return l(He,e)?He[e](a._strict,a._locale):new RegExp(k(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,a,t,s,n){return a||t||s||n})))}function k(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var He={},ve={};function D(e,t){var a,s,n=t;for("string"==typeof e&&(e=[e]),J(t)&&(n=function(e,a){a[t]=m(e)}),s=e.length,a=0;a<s;a++)ve[e[a]]=n}function je(e,n){D(e,function(e,a,t,s){t._w=t._w||{},n(e,t._w,t,s)})}var T,g=0,xe=1,Pe=2,w=3,Oe=4,We=5,Ae=6,Ee=7,Fe=8;function ze(e,a){if(isNaN(e)||isNaN(a))return NaN;var t=(a%(t=12)+t)%t;return e+=(a-t)/12,1==t?Le(e)?29:28:31-t%7%2}T=Array.prototype.indexOf||function(e){for(var a=0;a<this.length;++a)if(this[a]===e)return a;return-1},s("M",["MM",2],"Mo",function(){return this.month()+1}),s("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),s("MMMM",0,0,function(e){return this.localeData().months(this,e)}),a("month","M"),t("month",8),p("M",o),p("MM",o,r),p("MMM",function(e,a){return a.monthsShortRegex(e)}),p("MMMM",function(e,a){return a.monthsRegex(e)}),D(["M","MM"],function(e,a){a[xe]=m(e)-1}),D(["MMM","MMMM"],function(e,a,t,s){s=t._locale.monthsParse(e,s,t._strict);null!=s?a[xe]=s:h(t).invalidMonth=e});var Ne="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Je="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Re=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Ce=f,Ie=f;function Ue(e,a){var t;if(e.isValid()){if("string"==typeof a)if(/^\d+$/.test(a))a=m(a);else if(!J(a=e.localeData().monthsParse(a)))return;t=Math.min(e.date(),ze(e.year(),a)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](a,t)}}function Ge(e){return null!=e?(Ue(this,e),M.updateOffset(this,!0),this):ye(this,"Month")}function Ve(){function e(e,a){return a.length-e.length}for(var a,t=[],s=[],n=[],r=0;r<12;r++)a=U([2e3,r]),t.push(this.monthsShort(a,"")),s.push(this.months(a,"")),n.push(this.months(a,"")),n.push(this.monthsShort(a,""));for(t.sort(e),s.sort(e),n.sort(e),r=0;r<12;r++)t[r]=k(t[r]),s[r]=k(s[r]);for(r=0;r<24;r++)n[r]=k(n[r]);this._monthsRegex=new RegExp("^("+n.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+t.join("|")+")","i")}function Be(e){return Le(e)?366:365}s("Y",0,0,function(){var e=this.year();return e<=9999?de(e,4):"+"+e}),s(0,["YY",2],0,function(){return this.year()%100}),s(0,["YYYY",4],0,"year"),s(0,["YYYYY",5],0,"year"),s(0,["YYYYYY",6,!0],0,"year"),a("year","y"),t("year",1),p("Y",ge),p("YY",o,r),p("YYYY",Y,ke),p("YYYYY",y,_),p("YYYYYY",y,_),D(["YYYYY","YYYYYY"],g),D("YYYY",function(e,a){a[g]=2===e.length?M.parseTwoDigitYear(e):m(e)}),D("YY",function(e,a){a[g]=M.parseTwoDigitYear(e)}),D("Y",function(e,a){a[g]=parseInt(e,10)}),M.parseTwoDigitYear=function(e){return m(e)+(68<m(e)?1900:2e3)};var Ke=Ye("FullYear",!0);function qe(e,a,t,s,n,r,d){var i;return e<100&&0<=e?(i=new Date(e+400,a,t,s,n,r,d),isFinite(i.getFullYear())&&i.setFullYear(e)):i=new Date(e,a,t,s,n,r,d),i}function Ze(e){var a;return e<100&&0<=e?((a=Array.prototype.slice.call(arguments))[0]=e+400,a=new Date(Date.UTC.apply(null,a)),isFinite(a.getUTCFullYear())&&a.setUTCFullYear(e)):a=new Date(Date.UTC.apply(null,arguments)),a}function $e(e,a,t){t=7+a-t;return t-(7+Ze(e,0,t).getUTCDay()-a)%7-1}function Qe(e,a,t,s,n){var r,a=1+7*(a-1)+(7+t-s)%7+$e(e,s,n),t=a<=0?Be(r=e-1)+a:a>Be(e)?(r=e+1,a-Be(e)):(r=e,a);return{year:r,dayOfYear:t}}function Xe(e,a,t){var s,n,r=$e(e.year(),a,t),r=Math.floor((e.dayOfYear()-r-1)/7)+1;return r<1?s=r+ea(n=e.year()-1,a,t):r>ea(e.year(),a,t)?(s=r-ea(e.year(),a,t),n=e.year()+1):(n=e.year(),s=r),{week:s,year:n}}function ea(e,a,t){var s=$e(e,a,t),a=$e(e+1,a,t);return(Be(e)-s+a)/7}s("w",["ww",2],"wo","week"),s("W",["WW",2],"Wo","isoWeek"),a("week","w"),a("isoWeek","W"),t("week",5),t("isoWeek",5),p("w",o),p("ww",o,r),p("W",o),p("WW",o,r),je(["w","ww","W","WW"],function(e,a,t,s){a[s.substr(0,1)]=m(e)});function aa(e,a){return e.slice(a,7).concat(e.slice(0,a))}s("d",0,"do","day"),s("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),s("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),s("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),s("e",0,0,"weekday"),s("E",0,0,"isoWeekday"),a("day","d"),a("weekday","e"),a("isoWeekday","E"),t("day",11),t("weekday",11),t("isoWeekday",11),p("d",o),p("e",o),p("E",o),p("dd",function(e,a){return a.weekdaysMinRegex(e)}),p("ddd",function(e,a){return a.weekdaysShortRegex(e)}),p("dddd",function(e,a){return a.weekdaysRegex(e)}),je(["dd","ddd","dddd"],function(e,a,t,s){s=t._locale.weekdaysParse(e,s,t._strict);null!=s?a.d=s:h(t).invalidWeekday=e}),je(["d","e","E"],function(e,a,t,s){a[s]=m(e)});var ta="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),sa="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),na="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ra=f,da=f,ia=f;function _a(){function e(e,a){return a.length-e.length}for(var a,t,s,n=[],r=[],d=[],i=[],_=0;_<7;_++)s=U([2e3,1]).day(_),a=k(this.weekdaysMin(s,"")),t=k(this.weekdaysShort(s,"")),s=k(this.weekdays(s,"")),n.push(a),r.push(t),d.push(s),i.push(a),i.push(t),i.push(s);n.sort(e),r.sort(e),d.sort(e),i.sort(e),this._weekdaysRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+d.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+r.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+n.join("|")+")","i")}function oa(){return this.hours()%12||12}function ma(e,a){s(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),a)})}function ua(e,a){return a._meridiemParse}s("H",["HH",2],0,"hour"),s("h",["hh",2],0,oa),s("k",["kk",2],0,function(){return this.hours()||24}),s("hmm",0,0,function(){return""+oa.apply(this)+de(this.minutes(),2)}),s("hmmss",0,0,function(){return""+oa.apply(this)+de(this.minutes(),2)+de(this.seconds(),2)}),s("Hmm",0,0,function(){return""+this.hours()+de(this.minutes(),2)}),s("Hmmss",0,0,function(){return""+this.hours()+de(this.minutes(),2)+de(this.seconds(),2)}),ma("a",!0),ma("A",!1),a("hour","h"),t("hour",13),p("a",ua),p("A",ua),p("H",o),p("h",o),p("k",o),p("HH",o,r),p("hh",o,r),p("kk",o,r),p("hmm",c),p("hmmss",L),p("Hmm",c),p("Hmmss",L),D(["H","HH"],w),D(["k","kk"],function(e,a,t){e=m(e);a[w]=24===e?0:e}),D(["a","A"],function(e,a,t){t._isPm=t._locale.isPM(e),t._meridiem=e}),D(["h","hh"],function(e,a,t){a[w]=m(e),h(t).bigHour=!0}),D("hmm",function(e,a,t){var s=e.length-2;a[w]=m(e.substr(0,s)),a[Oe]=m(e.substr(s)),h(t).bigHour=!0}),D("hmmss",function(e,a,t){var s=e.length-4,n=e.length-2;a[w]=m(e.substr(0,s)),a[Oe]=m(e.substr(s,2)),a[We]=m(e.substr(n)),h(t).bigHour=!0}),D("Hmm",function(e,a,t){var s=e.length-2;a[w]=m(e.substr(0,s)),a[Oe]=m(e.substr(s))}),D("Hmmss",function(e,a,t){var s=e.length-4,n=e.length-2;a[w]=m(e.substr(0,s)),a[Oe]=m(e.substr(s,2)),a[We]=m(e.substr(n))});f=Ye("Hours",!0);var la,Ma={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Ne,monthsShort:Je,week:{dow:0,doy:6},weekdays:ta,weekdaysMin:na,weekdaysShort:sa,meridiemParse:/[ap]\.?m?\.?/i},b={},ha={};function ca(e){return e&&e.toLowerCase().replace("_","-")}function La(e){for(var a,t,s,n,r=0;r<e.length;){for(a=(n=ca(e[r]).split("-")).length,t=(t=ca(e[r+1]))?t.split("-"):null;0<a;){if(s=Ya(n.slice(0,a).join("-")))return s;if(t&&t.length>=a&&function(e,a){for(var t=Math.min(e.length,a.length),s=0;s<t;s+=1)if(e[s]!==a[s])return s;return t}(n,t)>=a-1)break;a--}r++}return la}function Ya(a){var e;if(void 0===b[a]&&"undefined"!=typeof module&&module&&module.exports&&null!=a.match("^[^/\\\\]*$"))try{e=la._abbr,require("./locale/"+a),ya(e)}catch(e){b[a]=null}return b[a]}function ya(e,a){return e&&((a=d(a)?pa(e):fa(e,a))?la=a:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),la._abbr}function fa(e,a){if(null===a)return delete b[e],null;var t,s=Ma;if(a.abbr=e,null!=b[e])ae("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=b[e]._config;else if(null!=a.parentLocale)if(null!=b[a.parentLocale])s=b[a.parentLocale]._config;else{if(null==(t=Ya(a.parentLocale)))return ha[a.parentLocale]||(ha[a.parentLocale]=[]),ha[a.parentLocale].push({name:e,config:a}),null;s=t._config}return b[e]=new ne(se(s,a)),ha[e]&&ha[e].forEach(function(e){fa(e.name,e.config)}),ya(e),b[e]}function pa(e){var a;if(!(e=e&&e._locale&&e._locale._abbr?e._locale._abbr:e))return la;if(!F(e)){if(a=Ya(e))return a;e=[e]}return La(e)}function ka(e){var a=e._a;return a&&-2===h(e).overflow&&(a=a[xe]<0||11<a[xe]?xe:a[Pe]<1||a[Pe]>ze(a[g],a[xe])?Pe:a[w]<0||24<a[w]||24===a[w]&&(0!==a[Oe]||0!==a[We]||0!==a[Ae])?w:a[Oe]<0||59<a[Oe]?Oe:a[We]<0||59<a[We]?We:a[Ae]<0||999<a[Ae]?Ae:-1,h(e)._overflowDayOfYear&&(a<g||Pe<a)&&(a=Pe),h(e)._overflowWeeks&&-1===a&&(a=Ee),h(e)._overflowWeekday&&-1===a&&(a=Fe),h(e).overflow=a),e}var Da=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Ta=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ga=/Z|[+-]\d\d(?::?\d\d)?/,wa=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],ba=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Sa=/^\/?Date\((-?\d+)/i,Ha=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,va={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function ja(e){var a,t,s,n,r,d,i=e._i,_=Da.exec(i)||Ta.exec(i),i=wa.length,o=ba.length;if(_){for(h(e).iso=!0,a=0,t=i;a<t;a++)if(wa[a][1].exec(_[1])){n=wa[a][0],s=!1!==wa[a][2];break}if(null==n)e._isValid=!1;else{if(_[3]){for(a=0,t=o;a<t;a++)if(ba[a][1].exec(_[3])){r=(_[2]||" ")+ba[a][0];break}if(null==r)return void(e._isValid=!1)}if(s||null==r){if(_[4]){if(!ga.exec(_[4]))return void(e._isValid=!1);d="Z"}e._f=n+(r||"")+(d||""),Aa(e)}else e._isValid=!1}}else e._isValid=!1}function xa(e,a,t,s,n,r){e=[function(e){e=parseInt(e,10);{if(e<=49)return 2e3+e;if(e<=999)return 1900+e}return e}(e),Je.indexOf(a),parseInt(t,10),parseInt(s,10),parseInt(n,10)];return r&&e.push(parseInt(r,10)),e}function Pa(e){var a,t,s,n,r=Ha.exec(e._i.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));r?(a=xa(r[4],r[3],r[2],r[5],r[6],r[7]),t=r[1],s=a,n=e,t&&sa.indexOf(t)!==new Date(s[0],s[1],s[2]).getDay()?(h(n).weekdayMismatch=!0,n._isValid=!1):(e._a=a,e._tzm=(t=r[8],s=r[9],n=r[10],t?va[t]:s?0:60*(((t=parseInt(n,10))-(s=t%100))/100)+s),e._d=Ze.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),h(e).rfc2822=!0)):e._isValid=!1}function Oa(e,a,t){return null!=e?e:null!=a?a:t}function Wa(e){var a,t,s,n,r,d,i,_,o,m,u,l=[];if(!e._d){for(s=e,n=new Date(M.now()),t=s._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()],e._w&&null==e._a[Pe]&&null==e._a[xe]&&(null!=(n=(s=e)._w).GG||null!=n.W||null!=n.E?(_=1,o=4,r=Oa(n.GG,s._a[g],Xe(S(),1,4).year),d=Oa(n.W,1),((i=Oa(n.E,1))<1||7<i)&&(m=!0)):(_=s._locale._week.dow,o=s._locale._week.doy,u=Xe(S(),_,o),r=Oa(n.gg,s._a[g],u.year),d=Oa(n.w,u.week),null!=n.d?((i=n.d)<0||6<i)&&(m=!0):null!=n.e?(i=n.e+_,(n.e<0||6<n.e)&&(m=!0)):i=_),d<1||d>ea(r,_,o)?h(s)._overflowWeeks=!0:null!=m?h(s)._overflowWeekday=!0:(u=Qe(r,d,i,_,o),s._a[g]=u.year,s._dayOfYear=u.dayOfYear)),null!=e._dayOfYear&&(n=Oa(e._a[g],t[g]),(e._dayOfYear>Be(n)||0===e._dayOfYear)&&(h(e)._overflowDayOfYear=!0),m=Ze(n,0,e._dayOfYear),e._a[xe]=m.getUTCMonth(),e._a[Pe]=m.getUTCDate()),a=0;a<3&&null==e._a[a];++a)e._a[a]=l[a]=t[a];for(;a<7;a++)e._a[a]=l[a]=null==e._a[a]?2===a?1:0:e._a[a];24===e._a[w]&&0===e._a[Oe]&&0===e._a[We]&&0===e._a[Ae]&&(e._nextDay=!0,e._a[w]=0),e._d=(e._useUTC?Ze:qe).apply(null,l),r=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[w]=24),e._w&&void 0!==e._w.d&&e._w.d!==r&&(h(e).weekdayMismatch=!0)}}function Aa(e){if(e._f===M.ISO_8601)ja(e);else if(e._f===M.RFC_2822)Pa(e);else{e._a=[],h(e).empty=!0;for(var a,t,s,n,r,d=""+e._i,i=d.length,_=0,o=le(e._f,e._locale).match(ie)||[],m=o.length,u=0;u<m;u++)t=o[u],(a=(d.match(Se(t,e))||[])[0])&&(0<(s=d.substr(0,d.indexOf(a))).length&&h(e).unusedInput.push(s),d=d.slice(d.indexOf(a)+a.length),_+=a.length),me[t]?(a?h(e).empty=!1:h(e).unusedTokens.push(t),s=t,r=e,null!=(n=a)&&l(ve,s)&&ve[s](n,r._a,r,s)):e._strict&&!a&&h(e).unusedTokens.push(t);h(e).charsLeftOver=i-_,0<d.length&&h(e).unusedInput.push(d),e._a[w]<=12&&!0===h(e).bigHour&&0<e._a[w]&&(h(e).bigHour=void 0),h(e).parsedDateParts=e._a.slice(0),h(e).meridiem=e._meridiem,e._a[w]=function(e,a,t){if(null==t)return a;return null!=e.meridiemHour?e.meridiemHour(a,t):null!=e.isPM?((e=e.isPM(t))&&a<12&&(a+=12),a=e||12!==a?a:0):a}(e._locale,e._a[w],e._meridiem),null!==(i=h(e).era)&&(e._a[g]=e._locale.erasConvertYear(i,e._a[g])),Wa(e),ka(e)}}function Ea(e){var a,t,s,n=e._i,r=e._f;if(e._locale=e._locale||pa(e._l),null===n||void 0===r&&""===n)return V({nullInput:!0});if("string"==typeof n&&(e._i=n=e._locale.preparse(n)),Q(n))return new $(ka(n));if(R(n))e._d=n;else if(F(r))!function(e){var a,t,s,n,r,d,i=!1,_=e._f.length;if(0===_)return h(e).invalidFormat=!0,e._d=new Date(NaN);for(n=0;n<_;n++)r=0,d=!1,a=Z({},e),null!=e._useUTC&&(a._useUTC=e._useUTC),a._f=e._f[n],Aa(a),G(a)&&(d=!0),r=(r+=h(a).charsLeftOver)+10*h(a).unusedTokens.length,h(a).score=r,i?r<s&&(s=r,t=a):(null==s||r<s||d)&&(s=r,t=a,d&&(i=!0));I(e,t||a)}(e);else if(r)Aa(e);else if(d(r=(n=e)._i))n._d=new Date(M.now());else R(r)?n._d=new Date(r.valueOf()):"string"==typeof r?(t=n,null!==(a=Sa.exec(t._i))?t._d=new Date(+a[1]):(ja(t),!1===t._isValid&&(delete t._isValid,Pa(t),!1===t._isValid&&(delete t._isValid,t._strict?t._isValid=!1:M.createFromInputFallback(t))))):F(r)?(n._a=C(r.slice(0),function(e){return parseInt(e,10)}),Wa(n)):z(r)?(a=n)._d||(s=void 0===(t=he(a._i)).day?t.date:t.day,a._a=C([t.year,t.month,s,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),Wa(a)):J(r)?n._d=new Date(r):M.createFromInputFallback(n);return G(e)||(e._d=null),e}function Fa(e,a,t,s,n){var r={};return!0!==a&&!1!==a||(s=a,a=void 0),!0!==t&&!1!==t||(s=t,t=void 0),(z(e)&&N(e)||F(e)&&0===e.length)&&(e=void 0),r._isAMomentObject=!0,r._useUTC=r._isUTC=n,r._l=t,r._i=e,r._f=a,r._strict=s,(n=new $(ka(Ea(n=r))))._nextDay&&(n.add(1,"d"),n._nextDay=void 0),n}function S(e,a,t,s){return Fa(e,a,t,s,!1)}M.createFromInputFallback=e("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),M.ISO_8601=function(){},M.RFC_2822=function(){};c=e("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=S.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:V()}),L=e("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=S.apply(null,arguments);return this.isValid()&&e.isValid()?this<e?this:e:V()});function za(e,a){var t,s;if(!(a=1===a.length&&F(a[0])?a[0]:a).length)return S();for(t=a[0],s=1;s<a.length;++s)a[s].isValid()&&!a[s][e](t)||(t=a[s]);return t}var Na=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Ja(e){var e=he(e),a=e.year||0,t=e.quarter||0,s=e.month||0,n=e.week||e.isoWeek||0,r=e.day||0,d=e.hour||0,i=e.minute||0,_=e.second||0,o=e.millisecond||0;this._isValid=function(e){var a,t,s=!1,n=Na.length;for(a in e)if(l(e,a)&&(-1===T.call(Na,a)||null!=e[a]&&isNaN(e[a])))return!1;for(t=0;t<n;++t)if(e[Na[t]]){if(s)return!1;parseFloat(e[Na[t]])!==m(e[Na[t]])&&(s=!0)}return!0}(e),this._milliseconds=+o+1e3*_+6e4*i+1e3*d*60*60,this._days=+r+7*n,this._months=+s+3*t+12*a,this._data={},this._locale=pa(),this._bubble()}function Ra(e){return e instanceof Ja}function Ca(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Ia(e,t){s(e,0,0,function(){var e=this.utcOffset(),a="+";return e<0&&(e=-e,a="-"),a+de(~~(e/60),2)+t+de(~~e%60,2)})}Ia("Z",":"),Ia("ZZ",""),p("Z",be),p("ZZ",be),D(["Z","ZZ"],function(e,a,t){t._useUTC=!0,t._tzm=Ga(be,e)});var Ua=/([\+\-]|\d\d)/gi;function Ga(e,a){var a=(a||"").match(e);return null===a?null:0===(a=60*(e=((a[a.length-1]||[])+"").match(Ua)||["-",0,0])[1]+m(e[2]))?0:"+"===e[0]?a:-a}function Va(e,a){var t;return a._isUTC?(a=a.clone(),t=(Q(e)||R(e)?e:S(e)).valueOf()-a.valueOf(),a._d.setTime(a._d.valueOf()+t),M.updateOffset(a,!1),a):S(e).local()}function Ba(e){return-Math.round(e._d.getTimezoneOffset())}function Ka(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}M.updateOffset=function(){};var qa=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Za=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function $a(e,a){var t,s=e,n=null;return Ra(e)?s={ms:e._milliseconds,d:e._days,M:e._months}:J(e)||!isNaN(+e)?(s={},a?s[a]=+e:s.milliseconds=+e):(n=qa.exec(e))?(t="-"===n[1]?-1:1,s={y:0,d:m(n[Pe])*t,h:m(n[w])*t,m:m(n[Oe])*t,s:m(n[We])*t,ms:m(Ca(1e3*n[Ae]))*t}):(n=Za.exec(e))?(t="-"===n[1]?-1:1,s={y:Qa(n[2],t),M:Qa(n[3],t),w:Qa(n[4],t),d:Qa(n[5],t),h:Qa(n[6],t),m:Qa(n[7],t),s:Qa(n[8],t)}):null==s?s={}:"object"==typeof s&&("from"in s||"to"in s)&&(a=function(e,a){var t;if(!e.isValid()||!a.isValid())return{milliseconds:0,months:0};a=Va(a,e),e.isBefore(a)?t=Xa(e,a):((t=Xa(a,e)).milliseconds=-t.milliseconds,t.months=-t.months);return t}(S(s.from),S(s.to)),(s={}).ms=a.milliseconds,s.M=a.months),n=new Ja(s),Ra(e)&&l(e,"_locale")&&(n._locale=e._locale),Ra(e)&&l(e,"_isValid")&&(n._isValid=e._isValid),n}function Qa(e,a){e=e&&parseFloat(e.replace(",","."));return(isNaN(e)?0:e)*a}function Xa(e,a){var t={};return t.months=a.month()-e.month()+12*(a.year()-e.year()),e.clone().add(t.months,"M").isAfter(a)&&--t.months,t.milliseconds=+a-+e.clone().add(t.months,"M"),t}function et(s,n){return function(e,a){var t;return null===a||isNaN(+a)||(ae(n,"moment()."+n+"(period, number) is deprecated. Please use moment()."+n+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),t=e,e=a,a=t),at(this,$a(e,a),s),this}}function at(e,a,t,s){var n=a._milliseconds,r=Ca(a._days),a=Ca(a._months);e.isValid()&&(s=null==s||s,a&&Ue(e,ye(e,"Month")+a*t),r&&fe(e,"Date",ye(e,"Date")+r*t),n&&e._d.setTime(e._d.valueOf()+n*t),s&&M.updateOffset(e,r||a))}$a.fn=Ja.prototype,$a.invalid=function(){return $a(NaN)};Ne=et(1,"add"),ta=et(-1,"subtract");function tt(e){return"string"==typeof e||e instanceof String}function st(e){return Q(e)||R(e)||tt(e)||J(e)||function(a){var e=F(a),t=!1;e&&(t=0===a.filter(function(e){return!J(e)&&tt(a)}).length);return e&&t}(e)||function(e){var a,t,s=z(e)&&!N(e),n=!1,r=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],d=r.length;for(a=0;a<d;a+=1)t=r[a],n=n||l(e,t);return s&&n}(e)||null==e}function nt(e,a){if(e.date()<a.date())return-nt(a,e);var t=12*(a.year()-e.year())+(a.month()-e.month()),s=e.clone().add(t,"months"),a=a-s<0?(a-s)/(s-e.clone().add(t-1,"months")):(a-s)/(e.clone().add(1+t,"months")-s);return-(t+a)||0}function rt(e){return void 0===e?this._locale._abbr:(null!=(e=pa(e))&&(this._locale=e),this)}M.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",M.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";na=e("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});function dt(){return this._locale}var it=126227808e5;function _t(e,a){return(e%a+a)%a}function ot(e,a,t){return e<100&&0<=e?new Date(e+400,a,t)-it:new Date(e,a,t).valueOf()}function mt(e,a,t){return e<100&&0<=e?Date.UTC(e+400,a,t)-it:Date.UTC(e,a,t)}function ut(e,a){return a.erasAbbrRegex(e)}function lt(){for(var e=[],a=[],t=[],s=[],n=this.eras(),r=0,d=n.length;r<d;++r)a.push(k(n[r].name)),e.push(k(n[r].abbr)),t.push(k(n[r].narrow)),s.push(k(n[r].name)),s.push(k(n[r].abbr)),s.push(k(n[r].narrow));this._erasRegex=new RegExp("^("+s.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+a.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+e.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+t.join("|")+")","i")}function Mt(e,a){s(0,[e,e.length],0,a)}function ht(e,a,t,s,n){var r;return null==e?Xe(this,s,n).year:(r=ea(e,s,n),function(e,a,t,s,n){e=Qe(e,a,t,s,n),a=Ze(e.year,0,e.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()),this.date(a.getUTCDate()),this}.call(this,e,a=r<a?r:a,t,s,n))}s("N",0,0,"eraAbbr"),s("NN",0,0,"eraAbbr"),s("NNN",0,0,"eraAbbr"),s("NNNN",0,0,"eraName"),s("NNNNN",0,0,"eraNarrow"),s("y",["y",1],"yo","eraYear"),s("y",["yy",2],0,"eraYear"),s("y",["yyy",3],0,"eraYear"),s("y",["yyyy",4],0,"eraYear"),p("N",ut),p("NN",ut),p("NNN",ut),p("NNNN",function(e,a){return a.erasNameRegex(e)}),p("NNNNN",function(e,a){return a.erasNarrowRegex(e)}),D(["N","NN","NNN","NNNN","NNNNN"],function(e,a,t,s){s=t._locale.erasParse(e,s,t._strict);s?h(t).era=s:h(t).invalidEra=e}),p("y",Te),p("yy",Te),p("yyy",Te),p("yyyy",Te),p("yo",function(e,a){return a._eraYearOrdinalRegex||Te}),D(["y","yy","yyy","yyyy"],g),D(["yo"],function(e,a,t,s){var n;t._locale._eraYearOrdinalRegex&&(n=e.match(t._locale._eraYearOrdinalRegex)),t._locale.eraYearOrdinalParse?a[g]=t._locale.eraYearOrdinalParse(e,n):a[g]=parseInt(e,10)}),s(0,["gg",2],0,function(){return this.weekYear()%100}),s(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Mt("gggg","weekYear"),Mt("ggggg","weekYear"),Mt("GGGG","isoWeekYear"),Mt("GGGGG","isoWeekYear"),a("weekYear","gg"),a("isoWeekYear","GG"),t("weekYear",1),t("isoWeekYear",1),p("G",ge),p("g",ge),p("GG",o,r),p("gg",o,r),p("GGGG",Y,ke),p("gggg",Y,ke),p("GGGGG",y,_),p("ggggg",y,_),je(["gggg","ggggg","GGGG","GGGGG"],function(e,a,t,s){a[s.substr(0,2)]=m(e)}),je(["gg","GG"],function(e,a,t,s){a[s]=M.parseTwoDigitYear(e)}),s("Q",0,"Qo","quarter"),a("quarter","Q"),t("quarter",7),p("Q",n),D("Q",function(e,a){a[xe]=3*(m(e)-1)}),s("D",["DD",2],"Do","date"),a("date","D"),t("date",9),p("D",o),p("DD",o,r),p("Do",function(e,a){return e?a._dayOfMonthOrdinalParse||a._ordinalParse:a._dayOfMonthOrdinalParseLenient}),D(["D","DD"],Pe),D("Do",function(e,a){a[Pe]=m(e.match(o)[0])});Y=Ye("Date",!0);s("DDD",["DDDD",3],"DDDo","dayOfYear"),a("dayOfYear","DDD"),t("dayOfYear",4),p("DDD",De),p("DDDD",pe),D(["DDD","DDDD"],function(e,a,t){t._dayOfYear=m(e)}),s("m",["mm",2],0,"minute"),a("minute","m"),t("minute",14),p("m",o),p("mm",o,r),D(["m","mm"],Oe);var ct,ke=Ye("Minutes",!1),y=(s("s",["ss",2],0,"second"),a("second","s"),t("second",15),p("s",o),p("ss",o,r),D(["s","ss"],We),Ye("Seconds",!1));for(s("S",0,0,function(){return~~(this.millisecond()/100)}),s(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),s(0,["SSS",3],0,"millisecond"),s(0,["SSSS",4],0,function(){return 10*this.millisecond()}),s(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),s(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),s(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),s(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),s(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),a("millisecond","ms"),t("millisecond",16),p("S",De,n),p("SS",De,r),p("SSS",De,pe),ct="SSSS";ct.length<=9;ct+="S")p(ct,Te);function Lt(e,a){a[Ae]=m(1e3*("0."+e))}for(ct="S";ct.length<=9;ct+="S")D(ct,Lt);_=Ye("Milliseconds",!1),s("z",0,0,"zoneAbbr"),s("zz",0,0,"zoneName");n=$.prototype;function Yt(e){return e}n.add=Ne,n.calendar=function(e,a){1===arguments.length&&(arguments[0]?st(arguments[0])?(e=arguments[0],a=void 0):function(e){for(var a=z(e)&&!N(e),t=!1,s=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"],n=0;n<s.length;n+=1)t=t||l(e,s[n]);return a&&t}(arguments[0])&&(a=arguments[0],e=void 0):a=e=void 0);var e=e||S(),t=Va(e,this).startOf("day"),t=M.calendarFormat(this,t)||"sameElse",a=a&&(te(a[t])?a[t].call(this,e):a[t]);return this.format(a||this.localeData().calendar(t,this,S(e)))},n.clone=function(){return new $(this)},n.diff=function(e,a,t){var s,n,r;if(!this.isValid())return NaN;if(!(s=Va(e,this)).isValid())return NaN;switch(n=6e4*(s.utcOffset()-this.utcOffset()),a=i(a)){case"year":r=nt(this,s)/12;break;case"month":r=nt(this,s);break;case"quarter":r=nt(this,s)/3;break;case"second":r=(this-s)/1e3;break;case"minute":r=(this-s)/6e4;break;case"hour":r=(this-s)/36e5;break;case"day":r=(this-s-n)/864e5;break;case"week":r=(this-s-n)/6048e5;break;default:r=this-s}return t?r:u(r)},n.endOf=function(e){var a,t;if(void 0===(e=i(e))||"millisecond"===e||!this.isValid())return this;switch(t=this._isUTC?mt:ot,e){case"year":a=t(this.year()+1,0,1)-1;break;case"quarter":a=t(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":a=t(this.year(),this.month()+1,1)-1;break;case"week":a=t(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":a=t(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":a=t(this.year(),this.month(),this.date()+1)-1;break;case"hour":a=this._d.valueOf(),a+=36e5-_t(a+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case"minute":a=this._d.valueOf(),a+=6e4-_t(a,6e4)-1;break;case"second":a=this._d.valueOf(),a+=1e3-_t(a,1e3)-1;break}return this._d.setTime(a),M.updateOffset(this,!0),this},n.format=function(e){return e=e||(this.isUtc()?M.defaultFormatUtc:M.defaultFormat),e=ue(this,e),this.localeData().postformat(e)},n.from=function(e,a){return this.isValid()&&(Q(e)&&e.isValid()||S(e).isValid())?$a({to:this,from:e}).locale(this.locale()).humanize(!a):this.localeData().invalidDate()},n.fromNow=function(e){return this.from(S(),e)},n.to=function(e,a){return this.isValid()&&(Q(e)&&e.isValid()||S(e).isValid())?$a({from:this,to:e}).locale(this.locale()).humanize(!a):this.localeData().invalidDate()},n.toNow=function(e){return this.to(S(),e)},n.get=function(e){return te(this[e=i(e)])?this[e]():this},n.invalidAt=function(){return h(this).overflow},n.isAfter=function(e,a){return e=Q(e)?e:S(e),!(!this.isValid()||!e.isValid())&&("millisecond"===(a=i(a)||"millisecond")?this.valueOf()>e.valueOf():e.valueOf()<this.clone().startOf(a).valueOf())},n.isBefore=function(e,a){return e=Q(e)?e:S(e),!(!this.isValid()||!e.isValid())&&("millisecond"===(a=i(a)||"millisecond")?this.valueOf()<e.valueOf():this.clone().endOf(a).valueOf()<e.valueOf())},n.isBetween=function(e,a,t,s){return e=Q(e)?e:S(e),a=Q(a)?a:S(a),!!(this.isValid()&&e.isValid()&&a.isValid())&&(("("===(s=s||"()")[0]?this.isAfter(e,t):!this.isBefore(e,t))&&(")"===s[1]?this.isBefore(a,t):!this.isAfter(a,t)))},n.isSame=function(e,a){var e=Q(e)?e:S(e);return!(!this.isValid()||!e.isValid())&&("millisecond"===(a=i(a)||"millisecond")?this.valueOf()===e.valueOf():(e=e.valueOf(),this.clone().startOf(a).valueOf()<=e&&e<=this.clone().endOf(a).valueOf()))},n.isSameOrAfter=function(e,a){return this.isSame(e,a)||this.isAfter(e,a)},n.isSameOrBefore=function(e,a){return this.isSame(e,a)||this.isBefore(e,a)},n.isValid=function(){return G(this)},n.lang=na,n.locale=rt,n.localeData=dt,n.max=L,n.min=c,n.parsingFlags=function(){return I({},h(this))},n.set=function(e,a){if("object"==typeof e)for(var t=function(e){var a,t=[];for(a in e)l(e,a)&&t.push({unit:a,priority:ce[a]});return t.sort(function(e,a){return e.priority-a.priority}),t}(e=he(e)),s=t.length,n=0;n<s;n++)this[t[n].unit](e[t[n].unit]);else if(te(this[e=i(e)]))return this[e](a);return this},n.startOf=function(e){var a,t;if(void 0===(e=i(e))||"millisecond"===e||!this.isValid())return this;switch(t=this._isUTC?mt:ot,e){case"year":a=t(this.year(),0,1);break;case"quarter":a=t(this.year(),this.month()-this.month()%3,1);break;case"month":a=t(this.year(),this.month(),1);break;case"week":a=t(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":a=t(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":a=t(this.year(),this.month(),this.date());break;case"hour":a=this._d.valueOf(),a-=_t(a+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case"minute":a=this._d.valueOf(),a-=_t(a,6e4);break;case"second":a=this._d.valueOf(),a-=_t(a,1e3);break}return this._d.setTime(a),M.updateOffset(this,!0),this},n.subtract=ta,n.toArray=function(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]},n.toObject=function(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}},n.toDate=function(){return new Date(this.valueOf())},n.toISOString=function(e){if(!this.isValid())return null;var a=(e=!0!==e)?this.clone().utc():this;return a.year()<0||9999<a.year()?ue(a,e?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):te(Date.prototype.toISOString)?e?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",ue(a,"Z")):ue(a,e?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},n.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,a="moment",t="";return this.isLocal()||(a=0===this.utcOffset()?"moment.utc":"moment.parseZone",t="Z"),a="["+a+'("]',e=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",this.format(a+e+"-MM-DD[T]HH:mm:ss.SSS"+(t+'[")]'))},"undefined"!=typeof Symbol&&null!=Symbol.for&&(n[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),n.toJSON=function(){return this.isValid()?this.toISOString():null},n.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},n.unix=function(){return Math.floor(this.valueOf()/1e3)},n.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},n.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},n.eraName=function(){for(var e,a=this.localeData().eras(),t=0,s=a.length;t<s;++t){if(e=this.clone().startOf("day").valueOf(),a[t].since<=e&&e<=a[t].until)return a[t].name;if(a[t].until<=e&&e<=a[t].since)return a[t].name}return""},n.eraNarrow=function(){for(var e,a=this.localeData().eras(),t=0,s=a.length;t<s;++t){if(e=this.clone().startOf("day").valueOf(),a[t].since<=e&&e<=a[t].until)return a[t].narrow;if(a[t].until<=e&&e<=a[t].since)return a[t].narrow}return""},n.eraAbbr=function(){for(var e,a=this.localeData().eras(),t=0,s=a.length;t<s;++t){if(e=this.clone().startOf("day").valueOf(),a[t].since<=e&&e<=a[t].until)return a[t].abbr;if(a[t].until<=e&&e<=a[t].since)return a[t].abbr}return""},n.eraYear=function(){for(var e,a,t=this.localeData().eras(),s=0,n=t.length;s<n;++s)if(e=t[s].since<=t[s].until?1:-1,a=this.clone().startOf("day").valueOf(),t[s].since<=a&&a<=t[s].until||t[s].until<=a&&a<=t[s].since)return(this.year()-M(t[s].since).year())*e+t[s].offset;return this.year()},n.year=Ke,n.isLeapYear=function(){return Le(this.year())},n.weekYear=function(e){return ht.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},n.isoWeekYear=function(e){return ht.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},n.quarter=n.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},n.month=Ge,n.daysInMonth=function(){return ze(this.year(),this.month())},n.week=n.weeks=function(e){var a=this.localeData().week(this);return null==e?a:this.add(7*(e-a),"d")},n.isoWeek=n.isoWeeks=function(e){var a=Xe(this,1,4).week;return null==e?a:this.add(7*(e-a),"d")},n.weeksInYear=function(){var e=this.localeData()._week;return ea(this.year(),e.dow,e.doy)},n.weeksInWeekYear=function(){var e=this.localeData()._week;return ea(this.weekYear(),e.dow,e.doy)},n.isoWeeksInYear=function(){return ea(this.year(),1,4)},n.isoWeeksInISOWeekYear=function(){return ea(this.isoWeekYear(),1,4)},n.date=Y,n.day=n.days=function(e){if(!this.isValid())return null!=e?this:NaN;var a,t,s=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(a=e,t=this.localeData(),e="string"!=typeof a?a:isNaN(a)?"number"==typeof(a=t.weekdaysParse(a))?a:null:parseInt(a,10),this.add(e-s,"d")):s},n.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var a=(this.day()+7-this.localeData()._week.dow)%7;return null==e?a:this.add(e-a,"d")},n.isoWeekday=function(e){return this.isValid()?null!=e?(a=e,t=this.localeData(),t="string"==typeof a?t.weekdaysParse(a)%7||7:isNaN(a)?null:a,this.day(this.day()%7?t:t-7)):this.day()||7:null!=e?this:NaN;var a,t},n.dayOfYear=function(e){var a=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?a:this.add(e-a,"d")},n.hour=n.hours=f,n.minute=n.minutes=ke,n.second=n.seconds=y,n.millisecond=n.milliseconds=_,n.utcOffset=function(e,a,t){var s,n=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null==e)return this._isUTC?n:Ba(this);if("string"==typeof e){if(null===(e=Ga(be,e)))return this}else Math.abs(e)<16&&!t&&(e*=60);return!this._isUTC&&a&&(s=Ba(this)),this._offset=e,this._isUTC=!0,null!=s&&this.add(s,"m"),n!==e&&(!a||this._changeInProgress?at(this,$a(e-n,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,M.updateOffset(this,!0),this._changeInProgress=null)),this},n.utc=function(e){return this.utcOffset(0,e)},n.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Ba(this),"m")),this},n.parseZone=function(){var e;return null!=this._tzm?this.utcOffset(this._tzm,!1,!0):"string"==typeof this._i&&(null!=(e=Ga(we,this._i))?this.utcOffset(e):this.utcOffset(0,!0)),this},n.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?S(e).utcOffset():0,(this.utcOffset()-e)%60==0)},n.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},n.isLocal=function(){return!!this.isValid()&&!this._isUTC},n.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},n.isUtc=Ka,n.isUTC=Ka,n.zoneAbbr=function(){return this._isUTC?"UTC":""},n.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},n.dates=e("dates accessor is deprecated. Use date instead.",Y),n.months=e("months accessor is deprecated. Use month instead",Ge),n.years=e("years accessor is deprecated. Use year instead",Ke),n.zone=e("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,a){return null!=e?(this.utcOffset(e="string"!=typeof e?-e:e,a),this):-this.utcOffset()}),n.isDSTShifted=e("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!d(this._isDSTShifted))return this._isDSTShifted;var e,a={};return Z(a,this),(a=Ea(a))._a?(e=(a._isUTC?U:S)(a._a),this._isDSTShifted=this.isValid()&&0<function(e,a,t){for(var s=Math.min(e.length,a.length),n=Math.abs(e.length-a.length),r=0,d=0;d<s;d++)(t&&e[d]!==a[d]||!t&&m(e[d])!==m(a[d]))&&r++;return r+n}(a._a,e.toArray())):this._isDSTShifted=!1,this._isDSTShifted});r=ne.prototype;function yt(e,a,t,s){var n=pa(),s=U().set(s,a);return n[t](s,e)}function ft(e,a,t){if(J(e)&&(a=e,e=void 0),e=e||"",null!=a)return yt(e,a,t,"month");for(var s=[],n=0;n<12;n++)s[n]=yt(e,n,t,"month");return s}function pt(e,a,t,s){a=("boolean"==typeof e?J(a)&&(t=a,a=void 0):(a=e,e=!1,J(t=a)&&(t=a,a=void 0)),a||"");var n,r=pa(),d=e?r._week.dow:0,i=[];if(null!=t)return yt(a,(t+d)%7,s,"day");for(n=0;n<7;n++)i[n]=yt(a,(n+d)%7,s,"day");return i}r.calendar=function(e,a,t){return te(e=this._calendar[e]||this._calendar.sameElse)?e.call(a,t):e},r.longDateFormat=function(e){var a=this._longDateFormat[e],t=this._longDateFormat[e.toUpperCase()];return a||!t?a:(this._longDateFormat[e]=t.match(ie).map(function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e}).join(""),this._longDateFormat[e])},r.invalidDate=function(){return this._invalidDate},r.ordinal=function(e){return this._ordinal.replace("%d",e)},r.preparse=Yt,r.postformat=Yt,r.relativeTime=function(e,a,t,s){var n=this._relativeTime[t];return te(n)?n(e,a,t,s):n.replace(/%d/i,e)},r.pastFuture=function(e,a){return te(e=this._relativeTime[0<e?"future":"past"])?e(a):e.replace(/%s/i,a)},r.set=function(e){var a,t;for(t in e)l(e,t)&&(te(a=e[t])?this[t]=a:this["_"+t]=a);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},r.eras=function(e,a){for(var t,s=this._eras||pa("en")._eras,n=0,r=s.length;n<r;++n){switch(typeof s[n].since){case"string":t=M(s[n].since).startOf("day"),s[n].since=t.valueOf();break}switch(typeof s[n].until){case"undefined":s[n].until=1/0;break;case"string":t=M(s[n].until).startOf("day").valueOf(),s[n].until=t.valueOf();break}}return s},r.erasParse=function(e,a,t){var s,n,r,d,i,_=this.eras();for(e=e.toUpperCase(),s=0,n=_.length;s<n;++s)if(r=_[s].name.toUpperCase(),d=_[s].abbr.toUpperCase(),i=_[s].narrow.toUpperCase(),t)switch(a){case"N":case"NN":case"NNN":if(d===e)return _[s];break;case"NNNN":if(r===e)return _[s];break;case"NNNNN":if(i===e)return _[s];break}else if(0<=[r,d,i].indexOf(e))return _[s]},r.erasConvertYear=function(e,a){var t=e.since<=e.until?1:-1;return void 0===a?M(e.since).year():M(e.since).year()+(a-e.offset)*t},r.erasAbbrRegex=function(e){return l(this,"_erasAbbrRegex")||lt.call(this),e?this._erasAbbrRegex:this._erasRegex},r.erasNameRegex=function(e){return l(this,"_erasNameRegex")||lt.call(this),e?this._erasNameRegex:this._erasRegex},r.erasNarrowRegex=function(e){return l(this,"_erasNarrowRegex")||lt.call(this),e?this._erasNarrowRegex:this._erasRegex},r.months=function(e,a){return e?(F(this._months)?this._months:this._months[(this._months.isFormat||Re).test(a)?"format":"standalone"])[e.month()]:F(this._months)?this._months:this._months.standalone},r.monthsShort=function(e,a){return e?(F(this._monthsShort)?this._monthsShort:this._monthsShort[Re.test(a)?"format":"standalone"])[e.month()]:F(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},r.monthsParse=function(e,a,t){var s,n;if(this._monthsParseExact)return function(e,a,t){var s,n,r,e=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],s=0;s<12;++s)r=U([2e3,s]),this._shortMonthsParse[s]=this.monthsShort(r,"").toLocaleLowerCase(),this._longMonthsParse[s]=this.months(r,"").toLocaleLowerCase();return t?"MMM"===a?-1!==(n=T.call(this._shortMonthsParse,e))?n:null:-1!==(n=T.call(this._longMonthsParse,e))?n:null:"MMM"===a?-1!==(n=T.call(this._shortMonthsParse,e))||-1!==(n=T.call(this._longMonthsParse,e))?n:null:-1!==(n=T.call(this._longMonthsParse,e))||-1!==(n=T.call(this._shortMonthsParse,e))?n:null}.call(this,e,a,t);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;s<12;s++){if(n=U([2e3,s]),t&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp("^"+this.months(n,"").replace(".","")+"$","i"),this._shortMonthsParse[s]=new RegExp("^"+this.monthsShort(n,"").replace(".","")+"$","i")),t||this._monthsParse[s]||(n="^"+this.months(n,"")+"|^"+this.monthsShort(n,""),this._monthsParse[s]=new RegExp(n.replace(".",""),"i")),t&&"MMMM"===a&&this._longMonthsParse[s].test(e))return s;if(t&&"MMM"===a&&this._shortMonthsParse[s].test(e))return s;if(!t&&this._monthsParse[s].test(e))return s}},r.monthsRegex=function(e){return this._monthsParseExact?(l(this,"_monthsRegex")||Ve.call(this),e?this._monthsStrictRegex:this._monthsRegex):(l(this,"_monthsRegex")||(this._monthsRegex=Ie),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},r.monthsShortRegex=function(e){return this._monthsParseExact?(l(this,"_monthsRegex")||Ve.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(l(this,"_monthsShortRegex")||(this._monthsShortRegex=Ce),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},r.week=function(e){return Xe(e,this._week.dow,this._week.doy).week},r.firstDayOfYear=function(){return this._week.doy},r.firstDayOfWeek=function(){return this._week.dow},r.weekdays=function(e,a){return a=F(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(a)?"format":"standalone"],!0===e?aa(a,this._week.dow):e?a[e.day()]:a},r.weekdaysMin=function(e){return!0===e?aa(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin},r.weekdaysShort=function(e){return!0===e?aa(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort},r.weekdaysParse=function(e,a,t){var s,n;if(this._weekdaysParseExact)return function(e,a,t){var s,n,r,e=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],s=0;s<7;++s)r=U([2e3,1]).day(s),this._minWeekdaysParse[s]=this.weekdaysMin(r,"").toLocaleLowerCase(),this._shortWeekdaysParse[s]=this.weekdaysShort(r,"").toLocaleLowerCase(),this._weekdaysParse[s]=this.weekdays(r,"").toLocaleLowerCase();return t?"dddd"===a?-1!==(n=T.call(this._weekdaysParse,e))?n:null:"ddd"===a?-1!==(n=T.call(this._shortWeekdaysParse,e))?n:null:-1!==(n=T.call(this._minWeekdaysParse,e))?n:null:"dddd"===a?-1!==(n=T.call(this._weekdaysParse,e))||-1!==(n=T.call(this._shortWeekdaysParse,e))||-1!==(n=T.call(this._minWeekdaysParse,e))?n:null:"ddd"===a?-1!==(n=T.call(this._shortWeekdaysParse,e))||-1!==(n=T.call(this._weekdaysParse,e))||-1!==(n=T.call(this._minWeekdaysParse,e))?n:null:-1!==(n=T.call(this._minWeekdaysParse,e))||-1!==(n=T.call(this._weekdaysParse,e))||-1!==(n=T.call(this._shortWeekdaysParse,e))?n:null}.call(this,e,a,t);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),s=0;s<7;s++){if(n=U([2e3,1]).day(s),t&&!this._fullWeekdaysParse[s]&&(this._fullWeekdaysParse[s]=new RegExp("^"+this.weekdays(n,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[s]=new RegExp("^"+this.weekdaysShort(n,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[s]=new RegExp("^"+this.weekdaysMin(n,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[s]||(n="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[s]=new RegExp(n.replace(".",""),"i")),t&&"dddd"===a&&this._fullWeekdaysParse[s].test(e))return s;if(t&&"ddd"===a&&this._shortWeekdaysParse[s].test(e))return s;if(t&&"dd"===a&&this._minWeekdaysParse[s].test(e))return s;if(!t&&this._weekdaysParse[s].test(e))return s}},r.weekdaysRegex=function(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||_a.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(l(this,"_weekdaysRegex")||(this._weekdaysRegex=ra),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},r.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||_a.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(l(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=da),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},r.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||_a.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(l(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=ia),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},r.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},r.meridiem=function(e,a,t){return 11<e?t?"pm":"PM":t?"am":"AM"},ya("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var a=e%10;return e+(1===m(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")}}),M.lang=e("moment.lang is deprecated. Use moment.locale instead.",ya),M.langData=e("moment.langData is deprecated. Use moment.localeData instead.",pa);var kt=Math.abs;function Dt(e,a,t,s){a=$a(a,t);return e._milliseconds+=s*a._milliseconds,e._days+=s*a._days,e._months+=s*a._months,e._bubble()}function Tt(e){return e<0?Math.floor(e):Math.ceil(e)}function gt(e){return 4800*e/146097}function wt(e){return 146097*e/4800}function bt(e){return function(){return this.as(e)}}De=bt("ms"),pe=bt("s"),Ne=bt("m"),L=bt("h"),c=bt("d"),ta=bt("w"),f=bt("M"),ke=bt("Q"),y=bt("y");function St(e){return function(){return this.isValid()?this._data[e]:NaN}}var _=St("milliseconds"),Y=St("seconds"),Ke=St("minutes"),r=St("hours"),Ht=St("days"),vt=St("months"),jt=St("years");var xt=Math.round,Pt={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function Ot(e,a,t,s){var n=$a(e).abs(),r=xt(n.as("s")),d=xt(n.as("m")),i=xt(n.as("h")),_=xt(n.as("d")),o=xt(n.as("M")),m=xt(n.as("w")),n=xt(n.as("y")),r=(r<=t.ss?["s",r]:r<t.s&&["ss",r])||d<=1&&["m"]||d<t.m&&["mm",d]||i<=1&&["h"]||i<t.h&&["hh",i]||_<=1&&["d"]||_<t.d&&["dd",_];return(r=(r=null!=t.w?r||m<=1&&["w"]||m<t.w&&["ww",m]:r)||o<=1&&["M"]||o<t.M&&["MM",o]||n<=1&&["y"]||["yy",n])[2]=a,r[3]=0<+e,r[4]=s,function(e,a,t,s,n){return n.relativeTime(a||1,!!t,e,s)}.apply(null,r)}var Wt=Math.abs;function At(e){return(0<e)-(e<0)||+e}function Et(){if(!this.isValid())return this.localeData().invalidDate();var e,a,t,s,n,r,d,i=Wt(this._milliseconds)/1e3,_=Wt(this._days),o=Wt(this._months),m=this.asSeconds();return m?(e=u(i/60),a=u(e/60),i%=60,e%=60,t=u(o/12),o%=12,s=i?i.toFixed(3).replace(/\.?0+$/,""):"",n=At(this._months)!==At(m)?"-":"",r=At(this._days)!==At(m)?"-":"",d=At(this._milliseconds)!==At(m)?"-":"",(m<0?"-":"")+"P"+(t?n+t+"Y":"")+(o?n+o+"M":"")+(_?r+_+"D":"")+(a||e||i?"T":"")+(a?d+a+"H":"")+(e?d+e+"M":"")+(i?d+s+"S":"")):"P0D"}function Ft(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function H(d){return function(e,a,t,s){var n=Ft(e),r=Jt[d][Ft(e)];return(r=2===n?r[a?0:1]:r).replace(/%d/i,e)}}function zt(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function v(d){return function(e,a,t,s){var n=zt(e),r=Ct[d][zt(e)];return(r=2===n?r[a?0:1]:r).replace(/%d/i,e)}}function Nt(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function j(d){return function(e,a,t,s){var n=Nt(e),r=Bt[d][Nt(e)];return(r=2===n?r[a?0:1]:r).replace(/%d/i,e)}}var x=Ja.prototype,Jt=(x.isValid=function(){return this._isValid},x.abs=function(){var e=this._data;return this._milliseconds=kt(this._milliseconds),this._days=kt(this._days),this._months=kt(this._months),e.milliseconds=kt(e.milliseconds),e.seconds=kt(e.seconds),e.minutes=kt(e.minutes),e.hours=kt(e.hours),e.months=kt(e.months),e.years=kt(e.years),this},x.add=function(e,a){return Dt(this,e,a,1)},x.subtract=function(e,a){return Dt(this,e,a,-1)},x.as=function(e){if(!this.isValid())return NaN;var a,t,s=this._milliseconds;if("month"===(e=i(e))||"quarter"===e||"year"===e)switch(a=this._days+s/864e5,t=this._months+gt(a),e){case"month":return t;case"quarter":return t/3;case"year":return t/12}else switch(a=this._days+Math.round(wt(this._months)),e){case"week":return a/7+s/6048e5;case"day":return a+s/864e5;case"hour":return 24*a+s/36e5;case"minute":return 1440*a+s/6e4;case"second":return 86400*a+s/1e3;case"millisecond":return Math.floor(864e5*a)+s;default:throw new Error("Unknown unit "+e)}},x.asMilliseconds=De,x.asSeconds=pe,x.asMinutes=Ne,x.asHours=L,x.asDays=c,x.asWeeks=ta,x.asMonths=f,x.asQuarters=ke,x.asYears=y,x.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*m(this._months/12):NaN},x._bubble=function(){var e=this._milliseconds,a=this._days,t=this._months,s=this._data;return 0<=e&&0<=a&&0<=t||e<=0&&a<=0&&t<=0||(e+=864e5*Tt(wt(t)+a),t=a=0),s.milliseconds=e%1e3,e=u(e/1e3),s.seconds=e%60,e=u(e/60),s.minutes=e%60,e=u(e/60),s.hours=e%24,a+=u(e/24),t+=e=u(gt(a)),a-=Tt(wt(e)),e=u(t/12),t%=12,s.days=a,s.months=t,s.years=e,this},x.clone=function(){return $a(this)},x.get=function(e){return e=i(e),this.isValid()?this[e+"s"]():NaN},x.milliseconds=_,x.seconds=Y,x.minutes=Ke,x.hours=r,x.days=Ht,x.weeks=function(){return u(this.days()/7)},x.months=vt,x.years=jt,x.humanize=function(e,a){if(!this.isValid())return this.localeData().invalidDate();var t=!1,s=Pt;return"object"==typeof e&&(a=e,e=!1),"boolean"==typeof e&&(t=e),"object"==typeof a&&(s=Object.assign({},Pt,a),null!=a.s&&null==a.ss&&(s.ss=a.s-1)),e=this.localeData(),a=Ot(this,!t,s,e),t&&(a=e.pastFuture(+this,a)),e.postformat(a)},x.toISOString=Et,x.toString=Et,x.toJSON=Et,x.locale=rt,x.localeData=dt,x.toIsoString=e("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Et),x.lang=na,s("X",0,0,"unix"),s("x",0,0,"valueOf"),p("x",ge),p("X",/[+-]?\d+(\.\d{1,3})?/),D("X",function(e,a,t){t._d=new Date(1e3*parseFloat(e))}),D("x",function(e,a,t){t._d=new Date(m(e))}),M.version="2.29.4",E=S,M.fn=n,M.min=function(){return za("isBefore",[].slice.call(arguments,0))},M.max=function(){return za("isAfter",[].slice.call(arguments,0))},M.now=function(){return Date.now?Date.now():+new Date},M.utc=U,M.unix=function(e){return S(1e3*e)},M.months=function(e,a){return ft(e,a,"months")},M.isDate=R,M.locale=ya,M.invalid=V,M.duration=$a,M.isMoment=Q,M.weekdays=function(e,a,t){return pt(e,a,t,"weekdays")},M.parseZone=function(){return S.apply(null,arguments).parseZone()},M.localeData=pa,M.isDuration=Ra,M.monthsShort=function(e,a){return ft(e,a,"monthsShort")},M.weekdaysMin=function(e,a,t){return pt(e,a,t,"weekdaysMin")},M.defineLocale=fa,M.updateLocale=function(e,a){var t,s;return null!=a?(s=Ma,null!=b[e]&&null!=b[e].parentLocale?b[e].set(se(b[e]._config,a)):(a=se(s=null!=(t=Ya(e))?t._config:s,a),null==t&&(a.abbr=e),(s=new ne(a)).parentLocale=b[e],b[e]=s),ya(e)):null!=b[e]&&(null!=b[e].parentLocale?(b[e]=b[e].parentLocale,e===ya()&&ya(e)):null!=b[e]&&delete b[e]),b[e]},M.locales=function(){return re(b)},M.weekdaysShort=function(e,a,t){return pt(e,a,t,"weekdaysShort")},M.normalizeUnits=i,M.relativeTimeRounding=function(e){return void 0===e?xt:"function"==typeof e&&(xt=e,!0)},M.relativeTimeThreshold=function(e,a){return void 0!==Pt[e]&&(void 0===a?Pt[e]:(Pt[e]=a,"s"===e&&(Pt.ss=a-1),!0))},M.calendarFormat=function(e,a){return(e=e.diff(a,"days",!0))<-6?"sameElse":e<-1?"lastWeek":e<0?"lastDay":e<1?"sameDay":e<2?"nextDay":e<7?"nextWeek":"sameElse"},M.prototype=n,M.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},M.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,a,t){return e<12?t?"vm":"VM":t?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[M\xf4re om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}}),{s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]}),De=["\u062c\u0627\u0646\u0641\u064a","\u0641\u064a\u0641\u0631\u064a","\u0645\u0627\u0631\u0633","\u0623\u0641\u0631\u064a\u0644","\u0645\u0627\u064a","\u062c\u0648\u0627\u0646","\u062c\u0648\u064a\u0644\u064a\u0629","\u0623\u0648\u062a","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"],Rt=(M.defineLocale("ar-dz",{months:De,monthsShort:De,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:H("s"),ss:H("s"),m:H("m"),mm:H("m"),h:H("h"),hh:H("h"),d:H("d"),dd:H("d"),M:H("M"),MM:H("M"),y:H("y"),yy:H("y")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:0,doy:4}}),M.defineLocale("ar-kw",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062a\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062a\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:0,doy:12}}),{1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"}),Ct={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},pe=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"],It=(M.defineLocale("ar-ly",{months:pe,monthsShort:pe,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:v("s"),ss:v("s"),m:v("m"),mm:v("m"),h:v("h"),hh:v("h"),d:v("d"),dd:v("d"),M:v("M"),MM:v("M"),y:v("y"),yy:v("y")},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return Rt[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}}),M.defineLocale("ar-ma",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:1,doy:4}}),{1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"}),Ut={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},Gt=(M.defineLocale("ar-sa",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return Ut[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return It[e]}).replace(/,/g,"\u060c")},week:{dow:0,doy:6}}),M.defineLocale("ar-tn",{months:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:1,doy:4}}),{1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"}),Vt={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},Bt={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},Ne=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"],Kt=(M.defineLocale("ar",{months:Ne,monthsShort:Ne,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:j("s"),ss:j("s"),m:j("m"),mm:j("m"),h:j("h"),hh:j("h"),d:j("d"),dd:j("d"),M:j("M"),MM:j("M"),y:j("y"),yy:j("y")},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return Vt[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return Gt[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}}),{1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-\xfcnc\xfc",4:"-\xfcnc\xfc",100:"-\xfcnc\xfc",6:"-nc\u0131",9:"-uncu",10:"-uncu",30:"-uncu",60:"-\u0131nc\u0131",90:"-\u0131nc\u0131"});function qt(e,a,t){return"m"===t?a?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443":"h"===t?a?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443":e+" "+(e=+e,a=(a={ss:a?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:a?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d",hh:a?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d",dd:"\u0434\u0437\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u0437\u0451\u043d",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u044b_\u043c\u0435\u0441\u044f\u0446\u0430\u045e",yy:"\u0433\u043e\u0434_\u0433\u0430\u0434\u044b_\u0433\u0430\u0434\u043e\u045e"}[t]).split("_"),e%10==1&&e%100!=11?a[0]:2<=e%10&&e%10<=4&&(e%100<10||20<=e%100)?a[1]:a[2])}M.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ert\u0259si_\xc7\u0259r\u015f\u0259nb\u0259 ax\u015fam\u0131_\xc7\u0259r\u015f\u0259nb\u0259_C\xfcm\u0259 ax\u015fam\u0131_C\xfcm\u0259_\u015e\u0259nb\u0259".split("_"),weekdaysShort:"Baz_BzE_\xc7Ax_\xc7\u0259r_CAx_C\xfcm_\u015e\u0259n".split("_"),weekdaysMin:"Bz_BE_\xc7A_\xc7\u0259_CA_C\xfc_\u015e\u0259".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[g\u0259l\u0259n h\u0259ft\u0259] dddd [saat] LT",lastDay:"[d\xfcn\u0259n] LT",lastWeek:"[ke\xe7\u0259n h\u0259ft\u0259] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \u0259vv\u0259l",s:"bir ne\xe7\u0259 saniy\u0259",ss:"%d saniy\u0259",m:"bir d\u0259qiq\u0259",mm:"%d d\u0259qiq\u0259",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gec\u0259|s\u0259h\u0259r|g\xfcnd\xfcz|ax\u015fam/,isPM:function(e){return/^(g\xfcnd\xfcz|ax\u015fam)$/.test(e)},meridiem:function(e,a,t){return e<4?"gec\u0259":e<12?"s\u0259h\u0259r":e<17?"g\xfcnd\xfcz":"ax\u015fam"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0131nc\u0131|inci|nci|\xfcnc\xfc|nc\u0131|uncu)/,ordinal:function(e){if(0===e)return e+"-\u0131nc\u0131";var a=e%10;return e+(Kt[a]||Kt[e%100-a]||Kt[100<=e?100:null])},week:{dow:1,doy:7}}),M.defineLocale("be",{months:{format:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044f_\u043b\u044e\u0442\u0430\u0433\u0430_\u0441\u0430\u043a\u0430\u0432\u0456\u043a\u0430_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a\u0430_\u0442\u0440\u0430\u045e\u043d\u044f_\u0447\u044d\u0440\u0432\u0435\u043d\u044f_\u043b\u0456\u043f\u0435\u043d\u044f_\u0436\u043d\u0456\u045e\u043d\u044f_\u0432\u0435\u0440\u0430\u0441\u043d\u044f_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a\u0430_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434\u0430_\u0441\u043d\u0435\u0436\u043d\u044f".split("_"),standalone:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044c_\u043b\u044e\u0442\u044b_\u0441\u0430\u043a\u0430\u0432\u0456\u043a_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u044d\u0440\u0432\u0435\u043d\u044c_\u043b\u0456\u043f\u0435\u043d\u044c_\u0436\u043d\u0456\u0432\u0435\u043d\u044c_\u0432\u0435\u0440\u0430\u0441\u0435\u043d\u044c_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434_\u0441\u043d\u0435\u0436\u0430\u043d\u044c".split("_")},monthsShort:"\u0441\u0442\u0443\u0434_\u043b\u044e\u0442_\u0441\u0430\u043a_\u043a\u0440\u0430\u0441_\u0442\u0440\u0430\u0432_\u0447\u044d\u0440\u0432_\u043b\u0456\u043f_\u0436\u043d\u0456\u0432_\u0432\u0435\u0440_\u043a\u0430\u0441\u0442_\u043b\u0456\u0441\u0442_\u0441\u043d\u0435\u0436".split("_"),weekdays:{format:"\u043d\u044f\u0434\u0437\u0435\u043b\u044e_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0443_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0443_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),standalone:"\u043d\u044f\u0434\u0437\u0435\u043b\u044f_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0430_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0430_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),isFormat:/\[ ?[\u0423\u0443\u045e] ?(?:\u043c\u0456\u043d\u0443\u043b\u0443\u044e|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0443\u044e)? ?\] ?dddd/},weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., HH:mm",LLLL:"dddd, D MMMM YYYY \u0433., HH:mm"},calendar:{sameDay:"[\u0421\u0451\u043d\u043d\u044f \u045e] LT",nextDay:"[\u0417\u0430\u045e\u0442\u0440\u0430 \u045e] LT",lastDay:"[\u0423\u0447\u043e\u0440\u0430 \u045e] LT",nextWeek:function(){return"[\u0423] dddd [\u045e] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u0443\u044e] dddd [\u045e] LT";case 1:case 2:case 4:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u044b] dddd [\u045e] LT"}},sameElse:"L"},relativeTime:{future:"\u043f\u0440\u0430\u0437 %s",past:"%s \u0442\u0430\u043c\u0443",s:"\u043d\u0435\u043a\u0430\u043b\u044c\u043a\u0456 \u0441\u0435\u043a\u0443\u043d\u0434",m:qt,mm:qt,h:qt,hh:qt,d:"\u0434\u0437\u0435\u043d\u044c",dd:qt,M:"\u043c\u0435\u0441\u044f\u0446",MM:qt,y:"\u0433\u043e\u0434",yy:qt},meridiemParse:/\u043d\u043e\u0447\u044b|\u0440\u0430\u043d\u0456\u0446\u044b|\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430/,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430)$/.test(e)},meridiem:function(e,a,t){return e<4?"\u043d\u043e\u0447\u044b":e<12?"\u0440\u0430\u043d\u0456\u0446\u044b":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0430\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0456|\u044b|\u0433\u0430)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":case"w":case"W":return e%10!=2&&e%10!=3||e%100==12||e%100==13?e+"-\u044b":e+"-\u0456";case"D":return e+"-\u0433\u0430";default:return e}},week:{dow:1,doy:7}}),M.defineLocale("bg",{months:"\u044f\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u044f\u043d\u0443_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u044f\u0434\u0430_\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a_\u043f\u0435\u0442\u044a\u043a_\u0441\u044a\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u044f_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u044a\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u043d\u0435\u0441 \u0432] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432] LT",nextWeek:"dddd [\u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u041c\u0438\u043d\u0430\u043b\u0430\u0442\u0430] dddd [\u0432] LT";case 1:case 2:case 4:case 5:return"[\u041c\u0438\u043d\u0430\u043b\u0438\u044f] dddd [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0441\u043b\u0435\u0434 %s",past:"\u043f\u0440\u0435\u0434\u0438 %s",s:"\u043d\u044f\u043a\u043e\u043b\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0434\u0435\u043d",dd:"%d \u0434\u0435\u043d\u0430",w:"\u0441\u0435\u0434\u043c\u0438\u0446\u0430",ww:"%d \u0441\u0435\u0434\u043c\u0438\u0446\u0438",M:"\u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0430",y:"\u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(e){var a=e%10,t=e%100;return 0===e?e+"-\u0435\u0432":0==t?e+"-\u0435\u043d":10<t&&t<20?e+"-\u0442\u0438":1==a?e+"-\u0432\u0438":2==a?e+"-\u0440\u0438":7==a||8==a?e+"-\u043c\u0438":e+"-\u0442\u0438"},week:{dow:1,doy:7}}),M.defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_M\u025bkalo_Zuw\u025bnkalo_Zuluyekalo_Utikalo_S\u025btanburukalo_\u0254kut\u0254burukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_M\u025b_Zuw_Zul_Uti_S\u025bt_\u0254ku_Now_Des".split("_"),weekdays:"Kari_Nt\u025bn\u025bn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Nt\u025b_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm"},calendar:{sameDay:"[Bi l\u025br\u025b] LT",nextDay:"[Sini l\u025br\u025b] LT",nextWeek:"dddd [don l\u025br\u025b] LT",lastDay:"[Kunu l\u025br\u025b] LT",lastWeek:"dddd [t\u025bm\u025bnen l\u025br\u025b] LT",sameElse:"L"},relativeTime:{future:"%s k\u0254n\u0254",past:"a b\u025b %s b\u0254",s:"sanga dama dama",ss:"sekondi %d",m:"miniti kelen",mm:"miniti %d",h:"l\u025br\u025b kelen",hh:"l\u025br\u025b %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}});var Zt={1:"\u09e7",2:"\u09e8",3:"\u09e9",4:"\u09ea",5:"\u09eb",6:"\u09ec",7:"\u09ed",8:"\u09ee",9:"\u09ef",0:"\u09e6"},$t={"\u09e7":"1","\u09e8":"2","\u09e9":"3","\u09ea":"4","\u09eb":"5","\u09ec":"6","\u09ed":"7","\u09ee":"8","\u09ef":"9","\u09e6":"0"},Qt=(M.defineLocale("bn-bd",{months:"\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09bf_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09bf_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0_\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0_\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0_\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0".split("_"),monthsShort:"\u099c\u09be\u09a8\u09c1_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f_\u0985\u0995\u09cd\u099f\u09cb_\u09a8\u09ad\u09c7_\u09a1\u09bf\u09b8\u09c7".split("_"),weekdays:"\u09b0\u09ac\u09bf\u09ac\u09be\u09b0_\u09b8\u09cb\u09ae\u09ac\u09be\u09b0_\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0_\u09ac\u09c1\u09a7\u09ac\u09be\u09b0_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0_\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0_\u09b6\u09a8\u09bf\u09ac\u09be\u09b0".split("_"),weekdaysShort:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),weekdaysMin:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),longDateFormat:{LT:"A h:mm \u09b8\u09ae\u09df",LTS:"A h:mm:ss \u09b8\u09ae\u09df",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u09b8\u09ae\u09df",LLLL:"dddd, D MMMM YYYY, A h:mm \u09b8\u09ae\u09df"},calendar:{sameDay:"[\u0986\u099c] LT",nextDay:"[\u0986\u0997\u09be\u09ae\u09c0\u0995\u09be\u09b2] LT",nextWeek:"dddd, LT",lastDay:"[\u0997\u09a4\u0995\u09be\u09b2] LT",lastWeek:"[\u0997\u09a4] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u09aa\u09b0\u09c7",past:"%s \u0986\u0997\u09c7",s:"\u0995\u09df\u09c7\u0995 \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",ss:"%d \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",m:"\u098f\u0995 \u09ae\u09bf\u09a8\u09bf\u099f",mm:"%d \u09ae\u09bf\u09a8\u09bf\u099f",h:"\u098f\u0995 \u0998\u09a8\u09cd\u099f\u09be",hh:"%d \u0998\u09a8\u09cd\u099f\u09be",d:"\u098f\u0995 \u09a6\u09bf\u09a8",dd:"%d \u09a6\u09bf\u09a8",M:"\u098f\u0995 \u09ae\u09be\u09b8",MM:"%d \u09ae\u09be\u09b8",y:"\u098f\u0995 \u09ac\u099b\u09b0",yy:"%d \u09ac\u099b\u09b0"},preparse:function(e){return e.replace(/[\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09e6]/g,function(e){return $t[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Zt[e]})},meridiemParse:/\u09b0\u09be\u09a4|\u09ad\u09cb\u09b0|\u09b8\u0995\u09be\u09b2|\u09a6\u09c1\u09aa\u09c1\u09b0|\u09ac\u09bf\u0995\u09be\u09b2|\u09b8\u09a8\u09cd\u09a7\u09cd\u09af\u09be|\u09b0\u09be\u09a4/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u09b0\u09be\u09a4"===a?e<4?e:e+12:"\u09ad\u09cb\u09b0"===a||"\u09b8\u0995\u09be\u09b2"===a?e:"\u09a6\u09c1\u09aa\u09c1\u09b0"===a?3<=e?e:e+12:"\u09ac\u09bf\u0995\u09be\u09b2"===a||"\u09b8\u09a8\u09cd\u09a7\u09cd\u09af\u09be"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u09b0\u09be\u09a4":e<6?"\u09ad\u09cb\u09b0":e<12?"\u09b8\u0995\u09be\u09b2":e<15?"\u09a6\u09c1\u09aa\u09c1\u09b0":e<18?"\u09ac\u09bf\u0995\u09be\u09b2":e<20?"\u09b8\u09a8\u09cd\u09a7\u09cd\u09af\u09be":"\u09b0\u09be\u09a4"},week:{dow:0,doy:6}}),{1:"\u09e7",2:"\u09e8",3:"\u09e9",4:"\u09ea",5:"\u09eb",6:"\u09ec",7:"\u09ed",8:"\u09ee",9:"\u09ef",0:"\u09e6"}),Xt={"\u09e7":"1","\u09e8":"2","\u09e9":"3","\u09ea":"4","\u09eb":"5","\u09ec":"6","\u09ed":"7","\u09ee":"8","\u09ef":"9","\u09e6":"0"},es=(M.defineLocale("bn",{months:"\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09bf_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09bf_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0_\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0_\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0_\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0".split("_"),monthsShort:"\u099c\u09be\u09a8\u09c1_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f_\u0985\u0995\u09cd\u099f\u09cb_\u09a8\u09ad\u09c7_\u09a1\u09bf\u09b8\u09c7".split("_"),weekdays:"\u09b0\u09ac\u09bf\u09ac\u09be\u09b0_\u09b8\u09cb\u09ae\u09ac\u09be\u09b0_\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0_\u09ac\u09c1\u09a7\u09ac\u09be\u09b0_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0_\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0_\u09b6\u09a8\u09bf\u09ac\u09be\u09b0".split("_"),weekdaysShort:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),weekdaysMin:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),longDateFormat:{LT:"A h:mm \u09b8\u09ae\u09df",LTS:"A h:mm:ss \u09b8\u09ae\u09df",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u09b8\u09ae\u09df",LLLL:"dddd, D MMMM YYYY, A h:mm \u09b8\u09ae\u09df"},calendar:{sameDay:"[\u0986\u099c] LT",nextDay:"[\u0986\u0997\u09be\u09ae\u09c0\u0995\u09be\u09b2] LT",nextWeek:"dddd, LT",lastDay:"[\u0997\u09a4\u0995\u09be\u09b2] LT",lastWeek:"[\u0997\u09a4] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u09aa\u09b0\u09c7",past:"%s \u0986\u0997\u09c7",s:"\u0995\u09df\u09c7\u0995 \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",ss:"%d \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",m:"\u098f\u0995 \u09ae\u09bf\u09a8\u09bf\u099f",mm:"%d \u09ae\u09bf\u09a8\u09bf\u099f",h:"\u098f\u0995 \u0998\u09a8\u09cd\u099f\u09be",hh:"%d \u0998\u09a8\u09cd\u099f\u09be",d:"\u098f\u0995 \u09a6\u09bf\u09a8",dd:"%d \u09a6\u09bf\u09a8",M:"\u098f\u0995 \u09ae\u09be\u09b8",MM:"%d \u09ae\u09be\u09b8",y:"\u098f\u0995 \u09ac\u099b\u09b0",yy:"%d \u09ac\u099b\u09b0"},preparse:function(e){return e.replace(/[\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09e6]/g,function(e){return Xt[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Qt[e]})},meridiemParse:/\u09b0\u09be\u09a4|\u09b8\u0995\u09be\u09b2|\u09a6\u09c1\u09aa\u09c1\u09b0|\u09ac\u09bf\u0995\u09be\u09b2|\u09b0\u09be\u09a4/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u09b0\u09be\u09a4"===a&&4<=e||"\u09a6\u09c1\u09aa\u09c1\u09b0"===a&&e<5||"\u09ac\u09bf\u0995\u09be\u09b2"===a?e+12:e},meridiem:function(e,a,t){return e<4?"\u09b0\u09be\u09a4":e<10?"\u09b8\u0995\u09be\u09b2":e<17?"\u09a6\u09c1\u09aa\u09c1\u09b0":e<20?"\u09ac\u09bf\u0995\u09be\u09b2":"\u09b0\u09be\u09a4"},week:{dow:0,doy:6}}),{1:"\u0f21",2:"\u0f22",3:"\u0f23",4:"\u0f24",5:"\u0f25",6:"\u0f26",7:"\u0f27",8:"\u0f28",9:"\u0f29",0:"\u0f20"}),as={"\u0f21":"1","\u0f22":"2","\u0f23":"3","\u0f24":"4","\u0f25":"5","\u0f26":"6","\u0f27":"7","\u0f28":"8","\u0f29":"9","\u0f20":"0"};function ts(e,a,t){return e+" "+(t={mm:"munutenn",MM:"miz",dd:"devezh"}[t],2!==(e=e)?t:void 0!==(e={m:"v",b:"v",d:"z"})[(t=t).charAt(0)]?e[t.charAt(0)]+t.substring(1):t)}M.defineLocale("bo",{months:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f66\u0f74\u0f58\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54".split("_"),monthsShort:"\u0f5f\u0fb3\u0f0b1_\u0f5f\u0fb3\u0f0b2_\u0f5f\u0fb3\u0f0b3_\u0f5f\u0fb3\u0f0b4_\u0f5f\u0fb3\u0f0b5_\u0f5f\u0fb3\u0f0b6_\u0f5f\u0fb3\u0f0b7_\u0f5f\u0fb3\u0f0b8_\u0f5f\u0fb3\u0f0b9_\u0f5f\u0fb3\u0f0b10_\u0f5f\u0fb3\u0f0b11_\u0f5f\u0fb3\u0f0b12".split("_"),monthsShortRegex:/^(\u0f5f\u0fb3\u0f0b\d{1,2})/,monthsParseExact:!0,weekdays:"\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysShort:"\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysMin:"\u0f49\u0f72_\u0f5f\u0fb3_\u0f58\u0f72\u0f42_\u0f63\u0fb7\u0f42_\u0f55\u0f74\u0f62_\u0f66\u0f44\u0f66_\u0f66\u0fa4\u0f7a\u0f53".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0f51\u0f72\u0f0b\u0f62\u0f72\u0f44] LT",nextDay:"[\u0f66\u0f44\u0f0b\u0f49\u0f72\u0f53] LT",nextWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f62\u0f97\u0f7a\u0f66\u0f0b\u0f58], LT",lastDay:"[\u0f41\u0f0b\u0f66\u0f44] LT",lastWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f58\u0f50\u0f60\u0f0b\u0f58] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0f63\u0f0b",past:"%s \u0f66\u0f94\u0f53\u0f0b\u0f63",s:"\u0f63\u0f58\u0f0b\u0f66\u0f44",ss:"%d \u0f66\u0f90\u0f62\u0f0b\u0f46\u0f0d",m:"\u0f66\u0f90\u0f62\u0f0b\u0f58\u0f0b\u0f42\u0f45\u0f72\u0f42",mm:"%d \u0f66\u0f90\u0f62\u0f0b\u0f58",h:"\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0b\u0f42\u0f45\u0f72\u0f42",hh:"%d \u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51",d:"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f45\u0f72\u0f42",dd:"%d \u0f49\u0f72\u0f53\u0f0b",M:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f45\u0f72\u0f42",MM:"%d \u0f5f\u0fb3\u0f0b\u0f56",y:"\u0f63\u0f7c\u0f0b\u0f42\u0f45\u0f72\u0f42",yy:"%d \u0f63\u0f7c"},preparse:function(e){return e.replace(/[\u0f21\u0f22\u0f23\u0f24\u0f25\u0f26\u0f27\u0f28\u0f29\u0f20]/g,function(e){return as[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return es[e]})},meridiemParse:/\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c|\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66|\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44|\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42|\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"===a&&4<=e||"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44"===a&&e<5||"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42"===a?e+12:e},meridiem:function(e,a,t){return e<4?"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c":e<10?"\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66":e<17?"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44":e<20?"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42":"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"},week:{dow:0,doy:6}});L=[/^gen/i,/^c[\u02bc\']hwe/i,/^meu/i,/^ebr/i,/^mae/i,/^(mez|eve)/i,/^gou/i,/^eos/i,/^gwe/i,/^her/i,/^du/i,/^ker/i],c=/^(genver|c[\u02bc\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[\u02bc\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,ta=[/^Su/i,/^Lu/i,/^Me([^r]|$)/i,/^Mer/i,/^Ya/i,/^Gw/i,/^Sa/i];function ss(e,a,t){var s=e+" ";switch(t){case"ss":return s+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return a?"jedna minuta":"jedne minute";case"mm":return s+=1!==e&&(2===e||3===e||4===e)?"minute":"minuta";case"h":return a?"jedan sat":"jednog sata";case"hh":return s+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return s+=1===e?"dan":"dana";case"MM":return s+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return s+=1!==e&&(2===e||3===e||4===e)?"godine":"godina"}}M.defineLocale("br",{months:"Genver_C\u02bchwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C\u02bchwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc\u02bcher_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParse:ta,fullWeekdaysParse:[/^sul/i,/^lun/i,/^meurzh/i,/^merc[\u02bc\']her/i,/^yaou/i,/^gwener/i,/^sadorn/i],shortWeekdaysParse:[/^Sul/i,/^Lun/i,/^Meu/i,/^Mer/i,/^Yao/i,/^Gwe/i,/^Sad/i],minWeekdaysParse:ta,monthsRegex:c,monthsShortRegex:c,monthsStrictRegex:/^(genver|c[\u02bc\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,monthsShortStrictRegex:/^(gen|c[\u02bc\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,monthsParse:L,longMonthsParse:L,shortMonthsParse:L,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY HH:mm",LLLL:"dddd, D [a viz] MMMM YYYY HH:mm"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc\u02bchoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec\u02bch da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s \u02bczo",s:"un nebeud segondenno\xf9",ss:"%d eilenn",m:"ur vunutenn",mm:ts,h:"un eur",hh:"%d eur",d:"un devezh",dd:ts,M:"ur miz",MM:ts,y:"ur bloaz",yy:function(e){switch(function e(a){if(9<a)return e(a%10);return a}(e)){case 1:case 3:case 4:case 5:case 9:return e+" bloaz";default:return e+" vloaz"}}},dayOfMonthOrdinalParse:/\d{1,2}(a\xf1|vet)/,ordinal:function(e){return e+(1===e?"a\xf1":"vet")},week:{dow:1,doy:4},meridiemParse:/a.m.|g.m./,isPM:function(e){return"g.m."===e},meridiem:function(e,a,t){return e<12?"a.m.":"g.m."}}),M.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010der u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[pro\u0161lu] dddd [u] LT";case 6:return"[pro\u0161le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[pro\u0161li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:ss,m:ss,mm:ss,h:ss,hh:ss,d:"dan",dd:ss,M:"mjesec",MM:ss,y:"godinu",yy:ss},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),M.defineLocale("ca",{months:{standalone:"gener_febrer_mar\xe7_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de mar\xe7_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._mar\xe7_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[dem\xe0 a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aqu\xed %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|\xe8|a)/,ordinal:function(e,a){return e+("w"!==a&&"W"!==a?1===e?"r":2===e?"n":3===e?"r":4===e?"t":"\xe8":"a")},week:{dow:1,doy:4}});f={format:"leden_\xfanor_b\u0159ezen_duben_kv\u011bten_\u010derven_\u010dervenec_srpen_z\xe1\u0159\xed_\u0159\xedjen_listopad_prosinec".split("_"),standalone:"ledna_\xfanora_b\u0159ezna_dubna_kv\u011btna_\u010dervna_\u010dervence_srpna_z\xe1\u0159\xed_\u0159\xedjna_listopadu_prosince".split("_")},ke="led_\xfano_b\u0159e_dub_kv\u011b_\u010dvn_\u010dvc_srp_z\xe1\u0159_\u0159\xedj_lis_pro".split("_"),y=[/^led/i,/^\xfano/i,/^b\u0159e/i,/^dub/i,/^kv\u011b/i,/^(\u010dvn|\u010derven$|\u010dervna)/i,/^(\u010dvc|\u010dervenec|\u010dervence)/i,/^srp/i,/^z\xe1\u0159/i,/^\u0159\xedj/i,/^lis/i,/^pro/i],_=/^(leden|\xfanor|b\u0159ezen|duben|kv\u011bten|\u010dervenec|\u010dervence|\u010derven|\u010dervna|srpen|z\xe1\u0159\xed|\u0159\xedjen|listopad|prosinec|led|\xfano|b\u0159e|dub|kv\u011b|\u010dvn|\u010dvc|srp|z\xe1\u0159|\u0159\xedj|lis|pro)/i;function ns(e){return 1<e&&e<5&&1!=~~(e/10)}function P(e,a,t,s){var n=e+" ";switch(t){case"s":return a||s?"p\xe1r sekund":"p\xe1r sekundami";case"ss":return a||s?n+(ns(e)?"sekundy":"sekund"):n+"sekundami";case"m":return a?"minuta":s?"minutu":"minutou";case"mm":return a||s?n+(ns(e)?"minuty":"minut"):n+"minutami";case"h":return a?"hodina":s?"hodinu":"hodinou";case"hh":return a||s?n+(ns(e)?"hodiny":"hodin"):n+"hodinami";case"d":return a||s?"den":"dnem";case"dd":return a||s?n+(ns(e)?"dny":"dn\xed"):n+"dny";case"M":return a||s?"m\u011bs\xedc":"m\u011bs\xedcem";case"MM":return a||s?n+(ns(e)?"m\u011bs\xedce":"m\u011bs\xedc\u016f"):n+"m\u011bs\xedci";case"y":return a||s?"rok":"rokem";case"yy":return a||s?n+(ns(e)?"roky":"let"):n+"lety"}}function rs(e,a,t,s){e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?e[t][0]:e[t][1]}function ds(e,a,t,s){e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?e[t][0]:e[t][1]}function is(e,a,t,s){e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?e[t][0]:e[t][1]}M.defineLocale("cs",{months:f,monthsShort:ke,monthsRegex:_,monthsShortRegex:_,monthsStrictRegex:/^(leden|ledna|\xfanora|\xfanor|b\u0159ezen|b\u0159ezna|duben|dubna|kv\u011bten|kv\u011btna|\u010dervenec|\u010dervence|\u010derven|\u010dervna|srpen|srpna|z\xe1\u0159\xed|\u0159\xedjen|\u0159\xedjna|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|\xfano|b\u0159e|dub|kv\u011b|\u010dvn|\u010dvc|srp|z\xe1\u0159|\u0159\xedj|lis|pro)/i,monthsParse:y,longMonthsParse:y,shortMonthsParse:y,weekdays:"ned\u011ble_pond\u011bl\xed_\xfater\xfd_st\u0159eda_\u010dtvrtek_p\xe1tek_sobota".split("_"),weekdaysShort:"ne_po_\xfat_st_\u010dt_p\xe1_so".split("_"),weekdaysMin:"ne_po_\xfat_st_\u010dt_p\xe1_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[z\xedtra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v ned\u011bli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve st\u0159edu v] LT";case 4:return"[ve \u010dtvrtek v] LT";case 5:return"[v p\xe1tek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[v\u010dera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou ned\u011bli v] LT";case 1:case 2:return"[minul\xe9] dddd [v] LT";case 3:return"[minulou st\u0159edu v] LT";case 4:case 5:return"[minul\xfd] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"p\u0159ed %s",s:P,ss:P,m:P,mm:P,h:P,hh:P,d:P,dd:P,M:P,MM:P,y:P,yy:P},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("cv",{months:"\u043a\u04d1\u0440\u043b\u0430\u0447_\u043d\u0430\u0440\u04d1\u0441_\u043f\u0443\u0448_\u0430\u043a\u0430_\u043c\u0430\u0439_\u04ab\u04d7\u0440\u0442\u043c\u0435_\u0443\u0442\u04d1_\u04ab\u0443\u0440\u043b\u0430_\u0430\u0432\u04d1\u043d_\u044e\u043f\u0430_\u0447\u04f3\u043a_\u0440\u0430\u0448\u0442\u0430\u0432".split("_"),monthsShort:"\u043a\u04d1\u0440_\u043d\u0430\u0440_\u043f\u0443\u0448_\u0430\u043a\u0430_\u043c\u0430\u0439_\u04ab\u04d7\u0440_\u0443\u0442\u04d1_\u04ab\u0443\u0440_\u0430\u0432\u043d_\u044e\u043f\u0430_\u0447\u04f3\u043a_\u0440\u0430\u0448".split("_"),weekdays:"\u0432\u044b\u0440\u0441\u0430\u0440\u043d\u0438\u043a\u0443\u043d_\u0442\u0443\u043d\u0442\u0438\u043a\u0443\u043d_\u044b\u0442\u043b\u0430\u0440\u0438\u043a\u0443\u043d_\u044e\u043d\u043a\u0443\u043d_\u043a\u04d7\u04ab\u043d\u0435\u0440\u043d\u0438\u043a\u0443\u043d_\u044d\u0440\u043d\u0435\u043a\u0443\u043d_\u0448\u04d1\u043c\u0430\u0442\u043a\u0443\u043d".split("_"),weekdaysShort:"\u0432\u044b\u0440_\u0442\u0443\u043d_\u044b\u0442\u043b_\u044e\u043d_\u043a\u04d7\u04ab_\u044d\u0440\u043d_\u0448\u04d1\u043c".split("_"),weekdaysMin:"\u0432\u0440_\u0442\u043d_\u044b\u0442_\u044e\u043d_\u043a\u04ab_\u044d\u0440_\u0448\u043c".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7]",LLL:"YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7], HH:mm",LLLL:"dddd, YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7], HH:mm"},calendar:{sameDay:"[\u041f\u0430\u044f\u043d] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",nextDay:"[\u042b\u0440\u0430\u043d] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",lastDay:"[\u04d6\u043d\u0435\u0440] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",nextWeek:"[\u04aa\u0438\u0442\u0435\u0441] dddd LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",lastWeek:"[\u0418\u0440\u0442\u043d\u04d7] dddd LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",sameElse:"L"},relativeTime:{future:function(e){return e+(/\u0441\u0435\u0445\u0435\u0442$/i.exec(e)?"\u0440\u0435\u043d":/\u04ab\u0443\u043b$/i.exec(e)?"\u0442\u0430\u043d":"\u0440\u0430\u043d")},past:"%s \u043a\u0430\u044f\u043b\u043b\u0430",s:"\u043f\u04d7\u0440-\u0438\u043a \u04ab\u0435\u043a\u043a\u0443\u043d\u0442",ss:"%d \u04ab\u0435\u043a\u043a\u0443\u043d\u0442",m:"\u043f\u04d7\u0440 \u043c\u0438\u043d\u0443\u0442",mm:"%d \u043c\u0438\u043d\u0443\u0442",h:"\u043f\u04d7\u0440 \u0441\u0435\u0445\u0435\u0442",hh:"%d \u0441\u0435\u0445\u0435\u0442",d:"\u043f\u04d7\u0440 \u043a\u0443\u043d",dd:"%d \u043a\u0443\u043d",M:"\u043f\u04d7\u0440 \u0443\u0439\u04d1\u0445",MM:"%d \u0443\u0439\u04d1\u0445",y:"\u043f\u04d7\u0440 \u04ab\u0443\u043b",yy:"%d \u04ab\u0443\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-\u043c\u04d7\u0448/,ordinal:"%d-\u043c\u04d7\u0448",week:{dow:1,doy:7}}),M.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn \xf4l",s:"ychydig eiliadau",ss:"%d eiliad",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(e){var a="";return 20<e?a=40===e||50===e||60===e||80===e||100===e?"fed":"ain":0<e&&(a=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"][e]),e+a},week:{dow:1,doy:4}}),M.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"s\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xf8rdag".split("_"),weekdaysShort:"s\xf8n_man_tir_ons_tor_fre_l\xf8r".split("_"),weekdaysMin:"s\xf8_ma_ti_on_to_fr_l\xf8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"p\xe5 dddd [kl.] LT",lastDay:"[i g\xe5r kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"f\xe5 sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en m\xe5ned",MM:"%d m\xe5neder",y:"et \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("de-at",{months:"J\xe4nner_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"J\xe4n._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:rs,mm:"%d Minuten",h:rs,hh:"%d Stunden",d:rs,dd:rs,w:rs,ww:"%d Wochen",M:rs,MM:rs,y:rs,yy:rs},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("de-ch",{months:"Januar_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:ds,mm:"%d Minuten",h:ds,hh:"%d Stunden",d:ds,dd:ds,w:ds,ww:"%d Wochen",M:ds,MM:ds,y:ds,yy:ds},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("de",{months:"Januar_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:is,mm:"%d Minuten",h:is,hh:"%d Stunden",d:is,dd:is,w:is,ww:"%d Wochen",M:is,MM:is,y:is,yy:is},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});Y=["\u0796\u07ac\u0782\u07aa\u0787\u07a6\u0783\u07a9","\u078a\u07ac\u0784\u07b0\u0783\u07aa\u0787\u07a6\u0783\u07a9","\u0789\u07a7\u0783\u07a8\u0797\u07aa","\u0787\u07ad\u0795\u07b0\u0783\u07a9\u078d\u07aa","\u0789\u07ad","\u0796\u07ab\u0782\u07b0","\u0796\u07aa\u078d\u07a6\u0787\u07a8","\u0787\u07af\u078e\u07a6\u0790\u07b0\u0793\u07aa","\u0790\u07ac\u0795\u07b0\u0793\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa","\u0787\u07ae\u0786\u07b0\u0793\u07af\u0784\u07a6\u0783\u07aa","\u0782\u07ae\u0788\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa","\u0791\u07a8\u0790\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa"],Ke=["\u0787\u07a7\u078b\u07a8\u0787\u07b0\u078c\u07a6","\u0780\u07af\u0789\u07a6","\u0787\u07a6\u0782\u07b0\u078e\u07a7\u0783\u07a6","\u0784\u07aa\u078b\u07a6","\u0784\u07aa\u0783\u07a7\u0790\u07b0\u078a\u07a6\u078c\u07a8","\u0780\u07aa\u0786\u07aa\u0783\u07aa","\u0780\u07ae\u0782\u07a8\u0780\u07a8\u0783\u07aa"];M.defineLocale("dv",{months:Y,monthsShort:Y,weekdays:Ke,weekdaysShort:Ke,weekdaysMin:"\u0787\u07a7\u078b\u07a8_\u0780\u07af\u0789\u07a6_\u0787\u07a6\u0782\u07b0_\u0784\u07aa\u078b\u07a6_\u0784\u07aa\u0783\u07a7_\u0780\u07aa\u0786\u07aa_\u0780\u07ae\u0782\u07a8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0789\u0786|\u0789\u078a/,isPM:function(e){return"\u0789\u078a"===e},meridiem:function(e,a,t){return e<12?"\u0789\u0786":"\u0789\u078a"},calendar:{sameDay:"[\u0789\u07a8\u0787\u07a6\u078b\u07aa] LT",nextDay:"[\u0789\u07a7\u078b\u07a6\u0789\u07a7] LT",nextWeek:"dddd LT",lastDay:"[\u0787\u07a8\u0787\u07b0\u0794\u07ac] LT",lastWeek:"[\u078a\u07a7\u0787\u07a8\u078c\u07aa\u0788\u07a8] dddd LT",sameElse:"L"},relativeTime:{future:"\u078c\u07ac\u0783\u07ad\u078e\u07a6\u0787\u07a8 %s",past:"\u0786\u07aa\u0783\u07a8\u0782\u07b0 %s",s:"\u0790\u07a8\u0786\u07aa\u0782\u07b0\u078c\u07aa\u0786\u07ae\u0785\u07ac\u0787\u07b0",ss:"d% \u0790\u07a8\u0786\u07aa\u0782\u07b0\u078c\u07aa",m:"\u0789\u07a8\u0782\u07a8\u0793\u07ac\u0787\u07b0",mm:"\u0789\u07a8\u0782\u07a8\u0793\u07aa %d",h:"\u078e\u07a6\u0791\u07a8\u0787\u07a8\u0783\u07ac\u0787\u07b0",hh:"\u078e\u07a6\u0791\u07a8\u0787\u07a8\u0783\u07aa %d",d:"\u078b\u07aa\u0788\u07a6\u0780\u07ac\u0787\u07b0",dd:"\u078b\u07aa\u0788\u07a6\u0790\u07b0 %d",M:"\u0789\u07a6\u0780\u07ac\u0787\u07b0",MM:"\u0789\u07a6\u0790\u07b0 %d",y:"\u0787\u07a6\u0780\u07a6\u0783\u07ac\u0787\u07b0",yy:"\u0787\u07a6\u0780\u07a6\u0783\u07aa %d"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:7,doy:12}}),M.defineLocale("el",{monthsNominativeEl:"\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2_\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2_\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2_\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2_\u039c\u03ac\u03b9\u03bf\u03c2_\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2_\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2_\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2_\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2_\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2_\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2_\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2".split("_"),monthsGenitiveEl:"\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5_\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5_\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5_\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5_\u039c\u03b1\u0390\u03bf\u03c5_\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5_\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5_\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5_\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5_\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5_\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5_\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5".split("_"),months:function(e,a){return e?("string"==typeof a&&/D/.test(a.substring(0,a.indexOf("MMMM")))?this._monthsGenitiveEl:this._monthsNominativeEl)[e.month()]:this._monthsNominativeEl},monthsShort:"\u0399\u03b1\u03bd_\u03a6\u03b5\u03b2_\u039c\u03b1\u03c1_\u0391\u03c0\u03c1_\u039c\u03b1\u03ca_\u0399\u03bf\u03c5\u03bd_\u0399\u03bf\u03c5\u03bb_\u0391\u03c5\u03b3_\u03a3\u03b5\u03c0_\u039f\u03ba\u03c4_\u039d\u03bf\u03b5_\u0394\u03b5\u03ba".split("_"),weekdays:"\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae_\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1_\u03a4\u03c1\u03af\u03c4\u03b7_\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7_\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7_\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae_\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf".split("_"),weekdaysShort:"\u039a\u03c5\u03c1_\u0394\u03b5\u03c5_\u03a4\u03c1\u03b9_\u03a4\u03b5\u03c4_\u03a0\u03b5\u03bc_\u03a0\u03b1\u03c1_\u03a3\u03b1\u03b2".split("_"),weekdaysMin:"\u039a\u03c5_\u0394\u03b5_\u03a4\u03c1_\u03a4\u03b5_\u03a0\u03b5_\u03a0\u03b1_\u03a3\u03b1".split("_"),meridiem:function(e,a,t){return 11<e?t?"\u03bc\u03bc":"\u039c\u039c":t?"\u03c0\u03bc":"\u03a0\u039c"},isPM:function(e){return"\u03bc"===(e+"").toLowerCase()[0]},meridiemParse:/[\u03a0\u039c]\.?\u039c?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[\u03a3\u03ae\u03bc\u03b5\u03c1\u03b1 {}] LT",nextDay:"[\u0391\u03cd\u03c1\u03b9\u03bf {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[\u03a7\u03b8\u03b5\u03c2 {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[\u03c4\u03bf \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf] dddd [{}] LT";default:return"[\u03c4\u03b7\u03bd \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03b7] dddd [{}] LT"}},sameElse:"L"},calendar:function(e,a){var t,e=this._calendarEl[e],s=a&&a.hours();return t=e,(e="undefined"!=typeof Function&&t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)?e.apply(a):e).replace("{}",s%12==1?"\u03c3\u03c4\u03b7":"\u03c3\u03c4\u03b9\u03c2")},relativeTime:{future:"\u03c3\u03b5 %s",past:"%s \u03c0\u03c1\u03b9\u03bd",s:"\u03bb\u03af\u03b3\u03b1 \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1",ss:"%d \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1",m:"\u03ad\u03bd\u03b1 \u03bb\u03b5\u03c0\u03c4\u03cc",mm:"%d \u03bb\u03b5\u03c0\u03c4\u03ac",h:"\u03bc\u03af\u03b1 \u03ce\u03c1\u03b1",hh:"%d \u03ce\u03c1\u03b5\u03c2",d:"\u03bc\u03af\u03b1 \u03bc\u03ad\u03c1\u03b1",dd:"%d \u03bc\u03ad\u03c1\u03b5\u03c2",M:"\u03ad\u03bd\u03b1\u03c2 \u03bc\u03ae\u03bd\u03b1\u03c2",MM:"%d \u03bc\u03ae\u03bd\u03b5\u03c2",y:"\u03ad\u03bd\u03b1\u03c2 \u03c7\u03c1\u03cc\u03bd\u03bf\u03c2",yy:"%d \u03c7\u03c1\u03cc\u03bd\u03b9\u03b1"},dayOfMonthOrdinalParse:/\d{1,2}\u03b7/,ordinal:"%d\u03b7",week:{dow:1,doy:4}}),M.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:0,doy:4}}),M.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")}}),M.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),M.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),M.defineLocale("en-il",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")}}),M.defineLocale("en-in",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:0,doy:6}}),M.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),M.defineLocale("en-sg",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),M.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_a\u016dgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mart_apr_maj_jun_jul_a\u016dg_sept_okt_nov_dec".split("_"),weekdays:"diman\u0109o_lundo_mardo_merkredo_\u0135a\u016ddo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_\u0135a\u016d_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_\u0135a_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"[la] D[-an de] MMMM, YYYY",LLL:"[la] D[-an de] MMMM, YYYY HH:mm",LLLL:"dddd[n], [la] D[-an de] MMMM, YYYY HH:mm",llll:"ddd, [la] D[-an de] MMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(e){return"p"===e.charAt(0).toLowerCase()},meridiem:function(e,a,t){return 11<e?t?"p.t.m.":"P.T.M.":t?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodia\u016d je] LT",nextDay:"[Morga\u016d je] LT",nextWeek:"dddd[n je] LT",lastDay:"[Hiera\u016d je] LT",lastWeek:"[pasintan] dddd[n je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"anta\u016d %s",s:"kelkaj sekundoj",ss:"%d sekundoj",m:"unu minuto",mm:"%d minutoj",h:"unu horo",hh:"%d horoj",d:"unu tago",dd:"%d tagoj",M:"unu monato",MM:"%d monatoj",y:"unu jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}});var _s="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),os="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],Ht=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,ms=(M.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?(/-MMM-/.test(a)?os:_s)[e.month()]:_s},monthsRegex:Ht,monthsShortRegex:Ht,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_")),us="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),vt=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],jt=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,ls=(M.defineLocale("es-mx",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?(/-MMM-/.test(a)?us:ms)[e.month()]:ms},monthsRegex:jt,monthsShortRegex:jt,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:vt,longMonthsParse:vt,shortMonthsParse:vt,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:0,doy:4},invalidDate:"Fecha inv\xe1lida"}),"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_")),Ms="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),x=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],na=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,hs=(M.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?(/-MMM-/.test(a)?Ms:ls)[e.month()]:ls},monthsRegex:na,monthsShortRegex:na,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:x,longMonthsParse:x,shortMonthsParse:x,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:0,doy:6}}),"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_")),cs="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),ge=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],n=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;function Ls(e,a,t,s){e={s:["m\xf5ne sekundi","m\xf5ni sekund","paar sekundit"],ss:[e+"sekundi",e+"sekundit"],m:["\xfche minuti","\xfcks minut"],mm:[e+" minuti",e+" minutit"],h:["\xfche tunni","tund aega","\xfcks tund"],hh:[e+" tunni",e+" tundi"],d:["\xfche p\xe4eva","\xfcks p\xe4ev"],M:["kuu aja","kuu aega","\xfcks kuu"],MM:[e+" kuu",e+" kuud"],y:["\xfche aasta","aasta","\xfcks aasta"],yy:[e+" aasta",e+" aastat"]};return a?e[t][2]||e[t][1]:s?e[t][0]:e[t][1]}M.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?(/-MMM-/.test(a)?cs:hs)[e.month()]:hs},monthsRegex:n,monthsShortRegex:n,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:ge,longMonthsParse:ge,shortMonthsParse:ge,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4},invalidDate:"Fecha inv\xe1lida"}),M.defineLocale("et",{months:"jaanuar_veebruar_m\xe4rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_m\xe4rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"p\xfchap\xe4ev_esmasp\xe4ev_teisip\xe4ev_kolmap\xe4ev_neljap\xe4ev_reede_laup\xe4ev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[T\xe4na,] LT",nextDay:"[Homme,] LT",nextWeek:"[J\xe4rgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s p\xe4rast",past:"%s tagasi",s:Ls,ss:Ls,m:Ls,mm:Ls,h:Ls,hh:Ls,d:Ls,dd:"%d p\xe4eva",M:Ls,MM:Ls,y:Ls,yy:Ls},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});var Ys={1:"\u06f1",2:"\u06f2",3:"\u06f3",4:"\u06f4",5:"\u06f5",6:"\u06f6",7:"\u06f7",8:"\u06f8",9:"\u06f9",0:"\u06f0"},ys={"\u06f1":"1","\u06f2":"2","\u06f3":"3","\u06f4":"4","\u06f5":"5","\u06f6":"6","\u06f7":"7","\u06f8":"8","\u06f9":"9","\u06f0":"0"},fs=(M.defineLocale("fa",{months:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),monthsShort:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),weekdays:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysShort:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysMin:"\u06cc_\u062f_\u0633_\u0686_\u067e_\u062c_\u0634".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631|\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631/,isPM:function(e){return/\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631/.test(e)},meridiem:function(e,a,t){return e<12?"\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631":"\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631"},calendar:{sameDay:"[\u0627\u0645\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",nextDay:"[\u0641\u0631\u062f\u0627 \u0633\u0627\u0639\u062a] LT",nextWeek:"dddd [\u0633\u0627\u0639\u062a] LT",lastDay:"[\u062f\u06cc\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",lastWeek:"dddd [\u067e\u06cc\u0634] [\u0633\u0627\u0639\u062a] LT",sameElse:"L"},relativeTime:{future:"\u062f\u0631 %s",past:"%s \u067e\u06cc\u0634",s:"\u0686\u0646\u062f \u062b\u0627\u0646\u06cc\u0647",ss:"%d \u062b\u0627\u0646\u06cc\u0647",m:"\u06cc\u06a9 \u062f\u0642\u06cc\u0642\u0647",mm:"%d \u062f\u0642\u06cc\u0642\u0647",h:"\u06cc\u06a9 \u0633\u0627\u0639\u062a",hh:"%d \u0633\u0627\u0639\u062a",d:"\u06cc\u06a9 \u0631\u0648\u0632",dd:"%d \u0631\u0648\u0632",M:"\u06cc\u06a9 \u0645\u0627\u0647",MM:"%d \u0645\u0627\u0647",y:"\u06cc\u06a9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/[\u06f0-\u06f9]/g,function(e){return ys[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return Ys[e]}).replace(/,/g,"\u060c")},dayOfMonthOrdinalParse:/\d{1,2}\u0645/,ordinal:"%d\u0645",week:{dow:6,doy:12}}),"nolla yksi kaksi kolme nelj\xe4 viisi kuusi seitsem\xe4n kahdeksan yhdeks\xe4n".split(" ")),ps=["nolla","yhden","kahden","kolmen","nelj\xe4n","viiden","kuuden",fs[7],fs[8],fs[9]];function O(e,a,t,s){var n="";switch(t){case"s":return s?"muutaman sekunnin":"muutama sekunti";case"ss":n=s?"sekunnin":"sekuntia";break;case"m":return s?"minuutin":"minuutti";case"mm":n=s?"minuutin":"minuuttia";break;case"h":return s?"tunnin":"tunti";case"hh":n=s?"tunnin":"tuntia";break;case"d":return s?"p\xe4iv\xe4n":"p\xe4iv\xe4";case"dd":n=s?"p\xe4iv\xe4n":"p\xe4iv\xe4\xe4";break;case"M":return s?"kuukauden":"kuukausi";case"MM":n=s?"kuukauden":"kuukautta";break;case"y":return s?"vuoden":"vuosi";case"yy":n=s?"vuoden":"vuotta";break}return t=s,n=((e=e)<10?(t?ps:fs)[e]:e)+" "+n}M.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kes\xe4kuu_hein\xe4kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kes\xe4_hein\xe4_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[t\xe4n\xe4\xe4n] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s p\xe4\xe4st\xe4",past:"%s sitten",s:O,ss:O,m:O,mm:O,h:O,hh:O,d:O,dd:O,M:O,MM:O,y:O,yy:O},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("fil",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}}),M.defineLocale("fo",{months:"januar_februar_mars_apr\xedl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_m\xe1nadagur_t\xfdsdagur_mikudagur_h\xf3sdagur_fr\xedggjadagur_leygardagur".split("_"),weekdaysShort:"sun_m\xe1n_t\xfds_mik_h\xf3s_fr\xed_ley".split("_"),weekdaysMin:"su_m\xe1_t\xfd_mi_h\xf3_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[\xcd dag kl.] LT",nextDay:"[\xcd morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[\xcd gj\xe1r kl.] LT",lastWeek:"[s\xed\xf0stu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s s\xed\xf0ani",s:"f\xe1 sekund",ss:"%d sekundir",m:"ein minuttur",mm:"%d minuttir",h:"ein t\xedmi",hh:"%d t\xedmar",d:"ein dagur",dd:"%d dagar",M:"ein m\xe1na\xf0ur",MM:"%d m\xe1na\xf0ir",y:"eitt \xe1r",yy:"%d \xe1r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("fr-ca",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}}}),M.defineLocale("fr-ch",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}});var De=/(janv\.?|f\xe9vr\.?|mars|avr\.?|mai|juin|juil\.?|ao\xfbt|sept\.?|oct\.?|nov\.?|d\xe9c\.?|janvier|f\xe9vrier|mars|avril|mai|juin|juillet|ao\xfbt|septembre|octobre|novembre|d\xe9cembre)/i,pe=[/^janv/i,/^f\xe9vr/i,/^mars/i,/^avr/i,/^mai/i,/^juin/i,/^juil/i,/^ao\xfbt/i,/^sept/i,/^oct/i,/^nov/i,/^d\xe9c/i],ks=(M.defineLocale("fr",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsRegex:De,monthsShortRegex:De,monthsStrictRegex:/^(janvier|f\xe9vrier|mars|avril|mai|juin|juillet|ao\xfbt|septembre|octobre|novembre|d\xe9cembre)/i,monthsShortStrictRegex:/(janv\.?|f\xe9vr\.?|mars|avr\.?|mai|juin|juil\.?|ao\xfbt|sept\.?|oct\.?|nov\.?|d\xe9c\.?)/i,monthsParse:pe,longMonthsParse:pe,shortMonthsParse:pe,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",w:"une semaine",ww:"%d semaines",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(e,a){switch(a){case"D":return e+(1===e?"er":"");default:case"M":case"Q":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}}),"jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_")),Ds="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");M.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(e,a){return e?(/-MMM-/.test(a)?Ds:ks)[e.month()]:ks},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[\xf4fr\xfbne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",ss:"%d sekonden",m:"ien min\xfat",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}}),M.defineLocale("ga",{months:["Ean\xe1ir","Feabhra","M\xe1rta","Aibre\xe1n","Bealtaine","Meitheamh","I\xfail","L\xfanasa","Me\xe1n F\xf3mhair","Deireadh F\xf3mhair","Samhain","Nollaig"],monthsShort:["Ean","Feabh","M\xe1rt","Aib","Beal","Meith","I\xfail","L\xfan","M.F.","D.F.","Samh","Noll"],monthsParseExact:!0,weekdays:["D\xe9 Domhnaigh","D\xe9 Luain","D\xe9 M\xe1irt","D\xe9 C\xe9adaoin","D\xe9ardaoin","D\xe9 hAoine","D\xe9 Sathairn"],weekdaysShort:["Domh","Luan","M\xe1irt","C\xe9ad","D\xe9ar","Aoine","Sath"],weekdaysMin:["Do","Lu","M\xe1","C\xe9","D\xe9","A","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Inniu ag] LT",nextDay:"[Am\xe1rach ag] LT",nextWeek:"dddd [ag] LT",lastDay:"[Inn\xe9 ag] LT",lastWeek:"dddd [seo caite] [ag] LT",sameElse:"L"},relativeTime:{future:"i %s",past:"%s \xf3 shin",s:"c\xfapla soicind",ss:"%d soicind",m:"n\xf3im\xe9ad",mm:"%d n\xf3im\xe9ad",h:"uair an chloig",hh:"%d uair an chloig",d:"l\xe1",dd:"%d l\xe1",M:"m\xed",MM:"%d m\xedonna",y:"bliain",yy:"%d bliain"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}});function Ts(e,a,t,s){e={s:["\u0925\u094b\u0921\u092f\u093e \u0938\u0945\u0915\u0902\u0921\u093e\u0902\u0928\u0940","\u0925\u094b\u0921\u0947 \u0938\u0945\u0915\u0902\u0921"],ss:[e+" \u0938\u0945\u0915\u0902\u0921\u093e\u0902\u0928\u0940",e+" \u0938\u0945\u0915\u0902\u0921"],m:["\u090f\u0915\u093e \u092e\u093f\u0923\u091f\u093e\u0928","\u090f\u0915 \u092e\u093f\u0928\u0942\u091f"],mm:[e+" \u092e\u093f\u0923\u091f\u093e\u0902\u0928\u0940",e+" \u092e\u093f\u0923\u091f\u093e\u0902"],h:["\u090f\u0915\u093e \u0935\u0930\u093e\u0928","\u090f\u0915 \u0935\u0930"],hh:[e+" \u0935\u0930\u093e\u0902\u0928\u0940",e+" \u0935\u0930\u093e\u0902"],d:["\u090f\u0915\u093e \u0926\u093f\u0938\u093e\u0928","\u090f\u0915 \u0926\u0940\u0938"],dd:[e+" \u0926\u093f\u0938\u093e\u0902\u0928\u0940",e+" \u0926\u0940\u0938"],M:["\u090f\u0915\u093e \u092e\u094d\u0939\u092f\u0928\u094d\u092f\u093e\u0928","\u090f\u0915 \u092e\u094d\u0939\u092f\u0928\u094b"],MM:[e+" \u092e\u094d\u0939\u092f\u0928\u094d\u092f\u093e\u0928\u0940",e+" \u092e\u094d\u0939\u092f\u0928\u0947"],y:["\u090f\u0915\u093e \u0935\u0930\u094d\u0938\u093e\u0928","\u090f\u0915 \u0935\u0930\u094d\u0938"],yy:[e+" \u0935\u0930\u094d\u0938\u093e\u0902\u0928\u0940",e+" \u0935\u0930\u094d\u0938\u093e\u0902"]};return s?e[t][0]:e[t][1]}function gs(e,a,t,s){e={s:["thoddea sekondamni","thodde sekond"],ss:[e+" sekondamni",e+" sekond"],m:["eka mintan","ek minut"],mm:[e+" mintamni",e+" mintam"],h:["eka voran","ek vor"],hh:[e+" voramni",e+" voram"],d:["eka disan","ek dis"],dd:[e+" disamni",e+" dis"],M:["eka mhoinean","ek mhoino"],MM:[e+" mhoineamni",e+" mhoine"],y:["eka vorsan","ek voros"],yy:[e+" vorsamni",e+" vorsam"]};return s?e[t][0]:e[t][1]}M.defineLocale("gd",{months:["Am Faoilleach","An Gearran","Am M\xe0rt","An Giblean","An C\xe8itean","An t-\xd2gmhios","An t-Iuchar","An L\xf9nastal","An t-Sultain","An D\xe0mhair","An t-Samhain","An D\xf9bhlachd"],monthsShort:["Faoi","Gear","M\xe0rt","Gibl","C\xe8it","\xd2gmh","Iuch","L\xf9n","Sult","D\xe0mh","Samh","D\xf9bh"],monthsParseExact:!0,weekdays:["Did\xf2mhnaich","Diluain","Dim\xe0irt","Diciadain","Diardaoin","Dihaoine","Disathairne"],weekdaysShort:["Did","Dil","Dim","Dic","Dia","Dih","Dis"],weekdaysMin:["D\xf2","Lu","M\xe0","Ci","Ar","Ha","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-m\xe0ireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-d\xe8 aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",ss:"%d diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"m\xecos",MM:"%d m\xecosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}}),M.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xu\xf1o_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xu\xf1._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_m\xe9rcores_xoves_venres_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._m\xe9r._xov._ven._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_m\xe9_xo_ve_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"\xe1s":"\xe1")+"] LT"},nextDay:function(){return"[ma\xf1\xe1 "+(1!==this.hours()?"\xe1s":"\xe1")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"\xe1s":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"\xe1":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"\xe1s":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(e){return 0===e.indexOf("un")?"n"+e:"en "+e},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),M.defineLocale("gom-deva",{months:{standalone:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u0940\u0932_\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932\u092f_\u0911\u0917\u0938\u094d\u091f_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930_\u0911\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930_\u0921\u093f\u0938\u0947\u0902\u092c\u0930".split("_"),format:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940\u091a\u094d\u092f\u093e_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940\u091a\u094d\u092f\u093e_\u092e\u093e\u0930\u094d\u091a\u093e\u091a\u094d\u092f\u093e_\u090f\u092a\u094d\u0930\u0940\u0932\u093e\u091a\u094d\u092f\u093e_\u092e\u0947\u092f\u093e\u091a\u094d\u092f\u093e_\u091c\u0942\u0928\u093e\u091a\u094d\u092f\u093e_\u091c\u0941\u0932\u092f\u093e\u091a\u094d\u092f\u093e_\u0911\u0917\u0938\u094d\u091f\u093e\u091a\u094d\u092f\u093e_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0911\u0915\u094d\u091f\u094b\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0921\u093f\u0938\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"\u091c\u093e\u0928\u0947._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u0940._\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932._\u0911\u0917._\u0938\u092a\u094d\u091f\u0947\u0902._\u0911\u0915\u094d\u091f\u094b._\u0928\u094b\u0935\u094d\u0939\u0947\u0902._\u0921\u093f\u0938\u0947\u0902.".split("_"),monthsParseExact:!0,weekdays:"\u0906\u092f\u0924\u093e\u0930_\u0938\u094b\u092e\u093e\u0930_\u092e\u0902\u0917\u0933\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u092c\u093f\u0930\u0947\u0938\u094d\u0924\u093e\u0930_\u0938\u0941\u0915\u094d\u0930\u093e\u0930_\u0936\u0947\u0928\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0906\u092f\u0924._\u0938\u094b\u092e._\u092e\u0902\u0917\u0933._\u092c\u0941\u0927._\u092c\u094d\u0930\u0947\u0938\u094d\u0924._\u0938\u0941\u0915\u094d\u0930._\u0936\u0947\u0928.".split("_"),weekdaysMin:"\u0906_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u092c\u094d\u0930\u0947_\u0938\u0941_\u0936\u0947".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",LTS:"A h:mm:ss [\u0935\u093e\u091c\u0924\u093e\u0902]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",llll:"ddd, D MMM YYYY, A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]"},calendar:{sameDay:"[\u0906\u092f\u091c] LT",nextDay:"[\u092b\u093e\u0932\u094d\u092f\u093e\u0902] LT",nextWeek:"[\u092b\u0941\u0921\u0932\u094b] dddd[,] LT",lastDay:"[\u0915\u093e\u0932] LT",lastWeek:"[\u092b\u093e\u091f\u0932\u094b] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s \u0906\u0926\u0940\u0902",s:Ts,ss:Ts,m:Ts,mm:Ts,h:Ts,hh:Ts,d:Ts,dd:Ts,M:Ts,MM:Ts,y:Ts,yy:Ts},dayOfMonthOrdinalParse:/\d{1,2}(\u0935\u0947\u0930)/,ordinal:function(e,a){switch(a){case"D":return e+"\u0935\u0947\u0930";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return e}},week:{dow:0,doy:3},meridiemParse:/\u0930\u093e\u0924\u0940|\u0938\u0915\u093e\u0933\u0940\u0902|\u0926\u0928\u092a\u093e\u0930\u093e\u0902|\u0938\u093e\u0902\u091c\u0947/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0930\u093e\u0924\u0940"===a?e<4?e:e+12:"\u0938\u0915\u093e\u0933\u0940\u0902"===a?e:"\u0926\u0928\u092a\u093e\u0930\u093e\u0902"===a?12<e?e:e+12:"\u0938\u093e\u0902\u091c\u0947"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0930\u093e\u0924\u0940":e<12?"\u0938\u0915\u093e\u0933\u0940\u0902":e<16?"\u0926\u0928\u092a\u093e\u0930\u093e\u0902":e<20?"\u0938\u093e\u0902\u091c\u0947":"\u0930\u093e\u0924\u0940"}}),M.defineLocale("gom-latn",{months:{standalone:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),format:"Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Fuddlo] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fattlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:gs,ss:gs,m:gs,mm:gs,h:gs,hh:gs,d:gs,dd:gs,M:gs,MM:gs,y:gs,yy:gs},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(e,a){switch(a){case"D":return e+"er";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return e}},week:{dow:0,doy:3},meridiemParse:/rati|sokallim|donparam|sanje/,meridiemHour:function(e,a){return 12===e&&(e=0),"rati"===a?e<4?e:e+12:"sokallim"===a?e:"donparam"===a?12<e?e:e+12:"sanje"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"rati":e<12?"sokallim":e<16?"donparam":e<20?"sanje":"rati"}});var ws={1:"\u0ae7",2:"\u0ae8",3:"\u0ae9",4:"\u0aea",5:"\u0aeb",6:"\u0aec",7:"\u0aed",8:"\u0aee",9:"\u0aef",0:"\u0ae6"},bs={"\u0ae7":"1","\u0ae8":"2","\u0ae9":"3","\u0aea":"4","\u0aeb":"5","\u0aec":"6","\u0aed":"7","\u0aee":"8","\u0aef":"9","\u0ae6":"0"},Ss=(M.defineLocale("gu",{months:"\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0_\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0_\u0aae\u0abe\u0ab0\u0acd\u0a9a_\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2_\u0aae\u0ac7_\u0a9c\u0ac2\u0aa8_\u0a9c\u0ac1\u0ab2\u0abe\u0a88_\u0a91\u0a97\u0ab8\u0acd\u0a9f_\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0_\u0a91\u0a95\u0acd\u0a9f\u0acd\u0aac\u0ab0_\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0_\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0".split("_"),monthsShort:"\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1._\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1._\u0aae\u0abe\u0ab0\u0acd\u0a9a_\u0a8f\u0aaa\u0acd\u0ab0\u0abf._\u0aae\u0ac7_\u0a9c\u0ac2\u0aa8_\u0a9c\u0ac1\u0ab2\u0abe._\u0a91\u0a97._\u0ab8\u0aaa\u0acd\u0a9f\u0ac7._\u0a91\u0a95\u0acd\u0a9f\u0acd._\u0aa8\u0ab5\u0ac7._\u0aa1\u0abf\u0ab8\u0ac7.".split("_"),monthsParseExact:!0,weekdays:"\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0_\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0_\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0_\u0aac\u0ac1\u0aa7\u0acd\u0ab5\u0abe\u0ab0_\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0_\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0_\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0".split("_"),weekdaysShort:"\u0ab0\u0ab5\u0abf_\u0ab8\u0acb\u0aae_\u0aae\u0a82\u0a97\u0ab3_\u0aac\u0ac1\u0aa7\u0acd_\u0a97\u0ac1\u0ab0\u0ac1_\u0ab6\u0ac1\u0a95\u0acd\u0ab0_\u0ab6\u0aa8\u0abf".split("_"),weekdaysMin:"\u0ab0_\u0ab8\u0acb_\u0aae\u0a82_\u0aac\u0ac1_\u0a97\u0ac1_\u0ab6\u0ac1_\u0ab6".split("_"),longDateFormat:{LT:"A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",LTS:"A h:mm:ss \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",LLLL:"dddd, D MMMM YYYY, A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7"},calendar:{sameDay:"[\u0a86\u0a9c] LT",nextDay:"[\u0a95\u0abe\u0ab2\u0ac7] LT",nextWeek:"dddd, LT",lastDay:"[\u0a97\u0a87\u0a95\u0abe\u0ab2\u0ac7] LT",lastWeek:"[\u0aaa\u0abe\u0a9b\u0ab2\u0abe] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0aae\u0abe",past:"%s \u0aaa\u0ab9\u0ac7\u0ab2\u0abe",s:"\u0a85\u0aae\u0ac1\u0a95 \u0aaa\u0ab3\u0acb",ss:"%d \u0ab8\u0ac7\u0a95\u0a82\u0aa1",m:"\u0a8f\u0a95 \u0aae\u0abf\u0aa8\u0abf\u0a9f",mm:"%d \u0aae\u0abf\u0aa8\u0abf\u0a9f",h:"\u0a8f\u0a95 \u0a95\u0ab2\u0abe\u0a95",hh:"%d \u0a95\u0ab2\u0abe\u0a95",d:"\u0a8f\u0a95 \u0aa6\u0abf\u0ab5\u0ab8",dd:"%d \u0aa6\u0abf\u0ab5\u0ab8",M:"\u0a8f\u0a95 \u0aae\u0ab9\u0abf\u0aa8\u0acb",MM:"%d \u0aae\u0ab9\u0abf\u0aa8\u0acb",y:"\u0a8f\u0a95 \u0ab5\u0ab0\u0acd\u0ab7",yy:"%d \u0ab5\u0ab0\u0acd\u0ab7"},preparse:function(e){return e.replace(/[\u0ae7\u0ae8\u0ae9\u0aea\u0aeb\u0aec\u0aed\u0aee\u0aef\u0ae6]/g,function(e){return bs[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return ws[e]})},meridiemParse:/\u0ab0\u0abe\u0aa4|\u0aac\u0aaa\u0acb\u0ab0|\u0ab8\u0ab5\u0abe\u0ab0|\u0ab8\u0abe\u0a82\u0a9c/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0ab0\u0abe\u0aa4"===a?e<4?e:e+12:"\u0ab8\u0ab5\u0abe\u0ab0"===a?e:"\u0aac\u0aaa\u0acb\u0ab0"===a?10<=e?e:e+12:"\u0ab8\u0abe\u0a82\u0a9c"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0ab0\u0abe\u0aa4":e<10?"\u0ab8\u0ab5\u0abe\u0ab0":e<17?"\u0aac\u0aaa\u0acb\u0ab0":e<20?"\u0ab8\u0abe\u0a82\u0a9c":"\u0ab0\u0abe\u0aa4"},week:{dow:0,doy:6}}),M.defineLocale("he",{months:"\u05d9\u05e0\u05d5\u05d0\u05e8_\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8_\u05de\u05e8\u05e5_\u05d0\u05e4\u05e8\u05d9\u05dc_\u05de\u05d0\u05d9_\u05d9\u05d5\u05e0\u05d9_\u05d9\u05d5\u05dc\u05d9_\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8_\u05e1\u05e4\u05d8\u05de\u05d1\u05e8_\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8_\u05e0\u05d5\u05d1\u05de\u05d1\u05e8_\u05d3\u05e6\u05de\u05d1\u05e8".split("_"),monthsShort:"\u05d9\u05e0\u05d5\u05f3_\u05e4\u05d1\u05e8\u05f3_\u05de\u05e8\u05e5_\u05d0\u05e4\u05e8\u05f3_\u05de\u05d0\u05d9_\u05d9\u05d5\u05e0\u05d9_\u05d9\u05d5\u05dc\u05d9_\u05d0\u05d5\u05d2\u05f3_\u05e1\u05e4\u05d8\u05f3_\u05d0\u05d5\u05e7\u05f3_\u05e0\u05d5\u05d1\u05f3_\u05d3\u05e6\u05de\u05f3".split("_"),weekdays:"\u05e8\u05d0\u05e9\u05d5\u05df_\u05e9\u05e0\u05d9_\u05e9\u05dc\u05d9\u05e9\u05d9_\u05e8\u05d1\u05d9\u05e2\u05d9_\u05d7\u05de\u05d9\u05e9\u05d9_\u05e9\u05d9\u05e9\u05d9_\u05e9\u05d1\u05ea".split("_"),weekdaysShort:"\u05d0\u05f3_\u05d1\u05f3_\u05d2\u05f3_\u05d3\u05f3_\u05d4\u05f3_\u05d5\u05f3_\u05e9\u05f3".split("_"),weekdaysMin:"\u05d0_\u05d1_\u05d2_\u05d3_\u05d4_\u05d5_\u05e9".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [\u05d1]MMMM YYYY",LLL:"D [\u05d1]MMMM YYYY HH:mm",LLLL:"dddd, D [\u05d1]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[\u05d4\u05d9\u05d5\u05dd \u05d1\u05be]LT",nextDay:"[\u05de\u05d7\u05e8 \u05d1\u05be]LT",nextWeek:"dddd [\u05d1\u05e9\u05e2\u05d4] LT",lastDay:"[\u05d0\u05ea\u05de\u05d5\u05dc \u05d1\u05be]LT",lastWeek:"[\u05d1\u05d9\u05d5\u05dd] dddd [\u05d4\u05d0\u05d7\u05e8\u05d5\u05df \u05d1\u05e9\u05e2\u05d4] LT",sameElse:"L"},relativeTime:{future:"\u05d1\u05e2\u05d5\u05d3 %s",past:"\u05dc\u05e4\u05e0\u05d9 %s",s:"\u05de\u05e1\u05e4\u05e8 \u05e9\u05e0\u05d9\u05d5\u05ea",ss:"%d \u05e9\u05e0\u05d9\u05d5\u05ea",m:"\u05d3\u05e7\u05d4",mm:"%d \u05d3\u05e7\u05d5\u05ea",h:"\u05e9\u05e2\u05d4",hh:function(e){return 2===e?"\u05e9\u05e2\u05ea\u05d9\u05d9\u05dd":e+" \u05e9\u05e2\u05d5\u05ea"},d:"\u05d9\u05d5\u05dd",dd:function(e){return 2===e?"\u05d9\u05d5\u05de\u05d9\u05d9\u05dd":e+" \u05d9\u05de\u05d9\u05dd"},M:"\u05d7\u05d5\u05d3\u05e9",MM:function(e){return 2===e?"\u05d7\u05d5\u05d3\u05e9\u05d9\u05d9\u05dd":e+" \u05d7\u05d5\u05d3\u05e9\u05d9\u05dd"},y:"\u05e9\u05e0\u05d4",yy:function(e){return 2===e?"\u05e9\u05e0\u05ea\u05d9\u05d9\u05dd":e%10==0&&10!==e?e+" \u05e9\u05e0\u05d4":e+" \u05e9\u05e0\u05d9\u05dd"}},meridiemParse:/\u05d0\u05d7\u05d4"\u05e6|\u05dc\u05e4\u05e0\u05d4"\u05e6|\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05dc\u05e4\u05e0\u05d5\u05ea \u05d1\u05d5\u05e7\u05e8|\u05d1\u05d1\u05d5\u05e7\u05e8|\u05d1\u05e2\u05e8\u05d1/i,isPM:function(e){return/^(\u05d0\u05d7\u05d4"\u05e6|\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05d1\u05e2\u05e8\u05d1)$/.test(e)},meridiem:function(e,a,t){return e<5?"\u05dc\u05e4\u05e0\u05d5\u05ea \u05d1\u05d5\u05e7\u05e8":e<10?"\u05d1\u05d1\u05d5\u05e7\u05e8":e<12?t?'\u05dc\u05e4\u05e0\u05d4"\u05e6':"\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd":e<18?t?'\u05d0\u05d7\u05d4"\u05e6':"\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd":"\u05d1\u05e2\u05e8\u05d1"}}),{1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"}),Hs={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"},Ne=[/^\u091c\u0928/i,/^\u092b\u093c\u0930|\u092b\u0930/i,/^\u092e\u093e\u0930\u094d\u091a/i,/^\u0905\u092a\u094d\u0930\u0948/i,/^\u092e\u0908/i,/^\u091c\u0942\u0928/i,/^\u091c\u0941\u0932/i,/^\u0905\u0917/i,/^\u0938\u093f\u0924\u0902|\u0938\u093f\u0924/i,/^\u0905\u0915\u094d\u091f\u0942/i,/^\u0928\u0935|\u0928\u0935\u0902/i,/^\u0926\u093f\u0938\u0902|\u0926\u093f\u0938/i];function vs(e,a,t){var s=e+" ";switch(t){case"ss":return s+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return a?"jedna minuta":"jedne minute";case"mm":return s+=1!==e&&(2===e||3===e||4===e)?"minute":"minuta";case"h":return a?"jedan sat":"jednog sata";case"hh":return s+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return s+=1===e?"dan":"dana";case"MM":return s+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return s+=1!==e&&(2===e||3===e||4===e)?"godine":"godina"}}M.defineLocale("hi",{months:{format:"\u091c\u0928\u0935\u0930\u0940_\u092b\u093c\u0930\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948\u0932_\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0938\u094d\u0924_\u0938\u093f\u0924\u092e\u094d\u092c\u0930_\u0905\u0915\u094d\u091f\u0942\u092c\u0930_\u0928\u0935\u092e\u094d\u092c\u0930_\u0926\u093f\u0938\u092e\u094d\u092c\u0930".split("_"),standalone:"\u091c\u0928\u0935\u0930\u0940_\u092b\u0930\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948\u0932_\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0938\u094d\u0924_\u0938\u093f\u0924\u0902\u092c\u0930_\u0905\u0915\u094d\u091f\u0942\u092c\u0930_\u0928\u0935\u0902\u092c\u0930_\u0926\u093f\u0938\u0902\u092c\u0930".split("_")},monthsShort:"\u091c\u0928._\u092b\u093c\u0930._\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948._\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932._\u0905\u0917._\u0938\u093f\u0924._\u0905\u0915\u094d\u091f\u0942._\u0928\u0935._\u0926\u093f\u0938.".split("_"),weekdays:"\u0930\u0935\u093f\u0935\u093e\u0930_\u0938\u094b\u092e\u0935\u093e\u0930_\u092e\u0902\u0917\u0932\u0935\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u0917\u0941\u0930\u0942\u0935\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930_\u0936\u0928\u093f\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093f_\u0938\u094b\u092e_\u092e\u0902\u0917\u0932_\u092c\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094d\u0930_\u0936\u0928\u093f".split("_"),weekdaysMin:"\u0930_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),longDateFormat:{LT:"A h:mm \u092c\u091c\u0947",LTS:"A h:mm:ss \u092c\u091c\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u092c\u091c\u0947",LLLL:"dddd, D MMMM YYYY, A h:mm \u092c\u091c\u0947"},monthsParse:Ne,longMonthsParse:Ne,shortMonthsParse:[/^\u091c\u0928/i,/^\u092b\u093c\u0930/i,/^\u092e\u093e\u0930\u094d\u091a/i,/^\u0905\u092a\u094d\u0930\u0948/i,/^\u092e\u0908/i,/^\u091c\u0942\u0928/i,/^\u091c\u0941\u0932/i,/^\u0905\u0917/i,/^\u0938\u093f\u0924/i,/^\u0905\u0915\u094d\u091f\u0942/i,/^\u0928\u0935/i,/^\u0926\u093f\u0938/i],monthsRegex:/^(\u091c\u0928\u0935\u0930\u0940|\u091c\u0928\.?|\u092b\u093c\u0930\u0935\u0930\u0940|\u092b\u0930\u0935\u0930\u0940|\u092b\u093c\u0930\.?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\u0932|\u0905\u092a\u094d\u0930\u0948\.?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\u093e\u0908|\u091c\u0941\u0932\.?|\u0905\u0917\u0938\u094d\u0924|\u0905\u0917\.?|\u0938\u093f\u0924\u092e\u094d\u092c\u0930|\u0938\u093f\u0924\u0902\u092c\u0930|\u0938\u093f\u0924\.?|\u0905\u0915\u094d\u091f\u0942\u092c\u0930|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\u092e\u094d\u092c\u0930|\u0928\u0935\u0902\u092c\u0930|\u0928\u0935\.?|\u0926\u093f\u0938\u092e\u094d\u092c\u0930|\u0926\u093f\u0938\u0902\u092c\u0930|\u0926\u093f\u0938\.?)/i,monthsShortRegex:/^(\u091c\u0928\u0935\u0930\u0940|\u091c\u0928\.?|\u092b\u093c\u0930\u0935\u0930\u0940|\u092b\u0930\u0935\u0930\u0940|\u092b\u093c\u0930\.?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\u0932|\u0905\u092a\u094d\u0930\u0948\.?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\u093e\u0908|\u091c\u0941\u0932\.?|\u0905\u0917\u0938\u094d\u0924|\u0905\u0917\.?|\u0938\u093f\u0924\u092e\u094d\u092c\u0930|\u0938\u093f\u0924\u0902\u092c\u0930|\u0938\u093f\u0924\.?|\u0905\u0915\u094d\u091f\u0942\u092c\u0930|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\u092e\u094d\u092c\u0930|\u0928\u0935\u0902\u092c\u0930|\u0928\u0935\.?|\u0926\u093f\u0938\u092e\u094d\u092c\u0930|\u0926\u093f\u0938\u0902\u092c\u0930|\u0926\u093f\u0938\.?)/i,monthsStrictRegex:/^(\u091c\u0928\u0935\u0930\u0940?|\u092b\u093c\u0930\u0935\u0930\u0940|\u092b\u0930\u0935\u0930\u0940?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\u0932?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\u093e\u0908?|\u0905\u0917\u0938\u094d\u0924?|\u0938\u093f\u0924\u092e\u094d\u092c\u0930|\u0938\u093f\u0924\u0902\u092c\u0930|\u0938\u093f\u0924?\.?|\u0905\u0915\u094d\u091f\u0942\u092c\u0930|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\u092e\u094d\u092c\u0930|\u0928\u0935\u0902\u092c\u0930?|\u0926\u093f\u0938\u092e\u094d\u092c\u0930|\u0926\u093f\u0938\u0902\u092c\u0930?)/i,monthsShortStrictRegex:/^(\u091c\u0928\.?|\u092b\u093c\u0930\.?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\.?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\.?|\u0905\u0917\.?|\u0938\u093f\u0924\.?|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\.?|\u0926\u093f\u0938\.?)/i,calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u0915\u0932] LT",nextWeek:"dddd, LT",lastDay:"[\u0915\u0932] LT",lastWeek:"[\u092a\u093f\u091b\u0932\u0947] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u092e\u0947\u0902",past:"%s \u092a\u0939\u0932\u0947",s:"\u0915\u0941\u091b \u0939\u0940 \u0915\u094d\u0937\u0923",ss:"%d \u0938\u0947\u0915\u0902\u0921",m:"\u090f\u0915 \u092e\u093f\u0928\u091f",mm:"%d \u092e\u093f\u0928\u091f",h:"\u090f\u0915 \u0918\u0902\u091f\u093e",hh:"%d \u0918\u0902\u091f\u0947",d:"\u090f\u0915 \u0926\u093f\u0928",dd:"%d \u0926\u093f\u0928",M:"\u090f\u0915 \u092e\u0939\u0940\u0928\u0947",MM:"%d \u092e\u0939\u0940\u0928\u0947",y:"\u090f\u0915 \u0935\u0930\u094d\u0937",yy:"%d \u0935\u0930\u094d\u0937"},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return Hs[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Ss[e]})},meridiemParse:/\u0930\u093e\u0924|\u0938\u0941\u092c\u0939|\u0926\u094b\u092a\u0939\u0930|\u0936\u093e\u092e/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0930\u093e\u0924"===a?e<4?e:e+12:"\u0938\u0941\u092c\u0939"===a?e:"\u0926\u094b\u092a\u0939\u0930"===a?10<=e?e:e+12:"\u0936\u093e\u092e"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0930\u093e\u0924":e<10?"\u0938\u0941\u092c\u0939":e<17?"\u0926\u094b\u092a\u0939\u0930":e<20?"\u0936\u093e\u092e":"\u0930\u093e\u0924"},week:{dow:0,doy:6}}),M.defineLocale("hr",{months:{format:"sije\u010dnja_velja\u010de_o\u017eujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"sije\u010danj_velja\u010da_o\u017eujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._o\u017eu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"Do MMMM YYYY",LLL:"Do MMMM YYYY H:mm",LLLL:"dddd, Do MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010der u] LT",lastWeek:function(){switch(this.day()){case 0:return"[pro\u0161lu] [nedjelju] [u] LT";case 3:return"[pro\u0161lu] [srijedu] [u] LT";case 6:return"[pro\u0161le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[pro\u0161li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:vs,m:vs,mm:vs,h:vs,hh:vs,d:"dan",dd:vs,M:"mjesec",MM:vs,y:"godinu",yy:vs},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});var js="vas\xe1rnap h\xe9tf\u0151n kedden szerd\xe1n cs\xfct\xf6rt\xf6k\xf6n p\xe9nteken szombaton".split(" ");function xs(e,a,t,s){var n=e;switch(t){case"s":return s||a?"n\xe9h\xe1ny m\xe1sodperc":"n\xe9h\xe1ny m\xe1sodperce";case"ss":return n+(s||a)?" m\xe1sodperc":" m\xe1sodperce";case"m":return"egy"+(s||a?" perc":" perce");case"mm":return n+(s||a?" perc":" perce");case"h":return"egy"+(s||a?" \xf3ra":" \xf3r\xe1ja");case"hh":return n+(s||a?" \xf3ra":" \xf3r\xe1ja");case"d":return"egy"+(s||a?" nap":" napja");case"dd":return n+(s||a?" nap":" napja");case"M":return"egy"+(s||a?" h\xf3nap":" h\xf3napja");case"MM":return n+(s||a?" h\xf3nap":" h\xf3napja");case"y":return"egy"+(s||a?" \xe9v":" \xe9ve");case"yy":return n+(s||a?" \xe9v":" \xe9ve")}return""}function Ps(e){return(e?"":"[m\xfalt] ")+"["+js[this.day()]+"] LT[-kor]"}function Os(e){return e%100==11||e%10!=1}function Ws(e,a,t,s){var n=e+" ";switch(t){case"s":return a||s?"nokkrar sek\xfandur":"nokkrum sek\xfandum";case"ss":return Os(e)?n+(a||s?"sek\xfandur":"sek\xfandum"):n+"sek\xfanda";case"m":return a?"m\xedn\xfata":"m\xedn\xfatu";case"mm":return Os(e)?n+(a||s?"m\xedn\xfatur":"m\xedn\xfatum"):a?n+"m\xedn\xfata":n+"m\xedn\xfatu";case"hh":return Os(e)?n+(a||s?"klukkustundir":"klukkustundum"):n+"klukkustund";case"d":return a?"dagur":s?"dag":"degi";case"dd":return Os(e)?a?n+"dagar":n+(s?"daga":"d\xf6gum"):a?n+"dagur":n+(s?"dag":"degi");case"M":return a?"m\xe1nu\xf0ur":s?"m\xe1nu\xf0":"m\xe1nu\xf0i";case"MM":return Os(e)?a?n+"m\xe1nu\xf0ir":n+(s?"m\xe1nu\xf0i":"m\xe1nu\xf0um"):a?n+"m\xe1nu\xf0ur":n+(s?"m\xe1nu\xf0":"m\xe1nu\xf0i");case"y":return a||s?"\xe1r":"\xe1ri";case"yy":return Os(e)?n+(a||s?"\xe1r":"\xe1rum"):n+(a||s?"\xe1r":"\xe1ri")}}M.defineLocale("hu",{months:"janu\xe1r_febru\xe1r_m\xe1rcius_\xe1prilis_m\xe1jus_j\xfanius_j\xfalius_augusztus_szeptember_okt\xf3ber_november_december".split("_"),monthsShort:"jan._feb._m\xe1rc._\xe1pr._m\xe1j._j\xfan._j\xfal._aug._szept._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"vas\xe1rnap_h\xe9tf\u0151_kedd_szerda_cs\xfct\xf6rt\xf6k_p\xe9ntek_szombat".split("_"),weekdaysShort:"vas_h\xe9t_kedd_sze_cs\xfct_p\xe9n_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(e){return"u"===e.charAt(1).toLowerCase()},meridiem:function(e,a,t){return e<12?!0===t?"de":"DE":!0===t?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return Ps.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return Ps.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s m\xfalva",past:"%s",s:xs,ss:xs,m:xs,mm:xs,h:xs,hh:xs,d:xs,dd:xs,M:xs,MM:xs,y:xs,yy:xs},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("hy-am",{months:{format:"\u0570\u0578\u0582\u0576\u057e\u0561\u0580\u056b_\u0583\u0565\u057f\u0580\u057e\u0561\u0580\u056b_\u0574\u0561\u0580\u057f\u056b_\u0561\u057a\u0580\u056b\u056c\u056b_\u0574\u0561\u0575\u056b\u057d\u056b_\u0570\u0578\u0582\u0576\u056b\u057d\u056b_\u0570\u0578\u0582\u056c\u056b\u057d\u056b_\u0585\u0563\u0578\u057d\u057f\u0578\u057d\u056b_\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580\u056b_\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580\u056b_\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b".split("_"),standalone:"\u0570\u0578\u0582\u0576\u057e\u0561\u0580_\u0583\u0565\u057f\u0580\u057e\u0561\u0580_\u0574\u0561\u0580\u057f_\u0561\u057a\u0580\u056b\u056c_\u0574\u0561\u0575\u056b\u057d_\u0570\u0578\u0582\u0576\u056b\u057d_\u0570\u0578\u0582\u056c\u056b\u057d_\u0585\u0563\u0578\u057d\u057f\u0578\u057d_\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580_\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580_\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580".split("_")},monthsShort:"\u0570\u0576\u057e_\u0583\u057f\u0580_\u0574\u0580\u057f_\u0561\u057a\u0580_\u0574\u0575\u057d_\u0570\u0576\u057d_\u0570\u056c\u057d_\u0585\u0563\u057d_\u057d\u057a\u057f_\u0570\u056f\u057f_\u0576\u0574\u0562_\u0564\u056f\u057f".split("_"),weekdays:"\u056f\u056b\u0580\u0561\u056f\u056b_\u0565\u0580\u056f\u0578\u0582\u0577\u0561\u0562\u0569\u056b_\u0565\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b_\u0579\u0578\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b_\u0570\u056b\u0576\u0563\u0577\u0561\u0562\u0569\u056b_\u0578\u0582\u0580\u0562\u0561\u0569_\u0577\u0561\u0562\u0561\u0569".split("_"),weekdaysShort:"\u056f\u0580\u056f_\u0565\u0580\u056f_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),weekdaysMin:"\u056f\u0580\u056f_\u0565\u0580\u056f_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0569.",LLL:"D MMMM YYYY \u0569., HH:mm",LLLL:"dddd, D MMMM YYYY \u0569., HH:mm"},calendar:{sameDay:"[\u0561\u0575\u057d\u0585\u0580] LT",nextDay:"[\u057e\u0561\u0572\u0568] LT",lastDay:"[\u0565\u0580\u0565\u056f] LT",nextWeek:function(){return"dddd [\u0585\u0580\u0568 \u056a\u0561\u0574\u0568] LT"},lastWeek:function(){return"[\u0561\u0576\u0581\u0561\u056e] dddd [\u0585\u0580\u0568 \u056a\u0561\u0574\u0568] LT"},sameElse:"L"},relativeTime:{future:"%s \u0570\u0565\u057f\u0578",past:"%s \u0561\u057c\u0561\u057b",s:"\u0574\u056b \u0584\u0561\u0576\u056b \u057e\u0561\u0575\u0580\u056f\u0575\u0561\u0576",ss:"%d \u057e\u0561\u0575\u0580\u056f\u0575\u0561\u0576",m:"\u0580\u0578\u057a\u0565",mm:"%d \u0580\u0578\u057a\u0565",h:"\u056a\u0561\u0574",hh:"%d \u056a\u0561\u0574",d:"\u0585\u0580",dd:"%d \u0585\u0580",M:"\u0561\u0574\u056b\u057d",MM:"%d \u0561\u0574\u056b\u057d",y:"\u057f\u0561\u0580\u056b",yy:"%d \u057f\u0561\u0580\u056b"},meridiemParse:/\u0563\u056b\u0577\u0565\u0580\u057e\u0561|\u0561\u057c\u0561\u057e\u0578\u057f\u057e\u0561|\u0581\u0565\u0580\u0565\u056f\u057e\u0561|\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576/,isPM:function(e){return/^(\u0581\u0565\u0580\u0565\u056f\u057e\u0561|\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576)$/.test(e)},meridiem:function(e){return e<4?"\u0563\u056b\u0577\u0565\u0580\u057e\u0561":e<12?"\u0561\u057c\u0561\u057e\u0578\u057f\u057e\u0561":e<17?"\u0581\u0565\u0580\u0565\u056f\u057e\u0561":"\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(\u056b\u0576|\u0580\u0564)/,ordinal:function(e,a){switch(a){case"DDD":case"w":case"W":case"DDDo":return 1===e?e+"-\u056b\u0576":e+"-\u0580\u0564";default:return e}},week:{dow:1,doy:7}}),M.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"siang"===a?11<=e?e:e+12:"sore"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"siang":e<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:0,doy:6}}),M.defineLocale("is",{months:"jan\xfaar_febr\xfaar_mars_apr\xedl_ma\xed_j\xfan\xed_j\xfal\xed_\xe1g\xfast_september_okt\xf3ber_n\xf3vember_desember".split("_"),monthsShort:"jan_feb_mar_apr_ma\xed_j\xfan_j\xfal_\xe1g\xfa_sep_okt_n\xf3v_des".split("_"),weekdays:"sunnudagur_m\xe1nudagur_\xferi\xf0judagur_mi\xf0vikudagur_fimmtudagur_f\xf6studagur_laugardagur".split("_"),weekdaysShort:"sun_m\xe1n_\xferi_mi\xf0_fim_f\xf6s_lau".split("_"),weekdaysMin:"Su_M\xe1_\xder_Mi_Fi_F\xf6_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[\xed dag kl.] LT",nextDay:"[\xe1 morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[\xed g\xe6r kl.] LT",lastWeek:"[s\xed\xf0asta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s s\xed\xf0an",s:Ws,ss:Ws,m:Ws,mm:Ws,h:"klukkustund",hh:Ws,d:Ws,dd:Ws,M:Ws,MM:Ws,y:Ws,yy:Ws},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("it-ch",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_luned\xec_marted\xec_mercoled\xec_gioved\xec_venerd\xec_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),M.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_luned\xec_marted\xec_mercoled\xec_gioved\xec_venerd\xec_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:function(){return"[Oggi a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextDay:function(){return"[Domani a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextWeek:function(){return"dddd [a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastDay:function(){return"[Ieri a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastWeek:function(){switch(this.day()){case 0:return"[La scorsa] dddd [a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT";default:return"[Lo scorso] dddd [a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"}},sameElse:"L"},relativeTime:{future:"tra %s",past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",w:"una settimana",ww:"%d settimane",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),M.defineLocale("ja",{eras:[{since:"2019-05-01",offset:1,name:"\u4ee4\u548c",narrow:"\u32ff",abbr:"R"},{since:"1989-01-08",until:"2019-04-30",offset:1,name:"\u5e73\u6210",narrow:"\u337b",abbr:"H"},{since:"1926-12-25",until:"1989-01-07",offset:1,name:"\u662d\u548c",narrow:"\u337c",abbr:"S"},{since:"1912-07-30",until:"1926-12-24",offset:1,name:"\u5927\u6b63",narrow:"\u337d",abbr:"T"},{since:"1873-01-01",until:"1912-07-29",offset:6,name:"\u660e\u6cbb",narrow:"\u337e",abbr:"M"},{since:"0001-01-01",until:"1873-12-31",offset:1,name:"\u897f\u66a6",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"\u7d00\u5143\u524d",narrow:"BC",abbr:"BC"}],eraYearOrdinalRegex:/(\u5143|\d+)\u5e74/,eraYearOrdinalParse:function(e,a){return"\u5143"===a[1]?1:parseInt(a[1]||e,10)},months:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u65e5\u66dc\u65e5_\u6708\u66dc\u65e5_\u706b\u66dc\u65e5_\u6c34\u66dc\u65e5_\u6728\u66dc\u65e5_\u91d1\u66dc\u65e5_\u571f\u66dc\u65e5".split("_"),weekdaysShort:"\u65e5_\u6708_\u706b_\u6c34_\u6728_\u91d1_\u571f".split("_"),weekdaysMin:"\u65e5_\u6708_\u706b_\u6c34_\u6728_\u91d1_\u571f".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5(ddd) HH:mm"},meridiemParse:/\u5348\u524d|\u5348\u5f8c/i,isPM:function(e){return"\u5348\u5f8c"===e},meridiem:function(e,a,t){return e<12?"\u5348\u524d":"\u5348\u5f8c"},calendar:{sameDay:"[\u4eca\u65e5] LT",nextDay:"[\u660e\u65e5] LT",nextWeek:function(e){return e.week()!==this.week()?"[\u6765\u9031]dddd LT":"dddd LT"},lastDay:"[\u6628\u65e5] LT",lastWeek:function(e){return this.week()!==e.week()?"[\u5148\u9031]dddd LT":"dddd LT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}\u65e5/,ordinal:function(e,a){switch(a){case"y":return 1===e?"\u5143\u5e74":e+"\u5e74";case"d":case"D":case"DDD":return e+"\u65e5";default:return e}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u6570\u79d2",ss:"%d\u79d2",m:"1\u5206",mm:"%d\u5206",h:"1\u6642\u9593",hh:"%d\u6642\u9593",d:"1\u65e5",dd:"%d\u65e5",M:"1\u30f6\u6708",MM:"%d\u30f6\u6708",y:"1\u5e74",yy:"%d\u5e74"}}),M.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(e,a){return 12===e&&(e=0),"enjing"===a?e:"siyang"===a?11<=e?e:e+12:"sonten"===a||"ndalu"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"enjing":e<15?"siyang":e<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",ss:"%d detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}}),M.defineLocale("ka",{months:"\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10d8_\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10d8_\u10db\u10d0\u10e0\u10e2\u10d8_\u10d0\u10de\u10e0\u10d8\u10da\u10d8_\u10db\u10d0\u10d8\u10e1\u10d8_\u10d8\u10d5\u10dc\u10d8\u10e1\u10d8_\u10d8\u10d5\u10da\u10d8\u10e1\u10d8_\u10d0\u10d2\u10d5\u10d8\u10e1\u10e2\u10dd_\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10d8_\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10d8_\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10d8_\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10d8".split("_"),monthsShort:"\u10d8\u10d0\u10dc_\u10d7\u10d4\u10d1_\u10db\u10d0\u10e0_\u10d0\u10de\u10e0_\u10db\u10d0\u10d8_\u10d8\u10d5\u10dc_\u10d8\u10d5\u10da_\u10d0\u10d2\u10d5_\u10e1\u10d4\u10e5_\u10dd\u10e5\u10e2_\u10dc\u10dd\u10d4_\u10d3\u10d4\u10d9".split("_"),weekdays:{standalone:"\u10d9\u10d5\u10d8\u10e0\u10d0_\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10d8_\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8".split("_"),format:"\u10d9\u10d5\u10d8\u10e0\u10d0\u10e1_\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10e1_\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1".split("_"),isFormat:/(\u10ec\u10d8\u10dc\u10d0|\u10e8\u10d4\u10db\u10d3\u10d4\u10d2)/},weekdaysShort:"\u10d9\u10d5\u10d8_\u10dd\u10e0\u10e8_\u10e1\u10d0\u10db_\u10dd\u10d7\u10ee_\u10ee\u10e3\u10d7_\u10de\u10d0\u10e0_\u10e8\u10d0\u10d1".split("_"),weekdaysMin:"\u10d9\u10d5_\u10dd\u10e0_\u10e1\u10d0_\u10dd\u10d7_\u10ee\u10e3_\u10de\u10d0_\u10e8\u10d0".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u10d3\u10e6\u10d4\u10e1] LT[-\u10d6\u10d4]",nextDay:"[\u10ee\u10d5\u10d0\u10da] LT[-\u10d6\u10d4]",lastDay:"[\u10d2\u10e3\u10e8\u10d8\u10dc] LT[-\u10d6\u10d4]",nextWeek:"[\u10e8\u10d4\u10db\u10d3\u10d4\u10d2] dddd LT[-\u10d6\u10d4]",lastWeek:"[\u10ec\u10d8\u10dc\u10d0] dddd LT-\u10d6\u10d4",sameElse:"L"},relativeTime:{future:function(e){return e.replace(/(\u10ec\u10d0\u10db|\u10ec\u10e3\u10d7|\u10e1\u10d0\u10d0\u10d7|\u10ec\u10d4\u10da|\u10d3\u10e6|\u10d7\u10d5)(\u10d8|\u10d4)/,function(e,a,t){return"\u10d8"===t?a+"\u10e8\u10d8":a+t+"\u10e8\u10d8"})},past:function(e){return/(\u10ec\u10d0\u10db\u10d8|\u10ec\u10e3\u10d7\u10d8|\u10e1\u10d0\u10d0\u10d7\u10d8|\u10d3\u10e6\u10d4|\u10d7\u10d5\u10d4)/.test(e)?e.replace(/(\u10d8|\u10d4)$/,"\u10d8\u10e1 \u10ec\u10d8\u10dc"):/\u10ec\u10d4\u10da\u10d8/.test(e)?e.replace(/\u10ec\u10d4\u10da\u10d8$/,"\u10ec\u10da\u10d8\u10e1 \u10ec\u10d8\u10dc"):e},s:"\u10e0\u10d0\u10db\u10d3\u10d4\u10dc\u10d8\u10db\u10d4 \u10ec\u10d0\u10db\u10d8",ss:"%d \u10ec\u10d0\u10db\u10d8",m:"\u10ec\u10e3\u10d7\u10d8",mm:"%d \u10ec\u10e3\u10d7\u10d8",h:"\u10e1\u10d0\u10d0\u10d7\u10d8",hh:"%d \u10e1\u10d0\u10d0\u10d7\u10d8",d:"\u10d3\u10e6\u10d4",dd:"%d \u10d3\u10e6\u10d4",M:"\u10d7\u10d5\u10d4",MM:"%d \u10d7\u10d5\u10d4",y:"\u10ec\u10d4\u10da\u10d8",yy:"%d \u10ec\u10d4\u10da\u10d8"},dayOfMonthOrdinalParse:/0|1-\u10da\u10d8|\u10db\u10d4-\d{1,2}|\d{1,2}-\u10d4/,ordinal:function(e){return 0===e?e:1===e?e+"-\u10da\u10d8":e<20||e<=100&&e%20==0||e%100==0?"\u10db\u10d4-"+e:e+"-\u10d4"},week:{dow:1,doy:7}});var As={0:"-\u0448\u0456",1:"-\u0448\u0456",2:"-\u0448\u0456",3:"-\u0448\u0456",4:"-\u0448\u0456",5:"-\u0448\u0456",6:"-\u0448\u044b",7:"-\u0448\u0456",8:"-\u0448\u0456",9:"-\u0448\u044b",10:"-\u0448\u044b",20:"-\u0448\u044b",30:"-\u0448\u044b",40:"-\u0448\u044b",50:"-\u0448\u0456",60:"-\u0448\u044b",70:"-\u0448\u0456",80:"-\u0448\u0456",90:"-\u0448\u044b",100:"-\u0448\u0456"},Es=(M.defineLocale("kk",{months:"\u049b\u0430\u04a3\u0442\u0430\u0440_\u0430\u049b\u043f\u0430\u043d_\u043d\u0430\u0443\u0440\u044b\u0437_\u0441\u04d9\u0443\u0456\u0440_\u043c\u0430\u043c\u044b\u0440_\u043c\u0430\u0443\u0441\u044b\u043c_\u0448\u0456\u043b\u0434\u0435_\u0442\u0430\u043c\u044b\u0437_\u049b\u044b\u0440\u043a\u04af\u0439\u0435\u043a_\u049b\u0430\u0437\u0430\u043d_\u049b\u0430\u0440\u0430\u0448\u0430_\u0436\u0435\u043b\u0442\u043e\u049b\u0441\u0430\u043d".split("_"),monthsShort:"\u049b\u0430\u04a3_\u0430\u049b\u043f_\u043d\u0430\u0443_\u0441\u04d9\u0443_\u043c\u0430\u043c_\u043c\u0430\u0443_\u0448\u0456\u043b_\u0442\u0430\u043c_\u049b\u044b\u0440_\u049b\u0430\u0437_\u049b\u0430\u0440_\u0436\u0435\u043b".split("_"),weekdays:"\u0436\u0435\u043a\u0441\u0435\u043d\u0431\u0456_\u0434\u04af\u0439\u0441\u0435\u043d\u0431\u0456_\u0441\u0435\u0439\u0441\u0435\u043d\u0431\u0456_\u0441\u04d9\u0440\u0441\u0435\u043d\u0431\u0456_\u0431\u0435\u0439\u0441\u0435\u043d\u0431\u0456_\u0436\u04b1\u043c\u0430_\u0441\u0435\u043d\u0431\u0456".split("_"),weekdaysShort:"\u0436\u0435\u043a_\u0434\u04af\u0439_\u0441\u0435\u0439_\u0441\u04d9\u0440_\u0431\u0435\u0439_\u0436\u04b1\u043c_\u0441\u0435\u043d".split("_"),weekdaysMin:"\u0436\u043a_\u0434\u0439_\u0441\u0439_\u0441\u0440_\u0431\u0439_\u0436\u043c_\u0441\u043d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0411\u04af\u0433\u0456\u043d \u0441\u0430\u0493\u0430\u0442] LT",nextDay:"[\u0415\u0440\u0442\u0435\u04a3 \u0441\u0430\u0493\u0430\u0442] LT",nextWeek:"dddd [\u0441\u0430\u0493\u0430\u0442] LT",lastDay:"[\u041a\u0435\u0448\u0435 \u0441\u0430\u0493\u0430\u0442] LT",lastWeek:"[\u04e8\u0442\u043a\u0435\u043d \u0430\u043f\u0442\u0430\u043d\u044b\u04a3] dddd [\u0441\u0430\u0493\u0430\u0442] LT",sameElse:"L"},relativeTime:{future:"%s \u0456\u0448\u0456\u043d\u0434\u0435",past:"%s \u0431\u04b1\u0440\u044b\u043d",s:"\u0431\u0456\u0440\u043d\u0435\u0448\u0435 \u0441\u0435\u043a\u0443\u043d\u0434",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434",m:"\u0431\u0456\u0440 \u043c\u0438\u043d\u0443\u0442",mm:"%d \u043c\u0438\u043d\u0443\u0442",h:"\u0431\u0456\u0440 \u0441\u0430\u0493\u0430\u0442",hh:"%d \u0441\u0430\u0493\u0430\u0442",d:"\u0431\u0456\u0440 \u043a\u04af\u043d",dd:"%d \u043a\u04af\u043d",M:"\u0431\u0456\u0440 \u0430\u0439",MM:"%d \u0430\u0439",y:"\u0431\u0456\u0440 \u0436\u044b\u043b",yy:"%d \u0436\u044b\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0448\u0456|\u0448\u044b)/,ordinal:function(e){return e+(As[e]||As[e%10]||As[100<=e?100:null])},week:{dow:1,doy:7}}),{1:"\u17e1",2:"\u17e2",3:"\u17e3",4:"\u17e4",5:"\u17e5",6:"\u17e6",7:"\u17e7",8:"\u17e8",9:"\u17e9",0:"\u17e0"}),Fs={"\u17e1":"1","\u17e2":"2","\u17e3":"3","\u17e4":"4","\u17e5":"5","\u17e6":"6","\u17e7":"7","\u17e8":"8","\u17e9":"9","\u17e0":"0"},zs=(M.defineLocale("km",{months:"\u1798\u1780\u179a\u17b6_\u1780\u17bb\u1798\u17d2\u1797\u17c8_\u1798\u17b8\u1793\u17b6_\u1798\u17c1\u179f\u17b6_\u17a7\u179f\u1797\u17b6_\u1798\u17b7\u1790\u17bb\u1793\u17b6_\u1780\u1780\u17d2\u1780\u178a\u17b6_\u179f\u17b8\u17a0\u17b6_\u1780\u1789\u17d2\u1789\u17b6_\u178f\u17bb\u179b\u17b6_\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6_\u1792\u17d2\u1793\u17bc".split("_"),monthsShort:"\u1798\u1780\u179a\u17b6_\u1780\u17bb\u1798\u17d2\u1797\u17c8_\u1798\u17b8\u1793\u17b6_\u1798\u17c1\u179f\u17b6_\u17a7\u179f\u1797\u17b6_\u1798\u17b7\u1790\u17bb\u1793\u17b6_\u1780\u1780\u17d2\u1780\u178a\u17b6_\u179f\u17b8\u17a0\u17b6_\u1780\u1789\u17d2\u1789\u17b6_\u178f\u17bb\u179b\u17b6_\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6_\u1792\u17d2\u1793\u17bc".split("_"),weekdays:"\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799_\u1785\u17d0\u1793\u17d2\u1791_\u17a2\u1784\u17d2\u1782\u17b6\u179a_\u1796\u17bb\u1792_\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd_\u179f\u17bb\u1780\u17d2\u179a_\u179f\u17c5\u179a\u17cd".split("_"),weekdaysShort:"\u17a2\u17b6_\u1785_\u17a2_\u1796_\u1796\u17d2\u179a_\u179f\u17bb_\u179f".split("_"),weekdaysMin:"\u17a2\u17b6_\u1785_\u17a2_\u1796_\u1796\u17d2\u179a_\u179f\u17bb_\u179f".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u1796\u17d2\u179a\u17b9\u1780|\u179b\u17d2\u1784\u17b6\u1785/,isPM:function(e){return"\u179b\u17d2\u1784\u17b6\u1785"===e},meridiem:function(e,a,t){return e<12?"\u1796\u17d2\u179a\u17b9\u1780":"\u179b\u17d2\u1784\u17b6\u1785"},calendar:{sameDay:"[\u1790\u17d2\u1784\u17c3\u1793\u17c1\u17c7 \u1798\u17c9\u17c4\u1784] LT",nextDay:"[\u179f\u17d2\u17a2\u17c2\u1780 \u1798\u17c9\u17c4\u1784] LT",nextWeek:"dddd [\u1798\u17c9\u17c4\u1784] LT",lastDay:"[\u1798\u17d2\u179f\u17b7\u179b\u1798\u17b7\u1789 \u1798\u17c9\u17c4\u1784] LT",lastWeek:"dddd [\u179f\u1794\u17d2\u178f\u17b6\u17a0\u17cd\u1798\u17bb\u1793] [\u1798\u17c9\u17c4\u1784] LT",sameElse:"L"},relativeTime:{future:"%s\u1791\u17c0\u178f",past:"%s\u1798\u17bb\u1793",s:"\u1794\u17c9\u17bb\u1793\u17d2\u1798\u17b6\u1793\u179c\u17b7\u1793\u17b6\u1791\u17b8",ss:"%d \u179c\u17b7\u1793\u17b6\u1791\u17b8",m:"\u1798\u17bd\u1799\u1793\u17b6\u1791\u17b8",mm:"%d \u1793\u17b6\u1791\u17b8",h:"\u1798\u17bd\u1799\u1798\u17c9\u17c4\u1784",hh:"%d \u1798\u17c9\u17c4\u1784",d:"\u1798\u17bd\u1799\u1790\u17d2\u1784\u17c3",dd:"%d \u1790\u17d2\u1784\u17c3",M:"\u1798\u17bd\u1799\u1781\u17c2",MM:"%d \u1781\u17c2",y:"\u1798\u17bd\u1799\u1786\u17d2\u1793\u17b6\u17c6",yy:"%d \u1786\u17d2\u1793\u17b6\u17c6"},dayOfMonthOrdinalParse:/\u1791\u17b8\d{1,2}/,ordinal:"\u1791\u17b8%d",preparse:function(e){return e.replace(/[\u17e1\u17e2\u17e3\u17e4\u17e5\u17e6\u17e7\u17e8\u17e9\u17e0]/g,function(e){return Fs[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Es[e]})},week:{dow:1,doy:4}}),{1:"\u0ce7",2:"\u0ce8",3:"\u0ce9",4:"\u0cea",5:"\u0ceb",6:"\u0cec",7:"\u0ced",8:"\u0cee",9:"\u0cef",0:"\u0ce6"}),Ns={"\u0ce7":"1","\u0ce8":"2","\u0ce9":"3","\u0cea":"4","\u0ceb":"5","\u0cec":"6","\u0ced":"7","\u0cee":"8","\u0cef":"9","\u0ce6":"0"},Js=(M.defineLocale("kn",{months:"\u0c9c\u0ca8\u0cb5\u0cb0\u0cbf_\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cbf_\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd_\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd_\u0cae\u0cc6\u0cd5_\u0c9c\u0cc2\u0ca8\u0ccd_\u0c9c\u0cc1\u0cb2\u0cc6\u0cd6_\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd_\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd_\u0c85\u0c95\u0ccd\u0c9f\u0cc6\u0cc2\u0cd5\u0cac\u0cb0\u0ccd_\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd_\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd".split("_"),monthsShort:"\u0c9c\u0ca8_\u0cab\u0cc6\u0cac\u0ccd\u0cb0_\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd_\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd_\u0cae\u0cc6\u0cd5_\u0c9c\u0cc2\u0ca8\u0ccd_\u0c9c\u0cc1\u0cb2\u0cc6\u0cd6_\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd_\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82_\u0c85\u0c95\u0ccd\u0c9f\u0cc6\u0cc2\u0cd5_\u0ca8\u0cb5\u0cc6\u0c82_\u0ca1\u0cbf\u0cb8\u0cc6\u0c82".split("_"),monthsParseExact:!0,weekdays:"\u0cad\u0cbe\u0ca8\u0cc1\u0cb5\u0cbe\u0cb0_\u0cb8\u0cc6\u0cc2\u0cd5\u0cae\u0cb5\u0cbe\u0cb0_\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0_\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0_\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0_\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0_\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0".split("_"),weekdaysShort:"\u0cad\u0cbe\u0ca8\u0cc1_\u0cb8\u0cc6\u0cc2\u0cd5\u0cae_\u0cae\u0c82\u0c97\u0cb3_\u0cac\u0cc1\u0ca7_\u0c97\u0cc1\u0cb0\u0cc1_\u0cb6\u0cc1\u0c95\u0ccd\u0cb0_\u0cb6\u0ca8\u0cbf".split("_"),weekdaysMin:"\u0cad\u0cbe_\u0cb8\u0cc6\u0cc2\u0cd5_\u0cae\u0c82_\u0cac\u0cc1_\u0c97\u0cc1_\u0cb6\u0cc1_\u0cb6".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0c87\u0c82\u0ca6\u0cc1] LT",nextDay:"[\u0ca8\u0cbe\u0cb3\u0cc6] LT",nextWeek:"dddd, LT",lastDay:"[\u0ca8\u0cbf\u0ca8\u0ccd\u0ca8\u0cc6] LT",lastWeek:"[\u0c95\u0cc6\u0cc2\u0ca8\u0cc6\u0caf] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0ca8\u0c82\u0ca4\u0cb0",past:"%s \u0cb9\u0cbf\u0c82\u0ca6\u0cc6",s:"\u0c95\u0cc6\u0cb2\u0cb5\u0cc1 \u0c95\u0ccd\u0cb7\u0ca3\u0c97\u0cb3\u0cc1",ss:"%d \u0cb8\u0cc6\u0c95\u0cc6\u0c82\u0ca1\u0cc1\u0c97\u0cb3\u0cc1",m:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca8\u0cbf\u0cae\u0cbf\u0cb7",mm:"%d \u0ca8\u0cbf\u0cae\u0cbf\u0cb7",h:"\u0c92\u0c82\u0ca6\u0cc1 \u0c97\u0c82\u0c9f\u0cc6",hh:"%d \u0c97\u0c82\u0c9f\u0cc6",d:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca6\u0cbf\u0ca8",dd:"%d \u0ca6\u0cbf\u0ca8",M:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1",MM:"%d \u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1",y:"\u0c92\u0c82\u0ca6\u0cc1 \u0cb5\u0cb0\u0ccd\u0cb7",yy:"%d \u0cb5\u0cb0\u0ccd\u0cb7"},preparse:function(e){return e.replace(/[\u0ce7\u0ce8\u0ce9\u0cea\u0ceb\u0cec\u0ced\u0cee\u0cef\u0ce6]/g,function(e){return Ns[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return zs[e]})},meridiemParse:/\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf|\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6|\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8|\u0cb8\u0c82\u0c9c\u0cc6/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf"===a?e<4?e:e+12:"\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6"===a?e:"\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8"===a?10<=e?e:e+12:"\u0cb8\u0c82\u0c9c\u0cc6"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf":e<10?"\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6":e<17?"\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8":e<20?"\u0cb8\u0c82\u0c9c\u0cc6":"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf"},dayOfMonthOrdinalParse:/\d{1,2}(\u0ca8\u0cc6\u0cd5)/,ordinal:function(e){return e+"\u0ca8\u0cc6\u0cd5"},week:{dow:0,doy:6}}),M.defineLocale("ko",{months:"1\uc6d4_2\uc6d4_3\uc6d4_4\uc6d4_5\uc6d4_6\uc6d4_7\uc6d4_8\uc6d4_9\uc6d4_10\uc6d4_11\uc6d4_12\uc6d4".split("_"),monthsShort:"1\uc6d4_2\uc6d4_3\uc6d4_4\uc6d4_5\uc6d4_6\uc6d4_7\uc6d4_8\uc6d4_9\uc6d4_10\uc6d4_11\uc6d4_12\uc6d4".split("_"),weekdays:"\uc77c\uc694\uc77c_\uc6d4\uc694\uc77c_\ud654\uc694\uc77c_\uc218\uc694\uc77c_\ubaa9\uc694\uc77c_\uae08\uc694\uc77c_\ud1a0\uc694\uc77c".split("_"),weekdaysShort:"\uc77c_\uc6d4_\ud654_\uc218_\ubaa9_\uae08_\ud1a0".split("_"),weekdaysMin:"\uc77c_\uc6d4_\ud654_\uc218_\ubaa9_\uae08_\ud1a0".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY\ub144 MMMM D\uc77c",LLL:"YYYY\ub144 MMMM D\uc77c A h:mm",LLLL:"YYYY\ub144 MMMM D\uc77c dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY\ub144 MMMM D\uc77c",lll:"YYYY\ub144 MMMM D\uc77c A h:mm",llll:"YYYY\ub144 MMMM D\uc77c dddd A h:mm"},calendar:{sameDay:"\uc624\ub298 LT",nextDay:"\ub0b4\uc77c LT",nextWeek:"dddd LT",lastDay:"\uc5b4\uc81c LT",lastWeek:"\uc9c0\ub09c\uc8fc dddd LT",sameElse:"L"},relativeTime:{future:"%s \ud6c4",past:"%s \uc804",s:"\uba87 \ucd08",ss:"%d\ucd08",m:"1\ubd84",mm:"%d\ubd84",h:"\ud55c \uc2dc\uac04",hh:"%d\uc2dc\uac04",d:"\ud558\ub8e8",dd:"%d\uc77c",M:"\ud55c \ub2ec",MM:"%d\ub2ec",y:"\uc77c \ub144",yy:"%d\ub144"},dayOfMonthOrdinalParse:/\d{1,2}(\uc77c|\uc6d4|\uc8fc)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\uc77c";case"M":return e+"\uc6d4";case"w":case"W":return e+"\uc8fc";default:return e}},meridiemParse:/\uc624\uc804|\uc624\ud6c4/,isPM:function(e){return"\uc624\ud6c4"===e},meridiem:function(e,a,t){return e<12?"\uc624\uc804":"\uc624\ud6c4"}}),{1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"}),Rs={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},ta=["\u06a9\u0627\u0646\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645","\u0634\u0648\u0628\u0627\u062a","\u0626\u0627\u0632\u0627\u0631","\u0646\u06cc\u0633\u0627\u0646","\u0626\u0627\u06cc\u0627\u0631","\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646","\u062a\u06d5\u0645\u0645\u0648\u0632","\u0626\u0627\u0628","\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644","\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u0643\u06d5\u0645","\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645","\u0643\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"],Cs=(M.defineLocale("ku",{months:ta,monthsShort:ta,weekdays:"\u06cc\u0647\u200c\u0643\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u062f\u0648\u0648\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0633\u06ce\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0686\u0648\u0627\u0631\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u067e\u06ce\u0646\u062c\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0647\u0647\u200c\u06cc\u0646\u06cc_\u0634\u0647\u200c\u0645\u0645\u0647\u200c".split("_"),weekdaysShort:"\u06cc\u0647\u200c\u0643\u0634\u0647\u200c\u0645_\u062f\u0648\u0648\u0634\u0647\u200c\u0645_\u0633\u06ce\u0634\u0647\u200c\u0645_\u0686\u0648\u0627\u0631\u0634\u0647\u200c\u0645_\u067e\u06ce\u0646\u062c\u0634\u0647\u200c\u0645_\u0647\u0647\u200c\u06cc\u0646\u06cc_\u0634\u0647\u200c\u0645\u0645\u0647\u200c".split("_"),weekdaysMin:"\u06cc_\u062f_\u0633_\u0686_\u067e_\u0647_\u0634".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u0626\u06ce\u0648\u0627\u0631\u0647\u200c|\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc/,isPM:function(e){return/\u0626\u06ce\u0648\u0627\u0631\u0647\u200c/.test(e)},meridiem:function(e,a,t){return e<12?"\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc":"\u0626\u06ce\u0648\u0627\u0631\u0647\u200c"},calendar:{sameDay:"[\u0626\u0647\u200c\u0645\u0631\u06c6 \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",nextDay:"[\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",nextWeek:"dddd [\u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",lastDay:"[\u062f\u0648\u06ce\u0646\u06ce \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",lastWeek:"dddd [\u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",sameElse:"L"},relativeTime:{future:"\u0644\u0647\u200c %s",past:"%s",s:"\u0686\u0647\u200c\u0646\u062f \u0686\u0631\u0643\u0647\u200c\u06cc\u0647\u200c\u0643",ss:"\u0686\u0631\u0643\u0647\u200c %d",m:"\u06cc\u0647\u200c\u0643 \u062e\u0648\u0644\u0647\u200c\u0643",mm:"%d \u062e\u0648\u0644\u0647\u200c\u0643",h:"\u06cc\u0647\u200c\u0643 \u0643\u0627\u062a\u0698\u0645\u06ce\u0631",hh:"%d \u0643\u0627\u062a\u0698\u0645\u06ce\u0631",d:"\u06cc\u0647\u200c\u0643 \u0695\u06c6\u0698",dd:"%d \u0695\u06c6\u0698",M:"\u06cc\u0647\u200c\u0643 \u0645\u0627\u0646\u06af",MM:"%d \u0645\u0627\u0646\u06af",y:"\u06cc\u0647\u200c\u0643 \u0633\u0627\u06b5",yy:"%d \u0633\u0627\u06b5"},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return Rs[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return Js[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}}),{0:"-\u0447\u04af",1:"-\u0447\u0438",2:"-\u0447\u0438",3:"-\u0447\u04af",4:"-\u0447\u04af",5:"-\u0447\u0438",6:"-\u0447\u044b",7:"-\u0447\u0438",8:"-\u0447\u0438",9:"-\u0447\u0443",10:"-\u0447\u0443",20:"-\u0447\u044b",30:"-\u0447\u0443",40:"-\u0447\u044b",50:"-\u0447\u04af",60:"-\u0447\u044b",70:"-\u0447\u0438",80:"-\u0447\u0438",90:"-\u0447\u0443",100:"-\u0447\u04af"});function Is(e,a,t,s){var n={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return a?n[t][0]:n[t][1]}function Us(e){if(e=parseInt(e,10),isNaN(e))return!1;if(e<0)return!0;if(e<10)return 4<=e&&e<=7;var a;if(e<100)return Us(0==(a=e%10)?e/10:a);if(e<1e4){for(;10<=e;)e/=10;return Us(e)}return Us(e/=1e3)}M.defineLocale("ky",{months:"\u044f\u043d\u0432\u0430\u0440\u044c_\u0444\u0435\u0432\u0440\u0430\u043b\u044c_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b\u044c_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c_\u043e\u043a\u0442\u044f\u0431\u0440\u044c_\u043d\u043e\u044f\u0431\u0440\u044c_\u0434\u0435\u043a\u0430\u0431\u0440\u044c".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u0416\u0435\u043a\u0448\u0435\u043c\u0431\u0438_\u0414\u04af\u0439\u0448\u04e9\u043c\u0431\u04af_\u0428\u0435\u0439\u0448\u0435\u043c\u0431\u0438_\u0428\u0430\u0440\u0448\u0435\u043c\u0431\u0438_\u0411\u0435\u0439\u0448\u0435\u043c\u0431\u0438_\u0416\u0443\u043c\u0430_\u0418\u0448\u0435\u043c\u0431\u0438".split("_"),weekdaysShort:"\u0416\u0435\u043a_\u0414\u04af\u0439_\u0428\u0435\u0439_\u0428\u0430\u0440_\u0411\u0435\u0439_\u0416\u0443\u043c_\u0418\u0448\u0435".split("_"),weekdaysMin:"\u0416\u043a_\u0414\u0439_\u0428\u0439_\u0428\u0440_\u0411\u0439_\u0416\u043c_\u0418\u0448".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0411\u04af\u0433\u04af\u043d \u0441\u0430\u0430\u0442] LT",nextDay:"[\u042d\u0440\u0442\u0435\u04a3 \u0441\u0430\u0430\u0442] LT",nextWeek:"dddd [\u0441\u0430\u0430\u0442] LT",lastDay:"[\u041a\u0435\u0447\u044d\u044d \u0441\u0430\u0430\u0442] LT",lastWeek:"[\u04e8\u0442\u043a\u04e9\u043d \u0430\u043f\u0442\u0430\u043d\u044b\u043d] dddd [\u043a\u04af\u043d\u04af] [\u0441\u0430\u0430\u0442] LT",sameElse:"L"},relativeTime:{future:"%s \u0438\u0447\u0438\u043d\u0434\u0435",past:"%s \u043c\u0443\u0440\u0443\u043d",s:"\u0431\u0438\u0440\u043d\u0435\u0447\u0435 \u0441\u0435\u043a\u0443\u043d\u0434",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434",m:"\u0431\u0438\u0440 \u043c\u04af\u043d\u04e9\u0442",mm:"%d \u043c\u04af\u043d\u04e9\u0442",h:"\u0431\u0438\u0440 \u0441\u0430\u0430\u0442",hh:"%d \u0441\u0430\u0430\u0442",d:"\u0431\u0438\u0440 \u043a\u04af\u043d",dd:"%d \u043a\u04af\u043d",M:"\u0431\u0438\u0440 \u0430\u0439",MM:"%d \u0430\u0439",y:"\u0431\u0438\u0440 \u0436\u044b\u043b",yy:"%d \u0436\u044b\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0447\u0438|\u0447\u044b|\u0447\u04af|\u0447\u0443)/,ordinal:function(e){return e+(Cs[e]||Cs[e%10]||Cs[100<=e?100:null])},week:{dow:1,doy:7}}),M.defineLocale("lb",{months:"Januar_Februar_M\xe4erz_Abr\xebll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_M\xe9indeg_D\xebnschdeg_M\xebttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._M\xe9._D\xeb._M\xeb._Do._Fr._Sa.".split("_"),weekdaysMin:"So_M\xe9_D\xeb_M\xeb_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[G\xebschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:function(e){return Us(e.substr(0,e.indexOf(" ")))?"a "+e:"an "+e},past:function(e){return Us(e.substr(0,e.indexOf(" ")))?"viru "+e:"virun "+e},s:"e puer Sekonnen",ss:"%d Sekonnen",m:Is,mm:"%d Minutten",h:Is,hh:"%d Stonnen",d:Is,dd:"%d Deeg",M:Is,MM:"%d M\xe9int",y:Is,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("lo",{months:"\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99_\u0e81\u0eb8\u0ea1\u0e9e\u0eb2_\u0ea1\u0eb5\u0e99\u0eb2_\u0ec0\u0ea1\u0eaa\u0eb2_\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2_\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2_\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94_\u0eaa\u0eb4\u0e87\u0eab\u0eb2_\u0e81\u0eb1\u0e99\u0e8d\u0eb2_\u0e95\u0eb8\u0ea5\u0eb2_\u0e9e\u0eb0\u0e88\u0eb4\u0e81_\u0e97\u0eb1\u0e99\u0ea7\u0eb2".split("_"),monthsShort:"\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99_\u0e81\u0eb8\u0ea1\u0e9e\u0eb2_\u0ea1\u0eb5\u0e99\u0eb2_\u0ec0\u0ea1\u0eaa\u0eb2_\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2_\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2_\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94_\u0eaa\u0eb4\u0e87\u0eab\u0eb2_\u0e81\u0eb1\u0e99\u0e8d\u0eb2_\u0e95\u0eb8\u0ea5\u0eb2_\u0e9e\u0eb0\u0e88\u0eb4\u0e81_\u0e97\u0eb1\u0e99\u0ea7\u0eb2".split("_"),weekdays:"\u0ead\u0eb2\u0e97\u0eb4\u0e94_\u0e88\u0eb1\u0e99_\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99_\u0e9e\u0eb8\u0e94_\u0e9e\u0eb0\u0eab\u0eb1\u0e94_\u0eaa\u0eb8\u0e81_\u0ec0\u0eaa\u0ebb\u0eb2".split("_"),weekdaysShort:"\u0e97\u0eb4\u0e94_\u0e88\u0eb1\u0e99_\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99_\u0e9e\u0eb8\u0e94_\u0e9e\u0eb0\u0eab\u0eb1\u0e94_\u0eaa\u0eb8\u0e81_\u0ec0\u0eaa\u0ebb\u0eb2".split("_"),weekdaysMin:"\u0e97_\u0e88_\u0ead\u0e84_\u0e9e_\u0e9e\u0eab_\u0eaa\u0e81_\u0eaa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"\u0ea7\u0eb1\u0e99dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0e95\u0ead\u0e99\u0ec0\u0e8a\u0ebb\u0ec9\u0eb2|\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87/,isPM:function(e){return"\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87"===e},meridiem:function(e,a,t){return e<12?"\u0e95\u0ead\u0e99\u0ec0\u0e8a\u0ebb\u0ec9\u0eb2":"\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87"},calendar:{sameDay:"[\u0ea1\u0eb7\u0ec9\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",nextDay:"[\u0ea1\u0eb7\u0ec9\u0ead\u0eb7\u0ec8\u0e99\u0ec0\u0ea7\u0ea5\u0eb2] LT",nextWeek:"[\u0ea7\u0eb1\u0e99]dddd[\u0edc\u0ec9\u0eb2\u0ec0\u0ea7\u0ea5\u0eb2] LT",lastDay:"[\u0ea1\u0eb7\u0ec9\u0ea7\u0eb2\u0e99\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",lastWeek:"[\u0ea7\u0eb1\u0e99]dddd[\u0ec1\u0ea5\u0ec9\u0ea7\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",sameElse:"L"},relativeTime:{future:"\u0ead\u0eb5\u0e81 %s",past:"%s\u0e9c\u0ec8\u0eb2\u0e99\u0ea1\u0eb2",s:"\u0e9a\u0ecd\u0ec8\u0ec0\u0e97\u0ebb\u0ec8\u0eb2\u0ec3\u0e94\u0ea7\u0eb4\u0e99\u0eb2\u0e97\u0eb5",ss:"%d \u0ea7\u0eb4\u0e99\u0eb2\u0e97\u0eb5",m:"1 \u0e99\u0eb2\u0e97\u0eb5",mm:"%d \u0e99\u0eb2\u0e97\u0eb5",h:"1 \u0e8a\u0ebb\u0ec8\u0ea7\u0ec2\u0ea1\u0e87",hh:"%d \u0e8a\u0ebb\u0ec8\u0ea7\u0ec2\u0ea1\u0e87",d:"1 \u0ea1\u0eb7\u0ec9",dd:"%d \u0ea1\u0eb7\u0ec9",M:"1 \u0ec0\u0e94\u0eb7\u0ead\u0e99",MM:"%d \u0ec0\u0e94\u0eb7\u0ead\u0e99",y:"1 \u0e9b\u0eb5",yy:"%d \u0e9b\u0eb5"},dayOfMonthOrdinalParse:/(\u0e97\u0eb5\u0ec8)\d{1,2}/,ordinal:function(e){return"\u0e97\u0eb5\u0ec8"+e}});var Gs={ss:"sekund\u0117_sekund\u017ei\u0173_sekundes",m:"minut\u0117_minut\u0117s_minut\u0119",mm:"minut\u0117s_minu\u010di\u0173_minutes",h:"valanda_valandos_valand\u0105",hh:"valandos_valand\u0173_valandas",d:"diena_dienos_dien\u0105",dd:"dienos_dien\u0173_dienas",M:"m\u0117nuo_m\u0117nesio_m\u0117nes\u012f",MM:"m\u0117nesiai_m\u0117nesi\u0173_m\u0117nesius",y:"metai_met\u0173_metus",yy:"metai_met\u0173_metus"};function Vs(e,a,t,s){return a?Ks(t)[0]:s?Ks(t)[1]:Ks(t)[2]}function Bs(e){return e%10==0||10<e&&e<20}function Ks(e){return Gs[e].split("_")}function qs(e,a,t,s){var n=e+" ";return 1===e?n+Vs(0,a,t[0],s):a?n+(Bs(e)?Ks(t)[1]:Ks(t)[0]):s?n+Ks(t)[1]:n+(Bs(e)?Ks(t)[1]:Ks(t)[2])}M.defineLocale("lt",{months:{format:"sausio_vasario_kovo_baland\u017eio_gegu\u017e\u0117s_bir\u017eelio_liepos_rugpj\u016b\u010dio_rugs\u0117jo_spalio_lapkri\u010dio_gruod\u017eio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegu\u017e\u0117_bir\u017eelis_liepa_rugpj\u016btis_rugs\u0117jis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadien\u012f_pirmadien\u012f_antradien\u012f_tre\u010diadien\u012f_ketvirtadien\u012f_penktadien\u012f_\u0161e\u0161tadien\u012f".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_tre\u010diadienis_ketvirtadienis_penktadienis_\u0161e\u0161tadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_\u0160e\u0161".split("_"),weekdaysMin:"S_P_A_T_K_Pn_\u0160".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[\u0160iandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Pra\u0117jus\u012f] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prie\u0161 %s",s:function(e,a,t,s){return a?"kelios sekund\u0117s":s?"keli\u0173 sekund\u017ei\u0173":"kelias sekundes"},ss:qs,m:Vs,mm:qs,h:Vs,hh:qs,d:Vs,dd:qs,M:Vs,MM:qs,y:Vs,yy:qs},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(e){return e+"-oji"},week:{dow:1,doy:4}});var Zs={ss:"sekundes_sekund\u0113m_sekunde_sekundes".split("_"),m:"min\u016btes_min\u016bt\u0113m_min\u016bte_min\u016btes".split("_"),mm:"min\u016btes_min\u016bt\u0113m_min\u016bte_min\u016btes".split("_"),h:"stundas_stund\u0101m_stunda_stundas".split("_"),hh:"stundas_stund\u0101m_stunda_stundas".split("_"),d:"dienas_dien\u0101m_diena_dienas".split("_"),dd:"dienas_dien\u0101m_diena_dienas".split("_"),M:"m\u0113ne\u0161a_m\u0113ne\u0161iem_m\u0113nesis_m\u0113ne\u0161i".split("_"),MM:"m\u0113ne\u0161a_m\u0113ne\u0161iem_m\u0113nesis_m\u0113ne\u0161i".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};function $s(e,a,t){return t?a%10==1&&a%100!=11?e[2]:e[3]:a%10==1&&a%100!=11?e[0]:e[1]}function Qs(e,a,t){return e+" "+$s(Zs[t],e,a)}function Xs(e,a,t){return $s(Zs[t],e,a)}M.defineLocale("lv",{months:"janv\u0101ris_febru\u0101ris_marts_apr\u012blis_maijs_j\u016bnijs_j\u016blijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_j\u016bn_j\u016bl_aug_sep_okt_nov_dec".split("_"),weekdays:"sv\u0113tdiena_pirmdiena_otrdiena_tre\u0161diena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[\u0160odien pulksten] LT",nextDay:"[R\u012bt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pag\u0101ju\u0161\u0101] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"p\u0113c %s",past:"pirms %s",s:function(e,a){return a?"da\u017eas sekundes":"da\u017e\u0101m sekund\u0113m"},ss:Qs,m:Xs,mm:Qs,h:Xs,hh:Qs,d:Xs,dd:Qs,M:Xs,MM:Qs,y:Xs,yy:Qs},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var en={words:{ss:["sekund","sekunda","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:2<=e&&e<=4?a[1]:a[2]},translate:function(e,a,t){var s=en.words[t];return 1===t.length?a?s[0]:s[1]:e+" "+en.correctGrammaticalCase(e,s)}};function an(e,a,t,s){switch(t){case"s":return a?"\u0445\u044d\u0434\u0445\u044d\u043d \u0441\u0435\u043a\u0443\u043d\u0434":"\u0445\u044d\u0434\u0445\u044d\u043d \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u043d";case"ss":return e+(a?" \u0441\u0435\u043a\u0443\u043d\u0434":" \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u043d");case"m":case"mm":return e+(a?" \u043c\u0438\u043d\u0443\u0442":" \u043c\u0438\u043d\u0443\u0442\u044b\u043d");case"h":case"hh":return e+(a?" \u0446\u0430\u0433":" \u0446\u0430\u0433\u0438\u0439\u043d");case"d":case"dd":return e+(a?" \u04e9\u0434\u04e9\u0440":" \u04e9\u0434\u0440\u0438\u0439\u043d");case"M":case"MM":return e+(a?" \u0441\u0430\u0440":" \u0441\u0430\u0440\u044b\u043d");case"y":case"yy":return e+(a?" \u0436\u0438\u043b":" \u0436\u0438\u043b\u0438\u0439\u043d");default:return e}}M.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010de u] LT",lastWeek:function(){return["[pro\u0161le] [nedjelje] [u] LT","[pro\u0161log] [ponedjeljka] [u] LT","[pro\u0161log] [utorka] [u] LT","[pro\u0161le] [srijede] [u] LT","[pro\u0161log] [\u010detvrtka] [u] LT","[pro\u0161log] [petka] [u] LT","[pro\u0161le] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",ss:en.translate,m:en.translate,mm:en.translate,h:en.translate,hh:en.translate,d:"dan",dd:en.translate,M:"mjesec",MM:en.translate,y:"godinu",yy:en.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),M.defineLocale("mi",{months:"Kohi-t\u0101te_Hui-tanguru_Pout\u016b-te-rangi_Paenga-wh\u0101wh\u0101_Haratua_Pipiri_H\u014dngoingoi_Here-turi-k\u014dk\u0101_Mahuru_Whiringa-\u0101-nuku_Whiringa-\u0101-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_H\u014dngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"R\u0101tapu_Mane_T\u016brei_Wenerei_T\u0101ite_Paraire_H\u0101tarei".split("_"),weekdaysShort:"Ta_Ma_T\u016b_We_T\u0101i_Pa_H\u0101".split("_"),weekdaysMin:"Ta_Ma_T\u016b_We_T\u0101i_Pa_H\u0101".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te h\u0113kona ruarua",ss:"%d h\u0113kona",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),M.defineLocale("mk",{months:"\u0458\u0430\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0458_\u0458\u0443\u043d\u0438_\u0458\u0443\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u0458\u0430\u043d_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u0430_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0440\u0442\u043e\u043a_\u043f\u0435\u0442\u043e\u043a_\u0441\u0430\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u0435_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u0430\u0431".split("_"),weekdaysMin:"\u043de_\u043fo_\u0432\u0442_\u0441\u0440_\u0447\u0435_\u043f\u0435_\u0441a".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u0435\u043d\u0435\u0441 \u0432\u043e] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432\u043e] LT",nextWeek:"[\u0412\u043e] dddd [\u0432\u043e] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432\u043e] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u0418\u0437\u043c\u0438\u043d\u0430\u0442\u0430\u0442\u0430] dddd [\u0432\u043e] LT";case 1:case 2:case 4:case 5:return"[\u0418\u0437\u043c\u0438\u043d\u0430\u0442\u0438\u043e\u0442] dddd [\u0432\u043e] LT"}},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"\u043f\u0440\u0435\u0434 %s",s:"\u043d\u0435\u043a\u043e\u043b\u043a\u0443 \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u0435\u0434\u043d\u0430 \u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0435\u0434\u0435\u043d \u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0435\u0434\u0435\u043d \u0434\u0435\u043d",dd:"%d \u0434\u0435\u043d\u0430",M:"\u0435\u0434\u0435\u043d \u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0438",y:"\u0435\u0434\u043d\u0430 \u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(e){var a=e%10,t=e%100;return 0===e?e+"-\u0435\u0432":0==t?e+"-\u0435\u043d":10<t&&t<20?e+"-\u0442\u0438":1==a?e+"-\u0432\u0438":2==a?e+"-\u0440\u0438":7==a||8==a?e+"-\u043c\u0438":e+"-\u0442\u0438"},week:{dow:1,doy:7}}),M.defineLocale("ml",{months:"\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f_\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f_\u0d2e\u0d3e\u0d7c\u0d1a\u0d4d\u0d1a\u0d4d_\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d7d_\u0d2e\u0d47\u0d2f\u0d4d_\u0d1c\u0d42\u0d7a_\u0d1c\u0d42\u0d32\u0d48_\u0d13\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d_\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d7c_\u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d7c_\u0d28\u0d35\u0d02\u0d2c\u0d7c_\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d7c".split("_"),monthsShort:"\u0d1c\u0d28\u0d41._\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41._\u0d2e\u0d3e\u0d7c._\u0d0f\u0d2a\u0d4d\u0d30\u0d3f._\u0d2e\u0d47\u0d2f\u0d4d_\u0d1c\u0d42\u0d7a_\u0d1c\u0d42\u0d32\u0d48._\u0d13\u0d17._\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31._\u0d12\u0d15\u0d4d\u0d1f\u0d4b._\u0d28\u0d35\u0d02._\u0d21\u0d3f\u0d38\u0d02.".split("_"),monthsParseExact:!0,weekdays:"\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u0d1a_\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u0d1a_\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a_\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u0d1a_\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u0d1a_\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a_\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a".split("_"),weekdaysShort:"\u0d1e\u0d3e\u0d2f\u0d7c_\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d7e_\u0d1a\u0d4a\u0d35\u0d4d\u0d35_\u0d2c\u0d41\u0d27\u0d7b_\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02_\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f_\u0d36\u0d28\u0d3f".split("_"),weekdaysMin:"\u0d1e\u0d3e_\u0d24\u0d3f_\u0d1a\u0d4a_\u0d2c\u0d41_\u0d35\u0d4d\u0d2f\u0d3e_\u0d35\u0d46_\u0d36".split("_"),longDateFormat:{LT:"A h:mm -\u0d28\u0d41",LTS:"A h:mm:ss -\u0d28\u0d41",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -\u0d28\u0d41",LLLL:"dddd, D MMMM YYYY, A h:mm -\u0d28\u0d41"},calendar:{sameDay:"[\u0d07\u0d28\u0d4d\u0d28\u0d4d] LT",nextDay:"[\u0d28\u0d3e\u0d33\u0d46] LT",nextWeek:"dddd, LT",lastDay:"[\u0d07\u0d28\u0d4d\u0d28\u0d32\u0d46] LT",lastWeek:"[\u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d",past:"%s \u0d2e\u0d41\u0d7b\u0d2a\u0d4d",s:"\u0d05\u0d7d\u0d2a \u0d28\u0d3f\u0d2e\u0d3f\u0d37\u0d19\u0d4d\u0d19\u0d7e",ss:"%d \u0d38\u0d46\u0d15\u0d4d\u0d15\u0d7b\u0d21\u0d4d",m:"\u0d12\u0d30\u0d41 \u0d2e\u0d3f\u0d28\u0d3f\u0d31\u0d4d\u0d31\u0d4d",mm:"%d \u0d2e\u0d3f\u0d28\u0d3f\u0d31\u0d4d\u0d31\u0d4d",h:"\u0d12\u0d30\u0d41 \u0d2e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42\u0d7c",hh:"%d \u0d2e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42\u0d7c",d:"\u0d12\u0d30\u0d41 \u0d26\u0d3f\u0d35\u0d38\u0d02",dd:"%d \u0d26\u0d3f\u0d35\u0d38\u0d02",M:"\u0d12\u0d30\u0d41 \u0d2e\u0d3e\u0d38\u0d02",MM:"%d \u0d2e\u0d3e\u0d38\u0d02",y:"\u0d12\u0d30\u0d41 \u0d35\u0d7c\u0d37\u0d02",yy:"%d \u0d35\u0d7c\u0d37\u0d02"},meridiemParse:/\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f|\u0d30\u0d3e\u0d35\u0d3f\u0d32\u0d46|\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d|\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02|\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f/i,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f"===a&&4<=e||"\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d"===a||"\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02"===a?e+12:e},meridiem:function(e,a,t){return e<4?"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f":e<12?"\u0d30\u0d3e\u0d35\u0d3f\u0d32\u0d46":e<17?"\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d":e<20?"\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02":"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f"}}),M.defineLocale("mn",{months:"\u041d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0425\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0413\u0443\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0414\u04e9\u0440\u04e9\u0432\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0422\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0417\u0443\u0440\u0433\u0430\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0414\u043e\u043b\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u041d\u0430\u0439\u043c\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0415\u0441\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0410\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0410\u0440\u0432\u0430\u043d \u043d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0410\u0440\u0432\u0430\u043d \u0445\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440".split("_"),monthsShort:"1 \u0441\u0430\u0440_2 \u0441\u0430\u0440_3 \u0441\u0430\u0440_4 \u0441\u0430\u0440_5 \u0441\u0430\u0440_6 \u0441\u0430\u0440_7 \u0441\u0430\u0440_8 \u0441\u0430\u0440_9 \u0441\u0430\u0440_10 \u0441\u0430\u0440_11 \u0441\u0430\u0440_12 \u0441\u0430\u0440".split("_"),monthsParseExact:!0,weekdays:"\u041d\u044f\u043c_\u0414\u0430\u0432\u0430\u0430_\u041c\u044f\u0433\u043c\u0430\u0440_\u041b\u0445\u0430\u0433\u0432\u0430_\u041f\u04af\u0440\u044d\u0432_\u0411\u0430\u0430\u0441\u0430\u043d_\u0411\u044f\u043c\u0431\u0430".split("_"),weekdaysShort:"\u041d\u044f\u043c_\u0414\u0430\u0432_\u041c\u044f\u0433_\u041b\u0445\u0430_\u041f\u04af\u0440_\u0411\u0430\u0430_\u0411\u044f\u043c".split("_"),weekdaysMin:"\u041d\u044f_\u0414\u0430_\u041c\u044f_\u041b\u0445_\u041f\u04af_\u0411\u0430_\u0411\u044f".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY \u043e\u043d\u044b MMMM\u044b\u043d D",LLL:"YYYY \u043e\u043d\u044b MMMM\u044b\u043d D HH:mm",LLLL:"dddd, YYYY \u043e\u043d\u044b MMMM\u044b\u043d D HH:mm"},meridiemParse:/\u04ae\u04e8|\u04ae\u0425/i,isPM:function(e){return"\u04ae\u0425"===e},meridiem:function(e,a,t){return e<12?"\u04ae\u04e8":"\u04ae\u0425"},calendar:{sameDay:"[\u04e8\u043d\u04e9\u04e9\u0434\u04e9\u0440] LT",nextDay:"[\u041c\u0430\u0440\u0433\u0430\u0430\u0448] LT",nextWeek:"[\u0418\u0440\u044d\u0445] dddd LT",lastDay:"[\u04e8\u0447\u0438\u0433\u0434\u04e9\u0440] LT",lastWeek:"[\u04e8\u043d\u0433\u04e9\u0440\u0441\u04e9\u043d] dddd LT",sameElse:"L"},relativeTime:{future:"%s \u0434\u0430\u0440\u0430\u0430",past:"%s \u04e9\u043c\u043d\u04e9",s:an,ss:an,m:an,mm:an,h:an,hh:an,d:an,dd:an,M:an,MM:an,y:an,yy:an},dayOfMonthOrdinalParse:/\d{1,2} \u04e9\u0434\u04e9\u0440/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+" \u04e9\u0434\u04e9\u0440";default:return e}}});var tn={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},sn={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};function nn(e,a,t,s){var n="";if(a)switch(t){case"s":n="\u0915\u093e\u0939\u0940 \u0938\u0947\u0915\u0902\u0926";break;case"ss":n="%d \u0938\u0947\u0915\u0902\u0926";break;case"m":n="\u090f\u0915 \u092e\u093f\u0928\u093f\u091f";break;case"mm":n="%d \u092e\u093f\u0928\u093f\u091f\u0947";break;case"h":n="\u090f\u0915 \u0924\u093e\u0938";break;case"hh":n="%d \u0924\u093e\u0938";break;case"d":n="\u090f\u0915 \u0926\u093f\u0935\u0938";break;case"dd":n="%d \u0926\u093f\u0935\u0938";break;case"M":n="\u090f\u0915 \u092e\u0939\u093f\u0928\u093e";break;case"MM":n="%d \u092e\u0939\u093f\u0928\u0947";break;case"y":n="\u090f\u0915 \u0935\u0930\u094d\u0937";break;case"yy":n="%d \u0935\u0930\u094d\u0937\u0947";break}else switch(t){case"s":n="\u0915\u093e\u0939\u0940 \u0938\u0947\u0915\u0902\u0926\u093e\u0902";break;case"ss":n="%d \u0938\u0947\u0915\u0902\u0926\u093e\u0902";break;case"m":n="\u090f\u0915\u093e \u092e\u093f\u0928\u093f\u091f\u093e";break;case"mm":n="%d \u092e\u093f\u0928\u093f\u091f\u093e\u0902";break;case"h":n="\u090f\u0915\u093e \u0924\u093e\u0938\u093e";break;case"hh":n="%d \u0924\u093e\u0938\u093e\u0902";break;case"d":n="\u090f\u0915\u093e \u0926\u093f\u0935\u0938\u093e";break;case"dd":n="%d \u0926\u093f\u0935\u0938\u093e\u0902";break;case"M":n="\u090f\u0915\u093e \u092e\u0939\u093f\u0928\u094d\u092f\u093e";break;case"MM":n="%d \u092e\u0939\u093f\u0928\u094d\u092f\u093e\u0902";break;case"y":n="\u090f\u0915\u093e \u0935\u0930\u094d\u0937\u093e";break;case"yy":n="%d \u0935\u0930\u094d\u0937\u093e\u0902";break}return n.replace(/%d/i,e)}M.defineLocale("mr",{months:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u093f\u0932_\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932\u0948_\u0911\u0917\u0938\u094d\u091f_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930_\u0911\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930_\u0921\u093f\u0938\u0947\u0902\u092c\u0930".split("_"),monthsShort:"\u091c\u093e\u0928\u0947._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a._\u090f\u092a\u094d\u0930\u093f._\u092e\u0947._\u091c\u0942\u0928._\u091c\u0941\u0932\u0948._\u0911\u0917._\u0938\u092a\u094d\u091f\u0947\u0902._\u0911\u0915\u094d\u091f\u094b._\u0928\u094b\u0935\u094d\u0939\u0947\u0902._\u0921\u093f\u0938\u0947\u0902.".split("_"),monthsParseExact:!0,weekdays:"\u0930\u0935\u093f\u0935\u093e\u0930_\u0938\u094b\u092e\u0935\u093e\u0930_\u092e\u0902\u0917\u0933\u0935\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u0917\u0941\u0930\u0942\u0935\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930_\u0936\u0928\u093f\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093f_\u0938\u094b\u092e_\u092e\u0902\u0917\u0933_\u092c\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094d\u0930_\u0936\u0928\u093f".split("_"),weekdaysMin:"\u0930_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),longDateFormat:{LT:"A h:mm \u0935\u093e\u091c\u0924\u093e",LTS:"A h:mm:ss \u0935\u093e\u091c\u0924\u093e",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0935\u093e\u091c\u0924\u093e",LLLL:"dddd, D MMMM YYYY, A h:mm \u0935\u093e\u091c\u0924\u093e"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u0909\u0926\u094d\u092f\u093e] LT",nextWeek:"dddd, LT",lastDay:"[\u0915\u093e\u0932] LT",lastWeek:"[\u092e\u093e\u0917\u0940\u0932] dddd, LT",sameElse:"L"},relativeTime:{future:"%s\u092e\u0927\u094d\u092f\u0947",past:"%s\u092a\u0942\u0930\u094d\u0935\u0940",s:nn,ss:nn,m:nn,mm:nn,h:nn,hh:nn,d:nn,dd:nn,M:nn,MM:nn,y:nn,yy:nn},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return sn[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return tn[e]})},meridiemParse:/\u092a\u0939\u093e\u091f\u0947|\u0938\u0915\u093e\u0933\u0940|\u0926\u0941\u092a\u093e\u0930\u0940|\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940|\u0930\u093e\u0924\u094d\u0930\u0940/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u092a\u0939\u093e\u091f\u0947"===a||"\u0938\u0915\u093e\u0933\u0940"===a?e:"\u0926\u0941\u092a\u093e\u0930\u0940"===a||"\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940"===a||"\u0930\u093e\u0924\u094d\u0930\u0940"===a?12<=e?e:e+12:void 0},meridiem:function(e,a,t){return 0<=e&&e<6?"\u092a\u0939\u093e\u091f\u0947":e<12?"\u0938\u0915\u093e\u0933\u0940":e<17?"\u0926\u0941\u092a\u093e\u0930\u0940":e<20?"\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940":"\u0930\u093e\u0924\u094d\u0930\u0940"},week:{dow:0,doy:6}}),M.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"tengahari"===a?11<=e?e:e+12:"petang"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),M.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"tengahari"===a?11<=e?e:e+12:"petang"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),M.defineLocale("mt",{months:"Jannar_Frar_Marzu_April_Mejju_\u0120unju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Di\u010bembru".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_\u0120un_Lul_Aww_Set_Ott_Nov_Di\u010b".split("_"),weekdays:"Il-\u0126add_It-Tnejn_It-Tlieta_L-Erbg\u0127a_Il-\u0126amis_Il-\u0120img\u0127a_Is-Sibt".split("_"),weekdaysShort:"\u0126ad_Tne_Tli_Erb_\u0126am_\u0120im_Sib".split("_"),weekdaysMin:"\u0126a_Tn_Tl_Er_\u0126a_\u0120i_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Illum fil-]LT",nextDay:"[G\u0127ada fil-]LT",nextWeek:"dddd [fil-]LT",lastDay:"[Il-biera\u0127 fil-]LT",lastWeek:"dddd [li g\u0127adda] [fil-]LT",sameElse:"L"},relativeTime:{future:"f\u2019 %s",past:"%s ilu",s:"ftit sekondi",ss:"%d sekondi",m:"minuta",mm:"%d minuti",h:"sieg\u0127a",hh:"%d sieg\u0127at",d:"\u0121urnata",dd:"%d \u0121ranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}});var rn={1:"\u1041",2:"\u1042",3:"\u1043",4:"\u1044",5:"\u1045",6:"\u1046",7:"\u1047",8:"\u1048",9:"\u1049",0:"\u1040"},dn={"\u1041":"1","\u1042":"2","\u1043":"3","\u1044":"4","\u1045":"5","\u1046":"6","\u1047":"7","\u1048":"8","\u1049":"9","\u1040":"0"},_n=(M.defineLocale("my",{months:"\u1007\u1014\u103a\u1014\u101d\u102b\u101b\u102e_\u1016\u1031\u1016\u1031\u102c\u103a\u101d\u102b\u101b\u102e_\u1019\u1010\u103a_\u1027\u1015\u103c\u102e_\u1019\u1031_\u1007\u103d\u1014\u103a_\u1007\u1030\u101c\u102d\u102f\u1004\u103a_\u101e\u103c\u1002\u102f\u1010\u103a_\u1005\u1000\u103a\u1010\u1004\u103a\u1018\u102c_\u1021\u1031\u102c\u1000\u103a\u1010\u102d\u102f\u1018\u102c_\u1014\u102d\u102f\u101d\u1004\u103a\u1018\u102c_\u1012\u102e\u1007\u1004\u103a\u1018\u102c".split("_"),monthsShort:"\u1007\u1014\u103a_\u1016\u1031_\u1019\u1010\u103a_\u1015\u103c\u102e_\u1019\u1031_\u1007\u103d\u1014\u103a_\u101c\u102d\u102f\u1004\u103a_\u101e\u103c_\u1005\u1000\u103a_\u1021\u1031\u102c\u1000\u103a_\u1014\u102d\u102f_\u1012\u102e".split("_"),weekdays:"\u1010\u1014\u1004\u103a\u1039\u1002\u1014\u103d\u1031_\u1010\u1014\u1004\u103a\u1039\u101c\u102c_\u1021\u1004\u103a\u1039\u1002\u102b_\u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038_\u1000\u103c\u102c\u101e\u1015\u1010\u1031\u1038_\u101e\u1031\u102c\u1000\u103c\u102c_\u1005\u1014\u1031".split("_"),weekdaysShort:"\u1014\u103d\u1031_\u101c\u102c_\u1002\u102b_\u101f\u1030\u1038_\u1000\u103c\u102c_\u101e\u1031\u102c_\u1014\u1031".split("_"),weekdaysMin:"\u1014\u103d\u1031_\u101c\u102c_\u1002\u102b_\u101f\u1030\u1038_\u1000\u103c\u102c_\u101e\u1031\u102c_\u1014\u1031".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u101a\u1014\u1031.] LT [\u1019\u103e\u102c]",nextDay:"[\u1019\u1014\u1000\u103a\u1016\u103c\u1014\u103a] LT [\u1019\u103e\u102c]",nextWeek:"dddd LT [\u1019\u103e\u102c]",lastDay:"[\u1019\u1014\u1031.\u1000] LT [\u1019\u103e\u102c]",lastWeek:"[\u1015\u103c\u102e\u1038\u1001\u1032\u1037\u101e\u1031\u102c] dddd LT [\u1019\u103e\u102c]",sameElse:"L"},relativeTime:{future:"\u101c\u102c\u1019\u100a\u103a\u1037 %s \u1019\u103e\u102c",past:"\u101c\u103d\u1014\u103a\u1001\u1032\u1037\u101e\u1031\u102c %s \u1000",s:"\u1005\u1000\u1039\u1000\u1014\u103a.\u1021\u1014\u100a\u103a\u1038\u1004\u101a\u103a",ss:"%d \u1005\u1000\u1039\u1000\u1014\u1037\u103a",m:"\u1010\u1005\u103a\u1019\u102d\u1014\u1005\u103a",mm:"%d \u1019\u102d\u1014\u1005\u103a",h:"\u1010\u1005\u103a\u1014\u102c\u101b\u102e",hh:"%d \u1014\u102c\u101b\u102e",d:"\u1010\u1005\u103a\u101b\u1000\u103a",dd:"%d \u101b\u1000\u103a",M:"\u1010\u1005\u103a\u101c",MM:"%d \u101c",y:"\u1010\u1005\u103a\u1014\u103e\u1005\u103a",yy:"%d \u1014\u103e\u1005\u103a"},preparse:function(e){return e.replace(/[\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049\u1040]/g,function(e){return dn[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return rn[e]})},week:{dow:1,doy:4}}),M.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"s\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xf8rdag".split("_"),weekdaysShort:"s\xf8._ma._ti._on._to._fr._l\xf8.".split("_"),weekdaysMin:"s\xf8_ma_ti_on_to_fr_l\xf8".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i g\xe5r kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",w:"en uke",ww:"%d uker",M:"en m\xe5ned",MM:"%d m\xe5neder",y:"ett \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),{1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"}),on={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"},mn=(M.defineLocale("ne",{months:"\u091c\u0928\u0935\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u093f\u0932_\u092e\u0908_\u091c\u0941\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0937\u094d\u091f_\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930_\u0905\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930_\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930".split("_"),monthsShort:"\u091c\u0928._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u093f._\u092e\u0908_\u091c\u0941\u0928_\u091c\u0941\u0932\u093e\u0908._\u0905\u0917._\u0938\u0947\u092a\u094d\u091f._\u0905\u0915\u094d\u091f\u094b._\u0928\u094b\u092d\u0947._\u0921\u093f\u0938\u0947.".split("_"),monthsParseExact:!0,weekdays:"\u0906\u0907\u0924\u092c\u093e\u0930_\u0938\u094b\u092e\u092c\u093e\u0930_\u092e\u0919\u094d\u0917\u0932\u092c\u093e\u0930_\u092c\u0941\u0927\u092c\u093e\u0930_\u092c\u093f\u0939\u093f\u092c\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u092c\u093e\u0930_\u0936\u0928\u093f\u092c\u093e\u0930".split("_"),weekdaysShort:"\u0906\u0907\u0924._\u0938\u094b\u092e._\u092e\u0919\u094d\u0917\u0932._\u092c\u0941\u0927._\u092c\u093f\u0939\u093f._\u0936\u0941\u0915\u094d\u0930._\u0936\u0928\u093f.".split("_"),weekdaysMin:"\u0906._\u0938\u094b._\u092e\u0902._\u092c\u0941._\u092c\u093f._\u0936\u0941._\u0936.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A\u0915\u094b h:mm \u092c\u091c\u0947",LTS:"A\u0915\u094b h:mm:ss \u092c\u091c\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A\u0915\u094b h:mm \u092c\u091c\u0947",LLLL:"dddd, D MMMM YYYY, A\u0915\u094b h:mm \u092c\u091c\u0947"},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return on[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return _n[e]})},meridiemParse:/\u0930\u093e\u0924\u093f|\u092c\u093f\u0939\u093e\u0928|\u0926\u093f\u0909\u0901\u0938\u094b|\u0938\u093e\u0901\u091d/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0930\u093e\u0924\u093f"===a?e<4?e:e+12:"\u092c\u093f\u0939\u093e\u0928"===a?e:"\u0926\u093f\u0909\u0901\u0938\u094b"===a?10<=e?e:e+12:"\u0938\u093e\u0901\u091d"===a?e+12:void 0},meridiem:function(e,a,t){return e<3?"\u0930\u093e\u0924\u093f":e<12?"\u092c\u093f\u0939\u093e\u0928":e<16?"\u0926\u093f\u0909\u0901\u0938\u094b":e<20?"\u0938\u093e\u0901\u091d":"\u0930\u093e\u0924\u093f"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u092d\u094b\u0932\u093f] LT",nextWeek:"[\u0906\u0909\u0901\u0926\u094b] dddd[,] LT",lastDay:"[\u0939\u093f\u091c\u094b] LT",lastWeek:"[\u0917\u090f\u0915\u094b] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s\u092e\u093e",past:"%s \u0905\u0917\u093e\u0921\u093f",s:"\u0915\u0947\u0939\u0940 \u0915\u094d\u0937\u0923",ss:"%d \u0938\u0947\u0915\u0947\u0923\u094d\u0921",m:"\u090f\u0915 \u092e\u093f\u0928\u0947\u091f",mm:"%d \u092e\u093f\u0928\u0947\u091f",h:"\u090f\u0915 \u0918\u0923\u094d\u091f\u093e",hh:"%d \u0918\u0923\u094d\u091f\u093e",d:"\u090f\u0915 \u0926\u093f\u0928",dd:"%d \u0926\u093f\u0928",M:"\u090f\u0915 \u092e\u0939\u093f\u0928\u093e",MM:"%d \u092e\u0939\u093f\u0928\u093e",y:"\u090f\u0915 \u092c\u0930\u094d\u0937",yy:"%d \u092c\u0930\u094d\u0937"},week:{dow:0,doy:6}}),"jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_")),un="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),c=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],L=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,ln=(M.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,a){return e?(/-MMM-/.test(a)?un:mn)[e.month()]:mn},monthsRegex:L,monthsShortRegex:L,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:c,longMonthsParse:c,shortMonthsParse:c,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xe9\xe9n minuut",mm:"%d minuten",h:"\xe9\xe9n uur",hh:"%d uur",d:"\xe9\xe9n dag",dd:"%d dagen",M:"\xe9\xe9n maand",MM:"%d maanden",y:"\xe9\xe9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}}),"jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_")),Mn="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),f=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],ke=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,hn=(M.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,a){return e?(/-MMM-/.test(a)?Mn:ln)[e.month()]:ln},monthsRegex:ke,monthsShortRegex:ke,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:f,longMonthsParse:f,shortMonthsParse:f,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xe9\xe9n minuut",mm:"%d minuten",h:"\xe9\xe9n uur",hh:"%d uur",d:"\xe9\xe9n dag",dd:"%d dagen",w:"\xe9\xe9n week",ww:"%d weken",M:"\xe9\xe9n maand",MM:"%d maanden",y:"\xe9\xe9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}}),M.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"sundag_m\xe5ndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"su._m\xe5._ty._on._to._fr._lau.".split("_"),weekdaysMin:"su_m\xe5_ty_on_to_fr_la".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I g\xe5r klokka] LT",lastWeek:"[F\xf8reg\xe5ande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",w:"ei veke",ww:"%d veker",M:"ein m\xe5nad",MM:"%d m\xe5nader",y:"eit \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("oc-lnc",{months:{standalone:"geni\xe8r_febri\xe8r_mar\xe7_abril_mai_junh_julhet_agost_setembre_oct\xf2bre_novembre_decembre".split("_"),format:"de geni\xe8r_de febri\xe8r_de mar\xe7_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'oct\xf2bre_de novembre_de decembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._mar\xe7_abr._mai_junh_julh._ago._set._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"dimenge_diluns_dimars_dim\xe8cres_dij\xf2us_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dm._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dm_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:"[u\xe8i a] LT",nextDay:"[deman a] LT",nextWeek:"dddd [a] LT",lastDay:"[i\xe8r a] LT",lastWeek:"dddd [passat a] LT",sameElse:"L"},relativeTime:{future:"d'aqu\xed %s",past:"fa %s",s:"unas segondas",ss:"%d segondas",m:"una minuta",mm:"%d minutas",h:"una ora",hh:"%d oras",d:"un jorn",dd:"%d jorns",M:"un mes",MM:"%d meses",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|\xe8|a)/,ordinal:function(e,a){return e+("w"!==a&&"W"!==a?1===e?"r":2===e?"n":3===e?"r":4===e?"t":"\xe8":"a")},week:{dow:1,doy:4}}),{1:"\u0a67",2:"\u0a68",3:"\u0a69",4:"\u0a6a",5:"\u0a6b",6:"\u0a6c",7:"\u0a6d",8:"\u0a6e",9:"\u0a6f",0:"\u0a66"}),cn={"\u0a67":"1","\u0a68":"2","\u0a69":"3","\u0a6a":"4","\u0a6b":"5","\u0a6c":"6","\u0a6d":"7","\u0a6e":"8","\u0a6f":"9","\u0a66":"0"},Ln=(M.defineLocale("pa-in",{months:"\u0a1c\u0a28\u0a35\u0a30\u0a40_\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40_\u0a2e\u0a3e\u0a30\u0a1a_\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32_\u0a2e\u0a08_\u0a1c\u0a42\u0a28_\u0a1c\u0a41\u0a32\u0a3e\u0a08_\u0a05\u0a17\u0a38\u0a24_\u0a38\u0a24\u0a70\u0a2c\u0a30_\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30_\u0a28\u0a35\u0a70\u0a2c\u0a30_\u0a26\u0a38\u0a70\u0a2c\u0a30".split("_"),monthsShort:"\u0a1c\u0a28\u0a35\u0a30\u0a40_\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40_\u0a2e\u0a3e\u0a30\u0a1a_\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32_\u0a2e\u0a08_\u0a1c\u0a42\u0a28_\u0a1c\u0a41\u0a32\u0a3e\u0a08_\u0a05\u0a17\u0a38\u0a24_\u0a38\u0a24\u0a70\u0a2c\u0a30_\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30_\u0a28\u0a35\u0a70\u0a2c\u0a30_\u0a26\u0a38\u0a70\u0a2c\u0a30".split("_"),weekdays:"\u0a10\u0a24\u0a35\u0a3e\u0a30_\u0a38\u0a4b\u0a2e\u0a35\u0a3e\u0a30_\u0a2e\u0a70\u0a17\u0a32\u0a35\u0a3e\u0a30_\u0a2c\u0a41\u0a27\u0a35\u0a3e\u0a30_\u0a35\u0a40\u0a30\u0a35\u0a3e\u0a30_\u0a38\u0a3c\u0a41\u0a71\u0a15\u0a30\u0a35\u0a3e\u0a30_\u0a38\u0a3c\u0a28\u0a40\u0a1a\u0a30\u0a35\u0a3e\u0a30".split("_"),weekdaysShort:"\u0a10\u0a24_\u0a38\u0a4b\u0a2e_\u0a2e\u0a70\u0a17\u0a32_\u0a2c\u0a41\u0a27_\u0a35\u0a40\u0a30_\u0a38\u0a3c\u0a41\u0a15\u0a30_\u0a38\u0a3c\u0a28\u0a40".split("_"),weekdaysMin:"\u0a10\u0a24_\u0a38\u0a4b\u0a2e_\u0a2e\u0a70\u0a17\u0a32_\u0a2c\u0a41\u0a27_\u0a35\u0a40\u0a30_\u0a38\u0a3c\u0a41\u0a15\u0a30_\u0a38\u0a3c\u0a28\u0a40".split("_"),longDateFormat:{LT:"A h:mm \u0a35\u0a1c\u0a47",LTS:"A h:mm:ss \u0a35\u0a1c\u0a47",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0a35\u0a1c\u0a47",LLLL:"dddd, D MMMM YYYY, A h:mm \u0a35\u0a1c\u0a47"},calendar:{sameDay:"[\u0a05\u0a1c] LT",nextDay:"[\u0a15\u0a32] LT",nextWeek:"[\u0a05\u0a17\u0a32\u0a3e] dddd, LT",lastDay:"[\u0a15\u0a32] LT",lastWeek:"[\u0a2a\u0a3f\u0a1b\u0a32\u0a47] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0a35\u0a3f\u0a71\u0a1a",past:"%s \u0a2a\u0a3f\u0a1b\u0a32\u0a47",s:"\u0a15\u0a41\u0a1d \u0a38\u0a15\u0a3f\u0a70\u0a1f",ss:"%d \u0a38\u0a15\u0a3f\u0a70\u0a1f",m:"\u0a07\u0a15 \u0a2e\u0a3f\u0a70\u0a1f",mm:"%d \u0a2e\u0a3f\u0a70\u0a1f",h:"\u0a07\u0a71\u0a15 \u0a18\u0a70\u0a1f\u0a3e",hh:"%d \u0a18\u0a70\u0a1f\u0a47",d:"\u0a07\u0a71\u0a15 \u0a26\u0a3f\u0a28",dd:"%d \u0a26\u0a3f\u0a28",M:"\u0a07\u0a71\u0a15 \u0a2e\u0a39\u0a40\u0a28\u0a3e",MM:"%d \u0a2e\u0a39\u0a40\u0a28\u0a47",y:"\u0a07\u0a71\u0a15 \u0a38\u0a3e\u0a32",yy:"%d \u0a38\u0a3e\u0a32"},preparse:function(e){return e.replace(/[\u0a67\u0a68\u0a69\u0a6a\u0a6b\u0a6c\u0a6d\u0a6e\u0a6f\u0a66]/g,function(e){return cn[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return hn[e]})},meridiemParse:/\u0a30\u0a3e\u0a24|\u0a38\u0a35\u0a47\u0a30|\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30|\u0a38\u0a3c\u0a3e\u0a2e/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0a30\u0a3e\u0a24"===a?e<4?e:e+12:"\u0a38\u0a35\u0a47\u0a30"===a?e:"\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30"===a?10<=e?e:e+12:"\u0a38\u0a3c\u0a3e\u0a2e"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0a30\u0a3e\u0a24":e<10?"\u0a38\u0a35\u0a47\u0a30":e<17?"\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30":e<20?"\u0a38\u0a3c\u0a3e\u0a2e":"\u0a30\u0a3e\u0a24"},week:{dow:0,doy:6}}),"stycze\u0144_luty_marzec_kwiecie\u0144_maj_czerwiec_lipiec_sierpie\u0144_wrzesie\u0144_pa\u017adziernik_listopad_grudzie\u0144".split("_")),Yn="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrze\u015bnia_pa\u017adziernika_listopada_grudnia".split("_"),_=[/^sty/i,/^lut/i,/^mar/i,/^kwi/i,/^maj/i,/^cze/i,/^lip/i,/^sie/i,/^wrz/i,/^pa\u017a/i,/^lis/i,/^gru/i];function yn(e){return e%10<5&&1<e%10&&~~(e/10)%10!=1}function fn(e,a,t){var s=e+" ";switch(t){case"ss":return s+(yn(e)?"sekundy":"sekund");case"m":return a?"minuta":"minut\u0119";case"mm":return s+(yn(e)?"minuty":"minut");case"h":return a?"godzina":"godzin\u0119";case"hh":return s+(yn(e)?"godziny":"godzin");case"ww":return s+(yn(e)?"tygodnie":"tygodni");case"MM":return s+(yn(e)?"miesi\u0105ce":"miesi\u0119cy");case"yy":return s+(yn(e)?"lata":"lat")}}function pn(e,a,t){return e+(20<=e%100||100<=e&&e%100==0?" de ":" ")+{ss:"secunde",mm:"minute",hh:"ore",dd:"zile",ww:"s\u0103pt\u0103m\xe2ni",MM:"luni",yy:"ani"}[t]}function kn(e,a,t){return"m"===t?a?"\u043c\u0438\u043d\u0443\u0442\u0430":"\u043c\u0438\u043d\u0443\u0442\u0443":e+" "+(e=+e,a=(a={ss:a?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:a?"\u043c\u0438\u043d\u0443\u0442\u0430_\u043c\u0438\u043d\u0443\u0442\u044b_\u043c\u0438\u043d\u0443\u0442":"\u043c\u0438\u043d\u0443\u0442\u0443_\u043c\u0438\u043d\u0443\u0442\u044b_\u043c\u0438\u043d\u0443\u0442",hh:"\u0447\u0430\u0441_\u0447\u0430\u0441\u0430_\u0447\u0430\u0441\u043e\u0432",dd:"\u0434\u0435\u043d\u044c_\u0434\u043d\u044f_\u0434\u043d\u0435\u0439",ww:"\u043d\u0435\u0434\u0435\u043b\u044f_\u043d\u0435\u0434\u0435\u043b\u0438_\u043d\u0435\u0434\u0435\u043b\u044c",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u0430_\u043c\u0435\u0441\u044f\u0446\u0435\u0432",yy:"\u0433\u043e\u0434_\u0433\u043e\u0434\u0430_\u043b\u0435\u0442"}[t]).split("_"),e%10==1&&e%100!=11?a[0]:2<=e%10&&e%10<=4&&(e%100<10||20<=e%100)?a[1]:a[2])}M.defineLocale("pl",{months:function(e,a){return e?(/D MMMM/.test(a)?Yn:Ln)[e.month()]:Ln},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_pa\u017a_lis_gru".split("_"),monthsParse:_,longMonthsParse:_,shortMonthsParse:_,weekdays:"niedziela_poniedzia\u0142ek_wtorek_\u015broda_czwartek_pi\u0105tek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_\u015br_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_\u015ar_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dzi\u015b o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedziel\u0119 o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W \u015brod\u0119 o] LT";case 6:return"[W sobot\u0119 o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zesz\u0142\u0105 niedziel\u0119 o] LT";case 3:return"[W zesz\u0142\u0105 \u015brod\u0119 o] LT";case 6:return"[W zesz\u0142\u0105 sobot\u0119 o] LT";default:return"[W zesz\u0142y] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:fn,m:fn,mm:fn,h:fn,hh:fn,d:"1 dzie\u0144",dd:"%d dni",w:"tydzie\u0144",ww:fn,M:"miesi\u0105c",MM:fn,y:"rok",yy:fn},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("pt-br",{months:"janeiro_fevereiro_mar\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"domingo_segunda-feira_ter\xe7a-feira_quarta-feira_quinta-feira_sexta-feira_s\xe1bado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_s\xe1b".split("_"),weekdaysMin:"do_2\xaa_3\xaa_4\xaa_5\xaa_6\xaa_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [\xe0s] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [\xe0s] HH:mm"},calendar:{sameDay:"[Hoje \xe0s] LT",nextDay:"[Amanh\xe3 \xe0s] LT",nextWeek:"dddd [\xe0s] LT",lastDay:"[Ontem \xe0s] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[\xdaltimo] dddd [\xe0s] LT":"[\xdaltima] dddd [\xe0s] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"h\xe1 %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um m\xeas",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",invalidDate:"Data inv\xe1lida"}),M.defineLocale("pt",{months:"janeiro_fevereiro_mar\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Ter\xe7a-feira_Quarta-feira_Quinta-feira_Sexta-feira_S\xe1bado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_S\xe1b".split("_"),weekdaysMin:"Do_2\xaa_3\xaa_4\xaa_5\xaa_6\xaa_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje \xe0s] LT",nextDay:"[Amanh\xe3 \xe0s] LT",nextWeek:"dddd [\xe0s] LT",lastDay:"[Ontem \xe0s] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[\xdaltimo] dddd [\xe0s] LT":"[\xdaltima] dddd [\xe0s] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"h\xe1 %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",w:"uma semana",ww:"%d semanas",M:"um m\xeas",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),M.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminic\u0103_luni_mar\u021bi_miercuri_joi_vineri_s\xe2mb\u0103t\u0103".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_S\xe2m".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_S\xe2".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[m\xe2ine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s \xeen urm\u0103",s:"c\xe2teva secunde",ss:pn,m:"un minut",mm:pn,h:"o or\u0103",hh:pn,d:"o zi",dd:pn,w:"o s\u0103pt\u0103m\xe2n\u0103",ww:pn,M:"o lun\u0103",MM:pn,y:"un an",yy:pn},week:{dow:1,doy:7}});y=[/^\u044f\u043d\u0432/i,/^\u0444\u0435\u0432/i,/^\u043c\u0430\u0440/i,/^\u0430\u043f\u0440/i,/^\u043c\u0430[\u0439\u044f]/i,/^\u0438\u044e\u043d/i,/^\u0438\u044e\u043b/i,/^\u0430\u0432\u0433/i,/^\u0441\u0435\u043d/i,/^\u043e\u043a\u0442/i,/^\u043d\u043e\u044f/i,/^\u0434\u0435\u043a/i],M.defineLocale("ru",{months:{format:"\u044f\u043d\u0432\u0430\u0440\u044f_\u0444\u0435\u0432\u0440\u0430\u043b\u044f_\u043c\u0430\u0440\u0442\u0430_\u0430\u043f\u0440\u0435\u043b\u044f_\u043c\u0430\u044f_\u0438\u044e\u043d\u044f_\u0438\u044e\u043b\u044f_\u0430\u0432\u0433\u0443\u0441\u0442\u0430_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f_\u043e\u043a\u0442\u044f\u0431\u0440\u044f_\u043d\u043e\u044f\u0431\u0440\u044f_\u0434\u0435\u043a\u0430\u0431\u0440\u044f".split("_"),standalone:"\u044f\u043d\u0432\u0430\u0440\u044c_\u0444\u0435\u0432\u0440\u0430\u043b\u044c_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b\u044c_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c_\u043e\u043a\u0442\u044f\u0431\u0440\u044c_\u043d\u043e\u044f\u0431\u0440\u044c_\u0434\u0435\u043a\u0430\u0431\u0440\u044c".split("_")},monthsShort:{format:"\u044f\u043d\u0432._\u0444\u0435\u0432\u0440._\u043c\u0430\u0440._\u0430\u043f\u0440._\u043c\u0430\u044f_\u0438\u044e\u043d\u044f_\u0438\u044e\u043b\u044f_\u0430\u0432\u0433._\u0441\u0435\u043d\u0442._\u043e\u043a\u0442._\u043d\u043e\u044f\u0431._\u0434\u0435\u043a.".split("_"),standalone:"\u044f\u043d\u0432._\u0444\u0435\u0432\u0440._\u043c\u0430\u0440\u0442_\u0430\u043f\u0440._\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433._\u0441\u0435\u043d\u0442._\u043e\u043a\u0442._\u043d\u043e\u044f\u0431._\u0434\u0435\u043a.".split("_")},weekdays:{standalone:"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043f\u044f\u0442\u043d\u0438\u0446\u0430_\u0441\u0443\u0431\u0431\u043e\u0442\u0430".split("_"),format:"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0443_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043f\u044f\u0442\u043d\u0438\u0446\u0443_\u0441\u0443\u0431\u0431\u043e\u0442\u0443".split("_"),isFormat:/\[ ?[\u0412\u0432] ?(?:\u043f\u0440\u043e\u0448\u043b\u0443\u044e|\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e|\u044d\u0442\u0443)? ?] ?dddd/},weekdaysShort:"\u0432\u0441_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u0432\u0441_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),monthsParse:y,longMonthsParse:y,shortMonthsParse:y,monthsRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044c\u044f]|\u044f\u043d\u0432\.?|\u0444\u0435\u0432\u0440\u0430\u043b[\u044c\u044f]|\u0444\u0435\u0432\u0440?\.?|\u043c\u0430\u0440\u0442\u0430?|\u043c\u0430\u0440\.?|\u0430\u043f\u0440\u0435\u043b[\u044c\u044f]|\u0430\u043f\u0440\.?|\u043c\u0430[\u0439\u044f]|\u0438\u044e\u043d[\u044c\u044f]|\u0438\u044e\u043d\.?|\u0438\u044e\u043b[\u044c\u044f]|\u0438\u044e\u043b\.?|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0430\u0432\u0433\.?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044c\u044f]|\u0441\u0435\u043d\u0442?\.?|\u043e\u043a\u0442\u044f\u0431\u0440[\u044c\u044f]|\u043e\u043a\u0442\.?|\u043d\u043e\u044f\u0431\u0440[\u044c\u044f]|\u043d\u043e\u044f\u0431?\.?|\u0434\u0435\u043a\u0430\u0431\u0440[\u044c\u044f]|\u0434\u0435\u043a\.?)/i,monthsShortRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044c\u044f]|\u044f\u043d\u0432\.?|\u0444\u0435\u0432\u0440\u0430\u043b[\u044c\u044f]|\u0444\u0435\u0432\u0440?\.?|\u043c\u0430\u0440\u0442\u0430?|\u043c\u0430\u0440\.?|\u0430\u043f\u0440\u0435\u043b[\u044c\u044f]|\u0430\u043f\u0440\.?|\u043c\u0430[\u0439\u044f]|\u0438\u044e\u043d[\u044c\u044f]|\u0438\u044e\u043d\.?|\u0438\u044e\u043b[\u044c\u044f]|\u0438\u044e\u043b\.?|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0430\u0432\u0433\.?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044c\u044f]|\u0441\u0435\u043d\u0442?\.?|\u043e\u043a\u0442\u044f\u0431\u0440[\u044c\u044f]|\u043e\u043a\u0442\.?|\u043d\u043e\u044f\u0431\u0440[\u044c\u044f]|\u043d\u043e\u044f\u0431?\.?|\u0434\u0435\u043a\u0430\u0431\u0440[\u044c\u044f]|\u0434\u0435\u043a\.?)/i,monthsStrictRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044f\u044c]|\u0444\u0435\u0432\u0440\u0430\u043b[\u044f\u044c]|\u043c\u0430\u0440\u0442\u0430?|\u0430\u043f\u0440\u0435\u043b[\u044f\u044c]|\u043c\u0430[\u044f\u0439]|\u0438\u044e\u043d[\u044f\u044c]|\u0438\u044e\u043b[\u044f\u044c]|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044f\u044c]|\u043e\u043a\u0442\u044f\u0431\u0440[\u044f\u044c]|\u043d\u043e\u044f\u0431\u0440[\u044f\u044c]|\u0434\u0435\u043a\u0430\u0431\u0440[\u044f\u044c])/i,monthsShortStrictRegex:/^(\u044f\u043d\u0432\.|\u0444\u0435\u0432\u0440?\.|\u043c\u0430\u0440[\u0442.]|\u0430\u043f\u0440\.|\u043c\u0430[\u044f\u0439]|\u0438\u044e\u043d[\u044c\u044f.]|\u0438\u044e\u043b[\u044c\u044f.]|\u0430\u0432\u0433\.|\u0441\u0435\u043d\u0442?\.|\u043e\u043a\u0442\.|\u043d\u043e\u044f\u0431?\.|\u0434\u0435\u043a\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., H:mm",LLLL:"dddd, D MMMM YYYY \u0433., H:mm"},calendar:{sameDay:"[\u0421\u0435\u0433\u043e\u0434\u043d\u044f, \u0432] LT",nextDay:"[\u0417\u0430\u0432\u0442\u0440\u0430, \u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430, \u0432] LT",nextWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[\u0412\u043e] dddd, [\u0432] LT":"[\u0412] dddd, [\u0432] LT";switch(this.day()){case 0:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435] dddd, [\u0432] LT";case 1:case 2:case 4:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439] dddd, [\u0432] LT";case 3:case 5:case 6:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e] dddd, [\u0432] LT"}},lastWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[\u0412\u043e] dddd, [\u0432] LT":"[\u0412] dddd, [\u0432] LT";switch(this.day()){case 0:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0435] dddd, [\u0432] LT";case 1:case 2:case 4:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0439] dddd, [\u0432] LT";case 3:case 5:case 6:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u0443\u044e] dddd, [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0447\u0435\u0440\u0435\u0437 %s",past:"%s \u043d\u0430\u0437\u0430\u0434",s:"\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434",ss:kn,m:kn,mm:kn,h:"\u0447\u0430\u0441",hh:kn,d:"\u0434\u0435\u043d\u044c",dd:kn,w:"\u043d\u0435\u0434\u0435\u043b\u044f",ww:kn,M:"\u043c\u0435\u0441\u044f\u0446",MM:kn,y:"\u0433\u043e\u0434",yy:kn},meridiemParse:/\u043d\u043e\u0447\u0438|\u0443\u0442\u0440\u0430|\u0434\u043d\u044f|\u0432\u0435\u0447\u0435\u0440\u0430/i,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0435\u0440\u0430)$/.test(e)},meridiem:function(e,a,t){return e<4?"\u043d\u043e\u0447\u0438":e<12?"\u0443\u0442\u0440\u0430":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0435\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0439|\u0433\u043e|\u044f)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":return e+"-\u0439";case"D":return e+"-\u0433\u043e";case"w":case"W":return e+"-\u044f";default:return e}},week:{dow:1,doy:4}}),Y=["\u062c\u0646\u0648\u0631\u064a","\u0641\u064a\u0628\u0631\u0648\u0631\u064a","\u0645\u0627\u0631\u0686","\u0627\u067e\u0631\u064a\u0644","\u0645\u0626\u064a","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0621\u0650","\u0622\u06af\u0633\u067d","\u0633\u064a\u067e\u067d\u0645\u0628\u0631","\u0622\u06aa\u067d\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u068a\u0633\u0645\u0628\u0631"],Ke=["\u0622\u0686\u0631","\u0633\u0648\u0645\u0631","\u0627\u06b1\u0627\u0631\u0648","\u0627\u0631\u0628\u0639","\u062e\u0645\u064a\u0633","\u062c\u0645\u0639","\u0687\u0646\u0687\u0631"],M.defineLocale("sd",{months:Y,monthsShort:Y,weekdays:Ke,weekdaysShort:Ke,weekdaysMin:Ke,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd\u060c D MMMM YYYY HH:mm"},meridiemParse:/\u0635\u0628\u062d|\u0634\u0627\u0645/,isPM:function(e){return"\u0634\u0627\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635\u0628\u062d":"\u0634\u0627\u0645"},calendar:{sameDay:"[\u0627\u0684] LT",nextDay:"[\u0633\u0680\u0627\u06bb\u064a] LT",nextWeek:"dddd [\u0627\u06b3\u064a\u0646 \u0647\u0641\u062a\u064a \u062a\u064a] LT",lastDay:"[\u06aa\u0627\u0644\u0647\u0647] LT",lastWeek:"[\u06af\u0632\u0631\u064a\u0644 \u0647\u0641\u062a\u064a] dddd [\u062a\u064a] LT",sameElse:"L"},relativeTime:{future:"%s \u067e\u0648\u0621",past:"%s \u0627\u06b3",s:"\u0686\u0646\u062f \u0633\u064a\u06aa\u0646\u068a",ss:"%d \u0633\u064a\u06aa\u0646\u068a",m:"\u0647\u06aa \u0645\u0646\u067d",mm:"%d \u0645\u0646\u067d",h:"\u0647\u06aa \u06aa\u0644\u0627\u06aa",hh:"%d \u06aa\u0644\u0627\u06aa",d:"\u0647\u06aa \u068f\u064a\u0646\u0647\u0646",dd:"%d \u068f\u064a\u0646\u0647\u0646",M:"\u0647\u06aa \u0645\u0647\u064a\u0646\u0648",MM:"%d \u0645\u0647\u064a\u0646\u0627",y:"\u0647\u06aa \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:4}}),M.defineLocale("se",{months:"o\u0111\u0111ajagem\xe1nnu_guovvam\xe1nnu_njuk\u010dam\xe1nnu_cuo\u014bom\xe1nnu_miessem\xe1nnu_geassem\xe1nnu_suoidnem\xe1nnu_borgem\xe1nnu_\u010dak\u010dam\xe1nnu_golggotm\xe1nnu_sk\xe1bmam\xe1nnu_juovlam\xe1nnu".split("_"),monthsShort:"o\u0111\u0111j_guov_njuk_cuo_mies_geas_suoi_borg_\u010dak\u010d_golg_sk\xe1b_juov".split("_"),weekdays:"sotnabeaivi_vuoss\xe1rga_ma\u014b\u014beb\xe1rga_gaskavahkku_duorastat_bearjadat_l\xe1vvardat".split("_"),weekdaysShort:"sotn_vuos_ma\u014b_gask_duor_bear_l\xe1v".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s gea\u017ees",past:"ma\u014bit %s",s:"moadde sekunddat",ss:"%d sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta m\xe1nnu",MM:"%d m\xe1nut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("si",{months:"\u0da2\u0db1\u0dc0\u0dcf\u0dbb\u0dd2_\u0db4\u0dd9\u0db6\u0dbb\u0dc0\u0dcf\u0dbb\u0dd2_\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4_\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca_\u0db8\u0dd0\u0dba\u0dd2_\u0da2\u0dd6\u0db1\u0dd2_\u0da2\u0dd6\u0dbd\u0dd2_\u0d85\u0d9c\u0ddd\u0dc3\u0dca\u0dad\u0dd4_\u0dc3\u0dd0\u0db4\u0dca\u0dad\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca_\u0d94\u0d9a\u0dca\u0dad\u0ddd\u0db6\u0dbb\u0dca_\u0db1\u0ddc\u0dc0\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca_\u0daf\u0dd9\u0dc3\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca".split("_"),monthsShort:"\u0da2\u0db1_\u0db4\u0dd9\u0db6_\u0db8\u0dcf\u0dbb\u0dca_\u0d85\u0db4\u0dca_\u0db8\u0dd0\u0dba\u0dd2_\u0da2\u0dd6\u0db1\u0dd2_\u0da2\u0dd6\u0dbd\u0dd2_\u0d85\u0d9c\u0ddd_\u0dc3\u0dd0\u0db4\u0dca_\u0d94\u0d9a\u0dca_\u0db1\u0ddc\u0dc0\u0dd0_\u0daf\u0dd9\u0dc3\u0dd0".split("_"),weekdays:"\u0d89\u0dbb\u0dd2\u0daf\u0dcf_\u0dc3\u0db3\u0dd4\u0daf\u0dcf_\u0d85\u0d9f\u0dc4\u0dbb\u0dd4\u0dc0\u0dcf\u0daf\u0dcf_\u0db6\u0daf\u0dcf\u0daf\u0dcf_\u0db6\u0dca\u200d\u0dbb\u0dc4\u0dc3\u0dca\u0db4\u0dad\u0dd2\u0db1\u0dca\u0daf\u0dcf_\u0dc3\u0dd2\u0d9a\u0dd4\u0dbb\u0dcf\u0daf\u0dcf_\u0dc3\u0dd9\u0db1\u0dc3\u0dd4\u0dbb\u0dcf\u0daf\u0dcf".split("_"),weekdaysShort:"\u0d89\u0dbb\u0dd2_\u0dc3\u0db3\u0dd4_\u0d85\u0d9f_\u0db6\u0daf\u0dcf_\u0db6\u0dca\u200d\u0dbb\u0dc4_\u0dc3\u0dd2\u0d9a\u0dd4_\u0dc3\u0dd9\u0db1".split("_"),weekdaysMin:"\u0d89_\u0dc3_\u0d85_\u0db6_\u0db6\u0dca\u200d\u0dbb_\u0dc3\u0dd2_\u0dc3\u0dd9".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [\u0dc0\u0dd0\u0db1\u0dd2] dddd, a h:mm:ss"},calendar:{sameDay:"[\u0d85\u0daf] LT[\u0da7]",nextDay:"[\u0dc4\u0dd9\u0da7] LT[\u0da7]",nextWeek:"dddd LT[\u0da7]",lastDay:"[\u0d8a\u0dba\u0dda] LT[\u0da7]",lastWeek:"[\u0db4\u0dc3\u0dd4\u0d9c\u0dd2\u0dba] dddd LT[\u0da7]",sameElse:"L"},relativeTime:{future:"%s\u0d9a\u0dd2\u0db1\u0dca",past:"%s\u0d9a\u0da7 \u0db4\u0dd9\u0dbb",s:"\u0dad\u0dad\u0dca\u0db4\u0dbb \u0d9a\u0dd2\u0dc4\u0dd2\u0db4\u0dba",ss:"\u0dad\u0dad\u0dca\u0db4\u0dbb %d",m:"\u0db8\u0dd2\u0db1\u0dd2\u0dad\u0dca\u0dad\u0dd4\u0dc0",mm:"\u0db8\u0dd2\u0db1\u0dd2\u0dad\u0dca\u0dad\u0dd4 %d",h:"\u0db4\u0dd0\u0dba",hh:"\u0db4\u0dd0\u0dba %d",d:"\u0daf\u0dd2\u0db1\u0dba",dd:"\u0daf\u0dd2\u0db1 %d",M:"\u0db8\u0dcf\u0dc3\u0dba",MM:"\u0db8\u0dcf\u0dc3 %d",y:"\u0dc0\u0dc3\u0dbb",yy:"\u0dc0\u0dc3\u0dbb %d"},dayOfMonthOrdinalParse:/\d{1,2} \u0dc0\u0dd0\u0db1\u0dd2/,ordinal:function(e){return e+" \u0dc0\u0dd0\u0db1\u0dd2"},meridiemParse:/\u0db4\u0dd9\u0dbb \u0dc0\u0dbb\u0dd4|\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4|\u0db4\u0dd9.\u0dc0|\u0db4.\u0dc0./,isPM:function(e){return"\u0db4.\u0dc0."===e||"\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4"===e},meridiem:function(e,a,t){return 11<e?t?"\u0db4.\u0dc0.":"\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4":t?"\u0db4\u0dd9.\u0dc0.":"\u0db4\u0dd9\u0dbb \u0dc0\u0dbb\u0dd4"}}),Ht="janu\xe1r_febru\xe1r_marec_apr\xedl_m\xe1j_j\xfan_j\xfal_august_september_okt\xf3ber_november_december".split("_"),r="jan_feb_mar_apr_m\xe1j_j\xfan_j\xfal_aug_sep_okt_nov_dec".split("_");function Dn(e){return 1<e&&e<5}function Tn(e,a,t,s){var n=e+" ";switch(t){case"s":return a||s?"p\xe1r sek\xfand":"p\xe1r sekundami";case"ss":return a||s?n+(Dn(e)?"sekundy":"sek\xfand"):n+"sekundami";case"m":return a?"min\xfata":s?"min\xfatu":"min\xfatou";case"mm":return a||s?n+(Dn(e)?"min\xfaty":"min\xfat"):n+"min\xfatami";case"h":return a?"hodina":s?"hodinu":"hodinou";case"hh":return a||s?n+(Dn(e)?"hodiny":"hod\xedn"):n+"hodinami";case"d":return a||s?"de\u0148":"d\u0148om";case"dd":return a||s?n+(Dn(e)?"dni":"dn\xed"):n+"d\u0148ami";case"M":return a||s?"mesiac":"mesiacom";case"MM":return a||s?n+(Dn(e)?"mesiace":"mesiacov"):n+"mesiacmi";case"y":return a||s?"rok":"rokom";case"yy":return a||s?n+(Dn(e)?"roky":"rokov"):n+"rokmi"}}function gn(e,a,t,s){var n=e+" ";switch(t){case"s":return a||s?"nekaj sekund":"nekaj sekundami";case"ss":return n+=1===e?a?"sekundo":"sekundi":2===e?a||s?"sekundi":"sekundah":e<5?a||s?"sekunde":"sekundah":"sekund";case"m":return a?"ena minuta":"eno minuto";case"mm":return n+=1===e?a?"minuta":"minuto":2===e?a||s?"minuti":"minutama":e<5?a||s?"minute":"minutami":a||s?"minut":"minutami";case"h":return a?"ena ura":"eno uro";case"hh":return n+=1===e?a?"ura":"uro":2===e?a||s?"uri":"urama":e<5?a||s?"ure":"urami":a||s?"ur":"urami";case"d":return a||s?"en dan":"enim dnem";case"dd":return n+=1===e?a||s?"dan":"dnem":2===e?a||s?"dni":"dnevoma":a||s?"dni":"dnevi";case"M":return a||s?"en mesec":"enim mesecem";case"MM":return n+=1===e?a||s?"mesec":"mesecem":2===e?a||s?"meseca":"mesecema":e<5?a||s?"mesece":"meseci":a||s?"mesecev":"meseci";case"y":return a||s?"eno leto":"enim letom";case"yy":return n+=1===e?a||s?"leto":"letom":2===e?a||s?"leti":"letoma":e<5?a||s?"leta":"leti":a||s?"let":"leti"}}M.defineLocale("sk",{months:Ht,monthsShort:r,weekdays:"nede\u013ea_pondelok_utorok_streda_\u0161tvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_\u0161t_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_\u0161t_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nede\u013eu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo \u0161tvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[v\u010dera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minul\xfa nede\u013eu o] LT";case 1:case 2:return"[minul\xfd] dddd [o] LT";case 3:return"[minul\xfa stredu o] LT";case 4:case 5:return"[minul\xfd] dddd [o] LT";case 6:return"[minul\xfa sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:Tn,ss:Tn,m:Tn,mm:Tn,h:Tn,hh:Tn,d:Tn,dd:Tn,M:Tn,MM:Tn,y:Tn,yy:Tn},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_\u010detrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._\u010det._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_\u010de_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[v\u010deraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prej\u0161njo] [nedeljo] [ob] LT";case 3:return"[prej\u0161njo] [sredo] [ob] LT";case 6:return"[prej\u0161njo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prej\u0161nji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"\u010dez %s",past:"pred %s",s:gn,ss:gn,m:gn,mm:gn,h:gn,hh:gn,d:gn,dd:gn,M:gn,MM:gn,y:gn,yy:gn},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),M.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_N\xebntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_N\xebn_Dhj".split("_"),weekdays:"E Diel_E H\xebn\xeb_E Mart\xeb_E M\xebrkur\xeb_E Enjte_E Premte_E Shtun\xeb".split("_"),weekdaysShort:"Die_H\xebn_Mar_M\xebr_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_M\xeb_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(e){return"M"===e.charAt(0)},meridiem:function(e,a,t){return e<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot n\xeb] LT",nextDay:"[Nes\xebr n\xeb] LT",nextWeek:"dddd [n\xeb] LT",lastDay:"[Dje n\xeb] LT",lastWeek:"dddd [e kaluar n\xeb] LT",sameElse:"L"},relativeTime:{future:"n\xeb %s",past:"%s m\xeb par\xeb",s:"disa sekonda",ss:"%d sekonda",m:"nj\xeb minut\xeb",mm:"%d minuta",h:"nj\xeb or\xeb",hh:"%d or\xeb",d:"nj\xeb dit\xeb",dd:"%d dit\xeb",M:"nj\xeb muaj",MM:"%d muaj",y:"nj\xeb vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var W={words:{ss:["\u0441\u0435\u043a\u0443\u043d\u0434\u0430","\u0441\u0435\u043a\u0443\u043d\u0434\u0435","\u0441\u0435\u043a\u0443\u043d\u0434\u0438"],m:["\u0458\u0435\u0434\u0430\u043d \u043c\u0438\u043d\u0443\u0442","\u0458\u0435\u0434\u043d\u043e\u0433 \u043c\u0438\u043d\u0443\u0442\u0430"],mm:["\u043c\u0438\u043d\u0443\u0442","\u043c\u0438\u043d\u0443\u0442\u0430","\u043c\u0438\u043d\u0443\u0442\u0430"],h:["\u0458\u0435\u0434\u0430\u043d \u0441\u0430\u0442","\u0458\u0435\u0434\u043d\u043e\u0433 \u0441\u0430\u0442\u0430"],hh:["\u0441\u0430\u0442","\u0441\u0430\u0442\u0430","\u0441\u0430\u0442\u0438"],d:["\u0458\u0435\u0434\u0430\u043d \u0434\u0430\u043d","\u0458\u0435\u0434\u043d\u043e\u0433 \u0434\u0430\u043d\u0430"],dd:["\u0434\u0430\u043d","\u0434\u0430\u043d\u0430","\u0434\u0430\u043d\u0430"],M:["\u0458\u0435\u0434\u0430\u043d \u043c\u0435\u0441\u0435\u0446","\u0458\u0435\u0434\u043d\u043e\u0433 \u043c\u0435\u0441\u0435\u0446\u0430"],MM:["\u043c\u0435\u0441\u0435\u0446","\u043c\u0435\u0441\u0435\u0446\u0430","\u043c\u0435\u0441\u0435\u0446\u0438"],y:["\u0458\u0435\u0434\u043d\u0443 \u0433\u043e\u0434\u0438\u043d\u0443","\u0458\u0435\u0434\u043d\u0435 \u0433\u043e\u0434\u0438\u043d\u0435"],yy:["\u0433\u043e\u0434\u0438\u043d\u0443","\u0433\u043e\u0434\u0438\u043d\u0435","\u0433\u043e\u0434\u0438\u043d\u0430"]},correctGrammaticalCase:function(e,a){return 1<=e%10&&e%10<=4&&(e%100<10||20<=e%100)?e%10==1?a[0]:a[1]:a[2]},translate:function(e,a,t,s){var n=W.words[t];return 1===t.length?"y"===t&&a?"\u0458\u0435\u0434\u043d\u0430 \u0433\u043e\u0434\u0438\u043d\u0430":s||a?n[0]:n[1]:(s=W.correctGrammaticalCase(e,n),"yy"===t&&a&&"\u0433\u043e\u0434\u0438\u043d\u0443"===s?e+" \u0433\u043e\u0434\u0438\u043d\u0430":e+" "+s)}},A=(M.defineLocale("sr-cyrl",{months:"\u0458\u0430\u043d\u0443\u0430\u0440_\u0444\u0435\u0431\u0440\u0443\u0430\u0440_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440_\u043e\u043a\u0442\u043e\u0431\u0430\u0440_\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440_\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440".split("_"),monthsShort:"\u0458\u0430\u043d._\u0444\u0435\u0431._\u043c\u0430\u0440._\u0430\u043f\u0440._\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433._\u0441\u0435\u043f._\u043e\u043a\u0442._\u043d\u043e\u0432._\u0434\u0435\u0446.".split("_"),monthsParseExact:!0,weekdays:"\u043d\u0435\u0434\u0435\u0459\u0430_\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a_\u0443\u0442\u043e\u0440\u0430\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a_\u043f\u0435\u0442\u0430\u043a_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434._\u043f\u043e\u043d._\u0443\u0442\u043e._\u0441\u0440\u0435._\u0447\u0435\u0442._\u043f\u0435\u0442._\u0441\u0443\u0431.".split("_"),weekdaysMin:"\u043d\u0435_\u043f\u043e_\u0443\u0442_\u0441\u0440_\u0447\u0435_\u043f\u0435_\u0441\u0443".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"},calendar:{sameDay:"[\u0434\u0430\u043d\u0430\u0441 \u0443] LT",nextDay:"[\u0441\u0443\u0442\u0440\u0430 \u0443] LT",nextWeek:function(){switch(this.day()){case 0:return"[\u0443] [\u043d\u0435\u0434\u0435\u0459\u0443] [\u0443] LT";case 3:return"[\u0443] [\u0441\u0440\u0435\u0434\u0443] [\u0443] LT";case 6:return"[\u0443] [\u0441\u0443\u0431\u043e\u0442\u0443] [\u0443] LT";case 1:case 2:case 4:case 5:return"[\u0443] dddd [\u0443] LT"}},lastDay:"[\u0458\u0443\u0447\u0435 \u0443] LT",lastWeek:function(){return["[\u043f\u0440\u043e\u0448\u043b\u0435] [\u043d\u0435\u0434\u0435\u0459\u0435] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u0443\u0442\u043e\u0440\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u0435] [\u0441\u0440\u0435\u0434\u0435] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u0447\u0435\u0442\u0432\u0440\u0442\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u043f\u0435\u0442\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u0435] [\u0441\u0443\u0431\u043e\u0442\u0435] [\u0443] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"\u043f\u0440\u0435 %s",s:"\u043d\u0435\u043a\u043e\u043b\u0438\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:W.translate,m:W.translate,mm:W.translate,h:W.translate,hh:W.translate,d:W.translate,dd:W.translate,M:W.translate,MM:W.translate,y:W.translate,yy:W.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),{words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],d:["jedan dan","jednog dana"],dd:["dan","dana","dana"],M:["jedan mesec","jednog meseca"],MM:["mesec","meseca","meseci"],y:["jednu godinu","jedne godine"],yy:["godinu","godine","godina"]},correctGrammaticalCase:function(e,a){return 1<=e%10&&e%10<=4&&(e%100<10||20<=e%100)?e%10==1?a[0]:a[1]:a[2]},translate:function(e,a,t,s){var n=A.words[t];return 1===t.length?"y"===t&&a?"jedna godina":s||a?n[0]:n[1]:(s=A.correctGrammaticalCase(e,n),"yy"===t&&a&&"godinu"===s?e+" godina":e+" "+s)}}),wn=(M.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010de u] LT",lastWeek:function(){return["[pro\u0161le] [nedelje] [u] LT","[pro\u0161log] [ponedeljka] [u] LT","[pro\u0161log] [utorka] [u] LT","[pro\u0161le] [srede] [u] LT","[pro\u0161log] [\u010detvrtka] [u] LT","[pro\u0161log] [petka] [u] LT","[pro\u0161le] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:A.translate,m:A.translate,mm:A.translate,h:A.translate,hh:A.translate,d:A.translate,dd:A.translate,M:A.translate,MM:A.translate,y:A.translate,yy:A.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),M.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",ss:"%d mzuzwana",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(e,a,t){return e<11?"ekuseni":e<15?"emini":e<19?"entsambama":"ebusuku"},meridiemHour:function(e,a){return 12===e&&(e=0),"ekuseni"===a?e:"emini"===a?11<=e?e:e+12:"entsambama"===a||"ebusuku"===a?0===e?0:e+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}}),M.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"s\xf6ndag_m\xe5ndag_tisdag_onsdag_torsdag_fredag_l\xf6rdag".split("_"),weekdaysShort:"s\xf6n_m\xe5n_tis_ons_tor_fre_l\xf6r".split("_"),weekdaysMin:"s\xf6_m\xe5_ti_on_to_fr_l\xf6".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Ig\xe5r] LT",nextWeek:"[P\xe5] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"f\xf6r %s sedan",s:"n\xe5gra sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en m\xe5nad",MM:"%d m\xe5nader",y:"ett \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}(\:e|\:a)/,ordinal:function(e){var a=e%10;return e+(1!=~~(e%100/10)&&(1==a||2==a)?":a":":e")},week:{dow:1,doy:4}}),M.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"hh:mm A",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",ss:"sekunde %d",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"siku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}}),{1:"\u0be7",2:"\u0be8",3:"\u0be9",4:"\u0bea",5:"\u0beb",6:"\u0bec",7:"\u0bed",8:"\u0bee",9:"\u0bef",0:"\u0be6"}),bn={"\u0be7":"1","\u0be8":"2","\u0be9":"3","\u0bea":"4","\u0beb":"5","\u0bec":"6","\u0bed":"7","\u0bee":"8","\u0bef":"9","\u0be6":"0"},Sn=(M.defineLocale("ta",{months:"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf_\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf_\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd_\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd_\u0bae\u0bc7_\u0b9c\u0bc2\u0ba9\u0bcd_\u0b9c\u0bc2\u0bb2\u0bc8_\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd_\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bc6\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b85\u0b95\u0bcd\u0b9f\u0bc7\u0bbe\u0baa\u0bb0\u0bcd_\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd".split("_"),monthsShort:"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf_\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf_\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd_\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd_\u0bae\u0bc7_\u0b9c\u0bc2\u0ba9\u0bcd_\u0b9c\u0bc2\u0bb2\u0bc8_\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd_\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bc6\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b85\u0b95\u0bcd\u0b9f\u0bc7\u0bbe\u0baa\u0bb0\u0bcd_\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd".split("_"),weekdays:"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bcd\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0b9f\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0baa\u0bc1\u0ba4\u0ba9\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0b9a\u0ba9\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8".split("_"),weekdaysShort:"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1_\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd_\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd_\u0baa\u0bc1\u0ba4\u0ba9\u0bcd_\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd_\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf_\u0b9a\u0ba9\u0bbf".split("_"),weekdaysMin:"\u0b9e\u0bbe_\u0ba4\u0bbf_\u0b9a\u0bc6_\u0baa\u0bc1_\u0bb5\u0bbf_\u0bb5\u0bc6_\u0b9a".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[\u0b87\u0ba9\u0bcd\u0bb1\u0bc1] LT",nextDay:"[\u0ba8\u0bbe\u0bb3\u0bc8] LT",nextWeek:"dddd, LT",lastDay:"[\u0ba8\u0bc7\u0bb1\u0bcd\u0bb1\u0bc1] LT",lastWeek:"[\u0b95\u0b9f\u0ba8\u0bcd\u0ba4 \u0bb5\u0bbe\u0bb0\u0bae\u0bcd] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0b87\u0bb2\u0bcd",past:"%s \u0bae\u0bc1\u0ba9\u0bcd",s:"\u0b92\u0bb0\u0bc1 \u0b9a\u0bbf\u0bb2 \u0bb5\u0bbf\u0ba8\u0bbe\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",ss:"%d \u0bb5\u0bbf\u0ba8\u0bbe\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",m:"\u0b92\u0bb0\u0bc1 \u0ba8\u0bbf\u0bae\u0bbf\u0b9f\u0bae\u0bcd",mm:"%d \u0ba8\u0bbf\u0bae\u0bbf\u0b9f\u0b99\u0bcd\u0b95\u0bb3\u0bcd",h:"\u0b92\u0bb0\u0bc1 \u0bae\u0ba3\u0bbf \u0ba8\u0bc7\u0bb0\u0bae\u0bcd",hh:"%d \u0bae\u0ba3\u0bbf \u0ba8\u0bc7\u0bb0\u0bae\u0bcd",d:"\u0b92\u0bb0\u0bc1 \u0ba8\u0bbe\u0bb3\u0bcd",dd:"%d \u0ba8\u0bbe\u0b9f\u0bcd\u0b95\u0bb3\u0bcd",M:"\u0b92\u0bb0\u0bc1 \u0bae\u0bbe\u0ba4\u0bae\u0bcd",MM:"%d \u0bae\u0bbe\u0ba4\u0b99\u0bcd\u0b95\u0bb3\u0bcd",y:"\u0b92\u0bb0\u0bc1 \u0bb5\u0bb0\u0bc1\u0b9f\u0bae\u0bcd",yy:"%d \u0b86\u0ba3\u0bcd\u0b9f\u0bc1\u0b95\u0bb3\u0bcd"},dayOfMonthOrdinalParse:/\d{1,2}\u0bb5\u0ba4\u0bc1/,ordinal:function(e){return e+"\u0bb5\u0ba4\u0bc1"},preparse:function(e){return e.replace(/[\u0be7\u0be8\u0be9\u0bea\u0beb\u0bec\u0bed\u0bee\u0bef\u0be6]/g,function(e){return bn[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return wn[e]})},meridiemParse:/\u0baf\u0bbe\u0bae\u0bae\u0bcd|\u0bb5\u0bc8\u0b95\u0bb1\u0bc8|\u0b95\u0bbe\u0bb2\u0bc8|\u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd|\u0b8e\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1|\u0bae\u0bbe\u0bb2\u0bc8/,meridiem:function(e,a,t){return e<2?" \u0baf\u0bbe\u0bae\u0bae\u0bcd":e<6?" \u0bb5\u0bc8\u0b95\u0bb1\u0bc8":e<10?" \u0b95\u0bbe\u0bb2\u0bc8":e<14?" \u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd":e<18?" \u0b8e\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1":e<22?" \u0bae\u0bbe\u0bb2\u0bc8":" \u0baf\u0bbe\u0bae\u0bae\u0bcd"},meridiemHour:function(e,a){return 12===e&&(e=0),"\u0baf\u0bbe\u0bae\u0bae\u0bcd"===a?e<2?e:e+12:"\u0bb5\u0bc8\u0b95\u0bb1\u0bc8"===a||"\u0b95\u0bbe\u0bb2\u0bc8"===a||"\u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd"===a&&10<=e?e:e+12},week:{dow:0,doy:6}}),M.defineLocale("te",{months:"\u0c1c\u0c28\u0c35\u0c30\u0c3f_\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f_\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f_\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d_\u0c2e\u0c47_\u0c1c\u0c42\u0c28\u0c4d_\u0c1c\u0c41\u0c32\u0c48_\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41_\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d_\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d_\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d_\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d".split("_"),monthsShort:"\u0c1c\u0c28._\u0c2b\u0c3f\u0c2c\u0c4d\u0c30._\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f_\u0c0f\u0c2a\u0c4d\u0c30\u0c3f._\u0c2e\u0c47_\u0c1c\u0c42\u0c28\u0c4d_\u0c1c\u0c41\u0c32\u0c48_\u0c06\u0c17._\u0c38\u0c46\u0c2a\u0c4d._\u0c05\u0c15\u0c4d\u0c1f\u0c4b._\u0c28\u0c35._\u0c21\u0c3f\u0c38\u0c46.".split("_"),monthsParseExact:!0,weekdays:"\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02_\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02_\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02_\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02_\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02_\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02_\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02".split("_"),weekdaysShort:"\u0c06\u0c26\u0c3f_\u0c38\u0c4b\u0c2e_\u0c2e\u0c02\u0c17\u0c33_\u0c2c\u0c41\u0c27_\u0c17\u0c41\u0c30\u0c41_\u0c36\u0c41\u0c15\u0c4d\u0c30_\u0c36\u0c28\u0c3f".split("_"),weekdaysMin:"\u0c06_\u0c38\u0c4b_\u0c2e\u0c02_\u0c2c\u0c41_\u0c17\u0c41_\u0c36\u0c41_\u0c36".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0c28\u0c47\u0c21\u0c41] LT",nextDay:"[\u0c30\u0c47\u0c2a\u0c41] LT",nextWeek:"dddd, LT",lastDay:"[\u0c28\u0c3f\u0c28\u0c4d\u0c28] LT",lastWeek:"[\u0c17\u0c24] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0c32\u0c4b",past:"%s \u0c15\u0c4d\u0c30\u0c3f\u0c24\u0c02",s:"\u0c15\u0c4a\u0c28\u0c4d\u0c28\u0c3f \u0c15\u0c4d\u0c37\u0c23\u0c3e\u0c32\u0c41",ss:"%d \u0c38\u0c46\u0c15\u0c28\u0c4d\u0c32\u0c41",m:"\u0c12\u0c15 \u0c28\u0c3f\u0c2e\u0c3f\u0c37\u0c02",mm:"%d \u0c28\u0c3f\u0c2e\u0c3f\u0c37\u0c3e\u0c32\u0c41",h:"\u0c12\u0c15 \u0c17\u0c02\u0c1f",hh:"%d \u0c17\u0c02\u0c1f\u0c32\u0c41",d:"\u0c12\u0c15 \u0c30\u0c4b\u0c1c\u0c41",dd:"%d \u0c30\u0c4b\u0c1c\u0c41\u0c32\u0c41",M:"\u0c12\u0c15 \u0c28\u0c46\u0c32",MM:"%d \u0c28\u0c46\u0c32\u0c32\u0c41",y:"\u0c12\u0c15 \u0c38\u0c02\u0c35\u0c24\u0c4d\u0c38\u0c30\u0c02",yy:"%d \u0c38\u0c02\u0c35\u0c24\u0c4d\u0c38\u0c30\u0c3e\u0c32\u0c41"},dayOfMonthOrdinalParse:/\d{1,2}\u0c35/,ordinal:"%d\u0c35",meridiemParse:/\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f|\u0c09\u0c26\u0c2f\u0c02|\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02|\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f"===a?e<4?e:e+12:"\u0c09\u0c26\u0c2f\u0c02"===a?e:"\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02"===a?10<=e?e:e+12:"\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f":e<10?"\u0c09\u0c26\u0c2f\u0c02":e<17?"\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02":e<20?"\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02":"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f"},week:{dow:0,doy:6}}),M.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Ju\xf1u_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"segundu balun",ss:"segundu %d",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),{0:"-\u0443\u043c",1:"-\u0443\u043c",2:"-\u044e\u043c",3:"-\u044e\u043c",4:"-\u0443\u043c",5:"-\u0443\u043c",6:"-\u0443\u043c",7:"-\u0443\u043c",8:"-\u0443\u043c",9:"-\u0443\u043c",10:"-\u0443\u043c",12:"-\u0443\u043c",13:"-\u0443\u043c",20:"-\u0443\u043c",30:"-\u044e\u043c",40:"-\u0443\u043c",50:"-\u0443\u043c",60:"-\u0443\u043c",70:"-\u0443\u043c",80:"-\u0443\u043c",90:"-\u0443\u043c",100:"-\u0443\u043c"}),Hn=(M.defineLocale("tg",{months:{format:"\u044f\u043d\u0432\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0430\u043b\u0438_\u043c\u0430\u0440\u0442\u0438_\u0430\u043f\u0440\u0435\u043b\u0438_\u043c\u0430\u0439\u0438_\u0438\u044e\u043d\u0438_\u0438\u044e\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442\u0438_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u0438_\u043e\u043a\u0442\u044f\u0431\u0440\u0438_\u043d\u043e\u044f\u0431\u0440\u0438_\u0434\u0435\u043a\u0430\u0431\u0440\u0438".split("_"),standalone:"\u044f\u043d\u0432\u0430\u0440_\u0444\u0435\u0432\u0440\u0430\u043b_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440_\u043e\u043a\u0442\u044f\u0431\u0440_\u043d\u043e\u044f\u0431\u0440_\u0434\u0435\u043a\u0430\u0431\u0440".split("_")},monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u044f\u043a\u0448\u0430\u043d\u0431\u0435_\u0434\u0443\u0448\u0430\u043d\u0431\u0435_\u0441\u0435\u0448\u0430\u043d\u0431\u0435_\u0447\u043e\u0440\u0448\u0430\u043d\u0431\u0435_\u043f\u0430\u043d\u04b7\u0448\u0430\u043d\u0431\u0435_\u04b7\u0443\u043c\u044a\u0430_\u0448\u0430\u043d\u0431\u0435".split("_"),weekdaysShort:"\u044f\u0448\u0431_\u0434\u0448\u0431_\u0441\u0448\u0431_\u0447\u0448\u0431_\u043f\u0448\u0431_\u04b7\u0443\u043c_\u0448\u043d\u0431".split("_"),weekdaysMin:"\u044f\u0448_\u0434\u0448_\u0441\u0448_\u0447\u0448_\u043f\u0448_\u04b7\u043c_\u0448\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0418\u043c\u0440\u04ef\u0437 \u0441\u043e\u0430\u0442\u0438] LT",nextDay:"[\u0424\u0430\u0440\u0434\u043e \u0441\u043e\u0430\u0442\u0438] LT",lastDay:"[\u0414\u0438\u0440\u04ef\u0437 \u0441\u043e\u0430\u0442\u0438] LT",nextWeek:"dddd[\u0438] [\u04b3\u0430\u0444\u0442\u0430\u0438 \u043e\u044f\u043d\u0434\u0430 \u0441\u043e\u0430\u0442\u0438] LT",lastWeek:"dddd[\u0438] [\u04b3\u0430\u0444\u0442\u0430\u0438 \u0433\u0443\u0437\u0430\u0448\u0442\u0430 \u0441\u043e\u0430\u0442\u0438] LT",sameElse:"L"},relativeTime:{future:"\u0431\u0430\u044a\u0434\u0438 %s",past:"%s \u043f\u0435\u0448",s:"\u044f\u043a\u0447\u0430\u043d\u0434 \u0441\u043e\u043d\u0438\u044f",m:"\u044f\u043a \u0434\u0430\u049b\u0438\u049b\u0430",mm:"%d \u0434\u0430\u049b\u0438\u049b\u0430",h:"\u044f\u043a \u0441\u043e\u0430\u0442",hh:"%d \u0441\u043e\u0430\u0442",d:"\u044f\u043a \u0440\u04ef\u0437",dd:"%d \u0440\u04ef\u0437",M:"\u044f\u043a \u043c\u043e\u04b3",MM:"%d \u043c\u043e\u04b3",y:"\u044f\u043a \u0441\u043e\u043b",yy:"%d \u0441\u043e\u043b"},meridiemParse:/\u0448\u0430\u0431|\u0441\u0443\u0431\u04b3|\u0440\u04ef\u0437|\u0431\u0435\u0433\u043e\u04b3/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0448\u0430\u0431"===a?e<4?e:e+12:"\u0441\u0443\u0431\u04b3"===a?e:"\u0440\u04ef\u0437"===a?11<=e?e:e+12:"\u0431\u0435\u0433\u043e\u04b3"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0448\u0430\u0431":e<11?"\u0441\u0443\u0431\u04b3":e<16?"\u0440\u04ef\u0437":e<19?"\u0431\u0435\u0433\u043e\u04b3":"\u0448\u0430\u0431"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0443\u043c|\u044e\u043c)/,ordinal:function(e){return e+(Sn[e]||Sn[e%10]||Sn[100<=e?100:null])},week:{dow:1,doy:7}}),M.defineLocale("th",{months:"\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21_\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c_\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21_\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19_\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21_\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19_\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21_\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21_\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19_\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21_\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19_\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21".split("_"),monthsShort:"\u0e21.\u0e04._\u0e01.\u0e1e._\u0e21\u0e35.\u0e04._\u0e40\u0e21.\u0e22._\u0e1e.\u0e04._\u0e21\u0e34.\u0e22._\u0e01.\u0e04._\u0e2a.\u0e04._\u0e01.\u0e22._\u0e15.\u0e04._\u0e1e.\u0e22._\u0e18.\u0e04.".split("_"),monthsParseExact:!0,weekdays:"\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c_\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c_\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23_\u0e1e\u0e38\u0e18_\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35_\u0e28\u0e38\u0e01\u0e23\u0e4c_\u0e40\u0e2a\u0e32\u0e23\u0e4c".split("_"),weekdaysShort:"\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c_\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c_\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23_\u0e1e\u0e38\u0e18_\u0e1e\u0e24\u0e2b\u0e31\u0e2a_\u0e28\u0e38\u0e01\u0e23\u0e4c_\u0e40\u0e2a\u0e32\u0e23\u0e4c".split("_"),weekdaysMin:"\u0e2d\u0e32._\u0e08._\u0e2d._\u0e1e._\u0e1e\u0e24._\u0e28._\u0e2a.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY \u0e40\u0e27\u0e25\u0e32 H:mm",LLLL:"\u0e27\u0e31\u0e19dddd\u0e17\u0e35\u0e48 D MMMM YYYY \u0e40\u0e27\u0e25\u0e32 H:mm"},meridiemParse:/\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07|\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07/,isPM:function(e){return"\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"===e},meridiem:function(e,a,t){return e<12?"\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07":"\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"},calendar:{sameDay:"[\u0e27\u0e31\u0e19\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",nextDay:"[\u0e1e\u0e23\u0e38\u0e48\u0e07\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",nextWeek:"dddd[\u0e2b\u0e19\u0e49\u0e32 \u0e40\u0e27\u0e25\u0e32] LT",lastDay:"[\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e27\u0e32\u0e19\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",lastWeek:"[\u0e27\u0e31\u0e19]dddd[\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27 \u0e40\u0e27\u0e25\u0e32] LT",sameElse:"L"},relativeTime:{future:"\u0e2d\u0e35\u0e01 %s",past:"%s\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27",s:"\u0e44\u0e21\u0e48\u0e01\u0e35\u0e48\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35",ss:"%d \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35",m:"1 \u0e19\u0e32\u0e17\u0e35",mm:"%d \u0e19\u0e32\u0e17\u0e35",h:"1 \u0e0a\u0e31\u0e48\u0e27\u0e42\u0e21\u0e07",hh:"%d \u0e0a\u0e31\u0e48\u0e27\u0e42\u0e21\u0e07",d:"1 \u0e27\u0e31\u0e19",dd:"%d \u0e27\u0e31\u0e19",w:"1 \u0e2a\u0e31\u0e1b\u0e14\u0e32\u0e2b\u0e4c",ww:"%d \u0e2a\u0e31\u0e1b\u0e14\u0e32\u0e2b\u0e4c",M:"1 \u0e40\u0e14\u0e37\u0e2d\u0e19",MM:"%d \u0e40\u0e14\u0e37\u0e2d\u0e19",y:"1 \u0e1b\u0e35",yy:"%d \u0e1b\u0e35"}}),{1:"'inji",5:"'inji",8:"'inji",70:"'inji",80:"'inji",2:"'nji",7:"'nji",20:"'nji",50:"'nji",3:"'\xfcnji",4:"'\xfcnji",100:"'\xfcnji",6:"'njy",9:"'unjy",10:"'unjy",30:"'unjy",60:"'ynjy",90:"'ynjy"}),vn=(M.defineLocale("tk",{months:"\xddanwar_Fewral_Mart_Aprel_Ma\xfd_I\xfdun_I\xfdul_Awgust_Sent\xfdabr_Okt\xfdabr_No\xfdabr_Dekabr".split("_"),monthsShort:"\xddan_Few_Mar_Apr_Ma\xfd_I\xfdn_I\xfdl_Awg_Sen_Okt_No\xfd_Dek".split("_"),weekdays:"\xddek\u015fenbe_Du\u015fenbe_Si\u015fenbe_\xc7ar\u015fenbe_Pen\u015fenbe_Anna_\u015eenbe".split("_"),weekdaysShort:"\xddek_Du\u015f_Si\u015f_\xc7ar_Pen_Ann_\u015een".split("_"),weekdaysMin:"\xddk_D\u015f_S\u015f_\xc7r_Pn_An_\u015en".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn sagat] LT",nextDay:"[ertir sagat] LT",nextWeek:"[indiki] dddd [sagat] LT",lastDay:"[d\xfc\xfdn] LT",lastWeek:"[ge\xe7en] dddd [sagat] LT",sameElse:"L"},relativeTime:{future:"%s so\u0148",past:"%s \xf6\u0148",s:"birn\xe4\xe7e sekunt",m:"bir minut",mm:"%d minut",h:"bir sagat",hh:"%d sagat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir a\xfd",MM:"%d a\xfd",y:"bir \xfdyl",yy:"%d \xfdyl"},ordinal:function(e,a){switch(a){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'unjy";var t=e%10;return e+(Hn[t]||Hn[e%100-t]||Hn[100<=e?100:null])}},week:{dow:1,doy:7}}),M.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}}),"pagh_wa\u2019_cha\u2019_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_"));function jn(e,a,t,s){var n=function(e){var a=Math.floor(e%1e3/100),t=Math.floor(e%100/10),e=e%10,s="";0<a&&(s+=vn[a]+"vatlh");0<t&&(s+=(""!==s?" ":"")+vn[t]+"maH");0<e&&(s+=(""!==s?" ":"")+vn[e]);return""===s?"pagh":s}(e);switch(t){case"ss":return n+" lup";case"mm":return n+" tup";case"hh":return n+" rep";case"dd":return n+" jaj";case"MM":return n+" jar";case"yy":return n+" DIS"}}M.defineLocale("tlh",{months:"tera\u2019 jar wa\u2019_tera\u2019 jar cha\u2019_tera\u2019 jar wej_tera\u2019 jar loS_tera\u2019 jar vagh_tera\u2019 jar jav_tera\u2019 jar Soch_tera\u2019 jar chorgh_tera\u2019 jar Hut_tera\u2019 jar wa\u2019maH_tera\u2019 jar wa\u2019maH wa\u2019_tera\u2019 jar wa\u2019maH cha\u2019".split("_"),monthsShort:"jar wa\u2019_jar cha\u2019_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa\u2019maH_jar wa\u2019maH wa\u2019_jar wa\u2019maH cha\u2019".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa\u2019leS] LT",nextWeek:"LLL",lastDay:"[wa\u2019Hu\u2019] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:function(e){var a=e;return a=-1!==e.indexOf("jaj")?a.slice(0,-3)+"leS":-1!==e.indexOf("jar")?a.slice(0,-3)+"waQ":-1!==e.indexOf("DIS")?a.slice(0,-3)+"nem":a+" pIq"},past:function(e){var a=e;return a=-1!==e.indexOf("jaj")?a.slice(0,-3)+"Hu\u2019":-1!==e.indexOf("jar")?a.slice(0,-3)+"wen":-1!==e.indexOf("DIS")?a.slice(0,-3)+"ben":a+" ret"},s:"puS lup",ss:jn,m:"wa\u2019 tup",mm:jn,h:"wa\u2019 rep",hh:jn,d:"wa\u2019 jaj",dd:jn,M:"wa\u2019 jar",MM:jn,y:"wa\u2019 DIS",yy:jn},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var xn={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'\xfcnc\xfc",4:"'\xfcnc\xfc",100:"'\xfcnc\xfc",6:"'nc\u0131",9:"'uncu",10:"'uncu",30:"'uncu",60:"'\u0131nc\u0131",90:"'\u0131nc\u0131"};function Pn(e,a,t,s){e={s:["viensas secunds","'iensas secunds"],ss:[e+" secunds",e+" secunds"],m:["'n m\xedut","'iens m\xedut"],mm:[e+" m\xeduts",e+" m\xeduts"],h:["'n \xfeora","'iensa \xfeora"],hh:[e+" \xfeoras",e+" \xfeoras"],d:["'n ziua","'iensa ziua"],dd:[e+" ziuas",e+" ziuas"],M:["'n mes","'iens mes"],MM:[e+" mesen",e+" mesen"],y:["'n ar","'iens ar"],yy:[e+" ars",e+" ars"]};return s||a?e[t][0]:e[t][1]}function On(e,a,t){return"m"===t?a?"\u0445\u0432\u0438\u043b\u0438\u043d\u0430":"\u0445\u0432\u0438\u043b\u0438\u043d\u0443":"h"===t?a?"\u0433\u043e\u0434\u0438\u043d\u0430":"\u0433\u043e\u0434\u0438\u043d\u0443":e+" "+(e=+e,a=(a={ss:a?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u0438_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u0438_\u0441\u0435\u043a\u0443\u043d\u0434",mm:a?"\u0445\u0432\u0438\u043b\u0438\u043d\u0430_\u0445\u0432\u0438\u043b\u0438\u043d\u0438_\u0445\u0432\u0438\u043b\u0438\u043d":"\u0445\u0432\u0438\u043b\u0438\u043d\u0443_\u0445\u0432\u0438\u043b\u0438\u043d\u0438_\u0445\u0432\u0438\u043b\u0438\u043d",hh:a?"\u0433\u043e\u0434\u0438\u043d\u0430_\u0433\u043e\u0434\u0438\u043d\u0438_\u0433\u043e\u0434\u0438\u043d":"\u0433\u043e\u0434\u0438\u043d\u0443_\u0433\u043e\u0434\u0438\u043d\u0438_\u0433\u043e\u0434\u0438\u043d",dd:"\u0434\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u043d\u0456\u0432",MM:"\u043c\u0456\u0441\u044f\u0446\u044c_\u043c\u0456\u0441\u044f\u0446\u0456_\u043c\u0456\u0441\u044f\u0446\u0456\u0432",yy:"\u0440\u0456\u043a_\u0440\u043e\u043a\u0438_\u0440\u043e\u043a\u0456\u0432"}[t]).split("_"),e%10==1&&e%100!=11?a[0]:2<=e%10&&e%10<=4&&(e%100<10||20<=e%100)?a[1]:a[2])}function Wn(e){return function(){return e+"\u043e"+(11===this.hours()?"\u0431":"")+"] LT"}}M.defineLocale("tr",{months:"Ocak_\u015eubat_Mart_Nisan_May\u0131s_Haziran_Temmuz_A\u011fustos_Eyl\xfcl_Ekim_Kas\u0131m_Aral\u0131k".split("_"),monthsShort:"Oca_\u015eub_Mar_Nis_May_Haz_Tem_A\u011fu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Sal\u0131_\xc7ar\u015famba_Per\u015fembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pzt_Sal_\xc7ar_Per_Cum_Cmt".split("_"),weekdaysMin:"Pz_Pt_Sa_\xc7a_Pe_Cu_Ct".split("_"),meridiem:function(e,a,t){return e<12?t?"\xf6\xf6":"\xd6\xd6":t?"\xf6s":"\xd6S"},meridiemParse:/\xf6\xf6|\xd6\xd6|\xf6s|\xd6S/,isPM:function(e){return"\xf6s"===e||"\xd6S"===e},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[yar\u0131n saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[d\xfcn] LT",lastWeek:"[ge\xe7en] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \xf6nce",s:"birka\xe7 saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",w:"bir hafta",ww:"%d hafta",M:"bir ay",MM:"%d ay",y:"bir y\u0131l",yy:"%d y\u0131l"},ordinal:function(e,a){switch(a){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'\u0131nc\u0131";var t=e%10;return e+(xn[t]||xn[e%100-t]||xn[100<=e?100:null])}},week:{dow:1,doy:7}}),M.defineLocale("tzl",{months:"Januar_Fevraglh_Mar\xe7_Avr\xefu_Mai_G\xfcn_Julia_Guscht_Setemvar_Listop\xe4ts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_G\xfcn_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"S\xfaladi_L\xfane\xe7i_Maitzi_M\xe1rcuri_Xh\xfaadi_Vi\xe9ner\xe7i_S\xe1turi".split("_"),weekdaysShort:"S\xfal_L\xfan_Mai_M\xe1r_Xh\xfa_Vi\xe9_S\xe1t".split("_"),weekdaysMin:"S\xfa_L\xfa_Ma_M\xe1_Xh_Vi_S\xe1".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(e){return"d'o"===e.toLowerCase()},meridiem:function(e,a,t){return 11<e?t?"d'o":"D'O":t?"d'a":"D'A"},calendar:{sameDay:"[oxhi \xe0] LT",nextDay:"[dem\xe0 \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[ieiri \xe0] LT",lastWeek:"[s\xfcr el] dddd [lasteu \xe0] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:Pn,ss:Pn,m:Pn,mm:Pn,h:Pn,hh:Pn,d:Pn,dd:Pn,M:Pn,MM:Pn,y:Pn,yy:Pn},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("tzm-latn",{months:"innayr_br\u02e4ayr\u02e4_mar\u02e4s\u02e4_ibrir_mayyw_ywnyw_ywlywz_\u0263w\u0161t_\u0161wtanbir_kt\u02e4wbr\u02e4_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_br\u02e4ayr\u02e4_mar\u02e4s\u02e4_ibrir_mayyw_ywnyw_ywlywz_\u0263w\u0161t_\u0161wtanbir_kt\u02e4wbr\u02e4_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",ss:"%d imik",m:"minu\u1e0d",mm:"%d minu\u1e0d",h:"sa\u025ba",hh:"%d tassa\u025bin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}}),M.defineLocale("tzm",{months:"\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54_\u2d31\u2d55\u2d30\u2d62\u2d55_\u2d4e\u2d30\u2d55\u2d5a_\u2d49\u2d31\u2d54\u2d49\u2d54_\u2d4e\u2d30\u2d62\u2d62\u2d53_\u2d62\u2d53\u2d4f\u2d62\u2d53_\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63_\u2d56\u2d53\u2d5b\u2d5c_\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d3d\u2d5f\u2d53\u2d31\u2d55_\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d37\u2d53\u2d4a\u2d4f\u2d31\u2d49\u2d54".split("_"),monthsShort:"\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54_\u2d31\u2d55\u2d30\u2d62\u2d55_\u2d4e\u2d30\u2d55\u2d5a_\u2d49\u2d31\u2d54\u2d49\u2d54_\u2d4e\u2d30\u2d62\u2d62\u2d53_\u2d62\u2d53\u2d4f\u2d62\u2d53_\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63_\u2d56\u2d53\u2d5b\u2d5c_\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d3d\u2d5f\u2d53\u2d31\u2d55_\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d37\u2d53\u2d4a\u2d4f\u2d31\u2d49\u2d54".split("_"),weekdays:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),weekdaysShort:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),weekdaysMin:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u2d30\u2d59\u2d37\u2d45 \u2d34] LT",nextDay:"[\u2d30\u2d59\u2d3d\u2d30 \u2d34] LT",nextWeek:"dddd [\u2d34] LT",lastDay:"[\u2d30\u2d5a\u2d30\u2d4f\u2d5c \u2d34] LT",lastWeek:"dddd [\u2d34] LT",sameElse:"L"},relativeTime:{future:"\u2d37\u2d30\u2d37\u2d45 \u2d59 \u2d62\u2d30\u2d4f %s",past:"\u2d62\u2d30\u2d4f %s",s:"\u2d49\u2d4e\u2d49\u2d3d",ss:"%d \u2d49\u2d4e\u2d49\u2d3d",m:"\u2d4e\u2d49\u2d4f\u2d53\u2d3a",mm:"%d \u2d4e\u2d49\u2d4f\u2d53\u2d3a",h:"\u2d59\u2d30\u2d44\u2d30",hh:"%d \u2d5c\u2d30\u2d59\u2d59\u2d30\u2d44\u2d49\u2d4f",d:"\u2d30\u2d59\u2d59",dd:"%d o\u2d59\u2d59\u2d30\u2d4f",M:"\u2d30\u2d62o\u2d53\u2d54",MM:"%d \u2d49\u2d62\u2d62\u2d49\u2d54\u2d4f",y:"\u2d30\u2d59\u2d33\u2d30\u2d59",yy:"%d \u2d49\u2d59\u2d33\u2d30\u2d59\u2d4f"},week:{dow:6,doy:12}}),M.defineLocale("ug-cn",{months:"\u064a\u0627\u0646\u06cb\u0627\u0631_\u0641\u06d0\u06cb\u0631\u0627\u0644_\u0645\u0627\u0631\u062a_\u0626\u0627\u067e\u0631\u06d0\u0644_\u0645\u0627\u064a_\u0626\u0649\u064a\u06c7\u0646_\u0626\u0649\u064a\u06c7\u0644_\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a_\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631_\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631_\u0646\u0648\u064a\u0627\u0628\u0649\u0631_\u062f\u06d0\u0643\u0627\u0628\u0649\u0631".split("_"),monthsShort:"\u064a\u0627\u0646\u06cb\u0627\u0631_\u0641\u06d0\u06cb\u0631\u0627\u0644_\u0645\u0627\u0631\u062a_\u0626\u0627\u067e\u0631\u06d0\u0644_\u0645\u0627\u064a_\u0626\u0649\u064a\u06c7\u0646_\u0626\u0649\u064a\u06c7\u0644_\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a_\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631_\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631_\u0646\u0648\u064a\u0627\u0628\u0649\u0631_\u062f\u06d0\u0643\u0627\u0628\u0649\u0631".split("_"),weekdays:"\u064a\u06d5\u0643\u0634\u06d5\u0646\u0628\u06d5_\u062f\u06c8\u0634\u06d5\u0646\u0628\u06d5_\u0633\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5_\u0686\u0627\u0631\u0634\u06d5\u0646\u0628\u06d5_\u067e\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5_\u062c\u06c8\u0645\u06d5_\u0634\u06d5\u0646\u0628\u06d5".split("_"),weekdaysShort:"\u064a\u06d5_\u062f\u06c8_\u0633\u06d5_\u0686\u0627_\u067e\u06d5_\u062c\u06c8_\u0634\u06d5".split("_"),weekdaysMin:"\u064a\u06d5_\u062f\u06c8_\u0633\u06d5_\u0686\u0627_\u067e\u06d5_\u062c\u06c8_\u0634\u06d5".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649",LLL:"YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649\u060c HH:mm",LLLL:"dddd\u060c YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649\u060c HH:mm"},meridiemParse:/\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5|\u0633\u06d5\u06be\u06d5\u0631|\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646|\u0686\u06c8\u0634|\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646|\u0643\u06d5\u0686/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5"===a||"\u0633\u06d5\u06be\u06d5\u0631"===a||"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646"===a||"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646"!==a&&"\u0643\u06d5\u0686"!==a&&11<=e?e:e+12},meridiem:function(e,a,t){e=100*e+a;return e<600?"\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5":e<900?"\u0633\u06d5\u06be\u06d5\u0631":e<1130?"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646":e<1230?"\u0686\u06c8\u0634":e<1800?"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646":"\u0643\u06d5\u0686"},calendar:{sameDay:"[\u0628\u06c8\u06af\u06c8\u0646 \u0633\u0627\u0626\u06d5\u062a] LT",nextDay:"[\u0626\u06d5\u062a\u06d5 \u0633\u0627\u0626\u06d5\u062a] LT",nextWeek:"[\u0643\u06d0\u0644\u06d5\u0631\u0643\u0649] dddd [\u0633\u0627\u0626\u06d5\u062a] LT",lastDay:"[\u062a\u06c6\u0646\u06c8\u06af\u06c8\u0646] LT",lastWeek:"[\u0626\u0627\u0644\u062f\u0649\u0646\u0642\u0649] dddd [\u0633\u0627\u0626\u06d5\u062a] LT",sameElse:"L"},relativeTime:{future:"%s \u0643\u06d0\u064a\u0649\u0646",past:"%s \u0628\u06c7\u0631\u06c7\u0646",s:"\u0646\u06d5\u0686\u0686\u06d5 \u0633\u06d0\u0643\u0648\u0646\u062a",ss:"%d \u0633\u06d0\u0643\u0648\u0646\u062a",m:"\u0628\u0649\u0631 \u0645\u0649\u0646\u06c7\u062a",mm:"%d \u0645\u0649\u0646\u06c7\u062a",h:"\u0628\u0649\u0631 \u0633\u0627\u0626\u06d5\u062a",hh:"%d \u0633\u0627\u0626\u06d5\u062a",d:"\u0628\u0649\u0631 \u0643\u06c8\u0646",dd:"%d \u0643\u06c8\u0646",M:"\u0628\u0649\u0631 \u0626\u0627\u064a",MM:"%d \u0626\u0627\u064a",y:"\u0628\u0649\u0631 \u064a\u0649\u0644",yy:"%d \u064a\u0649\u0644"},dayOfMonthOrdinalParse:/\d{1,2}(-\u0643\u06c8\u0646\u0649|-\u0626\u0627\u064a|-\u06be\u06d5\u067e\u062a\u06d5)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"-\u0643\u06c8\u0646\u0649";case"w":case"W":return e+"-\u06be\u06d5\u067e\u062a\u06d5";default:return e}},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:7}}),M.defineLocale("uk",{months:{format:"\u0441\u0456\u0447\u043d\u044f_\u043b\u044e\u0442\u043e\u0433\u043e_\u0431\u0435\u0440\u0435\u0437\u043d\u044f_\u043a\u0432\u0456\u0442\u043d\u044f_\u0442\u0440\u0430\u0432\u043d\u044f_\u0447\u0435\u0440\u0432\u043d\u044f_\u043b\u0438\u043f\u043d\u044f_\u0441\u0435\u0440\u043f\u043d\u044f_\u0432\u0435\u0440\u0435\u0441\u043d\u044f_\u0436\u043e\u0432\u0442\u043d\u044f_\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430_\u0433\u0440\u0443\u0434\u043d\u044f".split("_"),standalone:"\u0441\u0456\u0447\u0435\u043d\u044c_\u043b\u044e\u0442\u0438\u0439_\u0431\u0435\u0440\u0435\u0437\u0435\u043d\u044c_\u043a\u0432\u0456\u0442\u0435\u043d\u044c_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u0435\u0440\u0432\u0435\u043d\u044c_\u043b\u0438\u043f\u0435\u043d\u044c_\u0441\u0435\u0440\u043f\u0435\u043d\u044c_\u0432\u0435\u0440\u0435\u0441\u0435\u043d\u044c_\u0436\u043e\u0432\u0442\u0435\u043d\u044c_\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434_\u0433\u0440\u0443\u0434\u0435\u043d\u044c".split("_")},monthsShort:"\u0441\u0456\u0447_\u043b\u044e\u0442_\u0431\u0435\u0440_\u043a\u0432\u0456\u0442_\u0442\u0440\u0430\u0432_\u0447\u0435\u0440\u0432_\u043b\u0438\u043f_\u0441\u0435\u0440\u043f_\u0432\u0435\u0440_\u0436\u043e\u0432\u0442_\u043b\u0438\u0441\u0442_\u0433\u0440\u0443\u0434".split("_"),weekdays:function(e,a){var t={nominative:"\u043d\u0435\u0434\u0456\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a_\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a_\u0441\u0435\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u044f_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),accusative:"\u043d\u0435\u0434\u0456\u043b\u044e_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a_\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a_\u0441\u0435\u0440\u0435\u0434\u0443_\u0447\u0435\u0442\u0432\u0435\u0440_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u044e_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),genitive:"\u043d\u0435\u0434\u0456\u043b\u0456_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043a\u0430_\u0432\u0456\u0432\u0442\u043e\u0440\u043a\u0430_\u0441\u0435\u0440\u0435\u0434\u0438_\u0447\u0435\u0442\u0432\u0435\u0440\u0433\u0430_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u0456_\u0441\u0443\u0431\u043e\u0442\u0438".split("_")};return!0===e?t.nominative.slice(1,7).concat(t.nominative.slice(0,1)):e?t[/(\[[\u0412\u0432\u0423\u0443]\]) ?dddd/.test(a)?"accusative":/\[?(?:\u043c\u0438\u043d\u0443\u043b\u043e\u0457|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u043e\u0457)? ?\] ?dddd/.test(a)?"genitive":"nominative"][e.day()]:t.nominative},weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0440.",LLL:"D MMMM YYYY \u0440., HH:mm",LLLL:"dddd, D MMMM YYYY \u0440., HH:mm"},calendar:{sameDay:Wn("[\u0421\u044c\u043e\u0433\u043e\u0434\u043d\u0456 "),nextDay:Wn("[\u0417\u0430\u0432\u0442\u0440\u0430 "),lastDay:Wn("[\u0412\u0447\u043e\u0440\u0430 "),nextWeek:Wn("[\u0423] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return Wn("[\u041c\u0438\u043d\u0443\u043b\u043e\u0457] dddd [").call(this);case 1:case 2:case 4:return Wn("[\u041c\u0438\u043d\u0443\u043b\u043e\u0433\u043e] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"%s \u0442\u043e\u043c\u0443",s:"\u0434\u0435\u043a\u0456\u043b\u044c\u043a\u0430 \u0441\u0435\u043a\u0443\u043d\u0434",ss:On,m:On,mm:On,h:"\u0433\u043e\u0434\u0438\u043d\u0443",hh:On,d:"\u0434\u0435\u043d\u044c",dd:On,M:"\u043c\u0456\u0441\u044f\u0446\u044c",MM:On,y:"\u0440\u0456\u043a",yy:On},meridiemParse:/\u043d\u043e\u0447\u0456|\u0440\u0430\u043d\u043a\u0443|\u0434\u043d\u044f|\u0432\u0435\u0447\u043e\u0440\u0430/,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u043e\u0440\u0430)$/.test(e)},meridiem:function(e,a,t){return e<4?"\u043d\u043e\u0447\u0456":e<12?"\u0440\u0430\u043d\u043a\u0443":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u043e\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0439|\u0433\u043e)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":case"w":case"W":return e+"-\u0439";case"D":return e+"-\u0433\u043e";default:return e}},week:{dow:1,doy:7}});jt=["\u062c\u0646\u0648\u0631\u06cc","\u0641\u0631\u0648\u0631\u06cc","\u0645\u0627\u0631\u0686","\u0627\u067e\u0631\u06cc\u0644","\u0645\u0626\u06cc","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0626\u06cc","\u0627\u06af\u0633\u062a","\u0633\u062a\u0645\u0628\u0631","\u0627\u06a9\u062a\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u062f\u0633\u0645\u0628\u0631"],vt=["\u0627\u062a\u0648\u0627\u0631","\u067e\u06cc\u0631","\u0645\u0646\u06af\u0644","\u0628\u062f\u06be","\u062c\u0645\u0639\u0631\u0627\u062a","\u062c\u0645\u0639\u06c1","\u06c1\u0641\u062a\u06c1"];return M.defineLocale("ur",{months:jt,monthsShort:jt,weekdays:vt,weekdaysShort:vt,weekdaysMin:vt,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd\u060c D MMMM YYYY HH:mm"},meridiemParse:/\u0635\u0628\u062d|\u0634\u0627\u0645/,isPM:function(e){return"\u0634\u0627\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635\u0628\u062d":"\u0634\u0627\u0645"},calendar:{sameDay:"[\u0622\u062c \u0628\u0648\u0642\u062a] LT",nextDay:"[\u06a9\u0644 \u0628\u0648\u0642\u062a] LT",nextWeek:"dddd [\u0628\u0648\u0642\u062a] LT",lastDay:"[\u06af\u0630\u0634\u062a\u06c1 \u0631\u0648\u0632 \u0628\u0648\u0642\u062a] LT",lastWeek:"[\u06af\u0630\u0634\u062a\u06c1] dddd [\u0628\u0648\u0642\u062a] LT",sameElse:"L"},relativeTime:{future:"%s \u0628\u0639\u062f",past:"%s \u0642\u0628\u0644",s:"\u0686\u0646\u062f \u0633\u06cc\u06a9\u0646\u0688",ss:"%d \u0633\u06cc\u06a9\u0646\u0688",m:"\u0627\u06cc\u06a9 \u0645\u0646\u0679",mm:"%d \u0645\u0646\u0679",h:"\u0627\u06cc\u06a9 \u06af\u06be\u0646\u0679\u06c1",hh:"%d \u06af\u06be\u0646\u0679\u06d2",d:"\u0627\u06cc\u06a9 \u062f\u0646",dd:"%d \u062f\u0646",M:"\u0627\u06cc\u06a9 \u0645\u0627\u06c1",MM:"%d \u0645\u0627\u06c1",y:"\u0627\u06cc\u06a9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:4}}),M.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",ss:"%d soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}}),M.defineLocale("uz",{months:"\u044f\u043d\u0432\u0430\u0440_\u0444\u0435\u0432\u0440\u0430\u043b_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440_\u043e\u043a\u0442\u044f\u0431\u0440_\u043d\u043e\u044f\u0431\u0440_\u0434\u0435\u043a\u0430\u0431\u0440".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u042f\u043a\u0448\u0430\u043d\u0431\u0430_\u0414\u0443\u0448\u0430\u043d\u0431\u0430_\u0421\u0435\u0448\u0430\u043d\u0431\u0430_\u0427\u043e\u0440\u0448\u0430\u043d\u0431\u0430_\u041f\u0430\u0439\u0448\u0430\u043d\u0431\u0430_\u0416\u0443\u043c\u0430_\u0428\u0430\u043d\u0431\u0430".split("_"),weekdaysShort:"\u042f\u043a\u0448_\u0414\u0443\u0448_\u0421\u0435\u0448_\u0427\u043e\u0440_\u041f\u0430\u0439_\u0416\u0443\u043c_\u0428\u0430\u043d".split("_"),weekdaysMin:"\u042f\u043a_\u0414\u0443_\u0421\u0435_\u0427\u043e_\u041f\u0430_\u0416\u0443_\u0428\u0430".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[\u0411\u0443\u0433\u0443\u043d \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",nextDay:"[\u042d\u0440\u0442\u0430\u0433\u0430] LT [\u0434\u0430]",nextWeek:"dddd [\u043a\u0443\u043d\u0438 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",lastDay:"[\u041a\u0435\u0447\u0430 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",lastWeek:"[\u0423\u0442\u0433\u0430\u043d] dddd [\u043a\u0443\u043d\u0438 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",sameElse:"L"},relativeTime:{future:"\u042f\u043a\u0438\u043d %s \u0438\u0447\u0438\u0434\u0430",past:"\u0411\u0438\u0440 \u043d\u0435\u0447\u0430 %s \u043e\u043b\u0434\u0438\u043d",s:"\u0444\u0443\u0440\u0441\u0430\u0442",ss:"%d \u0444\u0443\u0440\u0441\u0430\u0442",m:"\u0431\u0438\u0440 \u0434\u0430\u043a\u0438\u043a\u0430",mm:"%d \u0434\u0430\u043a\u0438\u043a\u0430",h:"\u0431\u0438\u0440 \u0441\u043e\u0430\u0442",hh:"%d \u0441\u043e\u0430\u0442",d:"\u0431\u0438\u0440 \u043a\u0443\u043d",dd:"%d \u043a\u0443\u043d",M:"\u0431\u0438\u0440 \u043e\u0439",MM:"%d \u043e\u0439",y:"\u0431\u0438\u0440 \u0439\u0438\u043b",yy:"%d \u0439\u0438\u043b"},week:{dow:1,doy:7}}),M.defineLocale("vi",{months:"th\xe1ng 1_th\xe1ng 2_th\xe1ng 3_th\xe1ng 4_th\xe1ng 5_th\xe1ng 6_th\xe1ng 7_th\xe1ng 8_th\xe1ng 9_th\xe1ng 10_th\xe1ng 11_th\xe1ng 12".split("_"),monthsShort:"Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12".split("_"),monthsParseExact:!0,weekdays:"ch\u1ee7 nh\u1eadt_th\u1ee9 hai_th\u1ee9 ba_th\u1ee9 t\u01b0_th\u1ee9 n\u0103m_th\u1ee9 s\xe1u_th\u1ee9 b\u1ea3y".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,a,t){return e<12?t?"sa":"SA":t?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [n\u0103m] YYYY",LLL:"D MMMM [n\u0103m] YYYY HH:mm",LLLL:"dddd, D MMMM [n\u0103m] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[H\xf4m nay l\xfac] LT",nextDay:"[Ng\xe0y mai l\xfac] LT",nextWeek:"dddd [tu\u1ea7n t\u1edbi l\xfac] LT",lastDay:"[H\xf4m qua l\xfac] LT",lastWeek:"dddd [tu\u1ea7n tr\u01b0\u1edbc l\xfac] LT",sameElse:"L"},relativeTime:{future:"%s t\u1edbi",past:"%s tr\u01b0\u1edbc",s:"v\xe0i gi\xe2y",ss:"%d gi\xe2y",m:"m\u1ed9t ph\xfat",mm:"%d ph\xfat",h:"m\u1ed9t gi\u1edd",hh:"%d gi\u1edd",d:"m\u1ed9t ng\xe0y",dd:"%d ng\xe0y",w:"m\u1ed9t tu\u1ea7n",ww:"%d tu\u1ea7n",M:"m\u1ed9t th\xe1ng",MM:"%d th\xe1ng",y:"m\u1ed9t n\u0103m",yy:"%d n\u0103m"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}}),M.defineLocale("x-pseudo",{months:"J~\xe1\xf1\xfa\xe1~r\xfd_F~\xe9br\xfa~\xe1r\xfd_~M\xe1rc~h_\xc1p~r\xedl_~M\xe1\xfd_~J\xfa\xf1\xe9~_J\xfal~\xfd_\xc1\xfa~g\xfast~_S\xe9p~t\xe9mb~\xe9r_\xd3~ct\xf3b~\xe9r_\xd1~\xf3v\xe9m~b\xe9r_~D\xe9c\xe9~mb\xe9r".split("_"),monthsShort:"J~\xe1\xf1_~F\xe9b_~M\xe1r_~\xc1pr_~M\xe1\xfd_~J\xfa\xf1_~J\xfal_~\xc1\xfag_~S\xe9p_~\xd3ct_~\xd1\xf3v_~D\xe9c".split("_"),monthsParseExact:!0,weekdays:"S~\xfa\xf1d\xe1~\xfd_M\xf3~\xf1d\xe1\xfd~_T\xfa\xe9~sd\xe1\xfd~_W\xe9d~\xf1\xe9sd~\xe1\xfd_T~h\xfars~d\xe1\xfd_~Fr\xedd~\xe1\xfd_S~\xe1t\xfar~d\xe1\xfd".split("_"),weekdaysShort:"S~\xfa\xf1_~M\xf3\xf1_~T\xfa\xe9_~W\xe9d_~Th\xfa_~Fr\xed_~S\xe1t".split("_"),weekdaysMin:"S~\xfa_M\xf3~_T\xfa_~W\xe9_T~h_Fr~_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~\xf3d\xe1~\xfd \xe1t] LT",nextDay:"[T~\xf3m\xf3~rr\xf3~w \xe1t] LT",nextWeek:"dddd [\xe1t] LT",lastDay:"[\xdd~\xe9st~\xe9rd\xe1~\xfd \xe1t] LT",lastWeek:"[L~\xe1st] dddd [\xe1t] LT",sameElse:"L"},relativeTime:{future:"\xed~\xf1 %s",past:"%s \xe1~g\xf3",s:"\xe1 ~f\xe9w ~s\xe9c\xf3~\xf1ds",ss:"%d s~\xe9c\xf3\xf1~ds",m:"\xe1 ~m\xed\xf1~\xfat\xe9",mm:"%d m~\xed\xf1\xfa~t\xe9s",h:"\xe1~\xf1 h\xf3~\xfar",hh:"%d h~\xf3\xfars",d:"\xe1 ~d\xe1\xfd",dd:"%d d~\xe1\xfds",M:"\xe1 ~m\xf3\xf1~th",MM:"%d m~\xf3\xf1t~hs",y:"\xe1 ~\xfd\xe9\xe1r",yy:"%d \xfd~\xe9\xe1rs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),M.defineLocale("yo",{months:"S\u1eb9\u0301r\u1eb9\u0301_E\u0300re\u0300le\u0300_\u1eb8r\u1eb9\u0300na\u0300_I\u0300gbe\u0301_E\u0300bibi_O\u0300ku\u0300du_Ag\u1eb9mo_O\u0300gu\u0301n_Owewe_\u1ecc\u0300wa\u0300ra\u0300_Be\u0301lu\u0301_\u1ecc\u0300p\u1eb9\u0300\u0300".split("_"),monthsShort:"S\u1eb9\u0301r_E\u0300rl_\u1eb8rn_I\u0300gb_E\u0300bi_O\u0300ku\u0300_Ag\u1eb9_O\u0300gu\u0301_Owe_\u1ecc\u0300wa\u0300_Be\u0301l_\u1ecc\u0300p\u1eb9\u0300\u0300".split("_"),weekdays:"A\u0300i\u0300ku\u0301_Aje\u0301_I\u0300s\u1eb9\u0301gun_\u1eccj\u1ecd\u0301ru\u0301_\u1eccj\u1ecd\u0301b\u1ecd_\u1eb8ti\u0300_A\u0300ba\u0301m\u1eb9\u0301ta".split("_"),weekdaysShort:"A\u0300i\u0300k_Aje\u0301_I\u0300s\u1eb9\u0301_\u1eccjr_\u1eccjb_\u1eb8ti\u0300_A\u0300ba\u0301".split("_"),weekdaysMin:"A\u0300i\u0300_Aj_I\u0300s_\u1eccr_\u1eccb_\u1eb8t_A\u0300b".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[O\u0300ni\u0300 ni] LT",nextDay:"[\u1ecc\u0300la ni] LT",nextWeek:"dddd [\u1eccs\u1eb9\u0300 to\u0301n'b\u1ecd] [ni] LT",lastDay:"[A\u0300na ni] LT",lastWeek:"dddd [\u1eccs\u1eb9\u0300 to\u0301l\u1ecd\u0301] [ni] LT",sameElse:"L"},relativeTime:{future:"ni\u0301 %s",past:"%s k\u1ecdja\u0301",s:"i\u0300s\u1eb9ju\u0301 aaya\u0301 die",ss:"aaya\u0301 %d",m:"i\u0300s\u1eb9ju\u0301 kan",mm:"i\u0300s\u1eb9ju\u0301 %d",h:"wa\u0301kati kan",hh:"wa\u0301kati %d",d:"\u1ecdj\u1ecd\u0301 kan",dd:"\u1ecdj\u1ecd\u0301 %d",M:"osu\u0300 kan",MM:"osu\u0300 %d",y:"\u1ecddu\u0301n kan",yy:"\u1ecddu\u0301n %d"},dayOfMonthOrdinalParse:/\u1ecdj\u1ecd\u0301\s\d{1,2}/,ordinal:"\u1ecdj\u1ecd\u0301 %d",week:{dow:1,doy:4}}),M.defineLocale("zh-cn",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u5468\u65e5_\u5468\u4e00_\u5468\u4e8c_\u5468\u4e09_\u5468\u56db_\u5468\u4e94_\u5468\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5Ah\u70b9mm\u5206",LLLL:"YYYY\u5e74M\u6708D\u65e5ddddAh\u70b9mm\u5206",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a||"\u4e0b\u5348"!==a&&"\u665a\u4e0a"!==a&&11<=e?e:e+12},meridiem:function(e,a,t){e=100*e+a;return e<600?"\u51cc\u6668":e<900?"\u65e9\u4e0a":e<1130?"\u4e0a\u5348":e<1230?"\u4e2d\u5348":e<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929]LT",nextDay:"[\u660e\u5929]LT",nextWeek:function(e){return e.week()!==this.week()?"[\u4e0b]dddLT":"[\u672c]dddLT"},lastDay:"[\u6628\u5929]LT",lastWeek:function(e){return this.week()!==e.week()?"[\u4e0a]dddLT":"[\u672c]dddLT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u5468)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u5468";default:return e}},relativeTime:{future:"%s\u540e",past:"%s\u524d",s:"\u51e0\u79d2",ss:"%d \u79d2",m:"1 \u5206\u949f",mm:"%d \u5206\u949f",h:"1 \u5c0f\u65f6",hh:"%d \u5c0f\u65f6",d:"1 \u5929",dd:"%d \u5929",w:"1 \u5468",ww:"%d \u5468",M:"1 \u4e2a\u6708",MM:"%d \u4e2a\u6708",y:"1 \u5e74",yy:"%d \u5e74"},week:{dow:1,doy:4}}),M.defineLocale("zh-hk",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a?e:"\u4e2d\u5348"===a?11<=e?e:e+12:"\u4e0b\u5348"===a||"\u665a\u4e0a"===a?e+12:void 0},meridiem:function(e,a,t){e=100*e+a;return e<600?"\u51cc\u6668":e<900?"\u65e9\u4e0a":e<1200?"\u4e0a\u5348":1200===e?"\u4e2d\u5348":e<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929]LT",nextDay:"[\u660e\u5929]LT",nextWeek:"[\u4e0b]ddddLT",lastDay:"[\u6628\u5929]LT",lastWeek:"[\u4e0a]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u9031";default:return e}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}}),M.defineLocale("zh-mo",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"D/M/YYYY",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a?e:"\u4e2d\u5348"===a?11<=e?e:e+12:"\u4e0b\u5348"===a||"\u665a\u4e0a"===a?e+12:void 0},meridiem:function(e,a,t){e=100*e+a;return e<600?"\u51cc\u6668":e<900?"\u65e9\u4e0a":e<1130?"\u4e0a\u5348":e<1230?"\u4e2d\u5348":e<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929] LT",nextDay:"[\u660e\u5929] LT",nextWeek:"[\u4e0b]dddd LT",lastDay:"[\u6628\u5929] LT",lastWeek:"[\u4e0a]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u9031";default:return e}},relativeTime:{future:"%s\u5167",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}}),M.defineLocale("zh-tw",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a?e:"\u4e2d\u5348"===a?11<=e?e:e+12:"\u4e0b\u5348"===a||"\u665a\u4e0a"===a?e+12:void 0},meridiem:function(e,a,t){e=100*e+a;return e<600?"\u51cc\u6668":e<900?"\u65e9\u4e0a":e<1130?"\u4e0a\u5348":e<1230?"\u4e2d\u5348":e<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929] LT",nextDay:"[\u660e\u5929] LT",nextWeek:"[\u4e0b]dddd LT",lastDay:"[\u6628\u5929] LT",lastWeek:"[\u4e0a]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u9031";default:return e}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}}),M.locale("en"),M});


const CurrencyCode = {
  USD: {
    symbol: "$",
    name: "US Dollar",
    symbol_native: "$",
    decimal_digits: 2,
    rounding: 0,
    code: "USD",
    name_plural: "US dollars",
  },
  CAD: {
    symbol: "CA$",
    name: "Canadian Dollar",
    symbol_native: "$",
    decimal_digits: 2,
    rounding: 0,
    code: "CAD",
    name_plural: "Canadian dollars",
  },
  EUR: {
    symbol: "€",
    name: "Euro",
    symbol_native: "€",
    decimal_digits: 2,
    rounding: 0,
    code: "EUR",
    name_plural: "euros",
  },
  AED: {
    symbol: "AED",
    name: "United Arab Emirates Dirham",
    symbol_native: "د.إ.‏",
    decimal_digits: 2,
    rounding: 0,
    code: "AED",
    name_plural: "UAE dirhams",
  },
  AFN: {
    symbol: "Af",
    name: "Afghan Afghani",
    symbol_native: "؋",
    decimal_digits: 0,
    rounding: 0,
    code: "AFN",
    name_plural: "Afghan Afghanis",
  },
  ALL: {
    symbol: "ALL",
    name: "Albanian Lek",
    symbol_native: "Lek",
    decimal_digits: 0,
    rounding: 0,
    code: "ALL",
    name_plural: "Albanian lekë",
  },
  AMD: {
    symbol: "AMD",
    name: "Armenian Dram",
    symbol_native: "դր.",
    decimal_digits: 0,
    rounding: 0,
    code: "AMD",
    name_plural: "Armenian drams",
  },
  ARS: {
    symbol: "AR$",
    name: "Argentine Peso",
    symbol_native: "$",
    decimal_digits: 2,
    rounding: 0,
    code: "ARS",
    name_plural: "Argentine pesos",
  },
  AUD: {
    symbol: "AU$",
    name: "Australian Dollar",
    symbol_native: "$",
    decimal_digits: 2,
    rounding: 0,
    code: "AUD",
    name_plural: "Australian dollars",
  },
  AZN: {
    symbol: "man.",
    name: "Azerbaijani Manat",
    symbol_native: "ман.",
    decimal_digits: 2,
    rounding: 0,
    code: "AZN",
    name_plural: "Azerbaijani manats",
  },
  BAM: {
    symbol: "KM",
    name: "Bosnia-Herzegovina Convertible Mark",
    symbol_native: "KM",
    decimal_digits: 2,
    rounding: 0,
    code: "BAM",
    name_plural: "Bosnia-Herzegovina convertible marks",
  },
  BDT: {
    symbol: "Tk",
    name: "Bangladeshi Taka",
    symbol_native: "৳",
    decimal_digits: 2,
    rounding: 0,
    code: "BDT",
    name_plural: "Bangladeshi takas",
  },
  BGN: {
    symbol: "BGN",
    name: "Bulgarian Lev",
    symbol_native: "лв.",
    decimal_digits: 2,
    rounding: 0,
    code: "BGN",
    name_plural: "Bulgarian leva",
  },
  BHD: {
    symbol: "BD",
    name: "Bahraini Dinar",
    symbol_native: "د.ب.‏",
    decimal_digits: 3,
    rounding: 0,
    code: "BHD",
    name_plural: "Bahraini dinars",
  },
  BIF: {
    symbol: "FBu",
    name: "Burundian Franc",
    symbol_native: "FBu",
    decimal_digits: 0,
    rounding: 0,
    code: "BIF",
    name_plural: "Burundian francs",
  },
  BND: {
    symbol: "BN$",
    name: "Brunei Dollar",
    symbol_native: "$",
    decimal_digits: 2,
    rounding: 0,
    code: "BND",
    name_plural: "Brunei dollars",
  },
  BOB: {
    symbol: "Bs",
    name: "Bolivian Boliviano",
    symbol_native: "Bs",
    decimal_digits: 2,
    rounding: 0,
    code: "BOB",
    name_plural: "Bolivian bolivianos",
  },
  BRL: {
    symbol: "R$",
    name: "Brazilian Real",
    symbol_native: "R$",
    decimal_digits: 2,
    rounding: 0,
    code: "BRL",
    name_plural: "Brazilian reals",
  },
  BWP: {
    symbol: "BWP",
    name: "Botswanan Pula",
    symbol_native: "P",
    decimal_digits: 2,
    rounding: 0,
    code: "BWP",
    name_plural: "Botswanan pulas",
  },
  BYN: {
    symbol: "Br",
    name: "Belarusian Ruble",
    symbol_native: "руб.",
    decimal_digits: 2,
    rounding: 0,
    code: "BYN",
    name_plural: "Belarusian rubles",
  },
  BZD: {
    symbol: "BZ$",
    name: "Belize Dollar",
    symbol_native: "$",
    decimal_digits: 2,
    rounding: 0,
    code: "BZD",
    name_plural: "Belize dollars",
  },
  CDF: {
    symbol: "CDF",
    name: "Congolese Franc",
    symbol_native: "FrCD",
    decimal_digits: 2,
    rounding: 0,
    code: "CDF",
    name_plural: "Congolese francs",
  },
  CHF: {
    symbol: "CHF",
    name: "Swiss Franc",
    symbol_native: "CHF",
    decimal_digits: 2,
    rounding: 0.05,
    code: "CHF",
    name_plural: "Swiss francs",
  },
  CLP: {
    symbol: "CL$",
    name: "Chilean Peso",
    symbol_native: "$",
    decimal_digits: 0,
    rounding: 0,
    code: "CLP",
    name_plural: "Chilean pesos",
  },
  CNY: {
    symbol: "CN¥",
    name: "Chinese Yuan",
    symbol_native: "CN¥",
    decimal_digits: 2,
    rounding: 0,
    code: "CNY",
    name_plural: "Chinese yuan",
  },
  COP: {
    symbol: "CO$",
    name: "Colombian Peso",
    symbol_native: "$",
    decimal_digits: 0,
    rounding: 0,
    code: "COP",
    name_plural: "Colombian pesos",
  },
  CRC: {
    symbol: "₡",
    name: "Costa Rican Colón",
    symbol_native: "₡",
    decimal_digits: 0,
    rounding: 0,
    code: "CRC",
    name_plural: "Costa Rican colóns",
  },
  CVE: {
    symbol: "CV$",
    name: "Cape Verdean Escudo",
    symbol_native: "CV$",
    decimal_digits: 2,
    rounding: 0,
    code: "CVE",
    name_plural: "Cape Verdean escudos",
  },
  CZK: {
    symbol: "Kč",
    name: "Czech Republic Koruna",
    symbol_native: "Kč",
    decimal_digits: 2,
    rounding: 0,
    code: "CZK",
    name_plural: "Czech Republic korunas",
  },
  DJF: {
    symbol: "Fdj",
    name: "Djiboutian Franc",
    symbol_native: "Fdj",
    decimal_digits: 0,
    rounding: 0,
    code: "DJF",
    name_plural: "Djiboutian francs",
  },
  DKK: {
    symbol: "Dkr",
    name: "Danish Krone",
    symbol_native: "kr",
    decimal_digits: 2,
    rounding: 0,
    code: "DKK",
    name_plural: "Danish kroner",
  },
  DOP: {
    symbol: "RD$",
    name: "Dominican Peso",
    symbol_native: "RD$",
    decimal_digits: 2,
    rounding: 0,
    code: "DOP",
    name_plural: "Dominican pesos",
  },
  DZD: {
    symbol: "DA",
    name: "Algerian Dinar",
    symbol_native: "د.ج.‏",
    decimal_digits: 2,
    rounding: 0,
    code: "DZD",
    name_plural: "Algerian dinars",
  },
  EEK: {
    symbol: "Ekr",
    name: "Estonian Kroon",
    symbol_native: "kr",
    decimal_digits: 2,
    rounding: 0,
    code: "EEK",
    name_plural: "Estonian kroons",
  },
  EGP: {
    symbol: "EGP",
    name: "Egyptian Pound",
    symbol_native: "ج.م.‏",
    decimal_digits: 2,
    rounding: 0,
    code: "EGP",
    name_plural: "Egyptian pounds",
  },
  ERN: {
    symbol: "Nfk",
    name: "Eritrean Nakfa",
    symbol_native: "Nfk",
    decimal_digits: 2,
    rounding: 0,
    code: "ERN",
    name_plural: "Eritrean nakfas",
  },
  ETB: {
    symbol: "Br",
    name: "Ethiopian Birr",
    symbol_native: "Br",
    decimal_digits: 2,
    rounding: 0,
    code: "ETB",
    name_plural: "Ethiopian birrs",
  },
  GBP: {
    symbol: "£",
    name: "British Pound Sterling",
    symbol_native: "£",
    decimal_digits: 2,
    rounding: 0,
    code: "GBP",
    name_plural: "British pounds sterling",
  },
  GEL: {
    symbol: "GEL",
    name: "Georgian Lari",
    symbol_native: "GEL",
    decimal_digits: 2,
    rounding: 0,
    code: "GEL",
    name_plural: "Georgian laris",
  },
  GHS: {
    symbol: "GH₵",
    name: "Ghanaian Cedi",
    symbol_native: "GH₵",
    decimal_digits: 2,
    rounding: 0,
    code: "GHS",
    name_plural: "Ghanaian cedis",
  },
  GNF: {
    symbol: "FG",
    name: "Guinean Franc",
    symbol_native: "FG",
    decimal_digits: 0,
    rounding: 0,
    code: "GNF",
    name_plural: "Guinean francs",
  },
  GTQ: {
    symbol: "GTQ",
    name: "Guatemalan Quetzal",
    symbol_native: "Q",
    decimal_digits: 2,
    rounding: 0,
    code: "GTQ",
    name_plural: "Guatemalan quetzals",
  },
  HKD: {
    symbol: "HK$",
    name: "Hong Kong Dollar",
    symbol_native: "$",
    decimal_digits: 2,
    rounding: 0,
    code: "HKD",
    name_plural: "Hong Kong dollars",
  },
  HNL: {
    symbol: "HNL",
    name: "Honduran Lempira",
    symbol_native: "L",
    decimal_digits: 2,
    rounding: 0,
    code: "HNL",
    name_plural: "Honduran lempiras",
  },
  HRK: {
    symbol: "kn",
    name: "Croatian Kuna",
    symbol_native: "kn",
    decimal_digits: 2,
    rounding: 0,
    code: "HRK",
    name_plural: "Croatian kunas",
  },
  HUF: {
    symbol: "Ft",
    name: "Hungarian Forint",
    symbol_native: "Ft",
    decimal_digits: 0,
    rounding: 0,
    code: "HUF",
    name_plural: "Hungarian forints",
  },
  IDR: {
    symbol: "Rp",
    name: "Indonesian Rupiah",
    symbol_native: "Rp",
    decimal_digits: 0,
    rounding: 0,
    code: "IDR",
    name_plural: "Indonesian rupiahs",
  },
  ILS: {
    symbol: "₪",
    name: "Israeli New Sheqel",
    symbol_native: "₪",
    decimal_digits: 2,
    rounding: 0,
    code: "ILS",
    name_plural: "Israeli new sheqels",
  },
  INR: {
    symbol: "Rs",
    name: "Indian Rupee",
    symbol_native: "টকা",
    decimal_digits: 2,
    rounding: 0,
    code: "INR",
    name_plural: "Indian rupees",
  },
  IQD: {
    symbol: "IQD",
    name: "Iraqi Dinar",
    symbol_native: "د.ع.‏",
    decimal_digits: 0,
    rounding: 0,
    code: "IQD",
    name_plural: "Iraqi dinars",
  },
  IRR: {
    symbol: "IRR",
    name: "Iranian Rial",
    symbol_native: "﷼",
    decimal_digits: 0,
    rounding: 0,
    code: "IRR",
    name_plural: "Iranian rials",
  },
  ISK: {
    symbol: "Ikr",
    name: "Icelandic Króna",
    symbol_native: "kr",
    decimal_digits: 0,
    rounding: 0,
    code: "ISK",
    name_plural: "Icelandic krónur",
  },
  JMD: {
    symbol: "J$",
    name: "Jamaican Dollar",
    symbol_native: "$",
    decimal_digits: 2,
    rounding: 0,
    code: "JMD",
    name_plural: "Jamaican dollars",
  },
  JOD: {
    symbol: "JD",
    name: "Jordanian Dinar",
    symbol_native: "د.أ.‏",
    decimal_digits: 3,
    rounding: 0,
    code: "JOD",
    name_plural: "Jordanian dinars",
  },
  JPY: {
    symbol: "¥",
    name: "Japanese Yen",
    symbol_native: "￥",
    decimal_digits: 0,
    rounding: 0,
    code: "JPY",
    name_plural: "Japanese yen",
  },
  KES: {
    symbol: "Ksh",
    name: "Kenyan Shilling",
    symbol_native: "Ksh",
    decimal_digits: 2,
    rounding: 0,
    code: "KES",
    name_plural: "Kenyan shillings",
  },
  KHR: {
    symbol: "KHR",
    name: "Cambodian Riel",
    symbol_native: "៛",
    decimal_digits: 2,
    rounding: 0,
    code: "KHR",
    name_plural: "Cambodian riels",
  },
  KMF: {
    symbol: "CF",
    name: "Comorian Franc",
    symbol_native: "FC",
    decimal_digits: 0,
    rounding: 0,
    code: "KMF",
    name_plural: "Comorian francs",
  },
  KRW: {
    symbol: "₩",
    name: "South Korean Won",
    symbol_native: "₩",
    decimal_digits: 0,
    rounding: 0,
    code: "KRW",
    name_plural: "South Korean won",
  },
  KWD: {
    symbol: "KD",
    name: "Kuwaiti Dinar",
    symbol_native: "د.ك.‏",
    decimal_digits: 3,
    rounding: 0,
    code: "KWD",
    name_plural: "Kuwaiti dinars",
  },
  KZT: {
    symbol: "KZT",
    name: "Kazakhstani Tenge",
    symbol_native: "тңг.",
    decimal_digits: 2,
    rounding: 0,
    code: "KZT",
    name_plural: "Kazakhstani tenges",
  },
  LBP: {
    symbol: "LB£",
    name: "Lebanese Pound",
    symbol_native: "ل.ل.‏",
    decimal_digits: 0,
    rounding: 0,
    code: "LBP",
    name_plural: "Lebanese pounds",
  },
  LKR: {
    symbol: "SLRs",
    name: "Sri Lankan Rupee",
    symbol_native: "SL Re",
    decimal_digits: 2,
    rounding: 0,
    code: "LKR",
    name_plural: "Sri Lankan rupees",
  },
  LTL: {
    symbol: "Lt",
    name: "Lithuanian Litas",
    symbol_native: "Lt",
    decimal_digits: 2,
    rounding: 0,
    code: "LTL",
    name_plural: "Lithuanian litai",
  },
  LVL: {
    symbol: "Ls",
    name: "Latvian Lats",
    symbol_native: "Ls",
    decimal_digits: 2,
    rounding: 0,
    code: "LVL",
    name_plural: "Latvian lati",
  },
  LYD: {
    symbol: "LD",
    name: "Libyan Dinar",
    symbol_native: "د.ل.‏",
    decimal_digits: 3,
    rounding: 0,
    code: "LYD",
    name_plural: "Libyan dinars",
  },
  MAD: {
    symbol: "MAD",
    name: "Moroccan Dirham",
    symbol_native: "د.م.‏",
    decimal_digits: 2,
    rounding: 0,
    code: "MAD",
    name_plural: "Moroccan dirhams",
  },
  MDL: {
    symbol: "MDL",
    name: "Moldovan Leu",
    symbol_native: "MDL",
    decimal_digits: 2,
    rounding: 0,
    code: "MDL",
    name_plural: "Moldovan lei",
  },
  MGA: {
    symbol: "MGA",
    name: "Malagasy Ariary",
    symbol_native: "MGA",
    decimal_digits: 0,
    rounding: 0,
    code: "MGA",
    name_plural: "Malagasy Ariaries",
  },
  MKD: {
    symbol: "MKD",
    name: "Macedonian Denar",
    symbol_native: "MKD",
    decimal_digits: 2,
    rounding: 0,
    code: "MKD",
    name_plural: "Macedonian denari",
  },
  MMK: {
    symbol: "MMK",
    name: "Myanma Kyat",
    symbol_native: "K",
    decimal_digits: 0,
    rounding: 0,
    code: "MMK",
    name_plural: "Myanma kyats",
  },
  MOP: {
    symbol: "MOP$",
    name: "Macanese Pataca",
    symbol_native: "MOP$",
    decimal_digits: 2,
    rounding: 0,
    code: "MOP",
    name_plural: "Macanese patacas",
  },
  MUR: {
    symbol: "MURs",
    name: "Mauritian Rupee",
    symbol_native: "MURs",
    decimal_digits: 0,
    rounding: 0,
    code: "MUR",
    name_plural: "Mauritian rupees",
  },
  MXN: {
    symbol: "MX$",
    name: "Mexican Peso",
    symbol_native: "$",
    decimal_digits: 2,
    rounding: 0,
    code: "MXN",
    name_plural: "Mexican pesos",
  },
  MYR: {
    symbol: "RM",
    name: "Malaysian Ringgit",
    symbol_native: "RM",
    decimal_digits: 2,
    rounding: 0,
    code: "MYR",
    name_plural: "Malaysian ringgits",
  },
  MZN: {
    symbol: "MTn",
    name: "Mozambican Metical",
    symbol_native: "MTn",
    decimal_digits: 2,
    rounding: 0,
    code: "MZN",
    name_plural: "Mozambican meticals",
  },
  NAD: {
    symbol: "N$",
    name: "Namibian Dollar",
    symbol_native: "N$",
    decimal_digits: 2,
    rounding: 0,
    code: "NAD",
    name_plural: "Namibian dollars",
  },
  NGN: {
    symbol: "₦",
    name: "Nigerian Naira",
    symbol_native: "₦",
    decimal_digits: 2,
    rounding: 0,
    code: "NGN",
    name_plural: "Nigerian nairas",
  },
  NIO: {
    symbol: "C$",
    name: "Nicaraguan Córdoba",
    symbol_native: "C$",
    decimal_digits: 2,
    rounding: 0,
    code: "NIO",
    name_plural: "Nicaraguan córdobas",
  },
  NOK: {
    symbol: "Nkr",
    name: "Norwegian Krone",
    symbol_native: "kr",
    decimal_digits: 2,
    rounding: 0,
    code: "NOK",
    name_plural: "Norwegian kroner",
  },
  NPR: {
    symbol: "NPRs",
    name: "Nepalese Rupee",
    symbol_native: "नेरू",
    decimal_digits: 2,
    rounding: 0,
    code: "NPR",
    name_plural: "Nepalese rupees",
  },
  NZD: {
    symbol: "NZ$",
    name: "New Zealand Dollar",
    symbol_native: "$",
    decimal_digits: 2,
    rounding: 0,
    code: "NZD",
    name_plural: "New Zealand dollars",
  },
  OMR: {
    symbol: "OMR",
    name: "Omani Rial",
    symbol_native: "ر.ع.‏",
    decimal_digits: 3,
    rounding: 0,
    code: "OMR",
    name_plural: "Omani rials",
  },
  PAB: {
    symbol: "B/.",
    name: "Panamanian Balboa",
    symbol_native: "B/.",
    decimal_digits: 2,
    rounding: 0,
    code: "PAB",
    name_plural: "Panamanian balboas",
  },
  PEN: {
    symbol: "S/.",
    name: "Peruvian Nuevo Sol",
    symbol_native: "S/.",
    decimal_digits: 2,
    rounding: 0,
    code: "PEN",
    name_plural: "Peruvian nuevos soles",
  },
  PHP: {
    symbol: "₱",
    name: "Philippine Peso",
    symbol_native: "₱",
    decimal_digits: 2,
    rounding: 0,
    code: "PHP",
    name_plural: "Philippine pesos",
  },
  PKR: {
    symbol: "PKRs",
    name: "Pakistani Rupee",
    symbol_native: "₨",
    decimal_digits: 0,
    rounding: 0,
    code: "PKR",
    name_plural: "Pakistani rupees",
  },
  PLN: {
    symbol: "zł",
    name: "Polish Zloty",
    symbol_native: "zł",
    decimal_digits: 2,
    rounding: 0,
    code: "PLN",
    name_plural: "Polish zlotys",
  },
  PYG: {
    symbol: "₲",
    name: "Paraguayan Guarani",
    symbol_native: "₲",
    decimal_digits: 0,
    rounding: 0,
    code: "PYG",
    name_plural: "Paraguayan guaranis",
  },
  QAR: {
    symbol: "QR",
    name: "Qatari Rial",
    symbol_native: "ر.ق.‏",
    decimal_digits: 2,
    rounding: 0,
    code: "QAR",
    name_plural: "Qatari rials",
  },
  RON: {
    symbol: "RON",
    name: "Romanian Leu",
    symbol_native: "RON",
    decimal_digits: 2,
    rounding: 0,
    code: "RON",
    name_plural: "Romanian lei",
  },
  RSD: {
    symbol: "din.",
    name: "Serbian Dinar",
    symbol_native: "дин.",
    decimal_digits: 0,
    rounding: 0,
    code: "RSD",
    name_plural: "Serbian dinars",
  },
  RUB: {
    symbol: "RUB",
    name: "Russian Ruble",
    symbol_native: "₽",
    decimal_digits: 2,
    rounding: 0,
    code: "RUB",
    name_plural: "Russian rubles",
  },
  RWF: {
    symbol: "RWF",
    name: "Rwandan Franc",
    symbol_native: "FR",
    decimal_digits: 0,
    rounding: 0,
    code: "RWF",
    name_plural: "Rwandan francs",
  },
  SAR: {
    symbol: "SR",
    name: "Saudi Riyal",
    symbol_native: "ر.س.‏",
    decimal_digits: 2,
    rounding: 0,
    code: "SAR",
    name_plural: "Saudi riyals",
  },
  SDG: {
    symbol: "SDG",
    name: "Sudanese Pound",
    symbol_native: "SDG",
    decimal_digits: 2,
    rounding: 0,
    code: "SDG",
    name_plural: "Sudanese pounds",
  },
  SEK: {
    symbol: "Skr",
    name: "Swedish Krona",
    symbol_native: "kr",
    decimal_digits: 2,
    rounding: 0,
    code: "SEK",
    name_plural: "Swedish kronor",
  },
  SGD: {
    symbol: "S$",
    name: "Singapore Dollar",
    symbol_native: "$",
    decimal_digits: 2,
    rounding: 0,
    code: "SGD",
    name_plural: "Singapore dollars",
  },
  SOS: {
    symbol: "Ssh",
    name: "Somali Shilling",
    symbol_native: "Ssh",
    decimal_digits: 0,
    rounding: 0,
    code: "SOS",
    name_plural: "Somali shillings",
  },
  SYP: {
    symbol: "SY£",
    name: "Syrian Pound",
    symbol_native: "ل.س.‏",
    decimal_digits: 0,
    rounding: 0,
    code: "SYP",
    name_plural: "Syrian pounds",
  },
  THB: {
    symbol: "฿",
    name: "Thai Baht",
    symbol_native: "฿",
    decimal_digits: 2,
    rounding: 0,
    code: "THB",
    name_plural: "Thai baht",
  },
  TND: {
    symbol: "DT",
    name: "Tunisian Dinar",
    symbol_native: "د.ت.‏",
    decimal_digits: 3,
    rounding: 0,
    code: "TND",
    name_plural: "Tunisian dinars",
  },
  TOP: {
    symbol: "T$",
    name: "Tongan Paʻanga",
    symbol_native: "T$",
    decimal_digits: 2,
    rounding: 0,
    code: "TOP",
    name_plural: "Tongan paʻanga",
  },
  TRY: {
    symbol: "TL",
    name: "Turkish Lira",
    symbol_native: "TL",
    decimal_digits: 2,
    rounding: 0,
    code: "TRY",
    name_plural: "Turkish Lira",
  },
  TTD: {
    symbol: "TT$",
    name: "Trinidad and Tobago Dollar",
    symbol_native: "$",
    decimal_digits: 2,
    rounding: 0,
    code: "TTD",
    name_plural: "Trinidad and Tobago dollars",
  },
  TWD: {
    symbol: "NT$",
    name: "New Taiwan Dollar",
    symbol_native: "NT$",
    decimal_digits: 2,
    rounding: 0,
    code: "TWD",
    name_plural: "New Taiwan dollars",
  },
  TZS: {
    symbol: "TSh",
    name: "Tanzanian Shilling",
    symbol_native: "TSh",
    decimal_digits: 0,
    rounding: 0,
    code: "TZS",
    name_plural: "Tanzanian shillings",
  },
  UAH: {
    symbol: "₴",
    name: "Ukrainian Hryvnia",
    symbol_native: "₴",
    decimal_digits: 2,
    rounding: 0,
    code: "UAH",
    name_plural: "Ukrainian hryvnias",
  },
  UGX: {
    symbol: "USh",
    name: "Ugandan Shilling",
    symbol_native: "USh",
    decimal_digits: 0,
    rounding: 0,
    code: "UGX",
    name_plural: "Ugandan shillings",
  },
  UYU: {
    symbol: "$U",
    name: "Uruguayan Peso",
    symbol_native: "$",
    decimal_digits: 2,
    rounding: 0,
    code: "UYU",
    name_plural: "Uruguayan pesos",
  },
  UZS: {
    symbol: "UZS",
    name: "Uzbekistan Som",
    symbol_native: "UZS",
    decimal_digits: 0,
    rounding: 0,
    code: "UZS",
    name_plural: "Uzbekistan som",
  },
  VEF: {
    symbol: "Bs.F.",
    name: "Venezuelan Bolívar",
    symbol_native: "Bs.F.",
    decimal_digits: 2,
    rounding: 0,
    code: "VEF",
    name_plural: "Venezuelan bolívars",
  },
  VND: {
    symbol: "₫",
    name: "Vietnamese Dong",
    symbol_native: "₫",
    decimal_digits: 0,
    rounding: 0,
    code: "VND",
    name_plural: "Vietnamese dong",
  },
  XAF: {
    symbol: "FCFA",
    name: "CFA Franc BEAC",
    symbol_native: "FCFA",
    decimal_digits: 0,
    rounding: 0,
    code: "XAF",
    name_plural: "CFA francs BEAC",
  },
  XOF: {
    symbol: "CFA",
    name: "CFA Franc BCEAO",
    symbol_native: "CFA",
    decimal_digits: 0,
    rounding: 0,
    code: "XOF",
    name_plural: "CFA francs BCEAO",
  },
  YER: {
    symbol: "YR",
    name: "Yemeni Rial",
    symbol_native: "ر.ي.‏",
    decimal_digits: 0,
    rounding: 0,
    code: "YER",
    name_plural: "Yemeni rials",
  },
  ZAR: {
    symbol: "R",
    name: "South African Rand",
    symbol_native: "R",
    decimal_digits: 2,
    rounding: 0,
    code: "ZAR",
    name_plural: "South African rand",
  },
  ZMK: {
    symbol: "ZK",
    name: "Zambian Kwacha",
    symbol_native: "ZK",
    decimal_digits: 0,
    rounding: 0,
    code: "ZMK",
    name_plural: "Zambian kwachas",
  },
};


const denominationCoef = { "XBT": 1000000000, "*": 100 }


Page.utils = new (class {
  constructor() {
    this.moment = moment;
  }

  replaceUrlsWithLinks(text = "") {
    const expressionWithHttp =
      /(https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*))/gi;

    let regex = new RegExp(expressionWithHttp);

    try {
      return text.replace(regex, (a) => {
        return `<a href='${a}'>${a}</a>`;
      });
    } catch (err) {
      return text;
    }
  }



  extract(obj, path, defaultValue) {
    if (typeof path === "string") path = path.split(".");

    let node = obj;

    for (let i = 0; i < path.length; i++) {
      const key = path[i];

      if (!node) {
        node = undefined;

        break;
      }

      node = node[key];
    }

    return typeof node === "undefined" ? defaultValue : node;
  }

  makeImageUrl = (
    file,
  ) => {
    if (typeof file === 'string')
      return file;

    if (!file)
      return
    return `${file.storage_endpoint}/${file.storage_bucketname}/${file.url}`;
  }


  renderPreview(introBlocks = []) {
    const block = introBlocks[0];

    if (!block) {
      return "/img/card_paid_img01.png";
    }

    if (block.type === "video") {
      return this.makeImageUrl(block.value, 0, "video_preview");
    } else if (block.type === "photo") {
      return this.makeImageUrl(block.value, 0, "medium_filename");
    }

    return "./img/card_paid_img01.png";
  }

  beautifyAmount(
    { amount, currency, action },
    withAction = true,
    needConvertToBase = true
  ) {
    if (needConvertToBase) {
      amount = this.minorToBase(amount, currency);
    }
    let v = +amount.toFixed(2);
    let operator = "";

    v = (+v).toLocaleString("ru");

    if (action !== undefined && withAction) {
      if (action === "withdraw") {
        operator = "-";
      } else {
        operator = "+";
      }
    }

    return `${operator}${v} ${this.getCurrency(currency)}`;
  }

  getCurrency(code, type = "symbol_native") {
    if (CurrencyCode[code] && CurrencyCode[code][type]) {
      return CurrencyCode[code][type];
    } else {
      return code;
    }
  }

  minorToBase = function (value, currency) {
    const coef = denominationCoef[currency] || denominationCoef["*"];

    return value / coef;
  };

  baseToMinor = function (value, currency) {
    const coef =
      denominationCoef[currency] || denominationCoef['*'];
    return Math.round(value * coef);
  };


  getMobileOS(ua) {
    if (/android/i.test(ua)) {
      return "Android";
    } else if (/iPad|iPhone|iPod/.test(ua)) {
      return "iOS";
    }
    return "Other";
  }

  removeTags(str) {
    if (str === null || str === "") return false;
    else str = str.toString();

    // Regular expression to identify HTML tags in
    // the input string. Replacing the identified
    // HTML tag with a null string.
    return str.replace(/(<([^>]+)>)/gi, (...args) => {
      return "";
    });
  }

  if(condition, ct = "", cf = "") {
    let c = typeof condition === "function" ? condition() : !!condition;

    return c ? ct : cf;
  }

  getRandomString() {
    return "_" + Math.random().toString(36).substr(2, 9);
  }

  get(obj, path, defaultValue) {
    if (typeof path === "string") path = path.split(".");

    let node = obj;

    for (let i = 0; i < path.length; i++) {
      const key = path[i];

      if (!node) {
        node = undefined;

        break;
      }

      node = node[key];
    }

    return typeof node === "undefined" ? defaultValue : node;
  }

  set(obj, path, defaultValue, setter) {
    if (typeof path === "string") path = path.split(".");

    if (typeof setter === "undefined") setter = defaultValue;

    let value = this.get(obj, path);

    if (
      (typeof value === "undefined" ||
        (typeof value === "number" && isNaN(value))) &&
      typeof defaultValue !== "function"
    ) {
      value = defaultValue;
    }

    let node = obj;

    for (var i = 0; i < path.length - 1; i++) {
      const key = path[i];
      const nextKey = +path[i + 1];

      if (!node[key]) node[key] = isNaN(nextKey) ? {} : [];

      node = node[key];
    }

    node[path[i]] = typeof setter === "function" ? setter(value) : setter;

    return obj;
  }

  escape(string) {
    const reUnescapedHtml = /[&<>]/g;
    const reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
    const htmlEscapes = {
      "&": "&amp",
      "<": "&lt",
      ">": "&gt",
    };

    return string && reHasUnescapedHtml.test(string)
      ? string.replace(reUnescapedHtml, (chr) => htmlEscapes[chr])
      : string;
  }

  _colors = {
    light: {
      textGray: "#67738A",
      textLightGray: "#ACB4C6",
      textGreen: "#09B96A",
      textRed: "#FF1A05",
      textOrange: "#D97706",
      textBlue: "#124BE7",
    },
    dark: {
      textGray: "#676C7A",
      textLightGray: "#484F5D",
      textGreen: "#00904E",
      textRed: "#F79389",
      textOrange: "#935F07",
      textBlue: "#163B8D",
    },
  };



parseMessageEntities({ value, options = {} }, { theme }) {
  if (!value) return "";
  const text = this.escape(value);
  const entities = options.entities;

  if (!entities || entities.length === 0) {
    return text;
  }

  const getOpenTag = (entity) => {
    switch (entity.type) {
      case "B":
        return `<b>`;
      case "A":
        const isExternal = /^http/.test(entity.href);
        return `<a ${isExternal ? `external="true" target="_blank"` : ""} href="${entity.href}">`;
      case "I":
        return `<i>`;
      case "FONT":
        return `<font color="${this._colors[theme][entity.color] || entity.color}">`;
      case "STRIKE":
        return `<strike>`;
      case "U":
        return `<u>`;
      default:
        return "";
    }
  };

  const getCloseTag = (entity) => {
    switch (entity.type) {
      case "B":
        return `</b>`;
      case "A":
        return `</a>`;
      case "I":
        return `</i>`;
      case "FONT":
        return `</font>`;
      case "STRIKE":
        return `</strike>`;
      case "U":
        return `</u>`;
      default:
        return "";
    }
  };

  // Создаем карту событий (открытие/закрытие тегов по позиции)
  const events = new Map();

  entities.forEach((entity) => {
    const startPos = entity.offset;
    const endPos = entity.offset + entity.length;

    // Добавляем открывающий тег
    if (!events.has(startPos)) {
      events.set(startPos, { opens: [], closes: [] });
    }
    events.get(startPos).opens.push(entity);

    // Добавляем закрывающий тег
    if (!events.has(endPos)) {
      events.set(endPos, { opens: [], closes: [] });
    }
    events.get(endPos).closes.push(entity);
  });

  let html = "";
  const openTags = [];

  for (let i = 0; i < text.length; i++) {
    const event = events.get(i);

    if (event) {
      // Закрываем теги (в обратном порядке, чтобы правильно закрыть вложенные)
      if (event.closes.length > 0) {
        // Сортируем закрываемые теги по длине (сначала самые длинные)
        const sortedCloses = [...event.closes].sort((a, b) => b.length - a.length);
        for (const entity of sortedCloses) {
          const closeTag = getCloseTag(entity);
          if (closeTag) {
            html += closeTag;
            // Удаляем из стека открытых тегов
            const index = openTags.indexOf(entity);
            if (index !== -1) {
              openTags.splice(index, 1);
            }
          }
        }
      }

      // Открываем теги (в порядке добавления)
      if (event.opens.length > 0) {
        for (const entity of event.opens) {
          const openTag = getOpenTag(entity);
          if (openTag) {
            html += openTag;
            openTags.push(entity);
          }
        }
      }
    }

    // Добавляем символ
    html += this.replaceUrlsWithLinks(text[i]);
  }

  // Закрываем все оставшиеся открытые теги (в обратном порядке)
  for (let i = openTags.length - 1; i >= 0; i--) {
    const closeTag = getCloseTag(openTags[i]);
    if (closeTag) {
      html += closeTag;
    }
  }

  return html;
}

  createRange(node, targetPosition) {
    let range = document.createRange();
    range.selectNode(node);
    range.setStart(node, 0);

    let pos = 0;
    const stack = [node];
    while (stack.length > 0) {
      const current = stack.pop();

      if (current.nodeType === Node.TEXT_NODE) {
        const len = current.textContent.length;
        if (pos + len >= targetPosition) {
          range.setEnd(current, targetPosition - pos);
          return range;
        }
        pos += len;
      } else if (current.childNodes && current.childNodes.length > 0) {
        for (let i = current.childNodes.length - 1; i >= 0; i--) {
          stack.push(current.childNodes[i]);
        }
      }
    }

    range.setEnd(node, node.childNodes.length);
    return range;
  }

  setPosition(targetPosition, contentEle) {
    const range = this.createRange(contentEle, targetPosition);
    const selection = window.getSelection();
    selection.removeAllRanges();
    selection.addRange(range);
  }

  getPosition(contentEle) {
    const selection = window.getSelection();
    const range = selection.getRangeAt(0);
    const clonedRange = range.cloneRange();
    clonedRange.selectNodeContents(contentEle);
    clonedRange.setEnd(range.endContainer, range.endOffset);

    return clonedRange.toString().length;
  }

  parseMessageEntities({ value, options = {} }, { theme }) {
    if (!value) return "";
    const text = this.escape(value);
    const entities = options.entities;

    const getTag = (entity, text) => {
      switch (entity.type) {
        case "B":
          return `<b>`;
        case "A":
          const isExternal = /^http/.test(entity.href);
          return `<a ${isExternal ? `external="true" target="_blank"` : ""
            } href="${entity.href}">`;
        case "I":
          return `<i>`;
        case "FONT":
          //return `<font color="${entity.color}">`;
          return `<font color="${this._colors[theme][entity.color] || entity.color
            }">`;

        case "STRIKE":
          return `<strike>`;
        case "U":
          return `<u>`;
      }
    };

    if (!entities || entities.length === 0) {
      return text;
    }

    let tags = [];

    entities.forEach((entity) => {
      const startTag = getTag(entity, text);
      if (!startTag) return text;
      let searchTag = tags.filter((tag) => tag.index === entity.offset);
      if (searchTag.length > 0) searchTag[0].tag += startTag;
      else
        tags.push({
          index: entity.offset,
          tag: startTag,
        });

      const closeTag =
        startTag.indexOf("<a ") === 0 ? "</a>" : "</" + startTag.slice(1);
      searchTag = tags.filter(
        (tag) => tag.index === entity.offset + entity.length
      );
      if (searchTag.length > 0) searchTag[0].tag = closeTag + searchTag[0].tag;
      else
        tags.push({
          index: entity.offset + entity.length,
          tag: closeTag,
        });
    });
    let html = "";
    for (let i = 0; i < text.length; i++) {
      const tag = tags.filter((tag) => tag.index === i);
      tags = tags.filter((tag) => tag.index !== i);
      if (tag.length > 0) html += tag[0].tag;
      html += this.replaceUrlsWithLinks(text[i]);
    }
    if (tags.length > 0) html += tags[0].tag;

    return html;
  }


  parseDataTransfer(data) {
    const res = [];
    for (let i = 0; i < data.length; i += 1) {
      if (data[i].kind === "string" && data[i].type.match("^text/plain")) {
        data[i].getAsString((s) => {
          console.log(s, "string");
        });
      } else if (
        data[i].kind === "string" &&
        data[i].type.match("^text/html")
      ) {
        // Drag data item is HTML
        data[i].getAsString((s) => {
          console.log(s, "HTML");
        });
      } else if (
        data[i].kind === "string" &&
        data[i].type.match("^text/uri-list")
      ) {
        // Drag data item is URI
        data[i].getAsString((s) => {
          console.log(s, "URI");
        });
      } else if (data[i].kind === "file" && data[i].type.match("^image/")) {
        // Drag data item is an image file
        const f = data[i].getAsFile();
        console.log("… Drop: File", f);
      } else {
        data[i].getAsString((s) => {
          console.log(s, "HZ");
        });
      }
    }
  }


  async wait(t = 1000) {
    return new Promise((resolve) => {
      setTimeout(() => {
        resolve();
      }, t);
    });
  }

  async fileIsReady(_id, attemps = 0) {
    await this.wait(3000);

    const createdFile = await Page.server("/files/ready", { _id });

    if (createdFile.ready) {
      return createdFile;
    } else {
      return this.fileIsReady(_id, attemps + 1);
    }
  }

  mmss(ms) {
    try {
      if (ms > 3600000) {
        return new Date(ms).toISOString().substr(11, 8);
      } else {
        return new Date(ms).toISOString().substr(14, 5);
      }
    } catch (err) {
      return "00:00";
    }
  }

  testPolicy(policy, e) {
    return (command, entity = e) => {
      if (!policy)
        return false;

      if (!policy[entity])
        return false;

      if (policy[entity].allow.length === 0)
        return false;


      return !!policy[entity].allow.includes(command);
    }
  }

  upload(file, { prefix = "UNW", options = {} }, cb = () => { }) {
    const tmpid = this.getRandomString();
    const fn = async () => {
      try {
        const createdFile = {
          content_type: file.type,
          type: file.type,
          options
        }

        const ws = Page.store.get('ws');

        const res = await ws.rpc('file.getUploadUrl', {
          content_type: file.type,
          origin_uri: 'some_path.jpg'
        });




        Page.store.emit(`onUploadStart.${tmpid}`, createdFile);


        await this.uploadBinaryFile({
          upload_url: res.upload_url,
          content_type: file.type,
          file: file,
          onProgress: progress => {
            Page.store.emit("progress", ({ progress }));
            Page.store.emit(`onUploadProgress.${tmpid}`, progress);
          }
        });

        // const res2 = await this.uploadBinaryFile({
        //   upload_url: f.upload_url,
        //   content_type: f.content_type,
        //   file,
        //   onProgress: (p) => {
        //     Page.store.emit(`onUploadProgress.${tmpid}`, p);
        //   },
        // });

        // Page.store.emit(`onProcessingStart.${tmpid}`, res);

        //const createdFile = await this.fileIsReady(f._id);


        createdFile.uri = res.filename;
        createdFile.url = res.filename;
        createdFile.storage_bucketname = res.storage_bucketname;
        createdFile.storage_endpoint = res.storage_endpoint;
        createdFile.filename = res.filename;



        Page.store.emit(`onUploaded.${tmpid}`, {
          ...createdFile,
          loaded: true,
        });

        Page.store.emit("progress", ({ progress: 100 }));


        return tmpid;
      } catch (err) {
        console.log(err);
      }
    };

    return [tmpid, fn()];
  }

  uploa2d(file, { prefix = "UNW", options = {} }, cb = () => { }) {
    const tmpid = this.getRandomString();

    const fn = async () => {
      try {
        const f = await Page.server("/files/create", {
          content_type: file.type,
          prefix: prefix,
          options: {
            size: file.size,
            width: file.width,
            height: file.height,
            duration: file.duration,
            filename: file.name,
            ...options,
          },
        });

        Page.store.emit(`onUploadStart.${tmpid}`, {...f, loading: true, loaded: false, processing: false });

        const res = await this.uploadBinaryFile({
          upload_url: f.upload_url,
          content_type: f.content_type,
          file,
          onProgress: (p) => {
            Page.store.emit(`onUploadProgress.${tmpid}`, p);
          },
        });

        Page.store.emit(`onProcessingStart.${tmpid}`, { ...f, loading: false, processing: true });

        const createdFile = await this.fileIsReady(f._id);

        Page.store.emit(`onUploaded.${tmpid}`, {
          ...createdFile,
          loaded: true,
          loading: void 0,
          processing: void 0,
        });

        return tmpid;
      } catch (err) {
        console.log(err);
      }
    };

    return [tmpid, fn()];
  }

  async uploadBinaryFile({ upload_url, content_type, file, onProgress }) {
    return new Promise((resolve, reject) => {
      const xhr = new XMLHttpRequest();

      xhr.onload = () => {
        if (xhr.status === 200) {
          // succeeded
          resolve(xhr.response);
        } else {
          reject(xhr.response);
        }
      };

      xhr.onerror = (error) => {
        reject(error);
      };

      xhr.open("PUT", upload_url, true);
      xhr.setRequestHeader("content-type", content_type);

      xhr.upload.onprogress = function (event) {
        if (onProgress) {
          onProgress(Math.round((event.loaded / event.total) * 100), event);
        }
      };
      xhr.send(file);
    });
  }

  getUID() {
    return "_" + Math.random().toString(36).substr(2, 9);
  };

  UUIDGeneratorBrowser = (prefix) =>
    prefix +
    ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) =>
      (
        c ^
        (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))
      ).toString(16)
    );


  createCheckValidationFunction(invalidClass, block) {

    return () => {
      let res = true;


      const check = (event) => {
        event.target.classList.toggle(invalidClass, false);
      }

      block.root.querySelectorAll('input, select, textarea').forEach((el) => {
        const isvalid = el.checkValidity()

        if (!isvalid) {
          res = isvalid;

          if (!el.classList.contains(invalidClass)) {
            if (el.type === 'text' || el.tagName === 'TEXTAREA') {
              el.addEventListener('input', check, { once: true })
            } else {
              el.addEventListener('change', check, { once: true });
            }
          }
        }

        el.classList.toggle(invalidClass, !isvalid);
      });


      if (!res) {
        block.page.store.emit('notification', {
          text: 'Неправильно заполнена форма',
          mode: 'error',
        });
      }


      return res;
    }
  }




  bytesToSize(bytes, precision = 2, useSI = false) {
    if (bytes === 0) return '0 Байт';
    const factor = useSI ? 1000 : 1024;
    const units = useSI
      ? ['Байт', 'КБ', 'МБ', 'ГБ', 'ТБ']
      : ['Байт', 'КиБ', 'МиБ', 'ГиБ', 'ТиБ'];
    const index = Math.floor(Math.log(bytes) / Math.log(factor));
    return (bytes / Math.pow(factor, index)).toFixed(precision) + ' ' + units[index];
  }


  calcMana = ({ mana = 10, level = 1 }) => {
    return ~~(mana + (mana * 1) / 10);
  }

})();

if (!window.setImmediate) window.setImmediate = (function() {
    var head = {},
      tail = head; // очередь вызовов, 1-связный список
  
    var ID = Math.random(); // уникальный идентификатор
  
    function onmessage(e) {
      if (e.data != ID) return; // не наше сообщение
      head = head.next;
      var func = head.func;
      delete head.func;
      func();
    }
  
    if (window.addEventListener) { // IE9+, другие браузеры
      window.addEventListener('message', onmessage);
    } else { // IE8
      window.attachEvent('onmessage', onmessage);
    }
  
    return function(func) {
      tail = tail.next = {
        func: func
      };
      window.postMessage(ID, "*");
    };
  }());

(() => {
    'use strict';

var DOCUMENT_FRAGMENT_NODE = 11;

function morphAttrs(fromNode, toNode) {
    var toNodeAttrs = toNode.attributes;
    var attr;
    var attrName;
    var attrNamespaceURI;
    var attrValue;
    var fromValue;

    // document-fragments dont have attributes so lets not do anything
    if (toNode.nodeType === DOCUMENT_FRAGMENT_NODE || fromNode.nodeType === DOCUMENT_FRAGMENT_NODE) {
      return;
    }

    // update attributes on original DOM element
    for (var i = toNodeAttrs.length - 1; i >= 0; i--) {
        attr = toNodeAttrs[i];
        attrName = attr.name;
        attrNamespaceURI = attr.namespaceURI;
        attrValue = attr.value;

        if (attrNamespaceURI) {
            attrName = attr.localName || attrName;
            fromValue = fromNode.getAttributeNS(attrNamespaceURI, attrName);

            if (fromValue !== attrValue) {
                if (attr.prefix === 'xmlns'){
                    attrName = attr.name; // It's not allowed to set an attribute with the XMLNS namespace without specifying the `xmlns` prefix
                }
                fromNode.setAttributeNS(attrNamespaceURI, attrName, attrValue);
            }
        } else {
            fromValue = fromNode.getAttribute(attrName);

            if (fromValue !== attrValue) {
                fromNode.setAttribute(attrName, attrValue);
            }
        }
    }

    // Remove any extra attributes found on the original DOM element that
    // weren't found on the target element.
    var fromNodeAttrs = fromNode.attributes;

    for (var d = fromNodeAttrs.length - 1; d >= 0; d--) {
        attr = fromNodeAttrs[d];
        attrName = attr.name;
        attrNamespaceURI = attr.namespaceURI;

        if (attrNamespaceURI) {
            attrName = attr.localName || attrName;

            if (!toNode.hasAttributeNS(attrNamespaceURI, attrName)) {
                fromNode.removeAttributeNS(attrNamespaceURI, attrName);
            }
        } else {
            if (!toNode.hasAttribute(attrName)) {
                fromNode.removeAttribute(attrName);
            }
        }
    }
}

var range; // Create a range object for efficently rendering strings to elements.
var NS_XHTML = 'http://www.w3.org/1999/xhtml';

var doc = typeof document === 'undefined' ? undefined : document;
var HAS_TEMPLATE_SUPPORT = !!doc && 'content' in doc.createElement('template');
var HAS_RANGE_SUPPORT = !!doc && doc.createRange && 'createContextualFragment' in doc.createRange();

function createFragmentFromTemplate(str) {
    var template = doc.createElement('template');
    template.innerHTML = str;
    return template.content.childNodes[0];
}

function createFragmentFromRange(str) {
    if (!range) {
        range = doc.createRange();
        range.selectNode(doc.body);
    }

    var fragment = range.createContextualFragment(str);
    return fragment.childNodes[0];
}

function createFragmentFromWrap(str) {
    var fragment = doc.createElement('body');
    fragment.innerHTML = str;
    return fragment.childNodes[0];
}

/**
 * This is about the same
 * var html = new DOMParser().parseFromString(str, 'text/html');
 * return html.body.firstChild;
 *
 * @method toElement
 * @param {String} str
 */
function toElement(str) {
    str = str.trim();
    if (HAS_TEMPLATE_SUPPORT) {
      // avoid restrictions on content for things like `<tr><th>Hi</th></tr>` which
      // createContextualFragment doesn't support
      // <template> support not available in IE
      return createFragmentFromTemplate(str);
    } else if (HAS_RANGE_SUPPORT) {
      return createFragmentFromRange(str);
    }

    return createFragmentFromWrap(str);
}

/**
 * Returns true if two node's names are the same.
 *
 * NOTE: We don't bother checking `namespaceURI` because you will never find two HTML elements with the same
 *       nodeName and different namespace URIs.
 *
 * @param {Element} a
 * @param {Element} b The target element
 * @return {boolean}
 */
function compareNodeNames(fromEl, toEl) {
    var fromNodeName = fromEl.nodeName;
    var toNodeName = toEl.nodeName;
    var fromCodeStart, toCodeStart;

    if (fromNodeName === toNodeName) {
        return true;
    }

    fromCodeStart = fromNodeName.charCodeAt(0);
    toCodeStart = toNodeName.charCodeAt(0);

    // If the target element is a virtual DOM node or SVG node then we may
    // need to normalize the tag name before comparing. Normal HTML elements that are
    // in the "http://www.w3.org/1999/xhtml"
    // are converted to upper case
    if (fromCodeStart <= 90 && toCodeStart >= 97) { // from is upper and to is lower
        return fromNodeName === toNodeName.toUpperCase();
    } else if (toCodeStart <= 90 && fromCodeStart >= 97) { // to is upper and from is lower
        return toNodeName === fromNodeName.toUpperCase();
    } else {
        return false;
    }
}

/**
 * Create an element, optionally with a known namespace URI.
 *
 * @param {string} name the element name, e.g. 'div' or 'svg'
 * @param {string} [namespaceURI] the element's namespace URI, i.e. the value of
 * its `xmlns` attribute or its inferred namespace.
 *
 * @return {Element}
 */
function createElementNS(name, namespaceURI) {
    return !namespaceURI || namespaceURI === NS_XHTML ?
        doc.createElement(name) :
        doc.createElementNS(namespaceURI, name);
}

/**
 * Copies the children of one DOM element to another DOM element
 */
function moveChildren(fromEl, toEl) {
    var curChild = fromEl.firstChild;
    while (curChild) {
        var nextChild = curChild.nextSibling;
        toEl.appendChild(curChild);
        curChild = nextChild;
    }
    return toEl;
}

function syncBooleanAttrProp(fromEl, toEl, name) {
    if (fromEl[name] !== toEl[name]) {
        fromEl[name] = toEl[name];
        if (fromEl[name]) {
            fromEl.setAttribute(name, '');
        } else {
            fromEl.removeAttribute(name);
        }
    }
}

var specialElHandlers = {
    OPTION: function(fromEl, toEl) {
        var parentNode = fromEl.parentNode;
        if (parentNode) {
            var parentName = parentNode.nodeName.toUpperCase();
            if (parentName === 'OPTGROUP') {
                parentNode = parentNode.parentNode;
                parentName = parentNode && parentNode.nodeName.toUpperCase();
            }
            if (parentName === 'SELECT' && !parentNode.hasAttribute('multiple')) {
                if (fromEl.hasAttribute('selected') && !toEl.selected) {
                    // Workaround for MS Edge bug where the 'selected' attribute can only be
                    // removed if set to a non-empty value:
                    // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12087679/
                    fromEl.setAttribute('selected', 'selected');
                    fromEl.removeAttribute('selected');
                }
                // We have to reset select element's selectedIndex to -1, otherwise setting
                // fromEl.selected using the syncBooleanAttrProp below has no effect.
                // The correct selectedIndex will be set in the SELECT special handler below.
                parentNode.selectedIndex = -1;
            }
        }
        syncBooleanAttrProp(fromEl, toEl, 'selected');
    },
    /**
     * The "value" attribute is special for the <input> element since it sets
     * the initial value. Changing the "value" attribute without changing the
     * "value" property will have no effect since it is only used to the set the
     * initial value.  Similar for the "checked" attribute, and "disabled".
     */
    INPUT: function(fromEl, toEl) {
        syncBooleanAttrProp(fromEl, toEl, 'checked');
        syncBooleanAttrProp(fromEl, toEl, 'disabled');

        if (fromEl.value !== toEl.value) {
            fromEl.value = toEl.value;
        }

        if (!toEl.hasAttribute('value')) {
            fromEl.removeAttribute('value');
        }
    },

    TEXTAREA: function(fromEl, toEl) {
        var newValue = toEl.value;
        if (fromEl.value !== newValue) {
            fromEl.value = newValue;
        }

        var firstChild = fromEl.firstChild;
        if (firstChild) {
            // Needed for IE. Apparently IE sets the placeholder as the
            // node value and vise versa. This ignores an empty update.
            var oldValue = firstChild.nodeValue;

            if (oldValue == newValue || (!newValue && oldValue == fromEl.placeholder)) {
                return;
            }

            firstChild.nodeValue = newValue;
        }
    },
    SELECT: function(fromEl, toEl) {
        if (!toEl.hasAttribute('multiple')) {
            var selectedIndex = -1;
            var i = 0;
            // We have to loop through children of fromEl, not toEl since nodes can be moved
            // from toEl to fromEl directly when morphing.
            // At the time this special handler is invoked, all children have already been morphed
            // and appended to / removed from fromEl, so using fromEl here is safe and correct.
            var curChild = fromEl.firstChild;
            var optgroup;
            var nodeName;
            while(curChild) {
                nodeName = curChild.nodeName && curChild.nodeName.toUpperCase();
                if (nodeName === 'OPTGROUP') {
                    optgroup = curChild;
                    curChild = optgroup.firstChild;
                } else {
                    if (nodeName === 'OPTION') {
                        if (curChild.hasAttribute('selected')) {
                            selectedIndex = i;
                            break;
                        }
                        i++;
                    }
                    curChild = curChild.nextSibling;
                    if (!curChild && optgroup) {
                        curChild = optgroup.nextSibling;
                        optgroup = null;
                    }
                }
            }

            fromEl.selectedIndex = selectedIndex;
        }
    }
};

var ELEMENT_NODE = 1;
var DOCUMENT_FRAGMENT_NODE$1 = 11;
var TEXT_NODE = 3;
var COMMENT_NODE = 8;

function noop() {}

function defaultGetNodeKey(node) {
  if (node) {
    return (node.getAttribute && node.getAttribute('id')) || node.id;
  }
}

function morphdomFactory(morphAttrs) {

  return function morphdom(fromNode, toNode, options) {
    if (!options) {
      options = {};
    }

    if (typeof toNode === 'string') {
      if (fromNode.nodeName === '#document' || fromNode.nodeName === 'HTML' || fromNode.nodeName === 'BODY') {
        var toNodeHtml = toNode;
        toNode = doc.createElement('html');
        toNode.innerHTML = toNodeHtml;
      } else {
        toNode = toElement(toNode);
      }
    } else if (toNode.nodeType === DOCUMENT_FRAGMENT_NODE$1) {
      toNode = toNode.firstElementChild;
    }

    var getNodeKey = options.getNodeKey || defaultGetNodeKey;
    var onBeforeNodeAdded = options.onBeforeNodeAdded || noop;
    var onNodeAdded = options.onNodeAdded || noop;
    var onBeforeElUpdated = options.onBeforeElUpdated || noop;
    var onElUpdated = options.onElUpdated || noop;
    var onBeforeNodeDiscarded = options.onBeforeNodeDiscarded || noop;
    var onNodeDiscarded = options.onNodeDiscarded || noop;
    var onBeforeElChildrenUpdated = options.onBeforeElChildrenUpdated || noop;
    var skipFromChildren = options.skipFromChildren || noop;
    var addChild = options.addChild || function(parent, child){ return parent.appendChild(child); };
    var childrenOnly = options.childrenOnly === true;

    // This object is used as a lookup to quickly find all keyed elements in the original DOM tree.
    var fromNodesLookup = Object.create(null);
    var keyedRemovalList = [];

    function addKeyedRemoval(key) {
      keyedRemovalList.push(key);
    }

    function walkDiscardedChildNodes(node, skipKeyedNodes) {
      if (node.nodeType === ELEMENT_NODE) {
        var curChild = node.firstChild;
        while (curChild) {

          var key = undefined;

          if (skipKeyedNodes && (key = getNodeKey(curChild))) {
            // If we are skipping keyed nodes then we add the key
            // to a list so that it can be handled at the very end.
            addKeyedRemoval(key);
          } else {
            // Only report the node as discarded if it is not keyed. We do this because
            // at the end we loop through all keyed elements that were unmatched
            // and then discard them in one final pass.
            onNodeDiscarded(curChild);
            if (curChild.firstChild) {
              walkDiscardedChildNodes(curChild, skipKeyedNodes);
            }
          }

          curChild = curChild.nextSibling;
        }
      }
    }

    /**
    * Removes a DOM node out of the original DOM
    *
    * @param  {Node} node The node to remove
    * @param  {Node} parentNode The nodes parent
    * @param  {Boolean} skipKeyedNodes If true then elements with keys will be skipped and not discarded.
    * @return {undefined}
    */
    function removeNode(node, parentNode, skipKeyedNodes) {
      if (onBeforeNodeDiscarded(node) === false) {
        return;
      }

      if (parentNode) {
        parentNode.removeChild(node);
      }

      onNodeDiscarded(node);
      walkDiscardedChildNodes(node, skipKeyedNodes);
    }

    // // TreeWalker implementation is no faster, but keeping this around in case this changes in the future
    // function indexTree(root) {
    //     var treeWalker = document.createTreeWalker(
    //         root,
    //         NodeFilter.SHOW_ELEMENT);
    //
    //     var el;
    //     while((el = treeWalker.nextNode())) {
    //         var key = getNodeKey(el);
    //         if (key) {
    //             fromNodesLookup[key] = el;
    //         }
    //     }
    // }

    // // NodeIterator implementation is no faster, but keeping this around in case this changes in the future
    //
    // function indexTree(node) {
    //     var nodeIterator = document.createNodeIterator(node, NodeFilter.SHOW_ELEMENT);
    //     var el;
    //     while((el = nodeIterator.nextNode())) {
    //         var key = getNodeKey(el);
    //         if (key) {
    //             fromNodesLookup[key] = el;
    //         }
    //     }
    // }

    function indexTree(node) {
      if (node.nodeType === ELEMENT_NODE || node.nodeType === DOCUMENT_FRAGMENT_NODE$1) {
        var curChild = node.firstChild;
        while (curChild) {
          var key = getNodeKey(curChild);
          if (key) {
            fromNodesLookup[key] = curChild;
          }

          // Walk recursively
          indexTree(curChild);

          curChild = curChild.nextSibling;
        }
      }
    }

    indexTree(fromNode);

    function handleNodeAdded(el) {
      onNodeAdded(el);

      var curChild = el.firstChild;
      while (curChild) {
        var nextSibling = curChild.nextSibling;

        var key = getNodeKey(curChild);
        if (key) {
          var unmatchedFromEl = fromNodesLookup[key];
          // if we find a duplicate #id node in cache, replace `el` with cache value
          // and morph it to the child node.
          if (unmatchedFromEl && compareNodeNames(curChild, unmatchedFromEl)) {
            curChild.parentNode.replaceChild(unmatchedFromEl, curChild);
            morphEl(unmatchedFromEl, curChild);
          } else {
            handleNodeAdded(curChild);
          }
        } else {
          // recursively call for curChild and it's children to see if we find something in
          // fromNodesLookup
          handleNodeAdded(curChild);
        }

        curChild = nextSibling;
      }
    }

    function cleanupFromEl(fromEl, curFromNodeChild, curFromNodeKey) {
      // We have processed all of the "to nodes". If curFromNodeChild is
      // non-null then we still have some from nodes left over that need
      // to be removed
      while (curFromNodeChild) {
        var fromNextSibling = curFromNodeChild.nextSibling;
        if ((curFromNodeKey = getNodeKey(curFromNodeChild))) {
          // Since the node is keyed it might be matched up later so we defer
          // the actual removal to later
          addKeyedRemoval(curFromNodeKey);
        } else {
          // NOTE: we skip nested keyed nodes from being removed since there is
          //       still a chance they will be matched up later
          removeNode(curFromNodeChild, fromEl, true /* skip keyed nodes */);
        }
        curFromNodeChild = fromNextSibling;
      }
    }

    function morphEl(fromEl, toEl, childrenOnly) {
      var toElKey = getNodeKey(toEl);

      if (toElKey) {
        // If an element with an ID is being morphed then it will be in the final
        // DOM so clear it out of the saved elements collection
        delete fromNodesLookup[toElKey];
      }

      if (!childrenOnly) {
        // optional
        if (onBeforeElUpdated(fromEl, toEl) === false) {
          return;
        }

        // update attributes on original DOM element first
        morphAttrs(fromEl, toEl);
        // optional
        onElUpdated(fromEl);

        if (onBeforeElChildrenUpdated(fromEl, toEl) === false) {
          return;
        }
      }

      if (fromEl.nodeName !== 'TEXTAREA') {
        morphChildren(fromEl, toEl);
      } else {
        specialElHandlers.TEXTAREA(fromEl, toEl);
      }
    }

    function morphChildren(fromEl, toEl) {
      var skipFrom = skipFromChildren(fromEl, toEl);
      var curToNodeChild = toEl.firstChild;
      var curFromNodeChild = fromEl.firstChild;
      var curToNodeKey;
      var curFromNodeKey;

      var fromNextSibling;
      var toNextSibling;
      var matchingFromEl;

      // walk the children
      outer: while (curToNodeChild) {
        toNextSibling = curToNodeChild.nextSibling;
        curToNodeKey = getNodeKey(curToNodeChild);

        // walk the fromNode children all the way through
        while (!skipFrom && curFromNodeChild) {
          fromNextSibling = curFromNodeChild.nextSibling;

          if (curToNodeChild.isSameNode && curToNodeChild.isSameNode(curFromNodeChild)) {
            curToNodeChild = toNextSibling;
            curFromNodeChild = fromNextSibling;
            continue outer;
          }

          curFromNodeKey = getNodeKey(curFromNodeChild);

          var curFromNodeType = curFromNodeChild.nodeType;

          // this means if the curFromNodeChild doesnt have a match with the curToNodeChild
          var isCompatible = undefined;

          if (curFromNodeType === curToNodeChild.nodeType) {
            if (curFromNodeType === ELEMENT_NODE) {
              // Both nodes being compared are Element nodes

              if (curToNodeKey) {
                // The target node has a key so we want to match it up with the correct element
                // in the original DOM tree
                if (curToNodeKey !== curFromNodeKey) {
                  // The current element in the original DOM tree does not have a matching key so
                  // let's check our lookup to see if there is a matching element in the original
                  // DOM tree
                  if ((matchingFromEl = fromNodesLookup[curToNodeKey])) {
                    if (fromNextSibling === matchingFromEl) {
                      // Special case for single element removals. To avoid removing the original
                      // DOM node out of the tree (since that can break CSS transitions, etc.),
                      // we will instead discard the current node and wait until the next
                      // iteration to properly match up the keyed target element with its matching
                      // element in the original tree
                      isCompatible = false;
                    } else {
                      // We found a matching keyed element somewhere in the original DOM tree.
                      // Let's move the original DOM node into the current position and morph
                      // it.

                      // NOTE: We use insertBefore instead of replaceChild because we want to go through
                      // the `removeNode()` function for the node that is being discarded so that
                      // all lifecycle hooks are correctly invoked
                      fromEl.insertBefore(matchingFromEl, curFromNodeChild);

                      // fromNextSibling = curFromNodeChild.nextSibling;

                      if (curFromNodeKey) {
                        // Since the node is keyed it might be matched up later so we defer
                        // the actual removal to later
                        addKeyedRemoval(curFromNodeKey);
                      } else {
                        // NOTE: we skip nested keyed nodes from being removed since there is
                        //       still a chance they will be matched up later
                        removeNode(curFromNodeChild, fromEl, true /* skip keyed nodes */);
                      }

                      curFromNodeChild = matchingFromEl;
                      curFromNodeKey = getNodeKey(curFromNodeChild);
                    }
                  } else {
                    // The nodes are not compatible since the "to" node has a key and there
                    // is no matching keyed node in the source tree
                    isCompatible = false;
                  }
                }
              } else if (curFromNodeKey) {
                // The original has a key
                isCompatible = false;
              }

              isCompatible = isCompatible !== false && compareNodeNames(curFromNodeChild, curToNodeChild);
              if (isCompatible) {
                // We found compatible DOM elements so transform
                // the current "from" node to match the current
                // target DOM node.
                // MORPH
                morphEl(curFromNodeChild, curToNodeChild);
              }

            } else if (curFromNodeType === TEXT_NODE || curFromNodeType == COMMENT_NODE) {
              // Both nodes being compared are Text or Comment nodes
              isCompatible = true;
              // Simply update nodeValue on the original node to
              // change the text value
              if (curFromNodeChild.nodeValue !== curToNodeChild.nodeValue) {
                curFromNodeChild.nodeValue = curToNodeChild.nodeValue;
              }

            }
          }

          if (isCompatible) {
            // Advance both the "to" child and the "from" child since we found a match
            // Nothing else to do as we already recursively called morphChildren above
            curToNodeChild = toNextSibling;
            curFromNodeChild = fromNextSibling;
            continue outer;
          }

          // No compatible match so remove the old node from the DOM and continue trying to find a
          // match in the original DOM. However, we only do this if the from node is not keyed
          // since it is possible that a keyed node might match up with a node somewhere else in the
          // target tree and we don't want to discard it just yet since it still might find a
          // home in the final DOM tree. After everything is done we will remove any keyed nodes
          // that didn't find a home
          if (curFromNodeKey) {
            // Since the node is keyed it might be matched up later so we defer
            // the actual removal to later
            addKeyedRemoval(curFromNodeKey);
          } else {
            // NOTE: we skip nested keyed nodes from being removed since there is
            //       still a chance they will be matched up later
            removeNode(curFromNodeChild, fromEl, true /* skip keyed nodes */);
          }

          curFromNodeChild = fromNextSibling;
        } // END: while(curFromNodeChild) {}

        // If we got this far then we did not find a candidate match for
        // our "to node" and we exhausted all of the children "from"
        // nodes. Therefore, we will just append the current "to" node
        // to the end
        if (curToNodeKey && (matchingFromEl = fromNodesLookup[curToNodeKey]) && compareNodeNames(matchingFromEl, curToNodeChild)) {
          // MORPH
          if(!skipFrom){ addChild(fromEl, matchingFromEl); }
          morphEl(matchingFromEl, curToNodeChild);
        } else {
          var onBeforeNodeAddedResult = onBeforeNodeAdded(curToNodeChild);
          if (onBeforeNodeAddedResult !== false) {
            if (onBeforeNodeAddedResult) {
              curToNodeChild = onBeforeNodeAddedResult;
            }

            if (curToNodeChild.actualize) {
              curToNodeChild = curToNodeChild.actualize(fromEl.ownerDocument || doc);
            }
            addChild(fromEl, curToNodeChild);
            handleNodeAdded(curToNodeChild);
          }
        }

        curToNodeChild = toNextSibling;
        curFromNodeChild = fromNextSibling;
      }

      cleanupFromEl(fromEl, curFromNodeChild, curFromNodeKey);

      var specialElHandler = specialElHandlers[fromEl.nodeName];
      if (specialElHandler) {
        specialElHandler(fromEl, toEl);
      }
    } // END: morphChildren(...)

    var morphedNode = fromNode;
    var morphedNodeType = morphedNode.nodeType;
    var toNodeType = toNode.nodeType;

    if (!childrenOnly) {
      // Handle the case where we are given two DOM nodes that are not
      // compatible (e.g. <div> --> <span> or <div> --> TEXT)
      if (morphedNodeType === ELEMENT_NODE) {
        if (toNodeType === ELEMENT_NODE) {
          if (!compareNodeNames(fromNode, toNode)) {
            onNodeDiscarded(fromNode);
            morphedNode = moveChildren(fromNode, createElementNS(toNode.nodeName, toNode.namespaceURI));
          }
        } else {
          // Going from an element node to a text node
          morphedNode = toNode;
        }
      } else if (morphedNodeType === TEXT_NODE || morphedNodeType === COMMENT_NODE) { // Text or comment node
        if (toNodeType === morphedNodeType) {
          if (morphedNode.nodeValue !== toNode.nodeValue) {
            morphedNode.nodeValue = toNode.nodeValue;
          }

          return morphedNode;
        } else {
          // Text node to something else
          morphedNode = toNode;
        }
      }
    }

    if (morphedNode === toNode) {
      // The "to node" was not compatible with the "from node" so we had to
      // toss out the "from node" and use the "to node"
      onNodeDiscarded(fromNode);
    } else {
      if (toNode.isSameNode && toNode.isSameNode(morphedNode)) {
        return;
      }

      morphEl(morphedNode, toNode, childrenOnly);

      // We now need to loop over any keyed nodes that might need to be
      // removed. We only do the removal if we know that the keyed node
      // never found a match. When a keyed node is matched up we remove
      // it out of fromNodesLookup and we use fromNodesLookup to determine
      // if a keyed node has been matched up or not
      if (keyedRemovalList) {
        for (var i=0, len=keyedRemovalList.length; i<len; i++) {
          var elToRemove = fromNodesLookup[keyedRemovalList[i]];
          if (elToRemove) {
            removeNode(elToRemove, elToRemove.parentNode, false);
          }
        }
      }
    }

    if (!childrenOnly && morphedNode !== fromNode && fromNode.parentNode) {
      if (morphedNode.actualize) {
        morphedNode = morphedNode.actualize(fromNode.ownerDocument || doc);
      }
      // If we had to swap out the from node with a new node because the old
      // node was not compatible with the target node then we need to
      // replace the old DOM node in the original DOM tree. This is only
      // possible if the original DOM node was part of a DOM tree which
      // we know is the case if it has a parent node.
      fromNode.parentNode.replaceChild(morphedNode, fromNode);
    }

    return morphedNode;
  };
}

window.morphdom = morphdomFactory(morphAttrs);

})()

const UUIDGeneratorBrowser = (prefix) =>
  prefix +
  ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) =>
    (
      c ^
      (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))
    ).toString(16)
  );
class WSClient {
  constructor(host, options = {}) {
    this.host = host;
    this.pingInterval = options.pingInterval || 5000;
    this.reconnectInterval = options.reconnectInterval || 5000;
    this.connected = false;
    this._queue = [];
    this._aqueue = [];
    this._listeners = {};
    this.subscribes = [];
  }

  connect() {
    if (this.connected || this._socket !== undefined) return;

    this.emit('connecting');

    console.log('connecting');

    this._socket = new WebSocket(this.host);
    this._socket.onmessage = message => this.onMessage(message);
    this._socket.onclose = message => this.onClose(message);
    this._socket.onerror = message => this.onError(message);
    this._socket.onopen = message => this.onConnect(message);
  }

  emit(event, message = this) {
    if (this._listeners[event] === undefined) return this;

    let l = this._listeners[event].length;

    while (l--) {
      this._listeners[event][l].callback(message);
    }

    return this;
  }

  on(event, callback, options = {}) {
    if (this._listeners[event] === undefined) this._listeners[event] = [];

    this._listeners[event].push({ callback, options });
  }

  off(event) {
    if (this._listeners[event] === undefined) this._listeners[event] = [];

    delete this._listeners[event];

    return this;
  }

  async rpc(command, payload = {}, options = {}) {
    const _rid = UUIDGeneratorBrowser();

    const { timeout = 30000, auth = true } = options;

    return new Promise((resolve, reject) => {
      const timer = setTimeout(() => {
        clearInterval(timer);
        this.off(_rid);

        reject({
          exception: 'RequestTimeoutError',
          message: 'Попробуйте авторизоваться позднее',
          http_error: 'Ошибка соединения',
        });
      }, timeout);

      this.on(_rid, _payload => {
        clearInterval(timer);
        this.off(_rid);

        if (_payload.exception) {
          reject(_payload);

          if (_payload.exception === "SessionExpiredError"){
            location.href= '/';
          }

        } else {
          resolve(_payload);
        }
      });

      if (Page.store.get('me') || !auth) {
        this.send(command, payload, _rid);
      } else {
        this._aqueue.push([command, payload, _rid]);
      }
    });
  }

  reconnect = () => {
    if (this.reconnectInterval === 0) return;

    if (this._rTimeout) return;

    if (this.connected) return;

    this.emit('reconnect');

    this._rTimeout = setTimeout(() => {
      this.connect();

      clearTimeout(this._rTimeout);

      this._rTimeout = void 0;
    }, this.reconnectInterval);
  };

  onConnect = message => {
    this.connected = true;

    let args;

    while ((args = this._queue.shift())) {
      this.send(...args);
    }

    this.emit('connected');

    if (this.pingInterval > 0) this.startPing();

    // eslint-disable-next-line no-unused-vars
  };

  rehydration() {
    let args;

    while ((args = this._aqueue.shift())) {
      this.send(...args);
    }
  }

  disconnect = () => {
    this._socket && this._socket.close();
    clearTimeout(this._rTimeout);
    this.stopPing();
  };

  startPing = () => {
    this.pingTimer = setInterval(() => {
      if (this.connected) {
        this._socket && this._socket.send(JSON.stringify({ _command: 'ping' }));
      }
    }, this.pingInterval);
  };

  stopPing = () => {
    clearInterval(this.pingTimer);
    this.pingTimer = void 0;
  };

  onError = message => {
    this.connected = false;

    this.emit('error', message);
    this._socket = void 0;
    this.stopPing();

    // this.reconnect();
  };

  onClose = message => {
    this._socket = void 0;
    this.connected = false;
    this.stopPing();

    this.emit('close', message);

    this.reconnect();
  };

  onMessage = message => {
    if (message.data === 'pong') return this.emit('messege', message.data);

    try {
      const json = JSON.parse(message.data);

      //console.log('recive message', json);

      if (json._event === '_commandResponse') {
        this.emit(json._rid, json.payload);
      } else if (json._event === '_syncDataItemSent') {
        Page.store.emit('_syncDataItemSent', json.payload);
      } else {
        Page.store.emit(json._event, json.payload);
        this.emit(json.event, json);
      }
    } catch (e) {
      console.error(e);
    }
  };

  subscribe = (event, options, callback) => {
    if (callback === undefined) {
      callback = options;
      options = {};
    }

    (Array.isArray(event) ? event : [event]).forEach(e => {
      this.on(event, callback, options);
      if (this.connected) this.send('subscribe', { event, options });
    });
  };

  unsubscribe = (event, callback) => {
    (Array.isArray(event) ? event : [event]).forEach(e => {
      this.off(e, callback);

      this.send('unsubscribe', event);
    });
  };

  authorize = token => {
    this.send('authorize', token);
  };

  resubscribe() {
    this.subscribes.forEach(subscribe => {
      this.send('subscribe', subscribe);
    });
  }

  sendSubscribe(payload) {
    this.subscribes.push(payload);
    this.send('subscribe', payload);
  }

  sendUnsubscribe(payload) {
    this.subscribes = this.subscribes.filter(s => {
      return s.rid !== payload.rid;
    });

    this.send('unsubscribe', payload);
  }

  send = (command, payload = {}, _rid) => {
    if (this.connected === false || this._socket === undefined) {
      this._queue.push([command, payload, _rid]);

      return;
    }

    //console.log('send command', command, payload);

    this.emit('send', { command, payload });

    this._socket.send(
      JSON.stringify({
        _command: command,
        payload: payload,
        _rid,
      }),
    );
  };
}


/**
 * Создает несколько анимаций из одного спрайт-листа
 * @param {HTMLElement} container - DOM элемент, в котором будут созданы анимации
 * @param {string} imageUrl - URL спрайт-листа
 * @param {Array} animationsConfig - Массив настроек анимаций
 * @returns {Object} Объект с методами управления всеми анимациями
 */
function __createSpriteAnimations2(container, imageUrl, animationsConfig) {
    // Очищаем контейнер
    container.innerHTML = '';
    container.style.display = 'flex';
    container.style.flexDirection = 'column';
    container.style.alignItems = 'center';
    container.style.gap = '20px';
    container.style.padding = '20px';

    // Хранилище всех анимаций
    const animations = {};
    
    // Загружаем изображение для определения его размеров
    const img = new Image();
    img.src = imageUrl;
    
    img.onload = function() {
        console.log('Спрайт-лист загружен:', img.width, 'x', img.height);
    };

    // Создаем контейнер для каждой анимации
    animationsConfig.forEach((config, index) => {
        // Создаем обертку для анимации
        const animationWrapper = document.createElement('div');
        animationWrapper.style.textAlign = 'center';
        
        // Добавляем название анимации
        if (config.name) {
            const title = document.createElement('div');
            title.textContent = config.name;
            title.style.color = '#333';
            title.style.fontSize = '14px';
            title.style.marginBottom = '8px';
            title.style.fontWeight = 'bold';
            title.style.textTransform = 'capitalize';
            animationWrapper.appendChild(title);
        }

        // Создаем элемент для анимации
        const spriteElement = document.createElement('div');
        spriteElement.style.width = `${config.options.width}px`;
        spriteElement.style.height = `${config.options.height}px`;
        spriteElement.style.backgroundImage = `url('${imageUrl}')`;
        spriteElement.style.backgroundRepeat = 'no-repeat';
        
        // Устанавливаем начальную позицию в зависимости от индекса анимации
        const yOffset = -(index * config.options.height);
        spriteElement.style.backgroundPosition = `0 ${yOffset}px`;
        
        // Устанавливаем размер фона (ширина всего спрайт-листа, высота всех анимаций)
        const totalHeight = animationsConfig.reduce((sum, cfg) => sum + cfg.options.height, 0);
        spriteElement.style.backgroundSize = `auto ${totalHeight}px`;
        
        spriteElement.style.imageRendering = 'pixelated';
        spriteElement.style.imageRendering = 'crisp-edges';
        spriteElement.style.margin = '0 auto';
        spriteElement.style.boxShadow = '0 4px 15px rgba(0, 0, 0, 0.2)';
        spriteElement.style.borderRadius = '8px';
        
        animationWrapper.appendChild(spriteElement);
        container.appendChild(animationWrapper);

        // Переменные для анимации
        let currentFrame = 0;
        let animationInterval = null;
        let isAnimating = false;

        // Функция обновления кадра для конкретной анимации
        function updateFrame(frame) {
            const offsetX = -(frame * config.options.width);
            const offsetY = -(index * config.options.height);
            spriteElement.style.backgroundPosition = `${offsetX}px ${offsetY}px`;
        }

        // Функция следующего кадра
        function nextFrame() {
            currentFrame = (currentFrame + 1) % config.options.count;
            updateFrame(currentFrame);
        }

        // Публичные методы для конкретной анимации
        const animationApi = {
            name: config.name,
            
            start() {
                if (!isAnimating) {
                    isAnimating = true;
                    animationInterval = setInterval(nextFrame, config.options.duration);
                }
            },

            stop() {
                if (isAnimating) {
                    isAnimating = false;
                    clearInterval(animationInterval);
                    animationInterval = null;
                }
            },

            toggle() {
                if (isAnimating) {
                    this.stop();
                } else {
                    this.start();
                }
            },

            setFrame(frame) {
                if (frame >= 0 && frame < config.options.count) {
                    currentFrame = frame;
                    updateFrame(currentFrame);
                }
            },

            getCurrentFrame() {
                return currentFrame;
            },

            isPlaying() {
                return isAnimating;
            },

            reset() {
                this.setFrame(0);
            },

            getConfig() {
                return { ...config };
            }
        };

        // Сохраняем анимацию
        animations[config.name || `animation_${index}`] = animationApi;

        // Устанавливаем первый кадр
        updateFrame(0);

        // Автозапуск если нужно
        if (config.autoPlay) {
            animationApi.start();
        }
    });

    // Общий API для управления всеми анимациями
    const api = {
        /**
         * Запускает все анимации
         */
        startAll() {
            Object.values(animations).forEach(anim => anim.start());
        },

        /**
         * Останавливает все анимации
         */
        stopAll() {
            Object.values(animations).forEach(anim => anim.stop());
        },

        /**
         * Сбрасывает все анимации на первый кадр
         */
        resetAll() {
            Object.values(animations).forEach(anim => anim.reset());
        },

        /**
         * Возвращает анимацию по имени
         * @param {string} name - Имя анимации
         */
        get(name) {
            return animations[name];
        },

        /**
         * Возвращает все анимации
         */
        getAll() {
            return { ...animations };
        },

        /**
         * Уничтожает все анимации и очищает контейнер
         */
        destroy() {
            Object.values(animations).forEach(anim => anim.stop());
            container.innerHTML = '';
        },

        /**
         * Возвращает количество анимаций
         */
        get count() {
            return Object.keys(animations).length;
        }
    };

    // Очистка при удалении контейнера из DOM
    const observer = new MutationObserver((mutations) => {
        mutations.forEach((mutation) => {
            if (!document.body.contains(container)) {
                api.destroy();
                observer.disconnect();
            }
        });
    });
    
    observer.observe(document.body, {
        childList: true,
        subtree: true
    });

    return api;
}
// HTML для демонстрации:
/*
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Множественные спрайт-анимации</title>
    <style>
        body {
            margin: 0;
            min-height: 100vh;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            display: flex;
            justify-content: center;
            align-items: center;
            font-family: Arial, sans-serif;
        }

        #animation-container {
            background: rgba(255, 255, 255, 0.95);
            border-radius: 20px;
            box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
            max-width: 800px;
            width: 100%;
        }
    </style>
</head>
<body>
    <div id="animation-container"></div>

    <script>
        // Код функции createSpriteAnimations здесь
        
        const container = document.getElementById('animation-container');
        const spriteUrl = 'https://storage.yandexcloud.net/qtooapp/c82bdd54-eab2-45df-ab01-ea83403528b7.png';
        
        // Создаем анимации
        const animations = createSpriteAnimations(container, spriteUrl, animationsData);
        
        // Примеры управления:
        // animations.stopAll();  // Остановить все
        // animations.startAll(); // Запустить все
        // animations.get('basic').setFrame(10); // Переключить basic на 10 кадр
        // console.log(animations.get('die').getCurrentFrame()); // Текущий кадр die
        
        // Можно добавить кнопки управления (опционально)
        setTimeout(() => {
            console.log('Анимации созданы:', animations.count);
        }, 1000);
    </script>
</body>
</html>
*/



window.createSpriteAnimation2 = __createSpriteAnimations2;
// // Пример использования:
// // Создаем контейнер для анимации
// const container = document.getElementById('animation-container');

// // Настройки анимации
// const animationConfig = {
//     type: 'horizontally',
//     count: 12,
//     width: 128,
//     height: 128,
//     duration: 100,
//     autoPlay: true
// };

// // URL спрайт-листа
// const spriteUrl = 'https://storage.yandexcloud.net/qtooapp/c82bdd54-eab2-45df-ab01-ea83403528b7.png';

// // Создаем анимацию
// const animation = createSpriteAnimation(container, spriteUrl, animationConfig);

// // Примеры управления (закомментированы, так как не требуются по условию)
// // animation.stop();  // Остановить
// // animation.start(); // Запустить снова
// // animation.setFrame(5); // Перейти на 5 кадр
// // console.log('Текущий кадр:', animation.getCurrentFrame());


window._fr_blocks['blocks-effect'] = class ItemsPage extends BlockClass {
    changeEffect(value, e) {
        this.data.effect.type = e.target.value;

        const eff = this.data.effects.find(e => e.value === this.data.effect.type);

        if (eff.single) {
            this.data.effect.value = 0;
        } else {
            this.data.effect.value = { air: 0, water: 0, land: 0, fire: 0 }
        }

        this.updateData()
        this.rerender()
    }

    onValueChange(path, event) {
        this.page.utils.set(this.data.effect, path, event.target.checked)
        this.updateData()
    }
 
    onValueInput(path, event) {
        this.page.utils.set(this.data.effect, path, event.target.value)
        this.updateData()
    }

    updateData() {
        this.parent.updateEffect && this.parent.updateEffect(this.data.index, this.data.effect)
    }

    removeEffect(){
        this.parent.removeEffect(this.data.index)
    }
}

window._fr_blocks['blocks-imageLoader'] = class imageLoaderBlock extends BlockClass {
    async fileChanged(v, event, f) {
        const file = f ? f : event.target.files[0];

        this.data.local_file = URL.createObjectURL(file);
        this.data.file = file;

        this.parent.data[`${this.data.key}_local_file`] = this.data.local_file
        this.parent.data[`${this.data.key}_file`] = this.data.file


        this.rerender();

                this.parent.fileChanged && this.parent.fileChanged(this.data)

    }

    openDialog() {
        this.refs._.fileChanged.elm.click()
    }

    remove() {
        this.data.local_file = void 0;
        this.data.file = void 0;
        this.data.image = void 0;

        this.parent.data[`${this.data.key}_local_file`] = void 0;
        this.parent.data[`${this.data.key}_file`] = void 0;


        this.rerender();

        this.parent.fileRemoved && this.parent.fileRemoved(this.data)

    }

    async getImage() {
        if (this.data.image) {
            return this.data.image;
        } else if (this.data.file) {
            // Загружаем 
            const imagePath = await this.upload();


            this.data.local_file = void 0;
            this.data.file = void 0;
            this.data.image = imagePath;
            this.parent.data[`${this.data.key}_local_file`] = void 0;
            this.parent.data[`${this.data.key}_file`] = void 0;

            this.page.nextTick(() => {
                this.rerender();
            });

            return this.data.image;
        } else {
            return void 0;
        }
    }

    async upload() {
        try {
            const f = await this.page.server('/file/create', {
                origin_uri: this.data.file.name,
                filename: this.data.file.name,
                content_type: this.data.file.type
            });

            const ures = await this.uploadBinaryFile({
                upload_url: f.upload_url,
                content_type: f.content_type,
                file: this.data.file,
                onProgress: (p) => {
                    console.log(p)
                },
            });


            return `${f.storage_endpoint}/${f.storage_bucketname}/${f.filename}`;
        } catch (err) {
            console.error(err)
        }
    }

    async uploadBinaryFile({ upload_url, content_type, file, onProgress }) {
        return new Promise((resolve, reject) => {
            const xhr = new XMLHttpRequest();

            xhr.onload = () => {
                if (xhr.status === 200) {
                    // succeeded
                    resolve(xhr.response);
                } else {
                    reject(xhr.response);
                }
            };

            xhr.onerror = (error) => {
                reject(error);
            };

            xhr.open("PUT", upload_url, true);
            xhr.setRequestHeader("content-type", content_type);

            xhr.upload.onprogress = function (event) {
                if (onProgress) {
                    onProgress(Math.round((event.loaded / event.total) * 100), event);
                }
            };
            xhr.send(file);
        });
    }
}

window._fr_blocks['blocks-item'] = class ItemBlocks extends BlockClass {
    changeItem(value, e) {
        this.data.item.id = e.target.value;

        this.updateData()
        this.rerender()
    }

 
 
    onValueInput(path, event) {
        this.page.utils.set(this.data.item, path, event.target.value)
        this.updateData()
    }

    updateData() {
        this.parent.updateItem && this.parent.updateItem(this.data.index, this.data.item)
    }

    removeItem(){
        this.parent.removeItem(this.data.index)
    }
}

window._fr_blocks['blocks-mobplace'] = class MobPlaceBlocks extends BlockClass {
    onValueInput(path, event) {
        this.page.utils.set(this.data.place, path, event.target.value)
        this.updateData()
    }

    async updateData() {
        this.data.place.img = await this.refs.img.getImage();
        this.parent.updatePlace && this.parent.updatePlace(this.data.index, this.data.place)
    }

    removePlace() {
        this.parent.removePlace(this.data.index)
    }

    fileChanged() {
        this.updateData();
    }

    changeMob(v, e) {
        this.parent.updateMobId(this.data.index, +e.target.value)
    }
}


window._fr_blocks['blocks-reward'] = class Rewardlocks extends BlockClass {
    changeRewardType(value, e) {
        this.data.reward.type = e.target.value;

        if (this.data.reward.type === 'exp' || this.data.reward.type === 'gold' || this.data.reward.type === 'diamonds') {
            this.data.reward.value = this.data.reward.value ?? 0;
        } else if (this.data.reward.type === 'item') {
            this.data.reward.count = this.data.reward.count ?? 1;
        }

        this.updateData()
        this.rerender()
    }

    changeRewardValue(value, e){
        this.data.reward.value = e.target.value;

        if (this.data.reward.type === 'item') {
            this.data.reward.count = this.data.reward.count ?? 1;
        }

        this.updateData()
        this.rerender()
    }

 
 
    onValueInput(path, event) {
        this.page.utils.set(this.data.reward, path, event.target.value)
        this.updateData()
    }

    updateData() {
        this.parent.updateReward && this.parent.updateReward(this.data.index, this.data.reward)
    }

    removeReward(){
        this.parent.removeReward(this.data.index)
    }
}

window._fr_blocks['blocks-rune'] = class ItemsPage extends BlockClass {
    changeRune(value, e) {
        this.data.rune.id = e.target.value;

        this.updateData()
        this.rerender()
    }

 
 
    onValueInput(path, event) {
        this.page.utils.set(this.data.rune, path, event.target.value)
        this.updateData()
    }

    updateData() {
        this.parent.updateRune && this.parent.updateRune(this.data.index, this.data.rune)
    }

    removeRune(){
        this.parent.removeRune(this.data.index)
    }
}

window._fr_blocks['layout-main'] = class MainLayout extends BlockClass {
    _mount(){
      super._mount();
    }
    _unmount(){
      super._unmount();
    }
  }

window._fr_blocks['pages-auth'] = class auth extends BlockClass {
  async auth(item) {
    try {

      const res = await this.page.server('/clients/auth', {
        username: this.refs.username.value,
        password: this.refs.password.value,
      })

         setCookie("token", res.token);


      this.page.router.goTo(`/`)

    } catch (err) {
      console.error(err)
    }
  }
}

window._fr_blocks['pages-battles'] = class BattlesPage extends BlockClass {
    // Ссылки внутри строки обрабатывает браузер, остальное — роутер.
    goToBattle(battle, event) {
        if (event && event.target && event.target.closest && event.target.closest('a')) return;

        this.page.router.goTo(`/battles/${battle.id}`);
    }
}


window._fr_blocks['pages-battles.view'] = class BattleViewPage extends BlockClass {
    goToPlayer(player) {
        const id = (player && player.id) || player;

        if (!id) return;

        this.page.router.goTo(`/players/${id}`);
    }
}


window._fr_blocks['pages-items.edit'] = class ItemsPage extends BlockClass {
    updateReward(index, reward) {
        this.data.item.lootbox_rewards[index] = reward;
    }

    removeReward(index) {
        this.data.item.lootbox_rewards.splice(index, 1);

        this.rerender();
    }

    addLootboxReward() {
        this.data.item.lootbox_rewards.push({ type: 'item', value: '', count: 1, chance: 100 });
        this.rerender();
    }

    changeType(v, e) {
        this.data.item.type = e.target.value;

        if (this.data.item.type === 'lootbox' && !Array.isArray(this.data.item.lootbox_rewards)) {
            this.data.item.lootbox_rewards = [];
        }

        this.rerender();
    }

    updateEffect(index, effect) {
        this.data.item.effects[index] = effect;
    }

    // --- Кристалл кузницы (поле upgrade) ---------------------------------
    //
    // Кристалл — обычный предмет, который работает только в кузнице: заточка
    // (kind: refine), добавление эффектов (kind: effect) или сброс улучшений
    // (kind: reset). Раньше задать это можно было только запросом в базу.

    crystal() {
        if (!this.data.item.upgrade || !this.data.item.upgrade.kind) {
            return null;
        }

        return this.data.item.upgrade;
    }

    // ВАЖНО про сигнатуру: pastish зовёт обработчик как (params, pointerEvent),
    // где params — аргумент из e.on(...)/e.click(...). Поэтому событие всегда
    // ВТОРЫМ параметром (как в changeType/changeElement выше).
    changeCrystalKind(params, event) {
        const kind = event.target.value;
        const current = this.crystal();

        if (!kind) {
            this.data.item.upgrade = null;
            this.rerender();

            return;
        }

        if (kind === 'refine') {
            this.data.item.upgrade = {
                kind: 'refine',
                chance_multiplier: (current && current.chance_multiplier) || 1,
                safe: Boolean(current && current.safe),
                guaranteed: Boolean(current && current.guaranteed)
            };
        } else if (kind === 'reset') {
            // У сброса нет ни настроек, ни эффектов: в базе он лежит ровно как
            // { kind: 'reset' }, поэтому ничего не переносим из прошлого вида.
            this.data.item.upgrade = {
                kind: 'reset'
            };
        } else {
            this.data.item.upgrade = {
                kind: 'effect',
                effects: (current && Array.isArray(current.effects)) ? current.effects : []
            };
        }

        this.rerender();
    }

    changeCrystalEffectType(index, event) {
        const effects = this.data.item.upgrade && this.data.item.upgrade.effects;

        if (!Array.isArray(effects) || !effects[index]) {
            return;
        }

        effects[index].type = event.target.value;
        this.rerender();
    }

    addCrystalEffect() {
        if (!this.data.item.upgrade || this.data.item.upgrade.kind !== 'effect') {
            return;
        }

        if (!Array.isArray(this.data.item.upgrade.effects)) {
            this.data.item.upgrade.effects = [];
        }

        this.data.item.upgrade.effects.push({ type: 'hp', value: 50, chance: 50 });
        this.rerender();
    }

    removeCrystalEffect(index) {
        const effects = this.data.item.upgrade && this.data.item.upgrade.effects;

        if (!Array.isArray(effects)) {
            return;
        }

        effects.splice(index, 1);
        this.rerender();
    }

    // upgrade уходит в базу как jsonb: приводим типы, иначе в настройке окажутся
    // строки из полей ввода («2», «5») и бой посчитает эффект неверно.
    normalizeCrystal(upgrade) {
        if (!upgrade || !upgrade.kind) {
            return null;
        }

        if (upgrade.kind === 'refine') {
            const config = {
                kind: 'refine'
            };

            const multiplier = +(upgrade.chance_multiplier);

            // Множитель 1 ничего не меняет — в базе он не нужен (так же записаны
            // существующие кристаллы).
            if (multiplier && multiplier !== 1) {
                config.chance_multiplier = multiplier;
            }

            if (upgrade.safe === true) {
                config.safe = true;
            }

            if (upgrade.guaranteed === true) {
                config.guaranteed = true;
            }

            return config;
        }

        // Сброс — единственный вид без параметров: в базу уходит ровно
        // { kind: 'reset' }. Без этой ветки вид вернулся бы null (см. ниже) и
        // предмет сохранился бы обычным.
        if (upgrade.kind === 'reset') {
            return {
                kind: 'reset'
            };
        }

        if (upgrade.kind === 'effect') {
            return {
                kind: 'effect',
                effects: (upgrade.effects || []).filter(effect => effect && effect.type).map(effect => {
                    const chance = effect.chance == null || effect.chance === '' ? 100 : +effect.chance;

                    return {
                        type: effect.type,
                        value: +(effect.value || 0),
                        chance: Math.max(0, Math.min(100, chance))
                    };
                })
            };
        }

        return null;
    }

    onValueChange(path, event) {
        this.page.utils.set(this.data.item, path, event.target.checked)
    }

    onValueInput(path, event) {
        this.page.utils.set(this.data.item, path, event.target.value)
    }

    removeEffect(index) {
        this.data.item.effects.splice(index, 1);

        this.rerender()
    }

    addEffect() {
        this.data.item.effects.push(
            {
                "type": "damage",
                "value": {
                    "air": 20
                }
            }
        );

        this.rerender()
    }

    changeElement(v, e) {
        this.data.item.element = e.target.value;
    }

    onPlaceChange(place, e) {
        if (e.target.checked) {
            this.data.item.places.push(place)
        } else {
            this.data.item.places = this.data.item.places.filter(p => p !== place)
        }
    }

    async save() {
        const img = await this.refs.image.getImage();
        const payload = {
            id: this.data.item.id,
            name: this.data.item.name,
            description: this.data.item.description,
            type: this.data.item.type || 'item',
            places: this.data.item.places,
            effects: this.data.item.effects,
            lootbox_rewards: (this.data.item.lootbox_rewards || []).map(reward => ({
                ...reward,
                chance: +(reward.chance || 0),
                count: reward.type === 'item' ? +(reward.count || 1) : reward.count,
                value: (reward.type === 'exp' || reward.type === 'gold' || reward.type === 'diamonds') ? +(reward.value || 0) : reward.value
            })),
            can_use: this.data.item.can_use,
            disposable: this.data.item.disposable,
            element: this.data.item.element,
            img: img,
            price: +(this.data.item.price || 0),
            reuse_turns: Math.max(0, Math.floor(+(this.data.item.reuse_turns || 0))),
            upgrade: this.normalizeCrystal(this.data.item.upgrade),
        }


        try {
            const res = await this.page.server('/items/update', { item: payload, created: this.data.created });

            this.page.router.goTo(`/items/${res.id}/edit`);
        } catch (error) {
            alert('Не удалось сохранить предмет: ' + this.errorText(error));
        }
    }

    // page.server бросает распарсенный ответ сервера.
    errorText(error) {
        if (!error) return 'неизвестная ошибка'

        if (typeof error === 'string') return error

        if (error.details && error.details.message) return error.details.message

        return error.message || JSON.stringify(error)
    }

    async deleteEntity() {
        const id = this.data.item.id

        if (id === undefined || id === null || id === '') {
            alert('Нечего удалять: у записи нет id')

            return
        }

        if (!confirm('Удалить предмет? Действие необратимо.')) return

        try {
            const res = await this.page.server('/items/delete', { id: id })

            if (!res || res.ok === false) {
                alert('Не удалось удалить: ' + ((res && res.error) || 'неизвестная ошибка'))

                return
            }

            this.page.router.goTo('/items')
        } catch (error) {
            alert('Не удалось удалить: ' + this.errorText(error))
        }
    }
}


window._fr_blocks['pages-items'] = class ItemsPage extends BlockClass {
  goToItem(item){
    this.page.router.goTo(`/items/${item.id}/edit`)
  }
}

window._fr_blocks['pages-locations.edit'] = class LocationEditPage extends BlockClass {
    updateEffect(index, effect) {
        this.data.location.effects[index] = effect;
    }

    async updatePlace(index, place) {
        this.data.location.places[index] = place;
        await this.parse()
        this.refs.preview.update(this.data.location)

    }

    removePlace(index) {
        this.data.location.places.splice(index, 1);

        this.rerender()
    }

    async onValueChange(path, event) {
        this.page.utils.set(this.data.location, path, event.target.checked)
        await this.parse()
    }

    async onValueInput(path, event) {
        this.page.utils.set(this.data.location, path, event.target.value);

        await this.parse();

        if (['position.0', 'position.1', 'size.0', 'size.1'].includes(path)) {
            this.refs.preview.update(this.data.location)

        }
    }

    removeEffect(index) {
        this.data.location.effects.splice(index, 1);

        this.rerender()
    }

    updateMobId(index, id) {
        this.data.location.mob_id[index] = id;
    }

    addPlace() {
        this.data.location.places.push({
            "position": [
                80,
                0
            ],
            "img": 'https://storage.yandexcloud.net/qtooapp/f0ff7d35-599a-42dd-9393-ebc1a8a593bc.png',
            "size": [
                100,
                50
            ]
        })

        this.rerender();
    }

    addEffect() {
        this.data.location.effects.push(
            {
                "type": "damage",
                "value": {
                    "air": 0
                }
            }
        );

        this.rerender()
    }

    updateReward(index, reward) {
        this.data.location.reward[index] = reward;
    }

    removeReward(index) {
        this.data.location.reward.splice(index, 1);

        this.rerender();
    }

    addReward() {
        this.data.location.reward.push({ type: 'exp', value: 100 })
        this.rerender();
    }


    async parse() {
        const img = await this.refs.img.getImage();
        const background = await this.refs.background.getImage();

        this.data.location = {
            "id": this.data.location.id,
            "position": [
                +this.data.location.position[0],
                +this.data.location.position[1],
            ],
            "size": [
                +this.data.location.size[0],
                +this.data.location.size[1],
            ],
            "img": img,
            "mob_id": [...this.data.location.mob_id.map(m => {
                return +m;
            })],
            "places": [...this.data.location.places.map(p => {
                return {
                    "position": [
                        +p.position[0],
                        +p.position[1],
                    ],
                    "img": p.img,
                    "size": [
                        +p.size[0],
                        +p.size[1],
                    ]
                }
            })],
            "name": this.data.location.name,
            "description": this.data.location.description,
            "effects_description": this.data.location.effects_description,
            "background": background,
            "reward": this.data.location.reward,
            "effects": this.data.location.effects,
            "parent_ids": this.data.location.parent_ids,
        };

        return this.data.location;
    }

    async save() {

        const payload = await this.parse()

        try {
            const res = await this.page.server('/locations/update', { location: payload, created: this.data.created });

            this.page.router.goTo(`/locations/${res.id}/edit`);
        } catch (error) {
            alert('Не удалось сохранить локацию: ' + this.errorText(error));
        }
    }

    // page.server бросает распарсенный ответ сервера.
    errorText(error) {
        if (!error) return 'неизвестная ошибка'

        if (typeof error === 'string') return error

        if (error.details && error.details.message) return error.details.message

        return error.message || JSON.stringify(error)
    }

    async deleteEntity() {
        const id = this.data.location.id

        if (id === undefined || id === null || id === '') {
            alert('Нечего удалять: у записи нет id')

            return
        }

        if (!confirm('Удалить локацию? Действие необратимо.')) return

        try {
            const res = await this.page.server('/locations/delete', { id: id })

            if (!res || res.ok === false) {
                alert('Не удалось удалить: ' + ((res && res.error) || 'неизвестная ошибка'))

                return
            }

            this.page.router.goTo('/locations')
        } catch (error) {
            alert('Не удалось удалить: ' + this.errorText(error))
        }
    }

    onPrerequisiteLocationChange(id, event) {
        const locationId = +id;

        if (event.target.checked) {
            this.data.location.parent_ids.push(locationId);
        } else {
            this.data.location.parent_ids = this.data.location.parent_ids.filter(id => id !== locationId);
        }
    }
}


window._fr_blocks['pages-locations.edit.preview'] = class PreviewPageBlock extends BlockClass {
    init() {
        super.init();
        this.battleCanvas = new MapGame({
            canvas: this.refs.canvas,

        });



        this.getMap()
    }

    update(location) {

        this.battleCanvas.scenes["game-scene"].map.children = [];

        // this.battleCanvas.scenes["game-scene"].initMap('/map2.jpg');
        this.battleCanvas.scenes["game-scene"].initLocation({
            ...location,
            mob: this.parent.data.location.mob_id.filter((mb, index) => {
                return !!this.parent.data.location.places[index];
            }).map(mid => {
                const m = this.parent.data.mobs.find(mob => mob.id == mid);
                return {
                    ...m,
                    ...m.mapOptions,
                    name: {
                        ...m.mapOptions.name,
                        value: m.name
                    },
                }
            })
        });


               this.data.locations.forEach(location => {

            this.battleCanvas.scenes["game-scene"].initLocation({
                ...location,
                mob: location.mob_id.filter((mb, index) => {
                    return !!location.places[index];
                }).map(mid => {
                    const m = this.parent.data.mobs.find(mob => mob.id == mid);
                    return {
                        ...m,
                        ...m.mapOptions,
                        name: {
                            ...m.mapOptions.name,
                            value: m.name
                        },
                    }
                })
            });
        });
    }

    getMap() {

        this.battleCanvas.scenes["game-scene"].initMap('/map2.jpg');

        this.battleCanvas.scenes["game-scene"].initLocation({
            ...this.parent.data.location,
            mob: this.parent.data.location.mob_id.filter((mb, index) => {
                return !!this.parent.data.location.places[index];
            }).map(mid => {
                const m = this.parent.data.mobs.find(mob => mob.id == mid);
                return {
                    ...m,
                    ...m.mapOptions,
                    name: {
                        ...m.mapOptions.name,
                        value: m.name
                    },
                }
            })
        });


        this.data.locations.forEach(location => {

            this.battleCanvas.scenes["game-scene"].initLocation({
                ...location,
                mob: location.mob_id.filter((mb, index) => {
                    return !!location.places[index];
                }).map(mid => {
                    const m = this.parent.data.mobs.find(mob => mob.id == mid);
                    return {
                        ...m,
                        ...m.mapOptions,
                        name: {
                            ...m.mapOptions.name,
                            value: m.name
                        },
                    }
                })
            });
        });
    }
}


window._fr_blocks['pages-locations'] = class LocationsPage extends BlockClass {
  goToLocation(item){
    this.page.router.goTo(`/locations/${item.id}/edit`)
  }
}

window._fr_blocks['pages-mobs.edit'] = class MobEditPage extends BlockClass {

    _mount(){
        super._mount();

       this.animation  = createSpriteAnimation2(this.refs.canvasContainer, this.data.mob.mapOptions.img, this.data.mob.mapOptions.animations);

       // this.animation.get('basic').start();

    }

    _unmount(){
        super._unmount();

        this.animation.destroy();

    }

    updateEffect(index, effect) {
        this.data.mob.effects[index] = effect;
    }

    onValueChange(path, event) {
        this.page.utils.set(this.data.mob, path, event.target.checked)
    }

    onValueInput(path, event) {
        this.page.utils.set(this.data.mob, path, event.target.value)
    }

    // Слот экипировки: '— не надето —' приходит пустой строкой — слот убираем,
    // чтобы в базе не копились { head: '' }.
    changeEquipment(slot, event) {
        const value = event.target.value;

        if (!this.data.mob.equipment || typeof this.data.mob.equipment !== 'object') {
            this.data.mob.equipment = {};
        }

        if (value) {
            this.data.mob.equipment[slot] = value;
        } else {
            delete this.data.mob.equipment[slot];
        }
    }

    // Перед сохранением выкидываем пустые значения (на случай старых данных).
    getEquipment() {
        const equipment = this.data.mob.equipment || {};
        const clean = {};

        Object.keys(equipment).forEach(slot => {
            if (equipment[slot]) clean[slot] = equipment[slot];
        });

        return clean;
    }

    onAnimationsChange(v, event) {
        try {
            const res = JSON.parse(event.target.value);

            this.data.mob.mapOptions.animations = res;

            this.animation &&  this.animation.destroy();

           this.animation  = createSpriteAnimation2(this.refs.canvasContainer, this.data.mob.mapOptions.img, this.data.mob.mapOptions.animations);
        } catch (e) {

        }
    }

    removeEffect(index) {
        this.data.mob.effects.splice(index, 1);

        this.rerender()
    }

    addEffect() {
        this.data.mob.effects.push(
            {
                "type": "damage",
                "value": {
                    "air": 0
                }
            }
        );

        this.rerender()
    }

    changeElement(v, e) {
        this.data.mob.element = e.target.value;
    }

    updateRune(index, rune) {
        this.data.mob.runes[index] = rune;
    }

    updateReward(index, reward) {
        this.data.mob.reward[index] = reward;
    }


    removeReward(index) {
        this.data.mob.reward.splice(index, 1);

        this.rerender();
    }

    addReward() {
        this.data.mob.reward.push({ type: 'exp', value: 100 })
        this.rerender();
    }

    removeItem(index) {
        this.data.mob.items.splice(index, 1);

        this.rerender();
    }

    updateItem(index, item) {
        this.data.mob.items[index] = item;
    }



    addItem() {
        this.data.mob.items.push({ id: 'small_mana_bottle', count: 1 })
        this.rerender();
    }

    removeRune(index) {
        this.data.mob.runes.splice(index, 1);

        this.rerender();
    }

    addRune() {
        this.data.mob.runes.push({ id: 'flying_blade', level: 1 })
        this.rerender();
    }


    async save() {

        // const img = await this.refs.image.getImage();
        // const svg = await this.refs.svg.getImage();

        const background =  await this.refs.background.getImage();
        const avatar = await this.refs.avatar.getImage();
        const persone =  await this.refs.persone.getImage();
        const animation =  await this.refs.animation.getImage();

        const payload = {
            "id": +this.data.mob.id,
            "name": this.data.mob.name,
            "mapOptions": {
                "position": [
                    +this.data.mob.mapOptions.position[0],
                    +this.data.mob.mapOptions.position[1],
                ],
                "img": animation,
                "size": [
                     +this.data.mob.mapOptions.size[0],
                     +this.data.mob.mapOptions.size[1],
                ],
                "frameSize": {
                    "width":  +this.data.mob.mapOptions.frameSize.width,
                    "height": +this.data.mob.mapOptions.frameSize.height,
                },
                "name": {
                    "options": {
                        "textAlign": this.data.mob.mapOptions.name.options.textAlign,
                        "color": this.data.mob.mapOptions.name.options.color,
                        "renderType":this.data.mob.mapOptions.name.options.renderType,
                        "fontSize": this.data.mob.mapOptions.name.options.fontSize,
                    },
                    "position": [
                        +this.data.mob.mapOptions.name.position[0],
                        +this.data.mob.mapOptions.name.position[1],
                    ],
                    "depth":  +this.data.mob.mapOptions.name.depth,
                },
                "animations": this.data.mob.mapOptions.animations, 
            },
            "description": this.data.mob.description,
            "background": background,
            "avatar": avatar,
            "persone": persone,
            "runes": this.data.mob.runes,
            "items":  this.data.mob.items,
            "hp":  +this.data.mob.hp,
            "mana":  +this.data.mob.mana,
            "level":  +this.data.mob.level,
            "effects":  this.data.mob.effects,
            "reward":  this.data.mob.reward,
            "equipment": this.getEquipment(),
            "state": {
                "protection":  +this.data.mob.state.protection,
                "attack": +this.data.mob.state.attack,
                "hp": +this.data.mob.state.hp,
                "mana": +this.data.mob.state.mana,
            },
            "protection_bonus": {
                "air": +this.data.mob.protection_bonus.air,
                "water": +this.data.mob.protection_bonus.water,
                "fire": +this.data.mob.protection_bonus.fire,
                "land": +this.data.mob.protection_bonus.land,
            },
            "attack_bonus": {
                "air": +this.data.mob.attack_bonus.air,
                "water": +this.data.mob.attack_bonus.water,
                "fire": +this.data.mob.attack_bonus.fire,
                "land":+this.data.mob.attack_bonus.land,
            }
        }

        try {
            const res = await this.page.server('/mobs/update', { mob: payload, created: this.data.created });

            this.page.router.goTo(`/mobs/${res.id}/edit`);
        } catch (error) {
            alert('Не удалось сохранить моба: ' + this.errorText(error));
        }
    }

    // page.server бросает распарсенный ответ сервера.
    errorText(error) {
        if (!error) return 'неизвестная ошибка'

        if (typeof error === 'string') return error

        if (error.details && error.details.message) return error.details.message

        return error.message || JSON.stringify(error)
    }

    async deleteEntity() {
        const id = this.data.mob.id

        if (id === undefined || id === null || id === '') {
            alert('Нечего удалять: у записи нет id')

            return
        }

        if (!confirm('Удалить моба? Действие необратимо.')) return

        try {
            const res = await this.page.server('/mobs/delete', { id: id })

            if (!res || res.ok === false) {
                alert('Не удалось удалить: ' + ((res && res.error) || 'неизвестная ошибка'))

                return
            }

            this.page.router.goTo('/mobs')
        } catch (error) {
            alert('Не удалось удалить: ' + this.errorText(error))
        }
    }
}



window._fr_blocks['pages-mobs'] = class MobsPage extends BlockClass {
  goToMob(mob){
    this.page.router.goTo(`/mobs/${mob.id}/edit`)
  }
}

window._fr_blocks['pages-players'] = class PlayersPage extends BlockClass {
    // Клик по строке открывает карточку игрока. Ссылки внутри строки (например
    // «Бои») должны работать сами: иначе роутер увёл бы на карточку.
    goToPlayer(player, event) {
        if (event && event.target && event.target.closest && event.target.closest('a')) return;

        this.page.router.goTo(`/players/${player.id}`);
    }
}


window._fr_blocks['pages-players.view'] = class PlayerViewPage extends BlockClass {
    errorText(error) {
        if (!error) return 'неизвестная ошибка';

        if (typeof error === 'string') return error;

        if (error.details && error.details.message) return error.details.message;

        return error.message || JSON.stringify(error);
    }

    // Удаление игрока — операция необратимая, поэтому просим ввести имя:
    // случайный клик по кнопке не должен стирать аккаунт.
    async deletePlayer() {
        const name = this.data.client ? this.data.client.name : ('#' + this.data.id);
        const confirmation = prompt(
            'Удаление игрока «' + name + '» необратимо.\n' +
            'Вместе с ним удалятся подписки.\n\n' +
            'Чтобы подтвердить, введите имя игрока:'
        );

        if (confirmation === null) return;

        if (confirmation.trim() !== String(name).trim()) {
            alert('Имя не совпало — игрок не удалён.');
            return;
        }

        try {
            const res = await this.page.server('/players/delete', { id: this.data.id });

            if (!res || res.ok === false) {
                alert('Не удалось удалить игрока: ' + ((res && res.error) || 'неизвестная ошибка'));

                return;
            }

            this.page.router.goTo('/players');
        } catch (error) {
            alert('Не удалось удалить игрока: ' + this.errorText(error));
        }
    }
}


window._fr_blocks['pages-runes.edit'] = class RuneEditPage extends BlockClass {
    updateEffect(index, effect) {
        this.data.rune.effects[index] = effect;
    }
    
    onValueChange(path, event) {
        this.page.utils.set(this.data.rune, path, event.target.checked)
    }

    onValueInput(path, event) {
        this.page.utils.set(this.data.rune, path, event.target.value)
    }

    removeEffect(index) {
        this.data.rune.effects.splice(index, 1);

        this.rerender()
    }

    addEffect() {
        this.data.rune.effects.push(
            {
                "type": "damage",
                "value": {
                    "air": 20
                }
            }
        );

        this.rerender()
    }

    changeElement(v, e) {
        this.data.rune.element = e.target.value;
    }

    fileRemoved(data) {
        if (data.key === 'img') {
            this.data.rune.hash = void 0;

            this.rerender();
        }
    }

    async fileChanged(data) {
        if (data.key === 'img') {
            const img = await this.fileToImageData(data.file);

            const res = await this.page.server('/items/make_hash', { img })


            this.data.rune.hash = res.hash

            this.rerender();
        }
    }


    fileToImageData(file) {
        return new Promise((resolve, reject) => {
            const reader = new FileReader();

            reader.onload = (e) => {
                const img = new Image();

                img.onload = () => {
                    // Создаем canvas
                    const canvas = document.createElement('canvas');
                    canvas.width = img.width;
                    canvas.height = img.height;

                    // Рисуем изображение
                    const ctx = canvas.getContext('2d');
                    ctx.drawImage(img, 0, 0);

                    // Получаем пиксельные данные
                    const imageData = ctx.getImageData(0, 0, img.width, img.height);

                    // Форматируем в нужный вид
                    const result = {
                        width: img.width,
                        height: img.height,
                        data: Array.from(imageData.data) // или можно оставить Uint8ClampedArray
                        // data: imageData.data // если нужно оставить как Uint8ClampedArray
                    };

                    resolve(result);
                };

                img.onerror = reject;
                img.src = e.target.result;
            };

            reader.onerror = reject;
            reader.readAsDataURL(file);
        });
    }

    async save() {
     const img = await this.refs.image.getImage();
     const svg = await this.refs.svg.getImage();

        const payload = {
            "name": this.data.rune.name,
            "description": this.data.rune.description,
            "element": this.data.rune.element,
            "mana": this.data.rune.mana,
            "reuse_turns": this.data.rune.reuse_turns || 0,
            "effects": this.data.rune.effects,
            "id": this.data.rune.id,
            "hash": this.data.rune.hash,
            img,
            svg
        }


        console.log(payload)


        try {
            const res = await this.page.server('/runes/update', { rune: payload, created: this.data.created });

            this.page.router.goTo(`/runes/${res.id}/edit`);
        } catch (error) {
            alert('Не удалось сохранить руну: ' + this.errorText(error));
        }
    }

    // page.server бросает распарсенный ответ сервера.
    errorText(error) {
        if (!error) return 'неизвестная ошибка'

        if (typeof error === 'string') return error

        if (error.details && error.details.message) return error.details.message

        return error.message || JSON.stringify(error)
    }

    async deleteEntity() {
        const id = this.data.rune.id

        if (id === undefined || id === null || id === '') {
            alert('Нечего удалять: у записи нет id')

            return
        }

        if (!confirm('Удалить руну? Действие необратимо.')) return

        try {
            const res = await this.page.server('/runes/delete', { id: id })

            if (!res || res.ok === false) {
                alert('Не удалось удалить: ' + ((res && res.error) || 'неизвестная ошибка'))

                return
            }

            this.page.router.goTo('/runes')
        } catch (error) {
            alert('Не удалось удалить: ' + this.errorText(error))
        }
    }
}


window._fr_blocks['pages-runes'] = class ItemsPage extends BlockClass {
  goToRune(item){
    this.page.router.goTo(`/runes/${item.id}/edit`)
  }
}

window._fr_blocks['pages-shop.edit'] = class ShopEditPage extends BlockClass {
    onValueChange(path, event) {
        this.page.utils.set(this.data.item, path, event.target.checked)
    }

    onCheckboxChange(...args) {
        // Support both (path, event) and (event, path) call signatures
        let path, event
        if (typeof args[0] === 'string') {
            path = args[0]
            event = args[1]
        } else {
            event = args[0]
            path = args[1]
        }

        if (!path || !event) return

        this.page.utils.set(this.data.item, path, !!event.target.checked)
    }

    onValueInput(path, event) {
        const value = event.target.type === 'number' ? +event.target.value : event.target.value
        this.page.utils.set(this.data.item, path, value)
    }

    // page.server бросает распарсенный ответ сервера — достаём из него текст.
    errorText(error) {
        if (!error) return 'неизвестная ошибка'

        if (typeof error === 'string') return error

        if (error.details && error.details.message) return error.details.message

        return error.message || JSON.stringify(error)
    }

    // Название товара нужно только для вопросов и сообщений.
    title() {
        return (this.data.item.item && this.data.item.item.name)
            || this.data.item.itemId
            || ('#' + this.data.item.id)
    }

    async save() {
        const payload = {
            id: this.data.item.id,
            itemId: this.data.item.itemId,
            category: this.data.item.category,
            price: +(this.data.item.price || 0),
            currency: this.data.item.currency,
            quantity: this.data.item.quantity || 'infinite',
            description: this.data.item.description,
            isActive: !!this.data.item.isActive
        }

        try {
            const res = await this.page.server('/shop/update', { shop: payload, created: this.data.created });

            this.page.router.goTo(`/shop/${res.id}/edit`);
        } catch (error) {
            alert('Не удалось сохранить товар: ' + this.errorText(error));
        }
    }

    async deleteItem() {
        if (!confirm('Удалить товар «' + this.title() + '» из магазина? Действие необратимо.')) return

        try {
            const res = await this.page.server('/shop/delete', { id: this.data.item.id });

            // Маршрут отвечает { ok: false, error } вместо исключения.
            if (!res || res.ok === false) {
                alert('Не удалось удалить товар: ' + ((res && res.error) || 'неизвестная ошибка'));

                return;
            }

            if (res.alreadyDeleted) {
                alert('Товар уже был удалён — открываю список магазина.');
            }

            this.page.router.goTo('/shop');
        } catch (error) {
            alert('Не удалось удалить товар: ' + this.errorText(error));
        }
    }
}


window._fr_blocks['pages-shop'] = class ShopPage extends BlockClass {
    selectCategory(category) {
        this.data.selectedCategory = category;
        this.rerender();
    }

    goToShopItem(item) {
        this.page.router.goTo(`/shop/${item.id}/edit`);
    }

    // Текст ошибки: page.server бросает распарсенный ответ сервера.
    errorText(error) {
        if (!error) return 'неизвестная ошибка';

        if (typeof error === 'string') return error;

        if (error.details && error.details.message) return error.details.message;

        return error.message || JSON.stringify(error);
    }

    // Удаление прямо из списка: раньше товар можно было удалить только открыв
    // его карточку, и про кнопку легко было не узнать.
    async deleteShopItem(item) {
        const title = (item.item && item.item.name) || item.itemId || ('#' + item.id);

        if (!confirm('Удалить товар «' + title + '» из магазина? Действие необратимо.')) return;

        try {
            const res = await this.page.server('/shop/delete', { id: item.id });

            if (!res || res.ok === false) {
                alert('Не удалось удалить товар: ' + ((res && res.error) || 'неизвестная ошибка'));

                return;
            }

            // Список перерисовываем локально: роутер на тот же адрес ничего не делает.
            this.data.items = this.data.items.filter(row => String(row.id) !== String(item.id));
            this.rerender();
        } catch (error) {
            alert('Не удалось удалить товар: ' + this.errorText(error));
        }
    }
}


window._fr_blocks['blocks-dev.Backlight'] = class Backlight extends BlockClass {

    _init(){
        super._init();
        this.data.cache = [];
    }
    _mount() {
        super._mount();

        this.isPressed = false;
      
        this.keydown = (event) => {
            if (event.key === 'Control') {
                if (this.isPressed)
                    return;

                if (this.data.openBlock)
                    return;

                this.isPressed = true;

                this.turnOn();
                // Здесь можно добавить нужные действия при нажатии Ctrl
            }
        }

        this.keyup = (event) => {
            if (event.key === 'Control') {


                
                if (this.data.openBlock)
                    return;

                                this.isPressed = false;

                this.turnOff()
                console.log('Клавиша Ctrl отпущена');
                // Здесь можно добавить нужные действия при отпускании Ctrl
            }
        }

        document.addEventListener('keydown', this.keydown);

        document.addEventListener('keyup', this.keyup);
    }

    getContentsBoundingBox(element) {
        const children = Array.from(element.children);
        if (!children.length) return null;

        let minX = Infinity, minY = Infinity;
        let maxX = -Infinity, maxY = -Infinity;

        children.forEach(child => {
            const rect = child.getBoundingClientRect();
            minX = Math.min(minX, rect.left);
            minY = Math.min(minY, rect.top);
            maxX = Math.max(maxX, rect.right);
            maxY = Math.max(maxY, rect.bottom);
        });

        return {
            x: minX + window.scrollX,
            y: minY + window.scrollY,
            width: maxX - minX,
            height: maxY - minY
        };
    }



    createMultiPartVisual(block) {
        const originalElement = block.root;
        const children = Array.from(originalElement.children);
        if (!children.length) return;

        const containers = [];

        children.forEach(child => {
            const rect = child.getBoundingClientRect();
            const container = document.createElement('div');

            container.onclick = () => {
                this.data.openBlock = {
                    ...block,
                    children: void 0,
                    initData: void 0,
                    page: void 0,
                    parent: void 0,
                    refs: void 0,
                    selector: void 0,
                    root: void 0,
                }


                void this.rerender();
            }

            container.style.position = 'absolute';
            container.style.left = `${rect.left + window.scrollX}px`;
            container.style.top = `${rect.top + window.scrollY}px`;
            container.style.width = `${rect.width}px`;
            container.style.height = `${rect.height}px`;
            container.style.backgroundColor = '#ffffff3d';
            container.style.opacity = 0.9;

            container.style.outline = '2px solid aqua';
            container.style.cursor = 'pointer';

            // Копируем стили ребенка
            // const childStyle = window.getComputedStyle(child);
            // container.style.backgroundColor = childStyle.backgroundColor;
            // container.style.border = childStyle.border;

            document.body.appendChild(container);
            containers.push(container);
        });

        return containers;
    }

    close() {
        this.data.openBlock = void 0;
        void this.rerender();

        console.log('close')
       
        this.page.nextTick(() => {
             this.turnOff()
        })
    }

    turnOn() {
        this.data.cache = [];

        for (let k in this.page._blocks) {
            const block = this.page._blocks[k];

            if (block.root && !/^blocks-dev/.test(block?.name)) {

                const containers = this.createMultiPartVisual(block);

                 this.data.cache.push({
                    elm: block.root,
                    containers: containers || []
                });
            }
        }
    }


    turnOff() {
        this.data.cache.forEach(item => {
            item.containers.forEach(c => c.remove())
        });

         this.data.cache = []
    }

    _unmount() {
        document.removeEventListener('keydown', this.keydown)
        document.removeEventListener('keyup', this.keyup)
        super._unmount();
    }
}

window._fr_blocks['blocks-dev.Backlight.info'] = class BacklightInfo extends BlockClass {
    close() {
        this.parent.close();
     }

    console() {
        console.log(this.data)
     }

    async editor() { 
        this.page.server('/dev/open_block',{name: this.data.name})
    }
}

window._fr_blocks['blocks-dev.Updater'] = class Updater extends BlockClass {
  init() {
    this.socket = new (class WSDEVClient {
      constructor(host, options = {}) {
        this.host = `ws://${location.host}`;
        this.pingInterval = 5000;
        this.reconnectInterval = 5000;
        this.connected = false;
        this._queue = [];
        this._listeners = {};
      }

      connect() {
        if (this.connected || this._socket !== undefined) return;

        this._socket = new WebSocket(this.host);
        this._socket.onmessage = (message) => this.onMessage(message);
        this._socket.onclose = (message) => this.onClose(message);
        this._socket.onerror = (message) => this.onError(message);
        this._socket.onopen = (message) => this.onConnect(message);
      }

      emit(event, message = this) {
        if (this._listeners[event] === undefined) return this;

        let l = this._listeners[event].length;

        while (l--) {
          this._listeners[event][l].callback(message);
        }

        return this;
      }

      on(event, callback, options = {}) {
        if (this._listeners[event] === undefined) this._listeners[event] = [];

        this._listeners[event].push({ callback, options });
      }

      off(event) {
        if (this._listeners[event] === undefined) this._listeners[event] = [];

        delete this._listeners[event];

        return this;
      }

      reconnect = () => {
        if (this.reconnectInterval === 0) return;

        if (this._rTimeout) return;

        if (this.connected) return;

        this.emit("reconnect");

        this._rTimeout = setTimeout(() => {
          this.connect();

          clearTimeout(this._rTimeout);

          this._rTimeout = void 0;
        }, this.reconnectInterval);
      };

      onConnect = (message) => {
        this.connected = true;

        let args;

        while ((args = this._queue.shift())) {
          this.send(...args);
        }

        this.emit("connected");

        if (this.pingInterval > 0) this.startPing();
      };

      disconnect = () => {
        this._socket && this._socket.close();
        clearTimeout(this._rTimeout);
        this.stopPing();
      };

      startPing = () => {
        this.pingTimer = setInterval(() => {
          if (this.connected) {
            this._socket && this._socket.send("ping");
          }
        }, this.pingInterval);
      };

      stopPing = () => {
        clearInterval(this.pingTimer);
        this.pingTimer = void 0;
      };

      onError = (message) => {
        this.connected = false;

        this.emit("error", message);
        this._socket = void 0;
        this.stopPing();

        // this.reconnect();
      };

      onClose = (message) => {
        this._socket = void 0;
        this.connected = false;
        this.stopPing();

        this.emit("close", message);

        this.reconnect();
      };

      onMessage = (message) => {
        if (message.data === "pong") return this.emit("messege", message.data);

        try {
          const json = JSON.parse(message.data);

          this.emit(json.event, json.payload);
        } catch (e) {
          this.emit("messege", message.data);
        }
      };

      send = (command, payload = undefined) => {
        if (this.connected === false || this._socket === undefined) {
          this._queue.push([command, payload]);

          return;
        }

        this.emit("send", { command, payload });

        this._socket.send(
          JSON.stringify({
            c: command,
            p: payload,
          })
        );
      };
    })();
  }

  reloadCss() {
    var links = document.getElementsByTagName("link");
    for (var cl in links) {
      var link = links[cl];
      if (link.rel === "stylesheet") link.href += "";
    }
  }

  _mount() {
    super._mount();
    this.init();
    this.socket.connect();
    this.errors = [...this.page.lastDebug.errors];
    this.socket.on("reloadPage", () => {
      //this.page.router.reload();
      location.reload();
      this.reloadCss();
    });

    this.socket.on("error", (payload) => {
      this.errors.push(payload);
      this.renderError();
    });

    this.off1 = this.page.store.on("addDebugInfo", (payload) => {
      this.errors.push(...payload.errors);
      this.renderError();
    });

    this.renderError();
  }

  renderError() {
    if (this.errors.length === 0) return;

    const html = `<div class="${this.getClass("overlay")}"></div>
        <div class="${this.getClass("container")}">
            <div class="${this.getClass("title")}">Error (${
      this.errors.length + 1
    })</div>
            <div class="${this.getClass("wrapper")}">
                ${this.errors.map((error) => {
                  return `
                    <hr/>

                    <div class="${this.getClass("item")}">
                        <div class="${this.getClass("block-name")}">${
                    error.name
                  } (${error.type})</div>
                        <a href="vscode://file/${
                          error.file
                        }" class="${this.getClass("block-path")}">${
                    error.file
                  }</a>
                        <textarea class="${this.getClass(
                          "block-json"
                        )}">${JSON.stringify(
                    error.error,
                    null,
                    "\t"
                  )}</textarea>
                    </div>`;
                })}          
            </div>
        </div>`;
    this.root.innerHTML = html;

    this.getElementNode("overlay")?.addEventListener("click", () => {
      this.errors = [];
      this.root.innerHTML = "";
    });
  }

  _unmount() {
    super._unmount();
    this.off1();
  }
}


window._fr_blocks['blocks-portal'] = class PortalBlock extends BlockClass {

    testPSRouts(url, routs = this.page._routes, three = []) {
        for (let route of routs) {
            const res = url.match(route.route);

            if (res !== null) {
                const [part, ...params] = res;

                const portal = {
                    name: route.block,
                    params: params || [],
                    portal: route.portal
                };

                three.push(portal);

                if (route.routs) {
                    return this.testPSRouts(url.replace(part, ""), route.routs, three);
                }

                return three;
            }
        }

        three.length === 0 && three.push({ params: [] });

        return three;
    }

    _mount() {
        super._mount();

        this.page._portals[this.data.pname] = this;

        this.off1 = this.page.store.on('try-go-to', async ({ href, query, options }) => {
            return this.testPortal({ href, query, options })
        });
    }

    async init() {
        super.init();
        if (this.data.testWhenInit && !window.__PASTISH_CLIENT_ONLY__) {
            this.testPortal({ href: this.page.router.currentHref, options: {} });
        }
    }

    async testPortal({ href, query, options }) {
        if (options.ignorePortal) return true;
        if (window.__PASTISH_CLIENT_ONLY__) return true;

        const navigationId = (this.navigationSequence || 0) + 1;
        this.navigationSequence = navigationId;
        const [url, rq] = href.split('?');

        if (rq) {
            query = {
                ...rq.split("&").reduce((obj, x) => {
                    let [a, b] = x.split("=");
                    obj[a] = decodeURI(b);
                    return obj;
                }, {}), ...query
            };

        }
        const [route, ...portals] = this.testPSRouts(url);

        if (portals.length === 0)
            return true;

        const { debug, html, meta, state } = await this.page.getBlock(portals[0].name, {
            parent_portal: this.id,
            parent_render_key: this.renderKey,
            portal_params: (portals[0] ? portals[0].params : []) || [],
            portal_data: this.data.currentData
        }, query);

        if (
            navigationId !== this.navigationSequence ||
            this._unmounted ||
            this.page._blocks[this.id] !== this
        ) return false;


        // this.data.currentData = this.data;
        // this.data.currentName = portals[0].name;



        this.page.addDebugInfo(debug);

        if (this.children[0]) {
            this.page.router.setCurrent(await this.page.replacePageBlocks(
                state.renderBlocks,
                state,
                this.children[0],
                () => {
                    this.root.innerHTML = html;
                }
            ));
        } else {
            this.root.innerHTML = html;
            this.page.pushBlocks(state.renderBlocks, this);
        }

        if (!options.withOutPush) {
            window.history.pushState({
                href,
                html,
                ...meta,
                pastishIndex: this.page.router.index,
            }, "", href);
        }

        this.page.router.changeMetaTags(meta);

        options.scroll && window.scrollTo({ top: 0 });


        return false;
    }

    _unmount() {
        this.navigationSequence = (this.navigationSequence || 0) + 1;
        delete this.page._portals[this.data.pname];
        if (typeof this.off1 === "function") this.off1();
        super._unmount();
    }
}


window._fr_blocks['blocks-dev.Backlight'] = class Backlight extends BlockClass {

    _init(){
        super._init();
        this.data.cache = [];
    }
    _mount() {
        super._mount();

        this.isPressed = false;
      
        this.keydown = (event) => {
            if (event.key === 'Control') {
                if (this.isPressed)
                    return;

                if (this.data.openBlock)
                    return;

                this.isPressed = true;

                this.turnOn();
                // Здесь можно добавить нужные действия при нажатии Ctrl
            }
        }

        this.keyup = (event) => {
            if (event.key === 'Control') {


                
                if (this.data.openBlock)
                    return;

                                this.isPressed = false;

                this.turnOff()
                console.log('Клавиша Ctrl отпущена');
                // Здесь можно добавить нужные действия при отпускании Ctrl
            }
        }

        document.addEventListener('keydown', this.keydown);

        document.addEventListener('keyup', this.keyup);
    }

    getContentsBoundingBox(element) {
        const children = Array.from(element.children);
        if (!children.length) return null;

        let minX = Infinity, minY = Infinity;
        let maxX = -Infinity, maxY = -Infinity;

        children.forEach(child => {
            const rect = child.getBoundingClientRect();
            minX = Math.min(minX, rect.left);
            minY = Math.min(minY, rect.top);
            maxX = Math.max(maxX, rect.right);
            maxY = Math.max(maxY, rect.bottom);
        });

        return {
            x: minX + window.scrollX,
            y: minY + window.scrollY,
            width: maxX - minX,
            height: maxY - minY
        };
    }



    createMultiPartVisual(block) {
        const originalElement = block.root;
        const children = Array.from(originalElement.children);
        if (!children.length) return;

        const containers = [];

        children.forEach(child => {
            const rect = child.getBoundingClientRect();
            const container = document.createElement('div');

            container.onclick = () => {
                this.data.openBlock = {
                    ...block,
                    children: void 0,
                    initData: void 0,
                    page: void 0,
                    parent: void 0,
                    refs: void 0,
                    selector: void 0,
                    root: void 0,
                }


                void this.rerender();
            }

            container.style.position = 'absolute';
            container.style.left = `${rect.left + window.scrollX}px`;
            container.style.top = `${rect.top + window.scrollY}px`;
            container.style.width = `${rect.width}px`;
            container.style.height = `${rect.height}px`;
            container.style.backgroundColor = '#ffffff3d';
            container.style.opacity = 0.9;

            container.style.outline = '2px solid aqua';
            container.style.cursor = 'pointer';

            // Копируем стили ребенка
            // const childStyle = window.getComputedStyle(child);
            // container.style.backgroundColor = childStyle.backgroundColor;
            // container.style.border = childStyle.border;

            document.body.appendChild(container);
            containers.push(container);
        });

        return containers;
    }

    close() {
        this.data.openBlock = void 0;
        void this.rerender();

        console.log('close')
       
        this.page.nextTick(() => {
             this.turnOff()
        })
    }

    turnOn() {
        this.data.cache = [];

        for (let k in this.page._blocks) {
            const block = this.page._blocks[k];

            if (block.root && !/^blocks-dev/.test(block?.name)) {

                const containers = this.createMultiPartVisual(block);

                 this.data.cache.push({
                    elm: block.root,
                    containers: containers || []
                });
            }
        }
    }


    turnOff() {
        this.data.cache.forEach(item => {
            item.containers.forEach(c => c.remove())
        });

         this.data.cache = []
    }

    _unmount() {
        document.removeEventListener('keydown', this.keydown)
        document.removeEventListener('keyup', this.keyup)
        super._unmount();
    }
}

window._fr_blocks['blocks-dev.Backlight.info'] = class BacklightInfo extends BlockClass {
    close() {
        this.parent.close();
     }

    console() {
        console.log(this.data)
     }

    async editor() { 
        this.page.server('/dev/open_block',{name: this.data.name})
    }
}

window._fr_blocks['blocks-dev.Updater'] = class Updater extends BlockClass {
  init() {
    this.socket = new (class WSDEVClient {
      constructor(host, options = {}) {
        this.host = `ws://${location.host}`;
        this.pingInterval = 5000;
        this.reconnectInterval = 5000;
        this.connected = false;
        this._queue = [];
        this._listeners = {};
      }

      connect() {
        if (this.connected || this._socket !== undefined) return;

        this._socket = new WebSocket(this.host);
        this._socket.onmessage = (message) => this.onMessage(message);
        this._socket.onclose = (message) => this.onClose(message);
        this._socket.onerror = (message) => this.onError(message);
        this._socket.onopen = (message) => this.onConnect(message);
      }

      emit(event, message = this) {
        if (this._listeners[event] === undefined) return this;

        let l = this._listeners[event].length;

        while (l--) {
          this._listeners[event][l].callback(message);
        }

        return this;
      }

      on(event, callback, options = {}) {
        if (this._listeners[event] === undefined) this._listeners[event] = [];

        this._listeners[event].push({ callback, options });
      }

      off(event) {
        if (this._listeners[event] === undefined) this._listeners[event] = [];

        delete this._listeners[event];

        return this;
      }

      reconnect = () => {
        if (this.reconnectInterval === 0) return;

        if (this._rTimeout) return;

        if (this.connected) return;

        this.emit("reconnect");

        this._rTimeout = setTimeout(() => {
          this.connect();

          clearTimeout(this._rTimeout);

          this._rTimeout = void 0;
        }, this.reconnectInterval);
      };

      onConnect = (message) => {
        this.connected = true;

        let args;

        while ((args = this._queue.shift())) {
          this.send(...args);
        }

        this.emit("connected");

        if (this.pingInterval > 0) this.startPing();
      };

      disconnect = () => {
        this._socket && this._socket.close();
        clearTimeout(this._rTimeout);
        this.stopPing();
      };

      startPing = () => {
        this.pingTimer = setInterval(() => {
          if (this.connected) {
            this._socket && this._socket.send("ping");
          }
        }, this.pingInterval);
      };

      stopPing = () => {
        clearInterval(this.pingTimer);
        this.pingTimer = void 0;
      };

      onError = (message) => {
        this.connected = false;

        this.emit("error", message);
        this._socket = void 0;
        this.stopPing();

        // this.reconnect();
      };

      onClose = (message) => {
        this._socket = void 0;
        this.connected = false;
        this.stopPing();

        this.emit("close", message);

        this.reconnect();
      };

      onMessage = (message) => {
        if (message.data === "pong") return this.emit("messege", message.data);

        try {
          const json = JSON.parse(message.data);

          this.emit(json.event, json.payload);
        } catch (e) {
          this.emit("messege", message.data);
        }
      };

      send = (command, payload = undefined) => {
        if (this.connected === false || this._socket === undefined) {
          this._queue.push([command, payload]);

          return;
        }

        this.emit("send", { command, payload });

        this._socket.send(
          JSON.stringify({
            c: command,
            p: payload,
          })
        );
      };
    })();
  }

  reloadCss() {
    var links = document.getElementsByTagName("link");
    for (var cl in links) {
      var link = links[cl];
      if (link.rel === "stylesheet") link.href += "";
    }
  }

  _mount() {
    super._mount();
    this.init();
    this.socket.connect();
    this.errors = [...this.page.lastDebug.errors];
    this.socket.on("reloadPage", () => {
      //this.page.router.reload();
      location.reload();
      this.reloadCss();
    });

    this.socket.on("error", (payload) => {
      this.errors.push(payload);
      this.renderError();
    });

    this.off1 = this.page.store.on("addDebugInfo", (payload) => {
      this.errors.push(...payload.errors);
      this.renderError();
    });

    this.renderError();
  }

  renderError() {
    if (this.errors.length === 0) return;

    const html = `<div class="${this.getClass("overlay")}"></div>
        <div class="${this.getClass("container")}">
            <div class="${this.getClass("title")}">Error (${
      this.errors.length + 1
    })</div>
            <div class="${this.getClass("wrapper")}">
                ${this.errors.map((error) => {
                  return `
                    <hr/>

                    <div class="${this.getClass("item")}">
                        <div class="${this.getClass("block-name")}">${
                    error.name
                  } (${error.type})</div>
                        <a href="vscode://file/${
                          error.file
                        }" class="${this.getClass("block-path")}">${
                    error.file
                  }</a>
                        <textarea class="${this.getClass(
                          "block-json"
                        )}">${JSON.stringify(
                    error.error,
                    null,
                    "\t"
                  )}</textarea>
                    </div>`;
                })}          
            </div>
        </div>`;
    this.root.innerHTML = html;

    this.getElementNode("overlay")?.addEventListener("click", () => {
      this.errors = [];
      this.root.innerHTML = "";
    });
  }

  _unmount() {
    super._unmount();
    this.off1();
  }
}


window._fr_blocks['blocks-portal'] = class PortalBlock extends BlockClass {

    testPSRouts(url, routs = this.page._routes, three = []) {
        for (let route of routs) {
            const res = url.match(route.route);

            if (res !== null) {
                const [part, ...params] = res;

                const portal = {
                    name: route.block,
                    params: params || [],
                    portal: route.portal
                };

                three.push(portal);

                if (route.routs) {
                    return this.testPSRouts(url.replace(part, ""), route.routs, three);
                }

                return three;
            }
        }

        three.length === 0 && three.push({ params: [] });

        return three;
    }

    _mount() {
        super._mount();

        this.page._portals[this.data.pname] = this;

        this.off1 = this.page.store.on('try-go-to', async ({ href, query, options }) => {
            return this.testPortal({ href, query, options })
        });
    }

    async init() {
        super.init();
        if (this.data.testWhenInit && !window.__PASTISH_CLIENT_ONLY__) {
            this.testPortal({ href: this.page.router.currentHref, options: {} });
        }
    }

    async testPortal({ href, query, options }) {
        if (options.ignorePortal) return true;
        if (window.__PASTISH_CLIENT_ONLY__) return true;

        const navigationId = (this.navigationSequence || 0) + 1;
        this.navigationSequence = navigationId;
        const [url, rq] = href.split('?');

        if (rq) {
            query = {
                ...rq.split("&").reduce((obj, x) => {
                    let [a, b] = x.split("=");
                    obj[a] = decodeURI(b);
                    return obj;
                }, {}), ...query
            };

        }
        const [route, ...portals] = this.testPSRouts(url);

        if (portals.length === 0)
            return true;

        const { debug, html, meta, state } = await this.page.getBlock(portals[0].name, {
            parent_portal: this.id,
            parent_render_key: this.renderKey,
            portal_params: (portals[0] ? portals[0].params : []) || [],
            portal_data: this.data.currentData
        }, query);

        if (
            navigationId !== this.navigationSequence ||
            this._unmounted ||
            this.page._blocks[this.id] !== this
        ) return false;


        // this.data.currentData = this.data;
        // this.data.currentName = portals[0].name;



        this.page.addDebugInfo(debug);

        if (this.children[0]) {
            this.page.router.setCurrent(await this.page.replacePageBlocks(
                state.renderBlocks,
                state,
                this.children[0],
                () => {
                    this.root.innerHTML = html;
                }
            ));
        } else {
            this.root.innerHTML = html;
            this.page.pushBlocks(state.renderBlocks, this);
        }

        if (!options.withOutPush) {
            window.history.pushState({
                href,
                html,
                ...meta,
                pastishIndex: this.page.router.index,
            }, "", href);
        }

        this.page.router.changeMetaTags(meta);

        options.scroll && window.scrollTo({ top: 0 });


        return false;
    }

    _unmount() {
        this.navigationSequence = (this.navigationSequence || 0) + 1;
        delete this.page._portals[this.data.pname];
        if (typeof this.off1 === "function") this.off1();
        super._unmount();
    }
}



const styleAlias = {"blocks-dev.Backlight.info-blocks-dev.Backlight.info":"f1","blocks-dev.Updater-overlay":"f2","blocks-dev.Updater-container":"f3","blocks-dev.Updater-wrapper":"f4","blocks-dev.Updater-title":"f5","blocks-dev.Updater-item":"f6","blocks-dev.Updater-block-name":"f7","blocks-dev.Updater-block-path":"f8","blocks-dev.Updater-block-json":"f9","blocks-portal-blocks-portal":"f10","pages-404-wrapper-page":"f11","pages-404-wrapper":"f12","pages-404-errorPageContent":"f13","pages-404-errorPageText":"f14","pages-locations.edit.preview-pages-locations.edit.preview":"f15","pages-locations.edit.preview-center":"f16","pages-locations.edit.preview-canvas":"f17"}
 window.renderBlocks['blocks-effect'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='             ';
 const isEffect = data.effects.find(e => data.effect.type === e.value) 
__p+='\n\n              <div class="array-item">\n                                <div class="array-item-header">\n                                    <div>\n                                        <div class="array-item-title">'+
((__t=(isEffect.name ))==null?'':__t)+
'</div>\n                                        <p style="font-size: 0.85rem; margin: 0.3rem 0 0 0;">Тип: '+
((__t=(  data.effect.type ))==null?'':__t)+
'</p>\n                                    </div>\n                                    <div class="array-item-actions">\n                                        <button class="toggle-btn" onclick="toggleArrayItem(this)">▼</button>\n                                        <button '+
((__t=( e.click('removeEffect') ))==null?'':__t)+
' class="delete-btn">✕</button>\n                                    </div>\n                                </div>\n                                <div class="array-item-content expanded">\n                                    <div class="form-row">\n                                        <div class="form-col">\n                                            <label class="form-label">Тип эффекта</label>\n                                            <select class="form-select" '+
((__t=( e.on('change', 'changeEffect')))==null?'':__t)+
'>\n                                                ';
 for (let index = 0; index < data.effects.length; index++) {
                                                     const effect =  data.effects[index]; 
__p+='\n\n                                                    <option value="'+
((__t=( effect.value ))==null?'':__t)+
'" '+
((__t=( data.effect.type ===  effect.value ? 'selected' : '' ))==null?'':__t)+
'>'+
((__t=( effect.name ))==null?'':__t)+
'</option>\n\n                                                ';
 } 
__p+='\n                                                \n                                            </select>\n                                        </div>\n\n\n                                        <div class="form-row full">\n                                            <div class="form-col">\n                                                <label class="form-label">Описание эфекта (Опционально)</label>\n                                                <textarea '+
((__t=( e.on('input','onValueInput', 'description') ))==null?'':__t)+
' class="form-textarea">'+
((__t=( data.effect.description ))==null?'':__t)+
'</textarea>\n                                            </div>\n                                        </div>\n                                        ';
 if (['rune', 'item'].includes(data.type)) { 
__p+='\n                                            <div class="form-col">\n                                                <label class="form-label">Продолжительность (ходов владельца)</label>\n                                                <input '+
((__t=( e.on('input','onValueInput', 'duration') ))==null?'':__t)+
' type="number" class="form-input" value="'+
((__t=( data.effect.duration ))==null?'':__t)+
'" min="0">\n                                                ';
 if (data.type === 'item') { 
__p+='\n                                                    <p style="font-size: 0.75rem; color: #999; margin: 0.3rem 0 0 0;">\n                                                        ';
 if (data.canUse) { 
__p+='\n                                                            Расходник (можно выпить в бою): эффект всегда временный.\n                                                            0/пусто — мгновенный (лечение, урон, очистка), N — держится N своих ходов.\n                                                        ';
 } else { 
__p+='\n                                                            Экипировка: 0/пусто — ПОСТОЯННЫЙ эффект, пока предмет надет.\n                                                            N — временный эффект на первые N своих ходов (для attack/damage/protection/hp/mana\n                                                            постоянный вариант идёт прямо в характеристики персонажа).\n                                                        ';
 } 
__p+='\n                                                    </p>\n                                                ';
 } 
__p+='\n                                            </div>\n                                        ';
 } 
__p+='\n                                    </div>\n\n                               \n                                    ';
 if (isEffect.single){  
__p+='\n                                        <div class="form-col" style="margin-bottom: 1rem;">\n                                            <label class="form-label">Значение (число)</label>\n                                            <input '+
((__t=( e.on('input','onValueInput', 'value') ))==null?'':__t)+
'  type="number" class="form-input" value="'+
((__t=( data.effect.value ))==null?'':__t)+
'">\n                                            ';
 const numericHints = {
                                                shield: 'Запас поглощения урона (пока не исчерпан)',
                                                reflect: 'Сколько урона вернётся атакующему за каждое прямое попадание',
                                                lifesteal: '% от нанесённого урона, возвращаемый владельцу как здоровье',
                                                dispel: 'Сколько эффектов снять (у цели — положительные; на себе при to_owner — негативные)',
                                                amplify: '% к получаемому урону. Отрицательное значение — снижает входящий урон',
                                                p_power: '% к точности (силе совпадения руны)',
                                                health: 'Здоровье за одно применение/тик',
                                                hp: 'Изменение текущего здоровья',
                                                mana: 'Изменение маны'
                                            }; 
__p+='\n                                            ';
 if (numericHints[data.effect.type]) { 
__p+='\n                                                <p style="font-size: 0.75rem; color: #999; margin: 0.3rem 0 0 0;">'+
((__t=( numericHints[data.effect.type] ))==null?'':__t)+
'</p>\n                                            ';
 } 
__p+='\n                                        </div>\n                                    ';
 } else {
__p+='\n                                        <div style="margin-bottom: 1rem;" class="object-value-container">\n                                            <label class="form-label">Распределение по стихиям</label>\n                                            <div class="element-inputs">\n                                                <div class="element-input">\n                                                    <div class="element-input-label">🔥 Огонь</div>\n                                                    <input '+
((__t=( e.on('input','onValueInput', 'value.fire') ))==null?'':__t)+
'  type="number" class="form-input" value="'+
((__t=( data.effect.value.fire || 0))==null?'':__t)+
'" min="0">\n                                                </div>\n                                                <div class="element-input">\n                                                    <div class="element-input-label">❄ Лед</div>\n                                                    <input '+
((__t=( e.on('input','onValueInput', 'value.water') ))==null?'':__t)+
'  type="number" class="form-input" value="'+
((__t=( data.effect.value.water || 0))==null?'':__t)+
'" min="0">\n                                                </div>\n                                                <div class="element-input">\n                                                    <div class="element-input-label">💨 Воздух</div>\n                                                    <input '+
((__t=( e.on('input','onValueInput', 'value.air') ))==null?'':__t)+
'  type="number" class="form-input" value="'+
((__t=( data.effect.value.air || 0 ))==null?'':__t)+
'" min="0">\n                                                </div>\n                                                <div class="element-input">\n                                                    <div class="element-input-label">🌍 Земля</div>\n                                                    <input '+
((__t=( e.on('input','onValueInput', 'value.land') ))==null?'':__t)+
'  type="number" class="form-input" value="'+
((__t=( data.effect.value.land || 0))==null?'':__t)+
'" min="0">\n                                                </div>\n                                            </div>\n                                        </div>\n                                    ';
 } 
__p+='\n\n                                    <div class="form-row">\n                                         <div class="form-col" style="display: flex; flex-direction: column; justify-content: flex-end;">\n                                            <div class="checkbox-wrapper">\n                                                <input '+
((__t=( e.on('change','onValueChange', 'to_owner') ))==null?'':__t)+
'  type="checkbox" class="checkbox" '+
((__t=( data.effect.to_owner ? 'checked' : ''))==null?'':__t)+
'>\n                                                <label class="checkbox-label">Применяется на игрока</label>\n                                            </div>\n                                        </div>\n                                        <div class="form-col" style="display: flex; flex-direction: column; justify-content: flex-end;">\n                                            <div class="checkbox-wrapper">\n                                                <input '+
((__t=( e.on('change','onValueChange', 'negative') ))==null?'':__t)+
'  type="checkbox" class="checkbox" '+
((__t=( data.effect.negative ? 'checked' : ''))==null?'':__t)+
'>\n                                                <label class="checkbox-label">Негативный эффект</label>\n                                            </div>\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>';
}
return __p;
}
window.renderBlocks['blocks-imageLoader'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='<input accept="'+
((__t=( data.content_type ? data.content_type : 'image/jpeg,image/png'))==null?'':__t)+
'" style="display:none" type="file" '+
((__t=( e.change('fileChanged', {index:data.index}) ))==null?'':__t)+
'/>\n';
 if (data.local_file || data.image){ 
__p+='\n        <img style="'+
((__t=( data.style ))==null?'':__t)+
'" src="'+
((__t=( data.local_file || data.image ))==null?'':__t)+
'">\n        <button  '+
((__t=( e.click('remove') ))==null?'':__t)+
' class="btn">Удалить</button>\n';
 } else { 
__p+='\n    <button '+
((__t=( e.click('openDialog') ))==null?'':__t)+
' class="btn btn-primary">Загрузить</button>\n';
 } 
__p+='';
}
return __p;
}
window.renderBlocks['blocks-item'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='';
 const item = data.items.find(i => i.id === data.item.id) 
__p+='\n<div class="array-item">\n    <div class="array-item-header">\n        <div>\n            <div class="array-item-title"><img style="height:40px" src="'+
((__t=( item.img ))==null?'':__t)+
'"> '+
((__t=( item.name ))==null?'':__t)+
'</div>\n            <p style="font-size: 0.85rem; margin: 0.3rem 0 0 0;">ID: '+
((__t=(data.item.id ))==null?'':__t)+
', Количество: '+
((__t=( data.item.count))==null?'':__t)+
'</p>\n        </div>\n        <div class="array-item-actions">\n            <button '+
((__t=( e.click('removeItem') ))==null?'':__t)+
' class="delete-btn">✕</button>\n        </div>\n    </div>\n    <div class="array-item-content expanded">\n        <div class="form-row">\n            <div class="form-col">\n                <label class="form-label">ID предмета</label>\n\n            <select  '+
((__t=( e.on('change', 'changeItem')))==null?'':__t)+
' class="form-select">\n                ';
 for (let index = 0; index < data.items.length; index++) {
                    const item = data.items[index]; 
__p+='\n\n                    <option value="'+
((__t=( item.id ))==null?'':__t)+
'" '+
((__t=( data.item.id === item.id ? 'selected' : ''))==null?'':__t)+
' > '+
((__t=( item.name ))==null?'':__t)+
'</option>\n                ';
 } 
__p+='\n            </select>\n\n\n\n            </div>\n            ';
 if (item.can_use) { 
__p+='\n            <div class="form-col">\n                <label class="form-label">Количество</label>\n                <input '+
((__t=( e.on('input','onValueInput', 'count') ))==null?'':__t)+
' type="number" class="form-input" value="'+
((__t=( data.item.count ))==null?'':__t)+
'" min="1">\n            </div>\n            ';
 } 
__p+='\n        </div>\n    </div>\n</div>';
}
return __p;
}
window.renderBlocks['blocks-menu'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='      \n      ';
 console.log(query.url)  
      
      const isActive = (rg) => {
        return rg.test(query.url) ? 'active' : ''
      }
      
      
__p+='\n      <aside class="sidebar">\n            <div class="sidebar-logo">\n                <div class="logo-text">⚔ Runic Battle</div>\n                <div class="logo-subtext">Админ Панель</div>\n            </div>\n            <nav class="nav-menu">\n                <li class="nav-item">\n                    <a class="nav-link '+
((__t=( isActive(/index/) ))==null?'':__t)+
'" href="/">\n                        <span class="nav-icon">🔮</span>\n                        <span>Главная</span>\n                    </a>\n                </li>\n                <li class="nav-item">\n                    <a class="nav-link '+
((__t=( isActive(/mobs/) ))==null?'':__t)+
'" href="/mobs">\n                        <span class="nav-icon">👹</span>\n                        <span>Мобы</span>\n                    </a>\n                </li>\n    \n                <li class="nav-item">\n                    <a class="nav-link '+
((__t=( isActive(/runes/) ))==null?'':__t)+
'" href="/runes">\n                        <span class="nav-icon">✨</span>\n                        <span>Руны</span>\n                    </a>\n                </li>\n                 <li class="nav-item">\n                    <a class="nav-link '+
((__t=( isActive(/items/) ))==null?'':__t)+
'" href="/items">\n                        <span class="nav-icon">🎒</span>\n                        <span>Предметы</span>\n                    </a>\n                </li>\n                <li class="nav-item">\n                    <a class="nav-link '+
((__t=( isActive(/shop/) ))==null?'':__t)+
'" href="/shop">\n                        <span class="nav-icon">🛒</span>\n                        <span>Магазин</span>\n                    </a>\n                </li>\n                <li class="nav-item">\n                    <a class="nav-link '+
((__t=( isActive(/locations/) ))==null?'':__t)+
'" href="/locations">\n                        <span class="nav-icon">🗺️</span>\n                        <span>Локации</span>\n                    </a>\n                </li>\n                <li class="nav-item">\n                    <a class="nav-link '+
((__t=( isActive(/players/) ))==null?'':__t)+
'" href="/players">\n                        <span class="nav-icon">👥</span>\n                        <span>Игроки</span>\n                    </a>\n                </li>\n                <li class="nav-item">\n                    <a class="nav-link '+
((__t=( isActive(/battles/) ))==null?'':__t)+
'" href="/battles">\n                        <span class="nav-icon">⚔️</span>\n                        <span>История боёв</span>\n                    </a>\n                </li>\n               <!-- <li class="nav-item">\n                    <a class="nav-link" href="/players/edit">\n                        <span class="nav-icon">🎭</span>\n                        <span>Редактор Игрока</span>\n                    </a>\n                </li> -->\n                <li class="nav-item">\n                    <a class="nav-link" href="/logout">\n                        <span class="nav-icon">🔓</span>\n                        <span>Выход</span>\n                    </a>\n                </li>\n            </nav>\n        </aside>';
}
return __p;
}
window.renderBlocks['blocks-mobplace'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='<div class="array-item">\n    <div class="array-item-header">\n        <div>\n            <div class="array-item-title">📍 Место #'+
((__t=( data.index ))==null?'':__t)+
'</div>\n        </div>\n        <div class="array-item-actions">\n            <button '+
((__t=( e.click('removePlace')))==null?'':__t)+
' class="delete-btn">✕</button>\n        </div>\n    </div>\n    <div class="array-item-content expanded">\n        <div class="form-row">\n            <div class="form-col">\n                <label class="form-label">X позиция</label>\n                <input type="number" class="form-input" '+
((__t=( e.on('input','onValueInput', 'position.0') ))==null?'':__t)+
' value="'+
((__t=( data.place.position[0] ))==null?'':__t)+
'">\n            </div>\n            <div class="form-col">\n                <label class="form-label">Y позиция</label>\n                <input type="number" class="form-input" '+
((__t=( e.on('input','onValueInput', 'position.1') ))==null?'':__t)+
' value="'+
((__t=( data.place.position[1] ))==null?'':__t)+
'">\n            </div>\n        </div>\n        <div class="form-row">\n            <div class="form-col">\n                <label class="form-label">Ширина</label>\n                <input type="number" class="form-input" '+
((__t=( e.on('input','onValueInput', 'size.0') ))==null?'':__t)+
' value="'+
((__t=( data.place.size[0] ))==null?'':__t)+
'">\n            </div>\n            <div class="form-col">\n                <label class="form-label">Высота</label>\n                <input type="number" class="form-input"  '+
((__t=( e.on('input','onValueInput', 'size.1') ))==null?'':__t)+
' value="'+
((__t=( data.place.size[1] ))==null?'':__t)+
'">\n            </div>\n        </div>\n        <div class="form-col">\n            <label class="form-label">Путь к изображению</label>\n                '+
((__t=( f.renderBlock('imageLoader', {
                    key:'img',
                    local_file: data.img_local_file,
                    file: data.img_file,
                    style:`width:${data.place.size[0]}px`,
                    pref:'img',
                    image: data.place.img
                }) ))==null?'':__t)+
'\n        </div>\n\n        <div class="form-row">\n            <div class="form-col">\n                <label class="form-label">ID Моба</label>\n\n                     <select '+
((__t=( e.on('change', 'changeMob') ))==null?'':__t)+
' id="name_renderType" class="form-select">\n                        ';
 for (let index = 0; index < data.mobs.length; index++) {
                            const mob =  data.mobs[index]; 
__p+=' \n                            <option value="'+
((__t=( mob.id ))==null?'':__t)+
'" '+
((__t=( data.mob_id == mob.id ? 'selected' : ''))==null?'':__t)+
'> '+
((__t=( mob.name ))==null?'':__t)+
'</option>\n                        ';
 } 
__p+='\n                            \n                    </select>\n            </div>\n        </div>\n        \n        \n    </div>\n</div>\n';
}
return __p;
}
window.renderBlocks['blocks-reward'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='<div class="array-item">\n    <div class="array-item-header">\n        <div>\n\n        </div>\n        <div class="array-item-actions">\n            <button '+
((__t=( e.click('removeReward') ))==null?'':__t)+
' class="delete-btn">✕</button>\n        </div>\n    </div>\n    <div class="array-item-content expanded">\n        ';
 const selectedItem = data.reward.type === 'item' ? data.items.find(item => item.id === data.reward.value) : null 
__p+='\n        <div class="form-row">\n            <div class="form-col">\n                <label class="form-label">Тип награды</label>\n                <select  '+
((__t=( e.on('change', 'changeRewardType')))==null?'':__t)+
' class="form-select">\n                    ';
 for (let index = 0; index < data.rewards.length; index++) {
                        const reward = data.rewards[index]; 
__p+=' \n\n                        <option value="'+
((__t=( reward.value ))==null?'':__t)+
'" '+
((__t=( reward.value === data.reward.type ? 'selected' : '' ))==null?'':__t)+
' >'+
((__t=( reward.name))==null?'':__t)+
'</option>\n\n                    ';
 } 
__p+='\n                </select>\n            </div>\n\n            ';
 if (data.reward.type === 'exp' || data.reward.type === 'gold' || data.reward.type === 'diamonds') { 
__p+='\n                    <div class="form-col">\n                        <label class="form-label">Количество</label>\n                        <input '+
((__t=( e.on('input','onValueInput', 'value') ))==null?'':__t)+
' type="number" class="form-input" value="'+
((__t=( data.reward.value || 0 ))==null?'':__t)+
'">\n                </div>\n            ';
 } else if (data.reward.type === 'rune') { 
__p+='\n                <select  '+
((__t=( e.on('change', 'changeRewardValue')))==null?'':__t)+
' class="form-select">\n                    ';
 for (let index = 0; index < data.runes.length; index++) {
                        const rune = data.runes[index]; 
__p+=' \n                        <option value="'+
((__t=( rune.id ))==null?'':__t)+
'" '+
((__t=( rune.id === data.reward.value ? 'selected' : '' ))==null?'':__t)+
' >'+
((__t=( rune.name ))==null?'':__t)+
'</option>\n                    ';
 } 
__p+='\n                </select>\n            ';
 } else if (data.reward.type === 'item') { 
__p+='\n                <div class="form-col">\n                    <label class="form-label">Предмет</label>\n                    <select '+
((__t=( e.on('change', 'changeRewardValue')))==null?'':__t)+
' class="form-select">\n                        ';
 for (let index = 0; index < data.items.length; index++) {
                            const item = data.items[index]; 
__p+=' \n                            <option value="'+
((__t=( item.id ))==null?'':__t)+
'" '+
((__t=( item.id === data.reward.value ? 'selected' : '' ))==null?'':__t)+
'>'+
((__t=( item.name ))==null?'':__t)+
'</option>\n                        ';
 } 
__p+='\n                    </select>\n                </div>\n                ';
 if (selectedItem && selectedItem.can_use) { 
__p+='\n                    <div class="form-col">\n                        <label class="form-label">Количество</label>\n                        <input '+
((__t=( e.on('input','onValueInput', 'count') ))==null?'':__t)+
' type="number" min="1" class="form-input" value="'+
((__t=( data.reward.count || 1 ))==null?'':__t)+
'">\n                    </div>\n                ';
 } 
__p+='\n            ';
 } 
__p+='\n                <div class="form-col">\n                    <label class="form-label">Шанс выпадения, %</label>\n                    <input '+
((__t=( e.on('input','onValueInput', 'chance') ))==null?'':__t)+
' type="number" min="0" max="100" class="form-input" value="'+
((__t=( data.reward.chance ?? 100 ))==null?'':__t)+
'">\n                </div>\n\n\n        </div>\n    </div>\n</div>';
}
return __p;
}
window.renderBlocks['blocks-rune'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='\n';
 const someRune = data.runes.find(r => r.id === data.rune.id) 
__p+='\n\n<div class="array-item">\n    <div class="array-item-header">\n        <div>\n            <div class="array-item-title">'+
((__t=( someRune.name ))==null?'':__t)+
'</div>\n            <p style="font-size: 0.85rem; margin: 0.3rem 0 0 0;">Уровень: '+
((__t=( data.rune.level ))==null?'':__t)+
', Стоимость: '+
((__t=( someRune.mana ))==null?'':__t)+
' маны, Стихия: '+
((__t=( someRune.element ))==null?'':__t)+
'</p>\n        </div>\n        <div class="array-item-actions">\n            <button '+
((__t=( e.click('removeRune')))==null?'':__t)+
' class="delete-btn">✕</button>\n        </div>\n    </div>\n    <div class="array-item-content expanded">\n        <div class="form-col">\n            <label class="form-label">Руна</label>\n            <select '+
((__t=( e.on('change', 'changeRune')))==null?'':__t)+
' class="form-select">\n                ';
 for (let index = 0; index < data.runes.length; index++) {
                    const rune = data.runes[index]; 
__p+='\n\n                    <option value="'+
((__t=( rune.id ))==null?'':__t)+
'"'+
((__t=( data.rune.id === rune.id ? 'selected' : ''))==null?'':__t)+
' >'+
((__t=(rune.name ))==null?'':__t)+
'</option>\n\n                ';
 } 
__p+='\n \n            </select>\n        </div>\n        <div class="form-col" style="margin-bottom: 0.8rem;">\n            <label class="form-label">Уровень руны</label>\n            <input '+
((__t=( e.on('input','onValueInput', 'level') ))==null?'':__t)+
' type="number" class="form-input" value="'+
((__t=(  data.rune.level ))==null?'':__t)+
'" min="1">\n        </div>\n        <p style="font-size: 0.85rem; color: var(--text-secondary); margin: 0;">Стоимость\n            маны: '+
((__t=( someRune.mana ))==null?'':__t)+
'</p>\n    </div>\n</div>';
}
return __p;
}
window.renderBlocks['layout-main'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='<!DOCTYPE html>\n<html lang="ru">\n<head>\n    <meta charset="utf-8">\n    <title>'+
((__t=( meta.title ))==null?'':__t)+
'</title>\n    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">\n    <link rel="shortcut icon" type="image/x-icon" href="/img/favicon.ico" style="width: 12px; height: 12px;" />\n    <link href="/style.css" rel="stylesheet">\n    <meta name="keywords" content="'+
((__t=( meta.keywords ))==null?'':__t)+
'">\n    <meta name="description" content="'+
((__t=( meta.description ))==null?'':__t)+
'" />\n    <meta name="og:title" property="og:title" content="'+
((__t=( meta.title ))==null?'':__t)+
'" />\n    <meta name="og:description" property="og:description" content="'+
((__t=( meta.description ))==null?'':__t)+
'" />\n    <meta name="og:url" property="og:url" content="'+
((__t=( meta.url ))==null?'':__t)+
'" />\n    <meta name="og:image" property="og:image" content="'+
((__t=( meta.image ))==null?'':__t)+
'" />\n    <meta name="og:type" property="og:type" content="website" />\n\n    <script src="/bundle.js"></script>\n</head>\n    <body class="'+
((__t=( f.getClass('body') ))==null?'':__t)+
'" id="layout">\n        '+
((__t=( options.dev ? f.renderBlock('dev.Updater',options) : '' ))==null?'':__t)+
'\n        <div id="root">\n            '+
((__t=( data.content ))==null?'':__t)+
'\n        </div>\n    </body>\n    <script style="display:none">\n        window.Page.setState( '+
((__t=( JSON.stringify(data.state) ))==null?'':__t)+
', '+
((__t=( JSON.stringify(data.debug || {}) ))==null?'':__t)+
', '+
((__t=( JSON.stringify(meta) ))==null?'':__t)+
');\n    </script>\n</html>';
}
return __p;
}
window.renderBlocks['pages-404'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='';
 if (data.name === 'PermissionDeniedError') { 
__p+='\n'+
((__t=( f.renderBlock('pages-auth')))==null?'':__t)+
'\n';
 } else { 
__p+='\n\n<div class="'+
((__t=( f.getClass("wrapper-page") ))==null?'':__t)+
'">\n    <div class="'+
((__t=( f.getClass("wrapper") ))==null?'':__t)+
'">\n            <div class="'+
((__t=( f.getClass("errorPageContent") ))==null?'':__t)+
'">\n                <div class="'+
((__t=( f.getClass("errorPageText") ))==null?'':__t)+
'">Что-то пошло не так</div>\n            </div>\n    </div>\n</div>\n\n';
 } 
__p+='\n\n';
}
return __p;
}
window.renderBlocks['pages-auth'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='        <!-- ЭКРАН ВХОДА -->\n        <div class="screen active" id="login">\n            <div class="login-container">\n                <div class="login-box">\n                    <div class="login-header">\n                        <h1>Руничные Врата</h1>\n                        <p>Административная Панель</p>\n                    </div>\n                    \n                    <div class="runic-ornament">✦ ◆ ✦</div>\n\n                    <form>\n                        <div class="form-group">\n                            <label class="form-label">Ваше имя</label>\n                            <input '+
((__t=( e.ref('username') ))==null?'':__t)+
' type="text" class="form-input" placeholder="Введите логин" value="">\n                        </div>\n\n                        <div class="form-group">\n                            <label class="form-label">Пароль</label>\n                            <input '+
((__t=( e.ref('password') ))==null?'':__t)+
' type="password" class="form-input" placeholder="••••••••" value="">\n                        </div>\n\n                        <button '+
((__t=( e.click('auth') ))==null?'':__t)+
' type="button" class="login-btn">Войти в Врата</button>\n                    </form>\n\n                    <div style="margin-top: 1.5rem; padding-top: 1.5rem; border-top: 1px solid var(--border-color); text-align: center;">\n                        <p style="font-size: 0.85rem; margin: 0;">Кликните на кнопку для входа</p>\n                    </div>\n                </div>\n            </div>\n        </div>';
}
return __p;
}
window.renderBlocks['pages-battles'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='    <div class="app">\n          '+
((__t=( f.renderBlock('menu') ))==null?'':__t)+
'\n\n        <!-- ИСТОРИЯ БОЁВ -->\n        <div class="screen" id="battles-list">\n            <div class="main-container">\n                <header class="header">\n                    <div class="breadcrumbs">\n                        <span class="breadcrumb-item">🔮 <a href="/" style="cursor: pointer; color: inherit; text-decoration: none;">Главная</a></span>\n                        <span class="breadcrumb-separator">/</span>\n                        <span class="breadcrumb-item active">⚔️ История боёв</span>\n                    </div>\n                </header>\n\n                <div class="content">\n                    <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 1rem; flex-wrap: wrap; gap: 0.5rem;">\n                        <h2>История боёв</h2>\n                        <div style="color: var(--text-secondary); font-size: 0.9rem;">\n                            Найдено боёв: <strong style="color: var(--gold-primary);">'+
((__t=( data.total ))==null?'':__t)+
'</strong>\n                            · с обрывом связи: <strong>'+
((__t=( data.summary.with_disconnect ))==null?'':__t)+
'</strong>\n                            · с ходами бота: <strong>'+
((__t=( data.summary.with_ai ))==null?'':__t)+
'</strong>\n                        </div>\n                    </div>\n\n                    ';

                    const inputStyle = 'padding: 0.5rem 0.75rem; border-radius: 6px; border: 1px solid rgba(255,255,255,0.15); background: rgba(0,0,0,0.3); color: inherit;';
                    const labelStyle = 'display: block; font-size: 0.75rem; color: var(--text-secondary); margin-bottom: 0.25rem;';
                    
__p+='\n\n                    <form method="get" action="/battles" class="table-container" style="padding: 1rem; margin-bottom: 1rem;">\n                        <div style="display: flex; gap: 0.75rem; flex-wrap: wrap; align-items: flex-end;">\n                            <div>\n                                <label style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Игрок (id, tgid или имя)</label>\n                                <input type="text" name="player" value="'+
((__t=( data.filters.player ))==null?'':__t)+
'" placeholder="320 / Maksim" style="'+
((__t=( inputStyle ))==null?'':__t)+
' min-width: 200px;">\n                            </div>\n                            <div>\n                                <label style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Тип боя</label>\n                                <select name="type" style="'+
((__t=( inputStyle ))==null?'':__t)+
'">\n                                    <option value="">любой</option>\n                                    ';
 for (const key of Object.keys(data.typeLabels)) { 
__p+='\n                                        <option value="'+
((__t=( key ))==null?'':__t)+
'" '+
((__t=( data.filters.type === key ? 'selected' : '' ))==null?'':__t)+
'>'+
((__t=( data.typeLabels[key] ))==null?'':__t)+
'</option>\n                                    ';
 } 
__p+='\n                                </select>\n                            </div>\n                            <div>\n                                <label style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Чем закончился</label>\n                                <select name="reason" style="'+
((__t=( inputStyle ))==null?'':__t)+
'">\n                                    <option value="">любой</option>\n                                    ';
 for (const key of Object.keys(data.reasonLabels)) { 
__p+='\n                                        <option value="'+
((__t=( key ))==null?'':__t)+
'" '+
((__t=( data.filters.reason === key ? 'selected' : '' ))==null?'':__t)+
'>'+
((__t=( data.reasonLabels[key] ))==null?'':__t)+
'</option>\n                                    ';
 } 
__p+='\n                                </select>\n                            </div>\n                            <div>\n                                <label style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Статус</label>\n                                <select name="status" style="'+
((__t=( inputStyle ))==null?'':__t)+
'">\n                                    <option value="">любой</option>\n                                    ';
 for (const key of Object.keys(data.statusLabels)) { 
__p+='\n                                        <option value="'+
((__t=( key ))==null?'':__t)+
'" '+
((__t=( data.filters.status === key ? 'selected' : '' ))==null?'':__t)+
'>'+
((__t=( data.statusLabels[key] ))==null?'':__t)+
'</option>\n                                    ';
 } 
__p+='\n                                </select>\n                            </div>\n                            <div>\n                                <label style="'+
((__t=( labelStyle ))==null?'':__t)+
'">С даты</label>\n                                <input type="date" name="date_from" value="'+
((__t=( data.filters.date_from ))==null?'':__t)+
'" style="'+
((__t=( inputStyle ))==null?'':__t)+
'">\n                            </div>\n                            <div>\n                                <label style="'+
((__t=( labelStyle ))==null?'':__t)+
'">По дату</label>\n                                <input type="date" name="date_to" value="'+
((__t=( data.filters.date_to ))==null?'':__t)+
'" style="'+
((__t=( inputStyle ))==null?'':__t)+
'">\n                            </div>\n                            <button class="btn btn-primary" type="submit">Показать</button>\n                            <a class="btn" href="/battles">Сбросить</a>\n                        </div>\n                    </form>\n\n                    <div class="table-container">\n                        <table>\n                            <thead>\n                                <tr>\n                                    <th>Начало</th>\n                                    <th>Бой</th>\n                                    <th>Игрок</th>\n                                    <th>Противник</th>\n                                    <th>Итог</th>\n                                    <th>Ставка / награда</th>\n                                    <th>Раунды</th>\n                                    <th>Связь</th>\n                                    <th>Нода</th>\n                                    <th></th>\n                                </tr>\n                            </thead>\n                            <tbody>\n                                ';
 if (data.rows.length === 0) { 
__p+='\n                                    <tr>\n                                        <td colspan="10" style="text-align: center; color: var(--text-secondary); padding: 2rem;">\n                                            Боёв не найдено. История наполняется боями PvP и боями, которые замирали из-за обрыва связи: обычные бои с мобами в неё не пишутся.\n                                        </td>\n                                    </tr>\n                                ';
 } 
__p+='\n\n                                ';
 for (let index = 0; index < data.rows.length; index++) {
                                    const row = data.rows[index]; 
__p+='\n                                    <tr '+
((__t=( e.click('goToBattle', row) ))==null?'':__t)+
' style="cursor: pointer;">\n                                        <td>\n                                            <div>'+
((__t=( row.started ))==null?'':__t)+
'</div>\n                                            ';
 if (row.duration) { 
__p+='\n                                                <div style="font-size: 0.75rem; color: var(--text-secondary);">длился '+
((__t=( row.duration ))==null?'':__t)+
'</div>\n                                            ';
 } 
__p+='\n                                        </td>\n                                        <td>\n                                            <div><strong>'+
((__t=( row.type ))==null?'':__t)+
'</strong></div>\n                                            <div style="font-size: 0.75rem;">\n                                                ';
 if (row.statusKey === 'active') { 
__p+='\n                                                    <span style="color: var(--info);">● '+
((__t=( row.status ))==null?'':__t)+
'</span>\n                                                ';
 } else if (row.statusKey === 'interrupted') { 
__p+='\n                                                    <span style="color: var(--danger);">● '+
((__t=( row.status ))==null?'':__t)+
'</span>\n                                                ';
 } else { 
__p+='\n                                                    <span style="color: var(--text-secondary);">● '+
((__t=( row.status ))==null?'':__t)+
'</span>\n                                                ';
 } 
__p+='\n                                                · '+
((__t=( row.reason ))==null?'':__t)+
'\n                                            </div>\n                                        </td>\n                                        <td>\n                                            <div><strong style="color: var(--gold-primary);">'+
((__t=( row.p1Name ))==null?'':__t)+
'</strong></div>\n                                            <div style="font-size: 0.75rem; color: var(--text-secondary);">#'+
((__t=( row.p1Id ))==null?'':__t)+
'';
 if (row.p1Tgid) { 
__p+=' · tg '+
((__t=( row.p1Tgid ))==null?'':__t)+
'';
 } 
__p+='</div>\n                                        </td>\n                                        <td>\n                                            <div>'+
((__t=( row.p2Name ))==null?'':__t)+
'</div>\n                                            ';
 if (row.p2Id) { 
__p+='\n                                                <div style="font-size: 0.75rem; color: var(--text-secondary);">#'+
((__t=( row.p2Id ))==null?'':__t)+
'';
 if (row.p2Tgid) { 
__p+=' · tg '+
((__t=( row.p2Tgid ))==null?'':__t)+
'';
 } 
__p+='</div>\n                                            ';
 } else if (row.mobId) { 
__p+='\n                                                <div style="font-size: 0.75rem; color: var(--text-secondary);">моб #'+
((__t=( row.mobId ))==null?'':__t)+
'</div>\n                                            ';
 } 
__p+='\n                                        </td>\n                                        <td>\n                                            <div>🏆 <strong>'+
((__t=( row.winner ))==null?'':__t)+
'</strong></div>\n                                            <div style="font-size: 0.75rem; color: var(--text-secondary);">HP '+
((__t=( row.hp1 ))==null?'':__t)+
' / '+
((__t=( row.hp2 ))==null?'':__t)+
'</div>\n                                        </td>\n                                        <td>\n                                            <div>Ставка: '+
((__t=( row.bet ))==null?'':__t)+
'</div>\n                                            <div style="font-size: 0.75rem; color: var(--text-secondary);">Награда: '+
((__t=( row.reward ))==null?'':__t)+
'</div>\n                                        </td>\n                                        <td>'+
((__t=( row.rounds ))==null?'':__t)+
'</td>\n                                        <td>\n                                            ';
 if (row.disconnects > 0 || row.aiMoves > 0) { 
__p+='\n                                                <div style="color: var(--warning);">обрывов: '+
((__t=( row.disconnects ))==null?'':__t)+
'</div>\n                                                <div style="font-size: 0.75rem; color: var(--text-secondary);">\n                                                    вернулся: '+
((__t=( row.reconnects ))==null?'':__t)+
' · ходов бота: '+
((__t=( row.aiMoves ))==null?'':__t)+
'\n                                                </div>\n                                            ';
 } else { 
__p+='\n                                                <span style="color: var(--text-secondary);">—</span>\n                                            ';
 } 
__p+='\n                                        </td>\n                                        <td>\n                                            <div style="font-family: monospace; font-size: 0.8rem;">'+
((__t=( row.node ))==null?'':__t)+
'</div>\n                                            <div style="font-size: 0.75rem; color: var(--text-secondary);">итог показан: '+
((__t=( row.delivered ))==null?'':__t)+
'</div>\n                                        </td>\n                                        <td style="white-space: nowrap;"><span style="color: var(--info);">Открыть →</span></td>\n                                    </tr>\n                                ';
 } 
__p+='\n                            </tbody>\n                        </table>\n                    </div>\n\n                    ';
 if (data.pages > 1) { 
__p+='\n                        <div style="display: flex; justify-content: space-between; align-items: center; margin-top: 1rem;">\n                            <div style="color: var(--text-secondary); font-size: 0.9rem;">Страница '+
((__t=( data.page ))==null?'':__t)+
' из '+
((__t=( data.pages ))==null?'':__t)+
'</div>\n                            <div style="display: flex; gap: 0.5rem;">\n                                ';
 if (data.page > 1) { 
__p+='\n                                    <a class="btn" href="'+
((__t=( data.prevUrl ))==null?'':__t)+
'">← Назад</a>\n                                ';
 } 
__p+='\n                                ';
 if (data.page < data.pages) { 
__p+='\n                                    <a class="btn btn-primary" href="'+
((__t=( data.nextUrl ))==null?'':__t)+
'">Вперёд →</a>\n                                ';
 } 
__p+='\n                            </div>\n                        </div>\n                    ';
 } 
__p+='\n                </div>\n            </div>\n        </div>\n\n    </div>\n';
}
return __p;
}
window.renderBlocks['pages-battles.view'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='    <div class="app">\n        '+
((__t=( f.renderBlock('menu') ))==null?'':__t)+
'\n\n        <div class="screen" id="battle-view">\n            <div class="main-container">\n                <header class="header">\n                    <div class="breadcrumbs">\n                        <span class="breadcrumb-item">🔮 <a href="/" style="cursor: pointer; color: inherit; text-decoration: none;">Главная</a></span>\n                        <span class="breadcrumb-separator">/</span>\n                        <span class="breadcrumb-item">⚔️ <a href="/battles" style="cursor: pointer; color: inherit; text-decoration: none;">История боёв</a></span>\n                        <span class="breadcrumb-separator">/</span>\n                        <span class="breadcrumb-item active">Бой</span>\n                    </div>\n                </header>\n\n                <div class="content">\n                    ';
 if (data.notFound) { 
__p+='\n                        <div style="padding: 1.5rem; border-radius: 8px; background: rgba(138, 58, 58, 0.25); border: 1px solid rgba(197, 122, 122, 0.5); margin-bottom: 1.5rem;">\n                            <strong>Бой '+
((__t=( data.id ))==null?'':__t)+
' не найден.</strong>\n                            <div style="margin-top: 0.5rem; color: var(--text-secondary);">Возможно, запись истории уже почищена.</div>\n                        </div>\n                        <a class="btn" href="/battles">← Ко всем боям</a>\n                    ';
 } else { 
__p+='\n                        ';

                        const row = data.row;
                        const cardStyle = 'background: rgba(0,0,0,0.25); border: 1px solid rgba(255,255,255,0.08); border-radius: 8px; padding: 1rem 1.25rem;';
                        const labelStyle = 'color: var(--text-secondary); font-size: 0.8rem;';
                        const valueStyle = 'font-size: 1rem;';
                        
__p+='\n                        <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; flex-wrap: wrap; gap: 1rem;">\n                            <div>\n                                <h2 style="margin-bottom: 0.35rem;">'+
((__t=( row.type ))==null?'':__t)+
'</h2>\n                                <div style="color: var(--text-secondary); font-family: monospace; font-size: 0.85rem;">'+
((__t=( row.id ))==null?'':__t)+
'</div>\n                            </div>\n                            <div style="display: flex; gap: 0.75rem; align-items: center;">\n                                ';
 if (row.statusKey === 'active') { 
__p+='\n                                    <span class="btn btn-small" style="color: var(--info);">● '+
((__t=( row.status ))==null?'':__t)+
'</span>\n                                ';
 } else if (row.statusKey === 'interrupted') { 
__p+='\n                                    <span class="btn btn-small" style="color: var(--danger);">● '+
((__t=( row.status ))==null?'':__t)+
'</span>\n                                ';
 } else { 
__p+='\n                                    <span class="btn btn-small">'+
((__t=( row.status ))==null?'':__t)+
'</span>\n                                ';
 } 
__p+='\n                                <a class="btn" href="/battles">← Ко всем боям</a>\n                            </div>\n                        </div>\n\n                        <!-- УЧАСТНИКИ -->\n                        <div class="form-section">\n                            <div class="form-section-title">Участники</div>\n                            <div style="display: flex; gap: 1rem; flex-wrap: wrap;">\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
' flex: 1; min-width: 260px;">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Первый игрок</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
' margin: 0.25rem 0;">\n                                        <strong onclick="void 0" style="color: var(--gold-primary);">'+
((__t=( row.p1Name ))==null?'':__t)+
'</strong>\n                                        ';
 if (row.p1Id) { 
__p+='\n                                            · <a href="/players/'+
((__t=( row.p1Id ))==null?'':__t)+
'" style="color: var(--info); text-decoration: none;">карточка игрока →</a>\n                                        ';
 } 
__p+='\n                                    </div>\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">id #'+
((__t=( row.p1Id ))==null?'':__t)+
' ';
 if (row.p1Tgid) { 
__p+='· tg '+
((__t=( row.p1Tgid ))==null?'':__t)+
'';
 } 
__p+='</div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
' flex: 1; min-width: 260px;">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Второй участник</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
' margin: 0.25rem 0;">\n                                        ';
 if (row.p2Id) { 
__p+='\n                                            <strong>'+
((__t=( row.p2Name ))==null?'':__t)+
'</strong>\n                                            · <a href="/players/'+
((__t=( row.p2Id ))==null?'':__t)+
'" style="color: var(--info); text-decoration: none;">карточка игрока →</a>\n                                        ';
 } else { 
__p+='\n                                            <strong>'+
((__t=( row.p2Name ))==null?'':__t)+
'</strong>\n                                        ';
 } 
__p+='\n                                    </div>\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">\n                                        ';
 if (row.p2Id) { 
__p+='id #'+
((__t=( row.p2Id ))==null?'':__t)+
'';
 if (row.p2Tgid) { 
__p+=' · tg '+
((__t=( row.p2Tgid ))==null?'':__t)+
'';
 } 
__p+='';
 } else { 
__p+='моб #'+
((__t=( row.mobId ))==null?'':__t)+
'';
 } 
__p+='\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n\n                        <!-- ИТОГ -->\n                        <div class="form-section">\n                            <div class="form-section-title">Итог боя</div>\n                            <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 0.75rem;">\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Победитель</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'">🏆 <strong>'+
((__t=( row.winner ))==null?'':__t)+
'</strong></div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Проигравший</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'">'+
((__t=( row.looser ))==null?'':__t)+
'</div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Чем закончился</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'">'+
((__t=( row.reason ))==null?'':__t)+
'</div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Остаток HP</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'">'+
((__t=( row.hp1 ))==null?'':__t)+
' / '+
((__t=( row.hp2 ))==null?'':__t)+
'</div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Раундов</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'">'+
((__t=( row.rounds ))==null?'':__t)+
'</div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Длительность</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'">'+
((__t=( row.duration || '—' ))==null?'':__t)+
'</div>\n                                </div>\n                            </div>\n                        </div>\n\n                        <!-- ГДЕ И КОГДА -->\n                        <div class="form-section">\n                            <div class="form-section-title">Где и когда</div>\n                            <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 0.75rem;">\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Нода</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
' font-family: monospace;">'+
((__t=( row.node ))==null?'':__t)+
'</div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Локация</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'">'+
((__t=( row.location ))==null?'':__t)+
'</div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Начало</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'">'+
((__t=( row.startedFull ))==null?'':__t)+
'</div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Окончание</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'">'+
((__t=( row.finished ))==null?'':__t)+
'</div>\n                                </div>\n                            </div>\n                        </div>\n\n                        <!-- СВЯЗЬ -->\n                        <div class="form-section">\n                            <div class="form-section-title">Связь и автопилот</div>\n                            <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 0.75rem;">\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Обрывов связи</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'">'+
((__t=( row.disconnects ))==null?'':__t)+
'</div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Возвратов в бой</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'">'+
((__t=( row.reconnects ))==null?'':__t)+
'</div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Ходов бота</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'">'+
((__t=( row.aiMoves ))==null?'':__t)+
'</div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Итог показан</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'">'+
((__t=( row.delivered ))==null?'':__t)+
'</div>\n                                </div>\n                            </div>\n                        </div>\n\n                        <!-- ДЕНЬГИ -->\n                        <div class="form-section">\n                            <div class="form-section-title">Ставка и награда</div>\n                            <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 0.75rem;">\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Ставка</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
' margin-bottom: 0.5rem;">'+
((__t=( row.bet ))==null?'':__t)+
'</div>\n                                    <pre style="margin: 0; padding: 0.75rem; background: rgba(0,0,0,0.45); border-radius: 6px; overflow: auto; font-size: 0.8rem;">'+
((__t=( data.betJson || '—' ))==null?'':__t)+
'</pre>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Награда победителю</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
' margin-bottom: 0.5rem;">'+
((__t=( row.reward ))==null?'':__t)+
'</div>\n                                    <pre style="margin: 0; padding: 0.75rem; background: rgba(0,0,0,0.45); border-radius: 6px; overflow: auto; font-size: 0.8rem;">'+
((__t=( data.rewardJson || '—' ))==null?'':__t)+
'</pre>\n                                </div>\n                            </div>\n                        </div>\n\n                        <div class="form-section">\n                            <div class="form-section-title">Кому показали результат</div>\n                            <pre style="margin: 0; padding: 0.75rem; background: rgba(0,0,0,0.45); border-radius: 6px; overflow: auto; font-size: 0.8rem;">'+
((__t=( data.deliveredJson || '[]' ))==null?'':__t)+
'</pre>\n                        </div>\n                    ';
 } 
__p+='\n                </div>\n            </div>\n        </div>\n    </div>\n';
}
return __p;
}
window.renderBlocks['pages-index'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='    <div class="app">\n  \n\n        '+
((__t=( f.renderBlock('menu') ))==null?'':__t)+
'\n\n        <!-- ГЛАВНАЯ АДМИНКА -->\n        <div class="screen" id="welcome">\n            <div class="main-container">\n                <header class="header">\n                    <div class="breadcrumbs">\n                        <span class="breadcrumb-item active">🔮 Главная</span>\n                    </div>\n                </header>\n\n                <div class="content">\n                    <h1>Добро пожаловать в Административные Врата</h1>\n\n                    <div class="welcome-section">\n                        <div class="welcome-box">\n                            <div class="welcome-icon">🏰</div>\n                            <h2 style="margin: 0 0 1rem 0;">Runic Battle</h2>\n                            <p class="welcome-text">\n                                Вы вошли в магическую административную панель управления игрой Runic Battle. \n                                Отсюда вы сможете управлять мобами, рунами, эффектами и всеми аспектами игрового мира.\n                            </p>\n                            <p style="color: var(--text-secondary); font-size: 0.95rem; margin: 0;">\n                                Используйте боковое меню для навигации по разделам администрирования.\n                            </p>\n                        </div>\n                    </div>\n\n                    <div style="margin-top: 3rem; display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1.5rem;">\n                        <div class="card">\n                            <div class="card-title">👹 Мобы</div>\n                            <p style="margin: 0;">Управление врагами и их параметрами</p>\n                        </div>\n                        <div class="card">\n                            <div class="card-title">✨ Руны</div>\n                            <p style="margin: 0;">Редактирование магических рун</p>\n                        </div>\n                        <div class="card">\n                            <div class="card-title">🎯 Эффекты</div>\n                            <p style="margin: 0;">Настройка игровых эффектов</p>\n                        </div>\n                        <div class="card">\n                            <div class="card-title">💰 Награды</div>\n                            <p style="margin: 0;">Управление системой вознаграждений</p>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n\n\n\n\n    </div>';
}
return __p;
}
window.renderBlocks['pages-items.edit'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='    <div class="app">\n\n        '+
((__t=( f.renderBlock('menu') ))==null?'':__t)+
'\n\n\n        <!-- РЕДАКТОР ПРЕДМЕТА -->\n        <div class="screen" id="item-edit">\n            <div class="main-container">\n                <header class="header">\n                    <div class="breadcrumbs">\n                        <span class="breadcrumb-item">🔮 <a href="/" style="cursor: pointer; color: inherit; text-decoration: none;">Главная</a></span>\n                        <span class="breadcrumb-separator">/</span>\n                        <span class="breadcrumb-item">🎒 <a  href="/items" style="cursor: pointer; color: inherit; text-decoration: none;">Предметы</a></span>\n                        <span class="breadcrumb-separator">/</span>\n                        <span class="breadcrumb-item active">⚗️ Редактирование</span>\n                    </div>\n                </header>\n\n                ';

                    // Что настраиваем: обычный предмет, лутбокс или кристалл кузницы.
                    // От этого зависит, какие разделы формы вообще нужны — лишние
                    // поля только путают (см. ниже).
                    const crystal = data.item.upgrade && data.item.upgrade.kind ? data.item.upgrade : null;
                    const crystalKind = crystal ? crystal.kind : '';
                    const isCrystal = Boolean(crystalKind);
                    const isLootbox = data.item.type === 'lootbox';
                    const crystalEffects = crystal && Array.isArray(crystal.effects) ? crystal.effects : [];
                    const hint = 'font-size: 0.78rem; color: #999; margin: 0.35rem 0 0 0; line-height: 1.45;';
                
__p+='\n\n                <div class="content">\n                    ';
 /* Роль предмета одной строкой — чтобы всегда было видно, кристалл это
                          или нет и какой именно, независимо от остальных полей. */ 
__p+='\n                    ';
 // Названия видов кристалла в одном месте: их показывают и строка
                       // «Роль», и заголовок раздела «Параметры» ниже.
                       const crystalTitles = {
                           refine: 'Кристалл заточки',
                           effect: 'Кристалл улучшения',
                           reset: 'Кристалл сброса'
                       };
                       const crystalTitle = crystalTitles[crystalKind] || 'Кристалл кузницы';
                       const roleName = isCrystal ? crystalTitle : (isLootbox ? 'Лутбокс' : 'Обычный предмет');
                       const roleColor = isCrystal ? '#c4b5fd' : (isLootbox ? '#fde68a' : '#9ca3af');
                    
__p+='\n\n                    <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 2rem;">\n                        <div>\n                            <h2 style="margin: 0;">Редактор Предмета: '+
((__t=( data.item.name ))==null?'':__t)+
'</h2>\n                            <p style="margin: 0.4rem 0 0 0; font-size: 0.9rem; color: '+
((__t=( roleColor ))==null?'':__t)+
';">\n                                Роль: <b>'+
((__t=( roleName ))==null?'':__t)+
'</b>'+
((__t=( isCrystal ? ' (upgrade.kind: ' + crystalKind + ')' : '' ))==null?'':__t)+
'\n                            </p>\n                        </div>\n                        <a class="btn" href="/items">← Назад</a>\n                    </div>\n\n                    <!-- ТИП И РОЛЬ ПРЕДМЕТА -->\n                    <div class="form-section">\n                        <div class="form-section-title">Тип и роль предмета</div>\n\n                        <p style="'+
((__t=( hint ))==null?'':__t)+
' margin-bottom: 1.2rem;">\n                            Два независимых выбора. <b>Тип</b> — как предмет ведёт себя у игрока: обычный предмет\n                            (надеть в слот или применить из сумки) либо лутбокс (открыть и получить награды).\n                            <b>Роль в кузнице</b> — обычный это предмет или кристалл, и если кристалл, то какой:\n                            заточки (повышает заточку экипировки), улучшения (добавляет экипировке эффекты) или\n                            сброса (стирает добавленные кристаллами эффекты и возвращает очки улучшения).\n                            Кристалл — обычный предмет по типу, просто с заданной ролью: слотов у него нет, он не\n                            применяется из сумки, а тратится в кузнице.\n                        </p>\n\n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">Тип предмета (item.type)</label>\n                                <select class="form-select" '+
((__t=( e.on('change', 'changeType')))==null?'':__t)+
'>\n                                    <option value="item" '+
((__t=( data.item.type === 'item' ? 'selected' : '' ))==null?'':__t)+
'>Обычный предмет</option>\n                                    <option value="lootbox" '+
((__t=( isLootbox ? 'selected' : '' ))==null?'':__t)+
'>Лутбокс</option>\n                                </select>\n                                <p style="'+
((__t=( hint ))==null?'':__t)+
'">\n                                    «Обычный предмет» — экипировка (надевается в слоты) или расходник (применяется из сумки).\n                                    «Лутбокс» — открывается и выдаёт награды.\n                                </p>\n                            </div>\n                            <div class="form-col">\n                                <label class="form-label">Роль в кузнице (upgrade.kind)</label>\n                                <select class="form-select" '+
((__t=( e.on('change', 'changeCrystalKind') ))==null?'':__t)+
'>\n                                    <option value="" '+
((__t=( crystalKind === '' ? 'selected' : '' ))==null?'':__t)+
'>Не кристалл (обычный предмет)</option>\n                                    <option value="refine" '+
((__t=( crystalKind === 'refine' ? 'selected' : '' ))==null?'':__t)+
'>Кристалл заточки (refine)</option>\n                                    <option value="effect" '+
((__t=( crystalKind === 'effect' ? 'selected' : '' ))==null?'':__t)+
'>Кристалл улучшения (effect)</option>\n                                    <option value="reset" '+
((__t=( crystalKind === 'reset' ? 'selected' : '' ))==null?'':__t)+
'>Кристалл сброса (reset)</option>\n                                </select>\n                                <p style="'+
((__t=( hint ))==null?'':__t)+
'">\n                                    Значение сохраняется в поле <b>upgrade</b>. Выбор «кристалл» открывает ниже раздел\n                                    «Параметры кристалла» — без него предмет остаётся обычным, даже если слотов у него нет.\n                                    У кристалла сброса настроек нет: в базе он лежит ровно как <b>{ "kind": "reset" }</b>.\n                                </p>\n                            </div>\n                        </div>\n\n                        <p style="font-size: 0.85rem; color: '+
((__t=( roleColor ))==null?'':__t)+
'; margin: 1rem 0 0 0;">\n                            Сейчас: <b>'+
((__t=( roleName ))==null?'':__t)+
'</b>.\n                            ';
 if (isCrystal) { 
__p+='\n                                Параметры кристалла — в разделе «'+
((__t=( crystalTitle ))==null?'':__t)+
': параметры» ниже.\n                            ';
 } else { 
__p+='\n                                Чтобы сделать из предмета кристалл, выберите его вид в правом списке.\n                            ';
 } 
__p+='\n                        </p>\n                    </div>\n\n                    <!-- БАЗОВЫЕ ПОЛЯ ПРЕДМЕТА -->\n                    <div class="form-section">\n                        <div class="form-section-title">Основная Информация</div>\n\n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">Название Предмета</label>\n                                <input '+
((__t=( e.on('input','onValueInput', 'name') ))==null?'':__t)+
' type="text" class="form-input" value="'+
((__t=( data.item.name ))==null?'':__t)+
'">\n                            </div>\n                            <div class="form-col">\n                                <label class="form-label">ID Предмета</label>\n                                <input '+
((__t=( data.created ? 'disabled' : ''))==null?'':__t)+
' '+
((__t=( e.on('input','onValueInput', 'id') ))==null?'':__t)+
' type="text" class="form-input" value="'+
((__t=( data.item.id ))==null?'':__t)+
'">\n                                <p style="'+
((__t=( hint ))==null?'':__t)+
'">По ID предмет ищется в коде и в базе. Менять у существующего предмета нельзя — он уже выдан игрокам.</p>\n                            </div>\n                        </div>\n\n                        <div class="form-row full">\n                            <div class="form-col">\n                                <label class="form-label">Описание</label>\n                                <textarea '+
((__t=( e.on('input','onValueInput', 'description') ))==null?'':__t)+
' class="form-textarea">'+
((__t=( data.item.description ))==null?'':__t)+
'</textarea>\n                                <p style="'+
((__t=( hint ))==null?'':__t)+
'">Показывается игроку в карточке предмета.</p>\n                            </div>\n                        </div>\n\n                        <div class="form-row full">\n                            <div class="form-col">\n                                <label class="form-label">Стоимость</label>\n                                <input '+
((__t=( e.on('input','onValueInput', 'price') ))==null?'':__t)+
' type="number" class="form-input" value="'+
((__t=( data.item.price))==null?'':__t)+
'" min="0">\n                                <p style="'+
((__t=( hint ))==null?'':__t)+
'">\n                                    Цена в золоте. По ней считается продажа предмета игроком (75% от цены), поэтому цена из магазина\n                                    (раздел «Магазин») приоритетнее: она и защищает от продажи дешевле покупки.\n                                </p>\n                            </div>\n                        </div>\n\n                    </div>\n\n                    <!-- ПАРАМЕТРЫ ПРЕДМЕТА -->\n                    <div class="form-section">\n                        <div class="form-section-title">Параметры</div>\n\n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">Путь к изображению</label>\n                                '+
((__t=( f.renderBlock('imageLoader', {
                                    key:'img',
                                    local_file: data.img_local_file,
                                    file: data.img_file,
                                    style:'height:200px',
                                    pref:'image',
                                    image: data.item.img
                                }) ))==null?'':__t)+
'\n                            </div>\n                            <div class="form-col">\n                                <label class="form-label">Стихия (опционально)</label>\n                                <select class="form-select"  '+
((__t=( e.on('change', 'changeElement')))==null?'':__t)+
'>\n                                    ';
 for (let index = 0; index < data.elements.length; index++) {
                                        const element =  data.elements[index]; 
__p+='\n                                        <option value="'+
((__t=( element.value ))==null?'':__t)+
'" '+
((__t=( data.item.element === element.value ? 'selected' : '' ))==null?'':__t)+
'>'+
((__t=( element.name ))==null?'':__t)+
'</option>\n                                    ';
 } 
__p+='\n                                </select>\n                                <p style="'+
((__t=( hint ))==null?'':__t)+
'">Определяет цвет рамки и стихийные бонусы предмета.</p>\n                            </div>\n                        </div>\n\n                        ';
 if (!isCrystal && !isLootbox) { 
__p+='\n                            <div class="form-row">\n                                <div class="form-col" style="display: flex; flex-direction: column; justify-content: flex-end;">\n                                    <div class="checkbox-wrapper">\n                                        <input '+
((__t=( e.on('change','onValueChange', 'disposable') ))==null?'':__t)+
'  '+
((__t=( data.item.disposable ? 'checked' : ''))==null?'':__t)+
' type="checkbox" class="checkbox">\n                                        <label class="checkbox-label">Не складывается в стопку (disposable)</label>\n                                    </div>\n                                    <p style="'+
((__t=( hint ))==null?'':__t)+
'">\n                                        Каждый экземпляр занимает отдельную ячейку инвентаря (у остальных предметов\n                                        показывается количество). На использование в бою не влияет: применённый предмет\n                                        расходуется в любом случае, частоту ограничивает «Откат».\n                                    </p>\n                                </div>\n                                <div class="form-col" style="display: flex; flex-direction: column; justify-content: flex-end;">\n                                    <div class="checkbox-wrapper">\n                                        <input '+
((__t=( e.on('change','onValueChange', 'can_use') ))==null?'':__t)+
' '+
((__t=( data.item.can_use ? 'checked' : ''))==null?'':__t)+
' type="checkbox" class="checkbox">\n                                        <label class="checkbox-label">Можно использовать (can_use)</label>\n                                    </div>\n                                    <p style="'+
((__t=( hint ))==null?'':__t)+
'">\n                                        Разрешает применять предмет из сумки в бою. Для экипировки оставьте выключенным:\n                                        она надевается, а не применяется.\n                                    </p>\n                                </div>\n                            </div>\n\n                            <div class="form-row">\n                                <div class="form-col">\n                                    <label class="form-label">Откат, ходов (reuse_turns)</label>\n                                    <input '+
((__t=( e.on('input','onValueInput', 'reuse_turns') ))==null?'':__t)+
' type="number" class="form-input" value="'+
((__t=( data.item.reuse_turns || 0 ))==null?'':__t)+
'" min="0">\n                                    <p style="'+
((__t=( hint ))==null?'':__t)+
'">\n                                        Работает для предметов с «Можно использовать»: пока откат не истёк, этот же предмет\n                                        нельзя применить повторно в бою. 0 — без отката. Счётчик уменьшается в начале своего хода,\n                                        как у рун.\n                                    </p>\n                                </div>\n                            </div>\n                        ';
 } else { 
__p+='\n                            <p style="'+
((__t=( hint ))==null?'':__t)+
'">\n                                ';
 if (isCrystal) { 
__p+='\n                                    «Не складывается в стопку», «Можно использовать» и «Откат» кристаллу не нужны: он не надевается\n                                    и не применяется из сумки — им пользуются только в кузнице, и он всегда расходуется целиком.\n                                ';
 } else { 
__p+='\n                                    «Не складывается в стопку», «Можно использовать» и «Откат» лутбоксу не нужны: он открывается,\n                                    а не применяется в бою.\n                                ';
 } 
__p+='\n                            </p>\n                        ';
 } 
__p+='\n                    </div>\n\n                    ';
 if (isCrystal) { 
__p+='\n                        <!-- ПАРАМЕТРЫ КРИСТАЛЛА КУЗНИЦЫ -->\n                        <div class="form-section">\n                            <div class="form-section-title">'+
((__t=( crystalTitle ))==null?'':__t)+
': параметры</div>\n\n                            ';
 if (crystalKind === 'refine') { 
__p+='\n                                <p style="'+
((__t=( hint ))==null?'':__t)+
' margin-bottom: 1.2rem;">\n                                    Кристалл повышает уровень заточки экипировки на +1 при успехе. Базовый шанс заточки:\n                                    80% на +1 и дальше ×0.6 за каждый уровень (на +5 это ~10%), максимум заточки — +10.\n                                    При провале заточка сбрасывается в 0, если не включён «Кристалл-хранитель».\n                                </p>\n\n                                <div class="form-row">\n                                    <div class="form-col">\n                                        <label class="form-label">Множитель шанса заточки (chance_multiplier)</label>\n                                        <input '+
((__t=( e.on('input','onValueInput', 'upgrade.chance_multiplier') ))==null?'':__t)+
' type="number" step="0.1" min="0.1" class="form-input" value="'+
((__t=( crystal.chance_multiplier || 1 ))==null?'':__t)+
'">\n                                        <p style="'+
((__t=( hint ))==null?'':__t)+
'">\n                                            1 — как у обычного «Кристалла заточки»; 1.6 — «Большой кристалл заточки»;\n                                            2 — шанс вдвое выше базового.\n                                        </p>\n                                    </div>\n                                    <div class="form-col">\n                                        <div class="checkbox-wrapper">\n                                            <input '+
((__t=( e.on('change','onValueChange', 'upgrade.safe') ))==null?'':__t)+
' '+
((__t=( crystal.safe ? 'checked' : '' ))==null?'':__t)+
' type="checkbox" class="checkbox">\n                                            <label class="checkbox-label">Кристалл-хранитель (safe)</label>\n                                        </div>\n                                        <div class="checkbox-wrapper">\n                                            <input '+
((__t=( e.on('change','onValueChange', 'upgrade.guaranteed') ))==null?'':__t)+
' '+
((__t=( crystal.guaranteed ? 'checked' : '' ))==null?'':__t)+
' type="checkbox" class="checkbox">\n                                            <label class="checkbox-label">Гарантированный успех (guaranteed)</label>\n                                        </div>\n                                        <p style="'+
((__t=( hint ))==null?'':__t)+
'">\n                                            safe — при провале заточка остаётся на месте («Кристалл-хранитель»).\n                                            guaranteed — успех 100% («Совершенный кристалл»). Шанс всё равно тратит кристалл.\n                                        </p>\n                                    </div>\n                                </div>\n                            ';
 } else if (crystalKind === 'reset') { 
__p+='\n                                <p style="'+
((__t=( hint ))==null?'':__t)+
' margin-bottom: 1.2rem;">\n                                    Самый простой вид: настроек у него нет, в базе он хранится ровно как\n                                    <b>{ "kind": "reset" }</b>, поэтому в форме ничего заполнять не нужно.\n                                </p>\n\n                                <p style="color: var(--text-secondary); margin-bottom: 1.2rem;">\n                                    Кристалл сброса стирает у экипировки <b>эффекты, добавленные кристаллами улучшения</b>.\n                                    Заточка, ёмкость предмета и «усиление с уровня моба» (from_level) остаются — это сила\n                                    самого предмета, а не улучшения игрока. Вместе с эффектами обнуляется счётчик применённых\n                                    улучшений, то есть <b>очки улучшения снова становятся доступны</b> и кристаллы улучшения\n                                    можно применить заново. Если сбрасывать нечего, кристалл не тратится — игра отвечает\n                                    ошибкой «nothing_to_reset».\n                                </p>\n\n                                <p style="color: var(--text-secondary); margin-bottom: 1.2rem;">\n                                    Очков улучшения у предмета ограниченное количество, и тратит их только удачное улучшение\n                                    (провал очко не забирает, но кристалл сгорает): у обычного предмета (покупка) — 0 или 1\n                                    с шансом 50%, у трофея (награда за бой, лутбокс, дроп с моба) — 2, 3 или 4\n                                    (шансы 50/30/20). Сброс — единственный способ вернуть потраченные очки.\n                                </p>\n                            ';
 } else { 
__p+='\n                                <p style="'+
((__t=( hint ))==null?'':__t)+
' margin-bottom: 1.2rem;">\n                                    Кристалл добавляет экипировке эффекты. При применении каждый эффект срабатывает со своим\n                                    шансом; если эффект не сработал ни один — кристалл сгорает впустую. Один и тот же тип в предмете\n                                    не дублируется: остаётся сильнейшее значение. Всего добавленных эффектов у предмета не больше трёх.\n                                </p>\n\n                                ';
 if (crystalEffects.length > 0) { 
__p+='\n                                    <div class="array-items">\n                                        ';
 for (let index = 0; index < crystalEffects.length; index++) {
                                            const crystalEffect = crystalEffects[index];
                                            const effectInfo = data.effects.find(e => e.value === crystalEffect.type);
                                        
__p+='\n                                            <div class="array-item">\n                                                <div class="array-item-header">\n                                                    <div>\n                                                        <div class="array-item-title">'+
((__t=( effectInfo ? effectInfo.name : crystalEffect.type ))==null?'':__t)+
'</div>\n                                                        <p style="font-size: 0.85rem; margin: 0.3rem 0 0 0;">Шанс: '+
((__t=( crystalEffect.chance == null ? 100 : crystalEffect.chance ))==null?'':__t)+
'%</p>\n                                                    </div>\n                                                    <div class="array-item-actions">\n                                                        <button '+
((__t=( e.click('removeCrystalEffect', index) ))==null?'':__t)+
' class="delete-btn">✕</button>\n                                                    </div>\n                                                </div>\n                                                <div class="array-item-content expanded">\n                                                    <div class="form-row">\n                                                        <div class="form-col">\n                                                            <label class="form-label">Тип эффекта</label>\n                                                            <select class="form-select" '+
((__t=( e.on('change', 'changeCrystalEffectType', index) ))==null?'':__t)+
'>\n                                                                ';
 for (let i = 0; i < data.effects.length; i++) {
                                                                    const effectOption = data.effects[i]; 
__p+='\n                                                                    <option value="'+
((__t=( effectOption.value ))==null?'':__t)+
'" '+
((__t=( crystalEffect.type === effectOption.value ? 'selected' : '' ))==null?'':__t)+
'>'+
((__t=( effectOption.name ))==null?'':__t)+
'</option>\n                                                                ';
 } 
__p+='\n                                                            </select>\n                                                        </div>\n                                                        <div class="form-col">\n                                                            <label class="form-label">Значение</label>\n                                                            <input '+
((__t=( e.on('input','onValueInput', 'upgrade.effects.' + index + '.value') ))==null?'':__t)+
' type="number" class="form-input" value="'+
((__t=( crystalEffect.value ))==null?'':__t)+
'">\n                                                            <p style="'+
((__t=( hint ))==null?'':__t)+
'">\n                                                                Число: «время хода» — миллисекунды, вампиризм и точность — проценты,\n                                                                щит — запас поглощения, жизнь и мана — единицы характеристик.\n                                                            </p>\n                                                        </div>\n                                                        <div class="form-col">\n                                                            <label class="form-label">Шанс, %</label>\n                                                            <input '+
((__t=( e.on('input','onValueInput', 'upgrade.effects.' + index + '.chance') ))==null?'':__t)+
' type="number" min="0" max="100" class="form-input" value="'+
((__t=( crystalEffect.chance == null ? 100 : crystalEffect.chance ))==null?'':__t)+
'">\n                                                            <p style="'+
((__t=( hint ))==null?'':__t)+
'">Вероятность, что именно этот эффект попадёт в предмет.</p>\n                                                        </div>\n                                                    </div>\n                                                </div>\n                                            </div>\n                                        ';
 } 
__p+='\n                                    </div>\n                                ';
 } else { 
__p+='\n                                    <p style="color: var(--text-secondary); margin-bottom: 1.5rem;">Пока нет эффектов. Без них кристалл улучшения ничего не даст — добавьте хотя бы один.</p>\n                                ';
 } 
__p+='\n\n                                <button '+
((__t=( e.click('addCrystalEffect') ))==null?'':__t)+
' class="btn btn-primary add-item-btn">+ Добавить эффект кристалла</button>\n                            ';
 } 
__p+='\n                        </div>\n                    ';
 } 
__p+='\n\n                    ';
 if (isLootbox) { 
__p+='\n                        <div class="form-section">\n                            <div class="form-section-title">Содержимое лутбокса</div>\n\n                            <p style="color: var(--text-secondary); margin-bottom: 1.5rem;">Добавьте награды, которые могут выпасть при использовании. Для каждой позиции задается свой шанс.</p>\n\n                            ';
 if (data.item.lootbox_rewards.length > 0){ 
__p+='\n                                <div class="array-items">\n                                     ';
 for (let index = 0; index < data.item.lootbox_rewards.length; index++) {
                                        const reward = data.item.lootbox_rewards[index]; 
__p+='\n                                        '+
((__t=( f.renderBlock('reward', {reward, rewards: data.rewards, runes: data.runes, items: data.items, index}) ))==null?'':__t)+
'\n                                    ';
 } 
__p+='\n                                </div>\n                            ';
 } else { 
__p+='\n                                <p style="color: var(--text-secondary); margin-bottom: 1.5rem;">Пока нет наград. Добавьте хотя бы одну запись.</p>\n                            ';
 } 
__p+='\n\n                            <button '+
((__t=( e.click('addLootboxReward') ))==null?'':__t)+
' class="btn btn-primary add-item-btn">+ Добавить награду</button>\n                        </div>\n                    ';
 } else if (!isCrystal) { 
__p+='\n                        <!-- СЛОТЫ РАЗМЕЩЕНИЯ -->\n                        <div class="form-section">\n                            <div class="form-section-title">Слоты Размещения</div>\n\n                            <p style="color: var(--text-secondary); margin-bottom: 1.5rem;">Выберите слоты инвентаря, где может находиться этот предмет</p>\n\n                            <div class="form-row full">\n                                <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 1rem;">\n\n                                     ';
 for (let index = 0; index < data.slots.length; index++) {
                                        const slot =  data.slots[index]; 
__p+='\n\n                                        <div class="checkbox-wrapper">\n                                            <input '+
((__t=( e.on('change','onPlaceChange', slot.value) ))==null?'':__t)+
' type="checkbox" class="checkbox" '+
((__t=( data.item.places.includes(slot.value) ? 'checked' : '' ))==null?'':__t)+
'>\n                                            <label class="checkbox-label">'+
((__t=(slot.name ))==null?'':__t)+
'</label>\n                                        </div>\n                                    ';
 } 
__p+='\n\n                                </div>\n                            </div>\n\n                            <p style="'+
((__t=( hint ))==null?'':__t)+
'">\n                                Предмет можно надеть только в отмеченные слоты. Если слоты не отмечены и «Можно использовать» выключено —\n                                предмет нельзя ни надеть, ни применить (так выглядят, например, кристаллы).\n                            </p>\n                        </div>\n\n                        <!-- ЭФФЕКТЫ ПРЕДМЕТА -->\n                        <div class="form-section">\n                            <div class="form-section-title">Эффекты</div>\n\n                            <p style="color: var(--text-secondary); margin-bottom: 1.5rem;">\n                                Собственные эффекты предмета. Постоянные (без «длительности») становятся характеристиками персонажа,\n                                остальные работают как боевые ауры. Добавленные кристаллами эффекты задаются отдельно — в разделе\n                                «Кристалл кузницы».\n                            </p>\n\n                            ';
 if (data.item.effects.length > 0){ 
__p+='\n                                <div class="array-items">\n                                     ';
 for (let index = 0; index < data.item.effects.length; index++) {
                                        const effect = data.item.effects[index]; 
__p+='\n                                        '+
((__t=( f.renderBlock('effect', {effect, effects: data.effects, type:'item', canUse: data.item.can_use, index}) ))==null?'':__t)+
'\n                                    ';
 } 
__p+='\n                                </div>\n                            ';
 } else { 
__p+='\n                                <p style="color: var(--text-secondary); margin-bottom: 1.5rem;">Добавьте эффекты для этого предмета</p>\n                            ';
 } 
__p+='\n\n                            <button  '+
((__t=( e.click('addEffect') ))==null?'':__t)+
'class="btn btn-primary add-item-btn">+ Добавить эффект</button>\n                        </div>\n                    ';
 } 
__p+='\n\n                    <!-- ДЕЙСТВИЯ -->\n                    ';
 if (data.notFound) { 
__p+='\n                        <div style="padding: 1rem 1.25rem; border-radius: 8px; margin-top: 2rem; background: rgba(138, 58, 58, 0.25); border: 1px solid rgba(197, 122, 122, 0.5);">\n                            <strong>Такого предмета больше нет.</strong> Похоже, его удалили в другой вкладке. Нажмите «Сохранить», чтобы создать заново.\n                        </div>\n                    ';
 } 
__p+='\n                    <div style="display: flex; gap: 1rem; margin-top: 2rem;">\n                        <button '+
((__t=( e.click('save')))==null?'':__t)+
' class="btn btn-primary" style="flex: 1;">💾 Сохранить</button>\n                        <a href="/items" class="btn" style="flex: 1;">✕ Отмена</a>\n                        ';
 if (data.created && !data.notFound) { 
__p+='\n                            <button '+
((__t=( e.click('deleteEntity') ))==null?'':__t)+
' class="btn btn-danger" style="flex: 1;">🗑️ Удалить</button>\n                        ';
 } 
__p+='\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n';
}
return __p;
}
window.renderBlocks['pages-items'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='    <div class="app">\n          '+
((__t=( f.renderBlock('menu') ))==null?'':__t)+
'\n\n\n\n        <!-- СПИСОК ПРЕДМЕТОВ -->\n        <div class="screen" id="items-list">\n            <div class="main-container">\n                <header class="header">\n                    <div class="breadcrumbs">\n                        <span class="breadcrumb-item">🔮 <a onclick="showScreen(\'welcome\')" style="cursor: pointer; color: inherit; text-decoration: none;">Главная</a></span>\n                        <span class="breadcrumb-separator">/</span>\n                        <span class="breadcrumb-item active">🎒 Предметы</span>\n                    </div>\n                </header>\n\n                <div class="content">\n                    <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem;">\n                        <h2>Инвентарь Артефактов</h2>\n                        <a href="/items/create" class="btn btn-primary">+ Новый Предмет</a>\n                    </div>\n\n                    <div class="card-grid">\n                    ';
 for (let index = 0; index < data.data.length; index++) {
                        const item = data.data[index]; 
__p+='\n                        \n                       \n                        <div '+
((__t=( e.click('goToItem', item) ))==null?'':__t)+
' class="card">\n                            <div class="card-title">'+
((__t=( item.name ))==null?'':__t)+
'</div>\n                            <div class="card-title"><img style="width:100%" src="'+
((__t=(item.img))==null?'':__t)+
'"></div>\n                            ';
 // Виды кристаллов те же, что в редакторе предмета (edit.fr).
                               const crystalKindTitles = {
                                   refine: 'Кристалл заточки',
                                   effect: 'Кристалл улучшения',
                                   reset: 'Кристалл сброса'
                               };
                               const itemCrystalKind = item.upgrade && item.upgrade.kind ? item.upgrade.kind : ''; 
__p+='\n                            <div class="card-subtitle">Тип: '+
((__t=( itemCrystalKind
                                ? (crystalKindTitles[itemCrystalKind] || 'Кристалл кузницы')
                                : (item.type === 'lootbox' ? 'Лутбокс' : 'Обычный предмет') ))==null?'':__t)+
'</div>\n                            <div class="card-subtitle">Стихия: '+
((__t=( data.elements[item.element] ))==null?'':__t)+
'</div>\n                            <div class="card-content">\n                                <div class="card-stat">\n                                    <span class="stat-label">Цена:</span>\n                                    <span class="stat-value">'+
((__t=( item.price ))==null?'':__t)+
'</span>\n                                </div>\n                                ';
 if (item.type === 'lootbox') { 
__p+='\n                                    <div class="card-stat">\n                                        <span class="stat-label">Награды:</span>\n                                        <span class="stat-value">'+
((__t=( item.lootbox_rewards.length ))==null?'':__t)+
'</span>\n                                    </div>\n                                ';
 } else { 
__p+='\n                                    <div class="card-stat">\n                                        <span class="stat-label">Эффекты:</span>\n                                        <span class="stat-value">'+
((__t=( item.effects.length ))==null?'':__t)+
'</span>\n                                    </div>\n                                ';
 } 
__p+='\n                                ';
 if (item.upgrade && item.upgrade.kind) { 
__p+='\n                                    <div class="card-stat">\n                                        <span class="stat-label">Кристалл:</span>\n                                        <span class="stat-value">'+
((__t=( item.upgrade.kind === 'refine'
                                            ? ('шанс ×' + (item.upgrade.chance_multiplier || 1) + (item.upgrade.guaranteed ? ', 100%' : '') + (item.upgrade.safe ? ', без сброса' : ''))
                                            : (item.upgrade.kind === 'reset'
                                                ? 'сброс улучшений'
                                                : ((item.upgrade.effects || []).length + ' эффект(ов)')) ))==null?'':__t)+
'</span>\n                                    </div>\n                                ';
 } 
__p+='\n                                ';
 if (item.can_use) { 
__p+='\n                                    <div class="card-stat">\n                                        <span class="stat-label">Откат:</span>\n                                        <span class="stat-value">'+
((__t=( item.reuse_turns || 0 ))==null?'':__t)+
'</span>\n                                    </div>\n                                ';
 } 
__p+='\n                                <div class="card-stat">\n                                    <span class="stat-label">ID:</span>\n                                    <span class="stat-value">'+
((__t=(item.id))==null?'':__t)+
'</span>\n                                </div>\n                            </div>\n                        </div>\n                    ';
 } 
__p+='\n         \n         \n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n\n';
}
return __p;
}
window.renderBlocks['pages-locations.edit'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='    <div class="app">\n\n        '+
((__t=( f.renderBlock('menu') ))==null?'':__t)+
'\n\n\n        <!-- РЕДАКТОР ЛОКАЦИИ -->\n        <div class="screen" id="location-edit">\n            <div class="main-container">\n                <header class="header">\n                    <div class="breadcrumbs">\n                        <span class="breadcrumb-item">🔮 <a  href="/" style="cursor: pointer; color: inherit; text-decoration: none;">Главная</a></span>\n                        <span class="breadcrumb-separator">/</span>\n                        <span class="breadcrumb-item">🗺️ <a  href="/locations" style="cursor: pointer; color: inherit; text-decoration: none;">Локации</a></span>\n                        <span class="breadcrumb-separator">/</span>\n                        <span class="breadcrumb-item active">🏛️ Редактирование</span>\n                    </div>\n                </header>\n\n                <div class="content">\n                    <div style="display:flex;gap:24px">\n                        <div style="display:flex;flex:1; flex-direction:column">\n                            <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 2rem;">\n                                <h2>Редактор Локации: '+
((__t=( data.location.name))==null?'':__t)+
'</h2>\n                                <a   href="/locations" class="btn">← Назад</a>\n                            </div>\n\n\n               <!-- НЕОБХОДИМЫЕ ЛОКАЦИИ ДЛЯ ДОСТУПА -->\n                    <div class="form-section">\n                        <div class="form-section-title">Необходимые Локации для Доступа</div>\n\n                        <p style="color: var(--text-secondary); margin-bottom: 1.5rem;">Выберите локации, которые нужно пройти чтобы получить доступ к этой локации. Можно выбрать несколько.</p>\n\n                        <div style="display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 1rem; margin-bottom: 1.5rem;" id="prerequisite_locations">\n                            <!-- Обитель Зефира (скипаем, т.к. это текущая локация) -->\n                            \n                            ';
 for (let index = 0; index < data.locations.length; index++) {
                               const location = data.locations[index]; 
__p+='\n                    \n                                <div class="location-card-selectable" style="position: relative; cursor: pointer;">\n                                    <div style="position: absolute; top: 8px; right: 8px; z-index: 10;">\n                                        <input  '+
((__t=( (data.location.parent_ids || []).includes(location.id) ? 'checked' : '' ))==null?'':__t)+
' '+
((__t=( e.on('change', 'onPrerequisiteLocationChange', location.id) ))==null?'':__t)+
' type="checkbox" class="checkbox" data-location-id="'+
((__t=( location.id ))==null?'':__t)+
'" data-location-name="'+
((__t=( location.name ))==null?'':__t)+
'">\n                                    </div>\n                                    <img src="'+
((__t=( location.img ))==null?'':__t)+
'" style="width: 100%; height: 120px; object-fit: cover; border-radius: 6px 6px 0 0; border: 1px solid var(--border-color);">\n                                    <div style="background-color: var(--secondary-bg); padding: 0.8rem; border: 1px solid var(--border-color); border-top: none; border-radius: 0 0 6px 6px;">\n                                        <div style="font-size: 0.9rem; font-weight: 500; color: var(--gold-primary);">'+
((__t=( location.name ))==null?'':__t)+
'</div>\n                                        <p style="font-size: 0.75rem; color: var(--text-secondary); margin: 0.3rem 0 0 0;">ID: '+
((__t=( location.id ))==null?'':__t)+
'</p>\n                                    </div>\n                                </div>\n\n                            ';
 } 
__p+='\n                        </div>\n\n\n\n    \n                    </div>\n\n\n                            <!-- БАЗОВЫЕ ПОЛЯ ЛОКАЦИИ -->\n                            <div class="form-section">\n                                <div class="form-section-title">Основная Информация</div>\n                                \n                                <div class="form-row">\n                                    <div class="form-col">\n                                        <label class="form-label">Название Локации</label>\n                                        <input type="text" class="form-input"  '+
((__t=( e.on('input','onValueInput', 'name') ))==null?'':__t)+
'  value="'+
((__t=(data.location.name ))==null?'':__t)+
'">\n                                    </div>\n                                    <div class="form-col">\n                                        <label class="form-label">ID Локации</label>\n                                        <input disabled type="number" class="form-input" value="'+
((__t=(data.location.id ))==null?'':__t)+
'" min="1">\n                                    </div>\n                                </div>\n\n                                <div class="form-row full">\n                                    <div class="form-col">\n                                        <label class="form-label">Описание</label>\n                                        <textarea '+
((__t=( e.on('input','onValueInput', 'description') ))==null?'':__t)+
' class="form-textarea">'+
((__t=(data.location.description ))==null?'':__t)+
'</textarea>\n                                    </div>\n                                </div>\n                                <div class="form-row full">\n                                    <div class="form-col">\n                                        <label class="form-label">Описание эфектов локации</label>\n                                        <textarea '+
((__t=( e.on('input','onValueInput', 'effects_description') ))==null?'':__t)+
' class="form-textarea">'+
((__t=(data.location.effects_description ))==null?'':__t)+
'</textarea>\n                                    </div>\n                                </div>\n\n                                \n                            </div>\n\n                            <!-- ПОЗИЦИЯ И ИЗОБРАЖЕНИЯ -->\n                            <div class="form-section">\n                                <div class="form-section-title">Позиция и Визуалы</div>\n                                \n                                <div class="form-row">\n                                    <div class="form-col">\n                                        <label class="form-label">X позиция</label>\n                                        <input '+
((__t=( e.on('input', 'onValueInput', 'position.0') ))==null?'':__t)+
' type="number" class="form-input" value="'+
((__t=(data.location.position[0] ))==null?'':__t)+
'">\n                                    </div>\n                                    <div class="form-col">\n                                        <label class="form-label">Y позиция</label>\n                                        <input '+
((__t=( e.on('input', 'onValueInput', 'position.1') ))==null?'':__t)+
' type="number" class="form-input" value="'+
((__t=(data.location.position[1] ))==null?'':__t)+
'">\n                                    </div>\n                                </div>\n\n                                <div class="form-row">\n                                    <div class="form-col">\n                                        <label class="form-label">X Размер</label>\n                                        <input '+
((__t=( e.on('input', 'onValueInput', 'size.0') ))==null?'':__t)+
' type="number" class="form-input" value="'+
((__t=(data.location?.size[0] ))==null?'':__t)+
'">\n                                    </div>\n                                    <div class="form-col">\n                                        <label class="form-label">Y Размер</label>\n                                        <input '+
((__t=( e.on('input', 'onValueInput', 'size.1') ))==null?'':__t)+
' type="number" class="form-input" value="'+
((__t=(data.location?.size[1] ))==null?'':__t)+
'">\n                                    </div>\n                                </div>\n\n                                <div class="form-row">\n                                    <div class="form-col">\n                                        <label class="form-label">Путь к изображению локации</label>\n                                            '+
((__t=( f.renderBlock('imageLoader', {
                                                key:'img',
                                                local_file: data.img_local_file,
                                                file: data.img_file,
                                                style:'width:500px',
                                                pref:'img',
                                                image: data.location.img
                                            }) ))==null?'':__t)+
'\n                                    </div>\n                                    <div class="form-col">\n                                        <label class="form-label">Путь к фону</label>\n                                            '+
((__t=( f.renderBlock('imageLoader', {
                                                key:'background',
                                                local_file: data.background_local_file,
                                                file: data.background_file,
                                                style:'height:500px',
                                                pref:'background',
                                                image: data.location.background
                                            }) ))==null?'':__t)+
'                            \n                                    </div>\n                                </div>\n                            </div>\n\n\n\n                            <!-- МЕСТА НА ЛОКАЦИИ -->\n                            <div class="form-section">\n                                <div class="form-section-title">Места для Предметов</div>\n                                \n                                <p style="color: var(--text-secondary); margin-bottom: 1.5rem;">Точки, где можно разместить предметы на локации</p>\n\n                                <div class="array-items">\n                                    ';
 for (let index = 0; index < data.location.places.length; index++) {
                                        const place = data.location.places[index]; 
__p+='\n                        \n                                        '+
((__t=( f.renderBlock('mobplace',{index, place, mobs: data.mobs, mob_id: data.location.mob_id[index]}) ))==null?'':__t)+
'\n\n                                    ';
 } 
__p+='\n                    \n                                </div>\n\n                                <button class="btn btn-primary add-item-btn" '+
((__t=( e.click('addPlace') ))==null?'':__t)+
'>+ Добавить место</button>\n                            </div>\n            \n\n                            <!-- ЭФФЕКТЫ ЛОКАЦИИ -->\n                            <div class="form-section">\n                                <div class="form-section-title">Эффекты Локации</div>\n                                \n                                <p style="color: var(--text-secondary); margin-bottom: 1.5rem;">Глобальные эффекты, действующие на локации</p>\n\n                                <div class="array-items">\n                        \n                                    ';
 for (let index = 0; index < data.location.effects.length; index++) {
                                        const effect = data.location.effects[index]; 
__p+='\n                                        '+
((__t=( f.renderBlock('effect', {effect, effects: data.effects, type:'location', index}) ))==null?'':__t)+
'\n                                    ';
 } 
__p+='\n                                </div>\n\n                                <button class="btn btn-primary add-item-btn" '+
((__t=( e.click('addEffect') ))==null?'':__t)+
' >+ Добавить эффект</button>\n                            </div>\n\n                            <!-- НАГРАДЫ ЛОКАЦИИ -->\n                            <div class="form-section">\n                                <div class="form-section-title">Награды</div>\n                                \n                                <p style="color: var(--text-secondary); margin-bottom: 1.5rem;">Награды за прохождение локации</p>\n\n                                <div class="array-items">\n                            \n                                    ';
 for (let index = 0; index < data.location.reward.length; index++) {
                                        const reward = data.location.reward[index]; 
__p+=' \n                                        '+
((__t=( f.renderBlock('reward', {
                                            reward, 
                                            index, 
                                            rewards: data.rewards,
                                            runes: data.runes,
                                            items: data.items
                                        }) ))==null?'':__t)+
'\n                                    ';
 } 
__p+='\n                                </div>\n\n                                <button class="btn btn-primary add-item-btn"  '+
((__t=( e.click('addReward') ))==null?'':__t)+
'>+ Добавить награду</button>\n                            </div>\n\n                            <!-- ДЕЙСТВИЯ -->\n                            ';
 if (data.notFound) { 
__p+='\n                                <div style="padding: 1rem 1.25rem; border-radius: 8px; margin-top: 2rem; background: rgba(138, 58, 58, 0.25); border: 1px solid rgba(197, 122, 122, 0.5);">\n                                    <strong>Такой локации больше нет.</strong> Похоже, её удалили в другой вкладке. Нажмите «Сохранить», чтобы создать заново.\n                                </div>\n                            ';
 } 
__p+='\n                            <div style="display: flex; gap: 1rem; margin-top: 2rem;">\n                                <button '+
((__t=( e.click('save') ))==null?'':__t)+
' class="btn btn-primary" style="flex: 1;">💾 Сохранить</button>\n                                <a class="btn" href="/locations" style="flex: 1;" >✕ Отмена</a>\n                                ';
 if (data.created && !data.notFound) { 
__p+='\n                                    <button '+
((__t=( e.click('deleteEntity') ))==null?'':__t)+
' class="btn btn-danger" style="flex: 1;">🗑️ Удалить</button>\n                                ';
 } 
__p+='\n                            </div>\n                        </div>\n                        <div style="width:30%;">\n                            '+
((__t=( f.renderBlock('pages-locations.edit.preview', {pref:'preview', locations: data.locations}) ))==null?'':__t)+
'\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n\n';
}
return __p;
}
window.renderBlocks['pages-locations.edit.preview'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='<div class="form-section">\n    <div class="form-section-title">Превью</div>\n        <div class="'+
((__t=( f.getClass('center') ))==null?'':__t)+
'">\n            <canvas class="'+
((__t=( f.getClass('canvas')))==null?'':__t)+
'"'+
((__t=(e.ref('canvas') ))==null?'':__t)+
'> </canvas>\n        </div>\n    <button class="btn btn-primary add-item-btn" '+
((__t=( e.click('addPlace') ))==null?'':__t)+
'>Обновить</button>\n\n</div>';
}
return __p;
}
window.renderBlocks['pages-locations'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='    <div class="app">\n          '+
((__t=( f.renderBlock('menu') ))==null?'':__t)+
'\n\n\n\n\n        <!-- СПИСОК ЛОКАЦИЙ -->\n        <div class="screen" id="locations-list">\n            <div class="main-container">\n                <header class="header">\n                    <div class="breadcrumbs">\n                        <span class="breadcrumb-item">🔮 <a onclick="showScreen(\'welcome\')" style="cursor: pointer; color: inherit; text-decoration: none;">Главная</a></span>\n                        <span class="breadcrumb-separator">/</span>\n                        <span class="breadcrumb-item active">🗺️ Локации</span>\n                    </div>\n                </header>\n\n                <div class="content">\n                    <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem;">\n                        <h2>Карта Мира</h2>\n                        <a href="/locations/create" class="btn btn-primary" onclick="showScreen(\'location-edit\')">+ Новая Локация</a>\n                    </div>\n\n                    <div class="table-container">\n                        <table>\n                            <thead>\n                                <tr>\n                                    <th>ID</th>\n                                    <th>Изображение</th>\n                                    <th>Название</th>\n                                    <th>Позиция</th>\n                                    <th>Мобы</th>\n                                    <th>Места</th>\n                                    <th>Эффекты</th>\n                                </tr>\n                            </thead>\n                            <tbody>\n                            ';
 for (let index = 0; index < data.locations.length; index++) {
                                const location = data.locations[index]; 
__p+='\n                                \n                                \n                                <tr '+
((__t=( e.on('click', 'goToLocation', location) ))==null?'':__t)+
'>\n                                    <td>#'+
((__t=( location.id ))==null?'':__t)+
'</td>\n                                    <td><img src="'+
((__t=( location.img ))==null?'':__t)+
'" style="height:50px" /> </td>\n\n                                    <td><strong style="color: var(--gold-primary);">'+
((__t=( location.name ))==null?'':__t)+
'</strong></td>\n                                    <td><span style="font-size: 0.9rem; font-family: monospace;">'+
((__t=( location.position.join(', ')))==null?'':__t)+
'</span></td>\n                                    <td><span style="background-color: rgba(138, 58, 58, 0.2); color: #ff9999; padding: 0.3rem 0.6rem; border-radius: 3px; font-size: 0.85rem;">'+
((__t=( location.mob_id.length))==null?'':__t)+
'</span></td>\n                                    <td><span style="color: var(--text-secondary);">'+
((__t=( location.places.length))==null?'':__t)+
'</span></td>\n                                    <td><span style="background-color: rgba(201, 169, 89, 0.2); color: var(--gold-primary); padding: 0.3rem 0.6rem; border-radius: 3px; font-size: 0.85rem;">'+
((__t=( location.effects.length))==null?'':__t)+
'</span></td>\n                          \n                                </tr>\n                            ';
 } 
__p+='\n                            </tbody>\n                        </table>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n    </div>\n\n';
}
return __p;
}
window.renderBlocks['pages-mobs.edit'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='<div class="app">\n\n    '+
((__t=( f.renderBlock('menu') ))==null?'':__t)+
'\n\n\n        <!-- РЕДАКТОР МОБА -->\n        <div class="screen" id="mob-edit">\n            <div class="main-container">\n                <header class="header">\n                    <div class="breadcrumbs">\n                        <span class="breadcrumb-item">🔮 <a href="/"\n                                style="cursor: pointer; color: inherit; text-decoration: none;">Главная</a></span>\n                        <span class="breadcrumb-separator">/</span>\n                        <span class="breadcrumb-item">👹 <a href="/mobs"\n                                style="cursor: pointer; color: inherit; text-decoration: none;">Мобы</a></span>\n                        <span class="breadcrumb-separator">/</span>\n                        <span class="breadcrumb-item active">⚙ Редактирование</span>\n                    </div>\n                </header>\n\n                <div class="content">\n                    <div\n                        style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 2rem;">\n                        <h2>Редактор Моба: '+
((__t=(data.mob.name ))==null?'':__t)+
'</h2>\n                        <a class="btn" href="/mobs">← Назад</a>\n                    </div>\n\n                    <!-- БАЗОВЫЕ ПОЛЯ -->\n                    <div class="form-section">\n                        <div class="form-section-title">Основная Информация</div>\n\n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">Имя Моба</label>\n                                <input '+
((__t=( e.on('input','onValueInput', 'name') ))==null?'':__t)+
' type="text" class="form-input" value="'+
((__t=(data.mob.name ))==null?'':__t)+
'">\n                            </div>\n                            <div class="form-col">\n                                <label class="form-label">Уровень</label>\n                                <input '+
((__t=( e.on('input','onValueInput', 'level') ))==null?'':__t)+
' type="number" class="form-input" value="'+
((__t=(data.mob.level ))==null?'':__t)+
'" min="1" max="100">\n                            </div>\n                        </div>\n\n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">HP (Здоровье)</label>\n                                <input '+
((__t=( e.on('input','onValueInput', 'hp') ))==null?'':__t)+
' type="number" class="form-input" value="'+
((__t=(data.mob.hp ))==null?'':__t)+
'" min="1">\n                            </div>\n                            <div class="form-col">\n                                <label class="form-label">Мана</label>\n                                <input '+
((__t=( e.on('input','onValueInput', 'mana') ))==null?'':__t)+
' type="number" class="form-input" value="'+
((__t=(data.mob.mana ))==null?'':__t)+
'" min="0">\n                            </div>\n                        </div>\n\n                        <div class="form-row full">\n                            <div class="form-col">\n                                <label class="form-label">Описание</label>\n                                <textarea  '+
((__t=( e.on('input','onValueInput', 'description') ))==null?'':__t)+
' id="map_animations"\n                                    class="form-textarea">'+
((__t=( data.mob.description ))==null?'':__t)+
'</textarea>\n                            </div>\n                        </div>\n                    </div>\n\n\n\n           <!-- Картинки -->\n                    <div class="form-section">\n                        <div class="form-section-title">Картинки</div>\n\n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">Аватар</label>\n                                '+
((__t=( f.renderBlock('imageLoader', {
                                    key:'avatar',
                                    local_file: data.avatar_local_file,
                                    file: data.avatar_file,
                                    style:'height:200px',
                                    pref:'avatar',
                                    image: data.mob.avatar
                                }) ))==null?'':__t)+
'\n                            </div>\n                            <div class="form-col">\n                                <label class="form-label">Образ</label>\n                                '+
((__t=( f.renderBlock('imageLoader', {
                                    key:'persone',
                                    local_file: data.persone_local_file,
                                    file: data.persone_file,
                                    style:'height:200px',
                                    pref:'persone',
                                    image: data.mob.persone
                                }) ))==null?'':__t)+
'\n                            </div>\n\n                            <div class="form-col">\n                                <label class="form-label">Фон битвы (Если нет берется фон локации)</label>\n                                '+
((__t=( f.renderBlock('imageLoader', {
                                    key:'background',
                                    local_file: data.background_local_file,
                                    file: data.background_file,
                                    style:'height:200px',
                                    pref:'background',
                                    image: data.mob.background
                                }) ))==null?'':__t)+
'\n                            </div>\n                        </div>\n\n              \n                    </div>\n\n\n\n\n\n\n                    <!-- СТАКИ  (ОБЪЕКТЫ СТИХИЙ) -->\n                    <div class="form-section">\n                        <div class="form-section-title">Характеристики</div>\n                        <div>\n                            <div class="element-inputs">\n                                <div class="element-input">\n                                    <div class="element-input-label">Защита</div>\n                                    <input type="number" '+
((__t=( e.on('input','onValueInput', 'state.protection') ))==null?'':__t)+
' class="form-input" value="'+
((__t=(data.mob.state.protection ))==null?'':__t)+
'" min="0" max="100">\n                                </div>\n                                <div class="element-input">\n                                    <div class="element-input-label">Атака</div>\n                                    <input type="number" '+
((__t=( e.on('input','onValueInput', 'state.attack') ))==null?'':__t)+
' class="form-input" value="'+
((__t=(data.mob.state.attack ))==null?'':__t)+
'" min="0" max="100">\n                                </div>\n                                <div class="element-input">\n                                    <div class="element-input-label">Здоровье</div>\n                                    <input type="number" '+
((__t=( e.on('input','onValueInput', 'state.hp') ))==null?'':__t)+
' class="form-input" value="'+
((__t=(data.mob.state.hp ))==null?'':__t)+
'" min="0" max="100">\n                                </div>\n                                <div class="element-input">\n                                    <div class="element-input-label">Мана</div>\n                                    <input type="number"  '+
((__t=( e.on('input','onValueInput', 'state.mana') ))==null?'':__t)+
' class="form-input" value="'+
((__t=(data.mob.state.mana ))==null?'':__t)+
'" min="0" max="100">\n                                </div>\n                            </div>\n                        </div>\n\n             \n                    </div>\n\n\n\n\n\n\n\n\n                    <!-- БОНУСЫ АТАКИ И ЗАЩИТЫ (ОБЪЕКТЫ СТИХИЙ) -->\n                    <div class="form-section">\n                        <div class="form-section-title">Бонусы (Стихии)</div>\n\n                        <div>\n                            <label class="form-label">Бонус Атаки (+% урона за стихию)</label>\n                            <div class="element-inputs">\n                                <div class="element-input">\n                                    <div class="element-input-label">🔥 Огонь</div>\n                                    <input type="number" '+
((__t=( e.on('input','onValueInput', 'attack_bonus.fire') ))==null?'':__t)+
' class="form-input" value="'+
((__t=(data.mob.attack_bonus.fire ))==null?'':__t)+
'" min="0" max="100">\n                                </div>\n                                <div class="element-input">\n                                    <div class="element-input-label">❄ Вода</div>\n                                    <input type="number" '+
((__t=( e.on('input','onValueInput', 'attack_bonus.water') ))==null?'':__t)+
' class="form-input" value="'+
((__t=(data.mob.attack_bonus.water ))==null?'':__t)+
'" min="0" max="100">\n                                </div>\n                                <div class="element-input">\n                                    <div class="element-input-label">💨 Воздух</div>\n                                    <input type="number" '+
((__t=( e.on('input','onValueInput', 'attack_bonus.air') ))==null?'':__t)+
' class="form-input" value="'+
((__t=(data.mob.attack_bonus.air ))==null?'':__t)+
'" min="0" max="100">\n                                </div>\n                                <div class="element-input">\n                                    <div class="element-input-label">🌍 Земля</div>\n                                    <input type="number"  '+
((__t=( e.on('input','onValueInput', 'attack_bonus.land') ))==null?'':__t)+
' class="form-input" value="'+
((__t=(data.mob.attack_bonus.land ))==null?'':__t)+
'" min="0" max="100">\n                                </div>\n                            </div>\n                        </div>\n\n                        <div style="margin-top: 1.5rem;">\n                            <label class="form-label">Бонус Защиты (% снижение урона)</label>\n                            <div class="element-inputs">\n                                <div class="element-input">\n                                    <div class="element-input-label">🔥 Огонь</div>\n                                    <input type="number" '+
((__t=( e.on('input','onValueInput', 'protection_bonus.fire') ))==null?'':__t)+
' class="form-input" value="'+
((__t=(data.mob.protection_bonus.fire ))==null?'':__t)+
'" min="0" max="100">\n                                </div>\n                                <div class="element-input">\n                                    <div class="element-input-label">❄ Вода</div>\n                                    <input type="number" '+
((__t=( e.on('input','onValueInput', 'protection_bonus.water') ))==null?'':__t)+
' class="form-input" value="'+
((__t=(data.mob.protection_bonus.water ))==null?'':__t)+
'" min="0" max="100">\n                                </div>\n                                <div class="element-input">\n                                    <div class="element-input-label">💨 Воздух</div>\n                                    <input type="number" '+
((__t=( e.on('input','onValueInput', 'protection_bonus.air') ))==null?'':__t)+
' class="form-input" value="'+
((__t=(data.mob.protection_bonus.air ))==null?'':__t)+
'" min="0" max="100">\n                                </div>\n                                <div class="element-input">\n                                    <div class="element-input-label">🌍 Земля</div>\n                                    <input type="number" '+
((__t=( e.on('input','onValueInput', 'protection_bonus.land') ))==null?'':__t)+
' class="form-input" value="'+
((__t=(data.mob.protection_bonus.land ))==null?'':__t)+
'" min="0" max="100">\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n\n                    <!-- РУНЫ -->\n                    <div class="form-section">\n                        <div class="form-section-title">Руны Моба</div>\n\n                        <p style="color: var(--text-secondary); margin-bottom: 1.5rem;">Добавьте руны, которыми может\n                            пользоваться этот моб</p>\n\n                        <div class="array-items">\n                             ';
 for (let index = 0; index < data.mob.runes.length; index++) {
                                 const rune = data.mob.runes[index]; 
__p+='\n\n                                '+
((__t=( f.renderBlock('rune', {runes: data.runes, rune, index}) ))==null?'':__t)+
'\n\n                            ';
 } 
__p+='\n\n                       \n                        </div>\n\n                        <button class="btn btn-primary add-item-btn" '+
((__t=( e.click('addRune')))==null?'':__t)+
'>+ Добавить\n                            руну</button>\n                    </div>\n\n                    <!-- ЭФФЕКТЫ -->\n                    <div class="form-section">\n                        <div class="form-section-title">Эффекты</div>\n\n                        <p style="color: var(--text-secondary); margin-bottom: 1.5rem;">Добавьте игровые эффекты для\n                            этого моба</p>\n\n                        <div class="array-items">\n                            ';
 for (let index = 0; index < data.mob.effects.length; index++) {
                                const effect = data.mob.effects[index]; 
__p+='\n                                '+
((__t=( f.renderBlock('effect', {effect, effects: data.effects, type:'rune', index}) ))==null?'':__t)+
'\n                            ';
 } 
__p+='\n                        </div>\n\n                        <button class="btn btn-primary add-item-btn"  '+
((__t=( e.click('addEffect') ))==null?'':__t)+
' >+ Добавить\n                            эффект</button>\n                    </div>\n\n                    <!-- ПРЕДМЕТЫ МОБА -->\n                    <div class="form-section">\n                        <div class="form-section-title">Предметы Моба</div>\n\n                        <p style="color: var(--text-secondary); margin-bottom: 1rem;">Список предметов, которые может дропать или иметь моб. Можно добавлять и удалять элементы.</p>\n\n                        <div class="array-items" id="mob_items_list">\n\n                            ';
 for (let index = 0; index < data.mob.items.length; index++) {
                                const item = data.mob.items[index]; 
__p+=' \n                                \n                            \n                                '+
((__t=( f.renderBlock('item', {items: data.items, item, index}) ))==null?'':__t)+
'\n                             \n                             \n\n                            ';
 } 
__p+='\n\n                    \n                        </div>\n\n                        <div style="margin-top:1rem; display:flex; gap:0.5rem;">\n                            <button  class="btn btn-primary" '+
((__t=( e.click('addItem') ))==null?'':__t)+
'>+ Добавить предмет</button>\n                        </div>\n                    </div>\n\n                    \n\n                    <!-- НАГРАДЫ -->\n                    <div class="form-section">\n                        <div class="form-section-title">Награды</div>\n\n                        <p style="color: var(--text-secondary); margin-bottom: 1.5rem;">Добавьте предметы и опыт за\n                            победу</p>\n\n                        <div class="array-items">\n                            ';
 for (let index = 0; index < data.mob.reward.length; index++) {
                                const reward = data.mob.reward[index]; 
__p+=' \n                                '+
((__t=( f.renderBlock('reward', {
                                    reward, 
                                    index, 
                                    rewards: data.rewards,
                                    runes: data.runes,
                                    items: data.items
                                }) ))==null?'':__t)+
'\n                            ';
 } 
__p+='\n\n                        \n                        </div>\n\n                        <button class="btn btn-primary add-item-btn" '+
((__t=( e.click('addReward') ))==null?'':__t)+
' >+ Добавить\n                            награду</button>\n                    </div>\n\n                    <!-- ЭКИПИРОВКА МОБА -->\n                    <div class="form-section">\n                        <div class="form-section-title">Экипировка моба</div>\n\n                        <p style="color: var(--text-secondary); margin-bottom: 1rem;">\n                            Вещи, которые моб носит в бою. Одна случайная надетая вещь попадает в награду победителю,\n                            поэтому надевайте то, что не жалко отдать игроку. Характеристики предмета масштабируются под\n                            уровень моба автоматически — подгонять их здесь не нужно.\n                        </p>\n                        <p style="color: var(--text-secondary); margin-bottom: 1.5rem;">\n                            Заточка и эффекты камня у моба появляются редко (уникальный экземпляр), задавать их здесь не\n                            нужно.\n                        </p>\n\n                        ';
 /* Сетка, а не одна строка: восемь селектов в ряд нечитаемы. */ 
__p+='\n                        <div class="form-row full">\n                          <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 1rem; width: 100%;">\n                            ';
 const equipment = (data.mob.equipment && typeof data.mob.equipment === 'object') ? data.mob.equipment : {} 
__p+='\n                            ';
 for (let index = 0; index < data.slots.length; index++) {
                                const slot = data.slots[index];
                                const selectedId = equipment[slot.value] || '';
                                const selectedItem = data.items.find(function (i) { return i.id === selectedId });
                                const selectedMissing = !!selectedId && !selectedItem;
                                const fitting = data.items.filter(function (i) { return (i.places || []).indexOf(slot.value) !== -1 });
                                const other = data.items.filter(function (i) { return (i.places || []).indexOf(slot.value) === -1 });
                            
__p+='\n                                <div class="form-col">\n                                    <label class="form-label">'+
((__t=( slot.name ))==null?'':__t)+
'</label>\n                                    <select '+
((__t=( e.on('change', 'changeEquipment', slot.value) ))==null?'':__t)+
' class="form-select">\n                                        <option value="">— не надето —</option>\n                                        ';
 if (selectedMissing) { 
__p+='\n                                            <option value="'+
((__t=( selectedId ))==null?'':__t)+
'" selected>'+
((__t=( selectedId ))==null?'':__t)+
' (предмет не найден)</option>\n                                        ';
 } 
__p+='\n                                        ';
 for (let i = 0; i < fitting.length; i++) {
                                            const item = fitting[i]; 
__p+='\n                                            <option value="'+
((__t=( item.id ))==null?'':__t)+
'" '+
((__t=( selectedId === item.id ? 'selected' : '' ))==null?'':__t)+
'>'+
((__t=( item.name ))==null?'':__t)+
'</option>\n                                        ';
 } 
__p+='\n                                        ';
 for (let i = 0; i < other.length; i++) {
                                            const item = other[i]; 
__p+='\n                                            <option value="'+
((__t=( item.id ))==null?'':__t)+
'" '+
((__t=( selectedId === item.id ? 'selected' : '' ))==null?'':__t)+
'>'+
((__t=( item.name ))==null?'':__t)+
' (слот не совпадает)</option>\n                                        ';
 } 
__p+='\n                                    </select>\n                                </div>\n                            ';
 } 
__p+='\n                          </div>\n                        </div>\n                    </div>\n\n                    <!-- MAP OPTIONS (mapOptions) -->\n                    <div class="form-section">\n                        <div class="form-section-title">Параметры на карте (mapOptions)</div>\n\n                        <p style="color: var(--text-secondary); margin-bottom: 1rem;">Отредактируйте отображение моба на\n                            карте (положение, изображение, анимации и подпись).</p>\n\n                        <div class="form-row full">\n                            <div class="form-col">\n                                <label class="form-label">Position (X, Y)</label>\n                                <div style="display:flex; gap:0.5rem;">\n                                    <input '+
((__t=( e.on('input', 'onValueInput', 'mapOptions.position.0') ))==null?'':__t)+
' type="number" id="map_pos_x" class="form-input" value="'+
((__t=( data.mob.mapOptions.position[0] ))==null?'':__t)+
'">\n                                    <input '+
((__t=( e.on('input', 'onValueInput', 'mapOptions.position.1') ))==null?'':__t)+
' type="number" id="map_pos_y" class="form-input" value="'+
((__t=( data.mob.mapOptions.position[1] ))==null?'':__t)+
'">\n                                </div>\n                            </div>\n                        </div>\n\n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">Size (W, H)</label>\n                                <div style="display:flex; gap:0.5rem;">\n                                    <input '+
((__t=( e.on('input', 'onValueInput', 'mapOptions.size.0') ))==null?'':__t)+
' type="number" id="map_size_w" class="form-input" value="'+
((__t=( data.mob.mapOptions.size[0] ))==null?'':__t)+
'">\n                                    <input '+
((__t=( e.on('input', 'onValueInput', 'mapOptions.size.1') ))==null?'':__t)+
' type="number" id="map_size_h" class="form-input" value="'+
((__t=( data.mob.mapOptions.size[0] ))==null?'':__t)+
'">\n                                </div>\n                            </div>\n                        </div>\n\n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">Frame Size (width, height)</label>\n                                <div style="display:flex; gap:0.5rem;">\n                                    <input type="number" id="frame_w" class="form-input" '+
((__t=( e.on('input', 'onValueInput', 'mapOptions.frameSize.width') ))==null?'':__t)+
' value="'+
((__t=( data.mob.mapOptions.frameSize.width ))==null?'':__t)+
'">\n                                    <input type="number" id="frame_h" class="form-input" '+
((__t=( e.on('input', 'onValueInput', 'mapOptions.frameSize.height') ))==null?'':__t)+
' value="'+
((__t=( data.mob.mapOptions.frameSize.height ))==null?'':__t)+
'">\n                                </div>\n                            </div>\n                            <div class="form-col">\n                                <label class="form-label">Name depth</label>\n                                <input type="number" id="name_depth" class="form-input" '+
((__t=( e.on('input', 'onValueInput', 'mapOptions.name.depth') ))==null?'':__t)+
' value="'+
((__t=( data.mob.mapOptions.name.depth ))==null?'':__t)+
'">\n                            </div>\n                        </div>\n\n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">Name options</label>\n                                <div style="display:grid; grid-template-columns: 1fr 1fr; gap:0.5rem;">\n                                    <select '+
((__t=( e.on('input', 'onValueChange', 'mapOptions.name.options.textAlign') ))==null?'':__t)+
' id="name_text_align" class="form-select">\n                                        <option '+
((__t=( data.mob.mapOptions.name.options.textAlign === 'left' ? 'selected' : '' ))==null?'':__t)+
' value="left">left</option>\n                                        <option '+
((__t=( data.mob.mapOptions.name.options.textAlign === 'center' ? 'selected' : '' ))==null?'':__t)+
' value="center">center</option>\n                                        <option '+
((__t=( data.mob.mapOptions.name.options.textAlign === 'right' ? 'selected' : '' ))==null?'':__t)+
'value="right">right</option>\n                                    </select>\n                                    <input type="text" id="name_color" class="form-input" value="'+
((__t=( data.mob.mapOptions.name.options.color ))==null?'':__t)+
'" placeholder="#ffffff">\n                                    <select '+
((__t=( e.on('input', 'onValueChange', 'mapOptions.name.options.renderType') ))==null?'':__t)+
' id="name_renderType" class="form-select">\n                                        <option '+
((__t=( data.mob.mapOptions.name.options.renderType === 'left' ? 'selected' : '' ))==null?'':__t)+
' value="left">left</option>\n                                        <option '+
((__t=( data.mob.mapOptions.name.options.renderType === 'center' ? 'selected' : '' ))==null?'':__t)+
'  value="center">center</option>\n                                        <option '+
((__t=( data.mob.mapOptions.name.options.renderType === 'right' ? 'selected' : '' ))==null?'':__t)+
'  value="right">right</option>\n                                    </select>\n                                    <input type="number" id="name_fontSize" class="form-input" '+
((__t=( e.on('input', 'onValueInput', 'mapOptions.name.options.fontSize') ))==null?'':__t)+
' value="'+
((__t=( data.mob.mapOptions.name.options.fontSize ))==null?'':__t)+
'">\n                                </div>\n                            </div>\n                            <div class="form-col">\n                                <label class="form-label">Name position (X, Y)</label>\n                                <div style="display:flex; gap:0.5rem;">\n                                    <input type="number" id="name_pos_x" class="form-input" '+
((__t=( e.on('input', 'onValueInput', 'mapOptions.name.position.0') ))==null?'':__t)+
' value="'+
((__t=( data.mob.mapOptions.name.position[0] ))==null?'':__t)+
'">\n                                    <input type="number" id="name_pos_y" class="form-input" '+
((__t=( e.on('input', 'onValueInput', 'mapOptions.name.position.0') ))==null?'':__t)+
' value="'+
((__t=( data.mob.mapOptions.name.position[1] ))==null?'':__t)+
'">\n                                </div>\n                            </div>\n                        </div>\n\n                        <div class="form-row full">\n                            <div class="form-col">\n                                <label class="form-label">Animations (JSON array)</label>\n                                <textarea  '+
((__t=( e.on('input', 'onAnimationsChange') ))==null?'':__t)+
'  id="map_animations"\n                                    class="form-textarea">'+
((__t=( JSON.stringify(data.mob.mapOptions.animations) ))==null?'':__t)+
'</textarea>\n                            </div>\n                        </div>\n\n                        <div class="form-row full">\n                            <div class="form-col">\n                                <label class="form-label">Animations (JSON array)</label>\n                                <div style="overflow:hidden">\n                                    '+
((__t=( f.renderBlock('imageLoader', {
                                        key:'animation',
                                        local_file: data.animation_local_file,
                                        file: data.animation_file,
                                        style:'width:100%',
                                        pref:'animation',
                                        image: data.mob.mapOptions.img
                                    }) ))==null?'':__t)+
'\n                                </div>\n                            </div>\n                        </div>\n\n\n                        <div class="form-row full">\n                            <div class="form-col">\n                                <label class="form-label">Animations</label>\n                                <div '+
((__t=( e.ref('canvasContainer') ))==null?'':__t)+
' style="overflow:hidden">\n                                    \n                                </div>\n                            </div>\n                        </div>\n\n\n                  \n                    </div>\n\n                    <!-- ДЕЙСТВИЯ -->\n                    ';
 if (data.notFound) { 
__p+='\n                        <div style="padding: 1rem 1.25rem; border-radius: 8px; margin-top: 2rem; background: rgba(138, 58, 58, 0.25); border: 1px solid rgba(197, 122, 122, 0.5);">\n                            <strong>Такого моба больше нет.</strong> Похоже, его удалили в другой вкладке. Нажмите «Сохранить», чтобы создать заново.\n                        </div>\n                    ';
 } 
__p+='\n                    <div style="display: flex; gap: 1rem; margin-top: 2rem;">\n                        <button '+
((__t=( e.click('save') ))==null?'':__t)+
' class="btn btn-primary" style="flex: 1;">💾 Сохранить</button>\n                        <a href="/mobs" class="btn" style="flex: 1;">✕ Отмена</a>\n                        ';
 if (data.created && !data.notFound) { 
__p+='\n                            <button '+
((__t=( e.click('deleteEntity') ))==null?'':__t)+
' class="btn btn-danger" style="flex: 1;">🗑️ Удалить</button>\n                        ';
 } 
__p+='\n                    </div>\n                </div>\n            </div>\n        </div>\n\n\n</div>';
}
return __p;
}
window.renderBlocks['pages-mobs'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='    <div class="app">\n          '+
((__t=( f.renderBlock('menu') ))==null?'':__t)+
'\n\n\n\n\n        <!-- СПИСОК МОБОВ -->\n        <div class="screen" id="mobs-list">\n            <div class="main-container">\n                <header class="header">\n                    <div class="breadcrumbs">\n                        <span class="breadcrumb-item">🔮 <a style="cursor: pointer; color: inherit; text-decoration: none;">Главная</a></span>\n                        <span class="breadcrumb-separator">/</span>\n                        <span class="breadcrumb-item active">👹 Мобы</span>\n                    </div>\n                </header>\n\n                <div class="content">\n                    <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem;">\n                        <h2>Список Мобов</h2>\n                        <a class="btn btn-primary" href="/mobs/create">+ Новый Моб</a>\n                    </div>\n\n                    <div class="table-container">\n                        <table>\n                            <thead>\n                                <tr>\n                                    <th>ID</th>\n                                    <th>Имя</th>\n                                    <th>Уровень</th>\n                                    <th>HP</th>\n                                    <th>Мана</th>\n                                    <th>Экипировка</th>\n                                </tr>\n                            </thead>\n                            <tbody>\n                                ';
 for (let index = 0; index < data.mobs.length; index++) {
                                    const mob = data.mobs[index]; 
__p+='\n                                    <tr '+
((__t=( e.click('goToMob', mob) ))==null?'':__t)+
'>\n                                        <td>#'+
((__t=( mob.id ))==null?'':__t)+
'</td>\n                                        <td><strong style="color: var(--gold-primary);">'+
((__t=( mob.name ))==null?'':__t)+
'</strong></td>\n                                        <td>'+
((__t=( mob.level ))==null?'':__t)+
'</td>\n                                        <td><span style="color: var(--danger);">'+
((__t=( mob.hp ))==null?'':__t)+
'</span></td>\n                                        <td><span style="color: var(--info);">'+
((__t=( mob.mana ))==null?'':__t)+
'</span></td>\n                                        <td>\n                                            ';
 if (mob.equipmentCount > 0) { 
__p+='\n                                                <div>Экипировка: <strong>'+
((__t=( mob.equipmentCount ))==null?'':__t)+
'</strong></div>\n                                                <div style="font-size: 0.75rem; color: var(--text-secondary);">\n                                                    ';

                                                    const worn = Object.keys(mob.equipment || {})
                                                        .filter(function (slot) { return mob.equipment[slot] })
                                                        .map(function (slot) { return data.itemNames[mob.equipment[slot]] || mob.equipment[slot] });
                                                    
__p+='\n                                                    '+
((__t=( worn.join(', ') ))==null?'':__t)+
'\n                                                </div>\n                                            ';
 } else { 
__p+='\n                                                <span style="color: var(--text-secondary);">—</span>\n                                            ';
 } 
__p+='\n                                        </td>\n                                    </tr>\n                                ';
 } 
__p+='\n                      \n              \n                            </tbody>\n                        </table>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n    </div>\n\n';
}
return __p;
}
window.renderBlocks['pages-players.edit'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='    <div class="app">\n\n        '+
((__t=( f.renderBlock('menu') ))==null?'':__t)+
'\n\n\n  \n          <!-- РЕДАКТОР ИГРОКА -->\n        <div class="screen" id="player-edit">\n            <div class="main-container">\n                <header class="header">\n                    <div class="breadcrumbs">\n                        <span class="breadcrumb-item">🔮 <a onclick="showScreen(\'welcome\')" style="cursor: pointer; color: inherit; text-decoration: none;">Главная</a></span>\n                        <span class="breadcrumb-separator">/</span>\n                        <span class="breadcrumb-item">👥 <a onclick="showScreen(\'players-list\')" style="cursor: pointer; color: inherit; text-decoration: none;">Игроки</a></span>\n                        <span class="breadcrumb-separator">/</span>\n                        <span class="breadcrumb-item active">🎭 Редактирование</span>\n                    </div>\n                </header>\n\n                <div class="content">\n                    <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 2rem;">\n                        <h2>Редактор Игрока: Арвин Стелс</h2>\n                        <button class="btn" onclick="showScreen(\'players-list\')">← Назад</button>\n                    </div>\n\n                    <!-- ОСНОВНАЯ ИНФОРМАЦИЯ -->\n                    <div class="form-section">\n                        <div class="form-section-title">Основная Информация</div>\n                        \n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">Имя</label>\n                                <input type="text" class="form-input" value="Арвин">\n                            </div>\n                            <div class="form-col">\n                                <label class="form-label">Фамилия</label>\n                                <input type="text" class="form-input" value="Стелс">\n                            </div>\n                        </div>\n\n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">TGID (Telegram ID)</label>\n                                <input type="number" class="form-input" value="123456789">\n                            </div>\n                            <div class="form-col">\n                                <label class="form-label">Node ID</label>\n                                <input type="text" class="form-input" value="node_235">\n                            </div>\n                        </div>\n\n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">Язык (lang)</label>\n                                <select class="form-select">\n                                    <option selected>ru</option>\n                                    <option>en</option>\n                                    <option>es</option>\n                                    <option>fr</option>\n                                    <option>de</option>\n                                </select>\n                            </div>\n                            <div class="form-col">\n                                <label class="form-label">Путь к Аватару</label>\n                                <input type="text" class="form-input" value="/img/players/arvin.png">\n                            </div>\n                        </div>\n                    </div>\n\n                    <!-- ПАРАМЕТРЫ ПЕРСОНАЖА -->\n                    <div class="form-section">\n                        <div class="form-section-title">Параметры Персонажа</div>\n                        \n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">Уровень</label>\n                                <input type="number" class="form-input" value="12" min="1" max="999">\n                            </div>\n                            <div class="form-col">\n                                <label class="form-label">Опыт (EXP)</label>\n                                <input type="number" class="form-input" value="4520" min="0">\n                            </div>\n                        </div>\n\n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">HP Максимум</label>\n                                <input type="number" class="form-input" value="100" min="1">\n                            </div>\n                            <div class="form-col">\n                                <label class="form-label">HP Текущий</label>\n                                <input type="number" class="form-input" value="85" min="0">\n                            </div>\n                        </div>\n\n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">Мана Максимум</label>\n                                <input type="number" class="form-input" value="100" min="1">\n                            </div>\n                            <div class="form-col">\n                                <label class="form-label">Мана Текущая</label>\n                                <input type="number" class="form-input" value="65" min="0">\n                            </div>\n                        </div>\n\n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">Золото (Gold)</label>\n                                <input type="number" class="form-input" value="850" min="0">\n                            </div>\n                            <div class="form-col">\n                                <label class="form-label">Очки Умений (State Point)</label>\n                                <input type="number" class="form-input" value="5" min="0">\n                            </div>\n                        </div>\n                    </div>\n\n                    <!-- ЗАЩИТА ПО СТИХИЯМ -->\n                    <div class="form-section">\n                        <div class="form-section-title">Защита по Стихиям (%)</div>\n                        \n                        <p style="color: var(--text-secondary); margin-bottom: 1.5rem;">Устойчивость к урону каждой стихии</p>\n\n                        <div class="element-inputs">\n                            <div class="element-input">\n                                <div class="element-input-label">🔥 Огонь</div>\n                                <input type="number" class="form-input" value="10" min="0" max="100">\n                            </div>\n                            <div class="element-input">\n                                <div class="element-input-label">❄ Лед</div>\n                                <input type="number" class="form-input" value="5" min="0" max="100">\n                            </div>\n                            <div class="element-input">\n                                <div class="element-input-label">💨 Воздух</div>\n                                <input type="number" class="form-input" value="15" min="0" max="100">\n                            </div>\n                            <div class="element-input">\n                                <div class="element-input-label">🌍 Земля</div>\n                                <input type="number" class="form-input" value="8" min="0" max="100">\n                            </div>\n                        </div>\n                    </div>\n\n                    <!-- СТАТУС -->\n                    <div class="form-section">\n                        <div class="form-section-title">Статус</div>\n                        \n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">ID Сервера (S ID)</label>\n                                <input type="number" class="form-input" value="1">\n                            </div>\n                            <div class="form-col" style="display: flex; flex-direction: column; justify-content: flex-end;">\n                                <div class="checkbox-wrapper">\n                                    <input type="checkbox" class="checkbox" checked>\n                                    <label class="checkbox-label">Онлайн (online)</label>\n                                </div>\n                            </div>\n                        </div>\n\n                        <div class="form-row full">\n                            <div class="form-col">\n                                <label class="form-label">Дата создания</label>\n                                <input type="date" class="form-input" value="2025-08-15">\n                            </div>\n                        </div>\n                    </div>\n\n                    <!-- РУНЫ ИГРОКА -->\n                    <div class="form-section">\n                        <div class="form-section-title">Изученные Руны (JSON)</div>\n                        \n                        <p style="color: var(--text-secondary); margin-bottom: 1.5rem;">Массив ID рун, которые изучил игрок</p>\n\n                        <div class="form-row full">\n                            <div class="form-col">\n                                <label class="form-label">Данные (JSON)</label>\n                                <textarea class="form-textarea">["fire_blast", "ice_shield", "wind_strike"]</textarea>\n                            </div>\n                        </div>\n                    </div>\n\n                    <!-- ПРЕДМЕТЫ ИГРОКА -->\n                    <div class="form-section">\n                        <div class="form-section-title">Инвентарь (JSON)</div>\n                        \n                        <p style="color: var(--text-secondary); margin-bottom: 1.5rem;">Список предметов в инвентаре</p>\n\n                        <div class="form-row full">\n                            <div class="form-col">\n                                <label class="form-label">Данные (JSON)</label>\n                                <textarea class="form-textarea">{"right_hand": "air_rod", "left_hand": "water_knife", "dop1": "small_mana_bottle"}</textarea>\n                            </div>\n                        </div>\n                    </div>\n\n                    <!-- ЭКИПИРОВКА -->\n                    <div class="form-section">\n                        <div class="form-section-title">Экипировка (JSON)</div>\n                        \n                        <p style="color: var(--text-secondary); margin-bottom: 1.5rem;">Текущая экипирована предметов</p>\n\n                        <div class="form-row full">\n                            <div class="form-col">\n                                <label class="form-label">Данные (JSON)</label>\n                                <textarea class="form-textarea">{"weapon": "air_rod", "armor": null}</textarea>\n                            </div>\n                        </div>\n                    </div>\n\n                    <!-- СОСТОЯНИЕ СТАТУСА -->\n                    <div class="form-section">\n                        <div class="form-section-title">Состояние Статуса (JSON)</div>\n                        \n                        <p style="color: var(--text-secondary); margin-bottom: 1.5rem;">Активные эффекты и статусы</p>\n\n                        <div class="form-row full">\n                            <div class="form-col">\n                                <label class="form-label">Данные (JSON)</label>\n                                <textarea class="form-textarea">{"buffs": ["attack_up"], "debuffs": [], "cooldowns": {}}</textarea>\n                            </div>\n                        </div>\n                    </div>\n\n                    <!-- ДЕЙСТВИЯ -->\n                    <div style="display: flex; gap: 1rem; margin-top: 2rem;">\n                        <button class="btn btn-primary" style="flex: 1;">💾 Сохранить</button>\n                        <button class="btn" style="flex: 1;" onclick="showScreen(\'players-list\')">✕ Отмена</button>\n                    </div>\n                </div>\n            </div>\n        </div>\n      \n    </div>\n\n';
}
return __p;
}
window.renderBlocks['pages-players'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='    <div class="app">\n          '+
((__t=( f.renderBlock('menu') ))==null?'':__t)+
'\n\n           <!-- СПИСОК ИГРОКОВ -->\n        <div class="screen" id="players-list">\n            <div class="main-container">\n                <header class="header">\n                    <div class="breadcrumbs">\n                        <span class="breadcrumb-item">🔮 <a href="/" style="cursor: pointer; color: inherit; text-decoration: none;">Главная</a></span>\n                        <span class="breadcrumb-separator">/</span>\n                        <span class="breadcrumb-item active">👥 Игроки</span>\n                    </div>\n                </header>\n\n                <div class="content">\n                    <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; flex-wrap: wrap; gap: 1rem;">\n                        <div>\n                            <h2>Список Игроков</h2>\n                            <p style="color: var(--text-secondary); margin-top: 0.5rem;">\n                                Всего игроков: <strong style="color: var(--gold-primary);">'+
((__t=( data.total ))==null?'':__t)+
'</strong>\n                                · онлайн сейчас: <strong>'+
((__t=( data.totalOnline ))==null?'':__t)+
'</strong>.\n                                Нажмите на строку, чтобы открыть карточку игрока.\n                            </p>\n                        </div>\n                        <form method="get" action="/players" style="display: flex; gap: 0.5rem; align-items: center;">\n                            <input type="text" name="search" value="'+
((__t=( data.search ))==null?'':__t)+
'" placeholder="имя, id или tgid"\n                                   style="padding: 0.5rem 0.75rem; border-radius: 6px; border: 1px solid rgba(255,255,255,0.15); background: rgba(0,0,0,0.3); color: inherit;">\n                            <button class="btn btn-primary" type="submit">Найти</button>\n                            ';
 if (data.search) { 
__p+='<a class="btn" href="/players">Сбросить</a>';
 } 
__p+='\n                        </form>\n                    </div>\n\n                    ';
 if (data.search) { 
__p+='\n                        <div style="margin-bottom: 1rem; color: var(--text-secondary);">Найдено по запросу «'+
((__t=( data.search ))==null?'':__t)+
'»: <strong>'+
((__t=( data.clients.length ))==null?'':__t)+
'</strong></div>\n                    ';
 } 
__p+='\n\n                    <div class="table-container">\n                        <table>\n                            <thead>\n                                <tr>\n                                    <th>ID</th>\n                                    <th>Имя Фамилия</th>\n                                    <th>TGID</th>\n                                    <th>Level</th>\n                                    <th>Exp</th>\n                                    <th>Gold</th>\n                                    <th>Алмазы</th>\n                                    <th>Нода</th>\n                                    <th>Online</th>\n                                    <th>История</th>\n                                </tr>\n                            </thead>\n                            <tbody>\n                            ';
 if (data.clients.length === 0) { 
__p+='\n                                <tr><td colspan="10" style="text-align: center; color: var(--text-secondary); padding: 2rem;">Игроки не найдены</td></tr>\n                            ';
 } 
__p+='\n\n                            ';
 for (let index = 0; index < data.clients.length; index++) {
                                const client = data.clients[index]; 
__p+='\n\n                                <tr '+
((__t=( e.click('goToPlayer', client) ))==null?'':__t)+
' style="cursor: pointer;">\n                                    <td>#'+
((__t=( client.id ))==null?'':__t)+
'</td>\n                                    <td><strong style="color: var(--gold-primary);">'+
((__t=( client.first_name ))==null?'':__t)+
' '+
((__t=( client.last_name ))==null?'':__t)+
'</strong></td>\n                                    <td><span style="font-family: monospace;">'+
((__t=( client.tgid ))==null?'':__t)+
'</span></td>\n                                    <td>'+
((__t=( client.level ))==null?'':__t)+
'</td>\n                                    <td>'+
((__t=( client.exp ))==null?'':__t)+
'</td>\n                                    <td><span style="color: var(--warning);">'+
((__t=( client.gold ))==null?'':__t)+
'</span></td>\n                                    <td>'+
((__t=( client.diamonds ))==null?'':__t)+
'</td>\n                                    <td style="font-family: monospace; font-size: 0.85rem;">'+
((__t=( client.node_id || '—' ))==null?'':__t)+
'</td>\n                                    <td>\n                                    ';
 if (client.online){ 
__p+='\n                                        <span style="background-color: rgba(90, 138, 90, 0.3); color: #7aaa7a; padding: 0.3rem 0.6rem; border-radius: 3px; font-size: 0.85rem;">🟢 Онлайн</span>\n                                    ';
 } else { 
__p+='\n                                        <span style="background-color: rgba(138, 58, 58, 0.3); color: #c57a7a; padding: 0.3rem 0.6rem; border-radius: 3px; font-size: 0.85rem;">🔴 Оффлайн</span>\n                                    ';
 } 
__p+='\n                                    </td>\n                                    <td>\n                                        <a href="/battles?player='+
((__t=( client.id ))==null?'':__t)+
'" style="color: var(--info); text-decoration: none;">⚔️ Бои</a>\n                                        <span style="color: var(--text-secondary);">·</span>\n                                        <span style="color: var(--info);">Карточка →</span>\n                                    </td>\n                                </tr>\n\n                            ';
 } 
__p+='\n                            </tbody>\n                        </table>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n    </div>\n';
}
return __p;
}
window.renderBlocks['pages-players.view'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='    <div class="app">\n        '+
((__t=( f.renderBlock('menu') ))==null?'':__t)+
'\n\n        <div class="screen" id="player-view">\n            <div class="main-container">\n                <header class="header">\n                    <div class="breadcrumbs">\n                        <span class="breadcrumb-item">🔮 <a href="/" style="cursor: pointer; color: inherit; text-decoration: none;">Главная</a></span>\n                        <span class="breadcrumb-separator">/</span>\n                        <span class="breadcrumb-item">👥 <a href="/players" style="cursor: pointer; color: inherit; text-decoration: none;">Игроки</a></span>\n                        <span class="breadcrumb-separator">/</span>\n                        <span class="breadcrumb-item active">Карточка игрока</span>\n                    </div>\n                </header>\n\n                ';

                const cardStyle = 'background: rgba(0,0,0,0.25); border: 1px solid rgba(255,255,255,0.08); border-radius: 8px; padding: 0.9rem 1.1rem;';
                const labelStyle = 'color: var(--text-secondary); font-size: 0.8rem;';
                const valueStyle = 'font-size: 1rem; margin-top: 0.2rem;';
                
__p+='\n\n                <div class="content">\n                    ';
 if (data.notFound) { 
__p+='\n                        <div style="padding: 1.5rem; border-radius: 8px; background: rgba(138, 58, 58, 0.25); border: 1px solid rgba(197, 122, 122, 0.5); margin-bottom: 1.5rem;">\n                            <strong>Игрок '+
((__t=( data.id ))==null?'':__t)+
' не найден.</strong>\n                            <div style="margin-top: 0.5rem; color: var(--text-secondary);">'+
((__t=( data.reason || '' ))==null?'':__t)+
'</div>\n                        </div>\n                        <a class="btn" href="/players">← Ко всем игрокам</a>\n                    ';
 } else { 
__p+='\n                        <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; flex-wrap: wrap; gap: 1rem;">\n                            <div style="display: flex; align-items: center; gap: 1rem;">\n                                ';
 if (data.client.img) { 
__p+='\n                                    <img src="'+
((__t=( data.client.img ))==null?'':__t)+
'" style="width: 56px; height: 56px; border-radius: 8px; object-fit: cover;" alt="">\n                                ';
 } 
__p+='\n                                <div>\n                                    <h2 style="margin-bottom: 0.35rem;">'+
((__t=( data.client.name ))==null?'':__t)+
'</h2>\n                                    <div style="color: var(--text-secondary); font-size: 0.9rem;">\n                                        id <strong>#'+
((__t=( data.client.id ))==null?'':__t)+
'</strong>\n                                        ';
 if (data.client.tgid) { 
__p+=' · tg <span style="font-family: monospace;">'+
((__t=( data.client.tgid ))==null?'':__t)+
'</span>';
 } 
__p+='\n                                        ';
 if (data.client.online) { 
__p+='\n                                            · <span style="background-color: rgba(90, 138, 90, 0.3); color: #7aaa7a; padding: 0.2rem 0.55rem; border-radius: 3px;">🟢 Онлайн</span>\n                                        ';
 } else { 
__p+='\n                                            · <span style="background-color: rgba(138, 58, 58, 0.3); color: #c57a7a; padding: 0.2rem 0.55rem; border-radius: 3px;">🔴 Оффлайн</span>\n                                        ';
 } 
__p+='\n                                    </div>\n                                </div>\n                            </div>\n                            <div style="display: flex; gap: 0.75rem; flex-wrap: wrap;">\n                                <a class="btn btn-primary" href="'+
((__t=( data.battlesUrl ))==null?'':__t)+
'">⚔️ Все бои игрока</a>\n                                <a class="btn" href="/players">← К списку</a>\n                                <button '+
((__t=( e.click('deletePlayer') ))==null?'':__t)+
' class="btn btn-danger">🗑️ Удалить игрока</button>\n                            </div>\n                        </div>\n\n                        <!-- ОСНОВНОЕ -->\n                        <div class="form-section">\n                            <div class="form-section-title">Основное</div>\n                            <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 0.75rem;">\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Имя / фамилия</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'">'+
((__t=( data.client.first_name || '—' ))==null?'':__t)+
' '+
((__t=( data.client.last_name || '' ))==null?'':__t)+
'</div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Telegram ID</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
' font-family: monospace;">'+
((__t=( data.client.tgid || '—' ))==null?'':__t)+
'</div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Язык</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'">'+
((__t=( data.client.lang || '—' ))==null?'':__t)+
'</div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Нода</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
' font-family: monospace;">'+
((__t=( data.client.node_id || '—' ))==null?'':__t)+
'</div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Сервер (s_id)</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'">'+
((__t=( data.client.s_id === null || data.client.s_id === undefined ? '—' : data.client.s_id ))==null?'':__t)+
'</div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Создан</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'">'+
((__t=( data.client.created_at ? new Date(data.client.created_at).toLocaleDateString('ru-RU') : '—' ))==null?'':__t)+
'</div>\n                                </div>\n                            </div>\n                        </div>\n\n                        <!-- ХАРАКТЕРИСТИКИ -->\n                        <div class="form-section">\n                            <div class="form-section-title">Характеристики</div>\n                            <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 0.75rem;">\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Уровень</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'"><strong style="color: var(--gold-primary);">'+
((__t=( data.client.level ))==null?'':__t)+
'</strong></div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Опыт</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'">'+
((__t=( data.client.exp ))==null?'':__t)+
'</div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Здоровье</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'">'+
((__t=( data.client.current_hp ))==null?'':__t)+
' / '+
((__t=( data.client.hp ))==null?'':__t)+
'</div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Мана</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'">'+
((__t=( data.client.current_mana ))==null?'':__t)+
' / '+
((__t=( data.client.mana ))==null?'':__t)+
'</div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Золото</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
' color: var(--warning);">'+
((__t=( data.client.gold ))==null?'':__t)+
'</div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Алмазы</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'">'+
((__t=( data.client.diamonds ))==null?'':__t)+
'</div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Боевая мощь (bm)</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'">'+
((__t=( data.client.bm ))==null?'':__t)+
'</div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Очки умений</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
'">'+
((__t=( data.client.state_point ))==null?'':__t)+
'</div>\n                                </div>\n                            </div>\n\n                            <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 0.75rem; margin-top: 0.75rem;">\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Базовые статы (state)</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
' font-size: 0.9rem;">\n                                        ';
 const stateKeys = Object.keys(data.state); 
__p+='\n                                        ';
 if (stateKeys.length === 0) { 
__p+='—';
 } 
__p+='\n                                        ';
 for (const key of stateKeys) { 
__p+='\n                                            <div>'+
((__t=( key ))==null?'':__t)+
': <strong>'+
((__t=( data.state[key] ))==null?'':__t)+
'</strong></div>\n                                        ';
 } 
__p+='\n                                    </div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Защита по стихиям</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
' font-size: 0.9rem;">\n                                        ';
 if (data.protection.length === 0) { 
__p+='—';
 } 
__p+='\n                                        ';
 for (const row of data.protection) { 
__p+='\n                                            <div>'+
((__t=( row.label ))==null?'':__t)+
': <strong>'+
((__t=( row.value ))==null?'':__t)+
'</strong></div>\n                                        ';
 } 
__p+='\n                                    </div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Опыт стихий</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
' font-size: 0.9rem;">\n                                        ';
 if (data.elementExp.length === 0) { 
__p+='—';
 } 
__p+='\n                                        ';
 for (const row of data.elementExp) { 
__p+='\n                                            <div>'+
((__t=( row.label ))==null?'':__t)+
': <strong>'+
((__t=( row.value ))==null?'':__t)+
'</strong></div>\n                                        ';
 } 
__p+='\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n\n                        <!-- РУНЫ -->\n                        <div class="form-section">\n                            <div class="form-section-title">Изученные руны ('+
((__t=( data.runes.length ))==null?'':__t)+
')</div>\n                            ';
 if (data.runes.length === 0) { 
__p+='\n                                <p style="color: var(--text-secondary);">Рун нет.</p>\n                            ';
 } else { 
__p+='\n                                <div class="table-container">\n                                    <table>\n                                        <thead>\n                                            <tr><th>Руна</th><th>id</th><th>Стихия</th><th>Мана</th><th>Уровень</th></tr>\n                                        </thead>\n                                        <tbody>\n                                            ';
 for (const rune of data.runes) { 
__p+='\n                                                <tr>\n                                                    <td><strong>'+
((__t=( rune.name ))==null?'':__t)+
'</strong></td>\n                                                    <td style="font-family: monospace; font-size: 0.85rem;">'+
((__t=( rune.id ))==null?'':__t)+
'</td>\n                                                    <td>'+
((__t=( rune.element ))==null?'':__t)+
'</td>\n                                                    <td>'+
((__t=( rune.mana === undefined || rune.mana === null ? '—' : rune.mana ))==null?'':__t)+
'</td>\n                                                    <td>'+
((__t=( rune.level === null ? '—' : rune.level ))==null?'':__t)+
'</td>\n                                                </tr>\n                                            ';
 } 
__p+='\n                                        </tbody>\n                                    </table>\n                                </div>\n                            ';
 } 
__p+='\n                        </div>\n\n                        <!-- ЭКИПИРОВКА -->\n                        <div class="form-section">\n                            <div class="form-section-title">Экипировка ('+
((__t=( data.equipment.length ))==null?'':__t)+
')</div>\n                            ';
 if (data.equipment.length === 0) { 
__p+='\n                                <p style="color: var(--text-secondary);">Ничего не надето.</p>\n                            ';
 } else { 
__p+='\n                                <div class="table-container">\n                                    <table>\n                                        <thead>\n                                            <tr><th>Слот</th><th>Предмет</th><th>id</th><th>Заточка</th><th>Очки улучшения</th><th>Моды</th></tr>\n                                        </thead>\n                                        <tbody>\n                                            ';
 for (const row of data.equipment) { 
__p+='\n                                                <tr>\n                                                    <td>'+
((__t=( row.slotName ))==null?'':__t)+
'</td>\n                                                    <td><strong style="color: var(--gold-primary);">'+
((__t=( row.name ))==null?'':__t)+
'</strong></td>\n                                                    <td style="font-family: monospace; font-size: 0.85rem;">'+
((__t=( row.id ))==null?'':__t)+
'</td>\n                                                    <td>'+
((__t=( row.refine === null ? '—' : row.refine ))==null?'':__t)+
'</td>\n                                                    <td>'+
((__t=( row.applied === null ? '—' : row.applied ))==null?'':__t)+
''+
((__t=( row.slots === null ? '' : ' / ' + row.slots ))==null?'':__t)+
'</td>\n                                                    <td style="font-size: 0.85rem;">'+
((__t=( row.mods || '—' ))==null?'':__t)+
'</td>\n                                                </tr>\n                                            ';
 } 
__p+='\n                                        </tbody>\n                                    </table>\n                                </div>\n                            ';
 } 
__p+='\n                        </div>\n\n                        <!-- ИНВЕНТАРЬ -->\n                        <div class="form-section">\n                            <div class="form-section-title">Инвентарь: '+
((__t=( data.items.length ))==null?'':__t)+
' стеков, '+
((__t=( data.totalItems ))==null?'':__t)+
' предметов</div>\n                            ';
 if (data.items.length === 0) { 
__p+='\n                                <p style="color: var(--text-secondary);">Инвентарь пуст.</p>\n                            ';
 } else { 
__p+='\n                                <div class="table-container">\n                                    <table>\n                                        <thead>\n                                            <tr><th></th><th>Предмет</th><th>id</th><th>Кол-во</th><th>Очки улучшения</th><th>Моды</th></tr>\n                                        </thead>\n                                        <tbody>\n                                            ';
 for (const row of data.items) { 
__p+='\n                                                <tr>\n                                                    <td>';
 if (row.img) { 
__p+='<img src="'+
((__t=( row.img ))==null?'':__t)+
'" style="width: 28px; height: 28px; object-fit: contain;" alt="">';
 } 
__p+='</td>\n                                                    <td><strong>'+
((__t=( row.name ))==null?'':__t)+
'</strong></td>\n                                                    <td style="font-family: monospace; font-size: 0.85rem;">'+
((__t=( row.id ))==null?'':__t)+
'</td>\n                                                    <td>'+
((__t=( row.count ))==null?'':__t)+
'</td>\n                                                    <td>'+
((__t=( row.applied === null ? '—' : row.applied ))==null?'':__t)+
''+
((__t=( row.slots === null ? '' : ' / ' + row.slots ))==null?'':__t)+
'</td>\n                                                    <td style="font-size: 0.85rem;">'+
((__t=( row.mods || '—' ))==null?'':__t)+
'</td>\n                                                </tr>\n                                            ';
 } 
__p+='\n                                        </tbody>\n                                    </table>\n                                </div>\n                            ';
 } 
__p+='\n                        </div>\n\n                        <!-- БОИ -->\n                        <div class="form-section">\n                            <div class="form-section-title">\n                                Последние бои\n                                <span style="color: var(--text-secondary); font-weight: normal; font-size: 0.85rem;">\n                                    всего: '+
((__t=( data.battleSummary.total ))==null?'':__t)+
', побед: '+
((__t=( data.battleSummary.wins ))==null?'':__t)+
', с обрывом связи: '+
((__t=( data.battleSummary.with_disconnect ))==null?'':__t)+
'\n                                </span>\n                            </div>\n                            ';
 if (data.battles.length === 0) { 
__p+='\n                                <p style="color: var(--text-secondary);">Боёв в истории нет.</p>\n                            ';
 } else { 
__p+='\n                                <div class="table-container">\n                                    <table>\n                                        <thead>\n                                            <tr><th>Начало</th><th>Тип</th><th>Противник</th><th>Итог</th><th>Ставка / награда</th><th>Раунды</th><th></th></tr>\n                                        </thead>\n                                        <tbody>\n                                            ';
 for (const battle of data.battles) { 
__p+='\n                                                <tr>\n                                                    <td>'+
((__t=( battle.started ))==null?'':__t)+
'</td>\n                                                    <td>'+
((__t=( battle.type ))==null?'':__t)+
'<div style="font-size: 0.75rem; color: var(--text-secondary);">'+
((__t=( battle.reason ))==null?'':__t)+
'</div></td>\n                                                    <td>'+
((__t=( String(battle.p1Id) === String(data.client.id) ? battle.p2Name : battle.p1Name ))==null?'':__t)+
'</td>\n                                                    <td>🏆 <strong>'+
((__t=( battle.winner ))==null?'':__t)+
'</strong><div style="font-size: 0.75rem; color: var(--text-secondary);">HP '+
((__t=( battle.hp1 ))==null?'':__t)+
' / '+
((__t=( battle.hp2 ))==null?'':__t)+
'</div></td>\n                                                    <td><div>Ставка: '+
((__t=( battle.bet ))==null?'':__t)+
'</div><div style="font-size: 0.75rem; color: var(--text-secondary);">Награда: '+
((__t=( battle.reward ))==null?'':__t)+
'</div></td>\n                                                    <td>'+
((__t=( battle.rounds ))==null?'':__t)+
'</td>\n                                                    <td style="white-space: nowrap;"><a href="/battles/'+
((__t=( battle.id ))==null?'':__t)+
'" style="color: var(--info); text-decoration: none;">Открыть →</a></td>\n                                                </tr>\n                                            ';
 } 
__p+='\n                                        </tbody>\n                                    </table>\n                                </div>\n                                <div style="margin-top: 0.75rem;"><a class="btn btn-small" href="'+
((__t=( data.battlesUrl ))==null?'':__t)+
'">Все бои игрока в истории →</a></div>\n                            ';
 } 
__p+='\n                        </div>\n\n                        <!-- ПОДПИСКИ -->\n                        <div class="form-section">\n                            <div class="form-section-title">Подписки</div>\n                            <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 0.75rem;">\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Подписан на ('+
((__t=( data.subscriptions.outgoing.length ))==null?'':__t)+
')</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
' font-size: 0.9rem;">\n                                        ';
 if (data.subscriptions.outgoing.length === 0) { 
__p+='—';
 } 
__p+='\n                                        ';
 for (const sub of data.subscriptions.outgoing) { 
__p+='\n                                            <div><a href="/players/'+
((__t=( sub.id ))==null?'':__t)+
'" style="color: var(--info); text-decoration: none;">'+
((__t=( sub.name ))==null?'':__t)+
'</a></div>\n                                        ';
 } 
__p+='\n                                    </div>\n                                </div>\n                                <div style="'+
((__t=( cardStyle ))==null?'':__t)+
'">\n                                    <div style="'+
((__t=( labelStyle ))==null?'':__t)+
'">Подписчики ('+
((__t=( data.subscriptions.incoming.length ))==null?'':__t)+
')</div>\n                                    <div style="'+
((__t=( valueStyle ))==null?'':__t)+
' font-size: 0.9rem;">\n                                        ';
 if (data.subscriptions.incoming.length === 0) { 
__p+='—';
 } 
__p+='\n                                        ';
 for (const sub of data.subscriptions.incoming) { 
__p+='\n                                            <div><a href="/players/'+
((__t=( sub.id ))==null?'':__t)+
'" style="color: var(--info); text-decoration: none;">'+
((__t=( sub.name ))==null?'':__t)+
'</a></div>\n                                        ';
 } 
__p+='\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n\n                        <!-- СЕССИИ -->\n                        <div class="form-section">\n                            <div class="form-section-title">Последние сессии ('+
((__t=( data.sessions.length ))==null?'':__t)+
')</div>\n                            ';
 if (data.sessions.length === 0) { 
__p+='\n                                <p style="color: var(--text-secondary);">Сессий нет.</p>\n                            ';
 } else { 
__p+='\n                                <div class="table-container">\n                                    <table>\n                                        <thead><tr><th>#</th><th>Создана</th><th>Язык</th><th>Нода</th><th>Токен</th><th>User-Agent</th></tr></thead>\n                                        <tbody>\n                                            ';
 for (const session of data.sessions) { 
__p+='\n                                                <tr>\n                                                    <td>'+
((__t=( session.id ))==null?'':__t)+
'</td>\n                                                    <td>'+
((__t=( session.created_at ? new Date(session.created_at).toLocaleString('ru-RU') : '—' ))==null?'':__t)+
'</td>\n                                                    <td>'+
((__t=( session.language || '—' ))==null?'':__t)+
'</td>\n                                                    <td style="font-family: monospace; font-size: 0.85rem;">'+
((__t=( session.node_id || '—' ))==null?'':__t)+
'</td>\n                                                    <td>'+
((__t=( session.hasToken ? 'есть' : 'нет' ))==null?'':__t)+
'</td>\n                                                    <td style="font-size: 0.75rem; color: var(--text-secondary); max-width: 320px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;">'+
((__t=( session.user_agent || '—' ))==null?'':__t)+
'</td>\n                                                </tr>\n                                            ';
 } 
__p+='\n                                        </tbody>\n                                    </table>\n                                </div>\n                            ';
 } 
__p+='\n                        </div>\n                    ';
 } 
__p+='\n                </div>\n            </div>\n        </div>\n    </div>\n';
}
return __p;
}
window.renderBlocks['pages-runes.edit'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='    <div class="app">\n        '+
((__t=( f.renderBlock('menu') ))==null?'':__t)+
'\n\n        <div class="screen" id="rune-edit">\n            <div class="main-container">\n                <header class="header">\n                    <div class="breadcrumbs">\n                        <span class="breadcrumb-item">🔮 <a href="/" style="cursor: pointer; color: inherit; text-decoration: none;">Главная</a></span>\n                        <span class="breadcrumb-separator">/</span>\n                        <span class="breadcrumb-item">✨ <a href="/runes" style="cursor: pointer; color: inherit; text-decoration: none;">Руны</a></span>\n                        <span class="breadcrumb-separator">/</span>\n                        <span class="breadcrumb-item active">📿 Редактирование</span>\n                    </div>\n                </header>\n\n                <div class="content">\n                    <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 2rem;">\n                        <h2>Редактор Руны: '+
((__t=( data.rune.name))==null?'':__t)+
'</h2>\n                        <a class="btn" href="/runes">← Назад</a>\n                    </div>\n\n                    <!-- БАЗОВЫЕ ПОЛЯ РУН -->\n                    <div class="form-section">\n                        <div class="form-section-title">Основная Информация</div>\n                        \n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">Название Руны</label>\n                                <input '+
((__t=( e.on('input','onValueInput', 'name') ))==null?'':__t)+
' type="text" class="form-input" value="'+
((__t=( data.rune.name))==null?'':__t)+
'">\n                            </div>\n                       \n\n                                      <div class="form-col">\n                                <label class="form-label">ID Руны</label>\n                                <input '+
((__t=( e.on('input','onValueInput', 'id') ))==null?'':__t)+
' type="text" class="form-input" value="'+
((__t=( data.rune.id ))==null?'':__t)+
'">\n                            </div>\n                        </div>\n\n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">Стоимость Маны</label>\n                                <input '+
((__t=( e.on('input','onValueInput', 'mana') ))==null?'':__t)+
' type="number" class="form-input" value="'+
((__t=( data.rune.mana ))==null?'':__t)+
'" min="1">\n                            </div>\n                        <div class="form-col">\n                                <label class="form-label">Стихия</label>\n                                <select class="form-select"  '+
((__t=( e.on('change', 'changeElement')))==null?'':__t)+
'>\n                                    ';
 for (let index = 0; index < data.elements.length; index++) {
                                        const element =  data.elements[index]; 
__p+='\n                                        <option value="'+
((__t=( element.value ))==null?'':__t)+
'" '+
((__t=( data.rune.element === element.value ? 'selected' : '' ))==null?'':__t)+
'>'+
((__t=( element.name ))==null?'':__t)+
'</option>\n                                    ';
 } 
__p+='\n                                </select>\n                            </div>\n                        </div>\n\n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">Откат (ходов)</label>\n                                <input '+
((__t=( e.on('input','onValueInput', 'reuse_turns') ))==null?'':__t)+
' type="number" class="form-input" value="'+
((__t=( data.rune.reuse_turns || 0 ))==null?'':__t)+
'" min="0">\n                            </div>\n                        </div>\n\n                        <div class="form-row full">\n                            <div class="form-col">\n                                <label class="form-label">Описание</label>\n                                <textarea '+
((__t=( e.on('input','onValueInput', 'description') ))==null?'':__t)+
' class="form-textarea">'+
((__t=( data.rune.description ))==null?'':__t)+
'</textarea>\n                            </div>\n                        </div>\n                    </div>\n\n                                        <!-- БАЗОВЫЕ ПОЛЯ РУН -->\n                    <div class="form-section">\n                        <div class="form-section-title">Изображения</div>\n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">Эталонная картинка</label>\n                                    '+
((__t=( f.renderBlock('imageLoader', {
                                        key:'img',
                                        local_file: data.img_local_file,
                                        file: data.img_file,
                                        style:'height:200px',
                                        pref:'image',
                                        image: data.rune.img
                                    }) ))==null?'':__t)+
'\n                            </div>\n                                <div class="form-col">\n                                <label class="form-label">SVG для отображения</label>\n                                    '+
((__t=( f.renderBlock('imageLoader', {
                                        key:'svg',
                                        local_file: data.svg_local_file,
                                        file: data.svg_file,
                                        style:'height:200px',
                                        pref:'svg',
                                        image: data.rune.svg,
                                        content_type:'image/svg+xml'
                                    }) ))==null?'':__t)+
'\n                            </div>\n                        </div>\n\n                         <div class="form-row full">\n                            <div class="form-col">\n                                <label class="form-label">Хеш</label>\n                                <input disabled  type="text" class="form-input" value="'+
((__t=( data.rune.hash ))==null?'':__t)+
'" min="1">\n                            </div>\n                         </div>\n                    </div>\n\n                    <!-- ЭФФЕКТЫ РУН -->\n                    <div class="form-section">\n                        <div class="form-section-title">Эффекты Руны</div>\n                        \n                        ';
 if (data.rune.effects.length > 0){ 
__p+='\n                            <div class="array-items">\n                                 ';
 for (let index = 0; index < data.rune.effects.length; index++) {
                                    const effect = data.rune.effects[index]; 
__p+='\n                                    '+
((__t=( f.renderBlock('effect', {effect, effects: data.effects, type:'rune', index}) ))==null?'':__t)+
'\n                                ';
 } 
__p+='\n                            </div>\n                        ';
 } else { 
__p+='\n                            <p style="color: var(--text-secondary); margin-bottom: 1.5rem;">Добавьте эффекты для этого предмета</p>\n                        ';
 } 
__p+='\n\n                        <button  '+
((__t=( e.click('addEffect') ))==null?'':__t)+
' class="btn btn-primary add-item-btn">+ Добавить эффект</button>\n                    </div>\n\n                    <!-- ДЕЙСТВИЯ -->\n                    ';
 if (data.notFound) { 
__p+='\n                        <div style="padding: 1rem 1.25rem; border-radius: 8px; margin-top: 2rem; background: rgba(138, 58, 58, 0.25); border: 1px solid rgba(197, 122, 122, 0.5);">\n                            <strong>Такой руны больше нет.</strong> Похоже, её удалили в другой вкладке. Нажмите «Сохранить», чтобы создать заново.\n                        </div>\n                    ';
 } 
__p+='\n                    <div style="display: flex; gap: 1rem; margin-top: 2rem;">\n                        <button '+
((__t=( e.click('save') ))==null?'':__t)+
'class="btn btn-primary" style="flex: 1;">💾 Сохранить</button>\n                        <a href="/runes" class="btn" style="flex: 1;">✕ Отмена</a>\n                        ';
 if (data.created && !data.notFound) { 
__p+='\n                            <button '+
((__t=( e.click('deleteEntity') ))==null?'':__t)+
' class="btn btn-danger" style="flex: 1;">🗑️ Удалить</button>\n                        ';
 } 
__p+='\n                    </div>\n                </div>\n            </div>\n        </div>\n\n    </div>\n\n\n';
}
return __p;
}
window.renderBlocks['pages-runes'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='    <div class="app">\n\n         '+
((__t=( f.renderBlock('menu') ))==null?'':__t)+
'\n         \n        <!-- СПИСОК РУН -->\n        <div class="screen" id="runes-list">\n            <div class="main-container">\n                <header class="header">\n                    <div class="breadcrumbs">\n                        <span class="breadcrumb-item">🔮 <a  style="cursor: pointer; color: inherit; text-decoration: none;">Главная</a></span>\n                        <span class="breadcrumb-separator">/</span>\n                        <span class="breadcrumb-item active">✨ Руны</span>\n                    </div>\n                </header>\n\n                <div class="content">\n                    <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem;">\n                        <h2>Магические Руны</h2>\n                        <a class="btn btn-primary" href="/runes/create">+ Новая Руна</a>\n                    </div>\n\n                    <div class="card-grid">                    \n                    ';
 for (let index = 0; index < data.data.length; index++) {
                        const rune = data.data[index]; 
__p+='\n\n                        <div class="card"  '+
((__t=( e.click('goToRune', rune) ))==null?'':__t)+
'>\n                            <div class="card-title">'+
((__t=( rune.name))==null?'':__t)+
'</div>\n                            <div class="card-subtitle">Тип: '+
((__t=( rune.element ))==null?'':__t)+
'</div>\n                            <div class="card-content">\n                                <img src="'+
((__t=( rune.img))==null?'':__t)+
'">\n\n                                <div class="card-stat">\n                                    <span class="stat-label">Стоимость маны:</span>\n                                    <span class="stat-value">'+
((__t=( rune.mana))==null?'':__t)+
'</span>\n                                </div>\n                                <div class="card-stat">\n                                    <span class="stat-label">Эффекты:</span>\n                                    <span class="stat-value">'+
((__t=( rune.effects.length))==null?'':__t)+
'</span>\n                                </div>\n                                <div class="card-stat">\n                                    <span class="stat-label">Стихия:</span>\n                                    <span class="stat-value">'+
((__t=( data.elements[rune.element] ))==null?'':__t)+
'</span>\n                                </div>\n                            </div>\n                        </div>\n\n                    ';
 } 
__p+='\n\n\n                    \n\n                     \n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>';
}
return __p;
}
window.renderBlocks['pages-shop.edit'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='    <div class="app">\n        '+
((__t=( f.renderBlock('menu') ))==null?'':__t)+
'\n\n        <!-- РЕДАКТОР ТОВАРА -->\n        <div class="screen" id="shop-item-edit">\n            <div class="main-container">\n                <header class="header">\n                    <div class="breadcrumbs">\n                        <span class="breadcrumb-item">🔮 <a href="/" style="cursor: pointer; color: inherit; text-decoration: none;">Главная</a></span>\n                        <span class="breadcrumb-separator">/</span>\n                        <span class="breadcrumb-item">🛒 <a href="/shop" style="cursor: pointer; color: inherit; text-decoration: none;">Магазин</a></span>\n                        <span class="breadcrumb-separator">/</span>\n                        <span class="breadcrumb-item active">Редактирование</span>\n                    </div>\n                </header>\n\n                <div class="content">\n                    <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 2rem; flex-wrap: wrap; gap: 1rem;">\n                        <div>\n                            <h2>Редактор товара: '+
((__t=( data.item.item?.name || data.item.itemId || 'Новый товар' ))==null?'':__t)+
'</h2>\n                            <p style="color: var(--text-secondary); margin-top: 0.5rem;">Сохраните, чтобы добавить товар в магазин, или измените существующий.</p>\n                        </div>\n                        <a class="btn" href="/shop">← Назад</a>\n                    </div>\n\n                    ';
 if (data.notFound) { 
__p+='\n                        <div style="padding: 1rem 1.25rem; border-radius: 8px; margin-bottom: 1.5rem; background: rgba(138, 58, 58, 0.25); border: 1px solid rgba(197, 122, 122, 0.5);">\n                            <strong>Такого товара в магазине больше нет.</strong>\n                            Похоже, его удалили в другой вкладке или ссылка устарела. Нажмите «Сохранить», чтобы создать товар заново.\n                        </div>\n                    ';
 } 
__p+='\n\n                    <div class="form-section">\n                        <div class="form-section-title">Основные параметры</div>\n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">ID товара</label>\n                                ';
 if (data.items && data.items.length) { 
__p+='\n                                    <select class="form-select" '+
((__t=( e.on('change','onValueInput', 'itemId') ))==null?'':__t)+
'>\n                                        ';
 for (let index = 0; index < data.items.length; index++) {
                                            const item = data.items[index]; 
__p+='\n                                            <option value="'+
((__t=( item.id ))==null?'':__t)+
'" '+
((__t=( data.item.itemId === item.id ? 'selected' : '' ))==null?'':__t)+
'>'+
((__t=( item.name ))==null?'':__t)+
' ('+
((__t=( item.id ))==null?'':__t)+
')</option>\n                                        ';
 } 
__p+='\n                                    </select>\n                                ';
 } else { 
__p+='\n                                    <input type="text" class="form-input" value="'+
((__t=( data.item.itemId ))==null?'':__t)+
'" disabled>\n                                    <p style="margin-top:0.5rem; color: var(--text-secondary);">Нет существующих предметов. Добавьте сначала предметы в раздел «Предметы».</p>\n                                ';
 } 
__p+='\n                            </div>\n                            <div class="form-col">\n                                <label class="form-label">Категория</label>\n                                <select class="form-select" '+
((__t=( e.on('change', 'onValueInput', 'category') ))==null?'':__t)+
'>\n                                    <option value="defense" '+
((__t=( data.item.category === 'defense' ? 'selected' : '' ))==null?'':__t)+
'>Защита</option>\n                                    <option value="attack" '+
((__t=( data.item.category === 'attack' ? 'selected' : '' ))==null?'':__t)+
'>Атака</option>\n                                    <option value="consumable" '+
((__t=( data.item.category === 'consumable' ? 'selected' : '' ))==null?'':__t)+
'>Расходники (старая)</option>\n                                    <option value="consumables" '+
((__t=( data.item.category === 'consumables' ? 'selected' : '' ))==null?'':__t)+
'>Расходники</option>\n                                    <option value="lootboxes" '+
((__t=( data.item.category === 'lootboxes' ? 'selected' : '' ))==null?'':__t)+
'>Лутбоксы</option>\n                                    <option value="special" '+
((__t=( data.item.category === 'special' ? 'selected' : '' ))==null?'':__t)+
'>Особые</option>\n                                </select>\n                            </div>\n                        </div>\n\n                        <div class="form-row full">\n                            <div class="form-col">\n                                <label class="form-label">Описание</label>\n                                <textarea '+
((__t=( e.on('input','onValueInput', 'description') ))==null?'':__t)+
' class="form-textarea">'+
((__t=( data.item.description ))==null?'':__t)+
'</textarea>\n                            </div>\n                        </div>\n\n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">Цена</label>\n                                <input '+
((__t=( e.on('input','onValueInput', 'price') ))==null?'':__t)+
' type="number" class="form-input" value="'+
((__t=( data.item.price ))==null?'':__t)+
'" min="0">\n                            </div>\n                            <div class="form-col">\n                                <label class="form-label">Валюта</label>\n                                <select class="form-select" '+
((__t=( e.on('change', 'onValueInput', 'currency') ))==null?'':__t)+
'>\n                                    <option value="gold" '+
((__t=( data.item.currency === 'gold' ? 'selected' : '' ))==null?'':__t)+
'>Gold</option>\n                                    <option value="diamond" '+
((__t=( data.item.currency === 'diamond' ? 'selected' : '' ))==null?'':__t)+
'>Diamond</option>\n                                </select>\n                            </div>\n                        </div>\n\n                        <div class="form-row">\n                            <div class="form-col">\n                                <label class="form-label">Количество</label>\n                                <input '+
((__t=( e.on('input','onValueInput', 'quantity') ))==null?'':__t)+
' type="text" class="form-input" value="'+
((__t=( data.item.quantity ))==null?'':__t)+
'">\n                            </div>\n                            <div class="form-col" style="display: flex; align-items: flex-end; gap: 1rem;">\n                                <div class="checkbox-wrapper" style="margin-bottom: 0;">\n                                    <input '+
((__t=( e.on('change','onCheckboxChange', 'isActive') ))==null?'':__t)+
' type="checkbox" class="checkbox" '+
((__t=( data.item.isActive ? 'checked' : '' ))==null?'':__t)+
'>\n                                    <label class="checkbox-label">Активен</label>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n\n                    <div style="display: flex; gap: 1rem; margin-top: 2rem; flex-wrap: wrap;">\n                        <button '+
((__t=( e.click('save') ))==null?'':__t)+
' class="btn btn-primary" style="flex: 1; min-width: 160px;">💾 Сохранить</button>\n                        <a href="/shop" class="btn" style="flex: 1; min-width: 160px;">✕ Отмена</a>\n                        ';
 if (data.created && !data.notFound) { 
__p+='\n                            <button '+
((__t=( e.click('deleteItem') ))==null?'':__t)+
' class="btn btn-danger" style="flex: 1; min-width: 160px;">🗑️ Удалить</button>\n                        ';
 } 
__p+='\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n';
}
return __p;
}
window.renderBlocks['pages-shop'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='    <div class="app">\n          '+
((__t=( f.renderBlock('menu') ))==null?'':__t)+
'\n\n        <!-- СПИСОК ТОВАРОВ МАГАЗИНА -->\n        <div class="screen" id="shop-list">\n            <div class="main-container">\n                <header class="header">\n                    <div class="breadcrumbs">\n                        <span class="breadcrumb-item">🔮 <a href="/" style="cursor: pointer; color: inherit; text-decoration: none;">Главная</a></span>\n                        <span class="breadcrumb-separator">/</span>\n                        <span class="breadcrumb-item active">🛒 Магазин</span>\n                    </div>\n                </header>\n\n                ';

                    // Категории берём из данных: в базе есть consumables и lootboxes,
                    // которых в жёстком списке фильтра не было — товары было не найти.
                    const categoryNames = {
                        defense: 'Защита',
                        attack: 'Атака',
                        consumables: 'Расходники',
                        consumable: 'Расходники (старая)',
                        lootboxes: 'Лутбоксы',
                        special: 'Особые'
                    };
                    const present = [];
                    data.items.forEach(item => {
                        if (item.category && present.indexOf(item.category) === -1) present.push(item.category);
                    });
                    present.sort();
                    const filteredItems = data.selectedCategory === 'all'
                        ? data.items
                        : data.items.filter(item => item.category === data.selectedCategory);
                
__p+='\n\n                <div class="content">\n                    <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; flex-wrap: wrap; gap: 1rem;">\n                        <div>\n                            <h2>Управление Магазином</h2>\n                            <p style="color: var(--text-secondary); margin-top: 0.5rem;">Всего товаров: <strong style="color: var(--gold-primary);">'+
((__t=( data.items.length ))==null?'':__t)+
'</strong>. Товар можно открыть для правки или удалить прямо из списка.</p>\n                        </div>\n                        <a href="/shop/create" class="btn btn-primary">+ Новый товар</a>\n                    </div>\n\n                    <div class="filter-bar" style="display: flex; flex-wrap: wrap; gap: 0.75rem; margin-bottom: 1.5rem;">\n                        <button '+
((__t=( e.click('selectCategory', 'all') ))==null?'':__t)+
' class="btn '+
((__t=( data.selectedCategory === 'all' ? 'btn-primary' : '' ))==null?'':__t)+
'">Все ('+
((__t=( data.items.length ))==null?'':__t)+
')</button>\n                        ';
 for (let c = 0; c < present.length; c++) {
                            const key = present[c];
                            const count = data.items.filter(item => item.category === key).length; 
__p+='\n                            <button '+
((__t=( e.click('selectCategory', key) ))==null?'':__t)+
' class="btn '+
((__t=( data.selectedCategory === key ? 'btn-primary' : '' ))==null?'':__t)+
'">'+
((__t=( categoryNames[key] || key ))==null?'':__t)+
' ('+
((__t=( count ))==null?'':__t)+
')</button>\n                        ';
 } 
__p+='\n                    </div>\n\n                    <div class="card-grid">\n                        ';
 if (filteredItems.length === 0) { 
__p+='\n                            <div style="width:100%; text-align:center; color: var(--text-secondary); padding: 3rem 0;">Товары не найдены</div>\n                        ';
 } 
__p+='\n\n                        ';
 for (let index = 0; index < filteredItems.length; index++) {
                            const shopItem = filteredItems[index]; 
__p+='\n                            <div '+
((__t=( e.click('goToShopItem', shopItem) ))==null?'':__t)+
' class="card">\n                                <div class="card-title">'+
((__t=( shopItem.item?.name || shopItem.itemId ))==null?'':__t)+
'</div>\n                                <div class="card-image"><img style="width:100%" src="'+
((__t=( shopItem.item?.img || '/static/default-item.png' ))==null?'':__t)+
'"></div>\n                                <div class="card-subtitle">Категория: <strong>'+
((__t=( shopItem.category ))==null?'':__t)+
'</strong></div>\n                                <div class="card-content">\n                                    <div class="card-stat">\n                                        <span class="stat-label">Цена:</span>\n                                        <span class="stat-value">'+
((__t=( shopItem.price ))==null?'':__t)+
' '+
((__t=( shopItem.currency ))==null?'':__t)+
'</span>\n                                    </div>\n                                    <div class="card-stat">\n                                        <span class="stat-label">Кол-во:</span>\n                                        <span class="stat-value">'+
((__t=( shopItem.quantity ))==null?'':__t)+
'</span>\n                                    </div>\n                                    <div class="card-stat">\n                                        <span class="stat-label">Активен:</span>\n                                        <span class="stat-value">'+
((__t=( shopItem.isActive ? 'Да' : 'Нет' ))==null?'':__t)+
'</span>\n                                    </div>\n                                </div>\n                                ';
 const itemDescription = shopItem.item?.description || shopItem.description; 
__p+='\n                                ';
 if (itemDescription) { 
__p+='\n                                    <div class="card-description">'+
((__t=( itemDescription ))==null?'':__t)+
'</div>\n                                ';
 } 
__p+='\n                                <div style="display: flex; gap: 0.5rem; margin-top: 0.75rem;">\n                                    <button '+
((__t=( e.click('deleteShopItem', shopItem) ))==null?'':__t)+
' class="btn btn-danger btn-small" style="flex: 1;">🗑️ Удалить</button>\n                                </div>\n                            </div>\n                        ';
 } 
__p+='\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n';
}
return __p;
}
window.renderBlocks['blocks-dev.Backlight'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='';
 if (data.openBlock !== undefined) { 
__p+='\n    '+
((__t=( f.renderBlock('dev.Backlight.info', data.openBlock) ))==null?'':__t)+
'\n';
 } 
__p+='';
}
return __p;
}
window.renderBlocks['blocks-dev.Backlight.info'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='<div>\n    <div>'+
((__t=( data.name ))==null?'':__t)+
'</div>\n</div>\n\n<button '+
((__t=( e.click('close') ))==null?'':__t)+
'>Закрыть</button>\n<button '+
((__t=( e.click('console') ))==null?'':__t)+
'>В консоль</button>\n<button '+
((__t=( e.click('editor') ))==null?'':__t)+
' >Редактор</button>';
}
return __p;
}
window.renderBlocks['blocks-dev.Updater'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='';
 state.port = data.port  
__p+='';
}
return __p;
}
window.renderBlocks['blocks-dev.WrongBlock'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='<div style="min-width: 100px;    min-height: 100px;    background: #f00;    display: flex;    justify-content: center;    align-items: center;    font-size: 48px;    border: 10px dashed;">Сломанный блок</div>';
}
return __p;
}
window.renderBlocks['blocks-portal'] = function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+=''+
((__t=( data.html ))==null?'':__t)+
'';
}
return __p;
}
Page._routes = [{"route":"shop/create","block":"pages-shop.edit"},{"route":"shop/(.*)/edit","block":"pages-shop.edit"},{"route":"shop","block":"pages-shop"},{"route":"players/edit","block":"pages-players.edit"},{"route":"players/(.*)","block":"pages-players.view"},{"route":"players","block":"pages-players"},{"route":"locations/create","block":"pages-locations.edit"},{"route":"locations/(.*)/edit","block":"pages-locations.edit"},{"route":"locations","block":"pages-locations"},{"route":"items/create","block":"pages-items.edit"},{"route":"items/(.*)/edit","block":"pages-items.edit"},{"route":"items","block":"pages-items"},{"route":"mobs/create","block":"pages-mobs.edit"},{"route":"mobs/(.*)/edit","block":"pages-mobs.edit"},{"route":"mobs","block":"pages-mobs"},{"route":"battles/(.*)","block":"pages-battles.view"},{"route":"battles","block":"pages-battles"},{"route":"auth","block":"pages-auth"},{"route":"runes/create","block":"pages-runes.edit"},{"route":"runes/(.*)/edit","block":"pages-runes.edit"},{"route":"runes","block":"pages-runes"},{"route":"","block":"pages-index"}]
Page._meta = {"title":"backoffice","keywords":"backoffice","description":"backoffice","url":"/","image":"/img/logo2.png"}
Page.initPlugins((function(modules) {
    const cache = {};
    function require(id) {
      if (cache[id]) return cache[id].exports;
      if (typeof modules[id] !== 'function') {
        throw new Error('Module ' + id + ' not found');
      }
      const module = { exports: {} };
      cache[id] = module;
      try {
        modules[id](module, module.exports, require);
      } catch (error) {
        console.error('Error in module', id, error);
        throw error;
      }
      return module.exports;
    }
    
    // Экспортируем все entry points
    const entries = {};
    
    try {
      entries[0] = require(0);
    } catch (e) {
      console.error('Failed to load entry point 0', e);
    }
    
    // Для обратной совместимости - первый entry point как основной экспорт
    if (typeof window !== 'undefined') {
      window.bundleEntries = entries;
      if (entries[0]) window.App = entries[0];
    }
    
    return entries;
  })([
    function(module, exports, require) {
const ru = require(1)

function formatString(template = '', replacements = []) {
    if (replacements.length == 0) return template

    return template.replace(/{(\d+)}/g, (match, index) => {
        const replacementIndex = parseInt(index, 10);
        return replacements[replacementIndex] !== undefined
            ? replacements[replacementIndex]
            : match;
    });
}

module.exports.i18n = (path, ...params) => {
    return ru[path] ? formatString(ru[path], params) : path;
}

    },
    function(module, exports, require) {
module.exports = {

}
    }
  ]))
Page._options = {"dev":true,"name":"backoffice"}
})()