PageSourceSearch

https://everest.fapemig.br/Themes/js/jquery.inputmask.bundle.js

js fapemig.br collected 2026-09-24 09:00:59 UTC 149,465 bytes, 2,401 lines download raw bytes

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

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.