!function(b){"function"==typeof define&&define.amd?define(["jquery"],b):b("object"==typeof exports?require("jquery"):jQuery)}(function(g){var h,i=navigator.userAgent,j=/iphone/i.test(i),k=/chrome/i.test(i),l=/android/i.test(i);g.mask={definitions:{9:"[0-9]",a:"[A-Za-z]","*":"[A-Za-z0-9]"},autoclear:!0,dataName:"rawMaskFn",placeholder:"_"},g.fn.extend({caret:function(d,e){var f;if(0!==this.length&&!this.is(":hidden")){return"number"==typeof d?(e="number"==typeof e?e:d,this.each(function(){this.setSelectionRange?this.setSelectionRange(d,e):this.createTextRange&&(f=this.createTextRange(),f.collapse(!0),f.moveEnd("character",e),f.moveStart("character",d),f.select())})):(this[0].setSelectionRange?(d=this[0].selectionStart,e=this[0].selectionEnd):document.selection&&document.selection.createRange&&(f=document.selection.createRange(),d=0-f.duplicate().moveStart("character",-100000),e=d+f.text.length),{begin:d,end:e})}},unmask:function(){return this.trigger("unmask")},mask:function(a,b){var d,e,f,q,r,s,t,u;if(!a&&this.length>0){d=g(this[0]);var v=d.data(g.mask.dataName);return v?v():void 0}return b=g.extend({autoclear:g.mask.autoclear,placeholder:g.mask.placeholder,completed:null},b),e=g.mask.definitions,f=[],q=t=a.length,r=null,g.each(a.split(""),function(c,m){"?"==m?(t--,q=c):e[m]?(f.push(new RegExp(e[m])),null===r&&(r=f.length-1),q>c&&(s=f.length-1)):f.push(null)}),this.trigger("unmask").each(function(){function G(){if(b.completed){for(var p=r;s>=p;p++){if(f[p]&&n[p]===H(p)){return}}b.completed.call(m)}}function H(p){return b.placeholder.charAt(p<b.placeholder.length?p:0)}function I(p){for(;++p<t&&!f[p];){}return p}function J(p){for(;--p>=0&&!f[p];){}return p}function K(p,w){var x,y;if(!(0>p)){for(x=p,y=I(w);t>x;x++){if(f[x]){if(!(t>y&&f[x].test(n[y]))){break}n[x]=n[y],n[y]=H(y),y=I(y)}}R(),m.caret(Math.max(r,p))}}function L(p){var w,x,y,z;for(w=p,x=H(p);t>w;w++){if(f[w]){if(y=I(w),z=n[w],n[w]=x,!(t>y&&f[y].test(z))){break}x=z}}}function M(){var p=m.val(),w=m.caret();if(u&&u.length&&u.length>p.length){for(c(!0);w.begin>0&&!f[w.begin-1];){w.begin--}if(0===w.begin){for(;w.begin<r&&!f[w.begin];){w.begin++}}m.caret(w.begin,w.begin)}else{for(c(!0);w.begin<t&&!f[w.begin];){w.begin++}m.caret(w.begin,w.begin)}G()}function N(){c(),m.val()!=F&&m.change()}function O(p){if(!m.prop("readonly")){var w,x,y,z=p.which||p.keyCode;u=m.val(),8===z||46===z||j&&127===z?(w=m.caret(),x=w.begin,y=w.end,y-x===0&&(x=46!==z?J(x):y=I(x-1),y=46===z?I(y):y),Q(x,y),K(x,y-1),p.preventDefault()):13===z?N.call(this,p):27===z&&(m.val(F),m.caret(0,c()),p.preventDefault())}}function P(p){if(!m.prop("readonly")){var w,x,y,z=p.which||p.keyCode,A=m.caret();if(!(p.ctrlKey||p.altKey||p.metaKey||32>z)&&z&&13!==z){if(A.end-A.begin!==0&&(Q(A.begin,A.end),K(A.begin,A.end-1)),w=I(A.begin-1),t>w&&(x=String.fromCharCode(z),f[w].test(x))){if(L(w),n[w]=x,R(),y=I(w),l){var B=function(){g.proxy(g.fn.caret,m,y)()};setTimeout(B,0)}else{m.caret(y)}A.begin<=s&&G()}p.preventDefault()}}}function Q(p,w){var x;for(x=p;w>x&&t>x;x++){f[x]&&(n[x]=H(x))}}function R(){m.val(n.join(""))}function c(p){var w,x,y,z=m.val(),A=-1;for(w=0,y=0;t>w;w++){if(f[w]){for(n[w]=H(w);y++<z.length;){if(x=z.charAt(y-1),f[w].test(x)){n[w]=x,A=w;break}}if(y>z.length){Q(w+1,t);break}}else{n[w]===z.charAt(y)&&y++,q>w&&(A=w)}}return p?R():q>A+1?b.autoclear||n.join("")===o?(m.val()&&m.val(""),Q(0,t)):R():(R(),m.val(m.val().substring(0,A+1))),q?w:r}var m=g(this),n=g.map(a.split(""),function(p,w){return"?"!=p?e[p]?H(w):p:void 0}),o=n.join(""),F=m.val();m.data(g.mask.dataName,function(){return g.map(n,function(p,w){return f[w]&&p!=H(w)?p:null}).join("")}),m.one("unmask",function(){m.off(".mask").removeData(g.mask.dataName)}).on("focus.mask",function(){if(!m.prop("readonly")){clearTimeout(h);var p;F=m.val(),p=c(),h=setTimeout(function(){m.get(0)===document.activeElement&&(R(),p==a.replace("?","").length?m.caret(0,p):m.caret(p))},10)}}).on("blur.mask",N).on("keydown.mask",O).on("keypress.mask",P).on("input.mask paste.mask",function(){m.prop("readonly")||setTimeout(function(){var p=c(!0);m.caret(p),G()},0)}),k&&l&&m.off("input.mask").on("input.mask",M),c()})}})});