PageSourceSearch

https://www.vse-privivki.ru/ds-comf/ds-form/js/plugins/inputmask.js

js vse-privivki.ru collected 2026-10-08 02:29:55 UTC 165,797 bytes, 2,617 lines download raw bytes

vendor: 15,976 bytes, lines 1-252
1/*!
2* jquery.inputmask.bundle.js
3* https://github.com/RobinHerbots/jquery.inputmask
4* Copyright (c) 2010 - 2016 Robin Herbots
5* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
6* Version: 3.3.1
7*/
8!function($) {
9    function Inputmask(alias, options) {
10        return this instanceof Inputmask ? ($.isPlainObject(alias) ? options = alias : (options = options || {}, 
11        options.alias = alias), this.el = void 0, this.opts = $.extend(!0, {}, this.defaults, options), 
12        this.noMasksCache = options && void 0 !== options.definitions, this.userOptions = options || {}, 
13        this.events = {}, void resolveAlias(this.opts.alias, options, this.opts)) : new Inputmask(alias, options);
14    }
15    function isInputEventSupported(eventName) {
16        var el = document.createElement("input"), evName = "on" + eventName, isSupported = evName in el;
17        return isSupported || (el.setAttribute(evName, "return;"), isSupported = "function" == typeof el[evName]), 
18        el = null, isSupported;
19    }
20    function isElementTypeSupported(input, opts) {
21        var elementType = input.getAttribute("type"), isSupported = "INPUT" === input.tagName && -1 !== $.inArray(elementType, opts.supportsInputType) || input.isContentEditable || "TEXTAREA" === input.tagName;
22        if (!isSupported && "INPUT" === input.tagName) {
23            var el = document.createElement("input");
24            el.setAttribute("type", elementType), isSupported = "text" === el.type, el = null;
25        }
26        return isSupported;
27    }
28    function resolveAlias(aliasStr, options, opts) {
29        var aliasDefinition = opts.aliases[aliasStr];
30        return aliasDefinition ? (aliasDefinition.alias && resolveAlias(aliasDefinition.alias, void 0, opts), 
31        $.extend(!0, opts, aliasDefinition), $.extend(!0, opts, options), !0) : (null === opts.mask && (opts.mask = aliasStr), 
32        !1);
33    }
34    function importAttributeOptions(npt, opts, userOptions) {
35        function importOption(option, optionData) {
36            optionData = void 0 !== optionData ? optionData : npt.getAttribute("data-inputmask-" + option), 
37            null !== optionData && ("string" == typeof optionData && (0 === option.indexOf("on") ? optionData = window[optionData] : "false" === optionData ? optionData = !1 : "true" === optionData && (optionData = !0)), 
38            userOptions[option] = optionData);
39        }
40        var option, dataoptions, optionData, p, attrOptions = npt.getAttribute("data-inputmask");
41        if (attrOptions && "" !== attrOptions && (attrOptions = attrOptions.replace(new RegExp("'", "g"), '"'), 
42        dataoptions = JSON.parse("{" + attrOptions + "}")), dataoptions) {
43            optionData = void 0;
44            for (p in dataoptions) if ("alias" === p.toLowerCase()) {
45                optionData = dataoptions[p];
46                break;
47            }
48        }
49        importOption("alias", optionData), userOptions.alias && resolveAlias(userOptions.alias, userOptions, opts);
50        for (option in opts) {
51            if (dataoptions) {
52                optionData = void 0;
53                for (p in dataoptions) if (p.toLowerCase() === option.toLowerCase()) {
54                    optionData = dataoptions[p];
55                    break;
56                }
57            }
58            importOption(option, optionData);
59        }
60        return $.extend(!0, opts, userOptions), opts;
61    }
62    function generateMaskSet(opts, nocache) {
63        function analyseMask(mask) {
64            function MaskToken(isGroup, isOptional, isQuantifier, isAlternator) {
65                this.matches = [], this.isGroup = isGroup || !1, this.isOptional = isOptional || !1, 
66                this.isQuantifier = isQuantifier || !1, this.isAlternator = isAlternator || !1, 
67                this.quantifier = {
68                    min: 1,
69                    max: 1
70                };
71            }
72            function insertTestDefinition(mtoken, element, position) {
73                var maskdef = opts.definitions[element];
74                position = void 0 !== position ? position : mtoken.matches.length;
75                var prevMatch = mtoken.matches[position - 1];
76                if (maskdef && !escaped) {
77                    maskdef.placeholder = $.isFunction(maskdef.placeholder) ? maskdef.placeholder(opts) : maskdef.placeholder;
78                    for (var prevalidators = maskdef.prevalidator, prevalidatorsL = prevalidators ? prevalidators.length : 0, i = 1; i < maskdef.cardinality; i++) {
79                        var prevalidator = prevalidatorsL >= i ? prevalidators[i - 1] : [], validator = prevalidator.validator, cardinality = prevalidator.cardinality;
80                        mtoken.matches.splice(position++, 0, {
81                            fn: validator ? "string" == typeof validator ? new RegExp(validator) : new function() {
82                                this.test = validator;
83                            }() : new RegExp("."),
84                            cardinality: cardinality ? cardinality : 1,
85                            optionality: mtoken.isOptional,
86                            newBlockMarker: void 0 === prevMatch || prevMatch.def !== (maskdef.definitionSymbol || element),
87                            casing: maskdef.casing,
88                            def: maskdef.definitionSymbol || element,
89                            placeholder: maskdef.placeholder,
90                            mask: element
91                        }), prevMatch = mtoken.matches[position - 1];
92                    }
93                    mtoken.matches.splice(position++, 0, {
94                        fn: maskdef.validator ? "string" == typeof maskdef.validator ? new RegExp(maskdef.validator) : new function() {
95                            this.test = maskdef.validator;
96                        }() : new RegExp("."),
97                        cardinality: maskdef.cardinality,
98                        optionality: mtoken.isOptional,
99                        newBlockMarker: void 0 === prevMatch || prevMatch.def !== (maskdef.definitionSymbol || element),
100                        casing: maskdef.casing,
101                        def: maskdef.definitionSymbol || element,
102                        placeholder: maskdef.placeholder,
103                        mask: element
104                    });
105                } else mtoken.matches.splice(position++, 0, {
106                    fn: null,
107                    cardinality: 0,
108                    optionality: mtoken.isOptional,
109                    newBlockMarker: void 0 === prevMatch || prevMatch.def !== element,
110                    casing: null,
111                    def: opts.staticDefinitionSymbol || element,
112                    placeholder: void 0 !== opts.staticDefinitionSymbol ? element : void 0,
113                    mask: element
114                }), escaped = !1;
115            }
116            function verifyGroupMarker(lastMatch, isOpenGroup) {
117                lastMatch.isGroup && (lastMatch.isGroup = !1, insertTestDefinition(lastMatch, opts.groupmarker.start, 0), 
118                isOpenGroup !== !0 && insertTestDefinition(lastMatch, opts.groupmarker.end));
119            }
120            function maskCurrentToken(m, currentToken, lastMatch, extraCondition) {
121                currentToken.matches.length > 0 && (void 0 === extraCondition || extraCondition) && (lastMatch = currentToken.matches[currentToken.matches.length - 1], 
122                verifyGroupMarker(lastMatch)), insertTestDefinition(currentToken, m);
123            }
124            function defaultCase() {
125                if (openenings.length > 0) {
126                    if (currentOpeningToken = openenings[openenings.length - 1], maskCurrentToken(m, currentOpeningToken, lastMatch, !currentOpeningToken.isAlternator), 
127                    currentOpeningToken.isAlternator) {
128                        alternator = openenings.pop();
129                        for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;
130                        openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], 
131                        currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);
132                    }
133                } else maskCurrentToken(m, currentToken, lastMatch);
134            }
135            function reverseTokens(maskToken) {
136                function reverseStatic(st) {
137                    return st === opts.optionalmarker.start ? st = opts.optionalmarker.end : st === opts.optionalmarker.end ? st = opts.optionalmarker.start : st === opts.groupmarker.start ? st = opts.groupmarker.end : st === opts.groupmarker.end && (st = opts.groupmarker.start), 
138                    st;
139                }
140                maskToken.matches = maskToken.matches.reverse();
141                for (var match in maskToken.matches) {
142                    var intMatch = parseInt(match);
143                    if (maskToken.matches[match].isQuantifier && maskToken.matches[intMatch + 1] && maskToken.matches[intMatch + 1].isGroup) {
144                        var qt = maskToken.matches[match];
145                        maskToken.matches.splice(match, 1), maskToken.matches.splice(intMatch + 1, 0, qt);
146                    }
147                    void 0 !== maskToken.matches[match].matches ? maskToken.matches[match] = reverseTokens(maskToken.matches[match]) : maskToken.matches[match] = reverseStatic(maskToken.matches[match]);
148                }
149                return maskToken;
150            }
151            for (var match, m, openingToken, currentOpeningToken, alternator, lastMatch, groupToken, tokenizer = /(?:[?*+]|\{[0-9\+\*]+(?:,[0-9\+\*]*)?\})|[^.?*+^${[]()|\\]+|./g, escaped = !1, currentToken = new MaskToken(), openenings = [], maskTokens = []; match = tokenizer.exec(mask); ) if (m = match[0], 
152            escaped) defaultCase(); else switch (m.charAt(0)) {
153              case opts.escapeChar:
154                escaped = !0;
155                break;
156
157              case opts.optionalmarker.end:
158              case opts.groupmarker.end:
159                if (openingToken = openenings.pop(), void 0 !== openingToken) if (openenings.length > 0) {
160                    if (currentOpeningToken = openenings[openenings.length - 1], currentOpeningToken.matches.push(openingToken), 
161                    currentOpeningToken.isAlternator) {
162                        alternator = openenings.pop();
163                        for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;
164                        openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], 
165                        currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);
166                    }
167                } else currentToken.matches.push(openingToken); else defaultCase();
168                break;
169
170              case opts.optionalmarker.start:
171                openenings.push(new MaskToken(!1, !0));
172                break;
173
174              case opts.groupmarker.start:
175                openenings.push(new MaskToken(!0));
176                break;
177
178              case opts.quantifiermarker.start:
179                var quantifier = new MaskToken(!1, !1, !0);
180                m = m.replace(/[{}]/g, "");
181                var mq = m.split(","), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);
182                if (("*" === mq1 || "+" === mq1) && (mq0 = "*" === mq1 ? 0 : 1), quantifier.quantifier = {
183                    min: mq0,
184                    max: mq1
185                }, openenings.length > 0) {
186                    var matches = openenings[openenings.length - 1].matches;
187                    match = matches.pop(), match.isGroup || (groupToken = new MaskToken(!0), groupToken.matches.push(match), 
188                    match = groupToken), matches.push(match), matches.push(quantifier);
189                } else match = currentToken.matches.pop(), match.isGroup || (groupToken = new MaskToken(!0), 
190                groupToken.matches.push(match), match = groupToken), currentToken.matches.push(match), 
191                currentToken.matches.push(quantifier);
192                break;
193
194              case opts.alternatormarker:
195                openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], 
196                lastMatch = currentOpeningToken.matches.pop()) : lastMatch = currentToken.matches.pop(), 
197                lastMatch.isAlternator ? openenings.push(lastMatch) : (alternator = new MaskToken(!1, !1, !1, !0), 
198                alternator.matches.push(lastMatch), openenings.push(alternator));
199                break;
200
201              default:
202                defaultCase();
203            }
204            for (;openenings.length > 0; ) openingToken = openenings.pop(), verifyGroupMarker(openingToken, !0), 
205            currentToken.matches.push(openingToken);
206            return currentToken.matches.length > 0 && (lastMatch = currentToken.matches[currentToken.matches.length - 1], 
207            verifyGroupMarker(lastMatch), maskTokens.push(currentToken)), opts.numericInput && reverseTokens(maskTokens[0]), 
208            maskTokens;
209        }
210        function generateMask(mask, metadata) {
211            if (null === mask || "" === mask) return void 0;
212            if (1 === mask.length && opts.greedy === !1 && 0 !== opts.repeat && (opts.placeholder = ""), 
213            opts.repeat > 0 || "*" === opts.repeat || "+" === opts.repeat) {
214                var repeatStart = "*" === opts.repeat ? 0 : "+" === opts.repeat ? 1 : opts.repeat;
215                mask = opts.groupmarker.start + mask + opts.groupmarker.end + opts.quantifiermarker.start + repeatStart + "," + opts.repeat + opts.quantifiermarker.end;
216            }
217            var masksetDefinition;
218            return void 0 === Inputmask.prototype.masksCache[mask] || nocache === !0 ? (masksetDefinition = {
219                mask: mask,
220                maskToken: analyseMask(mask),
221                validPositions: {},
222                _buffer: void 0,
223                buffer: void 0,
224                tests: {},
225                metadata: metadata
226            }, nocache !== !0 && (Inputmask.prototype.masksCache[opts.numericInput ? mask.split("").reverse().join("") : mask] = masksetDefinition, 
227            masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[opts.numericInput ? mask.split("").reverse().join("") : mask]))) : masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[opts.numericInput ? mask.split("").reverse().join("") : mask]), 
228            masksetDefinition;
229        }
230        function preProcessMask(mask) {
231            return mask = mask.toString();
232        }
233        var ms;
234        if ($.isFunction(opts.mask) && (opts.mask = opts.mask(opts)), $.isArray(opts.mask)) {
235            if (opts.mask.length > 1) {
236                opts.keepStatic = null === opts.keepStatic ? !0 : opts.keepStatic;
237                var altMask = "(";
238                return $.each(opts.numericInput ? opts.mask.reverse() : opts.mask, function(ndx, msk) {
239                    altMask.length > 1 && (altMask += ")|("), altMask += preProcessMask(void 0 === msk.mask || $.isFunction(msk.mask) ? msk : msk.mask);
240                }), altMask += ")", generateMask(altMask, opts.mask);
241            }
242            opts.mask = opts.mask.pop();
243        }
244        return opts.mask && (ms = void 0 === opts.mask.mask || $.isFunction(opts.mask.mask) ? generateMask(preProcessMask(opts.mask), opts.mask) : generateMask(preProcessMask(opts.mask.mask), opts.mask)), 
245        ms;
246    }
247    function maskScope(actionObj, maskset, opts) {
248        function getMaskTemplate(baseOnInput, minimalPos, includeInput) {
249            minimalPos = minimalPos || 0;
250            var ndxIntlzr, test, testPos, maskTemplate = [], pos = 0, lvp = getLastValidPosition();
251            do {
252                if (baseOnInput === !0 && getMaskSet().validPositions[pos]) {
253                    var validPos = getMaskSet().validPositions[pos];
254                    test = validPos.match, ndxIntlzr = validPos.locator.slice(), maskTemplate.push(includeInput === !0 ? validPos.input : getPlaceholder(pos, test));
255                } else testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), test = testPos.match, 
256                ndxIntlzr = testPos.locator.slice(), (opts.jitMasking === !1 || lvp > pos || isFinite(opts.jitMasking) && opts.jitMasking > pos) && maskTemplate.push(getPlaceholder(pos, test));
257                pos++;
258            } while ((void 0 === maxLength || maxLength > pos - 1) && null !== test.fn || null === test.fn && "" !== test.def || minimalPos >= pos);
259            return "" === maskTemplate[maskTemplate.length - 1] && maskTemplate.pop(), maskTemplate;
260        }
261        function getMaskSet() {
262            return maskset;
263        }
264        function resetMaskSet(soft) {
265            var maskset = getMaskSet();
266            maskset.buffer = void 0, soft !== !0 && (maskset.tests = {}, maskset._buffer = void 0, 
267            maskset.validPositions = {}, maskset.p = 0);
268        }
269        function getLastValidPosition(closestTo, strict, validPositions) {
270            var before = -1, after = -1, valids = validPositions || getMaskSet().validPositions;
271            void 0 === closestTo && (closestTo = -1);
272            for (var posNdx in valids) {
273                var psNdx = parseInt(posNdx);
274                valids[psNdx] && (strict || null !== valids[psNdx].match.fn) && (closestTo >= psNdx && (before = psNdx), 
275                psNdx >= closestTo && (after = psNdx));
276            }
277            return -1 !== before && closestTo - before > 1 || closestTo > after ? before : after;
278        }
279        function setValidPosition(pos, validTest, fromSetValid, isSelection) {
280            if (isSelection || opts.insertMode && void 0 !== getMaskSet().validPositions[pos] && void 0 === fromSetValid) {
281                var i, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), lvp = getLastValidPosition();
282                for (i = pos; lvp >= i; i++) delete getMaskSet().validPositions[i];
283                getMaskSet().validPositions[pos] = validTest;
284                var j, valid = !0, vps = getMaskSet().validPositions, needsValidation = !1;
285                for (i = j = pos; lvp >= i; i++) {
286                    var t = positionsClone[i];
287                    if (void 0 !== t) for (var posMatch = j, prevPosMatch = -1; posMatch < getMaskLength() && (null == t.match.fn && vps[i] && (vps[i].match.optionalQuantifier === !0 || vps[i].match.optionality === !0) || null != t.match.fn); ) {
288                        if (null === t.match.fn || !opts.keepStatic && vps[i] && (void 0 !== vps[i + 1] && getTests(i + 1, vps[i].locator.slice(), i).length > 1 || void 0 !== vps[i].alternation) ? posMatch++ : posMatch = seekNext(j), 
289                        needsValidation === !1 && positionsClone[posMatch] && positionsClone[posMatch].match.def === t.match.def) {
290                            getMaskSet().validPositions[posMatch] = $.extend(!0, {}, positionsClone[posMatch]), 
291                            getMaskSet().validPositions[posMatch].input = t.input, j = posMatch, valid = !0;
292                            break;
293                        }
294                        if (positionCanMatchDefinition(posMatch, t.match.def)) {
295                            var result = isValid(posMatch, t.input, !0, !0);
296                            if (valid = result !== !1, j = result.caret || result.insert ? getLastValidPosition() : posMatch, 
297                            needsValidation = !0, valid) break;
298                        } else {
299                            if (valid = null == t.match.fn, prevPosMatch === posMatch) break;
300                            prevPosMatch = posMatch;
301                        }
302                    }
303                    if (!valid) break;
304                }
305                if (!valid) return getMaskSet().validPositions = $.extend(!0, {}, positionsClone), 
306                resetMaskSet(!0), !1;
307            } else getMaskSet().validPositions[pos] = validTest;
308            return resetMaskSet(!0), !0;
309        }
310        function stripValidPositions(start, end, nocheck, strict) {
311            function IsEnclosedStatic(pos) {
312                var posMatch = getMaskSet().validPositions[pos];
313                if (void 0 !== posMatch && null === posMatch.match.fn) {
314                    var prevMatch = getMaskSet().validPositions[pos - 1], nextMatch = getMaskSet().validPositions[pos + 1];
315                    return void 0 !== prevMatch && void 0 !== nextMatch;
316                }
317                return !1;
318            }
319            var i, startPos = start, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), needsValidation = !1;
320            for (getMaskSet().p = start, i = end - 1; i >= startPos; i--) void 0 !== getMaskSet().validPositions[i] && (nocheck === !0 || !IsEnclosedStatic(i) && opts.canClearPosition(getMaskSet(), i, getLastValidPosition(), str
320ict, opts) !== !1) && delete getMaskSet().validPositions[i];
321            for (resetMaskSet(!0), i = startPos + 1; i <= getLastValidPosition(); ) {
322                for (;void 0 !== getMaskSet().validPositions[startPos]; ) startPos++;
323                var s = getMaskSet().validPositions[startPos];
324                if (startPos > i && (i = startPos + 1), void 0 === getMaskSet().validPositions[i] && isMask(i) || void 0 !== s) i++; else {
325                    var t = getTestTemplate(i);
326                    needsValidation === !1 && positionsClone[startPos] && positionsClone[startPos].match.def === t.match.def ? (getMaskSet().validPositions[startPos] = $.extend(!0, {}, positionsClone[startPos]), 
327                    getMaskSet().validPositions[startPos].input = t.input, delete getMaskSet().validPositions[i], 
328                    i++) : positionCanMatchDefinition(startPos, t.match.def) ? isValid(startPos, t.input || getPlaceholder(i), !0) !== !1 && (delete getMaskSet().validPositions[i], 
329                    i++, needsValidation = !0) : isMask(i) || (i++, startPos--), startPos++;
330                }
331            }
332            resetMaskSet(!0);
333        }
334        function getTestTemplate(pos, ndxIntlzr, tstPs) {
335            var testPos = getMaskSet().validPositions[pos];
336            if (void 0 === testPos) for (var testPositions = getTests(pos, ndxIntlzr, tstPs), lvp = getLastValidPosition(), lvTest = getMaskSet().validPositions[lvp] || getTests(0)[0], lvTestAltArr = void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation].toString().split(",") : [], ndx = 0; ndx < testPositions.length && (testPos = testPositions[ndx], 
337            !(testPos.match && (opts.greedy && testPos.match.optionalQuantifier !== !0 || (testPos.match.optionality === !1 || testPos.match.newBlockMarker === !1) && testPos.match.optionalQuantifier !== !0) && (void 0 === lvTest.alternation || lvTest.alternation !== testPos.alternation || void 0 !== testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(","), lvTestAltArr)))); ndx++) ;
338            return testPos;
339        }
340        function getTest(pos) {
341            return getMaskSet().validPositions[pos] ? getMaskSet().validPositions[pos].match : getTests(pos)[0].match;
342        }
343        function positionCanMatchDefinition(pos, def) {
344            for (var valid = !1, tests = getTests(pos), tndx = 0; tndx < tests.length; tndx++) if (tests[tndx].match && tests[tndx].match.def === def) {
345                valid = !0;
346                break;
347            }
348            return valid;
349        }
350        function selectBestMatch(pos, alternateNdx) {
351            var bestMatch, indexPos;
352            return (getMaskSet().tests[pos] || getMaskSet().validPositions[pos]) && $.each(getMaskSet().tests[pos] || [ getMaskSet().validPositions[pos] ], function(ndx, lmnt) {
353                var ndxPos = lmnt.alternation ? lmnt.locator[lmnt.alternation].toString().indexOf(alternateNdx) : -1;
354                (void 0 === indexPos || indexPos > ndxPos) && -1 !== ndxPos && (bestMatch = lmnt, 
355                indexPos = ndxPos);
356            }), bestMatch;
357        }
358        function getTests(pos, ndxIntlzr, tstPs) {
359            function resolveTestFromToken(maskToken, ndxInitializer, loopNdx, quantifierRecurse) {
360                function handleMatch(match, loopNdx, quantifierRecurse) {
361                    function isFirstMatch(latestMatch, tokenGroup) {
362                        var firstMatch = 0 === $.inArray(latestMatch, tokenGroup.matches);
363                        return firstMatch || $.each(tokenGroup.matches, function(ndx, match) {
364                            return match.isQuantifier === !0 && (firstMatch = isFirstMatch(latestMatch, tokenGroup.matches[ndx - 1])) ? !1 : void 0;
365                        }), firstMatch;
366                    }
367                    function resolveNdxInitializer(pos, alternateNdx) {
368                        var bestMatch = selectBestMatch(pos, alternateNdx);
369                        return bestMatch ? bestMatch.locator.slice(bestMatch.alternation + 1) : [];
370                    }
371                    if (testPos > 1e4) throw "Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. " + getMaskSet().mask;
372                    if (testPos === pos && void 0 === match.matches) return matches.push({
373                        match: match,
374                        locator: loopNdx.reverse(),
375                        cd: cacheDependency
376                    }), !0;
377                    if (void 0 !== match.matches) {
378                        if (match.isGroup && quantifierRecurse !== match) {
379                            if (match = handleMatch(maskToken.matches[$.inArray(match, maskToken.matches) + 1], loopNdx)) return !0;
380                        } else if (match.isOptional) {
381                            var optionalToken = match;
382                            if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) {
383                                if (latestMatch = matches[matches.length - 1].match, !isFirstMatch(latestMatch, optionalToken)) return !0;
384                                insertStop = !0, testPos = pos;
385                            }
386                        } else if (match.isAlternator) {
387                            var maltMatches, alternateToken = match, malternateMatches = [], currentMatches = matches.slice(), loopNdxCnt = loopNdx.length, altIndex = ndxInitializer.length > 0 ? ndxInitializer.shift() : -1;
388                            if (-1 === altIndex || "string" == typeof altIndex) {
389                                var amndx, currentPos = testPos, ndxInitializerClone = ndxInitializer.slice(), altIndexArr = [];
390                                if ("string" == typeof altIndex) altIndexArr = altIndex.split(","); else for (amndx = 0;
390 amndx < alternateToken.matches.length; amndx++) altIndexArr.push(amndx);
391                                for (var ndx = 0; ndx < altIndexArr.length; ndx++) {
392                                    if (amndx = parseInt(altIndexArr[ndx]), matches = [], ndxInitializer = resolveNdxInitializer(testPos, amndx), 
393                                    match = handleMatch(alternateToken.matches[amndx] || maskToken.matches[amndx], [ amndx ].concat(loopNdx), quantifierRecurse) || match, 
394                                    match !== !0 && void 0 !== match && altIndexArr[altIndexArr.length - 1] < alternateToken.matches.length) {
395                                        var ntndx = $.inArray(match, maskToken.matches) + 1;
396                                        maskToken.matches.length > ntndx && (match = handleMatch(maskToken.matches[ntndx], [ ntndx ].concat(loopNdx.slice(1, loopNdx.length)), quantifierRecurse), 
397                                        match && (altIndexArr.push(ntndx.toString()), $.each(matches, function(ndx, lmnt) {
398                                            lmnt.alternation = loopNdx.length - 1;
399                                        })));
400                                    }
401                                    maltMatches = matches.slice(), testPos = currentPos, matches = [];
402                                    for (var i = 0; i < ndxInitializerClone.length; i++) ndxInitializer[i] = ndxInitializerClone[i];
403                                    for (var ndx1 = 0; ndx1 < maltMatches.length; ndx1++) {
404                                        var altMatch = maltMatches[ndx1];
405                                        altMatch.alternation = altMatch.alternation || loopNdxCnt;
406                                        for (var ndx2 = 0; ndx2 < malternateMatches.length; ndx2++) {
407                                            var altMatch2 = malternateMatches[ndx2];
408                                            if (altMatch.match.def === altMatch2.match.def && ("string" != typeof altIndex || -1 !== $.inArray(altMatch.locator[altMatch.alternation].toString(), altIndexArr))) {
409                                                altMatch.match.mask === altMatch2.match.mask && (maltMatches.splice(ndx1, 1), ndx1--), 
410                                                -1 === altMatch2.locator[altMatch.alternation].toString().indexOf(altMatch.locator[altMatch.alternation]) && (altMatch2.locator[altMatch.alternation] = altMatch2.locator[altMatch.alternation] + "," + altMatch.locator[altMatch.alternation], 
411                                                altMatch2.alternation = altMatch.alternation);
412                                                break;
413                                            }
414                                        }
415                                    }
416                                    malternateMatches = malternateMatches.concat(maltMatches);
417                                }
418                                "string" == typeof altIndex && (malternateMatches = $.map(malternateMatches, function(lmnt, ndx) {
419                                    if (isFinite(ndx)) {
420                                        var mamatch, alternation = lmnt.alternation, altLocArr = lmnt.locator[alternation].toString().split(",");
421                                        lmnt.locator[alternation] = void 0, lmnt.alternation = void 0;
422                                        for (var alndx = 0; alndx < altLocArr.length; alndx++) mamatch = -1 !== $.inArray(altLocArr[alndx], altIndexArr), 
423                                        mamatch && (void 0 !== lmnt.locator[alternation] ? (lmnt.locator[alternation] += ",", 
424                                        lmnt.locator[alternation] += altLocArr[alndx]) : lmnt.locator[alternation] = parseInt(altLocArr[alndx]), 
425                                        lmnt.alternation = alternation);
426                                        if (void 0 !== lmnt.locator[alternation]) return lmnt;
427                                    }
428                                })), matches = currentMatches.concat(malternateMatches), testPos = pos, insertStop = matches.length > 0;
429                            } else match = handleMatch(alternateToken.matches[altIndex] || maskToken.matches[altIndex], [ altIndex ].concat(loopNdx), quantifierRecurse);
430                            if (match) return !0;
431                        } else if (match.isQuantifier && quantifierRecurse !== maskToken.matches[$.inArray(match, maskToken.matches) - 1]) for (var qt = match, qndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; qndx < (isNaN(qt.quantifier.max) ? qndx + 1 : qt.quantifier.max) && pos >= testPos; qndx++) {
432                            var tokenGroup = maskToken.matches[$.inArray(qt, maskToken.matches) - 1];
433                            if (match = handleMatch(tokenGroup, [ qndx ].concat(loopNdx), tokenGroup)) {
434                                if (latestMatch = matches[matches.length - 1].match, latestMatch.optionalQuantifier = qndx > qt.quantifier.min - 1, 
435                                isFirstMatch(latestMatch, tokenGroup)) {
436                                    if (qndx > qt.quantifier.min - 1) {
437                                        insertStop = !0, testPos = pos;
438                                        break;
439                                    }
440                                    return !0;
441                                }
442                                return !0;
443                            }
444                        } else if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) return !0;
445                    } else testPos++;
446                }
447                for (var tndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; tndx < maskToken.matches.length; tndx++) if (maskToken.matches[tndx].isQuantifier !== !0) {
448                    var match = handleMatch(maskToken.matches[tndx], [ tndx ].concat(loopNdx), quantifierRecurse);
449                    if (match && testPos === pos) return match;
450                    if (testPos > pos) break;
451                }
452            }
453            function mergeLocators(tests) {
454                var locator = [];
455                return $.isArray(tests) || (tests = [ tests ]), void 0 === tests[0].alternation ? locator = tests[0].locator.slice() : $.each(tests, function(ndx, tst) {
456                    if ("" !== tst.def) if (0 === locator.length) locator = t
456st.locator.slice(); else for (var i = 0; i < locator.length; i++) tst.locator[i] && -1 === locator[i].toString().indexOf(tst.locator[i]) && (locator[i] += "," + tst.locator[i]);
457                }), locator;
458            }
459            var latestMatch, maskTokens = getMaskSet().maskToken, testPos = ndxIntlzr ? tstPs : 0, ndxInitializer = ndxIntlzr || [ 0 ], matches = [], insertStop = !1, cacheDependency = ndxIntlzr ? ndxIntlzr.join("") : "";
460            if (pos > -1) {
461                if (void 0 === ndxIntlzr) {
462                    for (var test, previousPos = pos - 1; void 0 === (test = getMaskSet().validPositions[previousPos] || getMaskSet().tests[previousPos]) && previousPos > -1; ) previousPos--;
463                    void 0 !== test && previousPos > -1 && (ndxInitializer = mergeLocators(test), cacheDependency = ndxInitializer.join(""), 
464                    testPos = previousPos);
465                }
466                if (getMaskSet().tests[pos] && getMaskSet().tests[pos][0].cd === cacheDependency) return getMaskSet().tests[pos];
467                for (var mtndx = ndxInitializer.shift(); mtndx < maskTokens.length; mtndx++) {
468                    var match = resolveTestFromToken(maskTokens[mtndx], ndxInitializer, [ mtndx ]);
469                    if (match && testPos === pos || testPos > pos) break;
470                }
471            }
472            return (0 === matches.length || insertStop) && matches.push({
473                match: {
474                    fn: null,
475                    cardinality: 0,
476                    optionality: !0,
477                    casing: null,
478                    def: ""
479                },
480                locator: []
481            }), getMaskSet().tests[pos] = $.extend(!0, [], matches), getMaskSet().tests[pos];
482        }
483        function getBufferTemplate() {
484            return void 0 === getMaskSet()._buffer && (getMaskSet()._buffer = getMaskTemplate(!1, 1)), 
485            getMaskSet()._buffer;
486        }
487        function getBuffer(noCache) {
488            if (void 0 === getMaskSet().buffer || noCache === !0) {
489                if (noCache === !0) for (var testNdx in getMaskSet().tests) void 0 === getMaskSet().validPositions[testNdx] && delete getMaskSet().tests[testNdx];
490                getMaskSet().buffer = getMaskTemplate(!0, getLastValidPosition(), !0);
491            }
492            return getMaskSet().buffer;
493        }
494        function refreshFromBuffer(start, end, buffer) {
495            var i;
496            if (buffer = buffer, start === !0) resetMaskSet(), start = 0, end = buffer.length; else for (i = start; end > i; i++) delete getMaskSet().validPositions[i], 
497            delete getMaskSet().tests[i];
498            for (i = start; end > i; i++) resetMaskSet(!0), buffer[i] !== opts.skipOptionalPartCharacter && isValid(i, buffer[i], !0, !0);
499        }
500        function casing(elem, test) {
501            switch (test.casing) {
502              case "upper":
503                elem = elem.toUpperCase();
504                break;
505
506              case "lower":
507                elem = elem.toLowerCase();
508            }
509            return elem;
510        }
511        function checkAlternationMatch(altArr1, altArr2) {
512            for (var altArrC = opts.greedy ? altArr2 : altArr2.slice(0, 1), isMatch = !1, alndx = 0; alndx < altArr1.length; alndx++) if (-1 !== $.inArray(altArr1[alndx], altArrC)) {
513                isMatch = !0;
514                break;
515            }
516            return isMatch;
517        }
518        function isValid(pos, c, strict, fromSetValid) {
519            function isSelection(posObj) {
520                return isRTL ? posObj.begin - posObj.end > 1 || posObj.begin - posObj.end === 1 && opts.insertMode : posObj.end - posObj.begin > 1 || posObj.end - posObj.begin === 1 && opts.insertMode;
521            }
522            function _isValid(position, c, strict, fromSetValid) {
523                var rslt = !1;
524                return $.each(getTests(position), function(ndx, tst) {
525                    for (var test = tst.match, loopend = c ? 1 : 0, chrs = "", i = test.cardinality; i > loopend; i--) chrs += getBufferElement(position - (i - 1));
526                    if (c && (chrs += c), getBuffer(!0), rslt = null != test.fn ? test.fn.test(chrs, getMaskSet(), position, strict, opts, isSelection(pos)) : c !== test.def && c !== opts.skipOptionalPartCharacter || "" === test.def ? !1 : {
527                        c: test.placeholder || test.def,
528                        pos: position
529                    }, rslt !== !1) {
530                        var elem = void 0 !== rslt.c ? rslt.c : c;
531                        elem = elem === opts.skipOptionalPartCharacter && null === test.fn ? test.placeholder || test.def : elem;
532                        var validatedPos = position, possibleModifiedBuffer = getBuffer();
533                        if (void 0 !== rslt.remove && ($.isArray(rslt.remove) || (rslt.remove = [ rslt.remove ]), 
534                        $.each(rslt.remove.sort(function(a, b) {
535                            return b - a;
536                        }), function(ndx, lmnt) {
537                            stripValidPositions(lmnt, lmnt + 1, !0);
538                        })), void 0 !== rslt.insert && ($.isArray(rslt.insert) || (rslt.insert = [ rslt.insert ]), 
539                        $.each(rslt.insert.sort(function(a, b) {
540                            return a - b;
541                        }), function(ndx, lmnt) {
542                            isValid(lmnt.pos, lmnt.c, !1, fromSetValid);
543                        })), rslt.refreshFromBuffer) {
544                            var refresh = rslt.refreshFromBuffer;
545                            if (strict = !0, refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, possibleModifiedBuffer), 
546                            void 0 === rslt.pos && void 0 === rslt.c) return rslt.pos = getLastValidPosition(), 
547                            !1;
548                            if (validatedPos = void 0 !== rslt.pos ? rslt.pos : position, validatedPos !== position) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0, fromSetValid)), 
549                            !1;
550                        } else if (rslt !== !0 && void 0 !== rslt.pos && rslt.pos !== position && (validatedPos = rslt.pos, 
551                        refreshFromBuffer(position, validatedPos, getBuffer().slice()), validatedPos !== position)) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0)), 
552                        !1;
553                        return rslt !== !0 && void 0 === rslt.pos && void 0 === rslt.c ? !1 : (ndx > 0 && resetMaskSet(!0), 
554                        setValidPosition(validatedPos, $.extend({}, tst, {
555                            input: casing(elem, test)
556                        }), fromSetValid, isSelection(pos)) || (rslt = !1), !1);
557                    }
558                }), rslt;
559            }
560            function alternate(pos, c, strict, fromSetValid) {
561                for (var lastAlt, alternation, isValidRslt, altPos, i, validPos, validPsClone = $.extend(!0, {}, getMaskSet().validPositions), testsClone = $.extend(!0, {}, getMaskSet().tests), lAlt = getLastValidPosition(); lAlt >= 0 && (altPos = getMaskSet().validPositions[lAlt], 
562                !altPos || void 0 === altPos.alternation || (lastAlt = lAlt, alternation = getMaskSet().validPositions[lastAlt].alternation, 
563                getTestTemplate(lastAlt).locator[altPos.alternation] === altPos.locator[altPos.alternation])); lAlt--) ;
564                if (void 0 !== alternation) {
565                    lastAlt = parseInt(lastAlt);
566                    for (var decisionPos in getMaskSet().validPositions) if (decisionPos = parseInt(decisionPos), 
567                    altPos = getMaskSet().validPositions[decisionPos], decisionPos >= lastAlt && void 0 !== altPos.alternation) {
568                        var altNdxs;
569                        0 === lastAlt ? (altNdxs = [], $.each(getMaskSet().tests[lastAlt], function(ndx, test) {
570                            void 0 !== test.locator[alternation] && (altNdxs = altNdxs.concat(test.locator[alternation].toString().split(",")));
571                        })) : altNdxs = getMaskSet().validPositions[lastAlt].locator[alternation].toString().split(",");
572                        var decisionTaker = void 0 !== altPos.locator[alternation] ? altPos.locator[alternation] : altNdxs[0];
573                        decisionTaker.length > 0 && (decisionTaker = decisionTaker.split(",")[0]);
574                        for (var mndx = 0; mndx < altNdxs.length; mndx++) {
575                            var validInputs = [], staticInputsBeforePos = 0, staticInputsBeforePosAlternate = 0;
576                            if (decisionTaker < altNdxs[mndx]) {
577                                for (var possibilityPos, possibilities, dp = decisionPos; dp >= 0; dp--) if (possibilityPos = getMaskSet().validPositions[dp], 
578                                void 0 !== possibilityPos) {
579                                    var bestMatch = selectBestMatch(dp, altNdxs[mndx]);
580                                    getMaskSet().validPositions[dp].match.def !== bestMatch.match.def && (validInputs.push(getMaskSet().validPositions[dp].input), 
581                                    getMaskSet().validPositions[dp] = bestMatch, getMaskSet().validPositions[dp].input = getPlaceholder(dp), 
582                                    null === getMaskSet().validPositions[dp].match.fn && staticInputsBeforePosAlternate++, 
583                                    possibilityPos = bestMatch), possibilities = possibilityPos.locator[alternation], 
584                                    possibilityPos.locator[alternation] = parseInt(altNdxs[mndx]);
585                                    break;
586                                }
587                                if (decisionTaker !== possibilityPos.locator[alternation]) {
588                                    for (i = decisionPos + 1; i < getLastValidPosition(void 0, !0) + 1; i++) validPos = getMaskSet().validPositions[i], 
589                                    validPos && null != validPos.match.fn ? val
589idInputs.push(validPos.input) : pos > i && staticInputsBeforePos++, 
590                                    delete getMaskSet().validPositions[i], delete getMaskSet().tests[i];
591                                    for (resetMaskSet(!0), opts.keepStatic = !opts.keepStatic, isValidRslt = !0; validInputs.length > 0; ) {
592                                        var input = validInputs.shift();
593                                        if (input !== opts.skipOptionalPartCharacter && !(isValidRslt = isValid(getLastValidPosition(void 0, !0) + 1, input, !1, fromSetValid))) break;
594                                    }
595                                    if (possibilityPos.alternation = alternation, possibilityPos.locator[alternation] = possibilities, 
596                                    isValidRslt) {
597                                        var targetLvp = getLastValidPosition(pos) + 1;
598                                        for (i = decisionPos + 1; i < getLastValidPosition() + 1; i++) validPos = getMaskSet().validPositions[i], 
599                                        (void 0 === validPos || null == validPos.match.fn) && pos > i && staticInputsBeforePosAlternate++;
600                                        pos += staticInputsBeforePosAlternate - staticInputsBeforePos, isValidRslt = isValid(pos > targetLvp ? targetLvp : pos, c, strict, fromSetValid);
601                                    }
602                                    if (opts.keepStatic = !opts.keepStatic, isValidRslt) return isValidRslt;
603                                    resetMaskSet(), getMaskSet().validPositions = $.extend(!0, {}, validPsClone), getMaskSet().tests = $.extend(!0, {}, testsClone);
604                                }
605                            }
606                        }
607                        break;
608                    }
609                }
610                return !1;
611            }
612            function trackbackAlternations(originalPos, newPos) {
613                for (var vp = getMaskSet().validPositions[newPos], targetLocator = vp.locator, tll = targetLocator.length, ps = originalPos; newPos > ps; ps++) if (void 0 === getMaskSet().validPositions[ps] && !isMask(ps, !0)) {
614                    var tests = getTests(ps), bestMatch = tests[0], equality = -1;
615                    $.each(tests, function(ndx, tst) {
616                        for (var i = 0; tll > i && (void 0 !== tst.locator[i] && checkAlternationMatch(tst.locator[i].toString().split(","), targetLocator[i].toString().split(","))); i++) i > equality && (equality = i, 
617                        bestMatch = tst);
618                    }), setValidPosition(ps, $.extend({}, bestMatch, {
619                        input: bestMatch.match.placeholder || bestMatch.match.def
620                    }), !0);
621                }
622            }
623            strict = strict === !0;
624            var maskPos = pos;
625            void 0 !== pos.begin && (maskPos = isRTL && !isSelection(pos) ? pos.end : pos.begin);
626            for (var result = !1, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), pndx = maskPos - 1; pndx > -1 && !getMaskSet().validPositions[pndx]; pndx--) ;
627            var testTemplate;
628            for (pndx++; maskPos > pndx; pndx++) void 0 === getMaskSet().validPositions[pndx] && (opts.jitMasking === !1 || opts.jitMasking > pndx) && ((testTemplate = getTestTemplate(pndx)).match.def === opts.radixPointDefinitionSymbol || !isMask(pndx, !0) || $.inArray(opts.radixPoint, getBuffer()) < pndx && testTemplate.match.fn && testTemplate.match.fn.test(getPlaceholder(pndx), getMaskSet(), pndx, !1, opts)) && _isValid(getLastValidPosition(pndx, !0) + 1, testTemplate.match.placeholder || (null == testTemplate.match.fn ? testTemplate.match.def : "" !== getPlaceholder(pndx) ? getPlaceholder(pndx) : getBuffer()[pndx]), !0, fromSetValid);
629            if (isSelection(pos) && (handleRemove(void 0, Inputmask.keyCode.DELETE, pos), maskPos = getMaskSet().p), 
630            maskPos < getMaskLength() && (result = _isValid(maskPos, c, strict, fromSetValid), 
631            (!strict || fromSetValid === !0) && result === !1)) {
632                var currentPosValid = getMaskSet().validPositions[maskPos];
633                if (!currentPosValid || null !== currentPosValid.match.fn || currentPosValid.match.def !== c && c !== opts.skipOptionalPartCharacter) {
634                    if ((opts.insertMode || void 0 === getMaskSet().validPositions[seekNext(maskPos)]) && !isMask(maskPos, !0)) {
635                        var staticChar = getTestTemplate(maskPos).match;
636                        staticChar = staticChar.placeholder || staticChar.def, _isValid(maskPos, staticChar, strict, fromSetValid);
637                        for (var nPos = maskPos + 1, snPos = seekNext(maskPos); snPos >= nPos; nPos++) if (result = _isValid(nPos, c, strict, fromSetValid), 
638                        result !== !1) {
639                            trackbackAlternations(maskPos, nPos), maskPos = nPos;
640                            break;
641                        }
642                    }
643                } else result = {
644                    caret: seekNext(maskPos)
645                };
646            }
647            return result === !1 && opts.keepStatic && (result = alternate(maskPos, c, strict, fromSetValid)), 
648            result === !0 && (result = {
649                pos: maskPos
650            }), $.isFunction(opts.postValidation) && result !== !1 && !strict && fromSetValid !== !0 && (result = opts.postValidation(getBuffer(!0), result, opts) ? result : !1), 
651            void 0 === result.pos && (result.pos = maskPos), result === !1 && (resetMaskSet(!0), 
652            getMaskSet().validPositions = $.extend(!0, {}, positionsClone)), result;
653        }
654        function isMask(pos, strict) {
655            var test;
656            if (strict ? (test = getTestTemplate(pos).match, "" === test.def && (test = getTest(pos))) : test = getTest(pos), 
657            null != test.fn) return test.fn;
658            if (strict !== !0 && pos > -1 && !opts.keepStatic && void 0 === getMaskSet().validPositions[pos]) {
659                var tests = getTests(pos);
660                return tests.length > 2;
661            }
662            return !1;
663        }
664        function getMaskLength() {
665            var maskLength;
666            maxLength = void 0 !== el ? el.maxLength : void 0, -1 === maxLength && (maxLength = void 0);
667            var pos, lvp = getLastValidPosition(), testPos = getMaskSet().validPositions[lvp], ndxIntlzr = void 0 !== testPos ? testPos.locator.slice() : void 0;
668            for (pos = lvp + 1; void 0 === testPos || null !== testPos.match.fn || null === testPos.match.fn && "" !== testPos.match.def; pos++) testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), 
669            ndxIntlzr = testPos.locator.slice();
670            var lastTest = getTest(pos - 1);
671            return maskLength = "" !== lastTest.def ? pos : pos - 1, void 0 === maxLength || maxLength > maskLength ? maskLength : maxLength;
672        }
673        function seekNext(pos, newBlock) {
674            var maskL = getMaskLength();
675            if (pos >= maskL) return maskL;
676            for (var position = pos; ++position < maskL && (newBlock === !0 && (getTest(position).newBlockMarker !== !0 || !isMask(position)) || newBlock !== !0 && !isMask(position) && (opts.nojumps !== !0 || opts.nojumpsThreshold > position)); ) ;
677            return position;
678        }
679        function seekPrevious(pos, newBlock) {
680            var position = pos;
681            if (0 >= position) return 0;
682            for (;
vendor: 16,269 bytes, lines 682-908
682--position > 0 && (newBlock === !0 && getTest(position).newBlockMarker !== !0 || newBlock !== !0 && !isMask(position)); ) ;
683            return position;
684        }
685        function getBufferElement(position) {
686            return void 0 === getMaskSet().validPositions[position] ? getPlaceholder(position) : getMaskSet().validPositions[position].input;
687        }
688        function writeBuffer(input, buffer, caretPos, event, triggerInputEvent) {
689            if (event && $.isFunction(opts.onBeforeWrite)) {
690                var result = opts.onBeforeWrite(event, buffer, caretPos, opts);
691                if (result) {
692                    if (result.refreshFromBuffer) {
693                        var refresh = result.refreshFromBuffer;
694                        refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, result.buffer || buffer), 
695                        buffer = getBuffer(!0);
696                    }
697                    void 0 !== caretPos && (caretPos = void 0 !== result.caret ? result.caret : caretPos);
698                }
699            }
700            input.inputmask._valueSet(buffer.join("")), void 0 === caretPos || void 0 !== event && "blur" === event.type || caret(input, caretPos), 
701            triggerInputEvent === !0 && (skipInputEvent = !0, $(input).trigger("input"));
702        }
703        function getPlaceholder(pos, test) {
704            if (test = test || getTest(pos), void 0 !== test.placeholder) return test.placeholder;
705            if (null === test.fn) {
706                if (pos > -1 && !opts.keepStatic && void 0 === getMaskSet().validPositions[pos]) {
707                    var prevTest, tests = getTests(pos), staticAlternations = [];
708                    if (tests.length > 2) for (var i = 0; i < tests.length; i++) if (tests[i].match.optionality !== !0 && tests[i].match.optionalQuantifier !== !0 && (null === tests[i].match.fn || void 0 === prevTest || tests[i].match.fn.test(prevTest.match.def, getMaskSet(), pos, !0, opts) !== !1) && (staticAlternations.push(tests[i]), 
709                    null === tests[i].match.fn && (prevTest = tests[i]), staticAlternations.length > 1)) return opts.placeholder.charAt(pos % opts.placeholder.length);
710                }
711                return test.def;
712            }
713            return opts.placeholder.charAt(pos % opts.placeholder.length);
714        }
715        function checkVal(input, writeOut, strict, nptvl) {
716            function isTemplateMatch() {
717                var isMatch = !1, charCodeNdx = getBufferTemplate().slice(initialNdx, seekNext(initialNdx)).join("").indexOf(charCodes);
718                if (-1 !== charCodeNdx && !isMask(initialNdx)) {
719                    isMatch = !0;
720                    for (var bufferTemplateArr = getBufferTemplate().slice(initialNdx, initialNdx + charCodeNdx), i = 0; i < bufferTemplateArr.length; i++) if (" " !== bufferTemplateArr[i]) {
721                        isMatch = !1;
722                        break;
723                    }
724                }
725                return isMatch;
726            }
727            var result, inputValue = nptvl.slice(), charCodes = "", initialNdx = 0;
728            if (resetMaskSet(), getMaskSet().p = seekNext(-1), !strict) if (opts.autoUnmask !== !0) {
729                var staticInput = getBufferTemplate().slice(0, seekNext(-1)).join(""), matches = inputValue.join("").match(new RegExp("^" + Inputmask.escapeRegex(staticInput), "g"));
730                matches && matches.length > 0 && (inputValue.splice(0, matches.length * staticInput.length), 
731                initialNdx = seekNext(initialNdx));
732            } else initialNdx = seekNext(initialNdx);
733            $.each(inputValue, function(ndx, charCode) {
734                if (void 0 !== charCode) {
735                    var keypress = new $.Event("keypress");
736                    keypress.which = charCode.charCodeAt(0), charCodes += charCode;
737                    var lvp = getLastValidPosition(void 0, !0), lvTest = getMaskSet().validPositions[lvp], nextTest = getTestTemplate(lvp + 1, lvTest ? lvTest.locator.slice() : void 0, lvp);
738                    if (!isTemplateMatch() || strict || opts.autoUnmask) {
739                        var pos = strict ? ndx : null == nextTest.match.fn && nextTest.match.optionality && lvp + 1 < getMaskSet().p ? lvp + 1 : getMaskSet().p;
740                        result = keypressEvent.call(input, keypress, !0, !1, strict, pos), initialNdx = pos + 1, 
741                        charCodes = "";
742                    } else result = keypressEvent.call(input, keypress, !0, !1, !0, lvp + 1);
743                    if (!strict && $.isFunction(opts.onBeforeWrite) && (result = opts.onBeforeWrite(keypress, getBuffer(), result.forwardPosition, opts), 
744                    result && result.refreshFromBuffer)) {
745                        var refresh = result.refreshFromBuffer;
746                        refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, result.buffer), 
747                        resetMaskSet(!0), result.caret && (getMaskSet().p = result.caret);
748                    }
749                }
750            }), writeOut && writeBuffer(input, getBuffer(), document.activeElement === input ? seekNext(getLastValidPosition(0)) : void 0, new $.Event("checkval"));
751        }
752        function unmaskedvalue(input) {
753            if (input && void 0 === input.inputmask) return input.value;
754            var umValue = [], vps = getMaskSet().validPositions;
755            for (var pndx in vps) vps[pndx].match && null != vps[pndx].match.fn && umValue.push(vps[pndx].input);
756            var unmaskedValue = 0 === umValue.length ? null : (isRTL ? umValue.reverse() : umValue).join("");
757            if (null !== unmaskedValue) {
758                var bufferValue = (isRTL ? getBuffer().slice().reverse() : getBuffer()).join("");
759                $.isFunction(opts.onUnMask) && (unmaskedValue = opts.onUnMask(bufferValue, unmaskedValue, opts) || unmaskedValue);
760            }
761            return unmaskedValue;
762        }
763        function caret(input, begin, end, notranslate) {
764            function translatePosition(pos) {
765                if (notranslate !== !0 && isRTL && "number" == typeof pos && (!opts.greedy || "" !== opts.placeholder)) {
766                    var bffrLght = getBuffer().join("").length;
767                    pos = bffrLght - pos;
768                }
769                return pos;
770            }
771            var range;
772            if ("number" != typeof begin) return input.setSelectionRange ? (begin = input.selectionStart, 
773            end = input.selectionEnd) : window.getSelection ? (range = window.getSelection().getRangeAt(0), 
774            (range.commonAncestorContainer.parentNode === input || range.commonAncestorContainer === input) && (begin = range.startOffset, 
775            end = range.endOffset)) : document.selection && document.selection.createRange && (range = document.selection.createRange(), 
776            begin = 0 - range.duplicate().moveStart("character", -input.inputmask._valueGet().length), 
777            end = begin + range.text.length), {
778                begin: translatePosition(begin),
779                end: translatePosition(end)
780            };
781            begin = translatePosition(begin), end = translatePosition(end), end = "number" == typeof end ? end : begin;
782            var scrollCalc = parseInt(((input.ownerDocument.defaultView || window).getComputedStyle ? (input.ownerDocument.defaultView || window).getComputedStyle(input, null) : input.currentStyle).fontSize) * end;
783            if (input.scrollLeft = scrollCalc > input.scrollWidth ? scrollCalc : 0, mobile || opts.insertMode !== !1 || begin !== end || end++, 
784            input.setSelectionRange) input.selectionStart = begin, input.selectionEnd = end; else if (window.getSelection) {
785                if (range = document.createRange(), void 0 === input.firstChild || null === input.firstChild) {
786                    var textNode = document.createTextNode("");
787                    input.appendChild(textNode);
788                }
789                range.setStart(input.firstChild, begin < input.inputmask._valueGet().length ? begin : input.inputmask._valueGet().length), 
790                range.setEnd(input.firstChild, end < input.inputmask._valueGet().length ? end : input.inputmask._valueGet().length), 
791                range.collapse(!0);
792                var sel = window.getSelection();
793                sel.removeAllRanges(), sel.addRange(range);
794            } else input.createTextRange && (range = input.createTextRange(), range.collapse(!0), 
795            range.moveEnd("character", end), range.moveStart("character", begin), range.select());
796        }
797        function determineLastRequiredPosition(returnDefinition) {
798            var pos, testPos, buffer = getBuffer(), bl = buffer.length, lvp = getLastValidPosition(), positions = {}, lvTest = getMaskSet().validPositions[lvp], ndxIntlzr = void 0 !== lvTest ? lvTest.locator.slice() : void 0;
799            for (pos = lvp + 1; pos < buffer.length; pos++) testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), 
800            ndxIntlzr = testPos.locator.slice(), positions[pos] = $.extend(!0, {}, testPos);
801            var lvTestAlt = lvTest && void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation] : void 0;
802            for (pos = bl - 1; pos > lvp && (testPos = positions[pos], (testPos.match.optionality || testPos.match.optionalQuantifier || lvTestAlt && (lvTestAlt !== positions[pos].locator[lvTest.alternation] && null != testPos.match.fn || null === testPos.match.fn && testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(","), lvTestAlt.toString().split(",")) && "" !== getTests(pos)[0].def)) && buffer[pos] === getPlaceholder(pos, testPos.match)); pos--) bl--;
803            return returnDefinition ? {
804                l: bl,
805                def: positions[bl] ? positions[bl].match : void 0
806            } : bl;
807        }
808        function clearOptionalTail(buffer) {
809            for (var rl = determineLastRequiredPosition(), lmib = buffer.length - 1; lmib > rl && !isMask(lmib); lmib--) ;
810            return buffer.splice(rl, lmib + 1 - rl), buffer;
811        }
812        function isComplete(buffer) {
813            if ($.isFunction(opts.isComplete)) return opts.isComplete(buffer, opts);
814            if ("*" === opts.repeat) return void 0;
815            var complete = !1, lrp = determineLastRequiredPosition(!0), aml = seekPrevious(lrp.l);
816            if (void 0 === lrp.def || lrp.def.newBlockMarker || lrp.def.optionality || lrp.def.optionalQuantifier) {
817                complete = !0;
818                for (var i = 0; aml >= i; i++) {
819                    var test = getTestTemplate(i).match;
820                    if (null !== test.fn && void 0 === getMaskSet().validPositions[i] && test.optionality !== !0 && test.optionalQuantifier !== !0 || null === test.fn && buffer[i] !== getPlaceholder(i, test)) {
821                        complete = !1;
822                        break;
823                    }
824                }
825            }
826            return complete;
827        }
828        function patchValueProperty(npt) {
829            function patchValhook(type) {
830                if ($.valHooks && (void 0 === $.valHooks[type] || $.valHooks[type].inputmaskpatch !== !0)) {
831                    var valhookGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function(elem) {
832                        return elem.value;
833                    }, valhookSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function(elem, value) {
834                        return elem.value = value, elem;
835                    };
836                    $.valHooks[type] = {
837                        get: function(elem) {
838                            if (elem.inputmask) {
839                                if (elem.inputmask.opts.autoUnmask) return elem.inputmask.unmaskedvalue();
840                                var result = valhookGet(elem);
841                                return -1 !== getLastValidPosition(void 0, void 0, elem.inputmask.maskset.validPositions) || opts.nullable !== !0 ? result : "";
842                            }
843                            return valhookGet(elem);
844                        },
845                        set: function(elem, value) {
846                            var result, $elem = $(elem);
847                            return result = valhookSet(elem, value), elem.inputmask && $elem.trigger("setvalue"), 
848                            result;
849                        },
850                        inputmaskpatch: !0
851                    };
852                }
853            }
854            function getter() {
855                return this.inputmask ? this.inputmask.opts.autoUnmask ? this.inputmask.unmaskedvalue() : -1 !== getLastValidPosition() || opts.nullable !== !0 ? document.activeElement === this && opts.clearMaskOnLostFocus ? (isRTL ? clearOptionalTail(getBuffer().slice()).reverse() : clearOptionalTail(getBuffer().slice())).join("") : valueGet.call(this) : "" : valueGet.call(this);
856            }
857            function setter(value) {
858                valueSet.call(this, value), this.inputmask && $(this).trigger("setvalue");
859            }
860            function installNativeValueSetFallback(npt) {
861                EventRuler.on(npt, "mouseenter", function(event) {
862                    var $input = $(this), input = this, value = input.inputmask._valueGet();
863                    value !== getBuffer().join("") && $input.trigger("setvalue");
864                });
865            }
866            var valueGet, valueSet;
867            if (!npt.inputmask.__valueGet) {
868                if (Object.getOwnPropertyDescriptor) {
869                    "function" != typeof Object.getPrototypeOf && (Object.getPrototypeOf = "object" == typeof "test".__proto__ ? function(object) {
870                        return object.__proto__;
871                    } : function(object) {
872                        return object.constructor.prototype;
873                    });
874                    var valueProperty = Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(npt), "value") : void 0;
875                    valueProperty && valueProperty.get && valueProperty.set ? (valueGet = valueProperty.get, 
876                    valueSet = valueProperty.set, Object.defineProperty(npt, "value", {
877                        get: getter,
878                        set: setter,
879                        configurable: !0
880                    })) : "INPUT" !== npt.tagName && (valueGet = function() {
881                        return this.textContent;
882                    }, valueSet = function(value) {
883                        this.textContent = value;
884                    }, Object.defineProperty(npt, "value", {
885                        get: getter,
886                        set: setter,
887                        configurable: !0
888                    }));
889                } else document.__lookupGetter__ && npt.__lookupGetter__("value") && (valueGet = npt.__lookupGetter__("value"), 
890                valueSet = npt.__lookupSetter__("value"), npt.__defineGetter__("value", getter), 
891                npt.__defineSetter__("value", setter));
892                npt.inputmask.__valueGet = valueGet, npt.inputmask._valueGet = function(overruleRTL) {
893                    return isRTL && overruleRTL !== !0 ? valueGet.call(this.el).split("").reverse().join("") : valueGet.call(this.el);
894                }, npt.inputmask.__valueSet = valueSet, npt.inputmask._valueSet = function(value, overruleRTL) {
895                    valueSet.call(this.el, null === value || void 0 === value ? "" : overruleRTL !== !0 && isRTL ? value.split("").reverse().join("") : value);
896                }, void 0 === valueGet && (valueGet = function() {
897                    return this.value;
898                }, valueSet = function(value) {
899                    this.value = value;
900                }, patchValhook(npt.type), installNativeValueSetFallback(npt));
901            }
902        }
903        function handleRemove(input, k, pos, strict) {
904            function generalize() {
905                if (opts.keepStatic) {
906                    resetMaskSet(!0);
907                    var lastAlt, validInputs = [], positionsClone = $.extend(!0, {}, getMaskSet().validPositions);
908                    for (lastAlt = getLastValidPosition(); lastAlt >= 0; lastAlt--) {
909                        var validPos = getMaskSet().validPositions[lastAlt];
910                        if (validPos && (null != validPos.match.fn && validInputs.push(validPos.input), 
911                        delete getMaskSet().validPositions[lastAlt], void 0 !== validPos.alternation && validPos.locator[validPos.alternation] === getTestTemplate(lastAlt).locator[validPos.alternation])) break;
912                    }
913                    if (lastAlt > -1) for (;validInputs.length > 0; ) {
914                        getMaskSet().p = seekNext(getLastValidPosition());
915                        var keypress = new $.Event("keypress");
916                        keypress.which = validInputs.pop().charCodeAt(0), keypressEvent.call(input, keypress, !0, !1, !1, getMaskSet().p);
917                    } else getMaskSet().validPositions = $.extend(!0, {}, positionsClone);
918                }
919            }
920            if ((opts.numericInput || isRTL) && (k === Inputmask.keyCode.BACKSPACE ? k = Inputmask.keyCode.DELETE : k === Inputmask.keyCode.DELETE && (k = Inputmask.keyCode.BACKSPACE), 
921            isRTL)) {
922                var pend = pos.end;
923                pos.end = pos.begin, pos.begin = pend;
924            }
925            k === Inputmask.keyCode.BACKSPACE && (pos.end - pos.begin < 1 || opts.insertMode === !1) ? (pos.begin = seekPrevious(pos.begin), 
926            void 0 === getMaskSet().validPositions[pos.begin] || getMaskSet().validPositions[pos.begin].input !== opts.groupSeparator && getMaskSet().validPositions[pos.begin].input !== opts.radixPoint || pos.begin--) : k === Inputmask.keyCode.DELETE && pos.begin === pos.end && (pos.end = isMask(pos.end) ? pos.end + 1 : seekNext(pos.end) + 1, 
927            void 0 === getMaskSet().validPositions[pos.begin] || getMaskSet().validPositions[pos.begin].input !== opts.groupSeparator && getMaskSet().validPositions[pos.begin].input !== opts.radixPoint || pos.end++), 
928            stripValidPositions(pos.begin, pos.end, !1, strict), strict !== !0 && generalize();
929            var lvp = getLastValidPosition(pos.begin);
930            lvp < pos.begin ? (-1 === lvp && resetMaskSet(), getMaskSet().p = seekNext(lvp)) : strict !== !0 && (getMaskSet().p = pos.begin);
931        }
932        function keydownEvent(e) {
933            var input = this, $input = $(input), k = e.keyCode, pos = caret(input);
934            if (k === Inputmask.keyCode.BACKSPACE || k === Inputmask.keyCode.DELETE || iphone && k === Inputmask.keyCode.BACKSPACE_SAFARI || e.ctrlKey && k === Inputmask.keyCode.X && !isInputEventSupported("cut")) e.preventDefault(), 
935            handleRemove(input, k, pos), writeBuffer(input, getBuffer(), getMaskSet().p, e, undoValue !== getBuffer().join("")), 
936            input.inputmask._valueGet() === getBufferTemplate().join("") ? $input.trigger("cleared") : isComplete(getBuffer()) === !0 && $input.trigger("complete"), 
937            opts.showTooltip && (input.title = opts.tooltip || getMaskSet().mask); else if (k === Inputmask.keyCode.END || k === Inputmask.keyCode.PAGE_DOWN) {
938                e.preventDefault();
939                var caretPos = seekNext(getLastValidPosition());
940                opts.insertMode || caretPos !== getMaskLength() || e.shiftKey || caretPos--, caret(input, e.shiftKey ? pos.begin : caretPos, caretPos, !0);
941            } else k === Inputmask.keyCode.HOME && !e.shiftKey || k === Inputmask.keyCode.PAGE_UP ? (e.preventDefault(), 
942            caret(input, 0, e.shiftKey ? pos.begin : 0, !0)) : (opts.undoOnEscape && k === Inputmask.keyCode.ESCAPE || 90 === k && e.ctrlKey) && e.altKey !== !0 ? (checkVal(input, !0, !1, undoValue.split("")), 
943            $input.trigger("click")) : k !== Inputmask.keyCode.INSERT || e.shiftKey || e.ctrlKey ? opts.tabThrough === !0 && k === Inputmask.keyCode.TAB ? (e.shiftKey === !0 ? (null === getTest(pos.begin).fn && (pos.begin = seekNext(pos.begin)), 
944            pos.end = seekPrevious(pos.begin, !0), pos.begin = seekPrevious(pos.end, !0)) : (pos.begin = seekNext(pos.begin, !0), 
945            pos.end = seekNext(pos.begin, !0), pos.end < getMaskLength() && pos.end--), pos.begin < getMaskLength() && (e.preventDefault(), 
946            caret(input, pos.begin, pos.end))) : opts.insertMode !== !1 || e.shiftKey || (k === Inputmask.keyCode.RIGHT ? setTimeout(function() {
947                var caretPos = caret(input);
948                caret(input, caretPos.begin);
949            }, 0) : k === Inputmask.keyCode.LEFT && setTimeout(function() {
950                var caretPos = caret(input);
951                caret(input, isRTL ? caretPos.begin + 1 : caretPos.begin - 1);
952            }, 0)) : (opts.insertMode = !opts.insertMode, caret(input, opts.insertMode || pos.begin !== getMaskLength() ? pos.begin : pos.begin - 1));
953            opts.onKeyDown.call(this, e, getBuffer(), caret(input).begin, opts), ignorable = -1 !== $.inArray(k, opts.ignorables);
954        }
955        function keypressEvent(e, checkval, writeOut, strict, ndx) {
956            var input = this, $input = $(input), k = e.which || e.charCode || e.keyCode;
957            if (!(checkval === !0 || e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || ignorable)) return k === Inputmask.keyCode.ENTER && undoValue !== getBuffer().join("") && (undoValue = getBuffer().join(""), 
958            setTimeout(function() {
959                $input.trigger("change");
960            }, 0)), !0;
961            if (k) {
962                46 === k && e.shiftKey === !1 && "," === opts.radixPoint && (k = 44);
963                var forwardPosition, pos = checkval ? {
964                    begin: ndx,
965                    end: ndx
966                } : caret(input), c = String.fromCharCode(k);
967                getMaskSet().writeOutBuffer = !0;
968                var valResult = isValid(pos, c, strict);
969                if (valResult !== !1) {
970                    var p = valResult.pos;
971                    if (resetMaskSet(!0), void 0 !== valResult.caret) forwardPosition = valResult.caret; else {
972                        var vps = getMaskSet().validPositions;
973                        forwardPosition = !opts.keepStatic && (void 0 !== vps[p + 1] && getTests(p + 1, vps[p].locator.slice(), p).length > 1 || void 0 !== vps[p].alternation) ? p + 1 : seekNext(p);
974                    }
975                    getMaskSet().p = forwardPosition;
976                }
977                if (writeOut !== !1) {
978                    var self = this;
979                    if (setTimeout(function() {
980                        opts.onKeyValidation.call(self, k, valResult, opts);
981                    }, 0), getMaskSet().writeOutBuffer && valResult !== !1) {
982                        var buffer = getBuffer();
983                        writeBuffer(input, buffer, opts.numericInput && void 0 === valResult.caret ? seekPrevious(forwardPosition) : forwardPosition, e, checkval !== !0), 
984                        checkval !== !0 && setTimeout(function() {
985                            isComplete(buffer) === !0 && $input.trigger("complete");
986                        }, 0);
987                    }
988                }
989                if (opts.showTooltip && (input.title = opts.tooltip || getMaskSet().mask), e.preventDefault(), 
990                checkval) return valResult.forwardPosition = forwardPosition, valResult;
991            }
992        }
993        function pasteEvent(e) {
994            var tempValue, input = this, ev = e.originalEvent || e, $input = $(input), inputValue = input.inputmask._valueGet(!0), caretPos = caret(input);
995            isRTL && (tempValue = caretPos.end, caretPos.end = caretPos.begin, caretPos.begin = tempValue);
996            var valueBeforeCaret = inputValue.substr(0, caretPos.begin), valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length);
997            valueBeforeCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(0, caretPos.begin).join("") && (valueBeforeCaret = ""), 
998            valueAfterCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(caretPos.end).join("") && (valueAfterCaret = ""), 
999            isRTL && (tempValue = valueBeforeCaret, valueBeforeCaret = valueAfterCaret, valueAfterCaret = tempValue), 
1000            window.clipboardData && window.clipboardData.getData ? inputValue = valueBeforeCaret + window.clipboardData.getData("Text") + valueAfterCaret : ev.clipboardData && ev.clipboardData.getData && (inputValue = valueBeforeCaret + ev.clipboardData.getData("text/plain") + valueAfterCaret);
1001            var pasteValue = inputValue;
1002            if ($.isFunction(opts.onBeforePaste)) {
1003                if (pasteValue = opts.onBeforePaste(inputValue, opts), pasteValue === !1) return e.preventDefault();
1004                pasteValue || (pasteValue = inputValue);
1005            }
1006            return checkVal(input, !1, !1, isRTL ? pasteValue.split("").reverse() : pasteValue.toString().split("")), 
1007            writeBuffer(input, getBuffer(), seekNext(getLastValidPosition()), e, !0), isComplete(getBuffer()) === !0 && $input.trigger("complete"), 
1008            e.preventDefault();
1009        }
1010        function inputFallBackEvent(e) {
1011            var input = this, inputValue = input.inputmask._valueGet();
1012            if (getBuffer().join("") !== inputValue) {
1013                var caretPos = caret(input);
1014                if (inputValue = inputValue.replace(new RegExp("(" + Inputmask.escapeRegex(getBufferTemplate().join("")) + ")*"), ""), 
1015                iemobile) {
1016                    var inputChar = inputValue.replace(getBuffer().join(""), "");
1017                    if (1 === inputChar.length) {
1018                        var keypress = new $.Event("keypress");
1019                        return keypress.which = inputChar.charCodeAt(0), keypressEvent.call(input, keypress, !0, !0, !1, getMaskSet().validPositions[caretPos.begin - 1] ? caretPos.begin : caretPos.begin - 1), 
1020                        !1;
1021                    }
1022                }
1023                if (caretPos.begin > inputValue.length && (caret(input, inputValue.length), caretPos = caret(input)), 
1024                getBuffer().length - inputValue.length !== 1 || inputValue.charAt(caretPos.begin) === getBuffer()[caretPos.begin] || inputValue.charAt(caretPos.begin + 1) === getBuffer()[caretPos.begin] || isMask(caretPos.begin)) {
1025                    for (var lvp = getLastValidPosition() + 1, bufferTemplate = getBuffer().slice(lvp).join(""); null === inputValue.match(Inputmask.escapeRegex(bufferTemplate) + "$"); ) bufferTemplate = bufferTemplate.slice(1);
1026                    inputValue = inputValue.replace(bufferTemplate, ""), inputValue = inputValue.split(""), 
1027                    checkVal(input, !0, !1, inputValue), isComplete(getBuffer()) === !0 && $(input).trigger("complete");
1028                } else e.keyCode = Inputmask.keyCode.BACKSPACE, keydownEvent.call(input, e);
1029                e.preventDefault();
1030            }
1031        }
1032        function setValueEvent(e) {
1033            var input = this, value = input.inputmask._valueGet();
1034            checkVal(input, !0, !1, ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(value, opts) || value : value).split("")), 
1035            undoValue = getBuffer().join(""), (opts.clearMaskOnLostFocus || opts.clearIncomplete) && input.inputmask._valueGet() === getBufferTemplate().join("") && input.inputmask._valueSet("");
1036        }
1037        function focusEvent(e) {
1038            var input = this, nptValue = input.inputmask._valueGet();
1039            opts.showMaskOnFocus && (!opts.showMaskOnHover || opts.showMaskOnHover && "" === nptValue) ? input.inputmask._valueGet() !== getBuffer().join("") && writeBuffer(input, getBuffer(), seekNext(getLastValidPosition())) : mouseEnter === !1 && caret(input, seekNext(getLastValidPosition())), 
1040            opts.positionCaretOnTab === !0 && setTimeout(function() {
1041                caret(input, seekNext(getLastValidPosition()));
1042            }, 0), undoValue = getBuffer().join("");
1043        }
1044        function mouseleaveEvent(e) {
1045            var input = this;
1046            if (mouseEnter = !1, opts.clearMaskOnLostFocus && document.activeElement !== input) {
1047                var buffer = getBuffer().slice(), nptValue = input.inputmask._valueGet();
1048                nptValue !== input.getAttribute("placeholder") && "" !== nptValue && (-1 === getLastValidPosition() && nptValue === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer), 
1049                writeBuffer(input, buffer));
1050            }
1051        }
1052        function clickEvent(e) {
1053            function doRadixFocus(clickPos) {
1054                if (opts.radixFocus && "" !== opts.radixPoint) {
1055                    var vps = getMaskSet().validPositions;
1056                    if (void 0 === vps[clickPos] || vps[clickPos].input === getPlaceholder(clickPos)) {
1057                        if (clickPos < seekNext(-1)) return !0;
1058                        var radixPos = $.inArray(opts.radixPoint, getBuffer());
1059                        if (-1 !== radixPos) {
1060                            for (var vp in vps) if (vp > radixPos && vps[vp].input !== getPlaceholder(vp)) return !1;
1061                            return !0;
1062                        }
1063                    }
1064                }
1065                return !1;
1066            }
1067            var input = this;
1068            setTimeout(function() {
1069                if (document.activeElement === input) {
1070                    var selectedCaret = caret(input);
1071                    if (selectedCaret.begin === selectedCaret.end) if (doRadixFocus(selectedCaret.begin)) caret(input, opts.numericInput ? seekNext($.inArray(opts.radixPoint, getBuffer())) : $.inArray(opts.radixPoint, getBuffer())); else {
1072                        var clickPosition = selectedCaret.begin, lvclickPosition = getLastValidPosition(clickPosition, !0), lastPosition = seekNext(lvclickPosition);
1073                        if (lastPosition > clickPosition) caret(input, isMask(clickPosition) || isMask(clickPosition - 1) ? clickPosition : seekNext(clickPosition)); else {
1074                            var placeholder = getPlaceholder(lastPosition);
1075                            ("" !== placeholder && getBuffer()[lastPosition] !== placeholder || !isMask(lastPosition, !0) && getTest(lastPosition).def === placeholder) && (lastPosition = seekNext(lastPosition)), 
1076                            caret(input, lastPosition);
1077                        }
1078                    }
1079                }
1080            }, 0);
1081        }
1082        function dblclickEvent(e) {
1083            var input = this;
1084            setTimeout(function() {
1085                caret(input, 0, seekNext(getLastValidPosition()));
1086            }, 0);
1087        }
1088        function cutEvent(e) {
1089            var input = this, $input = $(input), pos = caret(input), ev = e.originalEvent || e, clipboardData = window.clipboardData || ev.clipboardData, clipData = isRTL ? getBuffer().slice(pos.end, pos.begin) : getBuffer().slice(pos.begin, pos.end);
1090            clipboardData.setData("text", isRTL ? clipData.reverse().join("") : clip
1090Data.join("")), 
1091            document.execCommand && document.execCommand("copy"), handleRemove(input, Inputmask.keyCode.DELETE, pos), 
1092            writeBuffer(input, getBuffer(), getMaskSet().p, e, undoValue !== getBuffer().join("")), 
1093            input.inputmask._valueGet() === getBufferTemplate().join("") && $input.trigger("cleared"), 
1094            opts.showTooltip && (input.title = opts.tooltip || getMaskSet().mask);
1095        }
1096        function blurEvent(e) {
1097            var $input = $(this), input = this;
1098            if (input.inputmask) {
1099                var nptValue = input.inputmask._valueGet(), buffer = getBuffer().slice();
1100                undoValue !== buffer.join("") && setTimeout(function() {
1101                    $input.trigger("change"), undoValue = buffer.join("");
1102                }, 0), "" !== nptValue && (opts.clearMaskOnLostFocus && (-1 === getLastValidPosition() && nptValue === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer)), 
1103                isComplete(buffer) === !1 && (setTimeout(function() {
1104                    $input.trigger("incomplete");
1105                }, 0), opts.clearIncomplete && (resetMaskSet(), buffer = opts.clearMaskOnLostFocus ? [] : getBufferTemplate().slice())), 
1106                writeBuffer(input, buffer, void 0, e));
1107            }
1108        }
1109        function mouseenterEvent(e) {
1110            var input = this;
1111            mouseEnter = !0, document.activeElement !== input && opts.showMaskOnHover && input.inputmask._valueGet() !== getBuffer().join("") && writeBuffer(input, getBuffer());
1112        }
1113        function submitEvent(e) {
1114            undoValue !== getBuffer().join("") && $el.trigger("change"), opts.clearMaskOnLostFocus && -1 === getLastValidPosition() && el.inputmask._valueGet && el.inputmask._valueGet() === getBufferTemplate().join("") && el.inputmask._valueSet(""), 
1115            opts.removeMaskOnSubmit && (el.inputmask._valueSet(el.inputmask.unmaskedvalue(), !0), 
1116            setTimeout(function() {
1117                writeBuffer(el, getBuffer());
1118            }, 0));
1119        }
1120        function resetEvent(e) {
1121            setTimeout(function() {
1122                $el.trigger("setvalue");
1123            }, 0);
1124        }
1125        function mask(elem) {
1126            if (el = elem, $el = $(el), opts.showTooltip && (el.title = opts.tooltip || getMaskSet().mask), 
1127            ("rtl" === el.dir || opts.rightAlign) && (el.style.textAlign = "right"), ("rtl" === el.dir || opts.numericInput) && (el.dir = "ltr", 
1128            el.removeAttribute("dir"), el.inputmask.isRTL = !0, isRTL = !0), EventRuler.off(el), 
1129            patchValueProperty(el), isElementTypeSupported(el, opts) && (EventRuler.on(el, "submit", submitEvent), 
1130            EventRuler.on(el, "reset", resetEvent), EventRuler.on(el, "mouseenter", mouseenterEvent), 
1131            EventRuler.on(el, "blur", blurEvent), EventRuler.on(el, "focus", focusEvent), EventRuler.on(el, "mouseleave", mouseleaveEvent), 
1132            EventRuler.on(el, "click", clickEvent), EventRuler.on(el, "dblclick", dblclickEvent), 
1133            EventRuler.on(el, "paste", pasteEvent), EventRuler.on(el, "dragdrop", pasteEvent), 
1134            EventRuler.on(el, "drop", pasteEvent), EventRuler.on(el, "cut", cutEvent), EventRuler.on(el, "complete", opts.oncomplete), 
1135            EventRuler.on(el, "incomplete", opts.onincomplete), EventRuler.on(el, "cleared", opts.oncleared), 
1136            EventRuler.on(el, "keydown", keydownEvent), EventRuler.on(el, "keypress", keypressEvent), 
1137            EventRuler.on(el, "input", inputFallBackEvent)), EventRuler.on(el, "setvalue", setValueEvent), 
1138            "" !== el.inputmask._valueGet() || opts.clearMaskOnLostFocus === !1 || document.activeElement === el) {
1139                var initialValue = $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(el.inputmask._valueGet(), opts) || el.inputmask._valueGet() : el.inputmask._valueGet();
1140                checkVal(el, !0, !1, initialValue.split(""));
1141                var buffer = getBuffer().slice();
1142                undoValue = buffer.join(""), isComplete(buffer) === !1 && opts.clearIncomplete && resetMaskSet(), 
1143                opts.clearMaskOnLostFocus && document.activeElement !== el && (-1 === getLastValidPosition() ? buffer = [] : clearOptionalTail(buffer)), 
1144                writeBuffer(el, buffer), document.activeElement === el && caret(el, seekNext(getLastValidPosition()));
1145            }
1146        }
1147        var undoValue, el, $el, maxLength, valueBuffer, isRTL = !1, skipKeyPressEvent = !1, skipInputEvent = !1, ignorable = !1, mouseEnter = !0, EventRuler = {
1148            on: function(input, eventName, eventHandler) {
1149                var ev = function(e) {
1150                    if (void 0 === this.inputmask && "FORM" !== this.nodeName) {
1151                        var imOpts = $.data(this, "_inputmask_opts");
1152                        imOpts ? new Inputmask(imOpts).mask(this) : EventRuler.off(this);
1153                    } else {
1154                        if ("setvalue" === e.type || !(this.disabled || this.readOnly && !("keydown" === e.type && e.ctrlKey && 67 === e.keyCode || opts.tabThrough === !1 && e.keyCode === Inputmask.keyCode.TAB))) {
1155                            switch (e.type) {
1156                              case "input":
1157                                if (skipInputEvent === !0) return skipInputEvent = !1, e.preventDefault();
1158                                break;
1159
1160                              case "keydown":
1161                                skipKeyPressEvent = !1, skipInputEvent = !1;
1162                                break;
1163
1164                              case "keypress":
1165                                if (skipKeyPressEvent === !0) return e.preventDefault();
1166                                skipKeyPressEvent = !0;
1167                                break;
1168
1169                              case "click":
1170                                if (iemobile) {
1171                                    var that = this;
1172                                    return setTimeout(function() {
1173                                        eventHandler.apply(that, arguments);
1174                                    }, 0), !1;
1175                                }
1176                            }
1177                            var returnVal = eventHandler.apply(this, arguments);
1178                            return returnVal === !1 && (e.preventDefault(), e.stopPropagation()), returnVal;
1179                        }
1180                        e.preventDefault();
1181                    }
1182                };
1183                input.inputmask.events[eventName] = input.inputmask.events[eventName] || [], input.inputmask.events[eventName].push(ev), 
1184                -1 !== $.inArray(eventName, [ "submit", "reset" ]) ? null != input.form && $(input.form).bind(eventName, ev) : $(input).bind(eventName, ev);
1185            },
1186            off: function(input, event) {
1187                if (input.inputmask && input.inputmask.events) {
1188                    var events;
1189                    event ? (events = [], events[event] = input.inputmask.events[event]) : events = input.inputmask.events, 
1190                    $.each(events, function(eventName, evArr) {
1191                        for (;evArr.length > 0; ) {
1192                            var ev = evArr.pop();
1193                            -1 !== $.inArray(eventName, [ "submit", "reset" ]) ? null != input.form && $(input.form).unbind(eventName, ev) : $(input).unbind(eventName, ev);
1194                        }
1195                        delete input.inputmask.events[eventName];
1196                    });
1197                }
1198            }
1199        };
1200        if (void 0 !== actionObj) switch (actionObj.action) {
1201          case "isComplete":
1202            return el = actionObj.el, isComplete(getBuffer());
1203
1204          case "unmaskedvalue":
1205            return el = actionObj.el, void 0 !== el && void 0 !== el.inputmask ? (maskset = el.inputmask.maskset, 
1206            opts = el.inputmask.opts, isRTL = el.inputmask.isRTL) : (valueBuffer = actionObj.value, 
1207            opts.numericInput && (isRTL = !0), valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(valueBuffer, opts) || valueBuffer : valueBuffer).split(""), 
1208            checkVal(void 0, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite(void 0, getBuffer(), 0, opts)), 
1209            unmaskedvalue(el);
1210
1211          case "mask":
1212            el = actionObj.el, maskset = el.inputmask.maskset, opts = el.inputmask.opts, isRTL = el.inputmask.isRTL, 
1213            undoValue = getBuffer().join(""), mask(el);
1214            break;
1215
1216          case "format":
1217            return opts.numericInput && (isRTL = !0), valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(actionObj.value, opts) || actionObj.value : actionObj.value).split(""), 
1218            checkVal(void 0, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite(void 0, getBuffer(), 0, opts), 
1219            actionObj.metadata ? {
1220                value: isRTL ? getBuffer().slice().reverse().join("") : getBuffer().join(""),
1221                metadata: maskScope({
1222                    action: "getmetadata"
1223                }, maskset, opts)
1224            } : isRTL ? getBuffer().slice().reverse().join("") : getBuffer().join("");
1225
1226          case "isValid":
1227            opts.numericInput && (isRTL = !0), actionObj.value ? (valueBuffer = actionObj.value.split(""), 
1228            checkVal(void 0, !1, !0, isRTL ? valueBuffer.reverse() : valueBuffer)) : actionObj.value = getBuffer().join("");
1229            for (var buffer = getBuffer(), rl = determineLastRequiredPosition(), lmib = buffer.length - 1; lmib > rl && !isMask(lmib); lmib--) ;
1230            return buffer.splice(rl, lmib + 1 - rl), isComplete(buffer) && actionObj.value === getBuffer().join("");
1231
1232          case "getemptymask":
1233            return getBufferTemplate().join("");
1234
1235          case "remove":
1236            el = actionObj.el, $el = $(el), maskset = el.inputmask.maskset, opts = el.inputmask.opts, 
1237            el.inputmask._valueSet(unmaskedvalue(el)), EventRuler.off(el);
1238            var valueProperty;
1239            Object.getOwnPropertyDescriptor && Object.getPrototypeOf ? (valueProperty = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(el), "value"), 
1240            valueProperty && el.inputmask.__valueGet && Object.defineProperty(el, "value", {
1241                get: el.inputmask.__valueGet,
1242                set: el.inputmask.__valueSet,
1243                configurable: !0
1244            })) : document.__lookupGetter__ && el.__lookupGetter__("value") && el.inputmask.__valueGet && (el.__defineGetter__("value", el.inputmask.__valueGet), 
1245            el.__defineSetter__("value", el.inputmask.__valueSet)), el.inputmask = void 0;
1246            break;
1247
1248          case "getmetadata":
1249            if ($.isArray(maskset.metadata)) {
1250                for (var alternation, lvp = getLastValidPosition(void 0, !0), firstAlt = lvp; firstAlt >= 0; firstAlt--) if (getMaskSet().validPositions[firstAlt] && void 0 !== getMaskSet().validPositions[firstAlt].alternation) {
1251                    alternation = getMaskSet().validPositions[firstAlt].alternation;
1252                    break;
1253                }
1254                return void 0 !== alternation ? maskset.metadata[getMaskSet().validPositions[firstAlt].locator[alternation]] : [];
1255            }
1256            return maskset.metadata;
1257        }
1258    }
1259    Inputmask.prototype = {
1260        defaults: {
1261            placeholder: "_",
1262            optionalmarker: {
1263                start: "[",
1264                end: "]"
1265            },
1266            quantifiermarker: {
1267                start: "{",
1268                end: "}"
1269            },
1270            groupmarker: {
1271                start: "(",
1272                end: ")"
1273            },
1274            alternatormarker: "|",
1275            escapeChar: "\\",
1276            mask: null,
1277            oncomplete: $.noop,
1278            onincomplete: $.noop,
1279            oncleared: $.noop,
1280            repeat: 0,
1281            greedy: !0,
1282            autoUnmask: !1,
1283            removeMaskOnSubmit: !1,
1284            clearMaskOnLostFocus: !0,
1285            insertMode: !0,
1286            clearIncomplete: !1,
1287            aliases: {},
1288            alias: null,
1289            onKeyDown: $.noop,
1290            onBeforeMask: null,
1291            onBeforePaste: function(pastedValue, opts) {
1292                return $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(pastedValue, opts) : pastedValue;
1293            },
1294            onBeforeWrite: null,
1295            onUnMask: null,
1296            showMaskOnFocus: !0,
1297            showMaskOnHover: !0,
1298            onKeyValidation: $.noop,
1299            skipOptionalPartCharacter: " ",
1300            showTooltip: !1,
1301            tooltip: void 0,
1302            numericInput: !1,
1303            rightAlign: !1,
1304            undoOnEscape: !0,
1305            radixPoint: "",
1306            radixPointDefinitionSymbol: void 0,
1307            groupSeparator: "",
1308            radixFocus: !1,
1309            nojumps: !1,
1310            nojumpsThreshold: 0,
1311            keepStatic: null,
1312            positionCaretOnTab: !1,
1313            tabThrough: !1,
1314            supportsInputType: [ "text", "tel", "password" ],
1315            definitions: {
1316                "9": {
1317                    validator: "[0-9]",
1318                    cardinality: 1,
1319                    definitionSymbol: "*"
1320                },
1321                a: {
1322                    validator: "[A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",
1323                    cardinality: 1,
1324                    definitionSymbol: "*"
1325                },
1326                "*": {
1327                    validator: "[0-9A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",
1328                    cardinality: 1
1329                }
1330            },
1331            ignorables: [ 8, 9, 13, 19, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123 ],
1332            isComplete: null,
1333            canClearPosition: $.noop,
1334            postValidation: null,
1335            staticDefinitionSymbol: void 0,
1336            jitMasking: !1,
1337            nullable: !0
1338        },
1339        masksCache: {},
1340        mask: function(elems) {
1341            var that = this;
1342            return "string" == typeof elems && (elems = document.getElementById(elems) || document.querySelectorAll(elems)), 
1343            elems = elems.nodeName ? [ elems ] : elems, $.each(elems, function(ndx, el) {
1344                var scopedOpts = $.extend(!0, {}, that.opts);
1345                importAttributeOptions(el, scopedOpts, $.extend(!0, {}, that.userOptions));
1346                var maskset = generateMaskSet(scopedOpts, that.noMasksCache);
1347                void 0 !== maskset && (void 0 !== el.inputmask && el.inputmask.remove(), el.inputmask = new Inputmask(), 
1348                el.inputmask.opts = scopedOpts, el.inputmask.noMasksCache = that.noMasksCache, el.
1348inputmask.userOptions = $.extend(!0, {}, that.userOptions), 
1349                el.inputmask.el = el, el.inputmask.maskset = maskset, el.inputmask.isRTL = !1, $.data(el, "_inputmask_opts", scopedOpts), 
1350                maskScope({
1351                    action: "mask",
1352                    el: el
1353                }));
1354            }), elems && elems[0] ? elems[0].inputmask || this : this;
1355        },
1356        option: function(options, noremask) {
1357            return "string" == typeof options ? this.opts[options] : "object" == typeof options ? ($.extend(this.userOptions, options), 
1358            this.el && noremask !== !0 && this.mask(this.el), this) : void 0;
1359        },
1360        unmaskedvalue: function(value) {
1361            return maskScope({
1362                action: "unmaskedvalue",
1363                el: this.el,
1364                value: value
1365            }, this.el && this.el.inputmask ? this.el.inputmask.maskset : generateMaskSet(this.opts, this.noMasksCache), this.opts);
1366        },
1367        remove: function() {
1368            return this.el ? (maskScope({
1369                action: "remove",
1370                el: this.el
1371            }), this.el.inputmask = void 0, this.el) : void 0;
1372        },
1373        getemptymask: function() {
1374            return maskScope({
1375                action: "getemptymask"
1376            }, this.maskset || generateMaskSet(this.opts, this.noMasksCache), this.opts);
1377        },
1378        hasMaskedValue: function() {
1379            return !this.opts.autoUnmask;
1380        },
1381        isComplete: function() {
1382            return maskScope({
1383                action: "isComplete",
1384                el: this.el
1385            }, this.maskset || generateMaskSet(this.opts, this.noMasksCache), this.opts);
1386        },
1387        getmetadata: function() {
1388            return maskScope({
1389                action: "getmetadata"
1390            }, this.maskset || generateMaskSet(this.opts, this.noMasksCache), this.opts);
1391        },
1392        isValid: function(value) {
1393            return maskScope({
1394                action: "isValid",
1395                value: value
1396            }, this.maskset || generateMaskSet(this.opts, this.noMasksCache), this.opts);
1397        },
1398        format: function(value, metadata) {
1399            return maskScope({
1400                action: "format",
1401                value: value,
1402                metadata: metadata
1403            }, this.maskset || generateMaskSet(this.opts, this.noMasksCache), this.opts);
1404        }
1405    }, Inputmask.extendDefaults = function(options) {
1406        $.extend(!0, Inputmask.prototype.defaults, options);
1407    }, Inputmask.extendDefinitions = function(definition) {
1408        $.extend(!0, Inputmask.prototype.defaults.definitions, definition);
1409    }, Inputmask.extendAliases = function(alias) {
1410        $.extend(!0, Inputmask.prototype.defaults.aliases, alias);
1411    }, Inputmask.format = function(value, options, metadata) {
1412        return Inputmask(options).format(value, metadata);
1413    }, Inputmask.unmask = function(value, options) {
1414        return Inputmask(options).unmaskedvalue(value);
1415    }, Inputmask.isValid = function(value, options) {
1416        return Inputmask(options).isValid(value);
1417    }, Inputmask.remove = function(elems) {
1418        $.each(elems, function(ndx, el) {
1419            el.inputmask && el.inputmask.remove();
1420        });
1421    }, Inputmask.escapeRegex = function(str) {
1422        var specials = [ "/", ".", "*", "+", "?", "|", "(", ")", "[", "]", "{", "}", "\\", "$", "^" ];
1423        return str.replace(new RegExp("(\\" + specials.join("|\\") + ")", "gim"), "\\$1");
1424    }, Inputmask.keyCode = {
1425        ALT: 18,
1426        BACKSPACE: 8,
1427        BACKSPACE_SAFARI: 127,
1428        CAPS_LOCK: 20,
1429        COMMA: 188,
1430        COMMAND: 91,
1431        COMMAND_LEFT: 91,
1432        COMMAND_RIGHT: 93,
1433        CONTROL: 17,
1434        DELETE: 46,
1435        DOWN: 40,
1436        END: 35,
1437        ENTER: 13,
1438        ESCAPE: 27,
1439        HOME: 36,
1440        INSERT: 45,
1441        LEFT: 37,
1442        MENU: 93,
1443        NUMPAD_ADD: 107,
1444        NUMPAD_DECIMAL: 110,
1445        NUMPAD_DIVIDE: 111,
1446        NUMPAD_ENTER: 108,
1447        NUMPAD_MULTIPLY: 106,
1448        NUMPAD_SUBTRACT: 109,
1449        PAGE_DOWN: 34,
1450        PAGE_UP: 33,
1451        PERIOD: 190,
1452        RIGHT: 39,
1453        SHIFT: 16,
1454        SPACE: 32,
1455        TAB: 9,
1456        UP: 38,
1457        WINDOWS: 91,
1458        X: 88
1459    };
1460    var ua = navigator.userAgent, mobile = /mobile/i.test(ua), iemobile = /iemobile/i.test(ua), iphone = /iphone/i.test(ua) && !iemobile;
1461    /android.*safari.*/i.test(ua) && !iemobile;
1462    return window.Inputmask = Inputmask, Inputmask;
1463}(gKweri), function($, Inputmask) {
1464    return void 0 === $.fn.inputmask && ($.fn.inputmask = function(fn, options) {
1465        var nptmask, input = this[0];
1466        if (void 0 === options && (options = {}), "string" == typeof fn) switch (fn) {
1467          case "unmaskedvalue":
1468            return input && input.inputmask ? input.inputmask.unmaskedvalue() : $(input).val();
1469
1470          case "remove":
1471            return this.each(function() {
1472                this.inputmask && this.inputmask.remove();
1473            });
1474
1475          case "getemptymask":
1476            return input && input.inputmask ? input.inputmask.getemptymask() : "";
1477
1478          case "hasMaskedValue":
1479            return input && input.inputmask ? input.inputmask.hasMaskedValue() : !1;
1480
1481          case "isComplete":
1482            return input && input.inputmask ? input.inputmask.isComplete() : !0;
1483
1484          case "getmetadata":
1485            return input && input.inputmask ? input.inputmask.getmetadata() : void 0;
1486
1487          case "setvalue":
1488            $(input).val(options), input && void 0 !== input.inputmask && $(input).triggerHandler("setvalue");
1489            break;
1490
1491          case "option":
1492            if ("string" != typeof options) return this.each(function() {
1493                return void 0 !== this.inputmask ? this.inputmask.option(options) : void 0;
1494            });
1495            if (input && void 0 !== input.inputmask) return input.inputmask.option(options);
1496            break;
1497
1498          default:
1499            return options.alias = fn, nptmask = new Inputmask(options), this.each(function() {
1500                nptmask.mask(this);
1501            });
1502        } else {
1503            if ("object" == typeof fn) return nptmask = new Inputmask(fn), void 0 === fn.mask && void 0 === fn.alias ? this.each(function() {
1504                return void 0 !== this.inputmask ? this.inputmask.option(fn) : void nptmask.mask(this);
1505            }) : this.each(function() {
1506                nptmask.mask(this);
1507            });
1508            if (void 0 === fn) return this.each(function() {
1509                nptmask = new Inputmask(options), nptmask.mask(this);
1510            });
1511        }
1512    }), $.fn.inputmask;
1513}(gKweri, Inputmask), function($, Inputmask) {
1514    return Inputmask.extendDefinitions({
1515        h: {
1516            validator: "[01][0-9]|2[0-3]",
1517            cardinality: 2,
1518            prevalidator: [ {
1519                validator: "[0-2]",
1520                cardinality: 1
1521            } ]
1522        },
1523        s: {
1524            validator: "[0-5][0-9]",
1525            cardinality: 2,
1526            prevalidator: [ {
1527                validator: "[0-5]",
1528                cardinality: 1
1529            } ]
1530        },
1531        d: {
1532            validator: "0[1-9]|[12][0-9]|3[01]",
1533            cardinality: 2,
1534            prevalidator: [ {
1535                validator: "[0-3]",
1536                cardinality: 1
1537            } ]
1538        },
1539        m: {
1540            validator: "0[1-9]|1[012]",
1541            cardinality: 2,
1542            prevalidator: [ {
1543                validator: "[01]",
1544                cardinality: 1
1545            } ]
1546        },
1547        y: {
1548            validator: "(19|20)\\d{2}",
1549            cardinality: 4,
1550            prevalidator: [ {
1551                validator: "[12]",
1552                cardinality: 1
1553            }, {
1554                validator: "(19|20)",
1555                cardinality: 2
1556            }, {
1557                validator: "(19|20)\\d",
1558                cardinality: 3
1559            } ]
1560        }
1561    }), Inputmask.extendAliases({
1562        "dd/mm/yyyy": {
1563            mask: "1/2/y",
1564            placeholder: "dd/mm/yyyy",
1565            regex: {
1566                val1pre: new RegExp("[0-3]"),
1567                val1: new RegExp("0[1-9]|[12][0-9]|3[01]"),
1568                val2pre: function(separator) {
1569                    var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
1570                    return new RegExp("((0[1-9]|[12][0-9]|3[01])" + escapedSeparator + "[01])");
1571                },
1572                val2: function(separator) {
1573                    var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
1574                    return new RegExp("((0[1-9]|[12][0-9])" + escapedSeparator + "(0[1-9]|1[012]))|(30" + escapedSeparator + "(0[13-9]|1[012]))|(31" + escapedSeparator + "(0[13578]|1[02]))");
1575                }
1576            },
1577            leapday: "29/02/",
1578            separator: "/",
1579            yearrange: {
1580                minyear: 1900,
1581                maxyear: 2099
1582            },
1583            isInYearRange: function(chrs, minyear, maxyear) {
1584                if (isNaN(chrs)) return !1;
1585                var enteredyear = parseInt(chrs.concat(minyear.toString().slice(chrs.length))), enteredyear2 = parseInt(chrs.concat(maxyear.toString().slice(chrs.length)));
1586                return (isNaN(enteredyear) ? !1 : enteredyear >= minyear && maxyear >= enteredyear) || (isNaN(enteredyear2) ? !1 : enteredyear2 >= minyear && maxyear >= enteredyear2);
1587            },
1588            determinebaseyear: function(minyear, maxyear, hint) {
1589                var currentyear = new Date().getFullYear();
1590                if (minyear > currentyear) return minyear;
1591                if (currentyear > maxyear) {
1592                    for (var maxYearPrefix = maxyear.toString().slice(0, 2), maxYearPostfix = maxyear.toString().slice(2, 4); maxYearPrefix + hint > maxyear; ) maxYearPrefix--;
1593                    var maxxYear = maxYearPrefix + maxYearPostfix;
1594                    return minyear > maxxYear ? minyear : maxxYear;
1595                }
1596                if (currentyear >= minyear && maxyear >= currentyear) {
1597                    for (var currentYearPrefix = currentyear.toString().slice(0, 2); currentYearPrefix + hint > maxyear; ) currentYearPrefix--;
1598                    var currentYearAndHint = currentYearPrefix + hint;
1599                    return minyear > currentYearAndHint ? minyear : currentYearAndHint;
1600                }
1601                return currentyear;
1602            },
1603            onKeyDown: function(e, buffer, caretPos, opts) {
1604                var $input = $(this);
1605                if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
1606                    var today = new Date();
1607                    $input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString()), 
1608                    $input.trigger("setvalue");
1609                }
1610            },
1611            getFrontValue: function(mask, buffer, opts) {
1612                for (var start = 0, length = 0, i = 0; i < mask.length && "2" !== mask.charAt(i); i++) {
1613                    var definition = opts.definitions[mask.charAt(i)];
1614                    definition ? (start += length, length = definition.cardinality) : length++;
1615                }
1616                return buffer.join("").substr(start, length);
1617            },
1618            definitions: {
1619                "1": {
1620                    validator: function(chrs, maskset, pos, strict, opts) {
1621                        var isValid = opts.regex.val1.test(chrs);
1622                        return strict || isValid || chrs.charAt(1) !== opts.separator && -1 === "-./".indexOf(chrs.charAt(1)) || !(isValid = opts.regex.val1.test("0" + chrs.charAt(0))) ? isValid : (maskset.buffer[pos - 1] = "0", 
1623                        {
1624                            refreshFromBuffer: {
1625                                start: pos - 1,
1626                                end: pos
1627                            },
1628                            pos: pos,
1629                            c: chrs.charAt(0)
1630                        });
1631                    },
1632                    cardinality: 2,
1633                    prevalidator: [ {
1634                        validator: function(chrs, maskset, pos, strict, opts) {
1635                            var pchrs = chrs;
1636                            isNaN(maskset.buffer[pos + 1]) || (pchrs += maskset.buffer[pos + 1]);
1637                            var isValid = 1 === pchrs.length ? opts.regex.val1pre.test(pchrs) : opts.regex.val1.test(pchrs);
1638                            if (!strict && !isValid) {
1639                                if (isValid = opts.regex.val1.test(chrs + "0")) return maskset.buffer[pos] = chrs, 
1640                                maskset.buffer[++pos] = "0", {
1641                                    pos: pos,
1642                                    c: "0"
1643                                };
1644                                if (isValid = opts.regex.val1.test("0" + chrs)) return maskset.buffer[pos] = "0", 
1645                                pos++, {
1646                                    pos: pos
1647                                };
1648                            }
1649                            return isValid;
1650                        },
1651                        cardinality: 1
1652                    } ]
1653                },
1654                "2": {
1655                    validator: function(chrs, maskset, pos, strict, opts) {
1656                        var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);
1657                        -1 !== frontValue.indexOf(opts.placeholder[0]) && (frontValue = "01" + opts.separator);
1658                        var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs);
1659                        if (!strict && !isValid && (chrs.charAt(1) === opts.separator || -1 !== "-./".indexOf(chrs.charAt(1))) && (isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs.charAt(0)))) return maskset.buffer[pos - 1] = "0", 
1660                        {
1661                            refreshFromBuffer: {
1662                                start: pos - 1,
1663                                end: pos
1664                            },
1665                            pos: pos,
1666                            c: chrs.charAt(0)
1667                        };
1668                        if (opts.mask.indexOf("2") === opts.mask.length - 1 && isValid) {
1669                            var dayMonthValue = maskset.buffer.join("").substr(4, 4) + chrs;
1670                            if (dayMonthValue !== opts.leapday) return !0;
1671                            var year = parseInt(maskset.buffer.join("").substr(0, 4), 10);
1672                            return year % 4 === 0 ? year % 100 === 0 ? year % 400 === 0 ? !0 : !1 : !0 : !1;
1673                        }
1674                        return isValid;
1675                    },
1676                    cardinality: 2,
1677                    prevalidator: [ {
1678                        validator: function(chrs, maskset, pos, strict, opts) {
1679                            isNaN(maskset.buffer[pos + 1]) || (chrs += maskset.buffer[pos + 1]);
1680                            var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);
1681                            -1 !== frontValue.indexOf(opts.placeholder[0]) && (frontValue = "01" + opts.separator);
1682                            var isValid = 1 === chrs.length ? opts.regex.val2pre(opts.separator).test(frontValue + chrs) : opts.regex.val2(opts.separator).test(frontValue + chrs);
1683                            return strict || isValid || !(isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs)) ? isValid : (maskset.buffer[pos] = "0", 
1684                            pos++, {
1685                                pos: pos
1686                            });
1687                        },
1688                        cardinality: 1
1689                    } ]
1690                },
1691                y: {
1692                    validator: function(chrs, maskset, pos, strict, opts) {
1693                        if (opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {
1694                            var dayMonthValue = maskset.buffer.join("").substr(0, 6);
1695                            if (dayMonthValue !== opts.leapday) return !0;
1696                            var year = parseInt(chrs, 10);
1697                            return year % 4 === 0 ? year % 100 === 0 ? year % 400 === 0 ? !0 : !1 : !0 : !1;
1698                        }
1699                        return !1;
1700                    },
1701                    cardinality: 4,
1702                    prevalidator: [ {
1703                        validator: function(chrs, maskset, pos, strict, opts) {
1704                            var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
1705                            if (!strict && !isValid) {
1706                                var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 1);
1707                                if (isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0), 
1708                                {
1709                                    pos: pos
1710                                };
1711                                if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 2), 
1712                                isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0), 
1713                                maskset.buffer[pos++] = yearPrefix.charAt(1), {
1714                                    pos: pos
1715                                };
1716                            }
1717                            return isValid;
1718                        },
1719                        cardinality: 1
1720                    }, {
1721                        validator: function(chrs, maskset, pos, strict, opts) {
1722                            var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
1723                            if (!strict && !isValid) {
1724                                var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);
1725                                if (isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(1), 
1726                                {
1727                                    pos: pos
1728                                };
1729                                if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2), 
1730                                opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {
1731                                    var dayMonthValue = maskset.buffer.join("").substr(0, 6);
1732                                    if (dayMonthValue !== opts.leapday) isValid = !0; else {
1733                                        var year = parseInt(chrs, 10);
1734                                        isValid = year % 4 === 0 ? year % 100 === 0 ? year % 400 === 0 ? !0 : !1 : !0 : !1;
1735                                    }
1736                                } else isValid = !1;
1737                                if (isValid) return maskset.buffer[pos - 1] = yearPrefix.charAt(0), maskset.buffer[pos++] = yearPrefix.charAt(1), 
1738                                maskset.buffer[pos++] = chrs.charAt(0), {
1739                                    refreshFromBuffer: {
1740                                        start: pos - 3,
1741                                        end: pos
1742                                    },
1743                                    pos: pos
1744                                };
1745                            }
1746                            return isValid;
1747                        },
1748                        cardinality: 2
1749                    }, {
1750                        validator: function(chrs, maskset, pos, strict, opts) {
1751                            return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
1752                        },
1753                        cardinality: 3
1754                    } ]
1755                }
1756            },
1757            insertMode: !1,
1758            autoUnmask: !1
1759        },
1760        "mm/dd/yyyy": {
1761            placeholder: "mm/dd/yyyy",
1762            alias: "dd/mm/yyyy",
1763            regex: {
1764                val2pre: function(separator) {
1765                    var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
1766                    return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])");
1767                },
1768                val2: function(separator) {
1769                    var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
1770                    return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)");
1771                },
1772                val1pre: new RegExp("[01]"),
vendor: 7,565 bytes, lines 1773-1947
1773                val1: new RegExp("0[1-9]|1[012]")
1774            },
1775            leapday: "02/29/",
1776            onKeyDown: function(e, buffer, caretPos, opts) {
1777                var $input = $(this);
1778                if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
1779                    var today = new Date();
1780                    $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()), 
1781                    $input.trigger("setvalue");
1782                }
1783            }
1784        },
1785        "yyyy/mm/dd": {
1786            mask: "y/1/2",
1787            placeholder: "yyyy/mm/dd",
1788            alias: "mm/dd/yyyy",
1789            leapday: "/02/29",
1790            onKeyDown: function(e, buffer, caretPos, opts) {
1791                var $input = $(this);
1792                if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
1793                    var today = new Date();
1794                    $input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString()), 
1795                    $input.trigger("setvalue");
1796                }
1797            }
1798        },
1799        "dd.mm.yyyy": {
1800            mask: "1.2.y",
1801            placeholder: "dd.mm.yyyy",
1802            leapday: "29.02.",
1803            separator: ".",
1804            alias: "dd/mm/yyyy"
1805        },
1806        "dd-mm-yyyy": {
1807            mask: "1-2-y",
1808            placeholder: "dd-mm-yyyy",
1809            leapday: "29-02-",
1810            separator: "-",
1811            alias: "dd/mm/yyyy"
1812        },
1813        "mm.dd.yyyy": {
1814            mask: "1.2.y",
1815            placeholder: "mm.dd.yyyy",
1816            leapday: "02.29.",
1817            separator: ".",
1818            alias: "mm/dd/yyyy"
1819        },
1820        "mm-dd-yyyy": {
1821            mask: "1-2-y",
1822            placeholder: "mm-dd-yyyy",
1823            leapday: "02-29-",
1824            separator: "-",
1825            alias: "mm/dd/yyyy"
1826        },
1827        "yyyy.mm.dd": {
1828            mask: "y.1.2",
1829            placeholder: "yyyy.mm.dd",
1830            leapday: ".02.29",
1831            separator: ".",
1832            alias: "yyyy/mm/dd"
1833        },
1834        "yyyy-mm-dd": {
1835            mask: "y-1-2",
1836            placeholder: "yyyy-mm-dd",
1837            leapday: "-02-29",
1838            separator: "-",
1839            alias: "yyyy/mm/dd"
1840        },
1841        datetime: {
1842            mask: "1/2/y h:s",
1843            placeholder: "dd/mm/yyyy hh:mm",
1844            alias: "dd/mm/yyyy",
1845            regex: {
1846                hrspre: new RegExp("[012]"),
1847                hrs24: new RegExp("2[0-4]|1[3-9]"),
1848                hrs: new RegExp("[01][0-9]|2[0-4]"),
1849                ampm: new RegExp("^[a|p|A|P][m|M]"),
1850                mspre: new RegExp("[0-5]"),
1851                ms: new RegExp("[0-5][0-9]")
1852            },
1853            timeseparator: ":",
1854            hourFormat: "24",
1855            definitions: {
1856                h: {
1857                    validator: function(chrs, maskset, pos, strict, opts) {
1858                        if ("24" === opts.hourFormat && 24 === parseInt(chrs, 10)) return maskset.buffer[pos - 1] = "0", 
1859                        maskset.buffer[pos] = "0", {
1860                            refreshFromBuffer: {
1861                                start: pos - 1,
1862                                end: pos
1863                            },
1864                            c: "0"
1865                        };
1866                        var isValid = opts.regex.hrs.test(chrs);
1867                        if (!strict && !isValid && (chrs.charAt(1) === opts.timeseparator || -1 !== "-.:".indexOf(chrs.charAt(1))) && (isValid = opts.regex.hrs.test("0" + chrs.charAt(0)))) return maskset.buffer[pos - 1] = "0", 
1868                        maskset.buffer[pos] = chrs.charAt(0), pos++, {
1869                            refreshFromBuffer: {
1870                                start: pos - 2,
1871                                end: pos
1872                            },
1873                            pos: pos,
1874                            c: opts.timeseparator
1875                        };
1876                        if (isValid && "24" !== opts.hourFormat && opts.regex.hrs24.test(chrs)) {
1877                            var tmp = parseInt(chrs, 10);
1878                            return 24 === tmp ? (maskset.buffer[pos + 5] = "a", maskset.buffer[pos + 6] = "m") : (maskset.buffer[pos + 5] = "p", 
1879                            maskset.buffer[pos + 6] = "m"), tmp -= 12, 10 > tmp ? (maskset.buffer[pos] = tmp.toString(), 
1880                            maskset.buffer[pos - 1] = "0") : (maskset.buffer[pos] = tmp.toString().charAt(1), 
1881                            maskset.buffer[pos - 1] = tmp.toString().charAt(0)), {
1882                                refreshFromBuffer: {
1883                                    start: pos - 1,
1884                                    end: pos + 6
1885                                },
1886                                c: maskset.buffer[pos]
1887                            };
1888                        }
1889                        return isValid;
1890                    },
1891                    cardinality: 2,
1892                    prevalidator: [ {
1893                        validator: function(chrs, maskset, pos, strict, opts) {
1894                            var isValid = opts.regex.hrspre.test(chrs);
1895                            return strict || isValid || !(isValid = opts.regex.hrs.test("0" + chrs)) ? isValid : (maskset.buffer[pos] = "0", 
1896                            pos++, {
1897                                pos: pos
1898                            });
1899                        },
1900                        cardinality: 1
1901                    } ]
1902                },
1903                s: {
1904                    validator: "[0-5][0-9]",
1905                    cardinality: 2,
1906                    prevalidator: [ {
1907                        validator: function(chrs, maskset, pos, strict, opts) {
1908                            var isValid = opts.regex.mspre.test(chrs);
1909                            return strict || isValid || !(isValid = opts.regex.ms.test("0" + chrs)) ? isValid : (maskset.buffer[pos] = "0", 
1910                            pos++, {
1911                                pos: pos
1912                            });
1913                        },
1914                        cardinality: 1
1915                    } ]
1916                },
1917                t: {
1918                    validator: function(chrs, maskset, pos, strict, opts) {
1919                        return opts.regex.ampm.test(chrs + "m");
1920                    },
1921                    casing: "lower",
1922                    cardinality: 1
1923                }
1924            },
1925            insertMode: !1,
1926            autoUnmask: !1
1927        },
1928        datetime12: {
1929            mask: "1/2/y h:s t\\m",
1930            placeholder: "dd/mm/yyyy hh:mm xm",
1931            alias: "datetime",
1932            hourFormat: "12"
1933        },
1934        "mm/dd/yyyy hh:mm xm": {
1935            mask: "1/2/y h:s t\\m",
1936            placeholder: "mm/dd/yyyy hh:mm xm",
1937            alias: "datetime12",
1938            regex: {
1939                val2pre: function(separator) {
1940                    var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
1941                    return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])");
1942                },
1943                val2: function(separator) {
1944                    var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
1945                    return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)");
1946                },
1947                val1pre: new RegExp("[01]"),
vendor: 4,871 bytes, lines 1948-2085
1948                val1: new RegExp("0[1-9]|1[012]")
1949            },
1950            leapday: "02/29/",
1951            onKeyDown: function(e, buffer, caretPos, opts) {
1952                var $input = $(this);
1953                if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
1954                    var today = new Date();
1955                    $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()), 
1956                    $input.trigger("setvalue");
1957                }
1958            }
1959        },
1960        "hh:mm t": {
1961            mask: "h:s t\\m",
1962            placeholder: "hh:mm xm",
1963            alias: "datetime",
1964            hourFormat: "12"
1965        },
1966        "h:s t": {
1967            mask: "h:s t\\m",
1968            placeholder: "hh:mm xm",
1969            alias: "datetime",
1970            hourFormat: "12"
1971        },
1972        "hh:mm:ss": {
1973            mask: "h:s:s",
1974            placeholder: "hh:mm:ss",
1975            alias: "datetime",
1976            autoUnmask: !1
1977        },
1978        "hh:mm": {
1979            mask: "h:s",
1980            placeholder: "hh:mm",
1981            alias: "datetime",
1982            autoUnmask: !1
1983        },
1984        date: {
1985            alias: "dd/mm/yyyy"
1986        },
1987        "mm/yyyy": {
1988            mask: "1/y",
1989            placeholder: "mm/yyyy",
1990            leapday: "donotuse",
1991            separator: "/",
1992            alias: "mm/dd/yyyy"
1993        },
1994        shamsi: {
1995            regex: {
1996                val2pre: function(separator) {
1997                    var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
1998                    return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "[0-3])");
1999                },
2000                val2: function(separator) {
2001                    var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
2002                    return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[1-9]|1[012])" + escapedSeparator + "30)|((0[1-6])" + escapedSeparator + "31)");
2003                },
2004                val1pre: new RegExp("[01]"),
2005                val1: new RegExp("0[1-9]|1[012]")
2006            },
2007            yearrange: {
2008                minyear: 1300,
2009                maxyear: 1499
2010            },
2011            mask: "y/1/2",
2012            leapday: "/12/30",
2013            placeholder: "yyyy/mm/dd",
2014            alias: "mm/dd/yyyy",
2015            clearIncomplete: !0
2016        }
2017    }), Inputmask;
2018}(gKweri, Inputmask), function($, Inputmask) {
2019    return Inputmask.extendDefinitions({
2020        A: {
2021            validator: "[A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",
2022            cardinality: 1,
2023            casing: "upper"
2024        },
2025        "&": {
2026            validator: "[0-9A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",
2027            cardinality: 1,
2028            casing: "upper"
2029        },
2030        "#": {
2031            validator: "[0-9A-Fa-f]",
2032            cardinality: 1,
2033            casing: "upper"
2034        }
2035    }), Inputmask.extendAliases({
2036        url: {
2037            definitions: {
2038                i: {
2039                    validator: ".",
2040                    cardinality: 1
2041                }
2042            },
2043            mask: "(\\http://)|(\\http\\s://)|(ftp://)|(ftp\\s://)i{+}",
2044            insertMode: !1,
2045            autoUnmask: !1
2046        },
2047        ip: {
2048            mask: "i[i[i]].i[i[i]].i[i[i]].i[i[i]]",
2049            definitions: {
2050                i: {
2051                    validator: function(chrs, maskset, pos, strict, opts) {
2052                        return pos - 1 > -1 && "." !== maskset.buffer[pos - 1] ? (chrs = maskset.buffer[pos - 1] + chrs, 
2053                        chrs = pos - 2 > -1 && "." !== maskset.buffer[pos - 2] ? maskset.buffer[pos - 2] + chrs : "0" + chrs) : chrs = "00" + chrs, 
2054                        new RegExp("25[0-5]|2[0-4][0-9]|[01][0-9][0-9]").test(chrs);
2055                    },
2056                    cardinality: 1
2057                }
2058            },
2059            onUnMask: function(maskedValue, unmaskedValue, opts) {
2060                return maskedValue;
2061            }
2062        },
2063        email: {
2064            mask: "*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]",
2065            greedy: !1,
2066            onBeforePaste: function(pastedValue, opts) {
2067                return pastedValue = pastedValue.toLowerCase(), pastedValue.replace("mailto:", "");
2068            },
2069            definitions: {
2070                "*": {
2071                    validator: "[0-9A-Za-z!#$%&'*+/=?^_`{|}~-]",
2072                    cardinality: 1,
2073                    casing: "lower"
2074                },
2075                "-": {
2076                    validator: "[0-9A-Za-z-]",
2077                    cardinality: 1,
2078                    casing: "lower"
2079                }
2080            },
2081            onUnMask: function(maskedValue, unmaskedValue, opts) {
2082                return maskedValue;
2083            }
2084        },
2085        mac: {
2086            mask: "##:##:##:##:##:##"
2087        },
2088        vin: {
2089            mask: "V{13}9{4}",
2090            definitions: {
2091                V: {
2092                    validator: "[A-HJ-NPR-Za-hj-npr-z\\d]",
2093                    cardinality: 1,
2094                    casing: "upper"
2095                }
2096            },
2097            clearIncomplete: !0,
2098            autoUnmask: !0
2099        }
2100    }), Inputmask;
2101}(gKweri, Inputmask), function($, Inputmask) {
2102    return Inputmask.extendAliases({
2103        numeric: {
2104            mask: function(opts) {
2105                function autoEscape(txt) {
2106                    for (var escapedTxt = "", i = 0; i < txt.length; i++) escapedTxt += opts.definitions[txt.charAt(i)] || opts.optionalmarker.start === txt.charAt(i) || opts.optionalmarker.end === txt.charAt(i) || opts.quantifiermarker.start === txt.charAt(i) || opts.quantifiermarker.end === txt.charAt(i) || opts.groupmarker.start === txt.charAt(i) || opts.groupmarker.end === txt.charAt(i) || opts.alternatormarker === txt.charAt(i) ? "\\" + txt.charAt(i) : txt.charAt(i);
2107                    return escapedTxt;
2108                }
2109                if (0 !== opts.repeat && isNaN(opts.integerDigits) && (opts.integerDigits = opts.repeat), 
2110                opts.repeat = 0, opts.groupSeparator === opts.radixPoint && ("." === opts.radixPoint ? opts.groupSeparator = "," : "," === opts.radixPoint ? opts.groupSeparator = "." : opts.groupSeparator = ""), 
2111                " " === opts.groupSeparator && (opts.skipOptionalPartCharacter = void 0), opts.autoGroup = opts.autoGroup && "" !== opts.groupSeparator, 
2112                opts.autoGroup && ("string" == typeof opts.groupSize && isFinite(opts.groupSize) && (opts.groupSize = parseInt(opts.groupSize)), 
2113                isFinite(opts.integerDigits))) {
2114                    var seps = Math.floor(opts.integerDigits / opts.groupSize), mod = opts.integerDigits % opts.groupSize;
2115                    opts.integerDigits = parseInt(opts.integerDigits) + (0 === mod ? seps - 1 : seps), 
2116                    opts.integerDigits < 1 && (opts.integerDigits = "*");
2117                }
2118                opts.placeholder.length > 1 && (opts.placeholder = opts.placeholder.charAt(0)), 
2119                opts.radixFocus = opts.radixFocus && "" !== opts.placeholder && opts.integerOptional === !0, 
2120                opts.definitions[";"] = opts.definitions["~"], opts.definitions[";"].definitionSymbol = "~", 
2121                opts.numericInput === !0 && (opts.radixFocus = !1, opts.digitsOptional = !1, isNaN(opts.digits) && (opts.digits = 2), 
2122                opts.decimalProtect = !1);
2123                var mask = autoEscape(opts.prefix);
2124                return mask += "[+]", mask += opts.integerOptional === !0 ? "~{1," + opts.integerDigits + "}" : "~{" + opts.integerDigits + "}", 
2125                void 0 !== opts.digits && (isNaN(opts.digits) || parseInt(opts.digits) > 0) && (opts.decimalProtect && (opts.radixPointDefinitionSymbol = ":"), 
2126                mask += opts.digitsOptional ? "[" + (opts.decimalProtect ? ":" : opts.radixPoint) + ";{1," + opts.digits + "}]" : (opts.decimalProtect ? ":" : opts.radixPoint) + ";{" + opts.digits + "}"), 
2127                mask += "[-]", mask += autoEscape(opts.suffix), opts.greedy = !1, null !== opts.min && (opts.min = opts.min.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""), 
2128                "," === opts.radixPoint && (opts.min = opts.min.replace(opts.radixPoint, "."))), 
2129                null !== opts.max && (opts.max = opts.max.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""), 
2130                "," === opts.radixPoint && (opts.max = opts.max.replace(opts.radixPoint, "."))), 
2131                mask;
2132            },
2133            placeholder: "",
2134            greedy: !1,
2135            digits: "*",
2136            digitsOptional: !0,
2137            radixPoint: ".",
2138            radixFocus: !0,
2139            groupSize: 3,
2140            groupSeparator: "",
2141            autoGroup: !1,
2142            allowPlus: !0,
2143            allowMinus: !0,
2144            negationSymbol: {
2145                front: "-",
2146                back: ""
2147            },
2148            integerDigits: "+",
2149            integerOptional: !0,
2150            prefix: "",
2151            suffix: "",
2152            rightAlign: !0,
2153            decimalProtect: !0,
2154            min: null,
2155            max: null,
2156            step: 1,
2157            insertMode: !0,
2158            autoUnmask: !1,
2159            unmaskAsNumber: !1,
2160            postFormat: function(buffer, pos, opts) {
2161                opts.numericInput === !0 && (buffer = buffer.reverse(), isFinite(pos) && (pos = buffer.join("").length - pos - 1));
2162                var i, l, suffixStripped = !1;
2163                buffer.length >= opts.suffix.length && buffer.join("").indexOf(opts.suffix) === buffer.length - opts.suffix.length && (buffer.length = buffer.length - opts.suffix.length, 
2164                suffixStripped = !0), pos = pos >= buffer.length ? buffer.length - 1 : pos < opts.prefix.length ? opts.prefix.length : pos;
2165                var needsRefresh = !1, charAtPos = buffer[pos], cbuf = buffer.slice();
2166                charAtPos === opts.groupSeparator && (cbuf.splice(pos--, 1), charAtPos = cbuf[pos]
2166), 
2167                charAtPos !== opts.radixPoint && charAtPos !== opts.negationSymbol.front && charAtPos !== opts.negationSymbol.back && (cbuf[pos] = "?");
2168                var bufVal = cbuf.join(""), bufValOrigin = bufVal;
2169                if (bufVal.length > 0 && opts.autoGroup || -1 !== bufVal.indexOf(opts.groupSeparator)) {
2170                    var escapedGroupSeparator = Inputmask.escapeRegex(opts.groupSeparator);
2171                    needsRefresh = 0 === bufVal.indexOf(opts.groupSeparator), bufVal = bufVal.replace(new RegExp(escapedGroupSeparator, "g"), "");
2172                    var radixSplit = bufVal.split(opts.radixPoint);
2173                    if (bufVal = "" === opts.radixPoint ? bufVal : radixSplit[0], bufVal !== opts.prefix + "?0" && bufVal.length >= opts.groupSize + opts.prefix.length) for (var reg = new RegExp("([-+]?[\\d?]+)([\\d?]{" + opts.groupSize + "})"); reg.test(bufVal) && "" !== opts.groupSeparator; ) bufVal = bufVal.replace(reg, "$1" + opts.groupSeparator + "$2"), 
2174                    bufVal = bufVal.replace(opts.groupSeparator + opts.groupSeparator, opts.groupSeparator);
2175                    "" !== opts.radixPoint && radixSplit.length > 1 && (bufVal += opts.radixPoint + radixSplit[1]);
2176                }
2177                for (needsRefresh = bufValOrigin !== bufVal, buffer.length = bufVal.length, i = 0, 
2178                l = bufVal.length; l > i; i++) buffer[i] = bufVal.charAt(i);
2179                var newPos = $.inArray("?", buffer);
2180                if (-1 === newPos && (newPos = $.inArray(charAtPos, buffer)), buffer[newPos] = charAtPos, 
2181                !needsRefresh && suffixStripped) for (i = 0, l = opts.suffix.length; l > i; i++) buffer.push(opts.suffix.charAt(i));
2182                return newPos = opts.numericInput && isFinite(pos) ? buffer.join("").length - newPos - 1 : newPos, 
2183                opts.numericInput && (buffer = buffer.reverse(), $.inArray(opts.radixPoint, buffer) < newPos && buffer.join("").length - opts.suffix.length !== newPos && (newPos -= 1)), 
2184                {
2185                    pos: newPos,
2186                    refreshFromBuffer: needsRefresh,
2187                    buffer: buffer
2188                };
2189            },
2190            onBeforeWrite: function(e, buffer, caretPos, opts) {
2191                var rslt;
2192                if (e && ("blur" === e.type || "checkval" === e.type || "keydown" === e.type)) {
2193                    var maskedValue = opts.numericInput ? buffer.slice().reverse().join("") : buffer.join(""), processValue = maskedValue.replace(opts.prefix, "");
2194                    processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""), 
2195                    "," === opts.radixPoint && (processValue = processValue.replace(opts.radixPoint, "."));
2196                    var isNegative = processValue.match(new RegExp("[-" + Inputmask.escapeRegex(opts.negationSymbol.front) + "]", "g"));
2197                    if (isNegative = null !== isNegative && 1 === isNegative.length, processValue = processValue.replace(new RegExp("[-" + Inputmask.escapeRegex(opts.negationSymbol.front) + "]", "g"), ""), 
2198                    processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + "$"), ""), 
2199                    isNaN(opts.placeholder) && (processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.placeholder), "g"), "")), 
2200                    processValue = processValue === opts.negationSymbol.front ? processValue + "0" : processValue, 
2201                    "" !== processValue && isFinite(processValue)) {
2202                        var floatValue = parseFloat(processValue), signedFloatValue = isNegative ? -1 * floatValue : floatValue;
2203                        if (null !== opts.min && isFinite(opts.min) && signedFloatValue < parseFloat(opts.min) ? (floatValue = Math.abs(opts.min), 
2204                        isNegative = opts.min < 0, maskedValue = void 0) : null !== opts.max && isFinite(opts.max) && signedFloatValue > parseFloat(opts.max) && (floatValue = Math.abs(opts.max), 
2205                        isNegative = opts.max < 0, maskedValue = void 0), processValue = floatValue.toString().replace(".", opts.radixPoint).split(""), 
2206                        isFinite(opts.digits)) {
2207                            var radixPosition = $.inArray(opts.radixPoint, processValue), rpb = $.inArray(opts.radixPoint, maskedValue);
2208                            -1 === radixPosition && (processValue.push(opts.radixPoint), radixPosition = processValue.length - 1);
2209                            for (var i = 1; i <= opts.digits; i++) opts.digitsOptional || void 0 !== processValue[radixPosition + i] && processValue[radixPosition + i] !== opts.placeholder.charAt(0) ? -1 !== rpb && void 0 !== maskedValue[rpb + i] && (processValue[radixPosition + i] = processValue[radixPosition + i] || maskedValue[rpb + i]) : processValue[radixPosition + i] = "0";
2210                            processValue[processValue.length - 1] === opts.radixPoint && delete processValue[processValue.length - 1];
2211                        }
2212                        if (floatValue.toString() !== processValue && floatValue.toString() + "." !== processValue || isNegative) return !isNegative || 0 === floatValue && "blur" === e.type || (processValue.unshift(opts.negationSymbol.front), 
2213                        processValue.push(opts.negationSymbol.back)), processValue = (opts.prefix + processValue.join("")).split(""), 
2214                        opts.numericInput && (processValue = processValue.reverse()), rslt = opts.postFormat(processValue, opts.numericInput ? caretPos : caretPos - 1, opts), 
2215                        rslt.buffer && (rslt.refreshFromBuffer = rslt.buffer.join("") !== buffer.join("")), 
2216                        rslt;
2217                    }
2218                }
2219                return opts.autoGroup ? (rslt = opts.postFormat(buffer, opts.numericInput ? caretPos : caretPos - 1, opts), 
2220                rslt.caret = caretPos <= opts.prefix.length ? rslt.pos : rslt.pos + 1, rslt) 
2220: void 0;
2221            },
2222            regex: {
2223                integerPart: function(opts) {
2224                    return new RegExp("[" + Inputmask.escapeRegex(opts.negationSymbol.front) + "+]?\\d+");
2225                },
2226                integerNPart: function(opts) {
2227                    return new RegExp("[\\d" + Inputmask.escapeRegex(opts.groupSeparator) + Inputmask.escapeRegex(opts.placeholder.charAt(0)) + "]+");
2228                }
2229            },
2230            signHandler: function(chrs, maskset, pos, strict, opts) {
2231                if (!strict && opts.allowMinus && "-" === chrs || opts.allowPlus && "+" === chrs) {
2232                    var matchRslt = maskset.buffer.join("").match(opts.regex.integerPart(opts));
2233                    if (matchRslt && matchRslt[0].length > 0) return maskset.buffer[matchRslt.index] === ("-" === chrs ? "+" : opts.negationSymbol.front) ? "-" === chrs ? "" !== opts.negationSymbol.back ? {
2234                        pos: matchRslt.index,
2235                        c: opts.negationSymbol.front,
2236                        remove: matchRslt.index,
2237                        caret: pos,
2238                        insert: {
2239                            pos: maskset.buffer.length - opts.suffix.length - 1,
2240                            c: opts.negationSymbol.back
2241                        }
2242                    } : {
2243                        pos: matchRslt.index,
2244                        c: opts.negationSymbol.front,
2245                        remove: matchRslt.index,
2246                        caret: pos
2247                    } : "" !== opts.negationSymbol.back ? {
2248                        pos: matchRslt.index,
2249                        c: "+",
2250                        remove: [ matchRslt.index, maskset.buffer.length - opts.suffix.length - 1 ],
2251                        caret: pos
2252                    } : {
2253                        pos: matchRslt.index,
2254                        c: "+",
2255                        remove: matchRslt.index,
2256                        caret: pos
2257                    } : maskset.buffer[matchRslt.index] === ("-" === chrs ? opts.negationSymbol.front : "+") ? "-" === chrs && "" !== opts.negationSymbol.back ? {
2258                        remove: [ matchRslt.index, maskset.buffer.length - opts.suffix.length - 1 ],
2259                        caret: pos - 1
2260                    } : {
2261                        remove: matchRslt.index,
2262                        caret: pos - 1
2263                    } : "-" === chrs ? "" !== opts.negationSymbol.back ? {
2264                        pos: matchRslt.index,
2265                        c: opts.negationSymbol.front,
2266                        caret: pos + 1,
2267                        insert: {
2268                            pos: maskset.buffer.length - opts.suffix.length,
2269                            c: opts.negationSymbol.back
2270                        }
2271                    } : {
2272                        pos: matchRslt.index,
2273                        c: opts.negationSymbol.front,
2274                        caret: pos + 1
2275                    } : {
2276                        pos: matchRslt.index,
2277                        c: chrs,
2278                        caret: pos + 1
2279                    };
2280                }
2281                return !1;
2282            },
2283            radixHandler: function(chrs, maskset, pos, strict, opts) {
2284                if (!strict && opts.numericInput !== !0 && chrs === opts.radixPoint && void 0 !== opts.digits && (isNaN(opts.digits) || parseInt(opts.digits) > 0)) {
2285                    var radixPos = $.inArray(opts.radixPoint, maskset.buffer), integerValue = maskset.buffer.join("").match(opts.regex.integerPart(opts));
2286                    if (-1 !== radixPos && maskset.validPositions[radixPos]) return maskset.validPositions[radixPos - 1] ? {
2287                        caret: radixPos + 1
2288                    } : {
2289                        pos: integerValue.index,
2290                        c: integerValue[0],
2291                        caret: radixPos + 1
2292                    };
2293                    if (!integerValue || "0" === integerValue[0] && integerValue.index + 1 !== pos) return maskset.buffer[integerValue ? integerValue.index : pos] = "0", 
2294                    {
2295                        pos: (integerValue ? integerValue.index : pos) + 1,
2296                        c: opts.radixPoint
2297                    };
2298                }
2299                return !1;
2300            },
2301            leadingZeroHandler: function(chrs, maskset, pos, strict, opts, isSelection) {
2302                if (!strict) if (opts.numericInput === !0) {
2303                    var buffer = maskset.buffer.slice("").reverse(), char = buffer[opts.prefix.length];
2304                    if ("0" === char && void 0 === maskset.validPositions[pos - 1]) return {
2305                        pos: pos,
2306                        remove: buffer.length - opts.prefix.length - 1
2307                    };
2308                } else {
2309                    var radixPosition = $.inArray(opts.radixPoint, maskset.buffer), matchRslt = maskset.buffer.slice(0, -1 !== radixPosition ? radixPosition : void 0).join("").match(opts.regex.integerNPart(opts));
2310                    if (matchRslt && (-1 === radixPosition || radixPosition >= pos)) {
2311                        var decimalPart = -1 === radixPosition ? 0 : parseInt(maskset.buffer.slice(radixPosition + 1).join(""));
2312                        if (0 === matchRslt[0].indexOf("" !== opts.placeholder ? opts.placeholder.charAt(0) : "0") && (matchRslt.index + 1 === pos || isSelection !== !0 && 0 === decimalPart)) return maskset.buffer.splice(matchRslt.index, 1), 
2313                        {
2314                            pos: matchRslt.index,
2315                            remove: matchRslt.index
2316                        };
2317                        if ("0" === chrs && pos <= matchRslt.index && matchRslt[0] !== opts.groupSeparator) return !1;
2318                    }
2319                }
2320                return !0;
2321            },
2322            definitions: {
2323                "~": {
2324                    validator: function(chrs, maskset, pos, strict, opts, isSelection) {
2325                        var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);
2326                        if (!isValid && (isValid = opts.radixHandler(chrs, maskset, pos, strict, opts), 
2327                        !isValid && (isValid = strict ? new RegExp("[0-9" + Inputmask.escapeRegex(opts.groupSeparator) + "]").test(chrs) : new RegExp("[0-9]").test(chrs), 
2328                        isValid === !0 && (isValid = opts.leadingZeroHandler(chrs, maskset, pos, strict, opts, isSelection), 
2329                        isValid === !0)))) {
2330                            var radixPosition = $.inArray(opts.radixPoint, maskset.buffer);
2331                            isValid = -1 !== radixPosition && (opts.digitsOptional === !1 || maskset.validPositions[pos]) && opts.numericInput !== !0 && pos > radixPosition && !strict ? {
2332                                pos: pos,
2333                                remove: pos
2334                            } : {
2335                                pos: pos
2336                            };
2337                        }
2338                        return isValid;
2339                    },
2340                    cardinality: 1
2341                },
2342                "+": {
2343                    validator: function(chrs, maskset, pos, strict, opts) {
2344                        var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);
2345                        return !isValid && (strict && opts.allowMinus && chrs === opts.negationSymbol.front || opts.allowMinus && "-" === chrs || opts.allowPlus && "+" === chrs) && (isValid = strict || "-" !== chrs ? !0 : "" !== opts.negationSymbol.back ? {
2346                            pos: pos,
2347                            c: "-" === chrs ? opts.negationSymbol.front : "+",
2348                            caret: pos + 1,
2349                            insert: {
2350                                pos: maskset.buffer.length,
2351                                c: opts.negationSymbol.back
2352                            }
2353                        } : {
2354                            pos: pos,
2355                            c: "-" === chrs ? opts.negationSymbol.front : "+",
2356                            caret: pos + 1
2357                        }), isValid;
2358                    },
2359                    cardinality: 1,
2360                    placeholder: ""
2361                },
2362                "-": {
2363                    validator: function(chrs, maskset, pos, strict, opts) {
2364                        var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);
2365                        return !isValid && strict && opts.allowMinus && chrs === opts.negationSymbol.back && (isValid = !0), 
2366                        isValid;
2367                    },
2368                    cardinality: 1,
2369                    placeholder: ""
2370                },
2371                ":": {
2372                    validator: function(chrs, maskset, pos, strict, opts) {
2373                        var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);
2374                        if (!isValid) {
2375                            var radix = "[" + Inputmask.escapeRegex(opts.radixPoint) + "]";
2376                            isValid = new RegExp(radix).test(chrs), isValid && maskset.validPositions[pos] && maskset.validPositions[pos].match.placeholder === opts.radixPoint && (isValid = {
2377                                caret: pos + 1
2378                            });
2379                        }
2380                        return isValid ? {
2381                            c: opts.radixPoint
2382                        } : isValid;
2383                    },
2384                    cardinality: 1,
2385                    placeholder: function(opts) {
2386                        return opts.radixPoint;
2387                    }
2388                }
2389            },
2390            onUnMask: function(maskedValue, unmaskedValue, opts) {
2391                var processValue = maskedValue.replace(opts.prefix, "");
2392                return processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""), 
2393                opts.unmaskAsNumber ? ("" !== opts.radixPoint && -1 !== processValue.indexOf(opts.radixPoint) && (processValue = processValue.replace(Inputmask.escapeRegex.call(this, opts.radixPoint), ".")), 
2394                Number(processValue)) : processValue;
2395            },
2396            isComplete: function(buffer, opts) {
2397                var maskedValue = buffer.join(""), bufClone = buffer.slice();
2398                if (opts.postFormat(bufClone, 0, opts), bufClone.join("") !== maskedValue) return !1;
2399                var processValue = maskedValue.replace(opts.prefix, "");
2400                return processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""), 
2401                "," === opts.radixPoint && (processValue = processValue.replace(Inputmask.escapeRegex(opts.radixPoint), ".")), 
2402                isFinite(processValue);
2403            },
2404            onBeforeMask: function(initialValue, opts) {
2405                if ("" !== opts.radixPoint && isFinite(initialValue)) initialValue = initialValue.toString().replace(".", opts.radixPoint); else {
2406                    var kommaMatches = initialValue.match(/,/g), dotMatches = initialValue.match(/\./g);
2407                    dotMatches && kommaMatches ? dotMatches.length > kommaMatches.length ? (initialValue = initialValue.replace(/\./g, ""), 
2408                    initialValue = initialValue.replace(",", opts.radixPoint)) : kommaMatches.length > dotMatches.length ? (initialValue = initialValue.replace(/,/g, ""), 
2409                    initialValue = initialValue.replace(".", opts.radixPoint)) : initialValue = initialValue.indexOf(".") < initialValue.indexOf(",") ? initialValue.replace(/\./g, "") : initialValue = initialValue.replace(/,/g, "") : initialValue = initialValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), "");
2410                }
2411                if (0 === opts.digits && (-1 !== initialValue.indexOf(".") ? initialValue = initialValue.substring(0, initialValue.indexOf(".")) : -1 !== initialValue.indexOf(",") && (initialValue = initialValue.substring(0, initialValue.indexOf(",")))), 
2412                "" !== opts.radixPoint && isFinite(opts.digits) && -1 !== initialValue.indexOf(opts.radixPoint)) {
2413                    var valueParts = initialValue.split(opts.radixPoint), decPart = valueParts[1].match(new RegExp("\\d*"))[0];
2414                    if (parseInt(opts.digits) < decPart.toString().length) {
2415                        var digitsFactor = Math.pow(10, parseInt(opts.digits));
2416                        initialValue = initialValue.replace(Inputmask.escapeRegex(opts.radixPoint), "."), 
2417                        initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor, 
2418                        initialValue = initialValue.toString().replace(".", opts.radixPoint);
2419                    }
2420                }
2421                return initialValue.toString();
2422            },
2423            canClearPosition: function(maskset, position, lvp, strict, opts) {
2424                var positionInput = maskset.validPositions[position].input, canClear = positionInput !== opts.radixPoint || null !== maskset.validPositions[position].match.fn && opts.decimalProtect === !1 || isFinite(positionInput) || position === lvp || positionInput === opts.groupSeparator || positionInput === opts.negationSymbol.front || positionInput === opts.negationSymbol.back;
2425                return canClear;
2426            },
2427            onKeyDown: function(e, buffer, caretPos, opts) {
2428                var $input = $(this);
2429                if (e.ctrlKey) switch (e.keyCode) {
2430                  case Inputmask.keyCode.UP:
2431                    $input.val(parseFloat(this.inputmask.unmaskedvalue()) + parseInt(opts.step)), $input.trigger("setvalue");
2432                    break;
2433
2434                  case Inputmask.keyCode.DOWN:
2435                    $input.val(parseFloat(this.inputmask.unmaskedvalue()) - parseInt(opts.step)), $input.trigger("setvalue");
2436                }
2437            }
2438        },
2439        currency: {
2440            prefix: "$ ",
2441            groupSeparator: ",",
2442            alias: "numeric",
2443            placeholder: "0",
2444            autoGroup: !0,
2445            digits: 2,
2446            digitsOptional: !1,
2447            clearMaskOnLostFocus: !1
2448        },
2449        decimal: {
2450            alias: "numeric"
2451        },
2452        integer: {
2453            alias: "numeric",
2454            digits: 0,
2455            radixPoint: ""
2456        },
2457        percentage: {
2458            alias: "numeric",
2459            digits: 2,
2460            radixPoint: ".",
2461            placeholder: "0",
2462            autoGroup: !1,
2463            min: 0,
2464            max: 100,
2465            suffix: " %",
2466            allowPlus: !1,
2467            allowMinus: !1
2468        }
2469    }), Inputmask;
2470}(gKweri, Inputmask), function($, Inputmask) {
2471    return Inputmask.extendAliases({
2472        phone: {
2473            url: "phone-codes/phone-codes.js",
2474            countrycode: "",
2475            phoneCodeCache: {},
2476            mask: function(opts) {
2477                if (void 0 === opts.phoneCodeCache[opts.url]) {
2478                    var maskList = [];
2479                    opts.definitions["#"] = opts.definitions[9], $.ajax({
2480                        url: opts.url,
2481                        async: !1,
2482                        type: "get",
2483                        dataType: "json",
2484                        success: function(response) {
2485                            maskList = response;
2486                        },
2487                        error: function(xhr, ajaxOptions, thrownError) {
2488                            alert(thrownError + " - " + opts.url);
2489                        }
2490                    }), opts.phoneCodeCache[opts.url] = maskList.sort(function(a, b) {
2491                        return (a.mask || a) < (b.mask || b) ? -1 : 1;
2492                    });
2493                }
2494                return opts.phoneCodeCache[opts.url];
2495            },
2496            keepStatic: !1,
2497            nojumps: !0,
2498            nojumpsThreshold: 1,
2499            onBeforeMask: function(value, opts) {
2500                var processedValue = value.replace(/^0{1,2}/, "").replace(/[\s]/g, "");
2501                return (processedValue.indexOf(opts.countrycode) > 1 || -1 === processedValue.indexOf(opts.countrycode)) && (processedValue = "+" + opts.countrycode + processedValue), 
2502                processedValue;
2503            }
2504        },
2505        phonebe: {
2506            alias: "phone",
2507            url: "phone-codes/phone-be.js",
2508            countrycode: "32",
2509            nojumpsThreshold: 4
2510        }
2511    }), Inputmask;
2512}(gKweri, Inputmask), function($, Inputmask) {
2513    return Inputmask.extendAliases({
2514        Regex: {
2515            mask: "r",
2516            greedy: !1,
2517            repeat: "*",
2518            regex: null,
2519            regexTokens: null,
2520            tokenizer: /\[\^?]?(?:[^\\\]]+|\\[\S\s]?)*]?|\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\S\s]?)|\((?:\?[:=!]?)?|(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??|[^.?*+^${[()|\\]+|./g,
2521            quantifierFilter: /[0-9]+[^,]/,
2522            isComplete: function(buffer, opts) {
2523                return new RegExp(opts.regex).test(buffer.join(""));
2524            },
2525            definitions: {
2526                r: {
2527                    validator: function(chrs, maskset, pos, strict, opts) {
2528                        function RegexToken(isGroup, isQuantifier) {
2529                            this.matches = [], this.isGroup = isGroup || !1, this.isQuantifier = isQuantifier || !1, 
2530                            this.quantifier = {
2531                                min: 1,
2532                                max: 1
2533                            }, this.repeaterPart = void 0;
2534                        }
2535                        function analyseRegex() {
2536                            var match, m, currentToken = new RegexToken(), opengroups = [];
2537                            for (opts.regexTokens = []; match = opts.tokenizer.exec(opts.regex); ) switch (m = match[0], 
2538                            m.charAt(0)) {
2539                              case "(":
2540                                opengroups.push(new RegexToken(!0));
2541                                break;
2542
2543                              case ")":
2544                                groupToken = opengroups.pop(), opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(groupToken) : currentToken.matches.push(groupToken);
2545                                break;
2546
2547                              case "{":
2548                              case "+":
2549                              case "*":
2550                                var quantifierToken = new RegexToken(!1, !0);
2551                                m = m.replace(/[{}]/g, "");
2552                                var mq = m.split(","), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);
2553                                if (quantifierToken.quantifier = {
2554                                    min: mq0,
2555                                    max: mq1
2556                                }, opengroups.length > 0) {
2557                                    var matches = opengroups[opengroups.length - 1].matches;
2558                                    match = matches.pop(), match.isGroup || (groupToken = new RegexToken(!0), groupToken.matches.push(match), 
2559                                    match = groupToken), matches.push(match), matches.push(quantifierToken);
2560                                } else match = currentToken.matches.pop(), match.isGroup || (groupToken = new RegexToken(!0), 
2561                                groupToken.matches.push(match), match = groupToken), currentToken.matches.push(match), 
2562                                currentToken.matches.push(quantifierToken);
2563                                break;
2564
2565                              default:
2566                                opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(m) : currentToken.matches.push(m);
2567                            }
2568                            currentToken.matches.length > 0 && opts.regexTokens.push(currentToken);
2569                        }
2570                        function validateRegexToken(token, fromGroup) {
2571                            var isvalid = !1;
2572                            fromGroup && (regexPart += "(", openGroupCount++);
2573                            for (var mndx = 0; mndx < token.matches.length; mndx++) {
2574                                var matchToken = token.matches[mndx];
2575                                if (matchToken.isGroup === !0) isvalid = validateRegexToken(matchToken, !0); else if (matchToken.isQuantifier === !0) {
2576                                    var crrntndx = $.inArray(matchToken, token.matches), matchGroup = token.matches[crrntndx - 1], regexPartBak = regexPart;
2577                                    if (isNaN(matchToken.quantifier.max)) {
2578                                        for (;matchToken.repeaterPart && matchToken.repeaterPart !== regexPart && matchToken.repeaterPart.length > regexPart.length && !(isvalid = validateRegexToken(matchGroup, !0)); ) ;
2579                                        isvalid = isvalid || validateRegexToken(matchGroup, !0), isvalid && (matchToken.repeaterPart = regexPart), 
2580                                        regexPart = regexPartBak + matchToken.quantifier.max;
2581                                    } else {
2582                                        for (var i = 0, qm = matchToken.quantifier.max - 1; qm > i && !(isvalid = validateRegexToken(matchGroup, !0)); i++) ;
2583                                        regexPart = regexPartBak + "{" + matchToken.quantifier.min + "," + matchToken.quantifier.max + "}";
2584                                    }
2585                                } else if (void 0 !== matchToken.matches) for (var k = 0; k < matchToken.length && !(isvalid = validateRegexToken(matchToken[k], fromGroup)); k++) ; else {
2586                                    var testExp;
2587                                    if ("[" == matchToken.charAt(0)) {
2588                                        testExp = regexPart, testExp += matchToken;
2589                                        for (var j = 0; openGroupCount > j; j++) testExp += ")";
2590                                        var exp = new RegExp("^(" + testExp + ")$");
2591                                        isvalid = exp.test(bufferStr);
2592                                    } else for (var l = 0, tl = matchToken.length; tl > l; l++) if ("\\" !== matchToken.charAt(l)) {
2593                                        testExp = regexPart, testExp += matchToken.substr(0, l + 1), testExp = testExp.replace(/\|$/, "");
2594                                        for (var j = 0; openGroupCount > j; j++) testExp += ")";
2595                                        var exp = new RegExp("^(" + testExp + ")$");
2596                                        if (isvalid = exp.test(bufferStr)) break;
2597                                    }
2598                                    regexPart += matchToken;
2599                                }
2600                                if (isvalid) break;
2601                            }
2602                            return fromGroup && (regexPart += ")", openGroupCount--), isvalid;
2603                        }
2604                        var bufferStr, groupToken, cbuffer = maskset.buffer.slice(), regexPart = "", isValid = !1, openGroupCount = 0;
2605                        null === opts.regexTokens && analyseRegex(), cbuffer.splice(pos, 0, chrs), bufferStr = cbuffer.join("");
2606                        for (var i = 0; i < opts.regexTokens.length; i++) {
2607                            var regexToken = opts.regexTokens[i];
2608                            if (isValid = validateRegexToken(regexToken, regexToken.isGroup)) break;
2609                        }
2610                        return isValid;
2611                    },
2612                    cardinality: 1
2613                }
2614            }
2615        }
2616    }), Inputmask;
2617}(gKweri, Inputmask);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.